mirror of
https://github.com/emsesp/EMS-ESP32.git
synced 2026-01-31 19:19:08 +03:00
Merge pull request #1969 from proddy/dev
autodetect, download and install firmware upgrades
This commit is contained in:
@@ -5,7 +5,7 @@
|
|||||||
## **IMPORTANT! BREAKING CHANGES with 3.6.5**
|
## **IMPORTANT! BREAKING CHANGES with 3.6.5**
|
||||||
|
|
||||||
- new device WATER shows dhw entities from MM100 and SM100 in dhw setting
|
- new device WATER shows dhw entities from MM100 and SM100 in dhw setting
|
||||||
- renamed WWC to DHW, always create DHW nests/topics, remove ww prefix from mqtt names [#1634](https://github.com/emsesp/EMS-ESP32/issues/1634). To preserve current value of dhw energy (nrgww), follow ([#1938]https://github.com/emsesp/EMS-ESP32/issues/1938)
|
- renamed WWC to DHW, always create DHW nests/topics, remove ww prefix from mqtt names [#1634](https://github.com/emsesp/EMS-ESP32/issues/1634). To preserve current value of dhw energy (nrgww), follow ([#1938]<https://github.com/emsesp/EMS-ESP32/issues/1938>)
|
||||||
- change temperaturesensor id to underscore
|
- change temperaturesensor id to underscore
|
||||||
- system/info API command has it's JSON keys and names changed to camelCase
|
- system/info API command has it's JSON keys and names changed to camelCase
|
||||||
|
|
||||||
@@ -35,6 +35,7 @@
|
|||||||
- RC310 cooling parameters [#1857](https://github.com/emsesp/EMS-ESP32/issues/1857)
|
- RC310 cooling parameters [#1857](https://github.com/emsesp/EMS-ESP32/issues/1857)
|
||||||
- command `api/device/entities` [#1897](https://github.com/emsesp/EMS-ESP32/issues/1897)
|
- command `api/device/entities` [#1897](https://github.com/emsesp/EMS-ESP32/issues/1897)
|
||||||
- switchprogmode [#1903]<https://github.com/emsesp/EMS-ESP32/discussions/1903>
|
- switchprogmode [#1903]<https://github.com/emsesp/EMS-ESP32/discussions/1903>
|
||||||
|
- Autodetect and download firmware upgrades
|
||||||
|
|
||||||
## Fixed
|
## Fixed
|
||||||
|
|
||||||
|
|||||||
2
Makefile
2
Makefile
@@ -39,7 +39,7 @@ CXX_STANDARD := -std=gnu++14
|
|||||||
# Defined Symbols
|
# Defined Symbols
|
||||||
#----------------------------------------------------------------------
|
#----------------------------------------------------------------------
|
||||||
DEFINES += -DARDUINOJSON_ENABLE -DARDUINOJSON_ENABLE_ARDUINO_STRING -DARDUINOJSON_USE_DOUBLE=0
|
DEFINES += -DARDUINOJSON_ENABLE -DARDUINOJSON_ENABLE_ARDUINO_STRING -DARDUINOJSON_USE_DOUBLE=0
|
||||||
DEFINES += -DEMSESP_STANDALONE -DEMSESP_TEST -DEMC_RX_BUFFER_SIZE=1500
|
DEFINES += -DEMSESP_STANDALONE -DEMSESP_TEST -DEMSESP_DEBUG -DEMC_RX_BUFFER_SIZE=1500
|
||||||
DEFINES += $(ARGS)
|
DEFINES += $(ARGS)
|
||||||
|
|
||||||
DEFAULTS = -DEMSESP_DEFAULT_LOCALE=\"en\" -DEMSESP_DEFAULT_TX_MODE=8 -DEMSESP_DEFAULT_VERSION=\"3.7.0-dev\" -DEMSESP_DEFAULT_BOARD_PROFILE=\"S32\"
|
DEFAULTS = -DEMSESP_DEFAULT_LOCALE=\"en\" -DEMSESP_DEFAULT_TX_MODE=8 -DEMSESP_DEFAULT_VERSION=\"3.7.0-dev\" -DEMSESP_DEFAULT_BOARD_PROFILE=\"S32\"
|
||||||
|
|||||||
@@ -20,8 +20,6 @@ CS6800i/WLW176i,boiler,8,pumpmodmin,boiler pump min power,uint8 (>=0<=100),%,tru
|
|||||||
CS6800i/WLW176i,boiler,8,pumpmode,boiler pump mode,enum [proportional\|deltaP-1\|deltaP-2\|deltaP-3\|deltaP-4], ,true,select.boiler_boiler_pump_mode,select.boiler_pumpmode,5,0,1,18,1
|
CS6800i/WLW176i,boiler,8,pumpmode,boiler pump mode,enum [proportional\|deltaP-1\|deltaP-2\|deltaP-3\|deltaP-4], ,true,select.boiler_boiler_pump_mode,select.boiler_pumpmode,5,0,1,18,1
|
||||||
CS6800i/WLW176i,boiler,8,pumpcharacter,boiler pump characteristic,enum [proportional\|150mbar\|200mbar\|250mbar\|300mbar\|350mbar\|400mbar], ,true,select.boiler_boiler_pump_characteristic,select.boiler_pumpcharacter,5,0,1,19,1
|
CS6800i/WLW176i,boiler,8,pumpcharacter,boiler pump characteristic,enum [proportional\|150mbar\|200mbar\|250mbar\|300mbar\|350mbar\|400mbar], ,true,select.boiler_boiler_pump_characteristic,select.boiler_pumpcharacter,5,0,1,19,1
|
||||||
CS6800i/WLW176i,boiler,8,pumpdelay,pump delay,uint8 (>=0<=60),minutes,true,number.boiler_pump_delay,number.boiler_pumpdelay,5,0,1,20,1
|
CS6800i/WLW176i,boiler,8,pumpdelay,pump delay,uint8 (>=0<=60),minutes,true,number.boiler_pump_delay,number.boiler_pumpdelay,5,0,1,20,1
|
||||||
CS6800i/WLW176i,boiler,8,setflowtemp,set flow temperature,uint8 (>=0<=254),C,false,sensor.boiler_set_flow_temperature,sensor.boiler_setflowtemp,5,0,1,21,1
|
|
||||||
CS6800i/WLW176i,boiler,8,setburnpow,burner set power,uint8 (>=0<=100),%,false,sensor.boiler_burner_set_power,sensor.boiler_setburnpow,5,0,1,22,1
|
|
||||||
CS6800i/WLW176i,boiler,8,selburnpow,burner selected max power,uint8 (>=0<=254),%,true,number.boiler_burner_selected_max_power,number.boiler_selburnpow,5,0,1,23,1
|
CS6800i/WLW176i,boiler,8,selburnpow,burner selected max power,uint8 (>=0<=254),%,true,number.boiler_burner_selected_max_power,number.boiler_selburnpow,5,0,1,23,1
|
||||||
CS6800i/WLW176i,boiler,8,curburnpow,burner current power,uint8 (>=0<=100),%,false,sensor.boiler_burner_current_power,sensor.boiler_curburnpow,5,0,1,24,1
|
CS6800i/WLW176i,boiler,8,curburnpow,burner current power,uint8 (>=0<=100),%,false,sensor.boiler_burner_current_power,sensor.boiler_curburnpow,5,0,1,24,1
|
||||||
CS6800i/WLW176i,boiler,8,burnstarts,burner starts,uint24 (>=0<=16777213), ,false,sensor.boiler_burner_starts,sensor.boiler_burnstarts,5,0,1,25,2
|
CS6800i/WLW176i,boiler,8,burnstarts,burner starts,uint24 (>=0<=16777213), ,false,sensor.boiler_burner_starts,sensor.boiler_burnstarts,5,0,1,25,2
|
||||||
@@ -42,10 +40,12 @@ CS6800i/WLW176i,boiler,8,emergencytemp,emergency temperature,uint8 (>=15<=70),C,
|
|||||||
CS6800i/WLW176i,boiler,8,nrgtotal,total energy,uint24 (>=0<=167772),kWh,false,sensor.boiler_total_energy,sensor.boiler_nrgtotal,5,0,1/100,80,2
|
CS6800i/WLW176i,boiler,8,nrgtotal,total energy,uint24 (>=0<=167772),kWh,false,sensor.boiler_total_energy,sensor.boiler_nrgtotal,5,0,1/100,80,2
|
||||||
CS6800i/WLW176i,boiler,8,nrg,energy,uint24 (>=0<=167772),kWh,false,sensor.boiler_dhw_energy,sensor.boiler_dhw_nrg,5,9,1/100,0,2
|
CS6800i/WLW176i,boiler,8,nrg,energy,uint24 (>=0<=167772),kWh,false,sensor.boiler_dhw_energy,sensor.boiler_dhw_nrg,5,9,1/100,0,2
|
||||||
CS6800i/WLW176i,boiler,8,nrgheat,energy heating,uint24 (>=0<=167772),kWh,false,sensor.boiler_energy_heating,sensor.boiler_nrgheat,5,0,1/100,82,2
|
CS6800i/WLW176i,boiler,8,nrgheat,energy heating,uint24 (>=0<=167772),kWh,false,sensor.boiler_energy_heating,sensor.boiler_nrgheat,5,0,1/100,82,2
|
||||||
|
CS6800i/WLW176i,boiler,8,nrgcool,energy cooling,uint24 (>=0<=167772),kWh,false,sensor.boiler_energy_cooling,sensor.boiler_nrgcool,5,0,1/100,-1,2
|
||||||
CS6800i/WLW176i,boiler,8,metertotal,meter total,uint24 (>=0<=167772),kWh,false,sensor.boiler_meter_total,sensor.boiler_metertotal,5,0,1/100,84,2
|
CS6800i/WLW176i,boiler,8,metertotal,meter total,uint24 (>=0<=167772),kWh,false,sensor.boiler_meter_total,sensor.boiler_metertotal,5,0,1/100,84,2
|
||||||
CS6800i/WLW176i,boiler,8,metercomp,meter compressor,uint24 (>=0<=167772),kWh,false,sensor.boiler_meter_compressor,sensor.boiler_metercomp,5,0,1/100,86,2
|
CS6800i/WLW176i,boiler,8,metercomp,meter compressor,uint24 (>=0<=167772),kWh,false,sensor.boiler_meter_compressor,sensor.boiler_metercomp,5,0,1/100,86,2
|
||||||
CS6800i/WLW176i,boiler,8,metereheat,meter e-heater,uint24 (>=0<=167772),kWh,false,sensor.boiler_meter_e-heater,sensor.boiler_metereheat,5,0,1/100,88,2
|
CS6800i/WLW176i,boiler,8,metereheat,meter e-heater,uint24 (>=0<=167772),kWh,false,sensor.boiler_meter_e-heater,sensor.boiler_metereheat,5,0,1/100,88,2
|
||||||
CS6800i/WLW176i,boiler,8,meterheat,meter heating,uint24 (>=0<=167772),kWh,false,sensor.boiler_meter_heating,sensor.boiler_meterheat,5,0,1/100,90,2
|
CS6800i/WLW176i,boiler,8,meterheat,meter heating,uint24 (>=0<=167772),kWh,false,sensor.boiler_meter_heating,sensor.boiler_meterheat,5,0,1/100,90,2
|
||||||
|
CS6800i/WLW176i,boiler,8,metercool,meter cooling,uint24 (>=0<=167772),kWh,false,sensor.boiler_meter_cooling,sensor.boiler_metercool,5,0,1/100,-1,2
|
||||||
CS6800i/WLW176i,boiler,8,meter,meter,uint24 (>=0<=167772),kWh,false,sensor.boiler_dhw_meter,sensor.boiler_dhw_meter,5,9,1/100,2,2
|
CS6800i/WLW176i,boiler,8,meter,meter,uint24 (>=0<=167772),kWh,false,sensor.boiler_dhw_meter,sensor.boiler_dhw_meter,5,9,1/100,2,2
|
||||||
CS6800i/WLW176i,boiler,8,uptimetotal,heatpump total uptime,time (>=0<=279620),minutes,false,sensor.boiler_heatpump_total_uptime,sensor.boiler_uptimetotal,5,0,1/60,92,2
|
CS6800i/WLW176i,boiler,8,uptimetotal,heatpump total uptime,time (>=0<=279620),minutes,false,sensor.boiler_heatpump_total_uptime,sensor.boiler_uptimetotal,5,0,1/60,92,2
|
||||||
CS6800i/WLW176i,boiler,8,uptimecontrol,total operating time heat,time (>=0<=279620),minutes,false,sensor.boiler_total_operating_time_heat,sensor.boiler_uptimecontrol,5,0,1/60,94,2
|
CS6800i/WLW176i,boiler,8,uptimecontrol,total operating time heat,time (>=0<=279620),minutes,false,sensor.boiler_total_operating_time_heat,sensor.boiler_uptimecontrol,5,0,1/60,94,2
|
||||||
@@ -192,7 +192,6 @@ CS6800i/WLW176i,boiler,8,recharging,recharging,boolean, ,false,binary_sensor.boi
|
|||||||
CS6800i/WLW176i,boiler,8,tempok,temperature ok,boolean, ,false,binary_sensor.boiler_dhw_temperature_ok,binary_sensor.boiler_dhw_tempok,5,9,1,60,1
|
CS6800i/WLW176i,boiler,8,tempok,temperature ok,boolean, ,false,binary_sensor.boiler_dhw_temperature_ok,binary_sensor.boiler_dhw_tempok,5,9,1,60,1
|
||||||
CS6800i/WLW176i,boiler,8,active,active,boolean, ,false,binary_sensor.boiler_dhw_active,binary_sensor.boiler_dhw_active,5,9,1,61,1
|
CS6800i/WLW176i,boiler,8,active,active,boolean, ,false,binary_sensor.boiler_dhw_active,binary_sensor.boiler_dhw_active,5,9,1,61,1
|
||||||
CS6800i/WLW176i,boiler,8,3wayvalve,3-way valve active,boolean, ,false,binary_sensor.boiler_dhw_3-way_valve_active,binary_sensor.boiler_dhw_3wayvalve,5,9,1,62,1
|
CS6800i/WLW176i,boiler,8,3wayvalve,3-way valve active,boolean, ,false,binary_sensor.boiler_dhw_3-way_valve_active,binary_sensor.boiler_dhw_3wayvalve,5,9,1,62,1
|
||||||
CS6800i/WLW176i,boiler,8,setpumppower,set pump power,uint8 (>=0<=100),%,false,sensor.boiler_dhw_set_pump_power,sensor.boiler_dhw_setpumppower,5,9,1,63,1
|
|
||||||
CS6800i/WLW176i,boiler,8,mixertemp,mixer temperature,uint16 (>=0<=3199),C,false,sensor.boiler_dhw_mixer_temperature,sensor.boiler_dhw_mixertemp,5,9,1/10,64,1
|
CS6800i/WLW176i,boiler,8,mixertemp,mixer temperature,uint16 (>=0<=3199),C,false,sensor.boiler_dhw_mixer_temperature,sensor.boiler_dhw_mixertemp,5,9,1/10,64,1
|
||||||
CS6800i/WLW176i,boiler,8,cylmiddletemp,cylinder middle temperature (TS3),uint16 (>=0<=3199),C,false,sensor.boiler_dhw_cylinder_middle_temperature_(TS3),sensor.boiler_dhw_cylmiddletemp,5,9,1/10,65,1
|
CS6800i/WLW176i,boiler,8,cylmiddletemp,cylinder middle temperature (TS3),uint16 (>=0<=3199),C,false,sensor.boiler_dhw_cylinder_middle_temperature_(TS3),sensor.boiler_dhw_cylmiddletemp,5,9,1/10,65,1
|
||||||
CS6800i/WLW176i,boiler,8,starts,starts,uint24 (>=0<=16777213), ,false,sensor.boiler_dhw_starts,sensor.boiler_dhw_starts,5,9,1,66,2
|
CS6800i/WLW176i,boiler,8,starts,starts,uint24 (>=0<=16777213), ,false,sensor.boiler_dhw_starts,sensor.boiler_dhw_starts,5,9,1,66,2
|
||||||
@@ -240,8 +239,6 @@ C1200W,boiler,12,pumpmodmin,boiler pump min power,uint8 (>=0<=100),%,true,number
|
|||||||
C1200W,boiler,12,pumpmode,boiler pump mode,enum [proportional\|deltaP-1\|deltaP-2\|deltaP-3\|deltaP-4], ,true,select.boiler_boiler_pump_mode,select.boiler_pumpmode,5,0,1,18,1
|
C1200W,boiler,12,pumpmode,boiler pump mode,enum [proportional\|deltaP-1\|deltaP-2\|deltaP-3\|deltaP-4], ,true,select.boiler_boiler_pump_mode,select.boiler_pumpmode,5,0,1,18,1
|
||||||
C1200W,boiler,12,pumpcharacter,boiler pump characteristic,enum [proportional\|150mbar\|200mbar\|250mbar\|300mbar\|350mbar\|400mbar], ,true,select.boiler_boiler_pump_characteristic,select.boiler_pumpcharacter,5,0,1,19,1
|
C1200W,boiler,12,pumpcharacter,boiler pump characteristic,enum [proportional\|150mbar\|200mbar\|250mbar\|300mbar\|350mbar\|400mbar], ,true,select.boiler_boiler_pump_characteristic,select.boiler_pumpcharacter,5,0,1,19,1
|
||||||
C1200W,boiler,12,pumpdelay,pump delay,uint8 (>=0<=60),minutes,true,number.boiler_pump_delay,number.boiler_pumpdelay,5,0,1,20,1
|
C1200W,boiler,12,pumpdelay,pump delay,uint8 (>=0<=60),minutes,true,number.boiler_pump_delay,number.boiler_pumpdelay,5,0,1,20,1
|
||||||
C1200W,boiler,12,setflowtemp,set flow temperature,uint8 (>=0<=254),C,false,sensor.boiler_set_flow_temperature,sensor.boiler_setflowtemp,5,0,1,21,1
|
|
||||||
C1200W,boiler,12,setburnpow,burner set power,uint8 (>=0<=100),%,false,sensor.boiler_burner_set_power,sensor.boiler_setburnpow,5,0,1,22,1
|
|
||||||
C1200W,boiler,12,selburnpow,burner selected max power,uint8 (>=0<=254),%,true,number.boiler_burner_selected_max_power,number.boiler_selburnpow,5,0,1,23,1
|
C1200W,boiler,12,selburnpow,burner selected max power,uint8 (>=0<=254),%,true,number.boiler_burner_selected_max_power,number.boiler_selburnpow,5,0,1,23,1
|
||||||
C1200W,boiler,12,curburnpow,burner current power,uint8 (>=0<=100),%,false,sensor.boiler_burner_current_power,sensor.boiler_curburnpow,5,0,1,24,1
|
C1200W,boiler,12,curburnpow,burner current power,uint8 (>=0<=100),%,false,sensor.boiler_burner_current_power,sensor.boiler_curburnpow,5,0,1,24,1
|
||||||
C1200W,boiler,12,burnstarts,burner starts,uint24 (>=0<=16777213), ,false,sensor.boiler_burner_starts,sensor.boiler_burnstarts,5,0,1,25,2
|
C1200W,boiler,12,burnstarts,burner starts,uint24 (>=0<=16777213), ,false,sensor.boiler_burner_starts,sensor.boiler_burnstarts,5,0,1,25,2
|
||||||
@@ -300,7 +297,6 @@ C1200W,boiler,12,recharging,recharging,boolean, ,false,binary_sensor.boiler_dhw_
|
|||||||
C1200W,boiler,12,tempok,temperature ok,boolean, ,false,binary_sensor.boiler_dhw_temperature_ok,binary_sensor.boiler_dhw_tempok,5,9,1,60,1
|
C1200W,boiler,12,tempok,temperature ok,boolean, ,false,binary_sensor.boiler_dhw_temperature_ok,binary_sensor.boiler_dhw_tempok,5,9,1,60,1
|
||||||
C1200W,boiler,12,active,active,boolean, ,false,binary_sensor.boiler_dhw_active,binary_sensor.boiler_dhw_active,5,9,1,61,1
|
C1200W,boiler,12,active,active,boolean, ,false,binary_sensor.boiler_dhw_active,binary_sensor.boiler_dhw_active,5,9,1,61,1
|
||||||
C1200W,boiler,12,3wayvalve,3-way valve active,boolean, ,false,binary_sensor.boiler_dhw_3-way_valve_active,binary_sensor.boiler_dhw_3wayvalve,5,9,1,62,1
|
C1200W,boiler,12,3wayvalve,3-way valve active,boolean, ,false,binary_sensor.boiler_dhw_3-way_valve_active,binary_sensor.boiler_dhw_3wayvalve,5,9,1,62,1
|
||||||
C1200W,boiler,12,setpumppower,set pump power,uint8 (>=0<=100),%,false,sensor.boiler_dhw_set_pump_power,sensor.boiler_dhw_setpumppower,5,9,1,63,1
|
|
||||||
C1200W,boiler,12,mixertemp,mixer temperature,uint16 (>=0<=3199),C,false,sensor.boiler_dhw_mixer_temperature,sensor.boiler_dhw_mixertemp,5,9,1/10,64,1
|
C1200W,boiler,12,mixertemp,mixer temperature,uint16 (>=0<=3199),C,false,sensor.boiler_dhw_mixer_temperature,sensor.boiler_dhw_mixertemp,5,9,1/10,64,1
|
||||||
C1200W,boiler,12,cylmiddletemp,cylinder middle temperature (TS3),uint16 (>=0<=3199),C,false,sensor.boiler_dhw_cylinder_middle_temperature_(TS3),sensor.boiler_dhw_cylmiddletemp,5,9,1/10,65,1
|
C1200W,boiler,12,cylmiddletemp,cylinder middle temperature (TS3),uint16 (>=0<=3199),C,false,sensor.boiler_dhw_cylinder_middle_temperature_(TS3),sensor.boiler_dhw_cylmiddletemp,5,9,1/10,65,1
|
||||||
C1200W,boiler,12,starts,starts,uint24 (>=0<=16777213), ,false,sensor.boiler_dhw_starts,sensor.boiler_dhw_starts,5,9,1,66,2
|
C1200W,boiler,12,starts,starts,uint24 (>=0<=16777213), ,false,sensor.boiler_dhw_starts,sensor.boiler_dhw_starts,5,9,1,66,2
|
||||||
@@ -352,8 +348,6 @@ BK13/BK15/Smartline/GB1x2,boiler,64,pumpmodmin,boiler pump min power,uint8 (>=0<
|
|||||||
BK13/BK15/Smartline/GB1x2,boiler,64,pumpmode,boiler pump mode,enum [proportional\|deltaP-1\|deltaP-2\|deltaP-3\|deltaP-4], ,true,select.boiler_boiler_pump_mode,select.boiler_pumpmode,5,0,1,18,1
|
BK13/BK15/Smartline/GB1x2,boiler,64,pumpmode,boiler pump mode,enum [proportional\|deltaP-1\|deltaP-2\|deltaP-3\|deltaP-4], ,true,select.boiler_boiler_pump_mode,select.boiler_pumpmode,5,0,1,18,1
|
||||||
BK13/BK15/Smartline/GB1x2,boiler,64,pumpcharacter,boiler pump characteristic,enum [proportional\|150mbar\|200mbar\|250mbar\|300mbar\|350mbar\|400mbar], ,true,select.boiler_boiler_pump_characteristic,select.boiler_pumpcharacter,5,0,1,19,1
|
BK13/BK15/Smartline/GB1x2,boiler,64,pumpcharacter,boiler pump characteristic,enum [proportional\|150mbar\|200mbar\|250mbar\|300mbar\|350mbar\|400mbar], ,true,select.boiler_boiler_pump_characteristic,select.boiler_pumpcharacter,5,0,1,19,1
|
||||||
BK13/BK15/Smartline/GB1x2,boiler,64,pumpdelay,pump delay,uint8 (>=0<=60),minutes,true,number.boiler_pump_delay,number.boiler_pumpdelay,5,0,1,20,1
|
BK13/BK15/Smartline/GB1x2,boiler,64,pumpdelay,pump delay,uint8 (>=0<=60),minutes,true,number.boiler_pump_delay,number.boiler_pumpdelay,5,0,1,20,1
|
||||||
BK13/BK15/Smartline/GB1x2,boiler,64,setflowtemp,set flow temperature,uint8 (>=0<=254),C,false,sensor.boiler_set_flow_temperature,sensor.boiler_setflowtemp,5,0,1,21,1
|
|
||||||
BK13/BK15/Smartline/GB1x2,boiler,64,setburnpow,burner set power,uint8 (>=0<=100),%,false,sensor.boiler_burner_set_power,sensor.boiler_setburnpow,5,0,1,22,1
|
|
||||||
BK13/BK15/Smartline/GB1x2,boiler,64,selburnpow,burner selected max power,uint8 (>=0<=254),%,true,number.boiler_burner_selected_max_power,number.boiler_selburnpow,5,0,1,23,1
|
BK13/BK15/Smartline/GB1x2,boiler,64,selburnpow,burner selected max power,uint8 (>=0<=254),%,true,number.boiler_burner_selected_max_power,number.boiler_selburnpow,5,0,1,23,1
|
||||||
BK13/BK15/Smartline/GB1x2,boiler,64,curburnpow,burner current power,uint8 (>=0<=100),%,false,sensor.boiler_burner_current_power,sensor.boiler_curburnpow,5,0,1,24,1
|
BK13/BK15/Smartline/GB1x2,boiler,64,curburnpow,burner current power,uint8 (>=0<=100),%,false,sensor.boiler_burner_current_power,sensor.boiler_curburnpow,5,0,1,24,1
|
||||||
BK13/BK15/Smartline/GB1x2,boiler,64,burnstarts,burner starts,uint24 (>=0<=16777213), ,false,sensor.boiler_burner_starts,sensor.boiler_burnstarts,5,0,1,25,2
|
BK13/BK15/Smartline/GB1x2,boiler,64,burnstarts,burner starts,uint24 (>=0<=16777213), ,false,sensor.boiler_burner_starts,sensor.boiler_burnstarts,5,0,1,25,2
|
||||||
@@ -412,7 +406,6 @@ BK13/BK15/Smartline/GB1x2,boiler,64,recharging,recharging,boolean, ,false,binary
|
|||||||
BK13/BK15/Smartline/GB1x2,boiler,64,tempok,temperature ok,boolean, ,false,binary_sensor.boiler_dhw_temperature_ok,binary_sensor.boiler_dhw_tempok,5,9,1,60,1
|
BK13/BK15/Smartline/GB1x2,boiler,64,tempok,temperature ok,boolean, ,false,binary_sensor.boiler_dhw_temperature_ok,binary_sensor.boiler_dhw_tempok,5,9,1,60,1
|
||||||
BK13/BK15/Smartline/GB1x2,boiler,64,active,active,boolean, ,false,binary_sensor.boiler_dhw_active,binary_sensor.boiler_dhw_active,5,9,1,61,1
|
BK13/BK15/Smartline/GB1x2,boiler,64,active,active,boolean, ,false,binary_sensor.boiler_dhw_active,binary_sensor.boiler_dhw_active,5,9,1,61,1
|
||||||
BK13/BK15/Smartline/GB1x2,boiler,64,3wayvalve,3-way valve active,boolean, ,false,binary_sensor.boiler_dhw_3-way_valve_active,binary_sensor.boiler_dhw_3wayvalve,5,9,1,62,1
|
BK13/BK15/Smartline/GB1x2,boiler,64,3wayvalve,3-way valve active,boolean, ,false,binary_sensor.boiler_dhw_3-way_valve_active,binary_sensor.boiler_dhw_3wayvalve,5,9,1,62,1
|
||||||
BK13/BK15/Smartline/GB1x2,boiler,64,setpumppower,set pump power,uint8 (>=0<=100),%,false,sensor.boiler_dhw_set_pump_power,sensor.boiler_dhw_setpumppower,5,9,1,63,1
|
|
||||||
BK13/BK15/Smartline/GB1x2,boiler,64,mixertemp,mixer temperature,uint16 (>=0<=3199),C,false,sensor.boiler_dhw_mixer_temperature,sensor.boiler_dhw_mixertemp,5,9,1/10,64,1
|
BK13/BK15/Smartline/GB1x2,boiler,64,mixertemp,mixer temperature,uint16 (>=0<=3199),C,false,sensor.boiler_dhw_mixer_temperature,sensor.boiler_dhw_mixertemp,5,9,1/10,64,1
|
||||||
BK13/BK15/Smartline/GB1x2,boiler,64,cylmiddletemp,cylinder middle temperature (TS3),uint16 (>=0<=3199),C,false,sensor.boiler_dhw_cylinder_middle_temperature_(TS3),sensor.boiler_dhw_cylmiddletemp,5,9,1/10,65,1
|
BK13/BK15/Smartline/GB1x2,boiler,64,cylmiddletemp,cylinder middle temperature (TS3),uint16 (>=0<=3199),C,false,sensor.boiler_dhw_cylinder_middle_temperature_(TS3),sensor.boiler_dhw_cylmiddletemp,5,9,1/10,65,1
|
||||||
BK13/BK15/Smartline/GB1x2,boiler,64,starts,starts,uint24 (>=0<=16777213), ,false,sensor.boiler_dhw_starts,sensor.boiler_dhw_starts,5,9,1,66,2
|
BK13/BK15/Smartline/GB1x2,boiler,64,starts,starts,uint24 (>=0<=16777213), ,false,sensor.boiler_dhw_starts,sensor.boiler_dhw_starts,5,9,1,66,2
|
||||||
@@ -464,8 +457,6 @@ GB125/GB135/MC10,boiler,72,pumpmodmin,boiler pump min power,uint8 (>=0<=100),%,t
|
|||||||
GB125/GB135/MC10,boiler,72,pumpmode,boiler pump mode,enum [proportional\|deltaP-1\|deltaP-2\|deltaP-3\|deltaP-4], ,true,select.boiler_boiler_pump_mode,select.boiler_pumpmode,5,0,1,18,1
|
GB125/GB135/MC10,boiler,72,pumpmode,boiler pump mode,enum [proportional\|deltaP-1\|deltaP-2\|deltaP-3\|deltaP-4], ,true,select.boiler_boiler_pump_mode,select.boiler_pumpmode,5,0,1,18,1
|
||||||
GB125/GB135/MC10,boiler,72,pumpcharacter,boiler pump characteristic,enum [proportional\|150mbar\|200mbar\|250mbar\|300mbar\|350mbar\|400mbar], ,true,select.boiler_boiler_pump_characteristic,select.boiler_pumpcharacter,5,0,1,19,1
|
GB125/GB135/MC10,boiler,72,pumpcharacter,boiler pump characteristic,enum [proportional\|150mbar\|200mbar\|250mbar\|300mbar\|350mbar\|400mbar], ,true,select.boiler_boiler_pump_characteristic,select.boiler_pumpcharacter,5,0,1,19,1
|
||||||
GB125/GB135/MC10,boiler,72,pumpdelay,pump delay,uint8 (>=0<=60),minutes,true,number.boiler_pump_delay,number.boiler_pumpdelay,5,0,1,20,1
|
GB125/GB135/MC10,boiler,72,pumpdelay,pump delay,uint8 (>=0<=60),minutes,true,number.boiler_pump_delay,number.boiler_pumpdelay,5,0,1,20,1
|
||||||
GB125/GB135/MC10,boiler,72,setflowtemp,set flow temperature,uint8 (>=0<=254),C,false,sensor.boiler_set_flow_temperature,sensor.boiler_setflowtemp,5,0,1,21,1
|
|
||||||
GB125/GB135/MC10,boiler,72,setburnpow,burner set power,uint8 (>=0<=100),%,false,sensor.boiler_burner_set_power,sensor.boiler_setburnpow,5,0,1,22,1
|
|
||||||
GB125/GB135/MC10,boiler,72,selburnpow,burner selected max power,uint8 (>=0<=254),%,true,number.boiler_burner_selected_max_power,number.boiler_selburnpow,5,0,1,23,1
|
GB125/GB135/MC10,boiler,72,selburnpow,burner selected max power,uint8 (>=0<=254),%,true,number.boiler_burner_selected_max_power,number.boiler_selburnpow,5,0,1,23,1
|
||||||
GB125/GB135/MC10,boiler,72,curburnpow,burner current power,uint8 (>=0<=100),%,false,sensor.boiler_burner_current_power,sensor.boiler_curburnpow,5,0,1,24,1
|
GB125/GB135/MC10,boiler,72,curburnpow,burner current power,uint8 (>=0<=100),%,false,sensor.boiler_burner_current_power,sensor.boiler_curburnpow,5,0,1,24,1
|
||||||
GB125/GB135/MC10,boiler,72,burnstarts,burner starts,uint24 (>=0<=16777213), ,false,sensor.boiler_burner_starts,sensor.boiler_burnstarts,5,0,1,25,2
|
GB125/GB135/MC10,boiler,72,burnstarts,burner starts,uint24 (>=0<=16777213), ,false,sensor.boiler_burner_starts,sensor.boiler_burnstarts,5,0,1,25,2
|
||||||
@@ -524,7 +515,6 @@ GB125/GB135/MC10,boiler,72,recharging,recharging,boolean, ,false,binary_sensor.b
|
|||||||
GB125/GB135/MC10,boiler,72,tempok,temperature ok,boolean, ,false,binary_sensor.boiler_dhw_temperature_ok,binary_sensor.boiler_dhw_tempok,5,9,1,60,1
|
GB125/GB135/MC10,boiler,72,tempok,temperature ok,boolean, ,false,binary_sensor.boiler_dhw_temperature_ok,binary_sensor.boiler_dhw_tempok,5,9,1,60,1
|
||||||
GB125/GB135/MC10,boiler,72,active,active,boolean, ,false,binary_sensor.boiler_dhw_active,binary_sensor.boiler_dhw_active,5,9,1,61,1
|
GB125/GB135/MC10,boiler,72,active,active,boolean, ,false,binary_sensor.boiler_dhw_active,binary_sensor.boiler_dhw_active,5,9,1,61,1
|
||||||
GB125/GB135/MC10,boiler,72,3wayvalve,3-way valve active,boolean, ,false,binary_sensor.boiler_dhw_3-way_valve_active,binary_sensor.boiler_dhw_3wayvalve,5,9,1,62,1
|
GB125/GB135/MC10,boiler,72,3wayvalve,3-way valve active,boolean, ,false,binary_sensor.boiler_dhw_3-way_valve_active,binary_sensor.boiler_dhw_3wayvalve,5,9,1,62,1
|
||||||
GB125/GB135/MC10,boiler,72,setpumppower,set pump power,uint8 (>=0<=100),%,false,sensor.boiler_dhw_set_pump_power,sensor.boiler_dhw_setpumppower,5,9,1,63,1
|
|
||||||
GB125/GB135/MC10,boiler,72,mixertemp,mixer temperature,uint16 (>=0<=3199),C,false,sensor.boiler_dhw_mixer_temperature,sensor.boiler_dhw_mixertemp,5,9,1/10,64,1
|
GB125/GB135/MC10,boiler,72,mixertemp,mixer temperature,uint16 (>=0<=3199),C,false,sensor.boiler_dhw_mixer_temperature,sensor.boiler_dhw_mixertemp,5,9,1/10,64,1
|
||||||
GB125/GB135/MC10,boiler,72,cylmiddletemp,cylinder middle temperature (TS3),uint16 (>=0<=3199),C,false,sensor.boiler_dhw_cylinder_middle_temperature_(TS3),sensor.boiler_dhw_cylmiddletemp,5,9,1/10,65,1
|
GB125/GB135/MC10,boiler,72,cylmiddletemp,cylinder middle temperature (TS3),uint16 (>=0<=3199),C,false,sensor.boiler_dhw_cylinder_middle_temperature_(TS3),sensor.boiler_dhw_cylmiddletemp,5,9,1/10,65,1
|
||||||
GB125/GB135/MC10,boiler,72,starts,starts,uint24 (>=0<=16777213), ,false,sensor.boiler_dhw_starts,sensor.boiler_dhw_starts,5,9,1,66,2
|
GB125/GB135/MC10,boiler,72,starts,starts,uint24 (>=0<=16777213), ,false,sensor.boiler_dhw_starts,sensor.boiler_dhw_starts,5,9,1,66,2
|
||||||
@@ -576,8 +566,6 @@ Cascade CM10,boiler,81,pumpmodmin,boiler pump min power,uint8 (>=0<=100),%,true,
|
|||||||
Cascade CM10,boiler,81,pumpmode,boiler pump mode,enum [proportional\|deltaP-1\|deltaP-2\|deltaP-3\|deltaP-4], ,true,select.boiler_boiler_pump_mode,select.boiler_pumpmode,5,0,1,18,1
|
Cascade CM10,boiler,81,pumpmode,boiler pump mode,enum [proportional\|deltaP-1\|deltaP-2\|deltaP-3\|deltaP-4], ,true,select.boiler_boiler_pump_mode,select.boiler_pumpmode,5,0,1,18,1
|
||||||
Cascade CM10,boiler,81,pumpcharacter,boiler pump characteristic,enum [proportional\|150mbar\|200mbar\|250mbar\|300mbar\|350mbar\|400mbar], ,true,select.boiler_boiler_pump_characteristic,select.boiler_pumpcharacter,5,0,1,19,1
|
Cascade CM10,boiler,81,pumpcharacter,boiler pump characteristic,enum [proportional\|150mbar\|200mbar\|250mbar\|300mbar\|350mbar\|400mbar], ,true,select.boiler_boiler_pump_characteristic,select.boiler_pumpcharacter,5,0,1,19,1
|
||||||
Cascade CM10,boiler,81,pumpdelay,pump delay,uint8 (>=0<=60),minutes,true,number.boiler_pump_delay,number.boiler_pumpdelay,5,0,1,20,1
|
Cascade CM10,boiler,81,pumpdelay,pump delay,uint8 (>=0<=60),minutes,true,number.boiler_pump_delay,number.boiler_pumpdelay,5,0,1,20,1
|
||||||
Cascade CM10,boiler,81,setflowtemp,set flow temperature,uint8 (>=0<=254),C,false,sensor.boiler_set_flow_temperature,sensor.boiler_setflowtemp,5,0,1,21,1
|
|
||||||
Cascade CM10,boiler,81,setburnpow,burner set power,uint8 (>=0<=100),%,false,sensor.boiler_burner_set_power,sensor.boiler_setburnpow,5,0,1,22,1
|
|
||||||
Cascade CM10,boiler,81,selburnpow,burner selected max power,uint8 (>=0<=254),%,true,number.boiler_burner_selected_max_power,number.boiler_selburnpow,5,0,1,23,1
|
Cascade CM10,boiler,81,selburnpow,burner selected max power,uint8 (>=0<=254),%,true,number.boiler_burner_selected_max_power,number.boiler_selburnpow,5,0,1,23,1
|
||||||
Cascade CM10,boiler,81,curburnpow,burner current power,uint8 (>=0<=100),%,false,sensor.boiler_burner_current_power,sensor.boiler_curburnpow,5,0,1,24,1
|
Cascade CM10,boiler,81,curburnpow,burner current power,uint8 (>=0<=100),%,false,sensor.boiler_burner_current_power,sensor.boiler_curburnpow,5,0,1,24,1
|
||||||
Cascade CM10,boiler,81,burnstarts,burner starts,uint24 (>=0<=16777213), ,false,sensor.boiler_burner_starts,sensor.boiler_burnstarts,5,0,1,25,2
|
Cascade CM10,boiler,81,burnstarts,burner starts,uint24 (>=0<=16777213), ,false,sensor.boiler_burner_starts,sensor.boiler_burnstarts,5,0,1,25,2
|
||||||
@@ -636,7 +624,6 @@ Cascade CM10,boiler,81,recharging,recharging,boolean, ,false,binary_sensor.boile
|
|||||||
Cascade CM10,boiler,81,tempok,temperature ok,boolean, ,false,binary_sensor.boiler_dhw_temperature_ok,binary_sensor.boiler_dhw_tempok,5,9,1,60,1
|
Cascade CM10,boiler,81,tempok,temperature ok,boolean, ,false,binary_sensor.boiler_dhw_temperature_ok,binary_sensor.boiler_dhw_tempok,5,9,1,60,1
|
||||||
Cascade CM10,boiler,81,active,active,boolean, ,false,binary_sensor.boiler_dhw_active,binary_sensor.boiler_dhw_active,5,9,1,61,1
|
Cascade CM10,boiler,81,active,active,boolean, ,false,binary_sensor.boiler_dhw_active,binary_sensor.boiler_dhw_active,5,9,1,61,1
|
||||||
Cascade CM10,boiler,81,3wayvalve,3-way valve active,boolean, ,false,binary_sensor.boiler_dhw_3-way_valve_active,binary_sensor.boiler_dhw_3wayvalve,5,9,1,62,1
|
Cascade CM10,boiler,81,3wayvalve,3-way valve active,boolean, ,false,binary_sensor.boiler_dhw_3-way_valve_active,binary_sensor.boiler_dhw_3wayvalve,5,9,1,62,1
|
||||||
Cascade CM10,boiler,81,setpumppower,set pump power,uint8 (>=0<=100),%,false,sensor.boiler_dhw_set_pump_power,sensor.boiler_dhw_setpumppower,5,9,1,63,1
|
|
||||||
Cascade CM10,boiler,81,mixertemp,mixer temperature,uint16 (>=0<=3199),C,false,sensor.boiler_dhw_mixer_temperature,sensor.boiler_dhw_mixertemp,5,9,1/10,64,1
|
Cascade CM10,boiler,81,mixertemp,mixer temperature,uint16 (>=0<=3199),C,false,sensor.boiler_dhw_mixer_temperature,sensor.boiler_dhw_mixertemp,5,9,1/10,64,1
|
||||||
Cascade CM10,boiler,81,cylmiddletemp,cylinder middle temperature (TS3),uint16 (>=0<=3199),C,false,sensor.boiler_dhw_cylinder_middle_temperature_(TS3),sensor.boiler_dhw_cylmiddletemp,5,9,1/10,65,1
|
Cascade CM10,boiler,81,cylmiddletemp,cylinder middle temperature (TS3),uint16 (>=0<=3199),C,false,sensor.boiler_dhw_cylinder_middle_temperature_(TS3),sensor.boiler_dhw_cylmiddletemp,5,9,1/10,65,1
|
||||||
Cascade CM10,boiler,81,starts,starts,uint24 (>=0<=16777213), ,false,sensor.boiler_dhw_starts,sensor.boiler_dhw_starts,5,9,1,66,2
|
Cascade CM10,boiler,81,starts,starts,uint24 (>=0<=16777213), ,false,sensor.boiler_dhw_starts,sensor.boiler_dhw_starts,5,9,1,66,2
|
||||||
@@ -688,8 +675,6 @@ Logamax Plus GB022,boiler,84,pumpmodmin,boiler pump min power,uint8 (>=0<=100),%
|
|||||||
Logamax Plus GB022,boiler,84,pumpmode,boiler pump mode,enum [proportional\|deltaP-1\|deltaP-2\|deltaP-3\|deltaP-4], ,true,select.boiler_boiler_pump_mode,select.boiler_pumpmode,5,0,1,18,1
|
Logamax Plus GB022,boiler,84,pumpmode,boiler pump mode,enum [proportional\|deltaP-1\|deltaP-2\|deltaP-3\|deltaP-4], ,true,select.boiler_boiler_pump_mode,select.boiler_pumpmode,5,0,1,18,1
|
||||||
Logamax Plus GB022,boiler,84,pumpcharacter,boiler pump characteristic,enum [proportional\|150mbar\|200mbar\|250mbar\|300mbar\|350mbar\|400mbar], ,true,select.boiler_boiler_pump_characteristic,select.boiler_pumpcharacter,5,0,1,19,1
|
Logamax Plus GB022,boiler,84,pumpcharacter,boiler pump characteristic,enum [proportional\|150mbar\|200mbar\|250mbar\|300mbar\|350mbar\|400mbar], ,true,select.boiler_boiler_pump_characteristic,select.boiler_pumpcharacter,5,0,1,19,1
|
||||||
Logamax Plus GB022,boiler,84,pumpdelay,pump delay,uint8 (>=0<=60),minutes,true,number.boiler_pump_delay,number.boiler_pumpdelay,5,0,1,20,1
|
Logamax Plus GB022,boiler,84,pumpdelay,pump delay,uint8 (>=0<=60),minutes,true,number.boiler_pump_delay,number.boiler_pumpdelay,5,0,1,20,1
|
||||||
Logamax Plus GB022,boiler,84,setflowtemp,set flow temperature,uint8 (>=0<=254),C,false,sensor.boiler_set_flow_temperature,sensor.boiler_setflowtemp,5,0,1,21,1
|
|
||||||
Logamax Plus GB022,boiler,84,setburnpow,burner set power,uint8 (>=0<=100),%,false,sensor.boiler_burner_set_power,sensor.boiler_setburnpow,5,0,1,22,1
|
|
||||||
Logamax Plus GB022,boiler,84,selburnpow,burner selected max power,uint8 (>=0<=254),%,true,number.boiler_burner_selected_max_power,number.boiler_selburnpow,5,0,1,23,1
|
Logamax Plus GB022,boiler,84,selburnpow,burner selected max power,uint8 (>=0<=254),%,true,number.boiler_burner_selected_max_power,number.boiler_selburnpow,5,0,1,23,1
|
||||||
Logamax Plus GB022,boiler,84,curburnpow,burner current power,uint8 (>=0<=100),%,false,sensor.boiler_burner_current_power,sensor.boiler_curburnpow,5,0,1,24,1
|
Logamax Plus GB022,boiler,84,curburnpow,burner current power,uint8 (>=0<=100),%,false,sensor.boiler_burner_current_power,sensor.boiler_curburnpow,5,0,1,24,1
|
||||||
Logamax Plus GB022,boiler,84,burnstarts,burner starts,uint24 (>=0<=16777213), ,false,sensor.boiler_burner_starts,sensor.boiler_burnstarts,5,0,1,25,2
|
Logamax Plus GB022,boiler,84,burnstarts,burner starts,uint24 (>=0<=16777213), ,false,sensor.boiler_burner_starts,sensor.boiler_burnstarts,5,0,1,25,2
|
||||||
@@ -748,7 +733,6 @@ Logamax Plus GB022,boiler,84,recharging,recharging,boolean, ,false,binary_sensor
|
|||||||
Logamax Plus GB022,boiler,84,tempok,temperature ok,boolean, ,false,binary_sensor.boiler_dhw_temperature_ok,binary_sensor.boiler_dhw_tempok,5,9,1,60,1
|
Logamax Plus GB022,boiler,84,tempok,temperature ok,boolean, ,false,binary_sensor.boiler_dhw_temperature_ok,binary_sensor.boiler_dhw_tempok,5,9,1,60,1
|
||||||
Logamax Plus GB022,boiler,84,active,active,boolean, ,false,binary_sensor.boiler_dhw_active,binary_sensor.boiler_dhw_active,5,9,1,61,1
|
Logamax Plus GB022,boiler,84,active,active,boolean, ,false,binary_sensor.boiler_dhw_active,binary_sensor.boiler_dhw_active,5,9,1,61,1
|
||||||
Logamax Plus GB022,boiler,84,3wayvalve,3-way valve active,boolean, ,false,binary_sensor.boiler_dhw_3-way_valve_active,binary_sensor.boiler_dhw_3wayvalve,5,9,1,62,1
|
Logamax Plus GB022,boiler,84,3wayvalve,3-way valve active,boolean, ,false,binary_sensor.boiler_dhw_3-way_valve_active,binary_sensor.boiler_dhw_3wayvalve,5,9,1,62,1
|
||||||
Logamax Plus GB022,boiler,84,setpumppower,set pump power,uint8 (>=0<=100),%,false,sensor.boiler_dhw_set_pump_power,sensor.boiler_dhw_setpumppower,5,9,1,63,1
|
|
||||||
Logamax Plus GB022,boiler,84,mixertemp,mixer temperature,uint16 (>=0<=3199),C,false,sensor.boiler_dhw_mixer_temperature,sensor.boiler_dhw_mixertemp,5,9,1/10,64,1
|
Logamax Plus GB022,boiler,84,mixertemp,mixer temperature,uint16 (>=0<=3199),C,false,sensor.boiler_dhw_mixer_temperature,sensor.boiler_dhw_mixertemp,5,9,1/10,64,1
|
||||||
Logamax Plus GB022,boiler,84,cylmiddletemp,cylinder middle temperature (TS3),uint16 (>=0<=3199),C,false,sensor.boiler_dhw_cylinder_middle_temperature_(TS3),sensor.boiler_dhw_cylmiddletemp,5,9,1/10,65,1
|
Logamax Plus GB022,boiler,84,cylmiddletemp,cylinder middle temperature (TS3),uint16 (>=0<=3199),C,false,sensor.boiler_dhw_cylinder_middle_temperature_(TS3),sensor.boiler_dhw_cylmiddletemp,5,9,1/10,65,1
|
||||||
Logamax Plus GB022,boiler,84,starts,starts,uint24 (>=0<=16777213), ,false,sensor.boiler_dhw_starts,sensor.boiler_dhw_starts,5,9,1,66,2
|
Logamax Plus GB022,boiler,84,starts,starts,uint24 (>=0<=16777213), ,false,sensor.boiler_dhw_starts,sensor.boiler_dhw_starts,5,9,1,66,2
|
||||||
@@ -800,8 +784,6 @@ Condens 2500/Logamax/Logomatic/Cerapur Top/Greenstar/Generic HT3,boiler,95,pumpm
|
|||||||
Condens 2500/Logamax/Logomatic/Cerapur Top/Greenstar/Generic HT3,boiler,95,pumpmode,boiler pump mode,enum [proportional\|deltaP-1\|deltaP-2\|deltaP-3\|deltaP-4], ,true,select.boiler_boiler_pump_mode,select.boiler_pumpmode,5,0,1,18,1
|
Condens 2500/Logamax/Logomatic/Cerapur Top/Greenstar/Generic HT3,boiler,95,pumpmode,boiler pump mode,enum [proportional\|deltaP-1\|deltaP-2\|deltaP-3\|deltaP-4], ,true,select.boiler_boiler_pump_mode,select.boiler_pumpmode,5,0,1,18,1
|
||||||
Condens 2500/Logamax/Logomatic/Cerapur Top/Greenstar/Generic HT3,boiler,95,pumpcharacter,boiler pump characteristic,enum [proportional\|150mbar\|200mbar\|250mbar\|300mbar\|350mbar\|400mbar], ,true,select.boiler_boiler_pump_characteristic,select.boiler_pumpcharacter,5,0,1,19,1
|
Condens 2500/Logamax/Logomatic/Cerapur Top/Greenstar/Generic HT3,boiler,95,pumpcharacter,boiler pump characteristic,enum [proportional\|150mbar\|200mbar\|250mbar\|300mbar\|350mbar\|400mbar], ,true,select.boiler_boiler_pump_characteristic,select.boiler_pumpcharacter,5,0,1,19,1
|
||||||
Condens 2500/Logamax/Logomatic/Cerapur Top/Greenstar/Generic HT3,boiler,95,pumpdelay,pump delay,uint8 (>=0<=60),minutes,true,number.boiler_pump_delay,number.boiler_pumpdelay,5,0,1,20,1
|
Condens 2500/Logamax/Logomatic/Cerapur Top/Greenstar/Generic HT3,boiler,95,pumpdelay,pump delay,uint8 (>=0<=60),minutes,true,number.boiler_pump_delay,number.boiler_pumpdelay,5,0,1,20,1
|
||||||
Condens 2500/Logamax/Logomatic/Cerapur Top/Greenstar/Generic HT3,boiler,95,setflowtemp,set flow temperature,uint8 (>=0<=254),C,false,sensor.boiler_set_flow_temperature,sensor.boiler_setflowtemp,5,0,1,21,1
|
|
||||||
Condens 2500/Logamax/Logomatic/Cerapur Top/Greenstar/Generic HT3,boiler,95,setburnpow,burner set power,uint8 (>=0<=100),%,false,sensor.boiler_burner_set_power,sensor.boiler_setburnpow,5,0,1,22,1
|
|
||||||
Condens 2500/Logamax/Logomatic/Cerapur Top/Greenstar/Generic HT3,boiler,95,selburnpow,burner selected max power,uint8 (>=0<=254),%,true,number.boiler_burner_selected_max_power,number.boiler_selburnpow,5,0,1,23,1
|
Condens 2500/Logamax/Logomatic/Cerapur Top/Greenstar/Generic HT3,boiler,95,selburnpow,burner selected max power,uint8 (>=0<=254),%,true,number.boiler_burner_selected_max_power,number.boiler_selburnpow,5,0,1,23,1
|
||||||
Condens 2500/Logamax/Logomatic/Cerapur Top/Greenstar/Generic HT3,boiler,95,curburnpow,burner current power,uint8 (>=0<=100),%,false,sensor.boiler_burner_current_power,sensor.boiler_curburnpow,5,0,1,24,1
|
Condens 2500/Logamax/Logomatic/Cerapur Top/Greenstar/Generic HT3,boiler,95,curburnpow,burner current power,uint8 (>=0<=100),%,false,sensor.boiler_burner_current_power,sensor.boiler_curburnpow,5,0,1,24,1
|
||||||
Condens 2500/Logamax/Logomatic/Cerapur Top/Greenstar/Generic HT3,boiler,95,burnstarts,burner starts,uint24 (>=0<=16777213), ,false,sensor.boiler_burner_starts,sensor.boiler_burnstarts,5,0,1,25,2
|
Condens 2500/Logamax/Logomatic/Cerapur Top/Greenstar/Generic HT3,boiler,95,burnstarts,burner starts,uint24 (>=0<=16777213), ,false,sensor.boiler_burner_starts,sensor.boiler_burnstarts,5,0,1,25,2
|
||||||
@@ -860,7 +842,6 @@ Condens 2500/Logamax/Logomatic/Cerapur Top/Greenstar/Generic HT3,boiler,95,recha
|
|||||||
Condens 2500/Logamax/Logomatic/Cerapur Top/Greenstar/Generic HT3,boiler,95,tempok,temperature ok,boolean, ,false,binary_sensor.boiler_dhw_temperature_ok,binary_sensor.boiler_dhw_tempok,5,9,1,60,1
|
Condens 2500/Logamax/Logomatic/Cerapur Top/Greenstar/Generic HT3,boiler,95,tempok,temperature ok,boolean, ,false,binary_sensor.boiler_dhw_temperature_ok,binary_sensor.boiler_dhw_tempok,5,9,1,60,1
|
||||||
Condens 2500/Logamax/Logomatic/Cerapur Top/Greenstar/Generic HT3,boiler,95,active,active,boolean, ,false,binary_sensor.boiler_dhw_active,binary_sensor.boiler_dhw_active,5,9,1,61,1
|
Condens 2500/Logamax/Logomatic/Cerapur Top/Greenstar/Generic HT3,boiler,95,active,active,boolean, ,false,binary_sensor.boiler_dhw_active,binary_sensor.boiler_dhw_active,5,9,1,61,1
|
||||||
Condens 2500/Logamax/Logomatic/Cerapur Top/Greenstar/Generic HT3,boiler,95,3wayvalve,3-way valve active,boolean, ,false,binary_sensor.boiler_dhw_3-way_valve_active,binary_sensor.boiler_dhw_3wayvalve,5,9,1,62,1
|
Condens 2500/Logamax/Logomatic/Cerapur Top/Greenstar/Generic HT3,boiler,95,3wayvalve,3-way valve active,boolean, ,false,binary_sensor.boiler_dhw_3-way_valve_active,binary_sensor.boiler_dhw_3wayvalve,5,9,1,62,1
|
||||||
Condens 2500/Logamax/Logomatic/Cerapur Top/Greenstar/Generic HT3,boiler,95,setpumppower,set pump power,uint8 (>=0<=100),%,false,sensor.boiler_dhw_set_pump_power,sensor.boiler_dhw_setpumppower,5,9,1,63,1
|
|
||||||
Condens 2500/Logamax/Logomatic/Cerapur Top/Greenstar/Generic HT3,boiler,95,mixertemp,mixer temperature,uint16 (>=0<=3199),C,false,sensor.boiler_dhw_mixer_temperature,sensor.boiler_dhw_mixertemp,5,9,1/10,64,1
|
Condens 2500/Logamax/Logomatic/Cerapur Top/Greenstar/Generic HT3,boiler,95,mixertemp,mixer temperature,uint16 (>=0<=3199),C,false,sensor.boiler_dhw_mixer_temperature,sensor.boiler_dhw_mixertemp,5,9,1/10,64,1
|
||||||
Condens 2500/Logamax/Logomatic/Cerapur Top/Greenstar/Generic HT3,boiler,95,cylmiddletemp,cylinder middle temperature (TS3),uint16 (>=0<=3199),C,false,sensor.boiler_dhw_cylinder_middle_temperature_(TS3),sensor.boiler_dhw_cylmiddletemp,5,9,1/10,65,1
|
Condens 2500/Logamax/Logomatic/Cerapur Top/Greenstar/Generic HT3,boiler,95,cylmiddletemp,cylinder middle temperature (TS3),uint16 (>=0<=3199),C,false,sensor.boiler_dhw_cylinder_middle_temperature_(TS3),sensor.boiler_dhw_cylmiddletemp,5,9,1/10,65,1
|
||||||
Condens 2500/Logamax/Logomatic/Cerapur Top/Greenstar/Generic HT3,boiler,95,starts,starts,uint24 (>=0<=16777213), ,false,sensor.boiler_dhw_starts,sensor.boiler_dhw_starts,5,9,1,66,2
|
Condens 2500/Logamax/Logomatic/Cerapur Top/Greenstar/Generic HT3,boiler,95,starts,starts,uint24 (>=0<=16777213), ,false,sensor.boiler_dhw_starts,sensor.boiler_dhw_starts,5,9,1,66,2
|
||||||
@@ -912,8 +893,6 @@ Topline/GB162,boiler,115,pumpmodmin,boiler pump min power,uint8 (>=0<=100),%,tru
|
|||||||
Topline/GB162,boiler,115,pumpmode,boiler pump mode,enum [proportional\|deltaP-1\|deltaP-2\|deltaP-3\|deltaP-4], ,true,select.boiler_boiler_pump_mode,select.boiler_pumpmode,5,0,1,18,1
|
Topline/GB162,boiler,115,pumpmode,boiler pump mode,enum [proportional\|deltaP-1\|deltaP-2\|deltaP-3\|deltaP-4], ,true,select.boiler_boiler_pump_mode,select.boiler_pumpmode,5,0,1,18,1
|
||||||
Topline/GB162,boiler,115,pumpcharacter,boiler pump characteristic,enum [proportional\|150mbar\|200mbar\|250mbar\|300mbar\|350mbar\|400mbar], ,true,select.boiler_boiler_pump_characteristic,select.boiler_pumpcharacter,5,0,1,19,1
|
Topline/GB162,boiler,115,pumpcharacter,boiler pump characteristic,enum [proportional\|150mbar\|200mbar\|250mbar\|300mbar\|350mbar\|400mbar], ,true,select.boiler_boiler_pump_characteristic,select.boiler_pumpcharacter,5,0,1,19,1
|
||||||
Topline/GB162,boiler,115,pumpdelay,pump delay,uint8 (>=0<=60),minutes,true,number.boiler_pump_delay,number.boiler_pumpdelay,5,0,1,20,1
|
Topline/GB162,boiler,115,pumpdelay,pump delay,uint8 (>=0<=60),minutes,true,number.boiler_pump_delay,number.boiler_pumpdelay,5,0,1,20,1
|
||||||
Topline/GB162,boiler,115,setflowtemp,set flow temperature,uint8 (>=0<=254),C,false,sensor.boiler_set_flow_temperature,sensor.boiler_setflowtemp,5,0,1,21,1
|
|
||||||
Topline/GB162,boiler,115,setburnpow,burner set power,uint8 (>=0<=100),%,false,sensor.boiler_burner_set_power,sensor.boiler_setburnpow,5,0,1,22,1
|
|
||||||
Topline/GB162,boiler,115,selburnpow,burner selected max power,uint8 (>=0<=254),%,true,number.boiler_burner_selected_max_power,number.boiler_selburnpow,5,0,1,23,1
|
Topline/GB162,boiler,115,selburnpow,burner selected max power,uint8 (>=0<=254),%,true,number.boiler_burner_selected_max_power,number.boiler_selburnpow,5,0,1,23,1
|
||||||
Topline/GB162,boiler,115,curburnpow,burner current power,uint8 (>=0<=100),%,false,sensor.boiler_burner_current_power,sensor.boiler_curburnpow,5,0,1,24,1
|
Topline/GB162,boiler,115,curburnpow,burner current power,uint8 (>=0<=100),%,false,sensor.boiler_burner_current_power,sensor.boiler_curburnpow,5,0,1,24,1
|
||||||
Topline/GB162,boiler,115,burnstarts,burner starts,uint24 (>=0<=16777213), ,false,sensor.boiler_burner_starts,sensor.boiler_burnstarts,5,0,1,25,2
|
Topline/GB162,boiler,115,burnstarts,burner starts,uint24 (>=0<=16777213), ,false,sensor.boiler_burner_starts,sensor.boiler_burnstarts,5,0,1,25,2
|
||||||
@@ -972,7 +951,6 @@ Topline/GB162,boiler,115,recharging,recharging,boolean, ,false,binary_sensor.boi
|
|||||||
Topline/GB162,boiler,115,tempok,temperature ok,boolean, ,false,binary_sensor.boiler_dhw_temperature_ok,binary_sensor.boiler_dhw_tempok,5,9,1,60,1
|
Topline/GB162,boiler,115,tempok,temperature ok,boolean, ,false,binary_sensor.boiler_dhw_temperature_ok,binary_sensor.boiler_dhw_tempok,5,9,1,60,1
|
||||||
Topline/GB162,boiler,115,active,active,boolean, ,false,binary_sensor.boiler_dhw_active,binary_sensor.boiler_dhw_active,5,9,1,61,1
|
Topline/GB162,boiler,115,active,active,boolean, ,false,binary_sensor.boiler_dhw_active,binary_sensor.boiler_dhw_active,5,9,1,61,1
|
||||||
Topline/GB162,boiler,115,3wayvalve,3-way valve active,boolean, ,false,binary_sensor.boiler_dhw_3-way_valve_active,binary_sensor.boiler_dhw_3wayvalve,5,9,1,62,1
|
Topline/GB162,boiler,115,3wayvalve,3-way valve active,boolean, ,false,binary_sensor.boiler_dhw_3-way_valve_active,binary_sensor.boiler_dhw_3wayvalve,5,9,1,62,1
|
||||||
Topline/GB162,boiler,115,setpumppower,set pump power,uint8 (>=0<=100),%,false,sensor.boiler_dhw_set_pump_power,sensor.boiler_dhw_setpumppower,5,9,1,63,1
|
|
||||||
Topline/GB162,boiler,115,mixertemp,mixer temperature,uint16 (>=0<=3199),C,false,sensor.boiler_dhw_mixer_temperature,sensor.boiler_dhw_mixertemp,5,9,1/10,64,1
|
Topline/GB162,boiler,115,mixertemp,mixer temperature,uint16 (>=0<=3199),C,false,sensor.boiler_dhw_mixer_temperature,sensor.boiler_dhw_mixertemp,5,9,1/10,64,1
|
||||||
Topline/GB162,boiler,115,cylmiddletemp,cylinder middle temperature (TS3),uint16 (>=0<=3199),C,false,sensor.boiler_dhw_cylinder_middle_temperature_(TS3),sensor.boiler_dhw_cylmiddletemp,5,9,1/10,65,1
|
Topline/GB162,boiler,115,cylmiddletemp,cylinder middle temperature (TS3),uint16 (>=0<=3199),C,false,sensor.boiler_dhw_cylinder_middle_temperature_(TS3),sensor.boiler_dhw_cylmiddletemp,5,9,1/10,65,1
|
||||||
Topline/GB162,boiler,115,starts,starts,uint24 (>=0<=16777213), ,false,sensor.boiler_dhw_starts,sensor.boiler_dhw_starts,5,9,1,66,2
|
Topline/GB162,boiler,115,starts,starts,uint24 (>=0<=16777213), ,false,sensor.boiler_dhw_starts,sensor.boiler_dhw_starts,5,9,1,66,2
|
||||||
@@ -1024,8 +1002,6 @@ Cascade MCM10,boiler,121,pumpmodmin,boiler pump min power,uint8 (>=0<=100),%,tru
|
|||||||
Cascade MCM10,boiler,121,pumpmode,boiler pump mode,enum [proportional\|deltaP-1\|deltaP-2\|deltaP-3\|deltaP-4], ,true,select.boiler_boiler_pump_mode,select.boiler_pumpmode,5,0,1,18,1
|
Cascade MCM10,boiler,121,pumpmode,boiler pump mode,enum [proportional\|deltaP-1\|deltaP-2\|deltaP-3\|deltaP-4], ,true,select.boiler_boiler_pump_mode,select.boiler_pumpmode,5,0,1,18,1
|
||||||
Cascade MCM10,boiler,121,pumpcharacter,boiler pump characteristic,enum [proportional\|150mbar\|200mbar\|250mbar\|300mbar\|350mbar\|400mbar], ,true,select.boiler_boiler_pump_characteristic,select.boiler_pumpcharacter,5,0,1,19,1
|
Cascade MCM10,boiler,121,pumpcharacter,boiler pump characteristic,enum [proportional\|150mbar\|200mbar\|250mbar\|300mbar\|350mbar\|400mbar], ,true,select.boiler_boiler_pump_characteristic,select.boiler_pumpcharacter,5,0,1,19,1
|
||||||
Cascade MCM10,boiler,121,pumpdelay,pump delay,uint8 (>=0<=60),minutes,true,number.boiler_pump_delay,number.boiler_pumpdelay,5,0,1,20,1
|
Cascade MCM10,boiler,121,pumpdelay,pump delay,uint8 (>=0<=60),minutes,true,number.boiler_pump_delay,number.boiler_pumpdelay,5,0,1,20,1
|
||||||
Cascade MCM10,boiler,121,setflowtemp,set flow temperature,uint8 (>=0<=254),C,false,sensor.boiler_set_flow_temperature,sensor.boiler_setflowtemp,5,0,1,21,1
|
|
||||||
Cascade MCM10,boiler,121,setburnpow,burner set power,uint8 (>=0<=100),%,false,sensor.boiler_burner_set_power,sensor.boiler_setburnpow,5,0,1,22,1
|
|
||||||
Cascade MCM10,boiler,121,selburnpow,burner selected max power,uint8 (>=0<=254),%,true,number.boiler_burner_selected_max_power,number.boiler_selburnpow,5,0,1,23,1
|
Cascade MCM10,boiler,121,selburnpow,burner selected max power,uint8 (>=0<=254),%,true,number.boiler_burner_selected_max_power,number.boiler_selburnpow,5,0,1,23,1
|
||||||
Cascade MCM10,boiler,121,curburnpow,burner current power,uint8 (>=0<=100),%,false,sensor.boiler_burner_current_power,sensor.boiler_curburnpow,5,0,1,24,1
|
Cascade MCM10,boiler,121,curburnpow,burner current power,uint8 (>=0<=100),%,false,sensor.boiler_burner_current_power,sensor.boiler_curburnpow,5,0,1,24,1
|
||||||
Cascade MCM10,boiler,121,burnstarts,burner starts,uint24 (>=0<=16777213), ,false,sensor.boiler_burner_starts,sensor.boiler_burnstarts,5,0,1,25,2
|
Cascade MCM10,boiler,121,burnstarts,burner starts,uint24 (>=0<=16777213), ,false,sensor.boiler_burner_starts,sensor.boiler_burnstarts,5,0,1,25,2
|
||||||
@@ -1084,7 +1060,6 @@ Cascade MCM10,boiler,121,recharging,recharging,boolean, ,false,binary_sensor.boi
|
|||||||
Cascade MCM10,boiler,121,tempok,temperature ok,boolean, ,false,binary_sensor.boiler_dhw_temperature_ok,binary_sensor.boiler_dhw_tempok,5,9,1,60,1
|
Cascade MCM10,boiler,121,tempok,temperature ok,boolean, ,false,binary_sensor.boiler_dhw_temperature_ok,binary_sensor.boiler_dhw_tempok,5,9,1,60,1
|
||||||
Cascade MCM10,boiler,121,active,active,boolean, ,false,binary_sensor.boiler_dhw_active,binary_sensor.boiler_dhw_active,5,9,1,61,1
|
Cascade MCM10,boiler,121,active,active,boolean, ,false,binary_sensor.boiler_dhw_active,binary_sensor.boiler_dhw_active,5,9,1,61,1
|
||||||
Cascade MCM10,boiler,121,3wayvalve,3-way valve active,boolean, ,false,binary_sensor.boiler_dhw_3-way_valve_active,binary_sensor.boiler_dhw_3wayvalve,5,9,1,62,1
|
Cascade MCM10,boiler,121,3wayvalve,3-way valve active,boolean, ,false,binary_sensor.boiler_dhw_3-way_valve_active,binary_sensor.boiler_dhw_3wayvalve,5,9,1,62,1
|
||||||
Cascade MCM10,boiler,121,setpumppower,set pump power,uint8 (>=0<=100),%,false,sensor.boiler_dhw_set_pump_power,sensor.boiler_dhw_setpumppower,5,9,1,63,1
|
|
||||||
Cascade MCM10,boiler,121,mixertemp,mixer temperature,uint16 (>=0<=3199),C,false,sensor.boiler_dhw_mixer_temperature,sensor.boiler_dhw_mixertemp,5,9,1/10,64,1
|
Cascade MCM10,boiler,121,mixertemp,mixer temperature,uint16 (>=0<=3199),C,false,sensor.boiler_dhw_mixer_temperature,sensor.boiler_dhw_mixertemp,5,9,1/10,64,1
|
||||||
Cascade MCM10,boiler,121,cylmiddletemp,cylinder middle temperature (TS3),uint16 (>=0<=3199),C,false,sensor.boiler_dhw_cylinder_middle_temperature_(TS3),sensor.boiler_dhw_cylmiddletemp,5,9,1/10,65,1
|
Cascade MCM10,boiler,121,cylmiddletemp,cylinder middle temperature (TS3),uint16 (>=0<=3199),C,false,sensor.boiler_dhw_cylinder_middle_temperature_(TS3),sensor.boiler_dhw_cylmiddletemp,5,9,1/10,65,1
|
||||||
Cascade MCM10,boiler,121,starts,starts,uint24 (>=0<=16777213), ,false,sensor.boiler_dhw_starts,sensor.boiler_dhw_starts,5,9,1,66,2
|
Cascade MCM10,boiler,121,starts,starts,uint24 (>=0<=16777213), ,false,sensor.boiler_dhw_starts,sensor.boiler_dhw_starts,5,9,1,66,2
|
||||||
@@ -1136,8 +1111,6 @@ Proline,boiler,122,pumpmodmin,boiler pump min power,uint8 (>=0<=100),%,true,numb
|
|||||||
Proline,boiler,122,pumpmode,boiler pump mode,enum [proportional\|deltaP-1\|deltaP-2\|deltaP-3\|deltaP-4], ,true,select.boiler_boiler_pump_mode,select.boiler_pumpmode,5,0,1,18,1
|
Proline,boiler,122,pumpmode,boiler pump mode,enum [proportional\|deltaP-1\|deltaP-2\|deltaP-3\|deltaP-4], ,true,select.boiler_boiler_pump_mode,select.boiler_pumpmode,5,0,1,18,1
|
||||||
Proline,boiler,122,pumpcharacter,boiler pump characteristic,enum [proportional\|150mbar\|200mbar\|250mbar\|300mbar\|350mbar\|400mbar], ,true,select.boiler_boiler_pump_characteristic,select.boiler_pumpcharacter,5,0,1,19,1
|
Proline,boiler,122,pumpcharacter,boiler pump characteristic,enum [proportional\|150mbar\|200mbar\|250mbar\|300mbar\|350mbar\|400mbar], ,true,select.boiler_boiler_pump_characteristic,select.boiler_pumpcharacter,5,0,1,19,1
|
||||||
Proline,boiler,122,pumpdelay,pump delay,uint8 (>=0<=60),minutes,true,number.boiler_pump_delay,number.boiler_pumpdelay,5,0,1,20,1
|
Proline,boiler,122,pumpdelay,pump delay,uint8 (>=0<=60),minutes,true,number.boiler_pump_delay,number.boiler_pumpdelay,5,0,1,20,1
|
||||||
Proline,boiler,122,setflowtemp,set flow temperature,uint8 (>=0<=254),C,false,sensor.boiler_set_flow_temperature,sensor.boiler_setflowtemp,5,0,1,21,1
|
|
||||||
Proline,boiler,122,setburnpow,burner set power,uint8 (>=0<=100),%,false,sensor.boiler_burner_set_power,sensor.boiler_setburnpow,5,0,1,22,1
|
|
||||||
Proline,boiler,122,selburnpow,burner selected max power,uint8 (>=0<=254),%,true,number.boiler_burner_selected_max_power,number.boiler_selburnpow,5,0,1,23,1
|
Proline,boiler,122,selburnpow,burner selected max power,uint8 (>=0<=254),%,true,number.boiler_burner_selected_max_power,number.boiler_selburnpow,5,0,1,23,1
|
||||||
Proline,boiler,122,curburnpow,burner current power,uint8 (>=0<=100),%,false,sensor.boiler_burner_current_power,sensor.boiler_curburnpow,5,0,1,24,1
|
Proline,boiler,122,curburnpow,burner current power,uint8 (>=0<=100),%,false,sensor.boiler_burner_current_power,sensor.boiler_curburnpow,5,0,1,24,1
|
||||||
Proline,boiler,122,burnstarts,burner starts,uint24 (>=0<=16777213), ,false,sensor.boiler_burner_starts,sensor.boiler_burnstarts,5,0,1,25,2
|
Proline,boiler,122,burnstarts,burner starts,uint24 (>=0<=16777213), ,false,sensor.boiler_burner_starts,sensor.boiler_burnstarts,5,0,1,25,2
|
||||||
@@ -1196,7 +1169,6 @@ Proline,boiler,122,recharging,recharging,boolean, ,false,binary_sensor.boiler_dh
|
|||||||
Proline,boiler,122,tempok,temperature ok,boolean, ,false,binary_sensor.boiler_dhw_temperature_ok,binary_sensor.boiler_dhw_tempok,5,9,1,60,1
|
Proline,boiler,122,tempok,temperature ok,boolean, ,false,binary_sensor.boiler_dhw_temperature_ok,binary_sensor.boiler_dhw_tempok,5,9,1,60,1
|
||||||
Proline,boiler,122,active,active,boolean, ,false,binary_sensor.boiler_dhw_active,binary_sensor.boiler_dhw_active,5,9,1,61,1
|
Proline,boiler,122,active,active,boolean, ,false,binary_sensor.boiler_dhw_active,binary_sensor.boiler_dhw_active,5,9,1,61,1
|
||||||
Proline,boiler,122,3wayvalve,3-way valve active,boolean, ,false,binary_sensor.boiler_dhw_3-way_valve_active,binary_sensor.boiler_dhw_3wayvalve,5,9,1,62,1
|
Proline,boiler,122,3wayvalve,3-way valve active,boolean, ,false,binary_sensor.boiler_dhw_3-way_valve_active,binary_sensor.boiler_dhw_3wayvalve,5,9,1,62,1
|
||||||
Proline,boiler,122,setpumppower,set pump power,uint8 (>=0<=100),%,false,sensor.boiler_dhw_set_pump_power,sensor.boiler_dhw_setpumppower,5,9,1,63,1
|
|
||||||
Proline,boiler,122,mixertemp,mixer temperature,uint16 (>=0<=3199),C,false,sensor.boiler_dhw_mixer_temperature,sensor.boiler_dhw_mixertemp,5,9,1/10,64,1
|
Proline,boiler,122,mixertemp,mixer temperature,uint16 (>=0<=3199),C,false,sensor.boiler_dhw_mixer_temperature,sensor.boiler_dhw_mixertemp,5,9,1/10,64,1
|
||||||
Proline,boiler,122,cylmiddletemp,cylinder middle temperature (TS3),uint16 (>=0<=3199),C,false,sensor.boiler_dhw_cylinder_middle_temperature_(TS3),sensor.boiler_dhw_cylmiddletemp,5,9,1/10,65,1
|
Proline,boiler,122,cylmiddletemp,cylinder middle temperature (TS3),uint16 (>=0<=3199),C,false,sensor.boiler_dhw_cylinder_middle_temperature_(TS3),sensor.boiler_dhw_cylmiddletemp,5,9,1/10,65,1
|
||||||
Proline,boiler,122,starts,starts,uint24 (>=0<=16777213), ,false,sensor.boiler_dhw_starts,sensor.boiler_dhw_starts,5,9,1,66,2
|
Proline,boiler,122,starts,starts,uint24 (>=0<=16777213), ,false,sensor.boiler_dhw_starts,sensor.boiler_dhw_starts,5,9,1,66,2
|
||||||
@@ -1248,8 +1220,6 @@ GBx72/Trendline/Cerapur/Greenstar Si,boiler,123,pumpmodmin,boiler pump min power
|
|||||||
GBx72/Trendline/Cerapur/Greenstar Si,boiler,123,pumpmode,boiler pump mode,enum [proportional\|deltaP-1\|deltaP-2\|deltaP-3\|deltaP-4], ,true,select.boiler_boiler_pump_mode,select.boiler_pumpmode,5,0,1,18,1
|
GBx72/Trendline/Cerapur/Greenstar Si,boiler,123,pumpmode,boiler pump mode,enum [proportional\|deltaP-1\|deltaP-2\|deltaP-3\|deltaP-4], ,true,select.boiler_boiler_pump_mode,select.boiler_pumpmode,5,0,1,18,1
|
||||||
GBx72/Trendline/Cerapur/Greenstar Si,boiler,123,pumpcharacter,boiler pump characteristic,enum [proportional\|150mbar\|200mbar\|250mbar\|300mbar\|350mbar\|400mbar], ,true,select.boiler_boiler_pump_characteristic,select.boiler_pumpcharacter,5,0,1,19,1
|
GBx72/Trendline/Cerapur/Greenstar Si,boiler,123,pumpcharacter,boiler pump characteristic,enum [proportional\|150mbar\|200mbar\|250mbar\|300mbar\|350mbar\|400mbar], ,true,select.boiler_boiler_pump_characteristic,select.boiler_pumpcharacter,5,0,1,19,1
|
||||||
GBx72/Trendline/Cerapur/Greenstar Si,boiler,123,pumpdelay,pump delay,uint8 (>=0<=60),minutes,true,number.boiler_pump_delay,number.boiler_pumpdelay,5,0,1,20,1
|
GBx72/Trendline/Cerapur/Greenstar Si,boiler,123,pumpdelay,pump delay,uint8 (>=0<=60),minutes,true,number.boiler_pump_delay,number.boiler_pumpdelay,5,0,1,20,1
|
||||||
GBx72/Trendline/Cerapur/Greenstar Si,boiler,123,setflowtemp,set flow temperature,uint8 (>=0<=254),C,false,sensor.boiler_set_flow_temperature,sensor.boiler_setflowtemp,5,0,1,21,1
|
|
||||||
GBx72/Trendline/Cerapur/Greenstar Si,boiler,123,setburnpow,burner set power,uint8 (>=0<=100),%,false,sensor.boiler_burner_set_power,sensor.boiler_setburnpow,5,0,1,22,1
|
|
||||||
GBx72/Trendline/Cerapur/Greenstar Si,boiler,123,selburnpow,burner selected max power,uint8 (>=0<=254),%,true,number.boiler_burner_selected_max_power,number.boiler_selburnpow,5,0,1,23,1
|
GBx72/Trendline/Cerapur/Greenstar Si,boiler,123,selburnpow,burner selected max power,uint8 (>=0<=254),%,true,number.boiler_burner_selected_max_power,number.boiler_selburnpow,5,0,1,23,1
|
||||||
GBx72/Trendline/Cerapur/Greenstar Si,boiler,123,curburnpow,burner current power,uint8 (>=0<=100),%,false,sensor.boiler_burner_current_power,sensor.boiler_curburnpow,5,0,1,24,1
|
GBx72/Trendline/Cerapur/Greenstar Si,boiler,123,curburnpow,burner current power,uint8 (>=0<=100),%,false,sensor.boiler_burner_current_power,sensor.boiler_curburnpow,5,0,1,24,1
|
||||||
GBx72/Trendline/Cerapur/Greenstar Si,boiler,123,burnstarts,burner starts,uint24 (>=0<=16777213), ,false,sensor.boiler_burner_starts,sensor.boiler_burnstarts,5,0,1,25,2
|
GBx72/Trendline/Cerapur/Greenstar Si,boiler,123,burnstarts,burner starts,uint24 (>=0<=16777213), ,false,sensor.boiler_burner_starts,sensor.boiler_burnstarts,5,0,1,25,2
|
||||||
@@ -1308,7 +1278,6 @@ GBx72/Trendline/Cerapur/Greenstar Si,boiler,123,recharging,recharging,boolean, ,
|
|||||||
GBx72/Trendline/Cerapur/Greenstar Si,boiler,123,tempok,temperature ok,boolean, ,false,binary_sensor.boiler_dhw_temperature_ok,binary_sensor.boiler_dhw_tempok,5,9,1,60,1
|
GBx72/Trendline/Cerapur/Greenstar Si,boiler,123,tempok,temperature ok,boolean, ,false,binary_sensor.boiler_dhw_temperature_ok,binary_sensor.boiler_dhw_tempok,5,9,1,60,1
|
||||||
GBx72/Trendline/Cerapur/Greenstar Si,boiler,123,active,active,boolean, ,false,binary_sensor.boiler_dhw_active,binary_sensor.boiler_dhw_active,5,9,1,61,1
|
GBx72/Trendline/Cerapur/Greenstar Si,boiler,123,active,active,boolean, ,false,binary_sensor.boiler_dhw_active,binary_sensor.boiler_dhw_active,5,9,1,61,1
|
||||||
GBx72/Trendline/Cerapur/Greenstar Si,boiler,123,3wayvalve,3-way valve active,boolean, ,false,binary_sensor.boiler_dhw_3-way_valve_active,binary_sensor.boiler_dhw_3wayvalve,5,9,1,62,1
|
GBx72/Trendline/Cerapur/Greenstar Si,boiler,123,3wayvalve,3-way valve active,boolean, ,false,binary_sensor.boiler_dhw_3-way_valve_active,binary_sensor.boiler_dhw_3wayvalve,5,9,1,62,1
|
||||||
GBx72/Trendline/Cerapur/Greenstar Si,boiler,123,setpumppower,set pump power,uint8 (>=0<=100),%,false,sensor.boiler_dhw_set_pump_power,sensor.boiler_dhw_setpumppower,5,9,1,63,1
|
|
||||||
GBx72/Trendline/Cerapur/Greenstar Si,boiler,123,mixertemp,mixer temperature,uint16 (>=0<=3199),C,false,sensor.boiler_dhw_mixer_temperature,sensor.boiler_dhw_mixertemp,5,9,1/10,64,1
|
GBx72/Trendline/Cerapur/Greenstar Si,boiler,123,mixertemp,mixer temperature,uint16 (>=0<=3199),C,false,sensor.boiler_dhw_mixer_temperature,sensor.boiler_dhw_mixertemp,5,9,1/10,64,1
|
||||||
GBx72/Trendline/Cerapur/Greenstar Si,boiler,123,cylmiddletemp,cylinder middle temperature (TS3),uint16 (>=0<=3199),C,false,sensor.boiler_dhw_cylinder_middle_temperature_(TS3),sensor.boiler_dhw_cylmiddletemp,5,9,1/10,65,1
|
GBx72/Trendline/Cerapur/Greenstar Si,boiler,123,cylmiddletemp,cylinder middle temperature (TS3),uint16 (>=0<=3199),C,false,sensor.boiler_dhw_cylinder_middle_temperature_(TS3),sensor.boiler_dhw_cylmiddletemp,5,9,1/10,65,1
|
||||||
GBx72/Trendline/Cerapur/Greenstar Si,boiler,123,starts,starts,uint24 (>=0<=16777213), ,false,sensor.boiler_dhw_starts,sensor.boiler_dhw_starts,5,9,1,66,2
|
GBx72/Trendline/Cerapur/Greenstar Si,boiler,123,starts,starts,uint24 (>=0<=16777213), ,false,sensor.boiler_dhw_starts,sensor.boiler_dhw_starts,5,9,1,66,2
|
||||||
@@ -1360,8 +1329,6 @@ GB212,boiler,131,pumpmodmin,boiler pump min power,uint8 (>=0<=100),%,true,number
|
|||||||
GB212,boiler,131,pumpmode,boiler pump mode,enum [proportional\|deltaP-1\|deltaP-2\|deltaP-3\|deltaP-4], ,true,select.boiler_boiler_pump_mode,select.boiler_pumpmode,5,0,1,18,1
|
GB212,boiler,131,pumpmode,boiler pump mode,enum [proportional\|deltaP-1\|deltaP-2\|deltaP-3\|deltaP-4], ,true,select.boiler_boiler_pump_mode,select.boiler_pumpmode,5,0,1,18,1
|
||||||
GB212,boiler,131,pumpcharacter,boiler pump characteristic,enum [proportional\|150mbar\|200mbar\|250mbar\|300mbar\|350mbar\|400mbar], ,true,select.boiler_boiler_pump_characteristic,select.boiler_pumpcharacter,5,0,1,19,1
|
GB212,boiler,131,pumpcharacter,boiler pump characteristic,enum [proportional\|150mbar\|200mbar\|250mbar\|300mbar\|350mbar\|400mbar], ,true,select.boiler_boiler_pump_characteristic,select.boiler_pumpcharacter,5,0,1,19,1
|
||||||
GB212,boiler,131,pumpdelay,pump delay,uint8 (>=0<=60),minutes,true,number.boiler_pump_delay,number.boiler_pumpdelay,5,0,1,20,1
|
GB212,boiler,131,pumpdelay,pump delay,uint8 (>=0<=60),minutes,true,number.boiler_pump_delay,number.boiler_pumpdelay,5,0,1,20,1
|
||||||
GB212,boiler,131,setflowtemp,set flow temperature,uint8 (>=0<=254),C,false,sensor.boiler_set_flow_temperature,sensor.boiler_setflowtemp,5,0,1,21,1
|
|
||||||
GB212,boiler,131,setburnpow,burner set power,uint8 (>=0<=100),%,false,sensor.boiler_burner_set_power,sensor.boiler_setburnpow,5,0,1,22,1
|
|
||||||
GB212,boiler,131,selburnpow,burner selected max power,uint8 (>=0<=254),%,true,number.boiler_burner_selected_max_power,number.boiler_selburnpow,5,0,1,23,1
|
GB212,boiler,131,selburnpow,burner selected max power,uint8 (>=0<=254),%,true,number.boiler_burner_selected_max_power,number.boiler_selburnpow,5,0,1,23,1
|
||||||
GB212,boiler,131,curburnpow,burner current power,uint8 (>=0<=100),%,false,sensor.boiler_burner_current_power,sensor.boiler_curburnpow,5,0,1,24,1
|
GB212,boiler,131,curburnpow,burner current power,uint8 (>=0<=100),%,false,sensor.boiler_burner_current_power,sensor.boiler_curburnpow,5,0,1,24,1
|
||||||
GB212,boiler,131,burnstarts,burner starts,uint24 (>=0<=16777213), ,false,sensor.boiler_burner_starts,sensor.boiler_burnstarts,5,0,1,25,2
|
GB212,boiler,131,burnstarts,burner starts,uint24 (>=0<=16777213), ,false,sensor.boiler_burner_starts,sensor.boiler_burnstarts,5,0,1,25,2
|
||||||
@@ -1420,7 +1387,6 @@ GB212,boiler,131,recharging,recharging,boolean, ,false,binary_sensor.boiler_dhw_
|
|||||||
GB212,boiler,131,tempok,temperature ok,boolean, ,false,binary_sensor.boiler_dhw_temperature_ok,binary_sensor.boiler_dhw_tempok,5,9,1,60,1
|
GB212,boiler,131,tempok,temperature ok,boolean, ,false,binary_sensor.boiler_dhw_temperature_ok,binary_sensor.boiler_dhw_tempok,5,9,1,60,1
|
||||||
GB212,boiler,131,active,active,boolean, ,false,binary_sensor.boiler_dhw_active,binary_sensor.boiler_dhw_active,5,9,1,61,1
|
GB212,boiler,131,active,active,boolean, ,false,binary_sensor.boiler_dhw_active,binary_sensor.boiler_dhw_active,5,9,1,61,1
|
||||||
GB212,boiler,131,3wayvalve,3-way valve active,boolean, ,false,binary_sensor.boiler_dhw_3-way_valve_active,binary_sensor.boiler_dhw_3wayvalve,5,9,1,62,1
|
GB212,boiler,131,3wayvalve,3-way valve active,boolean, ,false,binary_sensor.boiler_dhw_3-way_valve_active,binary_sensor.boiler_dhw_3wayvalve,5,9,1,62,1
|
||||||
GB212,boiler,131,setpumppower,set pump power,uint8 (>=0<=100),%,false,sensor.boiler_dhw_set_pump_power,sensor.boiler_dhw_setpumppower,5,9,1,63,1
|
|
||||||
GB212,boiler,131,mixertemp,mixer temperature,uint16 (>=0<=3199),C,false,sensor.boiler_dhw_mixer_temperature,sensor.boiler_dhw_mixertemp,5,9,1/10,64,1
|
GB212,boiler,131,mixertemp,mixer temperature,uint16 (>=0<=3199),C,false,sensor.boiler_dhw_mixer_temperature,sensor.boiler_dhw_mixertemp,5,9,1/10,64,1
|
||||||
GB212,boiler,131,cylmiddletemp,cylinder middle temperature (TS3),uint16 (>=0<=3199),C,false,sensor.boiler_dhw_cylinder_middle_temperature_(TS3),sensor.boiler_dhw_cylmiddletemp,5,9,1/10,65,1
|
GB212,boiler,131,cylmiddletemp,cylinder middle temperature (TS3),uint16 (>=0<=3199),C,false,sensor.boiler_dhw_cylinder_middle_temperature_(TS3),sensor.boiler_dhw_cylmiddletemp,5,9,1/10,65,1
|
||||||
GB212,boiler,131,starts,starts,uint24 (>=0<=16777213), ,false,sensor.boiler_dhw_starts,sensor.boiler_dhw_starts,5,9,1,66,2
|
GB212,boiler,131,starts,starts,uint24 (>=0<=16777213), ,false,sensor.boiler_dhw_starts,sensor.boiler_dhw_starts,5,9,1,66,2
|
||||||
@@ -1472,8 +1438,6 @@ GC7000F,boiler,132,pumpmodmin,boiler pump min power,uint8 (>=0<=100),%,true,numb
|
|||||||
GC7000F,boiler,132,pumpmode,boiler pump mode,enum [proportional\|deltaP-1\|deltaP-2\|deltaP-3\|deltaP-4], ,true,select.boiler_boiler_pump_mode,select.boiler_pumpmode,5,0,1,18,1
|
GC7000F,boiler,132,pumpmode,boiler pump mode,enum [proportional\|deltaP-1\|deltaP-2\|deltaP-3\|deltaP-4], ,true,select.boiler_boiler_pump_mode,select.boiler_pumpmode,5,0,1,18,1
|
||||||
GC7000F,boiler,132,pumpcharacter,boiler pump characteristic,enum [proportional\|150mbar\|200mbar\|250mbar\|300mbar\|350mbar\|400mbar], ,true,select.boiler_boiler_pump_characteristic,select.boiler_pumpcharacter,5,0,1,19,1
|
GC7000F,boiler,132,pumpcharacter,boiler pump characteristic,enum [proportional\|150mbar\|200mbar\|250mbar\|300mbar\|350mbar\|400mbar], ,true,select.boiler_boiler_pump_characteristic,select.boiler_pumpcharacter,5,0,1,19,1
|
||||||
GC7000F,boiler,132,pumpdelay,pump delay,uint8 (>=0<=60),minutes,true,number.boiler_pump_delay,number.boiler_pumpdelay,5,0,1,20,1
|
GC7000F,boiler,132,pumpdelay,pump delay,uint8 (>=0<=60),minutes,true,number.boiler_pump_delay,number.boiler_pumpdelay,5,0,1,20,1
|
||||||
GC7000F,boiler,132,setflowtemp,set flow temperature,uint8 (>=0<=254),C,false,sensor.boiler_set_flow_temperature,sensor.boiler_setflowtemp,5,0,1,21,1
|
|
||||||
GC7000F,boiler,132,setburnpow,burner set power,uint8 (>=0<=100),%,false,sensor.boiler_burner_set_power,sensor.boiler_setburnpow,5,0,1,22,1
|
|
||||||
GC7000F,boiler,132,selburnpow,burner selected max power,uint8 (>=0<=254),%,true,number.boiler_burner_selected_max_power,number.boiler_selburnpow,5,0,1,23,1
|
GC7000F,boiler,132,selburnpow,burner selected max power,uint8 (>=0<=254),%,true,number.boiler_burner_selected_max_power,number.boiler_selburnpow,5,0,1,23,1
|
||||||
GC7000F,boiler,132,curburnpow,burner current power,uint8 (>=0<=100),%,false,sensor.boiler_burner_current_power,sensor.boiler_curburnpow,5,0,1,24,1
|
GC7000F,boiler,132,curburnpow,burner current power,uint8 (>=0<=100),%,false,sensor.boiler_burner_current_power,sensor.boiler_curburnpow,5,0,1,24,1
|
||||||
GC7000F,boiler,132,burnstarts,burner starts,uint24 (>=0<=16777213), ,false,sensor.boiler_burner_starts,sensor.boiler_burnstarts,5,0,1,25,2
|
GC7000F,boiler,132,burnstarts,burner starts,uint24 (>=0<=16777213), ,false,sensor.boiler_burner_starts,sensor.boiler_burnstarts,5,0,1,25,2
|
||||||
@@ -1532,7 +1496,6 @@ GC7000F,boiler,132,recharging,recharging,boolean, ,false,binary_sensor.boiler_dh
|
|||||||
GC7000F,boiler,132,tempok,temperature ok,boolean, ,false,binary_sensor.boiler_dhw_temperature_ok,binary_sensor.boiler_dhw_tempok,5,9,1,60,1
|
GC7000F,boiler,132,tempok,temperature ok,boolean, ,false,binary_sensor.boiler_dhw_temperature_ok,binary_sensor.boiler_dhw_tempok,5,9,1,60,1
|
||||||
GC7000F,boiler,132,active,active,boolean, ,false,binary_sensor.boiler_dhw_active,binary_sensor.boiler_dhw_active,5,9,1,61,1
|
GC7000F,boiler,132,active,active,boolean, ,false,binary_sensor.boiler_dhw_active,binary_sensor.boiler_dhw_active,5,9,1,61,1
|
||||||
GC7000F,boiler,132,3wayvalve,3-way valve active,boolean, ,false,binary_sensor.boiler_dhw_3-way_valve_active,binary_sensor.boiler_dhw_3wayvalve,5,9,1,62,1
|
GC7000F,boiler,132,3wayvalve,3-way valve active,boolean, ,false,binary_sensor.boiler_dhw_3-way_valve_active,binary_sensor.boiler_dhw_3wayvalve,5,9,1,62,1
|
||||||
GC7000F,boiler,132,setpumppower,set pump power,uint8 (>=0<=100),%,false,sensor.boiler_dhw_set_pump_power,sensor.boiler_dhw_setpumppower,5,9,1,63,1
|
|
||||||
GC7000F,boiler,132,mixertemp,mixer temperature,uint16 (>=0<=3199),C,false,sensor.boiler_dhw_mixer_temperature,sensor.boiler_dhw_mixertemp,5,9,1/10,64,1
|
GC7000F,boiler,132,mixertemp,mixer temperature,uint16 (>=0<=3199),C,false,sensor.boiler_dhw_mixer_temperature,sensor.boiler_dhw_mixertemp,5,9,1/10,64,1
|
||||||
GC7000F,boiler,132,cylmiddletemp,cylinder middle temperature (TS3),uint16 (>=0<=3199),C,false,sensor.boiler_dhw_cylinder_middle_temperature_(TS3),sensor.boiler_dhw_cylmiddletemp,5,9,1/10,65,1
|
GC7000F,boiler,132,cylmiddletemp,cylinder middle temperature (TS3),uint16 (>=0<=3199),C,false,sensor.boiler_dhw_cylinder_middle_temperature_(TS3),sensor.boiler_dhw_cylmiddletemp,5,9,1/10,65,1
|
||||||
GC7000F,boiler,132,starts,starts,uint24 (>=0<=16777213), ,false,sensor.boiler_dhw_starts,sensor.boiler_dhw_starts,5,9,1,66,2
|
GC7000F,boiler,132,starts,starts,uint24 (>=0<=16777213), ,false,sensor.boiler_dhw_starts,sensor.boiler_dhw_starts,5,9,1,66,2
|
||||||
@@ -1584,8 +1547,6 @@ Logano GB125/KB195i/Logamatic MC110,boiler,133,pumpmodmin,boiler pump min power,
|
|||||||
Logano GB125/KB195i/Logamatic MC110,boiler,133,pumpmode,boiler pump mode,enum [proportional\|deltaP-1\|deltaP-2\|deltaP-3\|deltaP-4], ,true,select.boiler_boiler_pump_mode,select.boiler_pumpmode,5,0,1,18,1
|
Logano GB125/KB195i/Logamatic MC110,boiler,133,pumpmode,boiler pump mode,enum [proportional\|deltaP-1\|deltaP-2\|deltaP-3\|deltaP-4], ,true,select.boiler_boiler_pump_mode,select.boiler_pumpmode,5,0,1,18,1
|
||||||
Logano GB125/KB195i/Logamatic MC110,boiler,133,pumpcharacter,boiler pump characteristic,enum [proportional\|150mbar\|200mbar\|250mbar\|300mbar\|350mbar\|400mbar], ,true,select.boiler_boiler_pump_characteristic,select.boiler_pumpcharacter,5,0,1,19,1
|
Logano GB125/KB195i/Logamatic MC110,boiler,133,pumpcharacter,boiler pump characteristic,enum [proportional\|150mbar\|200mbar\|250mbar\|300mbar\|350mbar\|400mbar], ,true,select.boiler_boiler_pump_characteristic,select.boiler_pumpcharacter,5,0,1,19,1
|
||||||
Logano GB125/KB195i/Logamatic MC110,boiler,133,pumpdelay,pump delay,uint8 (>=0<=60),minutes,true,number.boiler_pump_delay,number.boiler_pumpdelay,5,0,1,20,1
|
Logano GB125/KB195i/Logamatic MC110,boiler,133,pumpdelay,pump delay,uint8 (>=0<=60),minutes,true,number.boiler_pump_delay,number.boiler_pumpdelay,5,0,1,20,1
|
||||||
Logano GB125/KB195i/Logamatic MC110,boiler,133,setflowtemp,set flow temperature,uint8 (>=0<=254),C,false,sensor.boiler_set_flow_temperature,sensor.boiler_setflowtemp,5,0,1,21,1
|
|
||||||
Logano GB125/KB195i/Logamatic MC110,boiler,133,setburnpow,burner set power,uint8 (>=0<=100),%,false,sensor.boiler_burner_set_power,sensor.boiler_setburnpow,5,0,1,22,1
|
|
||||||
Logano GB125/KB195i/Logamatic MC110,boiler,133,selburnpow,burner selected max power,uint8 (>=0<=254),%,true,number.boiler_burner_selected_max_power,number.boiler_selburnpow,5,0,1,23,1
|
Logano GB125/KB195i/Logamatic MC110,boiler,133,selburnpow,burner selected max power,uint8 (>=0<=254),%,true,number.boiler_burner_selected_max_power,number.boiler_selburnpow,5,0,1,23,1
|
||||||
Logano GB125/KB195i/Logamatic MC110,boiler,133,curburnpow,burner current power,uint8 (>=0<=100),%,false,sensor.boiler_burner_current_power,sensor.boiler_curburnpow,5,0,1,24,1
|
Logano GB125/KB195i/Logamatic MC110,boiler,133,curburnpow,burner current power,uint8 (>=0<=100),%,false,sensor.boiler_burner_current_power,sensor.boiler_curburnpow,5,0,1,24,1
|
||||||
Logano GB125/KB195i/Logamatic MC110,boiler,133,burnstarts,burner starts,uint24 (>=0<=16777213), ,false,sensor.boiler_burner_starts,sensor.boiler_burnstarts,5,0,1,25,2
|
Logano GB125/KB195i/Logamatic MC110,boiler,133,burnstarts,burner starts,uint24 (>=0<=16777213), ,false,sensor.boiler_burner_starts,sensor.boiler_burnstarts,5,0,1,25,2
|
||||||
@@ -1644,7 +1605,6 @@ Logano GB125/KB195i/Logamatic MC110,boiler,133,recharging,recharging,boolean, ,f
|
|||||||
Logano GB125/KB195i/Logamatic MC110,boiler,133,tempok,temperature ok,boolean, ,false,binary_sensor.boiler_dhw_temperature_ok,binary_sensor.boiler_dhw_tempok,5,9,1,60,1
|
Logano GB125/KB195i/Logamatic MC110,boiler,133,tempok,temperature ok,boolean, ,false,binary_sensor.boiler_dhw_temperature_ok,binary_sensor.boiler_dhw_tempok,5,9,1,60,1
|
||||||
Logano GB125/KB195i/Logamatic MC110,boiler,133,active,active,boolean, ,false,binary_sensor.boiler_dhw_active,binary_sensor.boiler_dhw_active,5,9,1,61,1
|
Logano GB125/KB195i/Logamatic MC110,boiler,133,active,active,boolean, ,false,binary_sensor.boiler_dhw_active,binary_sensor.boiler_dhw_active,5,9,1,61,1
|
||||||
Logano GB125/KB195i/Logamatic MC110,boiler,133,3wayvalve,3-way valve active,boolean, ,false,binary_sensor.boiler_dhw_3-way_valve_active,binary_sensor.boiler_dhw_3wayvalve,5,9,1,62,1
|
Logano GB125/KB195i/Logamatic MC110,boiler,133,3wayvalve,3-way valve active,boolean, ,false,binary_sensor.boiler_dhw_3-way_valve_active,binary_sensor.boiler_dhw_3wayvalve,5,9,1,62,1
|
||||||
Logano GB125/KB195i/Logamatic MC110,boiler,133,setpumppower,set pump power,uint8 (>=0<=100),%,false,sensor.boiler_dhw_set_pump_power,sensor.boiler_dhw_setpumppower,5,9,1,63,1
|
|
||||||
Logano GB125/KB195i/Logamatic MC110,boiler,133,mixertemp,mixer temperature,uint16 (>=0<=3199),C,false,sensor.boiler_dhw_mixer_temperature,sensor.boiler_dhw_mixertemp,5,9,1/10,64,1
|
Logano GB125/KB195i/Logamatic MC110,boiler,133,mixertemp,mixer temperature,uint16 (>=0<=3199),C,false,sensor.boiler_dhw_mixer_temperature,sensor.boiler_dhw_mixertemp,5,9,1/10,64,1
|
||||||
Logano GB125/KB195i/Logamatic MC110,boiler,133,cylmiddletemp,cylinder middle temperature (TS3),uint16 (>=0<=3199),C,false,sensor.boiler_dhw_cylinder_middle_temperature_(TS3),sensor.boiler_dhw_cylmiddletemp,5,9,1/10,65,1
|
Logano GB125/KB195i/Logamatic MC110,boiler,133,cylmiddletemp,cylinder middle temperature (TS3),uint16 (>=0<=3199),C,false,sensor.boiler_dhw_cylinder_middle_temperature_(TS3),sensor.boiler_dhw_cylmiddletemp,5,9,1/10,65,1
|
||||||
Logano GB125/KB195i/Logamatic MC110,boiler,133,starts,starts,uint24 (>=0<=16777213), ,false,sensor.boiler_dhw_starts,sensor.boiler_dhw_starts,5,9,1,66,2
|
Logano GB125/KB195i/Logamatic MC110,boiler,133,starts,starts,uint24 (>=0<=16777213), ,false,sensor.boiler_dhw_starts,sensor.boiler_dhw_starts,5,9,1,66,2
|
||||||
@@ -1696,8 +1656,6 @@ Greenstar 30Ri Compact,boiler,154,pumpmodmin,boiler pump min power,uint8 (>=0<=1
|
|||||||
Greenstar 30Ri Compact,boiler,154,pumpmode,boiler pump mode,enum [proportional\|deltaP-1\|deltaP-2\|deltaP-3\|deltaP-4], ,true,select.boiler_boiler_pump_mode,select.boiler_pumpmode,5,0,1,18,1
|
Greenstar 30Ri Compact,boiler,154,pumpmode,boiler pump mode,enum [proportional\|deltaP-1\|deltaP-2\|deltaP-3\|deltaP-4], ,true,select.boiler_boiler_pump_mode,select.boiler_pumpmode,5,0,1,18,1
|
||||||
Greenstar 30Ri Compact,boiler,154,pumpcharacter,boiler pump characteristic,enum [proportional\|150mbar\|200mbar\|250mbar\|300mbar\|350mbar\|400mbar], ,true,select.boiler_boiler_pump_characteristic,select.boiler_pumpcharacter,5,0,1,19,1
|
Greenstar 30Ri Compact,boiler,154,pumpcharacter,boiler pump characteristic,enum [proportional\|150mbar\|200mbar\|250mbar\|300mbar\|350mbar\|400mbar], ,true,select.boiler_boiler_pump_characteristic,select.boiler_pumpcharacter,5,0,1,19,1
|
||||||
Greenstar 30Ri Compact,boiler,154,pumpdelay,pump delay,uint8 (>=0<=60),minutes,true,number.boiler_pump_delay,number.boiler_pumpdelay,5,0,1,20,1
|
Greenstar 30Ri Compact,boiler,154,pumpdelay,pump delay,uint8 (>=0<=60),minutes,true,number.boiler_pump_delay,number.boiler_pumpdelay,5,0,1,20,1
|
||||||
Greenstar 30Ri Compact,boiler,154,setflowtemp,set flow temperature,uint8 (>=0<=254),C,false,sensor.boiler_set_flow_temperature,sensor.boiler_setflowtemp,5,0,1,21,1
|
|
||||||
Greenstar 30Ri Compact,boiler,154,setburnpow,burner set power,uint8 (>=0<=100),%,false,sensor.boiler_burner_set_power,sensor.boiler_setburnpow,5,0,1,22,1
|
|
||||||
Greenstar 30Ri Compact,boiler,154,selburnpow,burner selected max power,uint8 (>=0<=254),%,true,number.boiler_burner_selected_max_power,number.boiler_selburnpow,5,0,1,23,1
|
Greenstar 30Ri Compact,boiler,154,selburnpow,burner selected max power,uint8 (>=0<=254),%,true,number.boiler_burner_selected_max_power,number.boiler_selburnpow,5,0,1,23,1
|
||||||
Greenstar 30Ri Compact,boiler,154,curburnpow,burner current power,uint8 (>=0<=100),%,false,sensor.boiler_burner_current_power,sensor.boiler_curburnpow,5,0,1,24,1
|
Greenstar 30Ri Compact,boiler,154,curburnpow,burner current power,uint8 (>=0<=100),%,false,sensor.boiler_burner_current_power,sensor.boiler_curburnpow,5,0,1,24,1
|
||||||
Greenstar 30Ri Compact,boiler,154,burnstarts,burner starts,uint24 (>=0<=16777213), ,false,sensor.boiler_burner_starts,sensor.boiler_burnstarts,5,0,1,25,2
|
Greenstar 30Ri Compact,boiler,154,burnstarts,burner starts,uint24 (>=0<=16777213), ,false,sensor.boiler_burner_starts,sensor.boiler_burnstarts,5,0,1,25,2
|
||||||
@@ -1756,7 +1714,6 @@ Greenstar 30Ri Compact,boiler,154,recharging,recharging,boolean, ,false,binary_s
|
|||||||
Greenstar 30Ri Compact,boiler,154,tempok,temperature ok,boolean, ,false,binary_sensor.boiler_dhw_temperature_ok,binary_sensor.boiler_dhw_tempok,5,9,1,60,1
|
Greenstar 30Ri Compact,boiler,154,tempok,temperature ok,boolean, ,false,binary_sensor.boiler_dhw_temperature_ok,binary_sensor.boiler_dhw_tempok,5,9,1,60,1
|
||||||
Greenstar 30Ri Compact,boiler,154,active,active,boolean, ,false,binary_sensor.boiler_dhw_active,binary_sensor.boiler_dhw_active,5,9,1,61,1
|
Greenstar 30Ri Compact,boiler,154,active,active,boolean, ,false,binary_sensor.boiler_dhw_active,binary_sensor.boiler_dhw_active,5,9,1,61,1
|
||||||
Greenstar 30Ri Compact,boiler,154,3wayvalve,3-way valve active,boolean, ,false,binary_sensor.boiler_dhw_3-way_valve_active,binary_sensor.boiler_dhw_3wayvalve,5,9,1,62,1
|
Greenstar 30Ri Compact,boiler,154,3wayvalve,3-way valve active,boolean, ,false,binary_sensor.boiler_dhw_3-way_valve_active,binary_sensor.boiler_dhw_3wayvalve,5,9,1,62,1
|
||||||
Greenstar 30Ri Compact,boiler,154,setpumppower,set pump power,uint8 (>=0<=100),%,false,sensor.boiler_dhw_set_pump_power,sensor.boiler_dhw_setpumppower,5,9,1,63,1
|
|
||||||
Greenstar 30Ri Compact,boiler,154,mixertemp,mixer temperature,uint16 (>=0<=3199),C,false,sensor.boiler_dhw_mixer_temperature,sensor.boiler_dhw_mixertemp,5,9,1/10,64,1
|
Greenstar 30Ri Compact,boiler,154,mixertemp,mixer temperature,uint16 (>=0<=3199),C,false,sensor.boiler_dhw_mixer_temperature,sensor.boiler_dhw_mixertemp,5,9,1/10,64,1
|
||||||
Greenstar 30Ri Compact,boiler,154,cylmiddletemp,cylinder middle temperature (TS3),uint16 (>=0<=3199),C,false,sensor.boiler_dhw_cylinder_middle_temperature_(TS3),sensor.boiler_dhw_cylmiddletemp,5,9,1/10,65,1
|
Greenstar 30Ri Compact,boiler,154,cylmiddletemp,cylinder middle temperature (TS3),uint16 (>=0<=3199),C,false,sensor.boiler_dhw_cylinder_middle_temperature_(TS3),sensor.boiler_dhw_cylmiddletemp,5,9,1/10,65,1
|
||||||
Greenstar 30Ri Compact,boiler,154,starts,starts,uint24 (>=0<=16777213), ,false,sensor.boiler_dhw_starts,sensor.boiler_dhw_starts,5,9,1,66,2
|
Greenstar 30Ri Compact,boiler,154,starts,starts,uint24 (>=0<=16777213), ,false,sensor.boiler_dhw_starts,sensor.boiler_dhw_starts,5,9,1,66,2
|
||||||
@@ -1808,8 +1765,6 @@ Cerapur Aero,boiler,167,pumpmodmin,boiler pump min power,uint8 (>=0<=100),%,true
|
|||||||
Cerapur Aero,boiler,167,pumpmode,boiler pump mode,enum [proportional\|deltaP-1\|deltaP-2\|deltaP-3\|deltaP-4], ,true,select.boiler_boiler_pump_mode,select.boiler_pumpmode,5,0,1,18,1
|
Cerapur Aero,boiler,167,pumpmode,boiler pump mode,enum [proportional\|deltaP-1\|deltaP-2\|deltaP-3\|deltaP-4], ,true,select.boiler_boiler_pump_mode,select.boiler_pumpmode,5,0,1,18,1
|
||||||
Cerapur Aero,boiler,167,pumpcharacter,boiler pump characteristic,enum [proportional\|150mbar\|200mbar\|250mbar\|300mbar\|350mbar\|400mbar], ,true,select.boiler_boiler_pump_characteristic,select.boiler_pumpcharacter,5,0,1,19,1
|
Cerapur Aero,boiler,167,pumpcharacter,boiler pump characteristic,enum [proportional\|150mbar\|200mbar\|250mbar\|300mbar\|350mbar\|400mbar], ,true,select.boiler_boiler_pump_characteristic,select.boiler_pumpcharacter,5,0,1,19,1
|
||||||
Cerapur Aero,boiler,167,pumpdelay,pump delay,uint8 (>=0<=60),minutes,true,number.boiler_pump_delay,number.boiler_pumpdelay,5,0,1,20,1
|
Cerapur Aero,boiler,167,pumpdelay,pump delay,uint8 (>=0<=60),minutes,true,number.boiler_pump_delay,number.boiler_pumpdelay,5,0,1,20,1
|
||||||
Cerapur Aero,boiler,167,setflowtemp,set flow temperature,uint8 (>=0<=254),C,false,sensor.boiler_set_flow_temperature,sensor.boiler_setflowtemp,5,0,1,21,1
|
|
||||||
Cerapur Aero,boiler,167,setburnpow,burner set power,uint8 (>=0<=100),%,false,sensor.boiler_burner_set_power,sensor.boiler_setburnpow,5,0,1,22,1
|
|
||||||
Cerapur Aero,boiler,167,selburnpow,burner selected max power,uint8 (>=0<=254),%,true,number.boiler_burner_selected_max_power,number.boiler_selburnpow,5,0,1,23,1
|
Cerapur Aero,boiler,167,selburnpow,burner selected max power,uint8 (>=0<=254),%,true,number.boiler_burner_selected_max_power,number.boiler_selburnpow,5,0,1,23,1
|
||||||
Cerapur Aero,boiler,167,curburnpow,burner current power,uint8 (>=0<=100),%,false,sensor.boiler_burner_current_power,sensor.boiler_curburnpow,5,0,1,24,1
|
Cerapur Aero,boiler,167,curburnpow,burner current power,uint8 (>=0<=100),%,false,sensor.boiler_burner_current_power,sensor.boiler_curburnpow,5,0,1,24,1
|
||||||
Cerapur Aero,boiler,167,burnstarts,burner starts,uint24 (>=0<=16777213), ,false,sensor.boiler_burner_starts,sensor.boiler_burnstarts,5,0,1,25,2
|
Cerapur Aero,boiler,167,burnstarts,burner starts,uint24 (>=0<=16777213), ,false,sensor.boiler_burner_starts,sensor.boiler_burnstarts,5,0,1,25,2
|
||||||
@@ -1868,7 +1823,6 @@ Cerapur Aero,boiler,167,recharging,recharging,boolean, ,false,binary_sensor.boil
|
|||||||
Cerapur Aero,boiler,167,tempok,temperature ok,boolean, ,false,binary_sensor.boiler_dhw_temperature_ok,binary_sensor.boiler_dhw_tempok,5,9,1,60,1
|
Cerapur Aero,boiler,167,tempok,temperature ok,boolean, ,false,binary_sensor.boiler_dhw_temperature_ok,binary_sensor.boiler_dhw_tempok,5,9,1,60,1
|
||||||
Cerapur Aero,boiler,167,active,active,boolean, ,false,binary_sensor.boiler_dhw_active,binary_sensor.boiler_dhw_active,5,9,1,61,1
|
Cerapur Aero,boiler,167,active,active,boolean, ,false,binary_sensor.boiler_dhw_active,binary_sensor.boiler_dhw_active,5,9,1,61,1
|
||||||
Cerapur Aero,boiler,167,3wayvalve,3-way valve active,boolean, ,false,binary_sensor.boiler_dhw_3-way_valve_active,binary_sensor.boiler_dhw_3wayvalve,5,9,1,62,1
|
Cerapur Aero,boiler,167,3wayvalve,3-way valve active,boolean, ,false,binary_sensor.boiler_dhw_3-way_valve_active,binary_sensor.boiler_dhw_3wayvalve,5,9,1,62,1
|
||||||
Cerapur Aero,boiler,167,setpumppower,set pump power,uint8 (>=0<=100),%,false,sensor.boiler_dhw_set_pump_power,sensor.boiler_dhw_setpumppower,5,9,1,63,1
|
|
||||||
Cerapur Aero,boiler,167,mixertemp,mixer temperature,uint16 (>=0<=3199),C,false,sensor.boiler_dhw_mixer_temperature,sensor.boiler_dhw_mixertemp,5,9,1/10,64,1
|
Cerapur Aero,boiler,167,mixertemp,mixer temperature,uint16 (>=0<=3199),C,false,sensor.boiler_dhw_mixer_temperature,sensor.boiler_dhw_mixertemp,5,9,1/10,64,1
|
||||||
Cerapur Aero,boiler,167,cylmiddletemp,cylinder middle temperature (TS3),uint16 (>=0<=3199),C,false,sensor.boiler_dhw_cylinder_middle_temperature_(TS3),sensor.boiler_dhw_cylmiddletemp,5,9,1/10,65,1
|
Cerapur Aero,boiler,167,cylmiddletemp,cylinder middle temperature (TS3),uint16 (>=0<=3199),C,false,sensor.boiler_dhw_cylinder_middle_temperature_(TS3),sensor.boiler_dhw_cylmiddletemp,5,9,1/10,65,1
|
||||||
Cerapur Aero,boiler,167,starts,starts,uint24 (>=0<=16777213), ,false,sensor.boiler_dhw_starts,sensor.boiler_dhw_starts,5,9,1,66,2
|
Cerapur Aero,boiler,167,starts,starts,uint24 (>=0<=16777213), ,false,sensor.boiler_dhw_starts,sensor.boiler_dhw_starts,5,9,1,66,2
|
||||||
@@ -1920,8 +1874,6 @@ Hybrid Heatpump,boiler,168,pumpmodmin,boiler pump min power,uint8 (>=0<=100),%,t
|
|||||||
Hybrid Heatpump,boiler,168,pumpmode,boiler pump mode,enum [proportional\|deltaP-1\|deltaP-2\|deltaP-3\|deltaP-4], ,true,select.boiler_boiler_pump_mode,select.boiler_pumpmode,5,0,1,18,1
|
Hybrid Heatpump,boiler,168,pumpmode,boiler pump mode,enum [proportional\|deltaP-1\|deltaP-2\|deltaP-3\|deltaP-4], ,true,select.boiler_boiler_pump_mode,select.boiler_pumpmode,5,0,1,18,1
|
||||||
Hybrid Heatpump,boiler,168,pumpcharacter,boiler pump characteristic,enum [proportional\|150mbar\|200mbar\|250mbar\|300mbar\|350mbar\|400mbar], ,true,select.boiler_boiler_pump_characteristic,select.boiler_pumpcharacter,5,0,1,19,1
|
Hybrid Heatpump,boiler,168,pumpcharacter,boiler pump characteristic,enum [proportional\|150mbar\|200mbar\|250mbar\|300mbar\|350mbar\|400mbar], ,true,select.boiler_boiler_pump_characteristic,select.boiler_pumpcharacter,5,0,1,19,1
|
||||||
Hybrid Heatpump,boiler,168,pumpdelay,pump delay,uint8 (>=0<=60),minutes,true,number.boiler_pump_delay,number.boiler_pumpdelay,5,0,1,20,1
|
Hybrid Heatpump,boiler,168,pumpdelay,pump delay,uint8 (>=0<=60),minutes,true,number.boiler_pump_delay,number.boiler_pumpdelay,5,0,1,20,1
|
||||||
Hybrid Heatpump,boiler,168,setflowtemp,set flow temperature,uint8 (>=0<=254),C,false,sensor.boiler_set_flow_temperature,sensor.boiler_setflowtemp,5,0,1,21,1
|
|
||||||
Hybrid Heatpump,boiler,168,setburnpow,burner set power,uint8 (>=0<=100),%,false,sensor.boiler_burner_set_power,sensor.boiler_setburnpow,5,0,1,22,1
|
|
||||||
Hybrid Heatpump,boiler,168,selburnpow,burner selected max power,uint8 (>=0<=254),%,true,number.boiler_burner_selected_max_power,number.boiler_selburnpow,5,0,1,23,1
|
Hybrid Heatpump,boiler,168,selburnpow,burner selected max power,uint8 (>=0<=254),%,true,number.boiler_burner_selected_max_power,number.boiler_selburnpow,5,0,1,23,1
|
||||||
Hybrid Heatpump,boiler,168,curburnpow,burner current power,uint8 (>=0<=100),%,false,sensor.boiler_burner_current_power,sensor.boiler_curburnpow,5,0,1,24,1
|
Hybrid Heatpump,boiler,168,curburnpow,burner current power,uint8 (>=0<=100),%,false,sensor.boiler_burner_current_power,sensor.boiler_curburnpow,5,0,1,24,1
|
||||||
Hybrid Heatpump,boiler,168,burnstarts,burner starts,uint24 (>=0<=16777213), ,false,sensor.boiler_burner_starts,sensor.boiler_burnstarts,5,0,1,25,2
|
Hybrid Heatpump,boiler,168,burnstarts,burner starts,uint24 (>=0<=16777213), ,false,sensor.boiler_burner_starts,sensor.boiler_burnstarts,5,0,1,25,2
|
||||||
@@ -1980,7 +1932,6 @@ Hybrid Heatpump,boiler,168,recharging,recharging,boolean, ,false,binary_sensor.b
|
|||||||
Hybrid Heatpump,boiler,168,tempok,temperature ok,boolean, ,false,binary_sensor.boiler_dhw_temperature_ok,binary_sensor.boiler_dhw_tempok,5,9,1,60,1
|
Hybrid Heatpump,boiler,168,tempok,temperature ok,boolean, ,false,binary_sensor.boiler_dhw_temperature_ok,binary_sensor.boiler_dhw_tempok,5,9,1,60,1
|
||||||
Hybrid Heatpump,boiler,168,active,active,boolean, ,false,binary_sensor.boiler_dhw_active,binary_sensor.boiler_dhw_active,5,9,1,61,1
|
Hybrid Heatpump,boiler,168,active,active,boolean, ,false,binary_sensor.boiler_dhw_active,binary_sensor.boiler_dhw_active,5,9,1,61,1
|
||||||
Hybrid Heatpump,boiler,168,3wayvalve,3-way valve active,boolean, ,false,binary_sensor.boiler_dhw_3-way_valve_active,binary_sensor.boiler_dhw_3wayvalve,5,9,1,62,1
|
Hybrid Heatpump,boiler,168,3wayvalve,3-way valve active,boolean, ,false,binary_sensor.boiler_dhw_3-way_valve_active,binary_sensor.boiler_dhw_3wayvalve,5,9,1,62,1
|
||||||
Hybrid Heatpump,boiler,168,setpumppower,set pump power,uint8 (>=0<=100),%,false,sensor.boiler_dhw_set_pump_power,sensor.boiler_dhw_setpumppower,5,9,1,63,1
|
|
||||||
Hybrid Heatpump,boiler,168,mixertemp,mixer temperature,uint16 (>=0<=3199),C,false,sensor.boiler_dhw_mixer_temperature,sensor.boiler_dhw_mixertemp,5,9,1/10,64,1
|
Hybrid Heatpump,boiler,168,mixertemp,mixer temperature,uint16 (>=0<=3199),C,false,sensor.boiler_dhw_mixer_temperature,sensor.boiler_dhw_mixertemp,5,9,1/10,64,1
|
||||||
Hybrid Heatpump,boiler,168,cylmiddletemp,cylinder middle temperature (TS3),uint16 (>=0<=3199),C,false,sensor.boiler_dhw_cylinder_middle_temperature_(TS3),sensor.boiler_dhw_cylmiddletemp,5,9,1/10,65,1
|
Hybrid Heatpump,boiler,168,cylmiddletemp,cylinder middle temperature (TS3),uint16 (>=0<=3199),C,false,sensor.boiler_dhw_cylinder_middle_temperature_(TS3),sensor.boiler_dhw_cylmiddletemp,5,9,1/10,65,1
|
||||||
Hybrid Heatpump,boiler,168,starts,starts,uint24 (>=0<=16777213), ,false,sensor.boiler_dhw_starts,sensor.boiler_dhw_starts,5,9,1,66,2
|
Hybrid Heatpump,boiler,168,starts,starts,uint24 (>=0<=16777213), ,false,sensor.boiler_dhw_starts,sensor.boiler_dhw_starts,5,9,1,66,2
|
||||||
@@ -2032,8 +1983,6 @@ Logano GB212,boiler,170,pumpmodmin,boiler pump min power,uint8 (>=0<=100),%,true
|
|||||||
Logano GB212,boiler,170,pumpmode,boiler pump mode,enum [proportional\|deltaP-1\|deltaP-2\|deltaP-3\|deltaP-4], ,true,select.boiler_boiler_pump_mode,select.boiler_pumpmode,5,0,1,18,1
|
Logano GB212,boiler,170,pumpmode,boiler pump mode,enum [proportional\|deltaP-1\|deltaP-2\|deltaP-3\|deltaP-4], ,true,select.boiler_boiler_pump_mode,select.boiler_pumpmode,5,0,1,18,1
|
||||||
Logano GB212,boiler,170,pumpcharacter,boiler pump characteristic,enum [proportional\|150mbar\|200mbar\|250mbar\|300mbar\|350mbar\|400mbar], ,true,select.boiler_boiler_pump_characteristic,select.boiler_pumpcharacter,5,0,1,19,1
|
Logano GB212,boiler,170,pumpcharacter,boiler pump characteristic,enum [proportional\|150mbar\|200mbar\|250mbar\|300mbar\|350mbar\|400mbar], ,true,select.boiler_boiler_pump_characteristic,select.boiler_pumpcharacter,5,0,1,19,1
|
||||||
Logano GB212,boiler,170,pumpdelay,pump delay,uint8 (>=0<=60),minutes,true,number.boiler_pump_delay,number.boiler_pumpdelay,5,0,1,20,1
|
Logano GB212,boiler,170,pumpdelay,pump delay,uint8 (>=0<=60),minutes,true,number.boiler_pump_delay,number.boiler_pumpdelay,5,0,1,20,1
|
||||||
Logano GB212,boiler,170,setflowtemp,set flow temperature,uint8 (>=0<=254),C,false,sensor.boiler_set_flow_temperature,sensor.boiler_setflowtemp,5,0,1,21,1
|
|
||||||
Logano GB212,boiler,170,setburnpow,burner set power,uint8 (>=0<=100),%,false,sensor.boiler_burner_set_power,sensor.boiler_setburnpow,5,0,1,22,1
|
|
||||||
Logano GB212,boiler,170,selburnpow,burner selected max power,uint8 (>=0<=254),%,true,number.boiler_burner_selected_max_power,number.boiler_selburnpow,5,0,1,23,1
|
Logano GB212,boiler,170,selburnpow,burner selected max power,uint8 (>=0<=254),%,true,number.boiler_burner_selected_max_power,number.boiler_selburnpow,5,0,1,23,1
|
||||||
Logano GB212,boiler,170,curburnpow,burner current power,uint8 (>=0<=100),%,false,sensor.boiler_burner_current_power,sensor.boiler_curburnpow,5,0,1,24,1
|
Logano GB212,boiler,170,curburnpow,burner current power,uint8 (>=0<=100),%,false,sensor.boiler_burner_current_power,sensor.boiler_curburnpow,5,0,1,24,1
|
||||||
Logano GB212,boiler,170,burnstarts,burner starts,uint24 (>=0<=16777213), ,false,sensor.boiler_burner_starts,sensor.boiler_burnstarts,5,0,1,25,2
|
Logano GB212,boiler,170,burnstarts,burner starts,uint24 (>=0<=16777213), ,false,sensor.boiler_burner_starts,sensor.boiler_burnstarts,5,0,1,25,2
|
||||||
@@ -2092,7 +2041,6 @@ Logano GB212,boiler,170,recharging,recharging,boolean, ,false,binary_sensor.boil
|
|||||||
Logano GB212,boiler,170,tempok,temperature ok,boolean, ,false,binary_sensor.boiler_dhw_temperature_ok,binary_sensor.boiler_dhw_tempok,5,9,1,60,1
|
Logano GB212,boiler,170,tempok,temperature ok,boolean, ,false,binary_sensor.boiler_dhw_temperature_ok,binary_sensor.boiler_dhw_tempok,5,9,1,60,1
|
||||||
Logano GB212,boiler,170,active,active,boolean, ,false,binary_sensor.boiler_dhw_active,binary_sensor.boiler_dhw_active,5,9,1,61,1
|
Logano GB212,boiler,170,active,active,boolean, ,false,binary_sensor.boiler_dhw_active,binary_sensor.boiler_dhw_active,5,9,1,61,1
|
||||||
Logano GB212,boiler,170,3wayvalve,3-way valve active,boolean, ,false,binary_sensor.boiler_dhw_3-way_valve_active,binary_sensor.boiler_dhw_3wayvalve,5,9,1,62,1
|
Logano GB212,boiler,170,3wayvalve,3-way valve active,boolean, ,false,binary_sensor.boiler_dhw_3-way_valve_active,binary_sensor.boiler_dhw_3wayvalve,5,9,1,62,1
|
||||||
Logano GB212,boiler,170,setpumppower,set pump power,uint8 (>=0<=100),%,false,sensor.boiler_dhw_set_pump_power,sensor.boiler_dhw_setpumppower,5,9,1,63,1
|
|
||||||
Logano GB212,boiler,170,mixertemp,mixer temperature,uint16 (>=0<=3199),C,false,sensor.boiler_dhw_mixer_temperature,sensor.boiler_dhw_mixertemp,5,9,1/10,64,1
|
Logano GB212,boiler,170,mixertemp,mixer temperature,uint16 (>=0<=3199),C,false,sensor.boiler_dhw_mixer_temperature,sensor.boiler_dhw_mixertemp,5,9,1/10,64,1
|
||||||
Logano GB212,boiler,170,cylmiddletemp,cylinder middle temperature (TS3),uint16 (>=0<=3199),C,false,sensor.boiler_dhw_cylinder_middle_temperature_(TS3),sensor.boiler_dhw_cylmiddletemp,5,9,1/10,65,1
|
Logano GB212,boiler,170,cylmiddletemp,cylinder middle temperature (TS3),uint16 (>=0<=3199),C,false,sensor.boiler_dhw_cylinder_middle_temperature_(TS3),sensor.boiler_dhw_cylmiddletemp,5,9,1/10,65,1
|
||||||
Logano GB212,boiler,170,starts,starts,uint24 (>=0<=16777213), ,false,sensor.boiler_dhw_starts,sensor.boiler_dhw_starts,5,9,1,66,2
|
Logano GB212,boiler,170,starts,starts,uint24 (>=0<=16777213), ,false,sensor.boiler_dhw_starts,sensor.boiler_dhw_starts,5,9,1,66,2
|
||||||
@@ -2122,8 +2070,6 @@ Enviline/Compress 6000AW/Hybrid 3000-7000iAW/SupraEco/Geo 5xx/WLW196i/WSW196i,bo
|
|||||||
Enviline/Compress 6000AW/Hybrid 3000-7000iAW/SupraEco/Geo 5xx/WLW196i/WSW196i,boiler,172,pumpmode,boiler pump mode,enum [proportional\|deltaP-1\|deltaP-2\|deltaP-3\|deltaP-4], ,true,select.boiler_boiler_pump_mode,select.boiler_pumpmode,5,0,1,18,1
|
Enviline/Compress 6000AW/Hybrid 3000-7000iAW/SupraEco/Geo 5xx/WLW196i/WSW196i,boiler,172,pumpmode,boiler pump mode,enum [proportional\|deltaP-1\|deltaP-2\|deltaP-3\|deltaP-4], ,true,select.boiler_boiler_pump_mode,select.boiler_pumpmode,5,0,1,18,1
|
||||||
Enviline/Compress 6000AW/Hybrid 3000-7000iAW/SupraEco/Geo 5xx/WLW196i/WSW196i,boiler,172,pumpcharacter,boiler pump characteristic,enum [proportional\|150mbar\|200mbar\|250mbar\|300mbar\|350mbar\|400mbar], ,true,select.boiler_boiler_pump_characteristic,select.boiler_pumpcharacter,5,0,1,19,1
|
Enviline/Compress 6000AW/Hybrid 3000-7000iAW/SupraEco/Geo 5xx/WLW196i/WSW196i,boiler,172,pumpcharacter,boiler pump characteristic,enum [proportional\|150mbar\|200mbar\|250mbar\|300mbar\|350mbar\|400mbar], ,true,select.boiler_boiler_pump_characteristic,select.boiler_pumpcharacter,5,0,1,19,1
|
||||||
Enviline/Compress 6000AW/Hybrid 3000-7000iAW/SupraEco/Geo 5xx/WLW196i/WSW196i,boiler,172,pumpdelay,pump delay,uint8 (>=0<=60),minutes,true,number.boiler_pump_delay,number.boiler_pumpdelay,5,0,1,20,1
|
Enviline/Compress 6000AW/Hybrid 3000-7000iAW/SupraEco/Geo 5xx/WLW196i/WSW196i,boiler,172,pumpdelay,pump delay,uint8 (>=0<=60),minutes,true,number.boiler_pump_delay,number.boiler_pumpdelay,5,0,1,20,1
|
||||||
Enviline/Compress 6000AW/Hybrid 3000-7000iAW/SupraEco/Geo 5xx/WLW196i/WSW196i,boiler,172,setflowtemp,set flow temperature,uint8 (>=0<=254),C,false,sensor.boiler_set_flow_temperature,sensor.boiler_setflowtemp,5,0,1,21,1
|
|
||||||
Enviline/Compress 6000AW/Hybrid 3000-7000iAW/SupraEco/Geo 5xx/WLW196i/WSW196i,boiler,172,setburnpow,burner set power,uint8 (>=0<=100),%,false,sensor.boiler_burner_set_power,sensor.boiler_setburnpow,5,0,1,22,1
|
|
||||||
Enviline/Compress 6000AW/Hybrid 3000-7000iAW/SupraEco/Geo 5xx/WLW196i/WSW196i,boiler,172,selburnpow,burner selected max power,uint8 (>=0<=254),%,true,number.boiler_burner_selected_max_power,number.boiler_selburnpow,5,0,1,23,1
|
Enviline/Compress 6000AW/Hybrid 3000-7000iAW/SupraEco/Geo 5xx/WLW196i/WSW196i,boiler,172,selburnpow,burner selected max power,uint8 (>=0<=254),%,true,number.boiler_burner_selected_max_power,number.boiler_selburnpow,5,0,1,23,1
|
||||||
Enviline/Compress 6000AW/Hybrid 3000-7000iAW/SupraEco/Geo 5xx/WLW196i/WSW196i,boiler,172,curburnpow,burner current power,uint8 (>=0<=100),%,false,sensor.boiler_burner_current_power,sensor.boiler_curburnpow,5,0,1,24,1
|
Enviline/Compress 6000AW/Hybrid 3000-7000iAW/SupraEco/Geo 5xx/WLW196i/WSW196i,boiler,172,curburnpow,burner current power,uint8 (>=0<=100),%,false,sensor.boiler_burner_current_power,sensor.boiler_curburnpow,5,0,1,24,1
|
||||||
Enviline/Compress 6000AW/Hybrid 3000-7000iAW/SupraEco/Geo 5xx/WLW196i/WSW196i,boiler,172,burnstarts,burner starts,uint24 (>=0<=16777213), ,false,sensor.boiler_burner_starts,sensor.boiler_burnstarts,5,0,1,25,2
|
Enviline/Compress 6000AW/Hybrid 3000-7000iAW/SupraEco/Geo 5xx/WLW196i/WSW196i,boiler,172,burnstarts,burner starts,uint24 (>=0<=16777213), ,false,sensor.boiler_burner_starts,sensor.boiler_burnstarts,5,0,1,25,2
|
||||||
@@ -2144,10 +2090,12 @@ Enviline/Compress 6000AW/Hybrid 3000-7000iAW/SupraEco/Geo 5xx/WLW196i/WSW196i,bo
|
|||||||
Enviline/Compress 6000AW/Hybrid 3000-7000iAW/SupraEco/Geo 5xx/WLW196i/WSW196i,boiler,172,nrgtotal,total energy,uint24 (>=0<=167772),kWh,false,sensor.boiler_total_energy,sensor.boiler_nrgtotal,5,0,1/100,80,2
|
Enviline/Compress 6000AW/Hybrid 3000-7000iAW/SupraEco/Geo 5xx/WLW196i/WSW196i,boiler,172,nrgtotal,total energy,uint24 (>=0<=167772),kWh,false,sensor.boiler_total_energy,sensor.boiler_nrgtotal,5,0,1/100,80,2
|
||||||
Enviline/Compress 6000AW/Hybrid 3000-7000iAW/SupraEco/Geo 5xx/WLW196i/WSW196i,boiler,172,nrg,energy,uint24 (>=0<=167772),kWh,false,sensor.boiler_dhw_energy,sensor.boiler_dhw_nrg,5,9,1/100,0,2
|
Enviline/Compress 6000AW/Hybrid 3000-7000iAW/SupraEco/Geo 5xx/WLW196i/WSW196i,boiler,172,nrg,energy,uint24 (>=0<=167772),kWh,false,sensor.boiler_dhw_energy,sensor.boiler_dhw_nrg,5,9,1/100,0,2
|
||||||
Enviline/Compress 6000AW/Hybrid 3000-7000iAW/SupraEco/Geo 5xx/WLW196i/WSW196i,boiler,172,nrgheat,energy heating,uint24 (>=0<=167772),kWh,false,sensor.boiler_energy_heating,sensor.boiler_nrgheat,5,0,1/100,82,2
|
Enviline/Compress 6000AW/Hybrid 3000-7000iAW/SupraEco/Geo 5xx/WLW196i/WSW196i,boiler,172,nrgheat,energy heating,uint24 (>=0<=167772),kWh,false,sensor.boiler_energy_heating,sensor.boiler_nrgheat,5,0,1/100,82,2
|
||||||
|
Enviline/Compress 6000AW/Hybrid 3000-7000iAW/SupraEco/Geo 5xx/WLW196i/WSW196i,boiler,172,nrgcool,energy cooling,uint24 (>=0<=167772),kWh,false,sensor.boiler_energy_cooling,sensor.boiler_nrgcool,5,0,1/100,-1,2
|
||||||
Enviline/Compress 6000AW/Hybrid 3000-7000iAW/SupraEco/Geo 5xx/WLW196i/WSW196i,boiler,172,metertotal,meter total,uint24 (>=0<=167772),kWh,false,sensor.boiler_meter_total,sensor.boiler_metertotal,5,0,1/100,84,2
|
Enviline/Compress 6000AW/Hybrid 3000-7000iAW/SupraEco/Geo 5xx/WLW196i/WSW196i,boiler,172,metertotal,meter total,uint24 (>=0<=167772),kWh,false,sensor.boiler_meter_total,sensor.boiler_metertotal,5,0,1/100,84,2
|
||||||
Enviline/Compress 6000AW/Hybrid 3000-7000iAW/SupraEco/Geo 5xx/WLW196i/WSW196i,boiler,172,metercomp,meter compressor,uint24 (>=0<=167772),kWh,false,sensor.boiler_meter_compressor,sensor.boiler_metercomp,5,0,1/100,86,2
|
Enviline/Compress 6000AW/Hybrid 3000-7000iAW/SupraEco/Geo 5xx/WLW196i/WSW196i,boiler,172,metercomp,meter compressor,uint24 (>=0<=167772),kWh,false,sensor.boiler_meter_compressor,sensor.boiler_metercomp,5,0,1/100,86,2
|
||||||
Enviline/Compress 6000AW/Hybrid 3000-7000iAW/SupraEco/Geo 5xx/WLW196i/WSW196i,boiler,172,metereheat,meter e-heater,uint24 (>=0<=167772),kWh,false,sensor.boiler_meter_e-heater,sensor.boiler_metereheat,5,0,1/100,88,2
|
Enviline/Compress 6000AW/Hybrid 3000-7000iAW/SupraEco/Geo 5xx/WLW196i/WSW196i,boiler,172,metereheat,meter e-heater,uint24 (>=0<=167772),kWh,false,sensor.boiler_meter_e-heater,sensor.boiler_metereheat,5,0,1/100,88,2
|
||||||
Enviline/Compress 6000AW/Hybrid 3000-7000iAW/SupraEco/Geo 5xx/WLW196i/WSW196i,boiler,172,meterheat,meter heating,uint24 (>=0<=167772),kWh,false,sensor.boiler_meter_heating,sensor.boiler_meterheat,5,0,1/100,90,2
|
Enviline/Compress 6000AW/Hybrid 3000-7000iAW/SupraEco/Geo 5xx/WLW196i/WSW196i,boiler,172,meterheat,meter heating,uint24 (>=0<=167772),kWh,false,sensor.boiler_meter_heating,sensor.boiler_meterheat,5,0,1/100,90,2
|
||||||
|
Enviline/Compress 6000AW/Hybrid 3000-7000iAW/SupraEco/Geo 5xx/WLW196i/WSW196i,boiler,172,metercool,meter cooling,uint24 (>=0<=167772),kWh,false,sensor.boiler_meter_cooling,sensor.boiler_metercool,5,0,1/100,-1,2
|
||||||
Enviline/Compress 6000AW/Hybrid 3000-7000iAW/SupraEco/Geo 5xx/WLW196i/WSW196i,boiler,172,meter,meter,uint24 (>=0<=167772),kWh,false,sensor.boiler_dhw_meter,sensor.boiler_dhw_meter,5,9,1/100,2,2
|
Enviline/Compress 6000AW/Hybrid 3000-7000iAW/SupraEco/Geo 5xx/WLW196i/WSW196i,boiler,172,meter,meter,uint24 (>=0<=167772),kWh,false,sensor.boiler_dhw_meter,sensor.boiler_dhw_meter,5,9,1/100,2,2
|
||||||
Enviline/Compress 6000AW/Hybrid 3000-7000iAW/SupraEco/Geo 5xx/WLW196i/WSW196i,boiler,172,uptimetotal,heatpump total uptime,time (>=0<=279620),minutes,false,sensor.boiler_heatpump_total_uptime,sensor.boiler_uptimetotal,5,0,1/60,92,2
|
Enviline/Compress 6000AW/Hybrid 3000-7000iAW/SupraEco/Geo 5xx/WLW196i/WSW196i,boiler,172,uptimetotal,heatpump total uptime,time (>=0<=279620),minutes,false,sensor.boiler_heatpump_total_uptime,sensor.boiler_uptimetotal,5,0,1/60,92,2
|
||||||
Enviline/Compress 6000AW/Hybrid 3000-7000iAW/SupraEco/Geo 5xx/WLW196i/WSW196i,boiler,172,uptimecontrol,total operating time heat,time (>=0<=279620),minutes,false,sensor.boiler_total_operating_time_heat,sensor.boiler_uptimecontrol,5,0,1/60,94,2
|
Enviline/Compress 6000AW/Hybrid 3000-7000iAW/SupraEco/Geo 5xx/WLW196i/WSW196i,boiler,172,uptimecontrol,total operating time heat,time (>=0<=279620),minutes,false,sensor.boiler_total_operating_time_heat,sensor.boiler_uptimecontrol,5,0,1/60,94,2
|
||||||
@@ -2294,7 +2242,6 @@ Enviline/Compress 6000AW/Hybrid 3000-7000iAW/SupraEco/Geo 5xx/WLW196i/WSW196i,bo
|
|||||||
Enviline/Compress 6000AW/Hybrid 3000-7000iAW/SupraEco/Geo 5xx/WLW196i/WSW196i,boiler,172,tempok,temperature ok,boolean, ,false,binary_sensor.boiler_dhw_temperature_ok,binary_sensor.boiler_dhw_tempok,5,9,1,60,1
|
Enviline/Compress 6000AW/Hybrid 3000-7000iAW/SupraEco/Geo 5xx/WLW196i/WSW196i,boiler,172,tempok,temperature ok,boolean, ,false,binary_sensor.boiler_dhw_temperature_ok,binary_sensor.boiler_dhw_tempok,5,9,1,60,1
|
||||||
Enviline/Compress 6000AW/Hybrid 3000-7000iAW/SupraEco/Geo 5xx/WLW196i/WSW196i,boiler,172,active,active,boolean, ,false,binary_sensor.boiler_dhw_active,binary_sensor.boiler_dhw_active,5,9,1,61,1
|
Enviline/Compress 6000AW/Hybrid 3000-7000iAW/SupraEco/Geo 5xx/WLW196i/WSW196i,boiler,172,active,active,boolean, ,false,binary_sensor.boiler_dhw_active,binary_sensor.boiler_dhw_active,5,9,1,61,1
|
||||||
Enviline/Compress 6000AW/Hybrid 3000-7000iAW/SupraEco/Geo 5xx/WLW196i/WSW196i,boiler,172,3wayvalve,3-way valve active,boolean, ,false,binary_sensor.boiler_dhw_3-way_valve_active,binary_sensor.boiler_dhw_3wayvalve,5,9,1,62,1
|
Enviline/Compress 6000AW/Hybrid 3000-7000iAW/SupraEco/Geo 5xx/WLW196i/WSW196i,boiler,172,3wayvalve,3-way valve active,boolean, ,false,binary_sensor.boiler_dhw_3-way_valve_active,binary_sensor.boiler_dhw_3wayvalve,5,9,1,62,1
|
||||||
Enviline/Compress 6000AW/Hybrid 3000-7000iAW/SupraEco/Geo 5xx/WLW196i/WSW196i,boiler,172,setpumppower,set pump power,uint8 (>=0<=100),%,false,sensor.boiler_dhw_set_pump_power,sensor.boiler_dhw_setpumppower,5,9,1,63,1
|
|
||||||
Enviline/Compress 6000AW/Hybrid 3000-7000iAW/SupraEco/Geo 5xx/WLW196i/WSW196i,boiler,172,mixertemp,mixer temperature,uint16 (>=0<=3199),C,false,sensor.boiler_dhw_mixer_temperature,sensor.boiler_dhw_mixertemp,5,9,1/10,64,1
|
Enviline/Compress 6000AW/Hybrid 3000-7000iAW/SupraEco/Geo 5xx/WLW196i/WSW196i,boiler,172,mixertemp,mixer temperature,uint16 (>=0<=3199),C,false,sensor.boiler_dhw_mixer_temperature,sensor.boiler_dhw_mixertemp,5,9,1/10,64,1
|
||||||
Enviline/Compress 6000AW/Hybrid 3000-7000iAW/SupraEco/Geo 5xx/WLW196i/WSW196i,boiler,172,cylmiddletemp,cylinder middle temperature (TS3),uint16 (>=0<=3199),C,false,sensor.boiler_dhw_cylinder_middle_temperature_(TS3),sensor.boiler_dhw_cylmiddletemp,5,9,1/10,65,1
|
Enviline/Compress 6000AW/Hybrid 3000-7000iAW/SupraEco/Geo 5xx/WLW196i/WSW196i,boiler,172,cylmiddletemp,cylinder middle temperature (TS3),uint16 (>=0<=3199),C,false,sensor.boiler_dhw_cylinder_middle_temperature_(TS3),sensor.boiler_dhw_cylmiddletemp,5,9,1/10,65,1
|
||||||
Enviline/Compress 6000AW/Hybrid 3000-7000iAW/SupraEco/Geo 5xx/WLW196i/WSW196i,boiler,172,starts,starts,uint24 (>=0<=16777213), ,false,sensor.boiler_dhw_starts,sensor.boiler_dhw_starts,5,9,1,66,2
|
Enviline/Compress 6000AW/Hybrid 3000-7000iAW/SupraEco/Geo 5xx/WLW196i/WSW196i,boiler,172,starts,starts,uint24 (>=0<=16777213), ,false,sensor.boiler_dhw_starts,sensor.boiler_dhw_starts,5,9,1,66,2
|
||||||
@@ -2320,8 +2267,6 @@ Geo 5xx,boiler,173,pumpmodmin,boiler pump min power,uint8 (>=0<=100),%,true,numb
|
|||||||
Geo 5xx,boiler,173,pumpmode,boiler pump mode,enum [proportional\|deltaP-1\|deltaP-2\|deltaP-3\|deltaP-4], ,true,select.boiler_boiler_pump_mode,select.boiler_pumpmode,5,0,1,18,1
|
Geo 5xx,boiler,173,pumpmode,boiler pump mode,enum [proportional\|deltaP-1\|deltaP-2\|deltaP-3\|deltaP-4], ,true,select.boiler_boiler_pump_mode,select.boiler_pumpmode,5,0,1,18,1
|
||||||
Geo 5xx,boiler,173,pumpcharacter,boiler pump characteristic,enum [proportional\|150mbar\|200mbar\|250mbar\|300mbar\|350mbar\|400mbar], ,true,select.boiler_boiler_pump_characteristic,select.boiler_pumpcharacter,5,0,1,19,1
|
Geo 5xx,boiler,173,pumpcharacter,boiler pump characteristic,enum [proportional\|150mbar\|200mbar\|250mbar\|300mbar\|350mbar\|400mbar], ,true,select.boiler_boiler_pump_characteristic,select.boiler_pumpcharacter,5,0,1,19,1
|
||||||
Geo 5xx,boiler,173,pumpdelay,pump delay,uint8 (>=0<=60),minutes,true,number.boiler_pump_delay,number.boiler_pumpdelay,5,0,1,20,1
|
Geo 5xx,boiler,173,pumpdelay,pump delay,uint8 (>=0<=60),minutes,true,number.boiler_pump_delay,number.boiler_pumpdelay,5,0,1,20,1
|
||||||
Geo 5xx,boiler,173,setflowtemp,set flow temperature,uint8 (>=0<=254),C,false,sensor.boiler_set_flow_temperature,sensor.boiler_setflowtemp,5,0,1,21,1
|
|
||||||
Geo 5xx,boiler,173,setburnpow,burner set power,uint8 (>=0<=100),%,false,sensor.boiler_burner_set_power,sensor.boiler_setburnpow,5,0,1,22,1
|
|
||||||
Geo 5xx,boiler,173,selburnpow,burner selected max power,uint8 (>=0<=254),%,true,number.boiler_burner_selected_max_power,number.boiler_selburnpow,5,0,1,23,1
|
Geo 5xx,boiler,173,selburnpow,burner selected max power,uint8 (>=0<=254),%,true,number.boiler_burner_selected_max_power,number.boiler_selburnpow,5,0,1,23,1
|
||||||
Geo 5xx,boiler,173,curburnpow,burner current power,uint8 (>=0<=100),%,false,sensor.boiler_burner_current_power,sensor.boiler_curburnpow,5,0,1,24,1
|
Geo 5xx,boiler,173,curburnpow,burner current power,uint8 (>=0<=100),%,false,sensor.boiler_burner_current_power,sensor.boiler_curburnpow,5,0,1,24,1
|
||||||
Geo 5xx,boiler,173,burnstarts,burner starts,uint24 (>=0<=16777213), ,false,sensor.boiler_burner_starts,sensor.boiler_burnstarts,5,0,1,25,2
|
Geo 5xx,boiler,173,burnstarts,burner starts,uint24 (>=0<=16777213), ,false,sensor.boiler_burner_starts,sensor.boiler_burnstarts,5,0,1,25,2
|
||||||
@@ -2342,10 +2287,12 @@ Geo 5xx,boiler,173,emergencytemp,emergency temperature,uint8 (>=15<=70),C,true,n
|
|||||||
Geo 5xx,boiler,173,nrgtotal,total energy,uint24 (>=0<=167772),kWh,false,sensor.boiler_total_energy,sensor.boiler_nrgtotal,5,0,1/100,80,2
|
Geo 5xx,boiler,173,nrgtotal,total energy,uint24 (>=0<=167772),kWh,false,sensor.boiler_total_energy,sensor.boiler_nrgtotal,5,0,1/100,80,2
|
||||||
Geo 5xx,boiler,173,nrg,energy,uint24 (>=0<=167772),kWh,false,sensor.boiler_dhw_energy,sensor.boiler_dhw_nrg,5,9,1/100,0,2
|
Geo 5xx,boiler,173,nrg,energy,uint24 (>=0<=167772),kWh,false,sensor.boiler_dhw_energy,sensor.boiler_dhw_nrg,5,9,1/100,0,2
|
||||||
Geo 5xx,boiler,173,nrgheat,energy heating,uint24 (>=0<=167772),kWh,false,sensor.boiler_energy_heating,sensor.boiler_nrgheat,5,0,1/100,82,2
|
Geo 5xx,boiler,173,nrgheat,energy heating,uint24 (>=0<=167772),kWh,false,sensor.boiler_energy_heating,sensor.boiler_nrgheat,5,0,1/100,82,2
|
||||||
|
Geo 5xx,boiler,173,nrgcool,energy cooling,uint24 (>=0<=167772),kWh,false,sensor.boiler_energy_cooling,sensor.boiler_nrgcool,5,0,1/100,-1,2
|
||||||
Geo 5xx,boiler,173,metertotal,meter total,uint24 (>=0<=167772),kWh,false,sensor.boiler_meter_total,sensor.boiler_metertotal,5,0,1/100,84,2
|
Geo 5xx,boiler,173,metertotal,meter total,uint24 (>=0<=167772),kWh,false,sensor.boiler_meter_total,sensor.boiler_metertotal,5,0,1/100,84,2
|
||||||
Geo 5xx,boiler,173,metercomp,meter compressor,uint24 (>=0<=167772),kWh,false,sensor.boiler_meter_compressor,sensor.boiler_metercomp,5,0,1/100,86,2
|
Geo 5xx,boiler,173,metercomp,meter compressor,uint24 (>=0<=167772),kWh,false,sensor.boiler_meter_compressor,sensor.boiler_metercomp,5,0,1/100,86,2
|
||||||
Geo 5xx,boiler,173,metereheat,meter e-heater,uint24 (>=0<=167772),kWh,false,sensor.boiler_meter_e-heater,sensor.boiler_metereheat,5,0,1/100,88,2
|
Geo 5xx,boiler,173,metereheat,meter e-heater,uint24 (>=0<=167772),kWh,false,sensor.boiler_meter_e-heater,sensor.boiler_metereheat,5,0,1/100,88,2
|
||||||
Geo 5xx,boiler,173,meterheat,meter heating,uint24 (>=0<=167772),kWh,false,sensor.boiler_meter_heating,sensor.boiler_meterheat,5,0,1/100,90,2
|
Geo 5xx,boiler,173,meterheat,meter heating,uint24 (>=0<=167772),kWh,false,sensor.boiler_meter_heating,sensor.boiler_meterheat,5,0,1/100,90,2
|
||||||
|
Geo 5xx,boiler,173,metercool,meter cooling,uint24 (>=0<=167772),kWh,false,sensor.boiler_meter_cooling,sensor.boiler_metercool,5,0,1/100,-1,2
|
||||||
Geo 5xx,boiler,173,meter,meter,uint24 (>=0<=167772),kWh,false,sensor.boiler_dhw_meter,sensor.boiler_dhw_meter,5,9,1/100,2,2
|
Geo 5xx,boiler,173,meter,meter,uint24 (>=0<=167772),kWh,false,sensor.boiler_dhw_meter,sensor.boiler_dhw_meter,5,9,1/100,2,2
|
||||||
Geo 5xx,boiler,173,uptimetotal,heatpump total uptime,time (>=0<=279620),minutes,false,sensor.boiler_heatpump_total_uptime,sensor.boiler_uptimetotal,5,0,1/60,92,2
|
Geo 5xx,boiler,173,uptimetotal,heatpump total uptime,time (>=0<=279620),minutes,false,sensor.boiler_heatpump_total_uptime,sensor.boiler_uptimetotal,5,0,1/60,92,2
|
||||||
Geo 5xx,boiler,173,uptimecontrol,total operating time heat,time (>=0<=279620),minutes,false,sensor.boiler_total_operating_time_heat,sensor.boiler_uptimecontrol,5,0,1/60,94,2
|
Geo 5xx,boiler,173,uptimecontrol,total operating time heat,time (>=0<=279620),minutes,false,sensor.boiler_total_operating_time_heat,sensor.boiler_uptimecontrol,5,0,1/60,94,2
|
||||||
@@ -2492,7 +2439,6 @@ Geo 5xx,boiler,173,recharging,recharging,boolean, ,false,binary_sensor.boiler_dh
|
|||||||
Geo 5xx,boiler,173,tempok,temperature ok,boolean, ,false,binary_sensor.boiler_dhw_temperature_ok,binary_sensor.boiler_dhw_tempok,5,9,1,60,1
|
Geo 5xx,boiler,173,tempok,temperature ok,boolean, ,false,binary_sensor.boiler_dhw_temperature_ok,binary_sensor.boiler_dhw_tempok,5,9,1,60,1
|
||||||
Geo 5xx,boiler,173,active,active,boolean, ,false,binary_sensor.boiler_dhw_active,binary_sensor.boiler_dhw_active,5,9,1,61,1
|
Geo 5xx,boiler,173,active,active,boolean, ,false,binary_sensor.boiler_dhw_active,binary_sensor.boiler_dhw_active,5,9,1,61,1
|
||||||
Geo 5xx,boiler,173,3wayvalve,3-way valve active,boolean, ,false,binary_sensor.boiler_dhw_3-way_valve_active,binary_sensor.boiler_dhw_3wayvalve,5,9,1,62,1
|
Geo 5xx,boiler,173,3wayvalve,3-way valve active,boolean, ,false,binary_sensor.boiler_dhw_3-way_valve_active,binary_sensor.boiler_dhw_3wayvalve,5,9,1,62,1
|
||||||
Geo 5xx,boiler,173,setpumppower,set pump power,uint8 (>=0<=100),%,false,sensor.boiler_dhw_set_pump_power,sensor.boiler_dhw_setpumppower,5,9,1,63,1
|
|
||||||
Geo 5xx,boiler,173,mixertemp,mixer temperature,uint16 (>=0<=3199),C,false,sensor.boiler_dhw_mixer_temperature,sensor.boiler_dhw_mixertemp,5,9,1/10,64,1
|
Geo 5xx,boiler,173,mixertemp,mixer temperature,uint16 (>=0<=3199),C,false,sensor.boiler_dhw_mixer_temperature,sensor.boiler_dhw_mixertemp,5,9,1/10,64,1
|
||||||
Geo 5xx,boiler,173,cylmiddletemp,cylinder middle temperature (TS3),uint16 (>=0<=3199),C,false,sensor.boiler_dhw_cylinder_middle_temperature_(TS3),sensor.boiler_dhw_cylmiddletemp,5,9,1/10,65,1
|
Geo 5xx,boiler,173,cylmiddletemp,cylinder middle temperature (TS3),uint16 (>=0<=3199),C,false,sensor.boiler_dhw_cylinder_middle_temperature_(TS3),sensor.boiler_dhw_cylmiddletemp,5,9,1/10,65,1
|
||||||
Geo 5xx,boiler,173,starts,starts,uint24 (>=0<=16777213), ,false,sensor.boiler_dhw_starts,sensor.boiler_dhw_starts,5,9,1,66,2
|
Geo 5xx,boiler,173,starts,starts,uint24 (>=0<=16777213), ,false,sensor.boiler_dhw_starts,sensor.boiler_dhw_starts,5,9,1,66,2
|
||||||
@@ -2540,8 +2486,6 @@ Condens 5000i/Greenstar 8000/GC9800IW/GB192i.2,boiler,195,pumpmodmin,boiler pump
|
|||||||
Condens 5000i/Greenstar 8000/GC9800IW/GB192i.2,boiler,195,pumpmode,boiler pump mode,enum [proportional\|deltaP-1\|deltaP-2\|deltaP-3\|deltaP-4], ,true,select.boiler_boiler_pump_mode,select.boiler_pumpmode,5,0,1,18,1
|
Condens 5000i/Greenstar 8000/GC9800IW/GB192i.2,boiler,195,pumpmode,boiler pump mode,enum [proportional\|deltaP-1\|deltaP-2\|deltaP-3\|deltaP-4], ,true,select.boiler_boiler_pump_mode,select.boiler_pumpmode,5,0,1,18,1
|
||||||
Condens 5000i/Greenstar 8000/GC9800IW/GB192i.2,boiler,195,pumpcharacter,boiler pump characteristic,enum [proportional\|150mbar\|200mbar\|250mbar\|300mbar\|350mbar\|400mbar], ,true,select.boiler_boiler_pump_characteristic,select.boiler_pumpcharacter,5,0,1,19,1
|
Condens 5000i/Greenstar 8000/GC9800IW/GB192i.2,boiler,195,pumpcharacter,boiler pump characteristic,enum [proportional\|150mbar\|200mbar\|250mbar\|300mbar\|350mbar\|400mbar], ,true,select.boiler_boiler_pump_characteristic,select.boiler_pumpcharacter,5,0,1,19,1
|
||||||
Condens 5000i/Greenstar 8000/GC9800IW/GB192i.2,boiler,195,pumpdelay,pump delay,uint8 (>=0<=60),minutes,true,number.boiler_pump_delay,number.boiler_pumpdelay,5,0,1,20,1
|
Condens 5000i/Greenstar 8000/GC9800IW/GB192i.2,boiler,195,pumpdelay,pump delay,uint8 (>=0<=60),minutes,true,number.boiler_pump_delay,number.boiler_pumpdelay,5,0,1,20,1
|
||||||
Condens 5000i/Greenstar 8000/GC9800IW/GB192i.2,boiler,195,setflowtemp,set flow temperature,uint8 (>=0<=254),C,false,sensor.boiler_set_flow_temperature,sensor.boiler_setflowtemp,5,0,1,21,1
|
|
||||||
Condens 5000i/Greenstar 8000/GC9800IW/GB192i.2,boiler,195,setburnpow,burner set power,uint8 (>=0<=100),%,false,sensor.boiler_burner_set_power,sensor.boiler_setburnpow,5,0,1,22,1
|
|
||||||
Condens 5000i/Greenstar 8000/GC9800IW/GB192i.2,boiler,195,selburnpow,burner selected max power,uint8 (>=0<=254),%,true,number.boiler_burner_selected_max_power,number.boiler_selburnpow,5,0,1,23,1
|
Condens 5000i/Greenstar 8000/GC9800IW/GB192i.2,boiler,195,selburnpow,burner selected max power,uint8 (>=0<=254),%,true,number.boiler_burner_selected_max_power,number.boiler_selburnpow,5,0,1,23,1
|
||||||
Condens 5000i/Greenstar 8000/GC9800IW/GB192i.2,boiler,195,curburnpow,burner current power,uint8 (>=0<=100),%,false,sensor.boiler_burner_current_power,sensor.boiler_curburnpow,5,0,1,24,1
|
Condens 5000i/Greenstar 8000/GC9800IW/GB192i.2,boiler,195,curburnpow,burner current power,uint8 (>=0<=100),%,false,sensor.boiler_burner_current_power,sensor.boiler_curburnpow,5,0,1,24,1
|
||||||
Condens 5000i/Greenstar 8000/GC9800IW/GB192i.2,boiler,195,burnstarts,burner starts,uint24 (>=0<=16777213), ,false,sensor.boiler_burner_starts,sensor.boiler_burnstarts,5,0,1,25,2
|
Condens 5000i/Greenstar 8000/GC9800IW/GB192i.2,boiler,195,burnstarts,burner starts,uint24 (>=0<=16777213), ,false,sensor.boiler_burner_starts,sensor.boiler_burnstarts,5,0,1,25,2
|
||||||
@@ -2600,7 +2544,6 @@ Condens 5000i/Greenstar 8000/GC9800IW/GB192i.2,boiler,195,recharging,recharging,
|
|||||||
Condens 5000i/Greenstar 8000/GC9800IW/GB192i.2,boiler,195,tempok,temperature ok,boolean, ,false,binary_sensor.boiler_dhw_temperature_ok,binary_sensor.boiler_dhw_tempok,5,9,1,60,1
|
Condens 5000i/Greenstar 8000/GC9800IW/GB192i.2,boiler,195,tempok,temperature ok,boolean, ,false,binary_sensor.boiler_dhw_temperature_ok,binary_sensor.boiler_dhw_tempok,5,9,1,60,1
|
||||||
Condens 5000i/Greenstar 8000/GC9800IW/GB192i.2,boiler,195,active,active,boolean, ,false,binary_sensor.boiler_dhw_active,binary_sensor.boiler_dhw_active,5,9,1,61,1
|
Condens 5000i/Greenstar 8000/GC9800IW/GB192i.2,boiler,195,active,active,boolean, ,false,binary_sensor.boiler_dhw_active,binary_sensor.boiler_dhw_active,5,9,1,61,1
|
||||||
Condens 5000i/Greenstar 8000/GC9800IW/GB192i.2,boiler,195,3wayvalve,3-way valve active,boolean, ,false,binary_sensor.boiler_dhw_3-way_valve_active,binary_sensor.boiler_dhw_3wayvalve,5,9,1,62,1
|
Condens 5000i/Greenstar 8000/GC9800IW/GB192i.2,boiler,195,3wayvalve,3-way valve active,boolean, ,false,binary_sensor.boiler_dhw_3-way_valve_active,binary_sensor.boiler_dhw_3wayvalve,5,9,1,62,1
|
||||||
Condens 5000i/Greenstar 8000/GC9800IW/GB192i.2,boiler,195,setpumppower,set pump power,uint8 (>=0<=100),%,false,sensor.boiler_dhw_set_pump_power,sensor.boiler_dhw_setpumppower,5,9,1,63,1
|
|
||||||
Condens 5000i/Greenstar 8000/GC9800IW/GB192i.2,boiler,195,mixertemp,mixer temperature,uint16 (>=0<=3199),C,false,sensor.boiler_dhw_mixer_temperature,sensor.boiler_dhw_mixertemp,5,9,1/10,64,1
|
Condens 5000i/Greenstar 8000/GC9800IW/GB192i.2,boiler,195,mixertemp,mixer temperature,uint16 (>=0<=3199),C,false,sensor.boiler_dhw_mixer_temperature,sensor.boiler_dhw_mixertemp,5,9,1/10,64,1
|
||||||
Condens 5000i/Greenstar 8000/GC9800IW/GB192i.2,boiler,195,cylmiddletemp,cylinder middle temperature (TS3),uint16 (>=0<=3199),C,false,sensor.boiler_dhw_cylinder_middle_temperature_(TS3),sensor.boiler_dhw_cylmiddletemp,5,9,1/10,65,1
|
Condens 5000i/Greenstar 8000/GC9800IW/GB192i.2,boiler,195,cylmiddletemp,cylinder middle temperature (TS3),uint16 (>=0<=3199),C,false,sensor.boiler_dhw_cylinder_middle_temperature_(TS3),sensor.boiler_dhw_cylmiddletemp,5,9,1/10,65,1
|
||||||
Condens 5000i/Greenstar 8000/GC9800IW/GB192i.2,boiler,195,starts,starts,uint24 (>=0<=16777213), ,false,sensor.boiler_dhw_starts,sensor.boiler_dhw_starts,5,9,1,66,2
|
Condens 5000i/Greenstar 8000/GC9800IW/GB192i.2,boiler,195,starts,starts,uint24 (>=0<=16777213), ,false,sensor.boiler_dhw_starts,sensor.boiler_dhw_starts,5,9,1,66,2
|
||||||
@@ -2652,8 +2595,6 @@ Logamax U122/Cerapur,boiler,203,pumpmodmin,boiler pump min power,uint8 (>=0<=100
|
|||||||
Logamax U122/Cerapur,boiler,203,pumpmode,boiler pump mode,enum [proportional\|deltaP-1\|deltaP-2\|deltaP-3\|deltaP-4], ,true,select.boiler_boiler_pump_mode,select.boiler_pumpmode,5,0,1,18,1
|
Logamax U122/Cerapur,boiler,203,pumpmode,boiler pump mode,enum [proportional\|deltaP-1\|deltaP-2\|deltaP-3\|deltaP-4], ,true,select.boiler_boiler_pump_mode,select.boiler_pumpmode,5,0,1,18,1
|
||||||
Logamax U122/Cerapur,boiler,203,pumpcharacter,boiler pump characteristic,enum [proportional\|150mbar\|200mbar\|250mbar\|300mbar\|350mbar\|400mbar], ,true,select.boiler_boiler_pump_characteristic,select.boiler_pumpcharacter,5,0,1,19,1
|
Logamax U122/Cerapur,boiler,203,pumpcharacter,boiler pump characteristic,enum [proportional\|150mbar\|200mbar\|250mbar\|300mbar\|350mbar\|400mbar], ,true,select.boiler_boiler_pump_characteristic,select.boiler_pumpcharacter,5,0,1,19,1
|
||||||
Logamax U122/Cerapur,boiler,203,pumpdelay,pump delay,uint8 (>=0<=60),minutes,true,number.boiler_pump_delay,number.boiler_pumpdelay,5,0,1,20,1
|
Logamax U122/Cerapur,boiler,203,pumpdelay,pump delay,uint8 (>=0<=60),minutes,true,number.boiler_pump_delay,number.boiler_pumpdelay,5,0,1,20,1
|
||||||
Logamax U122/Cerapur,boiler,203,setflowtemp,set flow temperature,uint8 (>=0<=254),C,false,sensor.boiler_set_flow_temperature,sensor.boiler_setflowtemp,5,0,1,21,1
|
|
||||||
Logamax U122/Cerapur,boiler,203,setburnpow,burner set power,uint8 (>=0<=100),%,false,sensor.boiler_burner_set_power,sensor.boiler_setburnpow,5,0,1,22,1
|
|
||||||
Logamax U122/Cerapur,boiler,203,selburnpow,burner selected max power,uint8 (>=0<=254),%,true,number.boiler_burner_selected_max_power,number.boiler_selburnpow,5,0,1,23,1
|
Logamax U122/Cerapur,boiler,203,selburnpow,burner selected max power,uint8 (>=0<=254),%,true,number.boiler_burner_selected_max_power,number.boiler_selburnpow,5,0,1,23,1
|
||||||
Logamax U122/Cerapur,boiler,203,curburnpow,burner current power,uint8 (>=0<=100),%,false,sensor.boiler_burner_current_power,sensor.boiler_curburnpow,5,0,1,24,1
|
Logamax U122/Cerapur,boiler,203,curburnpow,burner current power,uint8 (>=0<=100),%,false,sensor.boiler_burner_current_power,sensor.boiler_curburnpow,5,0,1,24,1
|
||||||
Logamax U122/Cerapur,boiler,203,burnstarts,burner starts,uint24 (>=0<=16777213), ,false,sensor.boiler_burner_starts,sensor.boiler_burnstarts,5,0,1,25,2
|
Logamax U122/Cerapur,boiler,203,burnstarts,burner starts,uint24 (>=0<=16777213), ,false,sensor.boiler_burner_starts,sensor.boiler_burnstarts,5,0,1,25,2
|
||||||
@@ -2712,7 +2653,6 @@ Logamax U122/Cerapur,boiler,203,recharging,recharging,boolean, ,false,binary_sen
|
|||||||
Logamax U122/Cerapur,boiler,203,tempok,temperature ok,boolean, ,false,binary_sensor.boiler_dhw_temperature_ok,binary_sensor.boiler_dhw_tempok,5,9,1,60,1
|
Logamax U122/Cerapur,boiler,203,tempok,temperature ok,boolean, ,false,binary_sensor.boiler_dhw_temperature_ok,binary_sensor.boiler_dhw_tempok,5,9,1,60,1
|
||||||
Logamax U122/Cerapur,boiler,203,active,active,boolean, ,false,binary_sensor.boiler_dhw_active,binary_sensor.boiler_dhw_active,5,9,1,61,1
|
Logamax U122/Cerapur,boiler,203,active,active,boolean, ,false,binary_sensor.boiler_dhw_active,binary_sensor.boiler_dhw_active,5,9,1,61,1
|
||||||
Logamax U122/Cerapur,boiler,203,3wayvalve,3-way valve active,boolean, ,false,binary_sensor.boiler_dhw_3-way_valve_active,binary_sensor.boiler_dhw_3wayvalve,5,9,1,62,1
|
Logamax U122/Cerapur,boiler,203,3wayvalve,3-way valve active,boolean, ,false,binary_sensor.boiler_dhw_3-way_valve_active,binary_sensor.boiler_dhw_3wayvalve,5,9,1,62,1
|
||||||
Logamax U122/Cerapur,boiler,203,setpumppower,set pump power,uint8 (>=0<=100),%,false,sensor.boiler_dhw_set_pump_power,sensor.boiler_dhw_setpumppower,5,9,1,63,1
|
|
||||||
Logamax U122/Cerapur,boiler,203,mixertemp,mixer temperature,uint16 (>=0<=3199),C,false,sensor.boiler_dhw_mixer_temperature,sensor.boiler_dhw_mixertemp,5,9,1/10,64,1
|
Logamax U122/Cerapur,boiler,203,mixertemp,mixer temperature,uint16 (>=0<=3199),C,false,sensor.boiler_dhw_mixer_temperature,sensor.boiler_dhw_mixertemp,5,9,1/10,64,1
|
||||||
Logamax U122/Cerapur,boiler,203,cylmiddletemp,cylinder middle temperature (TS3),uint16 (>=0<=3199),C,false,sensor.boiler_dhw_cylinder_middle_temperature_(TS3),sensor.boiler_dhw_cylmiddletemp,5,9,1/10,65,1
|
Logamax U122/Cerapur,boiler,203,cylmiddletemp,cylinder middle temperature (TS3),uint16 (>=0<=3199),C,false,sensor.boiler_dhw_cylinder_middle_temperature_(TS3),sensor.boiler_dhw_cylmiddletemp,5,9,1/10,65,1
|
||||||
Logamax U122/Cerapur,boiler,203,starts,starts,uint24 (>=0<=16777213), ,false,sensor.boiler_dhw_starts,sensor.boiler_dhw_starts,5,9,1,66,2
|
Logamax U122/Cerapur,boiler,203,starts,starts,uint24 (>=0<=16777213), ,false,sensor.boiler_dhw_starts,sensor.boiler_dhw_starts,5,9,1,66,2
|
||||||
@@ -2764,8 +2704,6 @@ Ecomline Excellent,boiler,206,pumpmodmin,boiler pump min power,uint8 (>=0<=100),
|
|||||||
Ecomline Excellent,boiler,206,pumpmode,boiler pump mode,enum [proportional\|deltaP-1\|deltaP-2\|deltaP-3\|deltaP-4], ,true,select.boiler_boiler_pump_mode,select.boiler_pumpmode,5,0,1,18,1
|
Ecomline Excellent,boiler,206,pumpmode,boiler pump mode,enum [proportional\|deltaP-1\|deltaP-2\|deltaP-3\|deltaP-4], ,true,select.boiler_boiler_pump_mode,select.boiler_pumpmode,5,0,1,18,1
|
||||||
Ecomline Excellent,boiler,206,pumpcharacter,boiler pump characteristic,enum [proportional\|150mbar\|200mbar\|250mbar\|300mbar\|350mbar\|400mbar], ,true,select.boiler_boiler_pump_characteristic,select.boiler_pumpcharacter,5,0,1,19,1
|
Ecomline Excellent,boiler,206,pumpcharacter,boiler pump characteristic,enum [proportional\|150mbar\|200mbar\|250mbar\|300mbar\|350mbar\|400mbar], ,true,select.boiler_boiler_pump_characteristic,select.boiler_pumpcharacter,5,0,1,19,1
|
||||||
Ecomline Excellent,boiler,206,pumpdelay,pump delay,uint8 (>=0<=60),minutes,true,number.boiler_pump_delay,number.boiler_pumpdelay,5,0,1,20,1
|
Ecomline Excellent,boiler,206,pumpdelay,pump delay,uint8 (>=0<=60),minutes,true,number.boiler_pump_delay,number.boiler_pumpdelay,5,0,1,20,1
|
||||||
Ecomline Excellent,boiler,206,setflowtemp,set flow temperature,uint8 (>=0<=254),C,false,sensor.boiler_set_flow_temperature,sensor.boiler_setflowtemp,5,0,1,21,1
|
|
||||||
Ecomline Excellent,boiler,206,setburnpow,burner set power,uint8 (>=0<=100),%,false,sensor.boiler_burner_set_power,sensor.boiler_setburnpow,5,0,1,22,1
|
|
||||||
Ecomline Excellent,boiler,206,selburnpow,burner selected max power,uint8 (>=0<=254),%,true,number.boiler_burner_selected_max_power,number.boiler_selburnpow,5,0,1,23,1
|
Ecomline Excellent,boiler,206,selburnpow,burner selected max power,uint8 (>=0<=254),%,true,number.boiler_burner_selected_max_power,number.boiler_selburnpow,5,0,1,23,1
|
||||||
Ecomline Excellent,boiler,206,curburnpow,burner current power,uint8 (>=0<=100),%,false,sensor.boiler_burner_current_power,sensor.boiler_curburnpow,5,0,1,24,1
|
Ecomline Excellent,boiler,206,curburnpow,burner current power,uint8 (>=0<=100),%,false,sensor.boiler_burner_current_power,sensor.boiler_curburnpow,5,0,1,24,1
|
||||||
Ecomline Excellent,boiler,206,burnstarts,burner starts,uint24 (>=0<=16777213), ,false,sensor.boiler_burner_starts,sensor.boiler_burnstarts,5,0,1,25,2
|
Ecomline Excellent,boiler,206,burnstarts,burner starts,uint24 (>=0<=16777213), ,false,sensor.boiler_burner_starts,sensor.boiler_burnstarts,5,0,1,25,2
|
||||||
@@ -2824,7 +2762,6 @@ Ecomline Excellent,boiler,206,recharging,recharging,boolean, ,false,binary_senso
|
|||||||
Ecomline Excellent,boiler,206,tempok,temperature ok,boolean, ,false,binary_sensor.boiler_dhw_temperature_ok,binary_sensor.boiler_dhw_tempok,5,9,1,60,1
|
Ecomline Excellent,boiler,206,tempok,temperature ok,boolean, ,false,binary_sensor.boiler_dhw_temperature_ok,binary_sensor.boiler_dhw_tempok,5,9,1,60,1
|
||||||
Ecomline Excellent,boiler,206,active,active,boolean, ,false,binary_sensor.boiler_dhw_active,binary_sensor.boiler_dhw_active,5,9,1,61,1
|
Ecomline Excellent,boiler,206,active,active,boolean, ,false,binary_sensor.boiler_dhw_active,binary_sensor.boiler_dhw_active,5,9,1,61,1
|
||||||
Ecomline Excellent,boiler,206,3wayvalve,3-way valve active,boolean, ,false,binary_sensor.boiler_dhw_3-way_valve_active,binary_sensor.boiler_dhw_3wayvalve,5,9,1,62,1
|
Ecomline Excellent,boiler,206,3wayvalve,3-way valve active,boolean, ,false,binary_sensor.boiler_dhw_3-way_valve_active,binary_sensor.boiler_dhw_3wayvalve,5,9,1,62,1
|
||||||
Ecomline Excellent,boiler,206,setpumppower,set pump power,uint8 (>=0<=100),%,false,sensor.boiler_dhw_set_pump_power,sensor.boiler_dhw_setpumppower,5,9,1,63,1
|
|
||||||
Ecomline Excellent,boiler,206,mixertemp,mixer temperature,uint16 (>=0<=3199),C,false,sensor.boiler_dhw_mixer_temperature,sensor.boiler_dhw_mixertemp,5,9,1/10,64,1
|
Ecomline Excellent,boiler,206,mixertemp,mixer temperature,uint16 (>=0<=3199),C,false,sensor.boiler_dhw_mixer_temperature,sensor.boiler_dhw_mixertemp,5,9,1/10,64,1
|
||||||
Ecomline Excellent,boiler,206,cylmiddletemp,cylinder middle temperature (TS3),uint16 (>=0<=3199),C,false,sensor.boiler_dhw_cylinder_middle_temperature_(TS3),sensor.boiler_dhw_cylmiddletemp,5,9,1/10,65,1
|
Ecomline Excellent,boiler,206,cylmiddletemp,cylinder middle temperature (TS3),uint16 (>=0<=3199),C,false,sensor.boiler_dhw_cylinder_middle_temperature_(TS3),sensor.boiler_dhw_cylmiddletemp,5,9,1/10,65,1
|
||||||
Ecomline Excellent,boiler,206,starts,starts,uint24 (>=0<=16777213), ,false,sensor.boiler_dhw_starts,sensor.boiler_dhw_starts,5,9,1,66,2
|
Ecomline Excellent,boiler,206,starts,starts,uint24 (>=0<=16777213), ,false,sensor.boiler_dhw_starts,sensor.boiler_dhw_starts,5,9,1,66,2
|
||||||
@@ -2876,8 +2813,6 @@ Logamax Plus/GB192/Condens GC9000/Greenstar ErP,boiler,208,pumpmodmin,boiler pum
|
|||||||
Logamax Plus/GB192/Condens GC9000/Greenstar ErP,boiler,208,pumpmode,boiler pump mode,enum [proportional\|deltaP-1\|deltaP-2\|deltaP-3\|deltaP-4], ,true,select.boiler_boiler_pump_mode,select.boiler_pumpmode,5,0,1,18,1
|
Logamax Plus/GB192/Condens GC9000/Greenstar ErP,boiler,208,pumpmode,boiler pump mode,enum [proportional\|deltaP-1\|deltaP-2\|deltaP-3\|deltaP-4], ,true,select.boiler_boiler_pump_mode,select.boiler_pumpmode,5,0,1,18,1
|
||||||
Logamax Plus/GB192/Condens GC9000/Greenstar ErP,boiler,208,pumpcharacter,boiler pump characteristic,enum [proportional\|150mbar\|200mbar\|250mbar\|300mbar\|350mbar\|400mbar], ,true,select.boiler_boiler_pump_characteristic,select.boiler_pumpcharacter,5,0,1,19,1
|
Logamax Plus/GB192/Condens GC9000/Greenstar ErP,boiler,208,pumpcharacter,boiler pump characteristic,enum [proportional\|150mbar\|200mbar\|250mbar\|300mbar\|350mbar\|400mbar], ,true,select.boiler_boiler_pump_characteristic,select.boiler_pumpcharacter,5,0,1,19,1
|
||||||
Logamax Plus/GB192/Condens GC9000/Greenstar ErP,boiler,208,pumpdelay,pump delay,uint8 (>=0<=60),minutes,true,number.boiler_pump_delay,number.boiler_pumpdelay,5,0,1,20,1
|
Logamax Plus/GB192/Condens GC9000/Greenstar ErP,boiler,208,pumpdelay,pump delay,uint8 (>=0<=60),minutes,true,number.boiler_pump_delay,number.boiler_pumpdelay,5,0,1,20,1
|
||||||
Logamax Plus/GB192/Condens GC9000/Greenstar ErP,boiler,208,setflowtemp,set flow temperature,uint8 (>=0<=254),C,false,sensor.boiler_set_flow_temperature,sensor.boiler_setflowtemp,5,0,1,21,1
|
|
||||||
Logamax Plus/GB192/Condens GC9000/Greenstar ErP,boiler,208,setburnpow,burner set power,uint8 (>=0<=100),%,false,sensor.boiler_burner_set_power,sensor.boiler_setburnpow,5,0,1,22,1
|
|
||||||
Logamax Plus/GB192/Condens GC9000/Greenstar ErP,boiler,208,selburnpow,burner selected max power,uint8 (>=0<=254),%,true,number.boiler_burner_selected_max_power,number.boiler_selburnpow,5,0,1,23,1
|
Logamax Plus/GB192/Condens GC9000/Greenstar ErP,boiler,208,selburnpow,burner selected max power,uint8 (>=0<=254),%,true,number.boiler_burner_selected_max_power,number.boiler_selburnpow,5,0,1,23,1
|
||||||
Logamax Plus/GB192/Condens GC9000/Greenstar ErP,boiler,208,curburnpow,burner current power,uint8 (>=0<=100),%,false,sensor.boiler_burner_current_power,sensor.boiler_curburnpow,5,0,1,24,1
|
Logamax Plus/GB192/Condens GC9000/Greenstar ErP,boiler,208,curburnpow,burner current power,uint8 (>=0<=100),%,false,sensor.boiler_burner_current_power,sensor.boiler_curburnpow,5,0,1,24,1
|
||||||
Logamax Plus/GB192/Condens GC9000/Greenstar ErP,boiler,208,burnstarts,burner starts,uint24 (>=0<=16777213), ,false,sensor.boiler_burner_starts,sensor.boiler_burnstarts,5,0,1,25,2
|
Logamax Plus/GB192/Condens GC9000/Greenstar ErP,boiler,208,burnstarts,burner starts,uint24 (>=0<=16777213), ,false,sensor.boiler_burner_starts,sensor.boiler_burnstarts,5,0,1,25,2
|
||||||
@@ -2936,7 +2871,6 @@ Logamax Plus/GB192/Condens GC9000/Greenstar ErP,boiler,208,recharging,recharging
|
|||||||
Logamax Plus/GB192/Condens GC9000/Greenstar ErP,boiler,208,tempok,temperature ok,boolean, ,false,binary_sensor.boiler_dhw_temperature_ok,binary_sensor.boiler_dhw_tempok,5,9,1,60,1
|
Logamax Plus/GB192/Condens GC9000/Greenstar ErP,boiler,208,tempok,temperature ok,boolean, ,false,binary_sensor.boiler_dhw_temperature_ok,binary_sensor.boiler_dhw_tempok,5,9,1,60,1
|
||||||
Logamax Plus/GB192/Condens GC9000/Greenstar ErP,boiler,208,active,active,boolean, ,false,binary_sensor.boiler_dhw_active,binary_sensor.boiler_dhw_active,5,9,1,61,1
|
Logamax Plus/GB192/Condens GC9000/Greenstar ErP,boiler,208,active,active,boolean, ,false,binary_sensor.boiler_dhw_active,binary_sensor.boiler_dhw_active,5,9,1,61,1
|
||||||
Logamax Plus/GB192/Condens GC9000/Greenstar ErP,boiler,208,3wayvalve,3-way valve active,boolean, ,false,binary_sensor.boiler_dhw_3-way_valve_active,binary_sensor.boiler_dhw_3wayvalve,5,9,1,62,1
|
Logamax Plus/GB192/Condens GC9000/Greenstar ErP,boiler,208,3wayvalve,3-way valve active,boolean, ,false,binary_sensor.boiler_dhw_3-way_valve_active,binary_sensor.boiler_dhw_3wayvalve,5,9,1,62,1
|
||||||
Logamax Plus/GB192/Condens GC9000/Greenstar ErP,boiler,208,setpumppower,set pump power,uint8 (>=0<=100),%,false,sensor.boiler_dhw_set_pump_power,sensor.boiler_dhw_setpumppower,5,9,1,63,1
|
|
||||||
Logamax Plus/GB192/Condens GC9000/Greenstar ErP,boiler,208,mixertemp,mixer temperature,uint16 (>=0<=3199),C,false,sensor.boiler_dhw_mixer_temperature,sensor.boiler_dhw_mixertemp,5,9,1/10,64,1
|
Logamax Plus/GB192/Condens GC9000/Greenstar ErP,boiler,208,mixertemp,mixer temperature,uint16 (>=0<=3199),C,false,sensor.boiler_dhw_mixer_temperature,sensor.boiler_dhw_mixertemp,5,9,1/10,64,1
|
||||||
Logamax Plus/GB192/Condens GC9000/Greenstar ErP,boiler,208,cylmiddletemp,cylinder middle temperature (TS3),uint16 (>=0<=3199),C,false,sensor.boiler_dhw_cylinder_middle_temperature_(TS3),sensor.boiler_dhw_cylmiddletemp,5,9,1/10,65,1
|
Logamax Plus/GB192/Condens GC9000/Greenstar ErP,boiler,208,cylmiddletemp,cylinder middle temperature (TS3),uint16 (>=0<=3199),C,false,sensor.boiler_dhw_cylinder_middle_temperature_(TS3),sensor.boiler_dhw_cylmiddletemp,5,9,1/10,65,1
|
||||||
Logamax Plus/GB192/Condens GC9000/Greenstar ErP,boiler,208,starts,starts,uint24 (>=0<=16777213), ,false,sensor.boiler_dhw_starts,sensor.boiler_dhw_starts,5,9,1,66,2
|
Logamax Plus/GB192/Condens GC9000/Greenstar ErP,boiler,208,starts,starts,uint24 (>=0<=16777213), ,false,sensor.boiler_dhw_starts,sensor.boiler_dhw_starts,5,9,1,66,2
|
||||||
@@ -2988,8 +2922,6 @@ Cascade MC400,boiler,210,pumpmodmin,boiler pump min power,uint8 (>=0<=100),%,tru
|
|||||||
Cascade MC400,boiler,210,pumpmode,boiler pump mode,enum [proportional\|deltaP-1\|deltaP-2\|deltaP-3\|deltaP-4], ,true,select.boiler_boiler_pump_mode,select.boiler_pumpmode,5,0,1,18,1
|
Cascade MC400,boiler,210,pumpmode,boiler pump mode,enum [proportional\|deltaP-1\|deltaP-2\|deltaP-3\|deltaP-4], ,true,select.boiler_boiler_pump_mode,select.boiler_pumpmode,5,0,1,18,1
|
||||||
Cascade MC400,boiler,210,pumpcharacter,boiler pump characteristic,enum [proportional\|150mbar\|200mbar\|250mbar\|300mbar\|350mbar\|400mbar], ,true,select.boiler_boiler_pump_characteristic,select.boiler_pumpcharacter,5,0,1,19,1
|
Cascade MC400,boiler,210,pumpcharacter,boiler pump characteristic,enum [proportional\|150mbar\|200mbar\|250mbar\|300mbar\|350mbar\|400mbar], ,true,select.boiler_boiler_pump_characteristic,select.boiler_pumpcharacter,5,0,1,19,1
|
||||||
Cascade MC400,boiler,210,pumpdelay,pump delay,uint8 (>=0<=60),minutes,true,number.boiler_pump_delay,number.boiler_pumpdelay,5,0,1,20,1
|
Cascade MC400,boiler,210,pumpdelay,pump delay,uint8 (>=0<=60),minutes,true,number.boiler_pump_delay,number.boiler_pumpdelay,5,0,1,20,1
|
||||||
Cascade MC400,boiler,210,setflowtemp,set flow temperature,uint8 (>=0<=254),C,false,sensor.boiler_set_flow_temperature,sensor.boiler_setflowtemp,5,0,1,21,1
|
|
||||||
Cascade MC400,boiler,210,setburnpow,burner set power,uint8 (>=0<=100),%,false,sensor.boiler_burner_set_power,sensor.boiler_setburnpow,5,0,1,22,1
|
|
||||||
Cascade MC400,boiler,210,selburnpow,burner selected max power,uint8 (>=0<=254),%,true,number.boiler_burner_selected_max_power,number.boiler_selburnpow,5,0,1,23,1
|
Cascade MC400,boiler,210,selburnpow,burner selected max power,uint8 (>=0<=254),%,true,number.boiler_burner_selected_max_power,number.boiler_selburnpow,5,0,1,23,1
|
||||||
Cascade MC400,boiler,210,curburnpow,burner current power,uint8 (>=0<=100),%,false,sensor.boiler_burner_current_power,sensor.boiler_curburnpow,5,0,1,24,1
|
Cascade MC400,boiler,210,curburnpow,burner current power,uint8 (>=0<=100),%,false,sensor.boiler_burner_current_power,sensor.boiler_curburnpow,5,0,1,24,1
|
||||||
Cascade MC400,boiler,210,burnstarts,burner starts,uint24 (>=0<=16777213), ,false,sensor.boiler_burner_starts,sensor.boiler_burnstarts,5,0,1,25,2
|
Cascade MC400,boiler,210,burnstarts,burner starts,uint24 (>=0<=16777213), ,false,sensor.boiler_burner_starts,sensor.boiler_burnstarts,5,0,1,25,2
|
||||||
@@ -3048,7 +2980,6 @@ Cascade MC400,boiler,210,recharging,recharging,boolean, ,false,binary_sensor.boi
|
|||||||
Cascade MC400,boiler,210,tempok,temperature ok,boolean, ,false,binary_sensor.boiler_dhw_temperature_ok,binary_sensor.boiler_dhw_tempok,5,9,1,60,1
|
Cascade MC400,boiler,210,tempok,temperature ok,boolean, ,false,binary_sensor.boiler_dhw_temperature_ok,binary_sensor.boiler_dhw_tempok,5,9,1,60,1
|
||||||
Cascade MC400,boiler,210,active,active,boolean, ,false,binary_sensor.boiler_dhw_active,binary_sensor.boiler_dhw_active,5,9,1,61,1
|
Cascade MC400,boiler,210,active,active,boolean, ,false,binary_sensor.boiler_dhw_active,binary_sensor.boiler_dhw_active,5,9,1,61,1
|
||||||
Cascade MC400,boiler,210,3wayvalve,3-way valve active,boolean, ,false,binary_sensor.boiler_dhw_3-way_valve_active,binary_sensor.boiler_dhw_3wayvalve,5,9,1,62,1
|
Cascade MC400,boiler,210,3wayvalve,3-way valve active,boolean, ,false,binary_sensor.boiler_dhw_3-way_valve_active,binary_sensor.boiler_dhw_3wayvalve,5,9,1,62,1
|
||||||
Cascade MC400,boiler,210,setpumppower,set pump power,uint8 (>=0<=100),%,false,sensor.boiler_dhw_set_pump_power,sensor.boiler_dhw_setpumppower,5,9,1,63,1
|
|
||||||
Cascade MC400,boiler,210,mixertemp,mixer temperature,uint16 (>=0<=3199),C,false,sensor.boiler_dhw_mixer_temperature,sensor.boiler_dhw_mixertemp,5,9,1/10,64,1
|
Cascade MC400,boiler,210,mixertemp,mixer temperature,uint16 (>=0<=3199),C,false,sensor.boiler_dhw_mixer_temperature,sensor.boiler_dhw_mixertemp,5,9,1/10,64,1
|
||||||
Cascade MC400,boiler,210,cylmiddletemp,cylinder middle temperature (TS3),uint16 (>=0<=3199),C,false,sensor.boiler_dhw_cylinder_middle_temperature_(TS3),sensor.boiler_dhw_cylmiddletemp,5,9,1/10,65,1
|
Cascade MC400,boiler,210,cylmiddletemp,cylinder middle temperature (TS3),uint16 (>=0<=3199),C,false,sensor.boiler_dhw_cylinder_middle_temperature_(TS3),sensor.boiler_dhw_cylmiddletemp,5,9,1/10,65,1
|
||||||
Cascade MC400,boiler,210,starts,starts,uint24 (>=0<=16777213), ,false,sensor.boiler_dhw_starts,sensor.boiler_dhw_starts,5,9,1,66,2
|
Cascade MC400,boiler,210,starts,starts,uint24 (>=0<=16777213), ,false,sensor.boiler_dhw_starts,sensor.boiler_dhw_starts,5,9,1,66,2
|
||||||
@@ -3100,8 +3031,6 @@ EasyControl Adapter,boiler,211,pumpmodmin,boiler pump min power,uint8 (>=0<=100)
|
|||||||
EasyControl Adapter,boiler,211,pumpmode,boiler pump mode,enum [proportional\|deltaP-1\|deltaP-2\|deltaP-3\|deltaP-4], ,true,select.boiler_boiler_pump_mode,select.boiler_pumpmode,5,0,1,18,1
|
EasyControl Adapter,boiler,211,pumpmode,boiler pump mode,enum [proportional\|deltaP-1\|deltaP-2\|deltaP-3\|deltaP-4], ,true,select.boiler_boiler_pump_mode,select.boiler_pumpmode,5,0,1,18,1
|
||||||
EasyControl Adapter,boiler,211,pumpcharacter,boiler pump characteristic,enum [proportional\|150mbar\|200mbar\|250mbar\|300mbar\|350mbar\|400mbar], ,true,select.boiler_boiler_pump_characteristic,select.boiler_pumpcharacter,5,0,1,19,1
|
EasyControl Adapter,boiler,211,pumpcharacter,boiler pump characteristic,enum [proportional\|150mbar\|200mbar\|250mbar\|300mbar\|350mbar\|400mbar], ,true,select.boiler_boiler_pump_characteristic,select.boiler_pumpcharacter,5,0,1,19,1
|
||||||
EasyControl Adapter,boiler,211,pumpdelay,pump delay,uint8 (>=0<=60),minutes,true,number.boiler_pump_delay,number.boiler_pumpdelay,5,0,1,20,1
|
EasyControl Adapter,boiler,211,pumpdelay,pump delay,uint8 (>=0<=60),minutes,true,number.boiler_pump_delay,number.boiler_pumpdelay,5,0,1,20,1
|
||||||
EasyControl Adapter,boiler,211,setflowtemp,set flow temperature,uint8 (>=0<=254),C,false,sensor.boiler_set_flow_temperature,sensor.boiler_setflowtemp,5,0,1,21,1
|
|
||||||
EasyControl Adapter,boiler,211,setburnpow,burner set power,uint8 (>=0<=100),%,false,sensor.boiler_burner_set_power,sensor.boiler_setburnpow,5,0,1,22,1
|
|
||||||
EasyControl Adapter,boiler,211,selburnpow,burner selected max power,uint8 (>=0<=254),%,true,number.boiler_burner_selected_max_power,number.boiler_selburnpow,5,0,1,23,1
|
EasyControl Adapter,boiler,211,selburnpow,burner selected max power,uint8 (>=0<=254),%,true,number.boiler_burner_selected_max_power,number.boiler_selburnpow,5,0,1,23,1
|
||||||
EasyControl Adapter,boiler,211,curburnpow,burner current power,uint8 (>=0<=100),%,false,sensor.boiler_burner_current_power,sensor.boiler_curburnpow,5,0,1,24,1
|
EasyControl Adapter,boiler,211,curburnpow,burner current power,uint8 (>=0<=100),%,false,sensor.boiler_burner_current_power,sensor.boiler_curburnpow,5,0,1,24,1
|
||||||
EasyControl Adapter,boiler,211,burnstarts,burner starts,uint24 (>=0<=16777213), ,false,sensor.boiler_burner_starts,sensor.boiler_burnstarts,5,0,1,25,2
|
EasyControl Adapter,boiler,211,burnstarts,burner starts,uint24 (>=0<=16777213), ,false,sensor.boiler_burner_starts,sensor.boiler_burnstarts,5,0,1,25,2
|
||||||
@@ -3160,7 +3089,6 @@ EasyControl Adapter,boiler,211,recharging,recharging,boolean, ,false,binary_sens
|
|||||||
EasyControl Adapter,boiler,211,tempok,temperature ok,boolean, ,false,binary_sensor.boiler_dhw_temperature_ok,binary_sensor.boiler_dhw_tempok,5,9,1,60,1
|
EasyControl Adapter,boiler,211,tempok,temperature ok,boolean, ,false,binary_sensor.boiler_dhw_temperature_ok,binary_sensor.boiler_dhw_tempok,5,9,1,60,1
|
||||||
EasyControl Adapter,boiler,211,active,active,boolean, ,false,binary_sensor.boiler_dhw_active,binary_sensor.boiler_dhw_active,5,9,1,61,1
|
EasyControl Adapter,boiler,211,active,active,boolean, ,false,binary_sensor.boiler_dhw_active,binary_sensor.boiler_dhw_active,5,9,1,61,1
|
||||||
EasyControl Adapter,boiler,211,3wayvalve,3-way valve active,boolean, ,false,binary_sensor.boiler_dhw_3-way_valve_active,binary_sensor.boiler_dhw_3wayvalve,5,9,1,62,1
|
EasyControl Adapter,boiler,211,3wayvalve,3-way valve active,boolean, ,false,binary_sensor.boiler_dhw_3-way_valve_active,binary_sensor.boiler_dhw_3wayvalve,5,9,1,62,1
|
||||||
EasyControl Adapter,boiler,211,setpumppower,set pump power,uint8 (>=0<=100),%,false,sensor.boiler_dhw_set_pump_power,sensor.boiler_dhw_setpumppower,5,9,1,63,1
|
|
||||||
EasyControl Adapter,boiler,211,mixertemp,mixer temperature,uint16 (>=0<=3199),C,false,sensor.boiler_dhw_mixer_temperature,sensor.boiler_dhw_mixertemp,5,9,1/10,64,1
|
EasyControl Adapter,boiler,211,mixertemp,mixer temperature,uint16 (>=0<=3199),C,false,sensor.boiler_dhw_mixer_temperature,sensor.boiler_dhw_mixertemp,5,9,1/10,64,1
|
||||||
EasyControl Adapter,boiler,211,cylmiddletemp,cylinder middle temperature (TS3),uint16 (>=0<=3199),C,false,sensor.boiler_dhw_cylinder_middle_temperature_(TS3),sensor.boiler_dhw_cylmiddletemp,5,9,1/10,65,1
|
EasyControl Adapter,boiler,211,cylmiddletemp,cylinder middle temperature (TS3),uint16 (>=0<=3199),C,false,sensor.boiler_dhw_cylinder_middle_temperature_(TS3),sensor.boiler_dhw_cylmiddletemp,5,9,1/10,65,1
|
||||||
EasyControl Adapter,boiler,211,starts,starts,uint24 (>=0<=16777213), ,false,sensor.boiler_dhw_starts,sensor.boiler_dhw_starts,5,9,1,66,2
|
EasyControl Adapter,boiler,211,starts,starts,uint24 (>=0<=16777213), ,false,sensor.boiler_dhw_starts,sensor.boiler_dhw_starts,5,9,1,66,2
|
||||||
@@ -3197,8 +3125,6 @@ Greenstar HIU/Logamax kompakt WS170,boiler,219,pumpmodmin,boiler pump min power,
|
|||||||
Greenstar HIU/Logamax kompakt WS170,boiler,219,pumpmode,boiler pump mode,enum [proportional\|deltaP-1\|deltaP-2\|deltaP-3\|deltaP-4], ,true,select.boiler_boiler_pump_mode,select.boiler_pumpmode,5,0,1,18,1
|
Greenstar HIU/Logamax kompakt WS170,boiler,219,pumpmode,boiler pump mode,enum [proportional\|deltaP-1\|deltaP-2\|deltaP-3\|deltaP-4], ,true,select.boiler_boiler_pump_mode,select.boiler_pumpmode,5,0,1,18,1
|
||||||
Greenstar HIU/Logamax kompakt WS170,boiler,219,pumpcharacter,boiler pump characteristic,enum [proportional\|150mbar\|200mbar\|250mbar\|300mbar\|350mbar\|400mbar], ,true,select.boiler_boiler_pump_characteristic,select.boiler_pumpcharacter,5,0,1,19,1
|
Greenstar HIU/Logamax kompakt WS170,boiler,219,pumpcharacter,boiler pump characteristic,enum [proportional\|150mbar\|200mbar\|250mbar\|300mbar\|350mbar\|400mbar], ,true,select.boiler_boiler_pump_characteristic,select.boiler_pumpcharacter,5,0,1,19,1
|
||||||
Greenstar HIU/Logamax kompakt WS170,boiler,219,pumpdelay,pump delay,uint8 (>=0<=60),minutes,true,number.boiler_pump_delay,number.boiler_pumpdelay,5,0,1,20,1
|
Greenstar HIU/Logamax kompakt WS170,boiler,219,pumpdelay,pump delay,uint8 (>=0<=60),minutes,true,number.boiler_pump_delay,number.boiler_pumpdelay,5,0,1,20,1
|
||||||
Greenstar HIU/Logamax kompakt WS170,boiler,219,setflowtemp,set flow temperature,uint8 (>=0<=254),C,false,sensor.boiler_set_flow_temperature,sensor.boiler_setflowtemp,5,0,1,21,1
|
|
||||||
Greenstar HIU/Logamax kompakt WS170,boiler,219,setburnpow,burner set power,uint8 (>=0<=100),%,false,sensor.boiler_burner_set_power,sensor.boiler_setburnpow,5,0,1,22,1
|
|
||||||
Greenstar HIU/Logamax kompakt WS170,boiler,219,selburnpow,burner selected max power,uint8 (>=0<=254),%,true,number.boiler_burner_selected_max_power,number.boiler_selburnpow,5,0,1,23,1
|
Greenstar HIU/Logamax kompakt WS170,boiler,219,selburnpow,burner selected max power,uint8 (>=0<=254),%,true,number.boiler_burner_selected_max_power,number.boiler_selburnpow,5,0,1,23,1
|
||||||
Greenstar HIU/Logamax kompakt WS170,boiler,219,curburnpow,burner current power,uint8 (>=0<=100),%,false,sensor.boiler_burner_current_power,sensor.boiler_curburnpow,5,0,1,24,1
|
Greenstar HIU/Logamax kompakt WS170,boiler,219,curburnpow,burner current power,uint8 (>=0<=100),%,false,sensor.boiler_burner_current_power,sensor.boiler_curburnpow,5,0,1,24,1
|
||||||
Greenstar HIU/Logamax kompakt WS170,boiler,219,burnstarts,burner starts,uint24 (>=0<=16777213), ,false,sensor.boiler_burner_starts,sensor.boiler_burnstarts,5,0,1,25,2
|
Greenstar HIU/Logamax kompakt WS170,boiler,219,burnstarts,burner starts,uint24 (>=0<=16777213), ,false,sensor.boiler_burner_starts,sensor.boiler_burnstarts,5,0,1,25,2
|
||||||
@@ -3257,7 +3183,6 @@ Greenstar HIU/Logamax kompakt WS170,boiler,219,recharging,recharging,boolean, ,f
|
|||||||
Greenstar HIU/Logamax kompakt WS170,boiler,219,tempok,temperature ok,boolean, ,false,binary_sensor.boiler_dhw_temperature_ok,binary_sensor.boiler_dhw_tempok,5,9,1,60,1
|
Greenstar HIU/Logamax kompakt WS170,boiler,219,tempok,temperature ok,boolean, ,false,binary_sensor.boiler_dhw_temperature_ok,binary_sensor.boiler_dhw_tempok,5,9,1,60,1
|
||||||
Greenstar HIU/Logamax kompakt WS170,boiler,219,active,active,boolean, ,false,binary_sensor.boiler_dhw_active,binary_sensor.boiler_dhw_active,5,9,1,61,1
|
Greenstar HIU/Logamax kompakt WS170,boiler,219,active,active,boolean, ,false,binary_sensor.boiler_dhw_active,binary_sensor.boiler_dhw_active,5,9,1,61,1
|
||||||
Greenstar HIU/Logamax kompakt WS170,boiler,219,3wayvalve,3-way valve active,boolean, ,false,binary_sensor.boiler_dhw_3-way_valve_active,binary_sensor.boiler_dhw_3wayvalve,5,9,1,62,1
|
Greenstar HIU/Logamax kompakt WS170,boiler,219,3wayvalve,3-way valve active,boolean, ,false,binary_sensor.boiler_dhw_3-way_valve_active,binary_sensor.boiler_dhw_3wayvalve,5,9,1,62,1
|
||||||
Greenstar HIU/Logamax kompakt WS170,boiler,219,setpumppower,set pump power,uint8 (>=0<=100),%,false,sensor.boiler_dhw_set_pump_power,sensor.boiler_dhw_setpumppower,5,9,1,63,1
|
|
||||||
Greenstar HIU/Logamax kompakt WS170,boiler,219,mixertemp,mixer temperature,uint16 (>=0<=3199),C,false,sensor.boiler_dhw_mixer_temperature,sensor.boiler_dhw_mixertemp,5,9,1/10,64,1
|
Greenstar HIU/Logamax kompakt WS170,boiler,219,mixertemp,mixer temperature,uint16 (>=0<=3199),C,false,sensor.boiler_dhw_mixer_temperature,sensor.boiler_dhw_mixertemp,5,9,1/10,64,1
|
||||||
Greenstar HIU/Logamax kompakt WS170,boiler,219,cylmiddletemp,cylinder middle temperature (TS3),uint16 (>=0<=3199),C,false,sensor.boiler_dhw_cylinder_middle_temperature_(TS3),sensor.boiler_dhw_cylmiddletemp,5,9,1/10,65,1
|
Greenstar HIU/Logamax kompakt WS170,boiler,219,cylmiddletemp,cylinder middle temperature (TS3),uint16 (>=0<=3199),C,false,sensor.boiler_dhw_cylinder_middle_temperature_(TS3),sensor.boiler_dhw_cylmiddletemp,5,9,1/10,65,1
|
||||||
Greenstar HIU/Logamax kompakt WS170,boiler,219,starts,starts,uint24 (>=0<=16777213), ,false,sensor.boiler_dhw_starts,sensor.boiler_dhw_starts,5,9,1,66,2
|
Greenstar HIU/Logamax kompakt WS170,boiler,219,starts,starts,uint24 (>=0<=16777213), ,false,sensor.boiler_dhw_starts,sensor.boiler_dhw_starts,5,9,1,66,2
|
||||||
@@ -3305,8 +3230,6 @@ Logamax Plus GB122/Condense 2300,boiler,234,pumpmodmin,boiler pump min power,uin
|
|||||||
Logamax Plus GB122/Condense 2300,boiler,234,pumpmode,boiler pump mode,enum [proportional\|deltaP-1\|deltaP-2\|deltaP-3\|deltaP-4], ,true,select.boiler_boiler_pump_mode,select.boiler_pumpmode,5,0,1,18,1
|
Logamax Plus GB122/Condense 2300,boiler,234,pumpmode,boiler pump mode,enum [proportional\|deltaP-1\|deltaP-2\|deltaP-3\|deltaP-4], ,true,select.boiler_boiler_pump_mode,select.boiler_pumpmode,5,0,1,18,1
|
||||||
Logamax Plus GB122/Condense 2300,boiler,234,pumpcharacter,boiler pump characteristic,enum [proportional\|150mbar\|200mbar\|250mbar\|300mbar\|350mbar\|400mbar], ,true,select.boiler_boiler_pump_characteristic,select.boiler_pumpcharacter,5,0,1,19,1
|
Logamax Plus GB122/Condense 2300,boiler,234,pumpcharacter,boiler pump characteristic,enum [proportional\|150mbar\|200mbar\|250mbar\|300mbar\|350mbar\|400mbar], ,true,select.boiler_boiler_pump_characteristic,select.boiler_pumpcharacter,5,0,1,19,1
|
||||||
Logamax Plus GB122/Condense 2300,boiler,234,pumpdelay,pump delay,uint8 (>=0<=60),minutes,true,number.boiler_pump_delay,number.boiler_pumpdelay,5,0,1,20,1
|
Logamax Plus GB122/Condense 2300,boiler,234,pumpdelay,pump delay,uint8 (>=0<=60),minutes,true,number.boiler_pump_delay,number.boiler_pumpdelay,5,0,1,20,1
|
||||||
Logamax Plus GB122/Condense 2300,boiler,234,setflowtemp,set flow temperature,uint8 (>=0<=254),C,false,sensor.boiler_set_flow_temperature,sensor.boiler_setflowtemp,5,0,1,21,1
|
|
||||||
Logamax Plus GB122/Condense 2300,boiler,234,setburnpow,burner set power,uint8 (>=0<=100),%,false,sensor.boiler_burner_set_power,sensor.boiler_setburnpow,5,0,1,22,1
|
|
||||||
Logamax Plus GB122/Condense 2300,boiler,234,selburnpow,burner selected max power,uint8 (>=0<=254),%,true,number.boiler_burner_selected_max_power,number.boiler_selburnpow,5,0,1,23,1
|
Logamax Plus GB122/Condense 2300,boiler,234,selburnpow,burner selected max power,uint8 (>=0<=254),%,true,number.boiler_burner_selected_max_power,number.boiler_selburnpow,5,0,1,23,1
|
||||||
Logamax Plus GB122/Condense 2300,boiler,234,curburnpow,burner current power,uint8 (>=0<=100),%,false,sensor.boiler_burner_current_power,sensor.boiler_curburnpow,5,0,1,24,1
|
Logamax Plus GB122/Condense 2300,boiler,234,curburnpow,burner current power,uint8 (>=0<=100),%,false,sensor.boiler_burner_current_power,sensor.boiler_curburnpow,5,0,1,24,1
|
||||||
Logamax Plus GB122/Condense 2300,boiler,234,burnstarts,burner starts,uint24 (>=0<=16777213), ,false,sensor.boiler_burner_starts,sensor.boiler_burnstarts,5,0,1,25,2
|
Logamax Plus GB122/Condense 2300,boiler,234,burnstarts,burner starts,uint24 (>=0<=16777213), ,false,sensor.boiler_burner_starts,sensor.boiler_burnstarts,5,0,1,25,2
|
||||||
@@ -3365,7 +3288,6 @@ Logamax Plus GB122/Condense 2300,boiler,234,recharging,recharging,boolean, ,fals
|
|||||||
Logamax Plus GB122/Condense 2300,boiler,234,tempok,temperature ok,boolean, ,false,binary_sensor.boiler_dhw_temperature_ok,binary_sensor.boiler_dhw_tempok,5,9,1,60,1
|
Logamax Plus GB122/Condense 2300,boiler,234,tempok,temperature ok,boolean, ,false,binary_sensor.boiler_dhw_temperature_ok,binary_sensor.boiler_dhw_tempok,5,9,1,60,1
|
||||||
Logamax Plus GB122/Condense 2300,boiler,234,active,active,boolean, ,false,binary_sensor.boiler_dhw_active,binary_sensor.boiler_dhw_active,5,9,1,61,1
|
Logamax Plus GB122/Condense 2300,boiler,234,active,active,boolean, ,false,binary_sensor.boiler_dhw_active,binary_sensor.boiler_dhw_active,5,9,1,61,1
|
||||||
Logamax Plus GB122/Condense 2300,boiler,234,3wayvalve,3-way valve active,boolean, ,false,binary_sensor.boiler_dhw_3-way_valve_active,binary_sensor.boiler_dhw_3wayvalve,5,9,1,62,1
|
Logamax Plus GB122/Condense 2300,boiler,234,3wayvalve,3-way valve active,boolean, ,false,binary_sensor.boiler_dhw_3-way_valve_active,binary_sensor.boiler_dhw_3wayvalve,5,9,1,62,1
|
||||||
Logamax Plus GB122/Condense 2300,boiler,234,setpumppower,set pump power,uint8 (>=0<=100),%,false,sensor.boiler_dhw_set_pump_power,sensor.boiler_dhw_setpumppower,5,9,1,63,1
|
|
||||||
Logamax Plus GB122/Condense 2300,boiler,234,mixertemp,mixer temperature,uint16 (>=0<=3199),C,false,sensor.boiler_dhw_mixer_temperature,sensor.boiler_dhw_mixertemp,5,9,1/10,64,1
|
Logamax Plus GB122/Condense 2300,boiler,234,mixertemp,mixer temperature,uint16 (>=0<=3199),C,false,sensor.boiler_dhw_mixer_temperature,sensor.boiler_dhw_mixertemp,5,9,1/10,64,1
|
||||||
Logamax Plus GB122/Condense 2300,boiler,234,cylmiddletemp,cylinder middle temperature (TS3),uint16 (>=0<=3199),C,false,sensor.boiler_dhw_cylinder_middle_temperature_(TS3),sensor.boiler_dhw_cylmiddletemp,5,9,1/10,65,1
|
Logamax Plus GB122/Condense 2300,boiler,234,cylmiddletemp,cylinder middle temperature (TS3),uint16 (>=0<=3199),C,false,sensor.boiler_dhw_cylinder_middle_temperature_(TS3),sensor.boiler_dhw_cylmiddletemp,5,9,1/10,65,1
|
||||||
Logamax Plus GB122/Condense 2300,boiler,234,starts,starts,uint24 (>=0<=16777213), ,false,sensor.boiler_dhw_starts,sensor.boiler_dhw_starts,5,9,1,66,2
|
Logamax Plus GB122/Condense 2300,boiler,234,starts,starts,uint24 (>=0<=16777213), ,false,sensor.boiler_dhw_starts,sensor.boiler_dhw_starts,5,9,1,66,2
|
||||||
@@ -3446,14 +3368,18 @@ UI800/BC400,thermostat,4,hpmode,HP Mode,enum [heating\|cooling\|heating&cooling]
|
|||||||
UI800/BC400,thermostat,4,dewoffset,dew point offset,uint8 (>=2<=10),K,true,number.thermostat_hc1_dew_point_offset,number.thermostat_hc1_dewoffset,6,1,1,37,1
|
UI800/BC400,thermostat,4,dewoffset,dew point offset,uint8 (>=2<=10),K,true,number.thermostat_hc1_dew_point_offset,number.thermostat_hc1_dewoffset,6,1,1,37,1
|
||||||
UI800/BC400,thermostat,4,roomtempdiff,room temp difference,uint8 (>=0<=254),K,true,number.thermostat_hc1_room_temp_difference,number.thermostat_hc1_roomtempdiff,6,1,1,38,1
|
UI800/BC400,thermostat,4,roomtempdiff,room temp difference,uint8 (>=0<=254),K,true,number.thermostat_hc1_room_temp_difference,number.thermostat_hc1_roomtempdiff,6,1,1,38,1
|
||||||
UI800/BC400,thermostat,4,hpminflowtemp,HP min. flow temp.,uint8 (>=0<=254),C,true,number.thermostat_hc1_HP_min._flow_temp.,number.thermostat_hc1_hpminflowtemp,6,1,1,39,1
|
UI800/BC400,thermostat,4,hpminflowtemp,HP min. flow temp.,uint8 (>=0<=254),C,true,number.thermostat_hc1_HP_min._flow_temp.,number.thermostat_hc1_hpminflowtemp,6,1,1,39,1
|
||||||
UI800/BC400,thermostat,4,control,control device,enum [off\|-\|RC100\|RC100H\|-\|RC120RF\|RC220\|single], ,true,select.thermostat_hc1_control_device,select.thermostat_hc1_control,6,1,1,40,1
|
UI800/BC400,thermostat,4,control,control device,enum [off\|-\|RC100\|RC100H\|-\|RC120RF\|RC220/RT800\|single], ,true,select.thermostat_hc1_control_device,select.thermostat_hc1_control,6,1,1,40,1
|
||||||
UI800/BC400,thermostat,4,remotetemp,room temperature from remote,cmd [] (>=-1<=101),C,true,sensor.thermostat_hc1_room_temperature_from_remote,sensor.thermostat_hc1_remotetemp,6,1,1/10,41,1
|
UI800/BC400,thermostat,4,remotetemp,room temperature from remote,cmd [] (>=-1<=101),C,true,sensor.thermostat_hc1_room_temperature_from_remote,sensor.thermostat_hc1_remotetemp,6,1,1/10,41,1
|
||||||
UI800/BC400,thermostat,4,remotehum,room humidity from remote,uint8 (>=-1<=101),%,true,number.thermostat_hc1_room_humidity_from_remote,number.thermostat_hc1_remotehum,6,1,1,42,1
|
UI800/BC400,thermostat,4,remotehum,room humidity from remote,cmd [] (>=-1<=101),%,true,sensor.thermostat_hc1_room_humidity_from_remote,sensor.thermostat_hc1_remotehum,6,1,1,42,1
|
||||||
UI800/BC400,thermostat,4,heatondelay,heat-on delay,uint8 (>=1<=48),hours,true,number.thermostat_hc1_heat-on_delay,number.thermostat_hc1_heatondelay,6,1,1,43,1
|
UI800/BC400,thermostat,4,heatondelay,heat-on delay,uint8 (>=1<=48),hours,true,number.thermostat_hc1_heat-on_delay,number.thermostat_hc1_heatondelay,6,1,1,43,1
|
||||||
UI800/BC400,thermostat,4,heatoffdelay,heat-off delay,uint8 (>=1<=48),hours,true,number.thermostat_hc1_heat-off_delay,number.thermostat_hc1_heatoffdelay,6,1,1,44,1
|
UI800/BC400,thermostat,4,heatoffdelay,heat-off delay,uint8 (>=1<=48),hours,true,number.thermostat_hc1_heat-off_delay,number.thermostat_hc1_heatoffdelay,6,1,1,44,1
|
||||||
UI800/BC400,thermostat,4,instantstart,instant start,uint8 (>=1<=10),K,true,number.thermostat_hc1_instant_start,number.thermostat_hc1_instantstart,6,1,1,45,1
|
UI800/BC400,thermostat,4,instantstart,instant start,uint8 (>=1<=10),K,true,number.thermostat_hc1_instant_start,number.thermostat_hc1_instantstart,6,1,1,45,1
|
||||||
UI800/BC400,thermostat,4,boost,boost mode,boolean, ,true,switch.thermostat_hc1_boost_mode,switch.thermostat_hc1_boost,6,1,1,46,1
|
UI800/BC400,thermostat,4,boost,boost mode,boolean, ,true,switch.thermostat_hc1_boost_mode,switch.thermostat_hc1_boost,6,1,1,46,1
|
||||||
UI800/BC400,thermostat,4,boosttime,boost time,uint8 (>=0<=254),hours,true,number.thermostat_hc1_boost_time,number.thermostat_hc1_boosttime,6,1,1,47,1
|
UI800/BC400,thermostat,4,boosttime,boost time,uint8 (>=0<=254),hours,true,number.thermostat_hc1_boost_time,number.thermostat_hc1_boosttime,6,1,1,47,1
|
||||||
|
UI800/BC400,thermostat,4,coolstart,cooling starttemp,uint8 (>=20<=35),C,true,number.thermostat_hc1_cooling_starttemp,number.thermostat_hc1_coolstart,6,1,1,-1,1
|
||||||
|
UI800/BC400,thermostat,4,coolondelay,cooling on delay,uint8 (>=1<=48),hours,true,number.thermostat_hc1_cooling_on_delay,number.thermostat_hc1_coolondelay,6,1,1,-1,1
|
||||||
|
UI800/BC400,thermostat,4,cooloffdelay,cooling off delay,uint8 (>=1<=48),hours,true,number.thermostat_hc1_cooling_off_delay,number.thermostat_hc1_cooloffdelay,6,1,1,-1,1
|
||||||
|
UI800/BC400,thermostat,4,switchprogmode,switch program mode,enum [level\|absolute], ,true,select.thermostat_hc1_switch_program_mode,select.thermostat_hc1_switchprogmode,6,1,1,-1,1
|
||||||
UI800/BC400,thermostat,4,mode,mode,enum [off\|eco+\|eco\|comfort\|auto], ,true,select.thermostat_dhw_mode,select.thermostat_dhw_mode,6,9,1,0,1
|
UI800/BC400,thermostat,4,mode,mode,enum [off\|eco+\|eco\|comfort\|auto], ,true,select.thermostat_dhw_mode,select.thermostat_dhw_mode,6,9,1,0,1
|
||||||
UI800/BC400,thermostat,4,settemp,set temperature,uint8 (>=0<=254),C,true,number.thermostat_dhw_set_temperature,number.thermostat_dhw_settemp,6,9,1,1,1
|
UI800/BC400,thermostat,4,settemp,set temperature,uint8 (>=0<=254),C,true,number.thermostat_dhw_set_temperature,number.thermostat_dhw_settemp,6,9,1,1,1
|
||||||
UI800/BC400,thermostat,4,settemplow,set low temperature,uint8 (>=0<=254),C,true,number.thermostat_dhw_set_low_temperature,number.thermostat_dhw_settemplow,6,9,1,2,1
|
UI800/BC400,thermostat,4,settemplow,set low temperature,uint8 (>=0<=254),C,true,number.thermostat_dhw_set_low_temperature,number.thermostat_dhw_settemplow,6,9,1,2,1
|
||||||
@@ -3813,12 +3739,16 @@ RC200/CW100/CR120,thermostat,157,roomtempdiff,room temp difference,uint8 (>=0<=2
|
|||||||
RC200/CW100/CR120,thermostat,157,hpminflowtemp,HP min. flow temp.,uint8 (>=0<=254),C,true,number.thermostat_hc1_HP_min._flow_temp.,number.thermostat_hc1_hpminflowtemp,6,1,1,39,1
|
RC200/CW100/CR120,thermostat,157,hpminflowtemp,HP min. flow temp.,uint8 (>=0<=254),C,true,number.thermostat_hc1_HP_min._flow_temp.,number.thermostat_hc1_hpminflowtemp,6,1,1,39,1
|
||||||
RC200/CW100/CR120,thermostat,157,control,control device,enum [RC310\|RC200\|RC100\|RC100H\|TC100], ,true,select.thermostat_hc1_control_device,select.thermostat_hc1_control,6,1,1,40,1
|
RC200/CW100/CR120,thermostat,157,control,control device,enum [RC310\|RC200\|RC100\|RC100H\|TC100], ,true,select.thermostat_hc1_control_device,select.thermostat_hc1_control,6,1,1,40,1
|
||||||
RC200/CW100/CR120,thermostat,157,remotetemp,room temperature from remote,cmd [] (>=-1<=101),C,true,sensor.thermostat_hc1_room_temperature_from_remote,sensor.thermostat_hc1_remotetemp,6,1,1/10,41,1
|
RC200/CW100/CR120,thermostat,157,remotetemp,room temperature from remote,cmd [] (>=-1<=101),C,true,sensor.thermostat_hc1_room_temperature_from_remote,sensor.thermostat_hc1_remotetemp,6,1,1/10,41,1
|
||||||
RC200/CW100/CR120,thermostat,157,remotehum,room humidity from remote,uint8 (>=-1<=101),%,true,number.thermostat_hc1_room_humidity_from_remote,number.thermostat_hc1_remotehum,6,1,1,42,1
|
RC200/CW100/CR120,thermostat,157,remotehum,room humidity from remote,cmd [] (>=-1<=101),%,true,sensor.thermostat_hc1_room_humidity_from_remote,sensor.thermostat_hc1_remotehum,6,1,1,42,1
|
||||||
RC200/CW100/CR120,thermostat,157,heatondelay,heat-on delay,uint8 (>=1<=48),hours,true,number.thermostat_hc1_heat-on_delay,number.thermostat_hc1_heatondelay,6,1,1,43,1
|
RC200/CW100/CR120,thermostat,157,heatondelay,heat-on delay,uint8 (>=1<=48),hours,true,number.thermostat_hc1_heat-on_delay,number.thermostat_hc1_heatondelay,6,1,1,43,1
|
||||||
RC200/CW100/CR120,thermostat,157,heatoffdelay,heat-off delay,uint8 (>=1<=48),hours,true,number.thermostat_hc1_heat-off_delay,number.thermostat_hc1_heatoffdelay,6,1,1,44,1
|
RC200/CW100/CR120,thermostat,157,heatoffdelay,heat-off delay,uint8 (>=1<=48),hours,true,number.thermostat_hc1_heat-off_delay,number.thermostat_hc1_heatoffdelay,6,1,1,44,1
|
||||||
RC200/CW100/CR120,thermostat,157,instantstart,instant start,uint8 (>=1<=10),K,true,number.thermostat_hc1_instant_start,number.thermostat_hc1_instantstart,6,1,1,45,1
|
RC200/CW100/CR120,thermostat,157,instantstart,instant start,uint8 (>=1<=10),K,true,number.thermostat_hc1_instant_start,number.thermostat_hc1_instantstart,6,1,1,45,1
|
||||||
RC200/CW100/CR120,thermostat,157,boost,boost mode,boolean, ,true,switch.thermostat_hc1_boost_mode,switch.thermostat_hc1_boost,6,1,1,46,1
|
RC200/CW100/CR120,thermostat,157,boost,boost mode,boolean, ,true,switch.thermostat_hc1_boost_mode,switch.thermostat_hc1_boost,6,1,1,46,1
|
||||||
RC200/CW100/CR120,thermostat,157,boosttime,boost time,uint8 (>=0<=254),hours,true,number.thermostat_hc1_boost_time,number.thermostat_hc1_boosttime,6,1,1,47,1
|
RC200/CW100/CR120,thermostat,157,boosttime,boost time,uint8 (>=0<=254),hours,true,number.thermostat_hc1_boost_time,number.thermostat_hc1_boosttime,6,1,1,47,1
|
||||||
|
RC200/CW100/CR120,thermostat,157,coolstart,cooling starttemp,uint8 (>=20<=35),C,true,number.thermostat_hc1_cooling_starttemp,number.thermostat_hc1_coolstart,6,1,1,-1,1
|
||||||
|
RC200/CW100/CR120,thermostat,157,coolondelay,cooling on delay,uint8 (>=1<=48),hours,true,number.thermostat_hc1_cooling_on_delay,number.thermostat_hc1_coolondelay,6,1,1,-1,1
|
||||||
|
RC200/CW100/CR120,thermostat,157,cooloffdelay,cooling off delay,uint8 (>=1<=48),hours,true,number.thermostat_hc1_cooling_off_delay,number.thermostat_hc1_cooloffdelay,6,1,1,-1,1
|
||||||
|
RC200/CW100/CR120,thermostat,157,switchprogmode,switch program mode,enum [level\|absolute], ,true,select.thermostat_hc1_switch_program_mode,select.thermostat_hc1_switchprogmode,6,1,1,-1,1
|
||||||
RC200/CW100/CR120,thermostat,157,mode,mode,enum [off\|normal\|comfort\|auto\|own prog], ,true,select.thermostat_dhw_mode,select.thermostat_dhw_mode,6,9,1,0,1
|
RC200/CW100/CR120,thermostat,157,mode,mode,enum [off\|normal\|comfort\|auto\|own prog], ,true,select.thermostat_dhw_mode,select.thermostat_dhw_mode,6,9,1,0,1
|
||||||
RC200/CW100/CR120,thermostat,157,settemp,set temperature,uint8 (>=0<=254),C,true,number.thermostat_dhw_set_temperature,number.thermostat_dhw_settemp,6,9,1,1,1
|
RC200/CW100/CR120,thermostat,157,settemp,set temperature,uint8 (>=0<=254),C,true,number.thermostat_dhw_set_temperature,number.thermostat_dhw_settemp,6,9,1,1,1
|
||||||
RC200/CW100/CR120,thermostat,157,settemplow,set low temperature,uint8 (>=0<=254),C,true,number.thermostat_dhw_set_low_temperature,number.thermostat_dhw_settemplow,6,9,1,2,1
|
RC200/CW100/CR120,thermostat,157,settemplow,set low temperature,uint8 (>=0<=254),C,true,number.thermostat_dhw_set_low_temperature,number.thermostat_dhw_settemplow,6,9,1,2,1
|
||||||
@@ -3893,12 +3823,16 @@ RC300/RC310/Moduline 3000/1010H/CW400/Sense II/HPC410,thermostat,158,roomtempdif
|
|||||||
RC300/RC310/Moduline 3000/1010H/CW400/Sense II/HPC410,thermostat,158,hpminflowtemp,HP min. flow temp.,uint8 (>=0<=254),C,true,number.thermostat_hc1_HP_min._flow_temp.,number.thermostat_hc1_hpminflowtemp,6,1,1,39,1
|
RC300/RC310/Moduline 3000/1010H/CW400/Sense II/HPC410,thermostat,158,hpminflowtemp,HP min. flow temp.,uint8 (>=0<=254),C,true,number.thermostat_hc1_HP_min._flow_temp.,number.thermostat_hc1_hpminflowtemp,6,1,1,39,1
|
||||||
RC300/RC310/Moduline 3000/1010H/CW400/Sense II/HPC410,thermostat,158,control,control device,enum [RC310\|RC200\|RC100\|RC100H\|TC100], ,true,select.thermostat_hc1_control_device,select.thermostat_hc1_control,6,1,1,40,1
|
RC300/RC310/Moduline 3000/1010H/CW400/Sense II/HPC410,thermostat,158,control,control device,enum [RC310\|RC200\|RC100\|RC100H\|TC100], ,true,select.thermostat_hc1_control_device,select.thermostat_hc1_control,6,1,1,40,1
|
||||||
RC300/RC310/Moduline 3000/1010H/CW400/Sense II/HPC410,thermostat,158,remotetemp,room temperature from remote,cmd [] (>=-1<=101),C,true,sensor.thermostat_hc1_room_temperature_from_remote,sensor.thermostat_hc1_remotetemp,6,1,1/10,41,1
|
RC300/RC310/Moduline 3000/1010H/CW400/Sense II/HPC410,thermostat,158,remotetemp,room temperature from remote,cmd [] (>=-1<=101),C,true,sensor.thermostat_hc1_room_temperature_from_remote,sensor.thermostat_hc1_remotetemp,6,1,1/10,41,1
|
||||||
RC300/RC310/Moduline 3000/1010H/CW400/Sense II/HPC410,thermostat,158,remotehum,room humidity from remote,uint8 (>=-1<=101),%,true,number.thermostat_hc1_room_humidity_from_remote,number.thermostat_hc1_remotehum,6,1,1,42,1
|
RC300/RC310/Moduline 3000/1010H/CW400/Sense II/HPC410,thermostat,158,remotehum,room humidity from remote,cmd [] (>=-1<=101),%,true,sensor.thermostat_hc1_room_humidity_from_remote,sensor.thermostat_hc1_remotehum,6,1,1,42,1
|
||||||
RC300/RC310/Moduline 3000/1010H/CW400/Sense II/HPC410,thermostat,158,heatondelay,heat-on delay,uint8 (>=1<=48),hours,true,number.thermostat_hc1_heat-on_delay,number.thermostat_hc1_heatondelay,6,1,1,43,1
|
RC300/RC310/Moduline 3000/1010H/CW400/Sense II/HPC410,thermostat,158,heatondelay,heat-on delay,uint8 (>=1<=48),hours,true,number.thermostat_hc1_heat-on_delay,number.thermostat_hc1_heatondelay,6,1,1,43,1
|
||||||
RC300/RC310/Moduline 3000/1010H/CW400/Sense II/HPC410,thermostat,158,heatoffdelay,heat-off delay,uint8 (>=1<=48),hours,true,number.thermostat_hc1_heat-off_delay,number.thermostat_hc1_heatoffdelay,6,1,1,44,1
|
RC300/RC310/Moduline 3000/1010H/CW400/Sense II/HPC410,thermostat,158,heatoffdelay,heat-off delay,uint8 (>=1<=48),hours,true,number.thermostat_hc1_heat-off_delay,number.thermostat_hc1_heatoffdelay,6,1,1,44,1
|
||||||
RC300/RC310/Moduline 3000/1010H/CW400/Sense II/HPC410,thermostat,158,instantstart,instant start,uint8 (>=1<=10),K,true,number.thermostat_hc1_instant_start,number.thermostat_hc1_instantstart,6,1,1,45,1
|
RC300/RC310/Moduline 3000/1010H/CW400/Sense II/HPC410,thermostat,158,instantstart,instant start,uint8 (>=1<=10),K,true,number.thermostat_hc1_instant_start,number.thermostat_hc1_instantstart,6,1,1,45,1
|
||||||
RC300/RC310/Moduline 3000/1010H/CW400/Sense II/HPC410,thermostat,158,boost,boost mode,boolean, ,true,switch.thermostat_hc1_boost_mode,switch.thermostat_hc1_boost,6,1,1,46,1
|
RC300/RC310/Moduline 3000/1010H/CW400/Sense II/HPC410,thermostat,158,boost,boost mode,boolean, ,true,switch.thermostat_hc1_boost_mode,switch.thermostat_hc1_boost,6,1,1,46,1
|
||||||
RC300/RC310/Moduline 3000/1010H/CW400/Sense II/HPC410,thermostat,158,boosttime,boost time,uint8 (>=0<=254),hours,true,number.thermostat_hc1_boost_time,number.thermostat_hc1_boosttime,6,1,1,47,1
|
RC300/RC310/Moduline 3000/1010H/CW400/Sense II/HPC410,thermostat,158,boosttime,boost time,uint8 (>=0<=254),hours,true,number.thermostat_hc1_boost_time,number.thermostat_hc1_boosttime,6,1,1,47,1
|
||||||
|
RC300/RC310/Moduline 3000/1010H/CW400/Sense II/HPC410,thermostat,158,coolstart,cooling starttemp,uint8 (>=20<=35),C,true,number.thermostat_hc1_cooling_starttemp,number.thermostat_hc1_coolstart,6,1,1,-1,1
|
||||||
|
RC300/RC310/Moduline 3000/1010H/CW400/Sense II/HPC410,thermostat,158,coolondelay,cooling on delay,uint8 (>=1<=48),hours,true,number.thermostat_hc1_cooling_on_delay,number.thermostat_hc1_coolondelay,6,1,1,-1,1
|
||||||
|
RC300/RC310/Moduline 3000/1010H/CW400/Sense II/HPC410,thermostat,158,cooloffdelay,cooling off delay,uint8 (>=1<=48),hours,true,number.thermostat_hc1_cooling_off_delay,number.thermostat_hc1_cooloffdelay,6,1,1,-1,1
|
||||||
|
RC300/RC310/Moduline 3000/1010H/CW400/Sense II/HPC410,thermostat,158,switchprogmode,switch program mode,enum [level\|absolute], ,true,select.thermostat_hc1_switch_program_mode,select.thermostat_hc1_switchprogmode,6,1,1,-1,1
|
||||||
RC300/RC310/Moduline 3000/1010H/CW400/Sense II/HPC410,thermostat,158,mode,mode,enum [off\|normal\|comfort\|auto\|own prog], ,true,select.thermostat_dhw_mode,select.thermostat_dhw_mode,6,9,1,0,1
|
RC300/RC310/Moduline 3000/1010H/CW400/Sense II/HPC410,thermostat,158,mode,mode,enum [off\|normal\|comfort\|auto\|own prog], ,true,select.thermostat_dhw_mode,select.thermostat_dhw_mode,6,9,1,0,1
|
||||||
RC300/RC310/Moduline 3000/1010H/CW400/Sense II/HPC410,thermostat,158,settemp,set temperature,uint8 (>=0<=254),C,true,number.thermostat_dhw_set_temperature,number.thermostat_dhw_settemp,6,9,1,1,1
|
RC300/RC310/Moduline 3000/1010H/CW400/Sense II/HPC410,thermostat,158,settemp,set temperature,uint8 (>=0<=254),C,true,number.thermostat_dhw_set_temperature,number.thermostat_dhw_settemp,6,9,1,1,1
|
||||||
RC300/RC310/Moduline 3000/1010H/CW400/Sense II/HPC410,thermostat,158,settemplow,set low temperature,uint8 (>=0<=254),C,true,number.thermostat_dhw_set_low_temperature,number.thermostat_dhw_settemplow,6,9,1,2,1
|
RC300/RC310/Moduline 3000/1010H/CW400/Sense II/HPC410,thermostat,158,settemplow,set low temperature,uint8 (>=0<=254),C,true,number.thermostat_dhw_set_low_temperature,number.thermostat_dhw_settemplow,6,9,1,2,1
|
||||||
@@ -3973,12 +3907,16 @@ RC100/Moduline 1000/1010,thermostat,165,roomtempdiff,room temp difference,uint8
|
|||||||
RC100/Moduline 1000/1010,thermostat,165,hpminflowtemp,HP min. flow temp.,uint8 (>=0<=254),C,true,number.thermostat_hc1_HP_min._flow_temp.,number.thermostat_hc1_hpminflowtemp,6,1,1,39,1
|
RC100/Moduline 1000/1010,thermostat,165,hpminflowtemp,HP min. flow temp.,uint8 (>=0<=254),C,true,number.thermostat_hc1_HP_min._flow_temp.,number.thermostat_hc1_hpminflowtemp,6,1,1,39,1
|
||||||
RC100/Moduline 1000/1010,thermostat,165,control,control device,enum [RC310\|RC200\|RC100\|RC100H\|TC100], ,true,select.thermostat_hc1_control_device,select.thermostat_hc1_control,6,1,1,40,1
|
RC100/Moduline 1000/1010,thermostat,165,control,control device,enum [RC310\|RC200\|RC100\|RC100H\|TC100], ,true,select.thermostat_hc1_control_device,select.thermostat_hc1_control,6,1,1,40,1
|
||||||
RC100/Moduline 1000/1010,thermostat,165,remotetemp,room temperature from remote,cmd [] (>=-1<=101),C,true,sensor.thermostat_hc1_room_temperature_from_remote,sensor.thermostat_hc1_remotetemp,6,1,1/10,41,1
|
RC100/Moduline 1000/1010,thermostat,165,remotetemp,room temperature from remote,cmd [] (>=-1<=101),C,true,sensor.thermostat_hc1_room_temperature_from_remote,sensor.thermostat_hc1_remotetemp,6,1,1/10,41,1
|
||||||
RC100/Moduline 1000/1010,thermostat,165,remotehum,room humidity from remote,uint8 (>=-1<=101),%,true,number.thermostat_hc1_room_humidity_from_remote,number.thermostat_hc1_remotehum,6,1,1,42,1
|
RC100/Moduline 1000/1010,thermostat,165,remotehum,room humidity from remote,cmd [] (>=-1<=101),%,true,sensor.thermostat_hc1_room_humidity_from_remote,sensor.thermostat_hc1_remotehum,6,1,1,42,1
|
||||||
RC100/Moduline 1000/1010,thermostat,165,heatondelay,heat-on delay,uint8 (>=1<=48),hours,true,number.thermostat_hc1_heat-on_delay,number.thermostat_hc1_heatondelay,6,1,1,43,1
|
RC100/Moduline 1000/1010,thermostat,165,heatondelay,heat-on delay,uint8 (>=1<=48),hours,true,number.thermostat_hc1_heat-on_delay,number.thermostat_hc1_heatondelay,6,1,1,43,1
|
||||||
RC100/Moduline 1000/1010,thermostat,165,heatoffdelay,heat-off delay,uint8 (>=1<=48),hours,true,number.thermostat_hc1_heat-off_delay,number.thermostat_hc1_heatoffdelay,6,1,1,44,1
|
RC100/Moduline 1000/1010,thermostat,165,heatoffdelay,heat-off delay,uint8 (>=1<=48),hours,true,number.thermostat_hc1_heat-off_delay,number.thermostat_hc1_heatoffdelay,6,1,1,44,1
|
||||||
RC100/Moduline 1000/1010,thermostat,165,instantstart,instant start,uint8 (>=1<=10),K,true,number.thermostat_hc1_instant_start,number.thermostat_hc1_instantstart,6,1,1,45,1
|
RC100/Moduline 1000/1010,thermostat,165,instantstart,instant start,uint8 (>=1<=10),K,true,number.thermostat_hc1_instant_start,number.thermostat_hc1_instantstart,6,1,1,45,1
|
||||||
RC100/Moduline 1000/1010,thermostat,165,boost,boost mode,boolean, ,true,switch.thermostat_hc1_boost_mode,switch.thermostat_hc1_boost,6,1,1,46,1
|
RC100/Moduline 1000/1010,thermostat,165,boost,boost mode,boolean, ,true,switch.thermostat_hc1_boost_mode,switch.thermostat_hc1_boost,6,1,1,46,1
|
||||||
RC100/Moduline 1000/1010,thermostat,165,boosttime,boost time,uint8 (>=0<=254),hours,true,number.thermostat_hc1_boost_time,number.thermostat_hc1_boosttime,6,1,1,47,1
|
RC100/Moduline 1000/1010,thermostat,165,boosttime,boost time,uint8 (>=0<=254),hours,true,number.thermostat_hc1_boost_time,number.thermostat_hc1_boosttime,6,1,1,47,1
|
||||||
|
RC100/Moduline 1000/1010,thermostat,165,coolstart,cooling starttemp,uint8 (>=20<=35),C,true,number.thermostat_hc1_cooling_starttemp,number.thermostat_hc1_coolstart,6,1,1,-1,1
|
||||||
|
RC100/Moduline 1000/1010,thermostat,165,coolondelay,cooling on delay,uint8 (>=1<=48),hours,true,number.thermostat_hc1_cooling_on_delay,number.thermostat_hc1_coolondelay,6,1,1,-1,1
|
||||||
|
RC100/Moduline 1000/1010,thermostat,165,cooloffdelay,cooling off delay,uint8 (>=1<=48),hours,true,number.thermostat_hc1_cooling_off_delay,number.thermostat_hc1_cooloffdelay,6,1,1,-1,1
|
||||||
|
RC100/Moduline 1000/1010,thermostat,165,switchprogmode,switch program mode,enum [level\|absolute], ,true,select.thermostat_hc1_switch_program_mode,select.thermostat_hc1_switchprogmode,6,1,1,-1,1
|
||||||
RC100/Moduline 1000/1010,thermostat,165,mode,mode,enum [off\|normal\|comfort\|auto\|own prog], ,true,select.thermostat_dhw_mode,select.thermostat_dhw_mode,6,9,1,0,1
|
RC100/Moduline 1000/1010,thermostat,165,mode,mode,enum [off\|normal\|comfort\|auto\|own prog], ,true,select.thermostat_dhw_mode,select.thermostat_dhw_mode,6,9,1,0,1
|
||||||
RC100/Moduline 1000/1010,thermostat,165,settemp,set temperature,uint8 (>=0<=254),C,true,number.thermostat_dhw_set_temperature,number.thermostat_dhw_settemp,6,9,1,1,1
|
RC100/Moduline 1000/1010,thermostat,165,settemp,set temperature,uint8 (>=0<=254),C,true,number.thermostat_dhw_set_temperature,number.thermostat_dhw_settemp,6,9,1,1,1
|
||||||
RC100/Moduline 1000/1010,thermostat,165,settemplow,set low temperature,uint8 (>=0<=254),C,true,number.thermostat_dhw_set_low_temperature,number.thermostat_dhw_settemplow,6,9,1,2,1
|
RC100/Moduline 1000/1010,thermostat,165,settemplow,set low temperature,uint8 (>=0<=254),C,true,number.thermostat_dhw_set_low_temperature,number.thermostat_dhw_settemplow,6,9,1,2,1
|
||||||
@@ -4054,12 +3992,16 @@ Rego 2000/3000,thermostat,172,roomtempdiff,room temp difference,uint8 (>=0<=254)
|
|||||||
Rego 2000/3000,thermostat,172,hpminflowtemp,HP min. flow temp.,uint8 (>=0<=254),C,true,number.thermostat_hc1_HP_min._flow_temp.,number.thermostat_hc1_hpminflowtemp,6,1,1,39,1
|
Rego 2000/3000,thermostat,172,hpminflowtemp,HP min. flow temp.,uint8 (>=0<=254),C,true,number.thermostat_hc1_HP_min._flow_temp.,number.thermostat_hc1_hpminflowtemp,6,1,1,39,1
|
||||||
Rego 2000/3000,thermostat,172,control,control device,enum [RC310\|RC200\|RC100\|RC100H\|TC100], ,true,select.thermostat_hc1_control_device,select.thermostat_hc1_control,6,1,1,40,1
|
Rego 2000/3000,thermostat,172,control,control device,enum [RC310\|RC200\|RC100\|RC100H\|TC100], ,true,select.thermostat_hc1_control_device,select.thermostat_hc1_control,6,1,1,40,1
|
||||||
Rego 2000/3000,thermostat,172,remotetemp,room temperature from remote,cmd [] (>=-1<=101),C,true,sensor.thermostat_hc1_room_temperature_from_remote,sensor.thermostat_hc1_remotetemp,6,1,1/10,41,1
|
Rego 2000/3000,thermostat,172,remotetemp,room temperature from remote,cmd [] (>=-1<=101),C,true,sensor.thermostat_hc1_room_temperature_from_remote,sensor.thermostat_hc1_remotetemp,6,1,1/10,41,1
|
||||||
Rego 2000/3000,thermostat,172,remotehum,room humidity from remote,uint8 (>=-1<=101),%,true,number.thermostat_hc1_room_humidity_from_remote,number.thermostat_hc1_remotehum,6,1,1,42,1
|
Rego 2000/3000,thermostat,172,remotehum,room humidity from remote,cmd [] (>=-1<=101),%,true,sensor.thermostat_hc1_room_humidity_from_remote,sensor.thermostat_hc1_remotehum,6,1,1,42,1
|
||||||
Rego 2000/3000,thermostat,172,heatondelay,heat-on delay,uint8 (>=1<=48),hours,true,number.thermostat_hc1_heat-on_delay,number.thermostat_hc1_heatondelay,6,1,1,43,1
|
Rego 2000/3000,thermostat,172,heatondelay,heat-on delay,uint8 (>=1<=48),hours,true,number.thermostat_hc1_heat-on_delay,number.thermostat_hc1_heatondelay,6,1,1,43,1
|
||||||
Rego 2000/3000,thermostat,172,heatoffdelay,heat-off delay,uint8 (>=1<=48),hours,true,number.thermostat_hc1_heat-off_delay,number.thermostat_hc1_heatoffdelay,6,1,1,44,1
|
Rego 2000/3000,thermostat,172,heatoffdelay,heat-off delay,uint8 (>=1<=48),hours,true,number.thermostat_hc1_heat-off_delay,number.thermostat_hc1_heatoffdelay,6,1,1,44,1
|
||||||
Rego 2000/3000,thermostat,172,instantstart,instant start,uint8 (>=1<=10),K,true,number.thermostat_hc1_instant_start,number.thermostat_hc1_instantstart,6,1,1,45,1
|
Rego 2000/3000,thermostat,172,instantstart,instant start,uint8 (>=1<=10),K,true,number.thermostat_hc1_instant_start,number.thermostat_hc1_instantstart,6,1,1,45,1
|
||||||
Rego 2000/3000,thermostat,172,boost,boost mode,boolean, ,true,switch.thermostat_hc1_boost_mode,switch.thermostat_hc1_boost,6,1,1,46,1
|
Rego 2000/3000,thermostat,172,boost,boost mode,boolean, ,true,switch.thermostat_hc1_boost_mode,switch.thermostat_hc1_boost,6,1,1,46,1
|
||||||
Rego 2000/3000,thermostat,172,boosttime,boost time,uint8 (>=0<=254),hours,true,number.thermostat_hc1_boost_time,number.thermostat_hc1_boosttime,6,1,1,47,1
|
Rego 2000/3000,thermostat,172,boosttime,boost time,uint8 (>=0<=254),hours,true,number.thermostat_hc1_boost_time,number.thermostat_hc1_boosttime,6,1,1,47,1
|
||||||
|
Rego 2000/3000,thermostat,172,coolstart,cooling starttemp,uint8 (>=20<=35),C,true,number.thermostat_hc1_cooling_starttemp,number.thermostat_hc1_coolstart,6,1,1,-1,1
|
||||||
|
Rego 2000/3000,thermostat,172,coolondelay,cooling on delay,uint8 (>=1<=48),hours,true,number.thermostat_hc1_cooling_on_delay,number.thermostat_hc1_coolondelay,6,1,1,-1,1
|
||||||
|
Rego 2000/3000,thermostat,172,cooloffdelay,cooling off delay,uint8 (>=1<=48),hours,true,number.thermostat_hc1_cooling_off_delay,number.thermostat_hc1_cooloffdelay,6,1,1,-1,1
|
||||||
|
Rego 2000/3000,thermostat,172,switchprogmode,switch program mode,enum [level\|absolute], ,true,select.thermostat_hc1_switch_program_mode,select.thermostat_hc1_switchprogmode,6,1,1,-1,1
|
||||||
Rego 2000/3000,thermostat,172,mode,mode,enum [normal\|comfort\|eco+], ,true,select.thermostat_dhw_mode,select.thermostat_dhw_mode,6,9,1,0,1
|
Rego 2000/3000,thermostat,172,mode,mode,enum [normal\|comfort\|eco+], ,true,select.thermostat_dhw_mode,select.thermostat_dhw_mode,6,9,1,0,1
|
||||||
Rego 2000/3000,thermostat,172,settemp,set temperature,uint8 (>=0<=254),C,true,number.thermostat_dhw_set_temperature,number.thermostat_dhw_settemp,6,9,1,1,1
|
Rego 2000/3000,thermostat,172,settemp,set temperature,uint8 (>=0<=254),C,true,number.thermostat_dhw_set_temperature,number.thermostat_dhw_settemp,6,9,1,1,1
|
||||||
Rego 2000/3000,thermostat,172,settemplow,set low temperature,uint8 (>=0<=254),C,true,number.thermostat_dhw_set_low_temperature,number.thermostat_dhw_settemplow,6,9,1,2,1
|
Rego 2000/3000,thermostat,172,settemplow,set low temperature,uint8 (>=0<=254),C,true,number.thermostat_dhw_set_low_temperature,number.thermostat_dhw_settemplow,6,9,1,2,1
|
||||||
@@ -4159,14 +4101,18 @@ Rego 3000/UI800/WSW196i/BC400,thermostat,253,hpmode,HP Mode,enum [heating\|cooli
|
|||||||
Rego 3000/UI800/WSW196i/BC400,thermostat,253,dewoffset,dew point offset,uint8 (>=2<=10),K,true,number.thermostat_hc1_dew_point_offset,number.thermostat_hc1_dewoffset,6,1,1,37,1
|
Rego 3000/UI800/WSW196i/BC400,thermostat,253,dewoffset,dew point offset,uint8 (>=2<=10),K,true,number.thermostat_hc1_dew_point_offset,number.thermostat_hc1_dewoffset,6,1,1,37,1
|
||||||
Rego 3000/UI800/WSW196i/BC400,thermostat,253,roomtempdiff,room temp difference,uint8 (>=0<=254),K,true,number.thermostat_hc1_room_temp_difference,number.thermostat_hc1_roomtempdiff,6,1,1,38,1
|
Rego 3000/UI800/WSW196i/BC400,thermostat,253,roomtempdiff,room temp difference,uint8 (>=0<=254),K,true,number.thermostat_hc1_room_temp_difference,number.thermostat_hc1_roomtempdiff,6,1,1,38,1
|
||||||
Rego 3000/UI800/WSW196i/BC400,thermostat,253,hpminflowtemp,HP min. flow temp.,uint8 (>=0<=254),C,true,number.thermostat_hc1_HP_min._flow_temp.,number.thermostat_hc1_hpminflowtemp,6,1,1,39,1
|
Rego 3000/UI800/WSW196i/BC400,thermostat,253,hpminflowtemp,HP min. flow temp.,uint8 (>=0<=254),C,true,number.thermostat_hc1_HP_min._flow_temp.,number.thermostat_hc1_hpminflowtemp,6,1,1,39,1
|
||||||
Rego 3000/UI800/WSW196i/BC400,thermostat,253,control,control device,enum [off\|-\|RC100\|RC100H\|-\|RC120RF\|RC220\|single], ,true,select.thermostat_hc1_control_device,select.thermostat_hc1_control,6,1,1,40,1
|
Rego 3000/UI800/WSW196i/BC400,thermostat,253,control,control device,enum [off\|-\|RC100\|RC100H\|-\|RC120RF\|RC220/RT800\|single], ,true,select.thermostat_hc1_control_device,select.thermostat_hc1_control,6,1,1,40,1
|
||||||
Rego 3000/UI800/WSW196i/BC400,thermostat,253,remotetemp,room temperature from remote,cmd [] (>=-1<=101),C,true,sensor.thermostat_hc1_room_temperature_from_remote,sensor.thermostat_hc1_remotetemp,6,1,1/10,41,1
|
Rego 3000/UI800/WSW196i/BC400,thermostat,253,remotetemp,room temperature from remote,cmd [] (>=-1<=101),C,true,sensor.thermostat_hc1_room_temperature_from_remote,sensor.thermostat_hc1_remotetemp,6,1,1/10,41,1
|
||||||
Rego 3000/UI800/WSW196i/BC400,thermostat,253,remotehum,room humidity from remote,uint8 (>=-1<=101),%,true,number.thermostat_hc1_room_humidity_from_remote,number.thermostat_hc1_remotehum,6,1,1,42,1
|
Rego 3000/UI800/WSW196i/BC400,thermostat,253,remotehum,room humidity from remote,cmd [] (>=-1<=101),%,true,sensor.thermostat_hc1_room_humidity_from_remote,sensor.thermostat_hc1_remotehum,6,1,1,42,1
|
||||||
Rego 3000/UI800/WSW196i/BC400,thermostat,253,heatondelay,heat-on delay,uint8 (>=1<=48),hours,true,number.thermostat_hc1_heat-on_delay,number.thermostat_hc1_heatondelay,6,1,1,43,1
|
Rego 3000/UI800/WSW196i/BC400,thermostat,253,heatondelay,heat-on delay,uint8 (>=1<=48),hours,true,number.thermostat_hc1_heat-on_delay,number.thermostat_hc1_heatondelay,6,1,1,43,1
|
||||||
Rego 3000/UI800/WSW196i/BC400,thermostat,253,heatoffdelay,heat-off delay,uint8 (>=1<=48),hours,true,number.thermostat_hc1_heat-off_delay,number.thermostat_hc1_heatoffdelay,6,1,1,44,1
|
Rego 3000/UI800/WSW196i/BC400,thermostat,253,heatoffdelay,heat-off delay,uint8 (>=1<=48),hours,true,number.thermostat_hc1_heat-off_delay,number.thermostat_hc1_heatoffdelay,6,1,1,44,1
|
||||||
Rego 3000/UI800/WSW196i/BC400,thermostat,253,instantstart,instant start,uint8 (>=1<=10),K,true,number.thermostat_hc1_instant_start,number.thermostat_hc1_instantstart,6,1,1,45,1
|
Rego 3000/UI800/WSW196i/BC400,thermostat,253,instantstart,instant start,uint8 (>=1<=10),K,true,number.thermostat_hc1_instant_start,number.thermostat_hc1_instantstart,6,1,1,45,1
|
||||||
Rego 3000/UI800/WSW196i/BC400,thermostat,253,boost,boost mode,boolean, ,true,switch.thermostat_hc1_boost_mode,switch.thermostat_hc1_boost,6,1,1,46,1
|
Rego 3000/UI800/WSW196i/BC400,thermostat,253,boost,boost mode,boolean, ,true,switch.thermostat_hc1_boost_mode,switch.thermostat_hc1_boost,6,1,1,46,1
|
||||||
Rego 3000/UI800/WSW196i/BC400,thermostat,253,boosttime,boost time,uint8 (>=0<=254),hours,true,number.thermostat_hc1_boost_time,number.thermostat_hc1_boosttime,6,1,1,47,1
|
Rego 3000/UI800/WSW196i/BC400,thermostat,253,boosttime,boost time,uint8 (>=0<=254),hours,true,number.thermostat_hc1_boost_time,number.thermostat_hc1_boosttime,6,1,1,47,1
|
||||||
|
Rego 3000/UI800/WSW196i/BC400,thermostat,253,coolstart,cooling starttemp,uint8 (>=20<=35),C,true,number.thermostat_hc1_cooling_starttemp,number.thermostat_hc1_coolstart,6,1,1,-1,1
|
||||||
|
Rego 3000/UI800/WSW196i/BC400,thermostat,253,coolondelay,cooling on delay,uint8 (>=1<=48),hours,true,number.thermostat_hc1_cooling_on_delay,number.thermostat_hc1_coolondelay,6,1,1,-1,1
|
||||||
|
Rego 3000/UI800/WSW196i/BC400,thermostat,253,cooloffdelay,cooling off delay,uint8 (>=1<=48),hours,true,number.thermostat_hc1_cooling_off_delay,number.thermostat_hc1_cooloffdelay,6,1,1,-1,1
|
||||||
|
Rego 3000/UI800/WSW196i/BC400,thermostat,253,switchprogmode,switch program mode,enum [level\|absolute], ,true,select.thermostat_hc1_switch_program_mode,select.thermostat_hc1_switchprogmode,6,1,1,-1,1
|
||||||
Rego 3000/UI800/WSW196i/BC400,thermostat,253,mode,mode,enum [off\|eco+\|eco\|comfort\|auto], ,true,select.thermostat_dhw_mode,select.thermostat_dhw_mode,6,9,1,0,1
|
Rego 3000/UI800/WSW196i/BC400,thermostat,253,mode,mode,enum [off\|eco+\|eco\|comfort\|auto], ,true,select.thermostat_dhw_mode,select.thermostat_dhw_mode,6,9,1,0,1
|
||||||
Rego 3000/UI800/WSW196i/BC400,thermostat,253,settemp,set temperature,uint8 (>=0<=254),C,true,number.thermostat_dhw_set_temperature,number.thermostat_dhw_settemp,6,9,1,1,1
|
Rego 3000/UI800/WSW196i/BC400,thermostat,253,settemp,set temperature,uint8 (>=0<=254),C,true,number.thermostat_dhw_set_temperature,number.thermostat_dhw_settemp,6,9,1,1,1
|
||||||
Rego 3000/UI800/WSW196i/BC400,thermostat,253,settemplow,set low temperature,uint8 (>=0<=254),C,true,number.thermostat_dhw_set_low_temperature,number.thermostat_dhw_settemplow,6,9,1,2,1
|
Rego 3000/UI800/WSW196i/BC400,thermostat,253,settemplow,set low temperature,uint8 (>=0<=254),C,true,number.thermostat_dhw_set_low_temperature,number.thermostat_dhw_settemplow,6,9,1,2,1
|
||||||
@@ -4727,12 +4673,12 @@ FW120,thermostat,192,roominflfactor,room influence factor,uint8 (>=0<=100),%,tru
|
|||||||
FW120,thermostat,192,heatingtype,heating type,enum [off\|heatingcurve\|radiator\|convector\|floor], ,true,select.thermostat_hc1_heating_type,select.thermostat_hc1_heatingtype,6,1,1,19,1
|
FW120,thermostat,192,heatingtype,heating type,enum [off\|heatingcurve\|radiator\|convector\|floor], ,true,select.thermostat_hc1_heating_type,select.thermostat_hc1_heatingtype,6,1,1,19,1
|
||||||
FW120,thermostat,192,controlmode,control mode,enum [off\|unmixed\|unmixed IPM\|mixed IPM], ,true,select.thermostat_hc1_control_mode,select.thermostat_hc1_controlmode,6,1,1,24,1
|
FW120,thermostat,192,controlmode,control mode,enum [off\|unmixed\|unmixed IPM\|mixed IPM], ,true,select.thermostat_hc1_control_mode,select.thermostat_hc1_controlmode,6,1,1,24,1
|
||||||
FW120,thermostat,192,charge,charge,boolean, ,true,switch.thermostat_dhw_charge,switch.thermostat_dhw_charge,6,9,1,5,1
|
FW120,thermostat,192,charge,charge,boolean, ,true,switch.thermostat_dhw_charge,switch.thermostat_dhw_charge,6,9,1,5,1
|
||||||
RT800,thermostat,3,errorcode,error code,string, ,false,sensor.thermostat_error_code,sensor.thermostat_errorcode,6,0,1,0,8
|
RT800/RC220,thermostat,3,errorcode,error code,string, ,false,sensor.thermostat_error_code,sensor.thermostat_errorcode,6,0,1,0,8
|
||||||
RT800,thermostat,3,lastcode,last error code,string, ,false,sensor.thermostat_last_error_code,sensor.thermostat_lastcode,6,0,1,8,25
|
RT800/RC220,thermostat,3,lastcode,last error code,string, ,false,sensor.thermostat_last_error_code,sensor.thermostat_lastcode,6,0,1,8,25
|
||||||
RT800,thermostat,3,datetime,date/time,string, ,false,sensor.thermostat_date/time,sensor.thermostat_datetime,6,0,1,33,13
|
RT800/RC220,thermostat,3,datetime,date/time,string, ,false,sensor.thermostat_date/time,sensor.thermostat_datetime,6,0,1,33,13
|
||||||
RT800,thermostat,3,seltemp,selected room temperature,int16 (>=0<=30),C,true,number.thermostat_hc1_selected_room_temperature,number.thermostat_hc1_seltemp,6,1,1/2,0,1
|
RT800/RC220,thermostat,3,seltemp,selected room temperature,int16 (>=0<=30),C,true,number.thermostat_hc1_selected_room_temperature,number.thermostat_hc1_seltemp,6,1,1/2,0,1
|
||||||
RT800,thermostat,3,currtemp,current room temperature,int16 (>=-3199<=3199),C,false,sensor.thermostat_hc1_current_room_temperature,sensor.thermostat_hc1_currtemp,6,1,1/10,1,1
|
RT800/RC220,thermostat,3,currtemp,current room temperature,int16 (>=-3199<=3199),C,false,sensor.thermostat_hc1_current_room_temperature,sensor.thermostat_hc1_currtemp,6,1,1/10,1,1
|
||||||
RT800,thermostat,3,haclimate,mqtt discovery current room temperature,enum [selTemp\|roomTemp] (>=5<=30), ,false,sensor.thermostat_hc1_mqtt_discovery_current_room_temperature,sensor.thermostat_hc1_haclimate,6,1,1,2,1
|
RT800/RC220,thermostat,3,haclimate,mqtt discovery current room temperature,enum [selTemp\|roomTemp] (>=5<=30), ,false,sensor.thermostat_hc1_mqtt_discovery_current_room_temperature,sensor.thermostat_hc1_haclimate,6,1,1,2,1
|
||||||
RC100H,thermostat,200,errorcode,error code,string, ,false,sensor.thermostat_error_code,sensor.thermostat_errorcode,6,0,1,0,8
|
RC100H,thermostat,200,errorcode,error code,string, ,false,sensor.thermostat_error_code,sensor.thermostat_errorcode,6,0,1,0,8
|
||||||
RC100H,thermostat,200,lastcode,last error code,string, ,false,sensor.thermostat_last_error_code,sensor.thermostat_lastcode,6,0,1,8,25
|
RC100H,thermostat,200,lastcode,last error code,string, ,false,sensor.thermostat_last_error_code,sensor.thermostat_lastcode,6,0,1,8,25
|
||||||
RC100H,thermostat,200,datetime,date/time,string, ,false,sensor.thermostat_date/time,sensor.thermostat_datetime,6,0,1,33,13
|
RC100H,thermostat,200,datetime,date/time,string, ,false,sensor.thermostat_date/time,sensor.thermostat_datetime,6,0,1,33,13
|
||||||
|
|||||||
|
Can't render this file because it is too large.
|
@@ -21,13 +21,13 @@
|
|||||||
"lint": "eslint . --fix"
|
"lint": "eslint . --fix"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@alova/adapter-xhr": "2.0.5",
|
"@alova/adapter-xhr": "2.0.6",
|
||||||
"@emotion/react": "^11.13.0",
|
"@emotion/react": "^11.13.3",
|
||||||
"@emotion/styled": "^11.13.0",
|
"@emotion/styled": "^11.13.0",
|
||||||
"@mui/icons-material": "^5.16.7",
|
"@mui/icons-material": "^6.0.1",
|
||||||
"@mui/material": "^5.16.7",
|
"@mui/material": "^6.0.1",
|
||||||
"@table-library/react-table-library": "4.1.7",
|
"@table-library/react-table-library": "4.1.7",
|
||||||
"alova": "3.0.9",
|
"alova": "3.0.14",
|
||||||
"async-validator": "^4.2.5",
|
"async-validator": "^4.2.5",
|
||||||
"jwt-decode": "^4.0.0",
|
"jwt-decode": "^4.0.0",
|
||||||
"mime-types": "^2.1.35",
|
"mime-types": "^2.1.35",
|
||||||
@@ -42,25 +42,25 @@
|
|||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@babel/core": "^7.25.2",
|
"@babel/core": "^7.25.2",
|
||||||
"@eslint/js": "^9.9.0",
|
"@eslint/js": "^9.9.1",
|
||||||
"@preact/compat": "^17.1.2",
|
"@preact/compat": "^17.1.2",
|
||||||
"@preact/preset-vite": "^2.9.0",
|
"@preact/preset-vite": "^2.9.0",
|
||||||
"@trivago/prettier-plugin-sort-imports": "^4.3.0",
|
"@trivago/prettier-plugin-sort-imports": "^4.3.0",
|
||||||
"@types/babel__core": "^7",
|
"@types/babel__core": "^7",
|
||||||
"@types/formidable": "^3",
|
"@types/formidable": "^3",
|
||||||
"@types/node": "^22.4.0",
|
"@types/node": "^22.5.2",
|
||||||
"@types/react": "^18.3.3",
|
"@types/react": "^18.3.5",
|
||||||
"@types/react-dom": "^18.3.0",
|
"@types/react-dom": "^18.3.0",
|
||||||
"@types/react-router-dom": "^5.3.3",
|
"@types/react-router-dom": "^5.3.3",
|
||||||
"concurrently": "^8.2.2",
|
"concurrently": "^8.2.2",
|
||||||
"eslint": "^9.9.0",
|
"eslint": "^9.9.1",
|
||||||
"eslint-config-prettier": "^9.1.0",
|
"eslint-config-prettier": "^9.1.0",
|
||||||
"formidable": "^3.5.1",
|
"formidable": "^3.5.1",
|
||||||
"prettier": "^3.3.3",
|
"prettier": "^3.3.3",
|
||||||
"rollup-plugin-visualizer": "^5.12.0",
|
"rollup-plugin-visualizer": "^5.12.0",
|
||||||
"terser": "^5.31.6",
|
"terser": "^5.31.6",
|
||||||
"typescript-eslint": "8.1.0",
|
"typescript-eslint": "8.3.0",
|
||||||
"vite": "^5.4.1",
|
"vite": "^5.4.2",
|
||||||
"vite-plugin-imagemin": "^0.6.1",
|
"vite-plugin-imagemin": "^0.6.1",
|
||||||
"vite-tsconfig-paths": "^5.0.1"
|
"vite-tsconfig-paths": "^5.0.1"
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -109,9 +109,11 @@ const SignIn = () => {
|
|||||||
onChange={updateLoginRequestValue}
|
onChange={updateLoginRequestValue}
|
||||||
margin="normal"
|
margin="normal"
|
||||||
variant="outlined"
|
variant="outlined"
|
||||||
inputProps={{
|
slotProps={{
|
||||||
|
input: {
|
||||||
autoCapitalize: 'none',
|
autoCapitalize: 'none',
|
||||||
autoCorrect: 'off'
|
autoCorrect: 'off'
|
||||||
|
}
|
||||||
}}
|
}}
|
||||||
/>
|
/>
|
||||||
<ValidatedPasswordField
|
<ValidatedPasswordField
|
||||||
|
|||||||
@@ -50,7 +50,7 @@ export const writeAnalogSensor = (as: WriteAnalogSensor) =>
|
|||||||
// Activity
|
// Activity
|
||||||
export const readActivity = () => alovaInstance.Get<Activity>('/rest/activity');
|
export const readActivity = () => alovaInstance.Get<Activity>('/rest/activity');
|
||||||
|
|
||||||
// API, used in HelpInformation
|
// API
|
||||||
export const API = (apiCall: APIcall) => alovaInstance.Post('/api', apiCall);
|
export const API = (apiCall: APIcall) => alovaInstance.Post('/api', apiCall);
|
||||||
|
|
||||||
// UploadFileForm
|
// UploadFileForm
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ export const ACCESS_TOKEN = 'access_token';
|
|||||||
|
|
||||||
export const alovaInstance = createAlova({
|
export const alovaInstance = createAlova({
|
||||||
statesHook: ReactHook,
|
statesHook: ReactHook,
|
||||||
timeout: 3000, // 3 seconds before throwing a timeout error
|
// timeout: 3000, // 3 seconds before throwing a timeout error, default is 0 = none
|
||||||
cacheFor: null, // disable cache
|
cacheFor: null, // disable cache
|
||||||
// cacheFor: {
|
// cacheFor: {
|
||||||
// GET: {
|
// GET: {
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ export const readNetworkStatus = () =>
|
|||||||
export const scanNetworks = () => alovaInstance.Get('/rest/scanNetworks');
|
export const scanNetworks = () => alovaInstance.Get('/rest/scanNetworks');
|
||||||
export const listNetworks = () =>
|
export const listNetworks = () =>
|
||||||
alovaInstance.Get<WiFiNetworkList>('/rest/listNetworks', {
|
alovaInstance.Get<WiFiNetworkList>('/rest/listNetworks', {
|
||||||
timeout: 20000 // timeout 20 seconds
|
timeout: 20000 // 20 seconds
|
||||||
});
|
});
|
||||||
export const readNetworkSettings = () =>
|
export const readNetworkSettings = () =>
|
||||||
alovaInstance.Get<NetworkSettingsType>('/rest/networkSettings');
|
alovaInstance.Get<NetworkSettingsType>('/rest/networkSettings');
|
||||||
|
|||||||
@@ -10,12 +10,6 @@ export const readHardwareStatus = () =>
|
|||||||
export const readSystemStatus = () =>
|
export const readSystemStatus = () =>
|
||||||
alovaInstance.Get<SystemStatus>('/rest/systemStatus');
|
alovaInstance.Get<SystemStatus>('/rest/systemStatus');
|
||||||
|
|
||||||
// commands
|
|
||||||
export const restart = () => alovaInstance.Post('/rest/restart');
|
|
||||||
export const partition = () => alovaInstance.Post('/rest/partition');
|
|
||||||
export const factoryPartition = () => alovaInstance.Post('/rest/factoryPartition');
|
|
||||||
export const factoryReset = () => alovaInstance.Post('/rest/factoryReset');
|
|
||||||
|
|
||||||
// SystemLog
|
// SystemLog
|
||||||
export const readLogSettings = () =>
|
export const readLogSettings = () =>
|
||||||
alovaInstance.Get<LogSettings>(`/rest/logSettings`);
|
alovaInstance.Get<LogSettings>(`/rest/logSettings`);
|
||||||
@@ -48,3 +42,6 @@ export const uploadFile = (file: File) => {
|
|||||||
|
|
||||||
export const uploadURL = (data: { url: string }) =>
|
export const uploadURL = (data: { url: string }) =>
|
||||||
alovaInstance.Post('/rest/uploadURL', data);
|
alovaInstance.Post('/rest/uploadURL', data);
|
||||||
|
|
||||||
|
export const checkUpgrade = (data: { version: string }) =>
|
||||||
|
alovaInstance.Post('/rest/checkUpgrade', data);
|
||||||
|
|||||||
@@ -54,7 +54,7 @@ const CustomEntities = () => {
|
|||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
const timer = setInterval(async () => {
|
const timer = setInterval(async () => {
|
||||||
if (dialogOpen) {
|
if (dialogOpen || numChanges > 0) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
await fetchEntities();
|
await fetchEntities();
|
||||||
|
|||||||
@@ -12,11 +12,11 @@ import {
|
|||||||
DialogActions,
|
DialogActions,
|
||||||
DialogContent,
|
DialogContent,
|
||||||
DialogTitle,
|
DialogTitle,
|
||||||
Grid,
|
|
||||||
InputAdornment,
|
InputAdornment,
|
||||||
MenuItem,
|
MenuItem,
|
||||||
TextField
|
TextField
|
||||||
} from '@mui/material';
|
} from '@mui/material';
|
||||||
|
import Grid from '@mui/material/Grid2';
|
||||||
|
|
||||||
import { dialogStyle } from 'CustomTheme';
|
import { dialogStyle } from 'CustomTheme';
|
||||||
import type Schema from 'async-validator';
|
import type Schema from 'async-validator';
|
||||||
@@ -100,8 +100,8 @@ const CustomEntitiesDialog = ({
|
|||||||
<Box display="flex" flexWrap="wrap" mb={1}>
|
<Box display="flex" flexWrap="wrap" mb={1}>
|
||||||
<Box flexWrap="nowrap" whiteSpace="nowrap" />
|
<Box flexWrap="nowrap" whiteSpace="nowrap" />
|
||||||
</Box>
|
</Box>
|
||||||
<Grid container spacing={2}>
|
<Grid container spacing={2} rowSpacing={0}>
|
||||||
<Grid item xs={4}>
|
<Grid size={12}>
|
||||||
<ValidatedTextField
|
<ValidatedTextField
|
||||||
fieldErrors={fieldErrors}
|
fieldErrors={fieldErrors}
|
||||||
name="name"
|
name="name"
|
||||||
@@ -112,7 +112,7 @@ const CustomEntitiesDialog = ({
|
|||||||
onChange={updateFormValue}
|
onChange={updateFormValue}
|
||||||
/>
|
/>
|
||||||
</Grid>
|
</Grid>
|
||||||
<Grid item xs={4}>
|
<Grid>
|
||||||
<TextField
|
<TextField
|
||||||
name="ram"
|
name="ram"
|
||||||
label={LL.VALUE(0) + ' ' + LL.TYPE(1)}
|
label={LL.VALUE(0) + ' ' + LL.TYPE(1)}
|
||||||
@@ -128,7 +128,7 @@ const CustomEntitiesDialog = ({
|
|||||||
</TextField>
|
</TextField>
|
||||||
</Grid>
|
</Grid>
|
||||||
{editItem.ram === 1 && (
|
{editItem.ram === 1 && (
|
||||||
<Grid item xs={4}>
|
<Grid>
|
||||||
<TextField
|
<TextField
|
||||||
name="value"
|
name="value"
|
||||||
label={LL.DEFAULT(0) + ' ' + LL.VALUE(0)}
|
label={LL.DEFAULT(0) + ' ' + LL.VALUE(0)}
|
||||||
@@ -143,7 +143,7 @@ const CustomEntitiesDialog = ({
|
|||||||
)}
|
)}
|
||||||
{editItem.ram === 0 && (
|
{editItem.ram === 0 && (
|
||||||
<>
|
<>
|
||||||
<Grid item xs={4} mt={3}>
|
<Grid mt={3} size={9}>
|
||||||
<BlockFormControlLabel
|
<BlockFormControlLabel
|
||||||
control={
|
control={
|
||||||
<Checkbox
|
<Checkbox
|
||||||
@@ -155,63 +155,67 @@ const CustomEntitiesDialog = ({
|
|||||||
label={LL.WRITEABLE()}
|
label={LL.WRITEABLE()}
|
||||||
/>
|
/>
|
||||||
</Grid>
|
</Grid>
|
||||||
<Grid item xs={4}>
|
<Grid>
|
||||||
<ValidatedTextField
|
<ValidatedTextField
|
||||||
fieldErrors={fieldErrors}
|
fieldErrors={fieldErrors}
|
||||||
name="device_id"
|
name="device_id"
|
||||||
label={LL.ID_OF(LL.DEVICE())}
|
label={LL.ID_OF(LL.DEVICE())}
|
||||||
margin="normal"
|
margin="normal"
|
||||||
|
sx={{ width: '11ch' }}
|
||||||
type="string"
|
type="string"
|
||||||
fullWidth
|
|
||||||
value={editItem.device_id as string}
|
value={editItem.device_id as string}
|
||||||
onChange={updateFormValue}
|
onChange={updateFormValue}
|
||||||
inputProps={{ style: { textTransform: 'uppercase' } }}
|
slotProps={{
|
||||||
InputProps={{
|
input: {
|
||||||
startAdornment: (
|
startAdornment: (
|
||||||
<InputAdornment position="start">0x</InputAdornment>
|
<InputAdornment position="start">0x</InputAdornment>
|
||||||
)
|
)
|
||||||
|
},
|
||||||
|
htmlInput: { style: { textTransform: 'uppercase' } }
|
||||||
}}
|
}}
|
||||||
/>
|
/>
|
||||||
</Grid>
|
</Grid>
|
||||||
<Grid item xs={4}>
|
<Grid>
|
||||||
<ValidatedTextField
|
<ValidatedTextField
|
||||||
fieldErrors={fieldErrors}
|
fieldErrors={fieldErrors}
|
||||||
name="type_id"
|
name="type_id"
|
||||||
label={LL.ID_OF(LL.TYPE(1))}
|
label={LL.ID_OF(LL.TYPE(1))}
|
||||||
margin="normal"
|
margin="normal"
|
||||||
fullWidth
|
sx={{ width: '11ch' }}
|
||||||
type="string"
|
type="string"
|
||||||
value={editItem.type_id as string}
|
value={editItem.type_id as string}
|
||||||
onChange={updateFormValue}
|
onChange={updateFormValue}
|
||||||
inputProps={{ style: { textTransform: 'uppercase' } }}
|
slotProps={{
|
||||||
InputProps={{
|
input: {
|
||||||
startAdornment: (
|
startAdornment: (
|
||||||
<InputAdornment position="start">0x</InputAdornment>
|
<InputAdornment position="start">0x</InputAdornment>
|
||||||
)
|
)
|
||||||
|
},
|
||||||
|
htmlInput: { style: { textTransform: 'uppercase' } }
|
||||||
}}
|
}}
|
||||||
/>
|
/>
|
||||||
</Grid>
|
</Grid>
|
||||||
<Grid item xs={4}>
|
<Grid>
|
||||||
<ValidatedTextField
|
<ValidatedTextField
|
||||||
fieldErrors={fieldErrors}
|
fieldErrors={fieldErrors}
|
||||||
name="offset"
|
name="offset"
|
||||||
label={LL.OFFSET()}
|
label={LL.OFFSET()}
|
||||||
margin="normal"
|
margin="normal"
|
||||||
fullWidth
|
sx={{ width: '11ch' }}
|
||||||
type="number"
|
type="number"
|
||||||
value={editItem.offset}
|
value={numberValue(editItem.offset)}
|
||||||
onChange={updateFormValue}
|
onChange={updateFormValue}
|
||||||
/>
|
/>
|
||||||
</Grid>
|
</Grid>
|
||||||
<Grid item xs={4}>
|
<Grid>
|
||||||
<TextField
|
<TextField
|
||||||
name="value_type"
|
name="value_type"
|
||||||
label={LL.VALUE(0) + ' ' + LL.TYPE(1)}
|
label={LL.VALUE(0) + ' ' + LL.TYPE(1)}
|
||||||
value={editItem.value_type}
|
value={editItem.value_type}
|
||||||
variant="outlined"
|
variant="outlined"
|
||||||
|
sx={{ width: '11ch' }}
|
||||||
onChange={updateFormValue}
|
onChange={updateFormValue}
|
||||||
margin="normal"
|
margin="normal"
|
||||||
fullWidth
|
|
||||||
select
|
select
|
||||||
>
|
>
|
||||||
<MenuItem value={DeviceValueType.BOOL}>
|
<MenuItem value={DeviceValueType.BOOL}>
|
||||||
@@ -247,26 +251,28 @@ const CustomEntitiesDialog = ({
|
|||||||
{editItem.value_type !== DeviceValueType.BOOL &&
|
{editItem.value_type !== DeviceValueType.BOOL &&
|
||||||
editItem.value_type !== DeviceValueType.STRING && (
|
editItem.value_type !== DeviceValueType.STRING && (
|
||||||
<>
|
<>
|
||||||
<Grid item xs={4}>
|
<Grid>
|
||||||
<TextField
|
<TextField
|
||||||
name="factor"
|
name="factor"
|
||||||
label={LL.FACTOR()}
|
label={LL.FACTOR()}
|
||||||
value={numberValue(editItem.factor)}
|
value={numberValue(editItem.factor)}
|
||||||
variant="outlined"
|
variant="outlined"
|
||||||
onChange={updateFormValue}
|
onChange={updateFormValue}
|
||||||
fullWidth
|
sx={{ width: '11ch' }}
|
||||||
margin="normal"
|
margin="normal"
|
||||||
type="number"
|
type="number"
|
||||||
inputProps={{ step: '0.001' }}
|
slotProps={{
|
||||||
|
htmlInput: { step: '0.001' }
|
||||||
|
}}
|
||||||
/>
|
/>
|
||||||
</Grid>
|
</Grid>
|
||||||
<Grid item xs={4}>
|
<Grid>
|
||||||
<TextField
|
<TextField
|
||||||
name="uom"
|
name="uom"
|
||||||
label={LL.UNIT()}
|
label={LL.UNIT()}
|
||||||
value={editItem.uom}
|
value={editItem.uom}
|
||||||
margin="normal"
|
margin="normal"
|
||||||
fullWidth
|
sx={{ width: '11ch' }}
|
||||||
onChange={updateFormValue}
|
onChange={updateFormValue}
|
||||||
select
|
select
|
||||||
>
|
>
|
||||||
@@ -281,21 +287,17 @@ const CustomEntitiesDialog = ({
|
|||||||
)}
|
)}
|
||||||
{editItem.value_type === DeviceValueType.STRING &&
|
{editItem.value_type === DeviceValueType.STRING &&
|
||||||
editItem.device_id !== '0' && (
|
editItem.device_id !== '0' && (
|
||||||
<Grid item xs={4}>
|
<Grid>
|
||||||
<TextField
|
<ValidatedTextField
|
||||||
|
fieldErrors={fieldErrors}
|
||||||
name="factor"
|
name="factor"
|
||||||
label="Bytes"
|
label="Bytes"
|
||||||
value={editItem.factor}
|
value={numberValue(editItem.factor)}
|
||||||
|
sx={{ width: '11ch' }}
|
||||||
variant="outlined"
|
variant="outlined"
|
||||||
onChange={updateFormValue}
|
onChange={updateFormValue}
|
||||||
fullWidth
|
|
||||||
margin="normal"
|
margin="normal"
|
||||||
type="number"
|
type="number"
|
||||||
inputProps={{
|
|
||||||
min: '1',
|
|
||||||
max: String(256 - editItem.offset),
|
|
||||||
step: '1'
|
|
||||||
}}
|
|
||||||
/>
|
/>
|
||||||
</Grid>
|
</Grid>
|
||||||
)}
|
)}
|
||||||
@@ -303,7 +305,6 @@ const CustomEntitiesDialog = ({
|
|||||||
)}
|
)}
|
||||||
</Grid>
|
</Grid>
|
||||||
</DialogContent>
|
</DialogContent>
|
||||||
|
|
||||||
<DialogActions>
|
<DialogActions>
|
||||||
{!creating && (
|
{!creating && (
|
||||||
<Box flexGrow={1}>
|
<Box flexGrow={1}>
|
||||||
|
|||||||
@@ -16,7 +16,6 @@ import {
|
|||||||
DialogActions,
|
DialogActions,
|
||||||
DialogContent,
|
DialogContent,
|
||||||
DialogTitle,
|
DialogTitle,
|
||||||
Grid,
|
|
||||||
InputAdornment,
|
InputAdornment,
|
||||||
Link,
|
Link,
|
||||||
MenuItem,
|
MenuItem,
|
||||||
@@ -25,8 +24,7 @@ import {
|
|||||||
ToggleButtonGroup,
|
ToggleButtonGroup,
|
||||||
Typography
|
Typography
|
||||||
} from '@mui/material';
|
} from '@mui/material';
|
||||||
|
import Grid from '@mui/material/Grid2';
|
||||||
import { restart } from 'api/system';
|
|
||||||
|
|
||||||
import {
|
import {
|
||||||
Body,
|
Body,
|
||||||
@@ -51,6 +49,7 @@ import {
|
|||||||
import { useI18nContext } from 'i18n/i18n-react';
|
import { useI18nContext } from 'i18n/i18n-react';
|
||||||
|
|
||||||
import {
|
import {
|
||||||
|
API,
|
||||||
readDeviceEntities,
|
readDeviceEntities,
|
||||||
readDevices,
|
readDevices,
|
||||||
resetCustomizations,
|
resetCustomizations,
|
||||||
@@ -61,7 +60,7 @@ import SettingsCustomizationsDialog from './CustomizationsDialog';
|
|||||||
import EntityMaskToggle from './EntityMaskToggle';
|
import EntityMaskToggle from './EntityMaskToggle';
|
||||||
import OptionIcon from './OptionIcon';
|
import OptionIcon from './OptionIcon';
|
||||||
import { DeviceEntityMask } from './types';
|
import { DeviceEntityMask } from './types';
|
||||||
import type { DeviceEntity, DeviceShort } from './types';
|
import type { APIcall, DeviceEntity, DeviceShort } from './types';
|
||||||
|
|
||||||
export const APIURL = window.location.origin + '/api/';
|
export const APIURL = window.location.origin + '/api/';
|
||||||
|
|
||||||
@@ -85,6 +84,10 @@ const Customizations = () => {
|
|||||||
// fetch devices first
|
// fetch devices first
|
||||||
const { data: devices, send: fetchDevices } = useRequest(readDevices);
|
const { data: devices, send: fetchDevices } = useRequest(readDevices);
|
||||||
|
|
||||||
|
const { send: sendAPI } = useRequest((data: APIcall) => API(data), {
|
||||||
|
immediate: false
|
||||||
|
});
|
||||||
|
|
||||||
const [selectedDevice, setSelectedDevice] = useState<number>(
|
const [selectedDevice, setSelectedDevice] = useState<number>(
|
||||||
Number(useLocation().state) || -1
|
Number(useLocation().state) || -1
|
||||||
);
|
);
|
||||||
@@ -132,9 +135,14 @@ const Customizations = () => {
|
|||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
const { send: sendRestart } = useRequest(restart(), {
|
const doRestart = async () => {
|
||||||
immediate: false
|
setRestarting(true);
|
||||||
});
|
await sendAPI({ device: 'system', cmd: 'restart', id: 0 }).catch(
|
||||||
|
(error: Error) => {
|
||||||
|
toast.error(error.message);
|
||||||
|
}
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
const entities_theme = useTheme({
|
const entities_theme = useTheme({
|
||||||
Table: `
|
Table: `
|
||||||
@@ -247,13 +255,6 @@ const Customizations = () => {
|
|||||||
}
|
}
|
||||||
}, [devices, selectedDevice]);
|
}, [devices, selectedDevice]);
|
||||||
|
|
||||||
const doRestart = async () => {
|
|
||||||
await sendRestart().catch((error: Error) => {
|
|
||||||
toast.error(error.message);
|
|
||||||
});
|
|
||||||
setRestarting(true);
|
|
||||||
};
|
|
||||||
|
|
||||||
function formatValue(value: unknown) {
|
function formatValue(value: unknown) {
|
||||||
if (typeof value === 'number') {
|
if (typeof value === 'number') {
|
||||||
return new Intl.NumberFormat().format(value);
|
return new Intl.NumberFormat().format(value);
|
||||||
@@ -509,12 +510,12 @@ const Customizations = () => {
|
|||||||
container
|
container
|
||||||
mb={1}
|
mb={1}
|
||||||
mt={0}
|
mt={0}
|
||||||
spacing={1}
|
spacing={2}
|
||||||
direction="row"
|
direction="row"
|
||||||
justifyContent="flex-start"
|
justifyContent="flex-start"
|
||||||
alignItems="center"
|
alignItems="center"
|
||||||
>
|
>
|
||||||
<Grid item xs={2}>
|
<Grid>
|
||||||
<TextField
|
<TextField
|
||||||
size="small"
|
size="small"
|
||||||
variant="outlined"
|
variant="outlined"
|
||||||
@@ -522,16 +523,18 @@ const Customizations = () => {
|
|||||||
onChange={(event) => {
|
onChange={(event) => {
|
||||||
setSearch(event.target.value);
|
setSearch(event.target.value);
|
||||||
}}
|
}}
|
||||||
InputProps={{
|
slotProps={{
|
||||||
|
input: {
|
||||||
startAdornment: (
|
startAdornment: (
|
||||||
<InputAdornment position="start">
|
<InputAdornment position="start">
|
||||||
<SearchIcon color="primary" sx={{ fontSize: 16 }} />
|
<SearchIcon color="primary" sx={{ fontSize: 16 }} />
|
||||||
</InputAdornment>
|
</InputAdornment>
|
||||||
)
|
)
|
||||||
|
}
|
||||||
}}
|
}}
|
||||||
/>
|
/>
|
||||||
</Grid>
|
</Grid>
|
||||||
<Grid item>
|
<Grid>
|
||||||
<ToggleButtonGroup
|
<ToggleButtonGroup
|
||||||
size="small"
|
size="small"
|
||||||
color="secondary"
|
color="secondary"
|
||||||
@@ -557,7 +560,7 @@ const Customizations = () => {
|
|||||||
</ToggleButton>
|
</ToggleButton>
|
||||||
</ToggleButtonGroup>
|
</ToggleButtonGroup>
|
||||||
</Grid>
|
</Grid>
|
||||||
<Grid item>
|
<Grid>
|
||||||
<Button
|
<Button
|
||||||
size="small"
|
size="small"
|
||||||
sx={{ fontSize: 10 }}
|
sx={{ fontSize: 10 }}
|
||||||
@@ -570,7 +573,7 @@ const Customizations = () => {
|
|||||||
<OptionIcon type="web_exclude" isSet={false} />
|
<OptionIcon type="web_exclude" isSet={false} />
|
||||||
</Button>
|
</Button>
|
||||||
</Grid>
|
</Grid>
|
||||||
<Grid item>
|
<Grid>
|
||||||
<Button
|
<Button
|
||||||
size="small"
|
size="small"
|
||||||
sx={{ fontSize: 10 }}
|
sx={{ fontSize: 10 }}
|
||||||
@@ -583,7 +586,7 @@ const Customizations = () => {
|
|||||||
<OptionIcon type="web_exclude" isSet={true} />
|
<OptionIcon type="web_exclude" isSet={true} />
|
||||||
</Button>
|
</Button>
|
||||||
</Grid>
|
</Grid>
|
||||||
<Grid item>
|
<Grid>
|
||||||
<Typography variant="subtitle2" color="primary">
|
<Typography variant="subtitle2" color="primary">
|
||||||
{LL.SHOWING()} {shown_data.length}/{deviceEntities.length}
|
{LL.SHOWING()} {shown_data.length}/{deviceEntities.length}
|
||||||
{LL.ENTITIES(deviceEntities.length)}
|
{LL.ENTITIES(deviceEntities.length)}
|
||||||
|
|||||||
@@ -10,14 +10,14 @@ import {
|
|||||||
DialogActions,
|
DialogActions,
|
||||||
DialogContent,
|
DialogContent,
|
||||||
DialogTitle,
|
DialogTitle,
|
||||||
Grid,
|
|
||||||
TextField,
|
TextField,
|
||||||
Typography
|
Typography
|
||||||
} from '@mui/material';
|
} from '@mui/material';
|
||||||
|
import Grid from '@mui/material/Grid2';
|
||||||
|
|
||||||
import { dialogStyle } from 'CustomTheme';
|
import { dialogStyle } from 'CustomTheme';
|
||||||
import { useI18nContext } from 'i18n/i18n-react';
|
import { useI18nContext } from 'i18n/i18n-react';
|
||||||
import { updateValue } from 'utils';
|
import { numberValue, updateValue } from 'utils';
|
||||||
|
|
||||||
import EntityMaskToggle from './EntityMaskToggle';
|
import EntityMaskToggle from './EntityMaskToggle';
|
||||||
import { DeviceEntityMask } from './types';
|
import { DeviceEntityMask } from './types';
|
||||||
@@ -81,7 +81,7 @@ const CustomizationsDialog = ({
|
|||||||
<Dialog sx={dialogStyle} open={open} onClose={handleClose}>
|
<Dialog sx={dialogStyle} open={open} onClose={handleClose}>
|
||||||
<DialogTitle>{LL.EDIT() + ' ' + LL.ENTITY()}</DialogTitle>
|
<DialogTitle>{LL.EDIT() + ' ' + LL.ENTITY()}</DialogTitle>
|
||||||
<DialogContent dividers>
|
<DialogContent dividers>
|
||||||
<Grid container direction="row">
|
<Grid container>
|
||||||
<Typography variant="body2" color="warning.main">
|
<Typography variant="body2" color="warning.main">
|
||||||
{LL.ID_OF(LL.ENTITY())}:
|
{LL.ID_OF(LL.ENTITY())}:
|
||||||
</Typography>
|
</Typography>
|
||||||
@@ -111,35 +111,34 @@ const CustomizationsDialog = ({
|
|||||||
<Box mt={1} mb={2}>
|
<Box mt={1} mb={2}>
|
||||||
<EntityMaskToggle onUpdate={updateDeviceEntity} de={editItem} />
|
<EntityMaskToggle onUpdate={updateDeviceEntity} de={editItem} />
|
||||||
</Box>
|
</Box>
|
||||||
<Grid container spacing={1}>
|
<Grid container spacing={2}>
|
||||||
<Grid item>
|
<Grid>
|
||||||
<TextField
|
<TextField
|
||||||
name="cn"
|
name="cn"
|
||||||
label={LL.NEW_NAME_OF(LL.ENTITY())}
|
label={LL.NEW_NAME_OF(LL.ENTITY())}
|
||||||
value={editItem.cn}
|
value={editItem.cn}
|
||||||
// autoFocus
|
|
||||||
sx={{ width: '30ch' }}
|
sx={{ width: '30ch' }}
|
||||||
onChange={updateFormValue}
|
onChange={updateFormValue}
|
||||||
/>
|
/>
|
||||||
</Grid>
|
</Grid>
|
||||||
{isWriteableNumber && (
|
{isWriteableNumber && (
|
||||||
<>
|
<>
|
||||||
<Grid item>
|
<Grid>
|
||||||
<TextField
|
<TextField
|
||||||
name="mi"
|
name="mi"
|
||||||
label={LL.MIN()}
|
label={LL.MIN()}
|
||||||
value={editItem.mi}
|
value={numberValue(editItem.mi)}
|
||||||
sx={{ width: '8ch' }}
|
sx={{ width: '11ch' }}
|
||||||
type="number"
|
type="number"
|
||||||
onChange={updateFormValue}
|
onChange={updateFormValue}
|
||||||
/>
|
/>
|
||||||
</Grid>
|
</Grid>
|
||||||
<Grid item>
|
<Grid>
|
||||||
<TextField
|
<TextField
|
||||||
name="ma"
|
name="ma"
|
||||||
label={LL.MAX()}
|
label={LL.MAX()}
|
||||||
value={editItem.ma}
|
value={numberValue(editItem.ma)}
|
||||||
sx={{ width: '8ch' }}
|
sx={{ width: '11ch' }}
|
||||||
type="number"
|
type="number"
|
||||||
onChange={updateFormValue}
|
onChange={updateFormValue}
|
||||||
/>
|
/>
|
||||||
|
|||||||
@@ -30,7 +30,6 @@ import {
|
|||||||
DialogActions,
|
DialogActions,
|
||||||
DialogContent,
|
DialogContent,
|
||||||
DialogTitle,
|
DialogTitle,
|
||||||
Grid,
|
|
||||||
IconButton,
|
IconButton,
|
||||||
List,
|
List,
|
||||||
ListItem,
|
ListItem,
|
||||||
@@ -41,6 +40,7 @@ import {
|
|||||||
styled,
|
styled,
|
||||||
tooltipClasses
|
tooltipClasses
|
||||||
} from '@mui/material';
|
} from '@mui/material';
|
||||||
|
import Grid from '@mui/material/Grid2';
|
||||||
|
|
||||||
import { useRowSelect } from '@table-library/react-table-library/select';
|
import { useRowSelect } from '@table-library/react-table-library/select';
|
||||||
import { SortToggleType, useSort } from '@table-library/react-table-library/sort';
|
import { SortToggleType, useSort } from '@table-library/react-table-library/sort';
|
||||||
@@ -556,7 +556,7 @@ const Devices = () => {
|
|||||||
</Header>
|
</Header>
|
||||||
<Body>
|
<Body>
|
||||||
{tableList.length === 0 && (
|
{tableList.length === 0 && (
|
||||||
<CircularProgress sx={{ margin: 1 }} size={24} />
|
<CircularProgress sx={{ margin: 1 }} size={18} />
|
||||||
)}
|
)}
|
||||||
{tableList.map((device: Device) => (
|
{tableList.map((device: Device) => (
|
||||||
<Row key={device.id} item={device}>
|
<Row key={device.id} item={device}>
|
||||||
@@ -677,7 +677,7 @@ const Devices = () => {
|
|||||||
</IconButton>
|
</IconButton>
|
||||||
</ButtonTooltip>
|
</ButtonTooltip>
|
||||||
</Typography>
|
</Typography>
|
||||||
<Grid item zeroMinWidth justifyContent="flex-end">
|
<Grid justifyContent="flex-end">
|
||||||
<ButtonTooltip title={LL.CANCEL()}>
|
<ButtonTooltip title={LL.CANCEL()}>
|
||||||
<IconButton onClick={resetDeviceSelect}>
|
<IconButton onClick={resetDeviceSelect}>
|
||||||
<HighlightOffIcon color="primary" sx={{ fontSize: 18 }} />
|
<HighlightOffIcon color="primary" sx={{ fontSize: 18 }} />
|
||||||
|
|||||||
@@ -11,12 +11,12 @@ import {
|
|||||||
DialogContent,
|
DialogContent,
|
||||||
DialogTitle,
|
DialogTitle,
|
||||||
FormHelperText,
|
FormHelperText,
|
||||||
Grid,
|
|
||||||
InputAdornment,
|
InputAdornment,
|
||||||
MenuItem,
|
MenuItem,
|
||||||
TextField,
|
TextField,
|
||||||
Typography
|
Typography
|
||||||
} from '@mui/material';
|
} from '@mui/material';
|
||||||
|
import Grid from '@mui/material/Grid2';
|
||||||
|
|
||||||
import { dialogStyle } from 'CustomTheme';
|
import { dialogStyle } from 'CustomTheme';
|
||||||
import type Schema from 'async-validator';
|
import type Schema from 'async-validator';
|
||||||
@@ -112,15 +112,14 @@ const DevicesDialog = ({
|
|||||||
<Box color="warning.main" p={0} pl={0} pr={0} mt={0} mb={2}>
|
<Box color="warning.main" p={0} pl={0} pr={0} mt={0} mb={2}>
|
||||||
<Typography variant="body2">{editItem.id.slice(2)}</Typography>
|
<Typography variant="body2">{editItem.id.slice(2)}</Typography>
|
||||||
</Box>
|
</Box>
|
||||||
<Grid>
|
<Grid container>
|
||||||
<Grid item>
|
<Grid size={12}>
|
||||||
{editItem.l ? (
|
{editItem.l ? (
|
||||||
<TextField
|
<TextField
|
||||||
name="v"
|
name="v"
|
||||||
label={LL.VALUE(0)}
|
label={LL.VALUE(0)}
|
||||||
value={editItem.v}
|
value={editItem.v}
|
||||||
disabled={!writeable}
|
disabled={!writeable}
|
||||||
// autoFocus
|
|
||||||
sx={{ width: '30ch' }}
|
sx={{ width: '30ch' }}
|
||||||
select
|
select
|
||||||
onChange={updateFormValue}
|
onChange={updateFormValue}
|
||||||
@@ -142,17 +141,17 @@ const DevicesDialog = ({
|
|||||||
type="number"
|
type="number"
|
||||||
sx={{ width: '30ch' }}
|
sx={{ width: '30ch' }}
|
||||||
onChange={updateFormValue}
|
onChange={updateFormValue}
|
||||||
inputProps={
|
slotProps={{
|
||||||
editItem.s
|
htmlInput: editItem.s
|
||||||
? { min: editItem.m, max: editItem.x, step: editItem.s }
|
? { min: editItem.m, max: editItem.x, step: editItem.s }
|
||||||
: {}
|
: {},
|
||||||
}
|
input: {
|
||||||
InputProps={{
|
|
||||||
startAdornment: (
|
startAdornment: (
|
||||||
<InputAdornment position="start">
|
<InputAdornment position="start">
|
||||||
{setUom(editItem.u)}
|
{setUom(editItem.u)}
|
||||||
</InputAdornment>
|
</InputAdornment>
|
||||||
)
|
)
|
||||||
|
}
|
||||||
}}
|
}}
|
||||||
/>
|
/>
|
||||||
) : (
|
) : (
|
||||||
@@ -162,7 +161,6 @@ const DevicesDialog = ({
|
|||||||
label={LL.VALUE(0)}
|
label={LL.VALUE(0)}
|
||||||
value={editItem.v}
|
value={editItem.v}
|
||||||
disabled={!writeable}
|
disabled={!writeable}
|
||||||
// autoFocus
|
|
||||||
sx={{ width: '30ch' }}
|
sx={{ width: '30ch' }}
|
||||||
multiline={editItem.u ? false : true}
|
multiline={editItem.u ? false : true}
|
||||||
onChange={updateFormValue}
|
onChange={updateFormValue}
|
||||||
@@ -170,7 +168,7 @@ const DevicesDialog = ({
|
|||||||
)}
|
)}
|
||||||
</Grid>
|
</Grid>
|
||||||
{writeable && (
|
{writeable && (
|
||||||
<Grid item>
|
<Grid>
|
||||||
<FormHelperText>{showHelperText(editItem)}</FormHelperText>
|
<FormHelperText>{showHelperText(editItem)}</FormHelperText>
|
||||||
</Grid>
|
</Grid>
|
||||||
)}
|
)}
|
||||||
|
|||||||
@@ -26,9 +26,9 @@ import type { APIcall } from './types';
|
|||||||
|
|
||||||
const Help = () => {
|
const Help = () => {
|
||||||
const { LL } = useI18nContext();
|
const { LL } = useI18nContext();
|
||||||
useLayoutTitle(LL.HELP_OF(''));
|
useLayoutTitle(LL.HELP());
|
||||||
|
|
||||||
const { send: getAPI } = useRequest((data: APIcall) => API(data), {
|
const { send: sendAPI } = useRequest((data: APIcall) => API(data), {
|
||||||
immediate: false
|
immediate: false
|
||||||
}).onSuccess((event) => {
|
}).onSuccess((event) => {
|
||||||
const anchor = document.createElement('a');
|
const anchor = document.createElement('a');
|
||||||
@@ -45,8 +45,8 @@ const Help = () => {
|
|||||||
toast.info(LL.DOWNLOAD_SUCCESSFUL());
|
toast.info(LL.DOWNLOAD_SUCCESSFUL());
|
||||||
});
|
});
|
||||||
|
|
||||||
const callAPI = async (device: string, entity: string) => {
|
const callAPI = async (device: string, cmd: string) => {
|
||||||
await getAPI({ device, entity, id: 0 }).catch((error: Error) => {
|
await sendAPI({ device, cmd, id: 0 }).catch((error: Error) => {
|
||||||
toast.error(error.message);
|
toast.error(error.message);
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
@@ -113,7 +113,7 @@ const Help = () => {
|
|||||||
color="primary"
|
color="primary"
|
||||||
onClick={() => callAPI('system', 'allvalues')}
|
onClick={() => callAPI('system', 'allvalues')}
|
||||||
>
|
>
|
||||||
{LL.ALLVALUES(0)}
|
{LL.ALLVALUES()}
|
||||||
</Button>
|
</Button>
|
||||||
|
|
||||||
<Box border={1} p={1} mt={4}>
|
<Box border={1} p={1} mt={4}>
|
||||||
|
|||||||
@@ -10,9 +10,9 @@ import {
|
|||||||
DialogActions,
|
DialogActions,
|
||||||
DialogContent,
|
DialogContent,
|
||||||
DialogTitle,
|
DialogTitle,
|
||||||
Grid,
|
|
||||||
TextField
|
TextField
|
||||||
} from '@mui/material';
|
} from '@mui/material';
|
||||||
|
import Grid from '@mui/material/Grid2';
|
||||||
|
|
||||||
import { dialogStyle } from 'CustomTheme';
|
import { dialogStyle } from 'CustomTheme';
|
||||||
import { BlockFormControlLabel } from 'components';
|
import { BlockFormControlLabel } from 'components';
|
||||||
|
|||||||
@@ -13,12 +13,12 @@ import {
|
|||||||
DialogActions,
|
DialogActions,
|
||||||
DialogContent,
|
DialogContent,
|
||||||
DialogTitle,
|
DialogTitle,
|
||||||
Grid,
|
|
||||||
TextField,
|
TextField,
|
||||||
ToggleButton,
|
ToggleButton,
|
||||||
ToggleButtonGroup,
|
ToggleButtonGroup,
|
||||||
Typography
|
Typography
|
||||||
} from '@mui/material';
|
} from '@mui/material';
|
||||||
|
import Grid from '@mui/material/Grid2';
|
||||||
|
|
||||||
import { dialogStyle } from 'CustomTheme';
|
import { dialogStyle } from 'CustomTheme';
|
||||||
import type Schema from 'async-validator';
|
import type Schema from 'async-validator';
|
||||||
|
|||||||
@@ -10,12 +10,12 @@ import {
|
|||||||
DialogActions,
|
DialogActions,
|
||||||
DialogContent,
|
DialogContent,
|
||||||
DialogTitle,
|
DialogTitle,
|
||||||
Grid,
|
|
||||||
InputAdornment,
|
InputAdornment,
|
||||||
MenuItem,
|
MenuItem,
|
||||||
TextField,
|
TextField,
|
||||||
Typography
|
Typography
|
||||||
} from '@mui/material';
|
} from '@mui/material';
|
||||||
|
import Grid from '@mui/material/Grid2';
|
||||||
|
|
||||||
import { dialogStyle } from 'CustomTheme';
|
import { dialogStyle } from 'CustomTheme';
|
||||||
import type Schema from 'async-validator';
|
import type Schema from 'async-validator';
|
||||||
@@ -86,11 +86,12 @@ const SensorsAnalogDialog = ({
|
|||||||
</DialogTitle>
|
</DialogTitle>
|
||||||
<DialogContent dividers>
|
<DialogContent dividers>
|
||||||
<Grid container spacing={2}>
|
<Grid container spacing={2}>
|
||||||
<Grid item xs={4}>
|
<Grid>
|
||||||
<ValidatedTextField
|
<ValidatedTextField
|
||||||
fieldErrors={fieldErrors}
|
fieldErrors={fieldErrors}
|
||||||
name="g"
|
name="g"
|
||||||
label="GPIO"
|
label="GPIO"
|
||||||
|
sx={{ width: '11ch' }}
|
||||||
value={numberValue(editItem.g)}
|
value={numberValue(editItem.g)}
|
||||||
type="number"
|
type="number"
|
||||||
variant="outlined"
|
variant="outlined"
|
||||||
@@ -98,13 +99,13 @@ const SensorsAnalogDialog = ({
|
|||||||
/>
|
/>
|
||||||
</Grid>
|
</Grid>
|
||||||
{creating && (
|
{creating && (
|
||||||
<Grid item>
|
<Grid>
|
||||||
<Box color="warning.main" mt={2}>
|
<Box color="warning.main" mt={2}>
|
||||||
<Typography variant="body2">{LL.WARN_GPIO()}</Typography>
|
<Typography variant="body2">{LL.WARN_GPIO()}</Typography>
|
||||||
</Box>
|
</Box>
|
||||||
</Grid>
|
</Grid>
|
||||||
)}
|
)}
|
||||||
<Grid item xs={12}>
|
<Grid>
|
||||||
<ValidatedTextField
|
<ValidatedTextField
|
||||||
fieldErrors={fieldErrors}
|
fieldErrors={fieldErrors}
|
||||||
name="n"
|
name="n"
|
||||||
@@ -115,7 +116,7 @@ const SensorsAnalogDialog = ({
|
|||||||
onChange={updateFormValue}
|
onChange={updateFormValue}
|
||||||
/>
|
/>
|
||||||
</Grid>
|
</Grid>
|
||||||
<Grid item xs={8}>
|
<Grid>
|
||||||
<TextField
|
<TextField
|
||||||
name="t"
|
name="t"
|
||||||
label={LL.TYPE(0)}
|
label={LL.TYPE(0)}
|
||||||
@@ -132,12 +133,12 @@ const SensorsAnalogDialog = ({
|
|||||||
</TextField>
|
</TextField>
|
||||||
</Grid>
|
</Grid>
|
||||||
{editItem.t >= AnalogType.COUNTER && editItem.t <= AnalogType.RATE && (
|
{editItem.t >= AnalogType.COUNTER && editItem.t <= AnalogType.RATE && (
|
||||||
<Grid item xs={4}>
|
<Grid>
|
||||||
<TextField
|
<TextField
|
||||||
name="u"
|
name="u"
|
||||||
label={LL.UNIT()}
|
label={LL.UNIT()}
|
||||||
value={editItem.u}
|
value={editItem.u}
|
||||||
fullWidth
|
sx={{ width: '15ch' }}
|
||||||
select
|
select
|
||||||
onChange={updateFormValue}
|
onChange={updateFormValue}
|
||||||
>
|
>
|
||||||
@@ -150,64 +151,72 @@ const SensorsAnalogDialog = ({
|
|||||||
</Grid>
|
</Grid>
|
||||||
)}
|
)}
|
||||||
{editItem.t === AnalogType.ADC && (
|
{editItem.t === AnalogType.ADC && (
|
||||||
<Grid item xs={4}>
|
<Grid>
|
||||||
<TextField
|
<TextField
|
||||||
name="o"
|
name="o"
|
||||||
label={LL.OFFSET()}
|
label={LL.OFFSET()}
|
||||||
value={numberValue(editItem.o)}
|
value={numberValue(editItem.o)}
|
||||||
fullWidth
|
|
||||||
type="number"
|
type="number"
|
||||||
|
sx={{ width: '11ch' }}
|
||||||
variant="outlined"
|
variant="outlined"
|
||||||
onChange={updateFormValue}
|
onChange={updateFormValue}
|
||||||
inputProps={{ min: '0', max: '3300', step: '1' }}
|
slotProps={{
|
||||||
InputProps={{
|
input: {
|
||||||
startAdornment: (
|
startAdornment: (
|
||||||
<InputAdornment position="start">mV</InputAdornment>
|
<InputAdornment position="start">mV</InputAdornment>
|
||||||
)
|
)
|
||||||
|
},
|
||||||
|
htmlInput: { min: '0', max: '3300', step: '1' }
|
||||||
}}
|
}}
|
||||||
/>
|
/>
|
||||||
</Grid>
|
</Grid>
|
||||||
)}
|
)}
|
||||||
{editItem.t === AnalogType.COUNTER && (
|
{editItem.t === AnalogType.COUNTER && (
|
||||||
<Grid item xs={4}>
|
<Grid>
|
||||||
<TextField
|
<TextField
|
||||||
name="o"
|
name="o"
|
||||||
label={LL.STARTVALUE()}
|
label={LL.STARTVALUE()}
|
||||||
value={numberValue(editItem.o)}
|
value={numberValue(editItem.o)}
|
||||||
fullWidth
|
|
||||||
type="number"
|
type="number"
|
||||||
|
sx={{ width: '11ch' }}
|
||||||
variant="outlined"
|
variant="outlined"
|
||||||
onChange={updateFormValue}
|
onChange={updateFormValue}
|
||||||
inputProps={{ step: '0.001' }}
|
slotProps={{
|
||||||
|
htmlInput: { step: '0.001' }
|
||||||
|
}}
|
||||||
/>
|
/>
|
||||||
</Grid>
|
</Grid>
|
||||||
)}
|
)}
|
||||||
{editItem.t >= AnalogType.COUNTER && editItem.t <= AnalogType.RATE && (
|
{editItem.t >= AnalogType.COUNTER && editItem.t <= AnalogType.RATE && (
|
||||||
<Grid item xs={4}>
|
<Grid>
|
||||||
<TextField
|
<TextField
|
||||||
name="f"
|
name="f"
|
||||||
label={LL.FACTOR()}
|
label={LL.FACTOR()}
|
||||||
value={numberValue(editItem.f)}
|
value={numberValue(editItem.f)}
|
||||||
fullWidth
|
sx={{ width: '11ch' }}
|
||||||
type="number"
|
type="number"
|
||||||
variant="outlined"
|
variant="outlined"
|
||||||
onChange={updateFormValue}
|
onChange={updateFormValue}
|
||||||
inputProps={{ step: '0.001' }}
|
slotProps={{
|
||||||
|
htmlInput: { step: '0.001' }
|
||||||
|
}}
|
||||||
/>
|
/>
|
||||||
</Grid>
|
</Grid>
|
||||||
)}
|
)}
|
||||||
{editItem.t === AnalogType.DIGITAL_OUT &&
|
{editItem.t === AnalogType.DIGITAL_OUT &&
|
||||||
(editItem.g === 25 || editItem.g === 26) && (
|
(editItem.g === 25 || editItem.g === 26) && (
|
||||||
<Grid item xs={4}>
|
<Grid>
|
||||||
<TextField
|
<TextField
|
||||||
name="o"
|
name="o"
|
||||||
label={LL.VALUE(0)}
|
label={LL.VALUE(0)}
|
||||||
value={numberValue(editItem.o)}
|
value={numberValue(editItem.o)}
|
||||||
fullWidth
|
sx={{ width: '11ch' }}
|
||||||
type="number"
|
type="number"
|
||||||
variant="outlined"
|
variant="outlined"
|
||||||
onChange={updateFormValue}
|
onChange={updateFormValue}
|
||||||
inputProps={{ min: '0', max: '255', step: '1' }}
|
slotProps={{
|
||||||
|
htmlInput: { min: '0', max: '255', step: '1' }
|
||||||
|
}}
|
||||||
/>
|
/>
|
||||||
</Grid>
|
</Grid>
|
||||||
)}
|
)}
|
||||||
@@ -215,12 +224,11 @@ const SensorsAnalogDialog = ({
|
|||||||
editItem.g !== 25 &&
|
editItem.g !== 25 &&
|
||||||
editItem.g !== 26 && (
|
editItem.g !== 26 && (
|
||||||
<>
|
<>
|
||||||
<Grid item xs={4}>
|
<Grid>
|
||||||
<TextField
|
<TextField
|
||||||
name="o"
|
name="o"
|
||||||
label={LL.VALUE(0)}
|
label={LL.VALUE(0)}
|
||||||
value={numberValue(editItem.o)}
|
value={numberValue(editItem.o)}
|
||||||
fullWidth
|
|
||||||
select
|
select
|
||||||
variant="outlined"
|
variant="outlined"
|
||||||
onChange={updateFormValue}
|
onChange={updateFormValue}
|
||||||
@@ -229,12 +237,12 @@ const SensorsAnalogDialog = ({
|
|||||||
<MenuItem value={1}>{LL.ON()}</MenuItem>
|
<MenuItem value={1}>{LL.ON()}</MenuItem>
|
||||||
</TextField>
|
</TextField>
|
||||||
</Grid>
|
</Grid>
|
||||||
<Grid item xs={4}>
|
<Grid>
|
||||||
<TextField
|
<TextField
|
||||||
name="f"
|
name="f"
|
||||||
label={LL.POLARITY()}
|
label={LL.POLARITY()}
|
||||||
value={editItem.f}
|
value={editItem.f}
|
||||||
fullWidth
|
sx={{ width: '15ch' }}
|
||||||
select
|
select
|
||||||
onChange={updateFormValue}
|
onChange={updateFormValue}
|
||||||
>
|
>
|
||||||
@@ -242,12 +250,12 @@ const SensorsAnalogDialog = ({
|
|||||||
<MenuItem value={-1}>{LL.ACTIVELOW()}</MenuItem>
|
<MenuItem value={-1}>{LL.ACTIVELOW()}</MenuItem>
|
||||||
</TextField>
|
</TextField>
|
||||||
</Grid>
|
</Grid>
|
||||||
<Grid item xs={4}>
|
<Grid>
|
||||||
<TextField
|
<TextField
|
||||||
name="u"
|
name="u"
|
||||||
label={LL.STARTVALUE()}
|
label={LL.STARTVALUE()}
|
||||||
|
sx={{ width: '15ch' }}
|
||||||
value={editItem.u}
|
value={editItem.u}
|
||||||
fullWidth
|
|
||||||
select
|
select
|
||||||
onChange={updateFormValue}
|
onChange={updateFormValue}
|
||||||
>
|
>
|
||||||
@@ -266,37 +274,41 @@ const SensorsAnalogDialog = ({
|
|||||||
editItem.t === AnalogType.PWM_1 ||
|
editItem.t === AnalogType.PWM_1 ||
|
||||||
editItem.t === AnalogType.PWM_2) && (
|
editItem.t === AnalogType.PWM_2) && (
|
||||||
<>
|
<>
|
||||||
<Grid item xs={4}>
|
<Grid>
|
||||||
<TextField
|
<TextField
|
||||||
name="f"
|
name="f"
|
||||||
label={LL.FREQ()}
|
label={LL.FREQ()}
|
||||||
value={numberValue(editItem.f)}
|
value={numberValue(editItem.f)}
|
||||||
fullWidth
|
|
||||||
type="number"
|
type="number"
|
||||||
variant="outlined"
|
variant="outlined"
|
||||||
|
sx={{ width: '11ch' }}
|
||||||
onChange={updateFormValue}
|
onChange={updateFormValue}
|
||||||
inputProps={{ min: '1', max: '5000', step: '1' }}
|
slotProps={{
|
||||||
InputProps={{
|
input: {
|
||||||
startAdornment: (
|
startAdornment: (
|
||||||
<InputAdornment position="start">Hz</InputAdornment>
|
<InputAdornment position="start">Hz</InputAdornment>
|
||||||
)
|
)
|
||||||
|
},
|
||||||
|
htmlInput: { min: '1', max: '5000', step: '1' }
|
||||||
}}
|
}}
|
||||||
/>
|
/>
|
||||||
</Grid>
|
</Grid>
|
||||||
<Grid item xs={4}>
|
<Grid>
|
||||||
<TextField
|
<TextField
|
||||||
name="o"
|
name="o"
|
||||||
label={LL.DUTY_CYCLE()}
|
label={LL.DUTY_CYCLE()}
|
||||||
value={numberValue(editItem.o)}
|
value={numberValue(editItem.o)}
|
||||||
fullWidth
|
|
||||||
type="number"
|
type="number"
|
||||||
|
sx={{ width: '11ch' }}
|
||||||
variant="outlined"
|
variant="outlined"
|
||||||
onChange={updateFormValue}
|
onChange={updateFormValue}
|
||||||
inputProps={{ min: '0', max: '100', step: '0.1' }}
|
slotProps={{
|
||||||
InputProps={{
|
input: {
|
||||||
startAdornment: (
|
startAdornment: (
|
||||||
<InputAdornment position="start">%</InputAdornment>
|
<InputAdornment position="start">%</InputAdornment>
|
||||||
)
|
)
|
||||||
|
},
|
||||||
|
htmlInput: { min: '0', max: '100', step: '0.1' }
|
||||||
}}
|
}}
|
||||||
/>
|
/>
|
||||||
</Grid>
|
</Grid>
|
||||||
|
|||||||
@@ -9,11 +9,11 @@ import {
|
|||||||
DialogActions,
|
DialogActions,
|
||||||
DialogContent,
|
DialogContent,
|
||||||
DialogTitle,
|
DialogTitle,
|
||||||
Grid,
|
|
||||||
InputAdornment,
|
InputAdornment,
|
||||||
TextField,
|
TextField,
|
||||||
Typography
|
Typography
|
||||||
} from '@mui/material';
|
} from '@mui/material';
|
||||||
|
import Grid from '@mui/material/Grid2';
|
||||||
|
|
||||||
import { dialogStyle } from 'CustomTheme';
|
import { dialogStyle } from 'CustomTheme';
|
||||||
import type Schema from 'async-validator';
|
import type Schema from 'async-validator';
|
||||||
@@ -79,30 +79,33 @@ const SensorsTemperatureDialog = ({
|
|||||||
{LL.ID_OF(LL.SENSOR(0))}: {editItem.id}
|
{LL.ID_OF(LL.SENSOR(0))}: {editItem.id}
|
||||||
</Typography>
|
</Typography>
|
||||||
</Box>
|
</Box>
|
||||||
<Grid container spacing={1}>
|
<Grid container spacing={2}>
|
||||||
<Grid item>
|
<Grid>
|
||||||
<ValidatedTextField
|
<ValidatedTextField
|
||||||
fieldErrors={fieldErrors}
|
fieldErrors={fieldErrors}
|
||||||
name="n"
|
name="n"
|
||||||
label={LL.NAME(0)}
|
label={LL.NAME(0)}
|
||||||
value={editItem.n}
|
value={editItem.n}
|
||||||
// autoFocus
|
|
||||||
sx={{ width: '30ch' }}
|
sx={{ width: '30ch' }}
|
||||||
onChange={updateFormValue}
|
onChange={updateFormValue}
|
||||||
/>
|
/>
|
||||||
</Grid>
|
</Grid>
|
||||||
<Grid item>
|
<Grid>
|
||||||
<TextField
|
<TextField
|
||||||
name="o"
|
name="o"
|
||||||
label={LL.OFFSET()}
|
label={LL.OFFSET()}
|
||||||
value={numberValue(editItem.o)}
|
value={numberValue(editItem.o)}
|
||||||
sx={{ width: '12ch' }}
|
sx={{ width: '11ch' }}
|
||||||
type="number"
|
type="number"
|
||||||
variant="outlined"
|
variant="outlined"
|
||||||
onChange={updateFormValue}
|
onChange={updateFormValue}
|
||||||
inputProps={{ min: '-5', max: '5', step: '0.1' }}
|
slotProps={{
|
||||||
InputProps={{
|
input: {
|
||||||
startAdornment: <InputAdornment position="start">°C</InputAdornment>
|
startAdornment: (
|
||||||
|
<InputAdornment position="start">°C</InputAdornment>
|
||||||
|
)
|
||||||
|
},
|
||||||
|
htmlInput: { min: '-5', max: '5', step: '0.1' }
|
||||||
}}
|
}}
|
||||||
/>
|
/>
|
||||||
</Grid>
|
</Grid>
|
||||||
|
|||||||
@@ -272,8 +272,8 @@ export interface BoardProfile {
|
|||||||
|
|
||||||
export interface APIcall {
|
export interface APIcall {
|
||||||
device: string;
|
device: string;
|
||||||
entity: string;
|
cmd: string;
|
||||||
id: unknown;
|
id: number;
|
||||||
}
|
}
|
||||||
export interface WriteAnalogSensor {
|
export interface WriteAnalogSensor {
|
||||||
id: number;
|
id: number;
|
||||||
@@ -420,12 +420,11 @@ export const enum DeviceValueType {
|
|||||||
TIME, // same as UINT24
|
TIME, // same as UINT24
|
||||||
UINT32,
|
UINT32,
|
||||||
ENUM,
|
ENUM,
|
||||||
STRING,
|
STRING, // RAW
|
||||||
CMD
|
CMD
|
||||||
}
|
}
|
||||||
|
|
||||||
export const DeviceValueTypeNames = [
|
export const DeviceValueTypeNames = [
|
||||||
//
|
|
||||||
'BOOL',
|
'BOOL',
|
||||||
'INT8',
|
'INT8',
|
||||||
'UINT8',
|
'UINT8',
|
||||||
|
|||||||
@@ -381,6 +381,10 @@ export const entityItemValidation = (entity: EntityItem[], entityItem: EntityIte
|
|||||||
offset: [
|
offset: [
|
||||||
{ required: true, message: 'Offset is required' },
|
{ required: true, message: 'Offset is required' },
|
||||||
{ type: 'number', min: 0, max: 255, message: 'Must be between 0 and 255' }
|
{ type: 'number', min: 0, max: 255, message: 'Must be between 0 and 255' }
|
||||||
|
],
|
||||||
|
factor: [
|
||||||
|
{ required: true, message: 'Bytes is required' },
|
||||||
|
{ type: 'number', min: 1, max: 255, message: 'Must be between 1 and 255' }
|
||||||
]
|
]
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@@ -206,7 +206,7 @@ const APSettings = () => {
|
|||||||
startIcon={<CancelIcon />}
|
startIcon={<CancelIcon />}
|
||||||
disabled={saving}
|
disabled={saving}
|
||||||
variant="outlined"
|
variant="outlined"
|
||||||
color="primary"
|
color="secondary"
|
||||||
type="submit"
|
type="submit"
|
||||||
onClick={loadData}
|
onClick={loadData}
|
||||||
>
|
>
|
||||||
|
|||||||
@@ -9,14 +9,14 @@ import {
|
|||||||
Button,
|
Button,
|
||||||
Checkbox,
|
Checkbox,
|
||||||
Divider,
|
Divider,
|
||||||
Grid,
|
|
||||||
InputAdornment,
|
InputAdornment,
|
||||||
MenuItem,
|
MenuItem,
|
||||||
TextField,
|
TextField,
|
||||||
Typography
|
Typography
|
||||||
} from '@mui/material';
|
} from '@mui/material';
|
||||||
|
import Grid from '@mui/material/Grid2';
|
||||||
|
|
||||||
import { readHardwareStatus, restart } from 'api/system';
|
import { readHardwareStatus } from 'api/system';
|
||||||
|
|
||||||
import { useRequest } from 'alova/client';
|
import { useRequest } from 'alova/client';
|
||||||
import RestartMonitor from 'app/status/RestartMonitor';
|
import RestartMonitor from 'app/status/RestartMonitor';
|
||||||
@@ -35,9 +35,9 @@ import { useI18nContext } from 'i18n/i18n-react';
|
|||||||
import { numberValue, updateValueDirty, useRest } from 'utils';
|
import { numberValue, updateValueDirty, useRest } from 'utils';
|
||||||
import { validate } from 'validators';
|
import { validate } from 'validators';
|
||||||
|
|
||||||
import { getBoardProfile, readSettings, writeSettings } from '../../api/app';
|
import { API, getBoardProfile, readSettings, writeSettings } from '../../api/app';
|
||||||
import { BOARD_PROFILES } from '../main/types';
|
import { BOARD_PROFILES } from '../main/types';
|
||||||
import type { Settings } from '../main/types';
|
import type { APIcall, Settings } from '../main/types';
|
||||||
import { createSettingsValidator } from '../main/validators';
|
import { createSettingsValidator } from '../main/validators';
|
||||||
|
|
||||||
export function boardProfileSelectItems() {
|
export function boardProfileSelectItems() {
|
||||||
@@ -80,6 +80,10 @@ const ApplicationSettings = () => {
|
|||||||
|
|
||||||
const [fieldErrors, setFieldErrors] = useState<ValidateFieldsError>();
|
const [fieldErrors, setFieldErrors] = useState<ValidateFieldsError>();
|
||||||
|
|
||||||
|
const { send: sendAPI } = useRequest((data: APIcall) => API(data), {
|
||||||
|
immediate: false
|
||||||
|
});
|
||||||
|
|
||||||
const { loading: processingBoard, send: readBoardProfile } = useRequest(
|
const { loading: processingBoard, send: readBoardProfile } = useRequest(
|
||||||
(boardProfile: string) => getBoardProfile(boardProfile),
|
(boardProfile: string) => getBoardProfile(boardProfile),
|
||||||
{
|
{
|
||||||
@@ -102,9 +106,14 @@ const ApplicationSettings = () => {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
const { send: restartCommand } = useRequest(restart(), {
|
const doRestart = async () => {
|
||||||
immediate: false
|
setRestarting(true);
|
||||||
});
|
await sendAPI({ device: 'system', cmd: 'restart', id: 0 }).catch(
|
||||||
|
(error: Error) => {
|
||||||
|
toast.error(error.message);
|
||||||
|
}
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
const updateBoardProfile = async (board_profile: string) => {
|
const updateBoardProfile = async (board_profile: string) => {
|
||||||
await readBoardProfile(board_profile).catch((error: Error) => {
|
await readBoardProfile(board_profile).catch((error: Error) => {
|
||||||
@@ -114,6 +123,19 @@ const ApplicationSettings = () => {
|
|||||||
|
|
||||||
useLayoutTitle(LL.SETTINGS_OF(LL.APPLICATION()));
|
useLayoutTitle(LL.SETTINGS_OF(LL.APPLICATION()));
|
||||||
|
|
||||||
|
const SecondsInputProps = {
|
||||||
|
endAdornment: <InputAdornment position="end">{LL.SECONDS()}</InputAdornment>
|
||||||
|
};
|
||||||
|
const MilliSecondsInputProps = {
|
||||||
|
endAdornment: <InputAdornment position="end">ms</InputAdornment>
|
||||||
|
};
|
||||||
|
const MinutesInputProps = {
|
||||||
|
endAdornment: <InputAdornment position="end">{LL.MINUTES()}</InputAdornment>
|
||||||
|
};
|
||||||
|
const HoursInputProps = {
|
||||||
|
endAdornment: <InputAdornment position="end">{LL.HOURS()}</InputAdornment>
|
||||||
|
};
|
||||||
|
|
||||||
const content = () => {
|
const content = () => {
|
||||||
if (!data || !hardwareData) {
|
if (!data || !hardwareData) {
|
||||||
return <FormLoader onRetry={loadData} errorMessage={errorMessage} />;
|
return <FormLoader onRetry={loadData} errorMessage={errorMessage} />;
|
||||||
@@ -145,10 +167,7 @@ const ApplicationSettings = () => {
|
|||||||
|
|
||||||
const restart = async () => {
|
const restart = async () => {
|
||||||
await validateAndSubmit();
|
await validateAndSubmit();
|
||||||
await restartCommand().catch((error: Error) => {
|
await doRestart();
|
||||||
toast.error(error.message);
|
|
||||||
});
|
|
||||||
setRestarting(true);
|
|
||||||
};
|
};
|
||||||
|
|
||||||
return (
|
return (
|
||||||
@@ -191,19 +210,12 @@ const ApplicationSettings = () => {
|
|||||||
label={LL.ENABLE_MODBUS()}
|
label={LL.ENABLE_MODBUS()}
|
||||||
/>
|
/>
|
||||||
{data.modbus_enabled && (
|
{data.modbus_enabled && (
|
||||||
<Grid
|
<Grid container spacing={2} rowSpacing={0}>
|
||||||
container
|
<Grid>
|
||||||
spacing={1}
|
|
||||||
direction="row"
|
|
||||||
justifyContent="flex-start"
|
|
||||||
alignItems="flex-start"
|
|
||||||
>
|
|
||||||
<Grid item xs={12} sm={6}>
|
|
||||||
<ValidatedTextField
|
<ValidatedTextField
|
||||||
fieldErrors={fieldErrors}
|
fieldErrors={fieldErrors}
|
||||||
name="modbus_max_clients"
|
name="modbus_max_clients"
|
||||||
label={LL.AP_MAX_CLIENTS()}
|
label={LL.AP_MAX_CLIENTS()}
|
||||||
fullWidth
|
|
||||||
variant="outlined"
|
variant="outlined"
|
||||||
value={numberValue(data.modbus_max_clients)}
|
value={numberValue(data.modbus_max_clients)}
|
||||||
type="number"
|
type="number"
|
||||||
@@ -211,12 +223,11 @@ const ApplicationSettings = () => {
|
|||||||
margin="normal"
|
margin="normal"
|
||||||
/>
|
/>
|
||||||
</Grid>
|
</Grid>
|
||||||
<Grid item xs={12} sm={6}>
|
<Grid>
|
||||||
<ValidatedTextField
|
<ValidatedTextField
|
||||||
fieldErrors={fieldErrors}
|
fieldErrors={fieldErrors}
|
||||||
name="modbus_port"
|
name="modbus_port"
|
||||||
label="Port"
|
label="Port"
|
||||||
fullWidth
|
|
||||||
variant="outlined"
|
variant="outlined"
|
||||||
value={numberValue(data.modbus_port)}
|
value={numberValue(data.modbus_port)}
|
||||||
type="number"
|
type="number"
|
||||||
@@ -224,15 +235,14 @@ const ApplicationSettings = () => {
|
|||||||
margin="normal"
|
margin="normal"
|
||||||
/>
|
/>
|
||||||
</Grid>
|
</Grid>
|
||||||
<Grid item xs={12} sm={6}>
|
<Grid>
|
||||||
<ValidatedTextField
|
<ValidatedTextField
|
||||||
fieldErrors={fieldErrors}
|
fieldErrors={fieldErrors}
|
||||||
name="modbus_timeout"
|
name="modbus_timeout"
|
||||||
label="Timeout"
|
label="Timeout"
|
||||||
InputProps={{
|
slotProps={{
|
||||||
endAdornment: <InputAdornment position="end">ms</InputAdornment>
|
input: MilliSecondsInputProps
|
||||||
}}
|
}}
|
||||||
fullWidth
|
|
||||||
variant="outlined"
|
variant="outlined"
|
||||||
value={numberValue(data.modbus_timeout)}
|
value={numberValue(data.modbus_timeout)}
|
||||||
type="number"
|
type="number"
|
||||||
@@ -254,31 +264,23 @@ const ApplicationSettings = () => {
|
|||||||
label={LL.ENABLE_SYSLOG()}
|
label={LL.ENABLE_SYSLOG()}
|
||||||
/>
|
/>
|
||||||
{data.syslog_enabled && (
|
{data.syslog_enabled && (
|
||||||
<Grid
|
<Grid container spacing={2} rowSpacing={0}>
|
||||||
container
|
<Grid>
|
||||||
spacing={1}
|
|
||||||
direction="row"
|
|
||||||
justifyContent="flex-start"
|
|
||||||
alignItems="flex-start"
|
|
||||||
>
|
|
||||||
<Grid item xs={12} sm={6}>
|
|
||||||
<ValidatedTextField
|
<ValidatedTextField
|
||||||
fieldErrors={fieldErrors}
|
fieldErrors={fieldErrors}
|
||||||
name="syslog_host"
|
name="syslog_host"
|
||||||
label="Host"
|
label="Host"
|
||||||
fullWidth
|
|
||||||
variant="outlined"
|
variant="outlined"
|
||||||
value={data.syslog_host}
|
value={data.syslog_host}
|
||||||
onChange={updateFormValue}
|
onChange={updateFormValue}
|
||||||
margin="normal"
|
margin="normal"
|
||||||
/>
|
/>
|
||||||
</Grid>
|
</Grid>
|
||||||
<Grid item xs={12} sm={6}>
|
<Grid>
|
||||||
<ValidatedTextField
|
<ValidatedTextField
|
||||||
fieldErrors={fieldErrors}
|
fieldErrors={fieldErrors}
|
||||||
name="syslog_port"
|
name="syslog_port"
|
||||||
label="Port"
|
label="Port"
|
||||||
fullWidth
|
|
||||||
variant="outlined"
|
variant="outlined"
|
||||||
value={numberValue(data.syslog_port)}
|
value={numberValue(data.syslog_port)}
|
||||||
type="number"
|
type="number"
|
||||||
@@ -286,7 +288,7 @@ const ApplicationSettings = () => {
|
|||||||
margin="normal"
|
margin="normal"
|
||||||
/>
|
/>
|
||||||
</Grid>
|
</Grid>
|
||||||
<Grid item xs={12} sm={6}>
|
<Grid>
|
||||||
<TextField
|
<TextField
|
||||||
name="syslog_level"
|
name="syslog_level"
|
||||||
label={LL.LOG_LEVEL()}
|
label={LL.LOG_LEVEL()}
|
||||||
@@ -305,17 +307,14 @@ const ApplicationSettings = () => {
|
|||||||
<MenuItem value={9}>ALL</MenuItem>
|
<MenuItem value={9}>ALL</MenuItem>
|
||||||
</TextField>
|
</TextField>
|
||||||
</Grid>
|
</Grid>
|
||||||
<Grid item xs={12} sm={6}>
|
<Grid>
|
||||||
<ValidatedTextField
|
<ValidatedTextField
|
||||||
fieldErrors={fieldErrors}
|
fieldErrors={fieldErrors}
|
||||||
name="syslog_mark_interval"
|
name="syslog_mark_interval"
|
||||||
label={LL.MARK_INTERVAL()}
|
label={LL.MARK_INTERVAL()}
|
||||||
InputProps={{
|
slotProps={{
|
||||||
endAdornment: (
|
input: SecondsInputProps
|
||||||
<InputAdornment position="end">{LL.SECONDS()}</InputAdornment>
|
|
||||||
)
|
|
||||||
}}
|
}}
|
||||||
fullWidth
|
|
||||||
variant="outlined"
|
variant="outlined"
|
||||||
value={numberValue(data.syslog_mark_interval)}
|
value={numberValue(data.syslog_mark_interval)}
|
||||||
type="number"
|
type="number"
|
||||||
@@ -358,7 +357,8 @@ const ApplicationSettings = () => {
|
|||||||
<Typography sx={{ pb: 1, pt: 2 }} variant="h6" color="primary">
|
<Typography sx={{ pb: 1, pt: 2 }} variant="h6" color="primary">
|
||||||
{LL.FORMATTING_OPTIONS()}
|
{LL.FORMATTING_OPTIONS()}
|
||||||
</Typography>
|
</Typography>
|
||||||
<Grid item>
|
<Grid container spacing={2}>
|
||||||
|
<Grid size={3}>
|
||||||
<TextField
|
<TextField
|
||||||
name="locale"
|
name="locale"
|
||||||
label={LL.LANGUAGE_ENTITIES()}
|
label={LL.LANGUAGE_ENTITIES()}
|
||||||
@@ -381,20 +381,13 @@ const ApplicationSettings = () => {
|
|||||||
<MenuItem value="tr">Türk (TR)</MenuItem>
|
<MenuItem value="tr">Türk (TR)</MenuItem>
|
||||||
</TextField>
|
</TextField>
|
||||||
</Grid>
|
</Grid>
|
||||||
<Grid
|
<Grid size={3}>
|
||||||
container
|
|
||||||
spacing={1}
|
|
||||||
direction="row"
|
|
||||||
justifyContent="flex-start"
|
|
||||||
alignItems="flex-start"
|
|
||||||
>
|
|
||||||
<Grid item xs={12} sm={6} md={4}>
|
|
||||||
<TextField
|
<TextField
|
||||||
name="bool_dashboard"
|
name="bool_dashboard"
|
||||||
label={LL.BOOLEAN_FORMAT_DASHBOARD()}
|
label={LL.BOOLEAN_FORMAT_DASHBOARD()}
|
||||||
value={data.bool_dashboard}
|
value={data.bool_dashboard}
|
||||||
fullWidth
|
|
||||||
variant="outlined"
|
variant="outlined"
|
||||||
|
fullWidth
|
||||||
onChange={updateFormValue}
|
onChange={updateFormValue}
|
||||||
margin="normal"
|
margin="normal"
|
||||||
select
|
select
|
||||||
@@ -405,13 +398,13 @@ const ApplicationSettings = () => {
|
|||||||
<MenuItem value={5}>1/0</MenuItem>
|
<MenuItem value={5}>1/0</MenuItem>
|
||||||
</TextField>
|
</TextField>
|
||||||
</Grid>
|
</Grid>
|
||||||
<Grid item xs={12} sm={6} md={4}>
|
<Grid size={3}>
|
||||||
<TextField
|
<TextField
|
||||||
name="bool_format"
|
name="bool_format"
|
||||||
label={LL.BOOLEAN_FORMAT_API()}
|
label={LL.BOOLEAN_FORMAT_API()}
|
||||||
value={data.bool_format}
|
value={data.bool_format}
|
||||||
fullWidth
|
|
||||||
variant="outlined"
|
variant="outlined"
|
||||||
|
fullWidth
|
||||||
onChange={updateFormValue}
|
onChange={updateFormValue}
|
||||||
margin="normal"
|
margin="normal"
|
||||||
select
|
select
|
||||||
@@ -424,13 +417,13 @@ const ApplicationSettings = () => {
|
|||||||
<MenuItem value={6}>1/0</MenuItem>
|
<MenuItem value={6}>1/0</MenuItem>
|
||||||
</TextField>
|
</TextField>
|
||||||
</Grid>
|
</Grid>
|
||||||
<Grid item xs={12} sm={6} md={4}>
|
<Grid size={3}>
|
||||||
<TextField
|
<TextField
|
||||||
name="enum_format"
|
name="enum_format"
|
||||||
label={LL.ENUM_FORMAT()}
|
label={LL.ENUM_FORMAT()}
|
||||||
value={data.enum_format}
|
value={data.enum_format}
|
||||||
fullWidth
|
|
||||||
variant="outlined"
|
variant="outlined"
|
||||||
|
fullWidth
|
||||||
onChange={updateFormValue}
|
onChange={updateFormValue}
|
||||||
margin="normal"
|
margin="normal"
|
||||||
select
|
select
|
||||||
@@ -469,7 +462,6 @@ const ApplicationSettings = () => {
|
|||||||
label={LL.BOARD_PROFILE()}
|
label={LL.BOARD_PROFILE()}
|
||||||
value={data.board_profile}
|
value={data.board_profile}
|
||||||
disabled={processingBoard || hardwareData.model.startsWith('BBQKees')}
|
disabled={processingBoard || hardwareData.model.startsWith('BBQKees')}
|
||||||
fullWidth
|
|
||||||
variant="outlined"
|
variant="outlined"
|
||||||
onChange={changeBoardProfile}
|
onChange={changeBoardProfile}
|
||||||
margin="normal"
|
margin="normal"
|
||||||
@@ -483,15 +475,8 @@ const ApplicationSettings = () => {
|
|||||||
</TextField>
|
</TextField>
|
||||||
{data.board_profile === 'CUSTOM' && (
|
{data.board_profile === 'CUSTOM' && (
|
||||||
<>
|
<>
|
||||||
<Grid
|
<Grid container spacing={2} rowSpacing={0}>
|
||||||
container
|
<Grid>
|
||||||
spacing={1}
|
|
||||||
sx={{ pt: 1 }}
|
|
||||||
direction="row"
|
|
||||||
justifyContent="flex-start"
|
|
||||||
alignItems="flex-start"
|
|
||||||
>
|
|
||||||
<Grid item xs={12} sm={6} md={4}>
|
|
||||||
<ValidatedTextField
|
<ValidatedTextField
|
||||||
fieldErrors={fieldErrors}
|
fieldErrors={fieldErrors}
|
||||||
name="rx_gpio"
|
name="rx_gpio"
|
||||||
@@ -504,7 +489,7 @@ const ApplicationSettings = () => {
|
|||||||
margin="normal"
|
margin="normal"
|
||||||
/>
|
/>
|
||||||
</Grid>
|
</Grid>
|
||||||
<Grid item xs={12} sm={6} md={4}>
|
<Grid>
|
||||||
<ValidatedTextField
|
<ValidatedTextField
|
||||||
fieldErrors={fieldErrors}
|
fieldErrors={fieldErrors}
|
||||||
name="tx_gpio"
|
name="tx_gpio"
|
||||||
@@ -517,7 +502,7 @@ const ApplicationSettings = () => {
|
|||||||
margin="normal"
|
margin="normal"
|
||||||
/>
|
/>
|
||||||
</Grid>
|
</Grid>
|
||||||
<Grid item xs={12} sm={6} md={4}>
|
<Grid>
|
||||||
<ValidatedTextField
|
<ValidatedTextField
|
||||||
fieldErrors={fieldErrors}
|
fieldErrors={fieldErrors}
|
||||||
name="pbutton_gpio"
|
name="pbutton_gpio"
|
||||||
@@ -530,7 +515,7 @@ const ApplicationSettings = () => {
|
|||||||
margin="normal"
|
margin="normal"
|
||||||
/>
|
/>
|
||||||
</Grid>
|
</Grid>
|
||||||
<Grid item xs={12} sm={6} md={4}>
|
<Grid>
|
||||||
<ValidatedTextField
|
<ValidatedTextField
|
||||||
fieldErrors={fieldErrors}
|
fieldErrors={fieldErrors}
|
||||||
name="dallas_gpio"
|
name="dallas_gpio"
|
||||||
@@ -545,7 +530,7 @@ const ApplicationSettings = () => {
|
|||||||
margin="normal"
|
margin="normal"
|
||||||
/>
|
/>
|
||||||
</Grid>
|
</Grid>
|
||||||
<Grid item xs={12} sm={6} md={4}>
|
<Grid>
|
||||||
<ValidatedTextField
|
<ValidatedTextField
|
||||||
fieldErrors={fieldErrors}
|
fieldErrors={fieldErrors}
|
||||||
name="led_gpio"
|
name="led_gpio"
|
||||||
@@ -558,7 +543,7 @@ const ApplicationSettings = () => {
|
|||||||
margin="normal"
|
margin="normal"
|
||||||
/>
|
/>
|
||||||
</Grid>
|
</Grid>
|
||||||
<Grid item xs={12} sm={6} md={4}>
|
<Grid>
|
||||||
<TextField
|
<TextField
|
||||||
name="phy_type"
|
name="phy_type"
|
||||||
label={LL.PHY_TYPE()}
|
label={LL.PHY_TYPE()}
|
||||||
@@ -576,15 +561,8 @@ const ApplicationSettings = () => {
|
|||||||
</Grid>
|
</Grid>
|
||||||
</Grid>
|
</Grid>
|
||||||
{data.phy_type !== 0 && (
|
{data.phy_type !== 0 && (
|
||||||
<Grid
|
<Grid container spacing={2} rowSpacing={0}>
|
||||||
container
|
<Grid>
|
||||||
spacing={1}
|
|
||||||
sx={{ pt: 1 }}
|
|
||||||
direction="row"
|
|
||||||
justifyContent="flex-start"
|
|
||||||
alignItems="flex-start"
|
|
||||||
>
|
|
||||||
<Grid item xs={12} sm={6} md={4}>
|
|
||||||
<TextField
|
<TextField
|
||||||
name="eth_power"
|
name="eth_power"
|
||||||
label={LL.GPIO_OF('PHY Power') + ' (-1=' + LL.DISABLED(1) + ')'}
|
label={LL.GPIO_OF('PHY Power') + ' (-1=' + LL.DISABLED(1) + ')'}
|
||||||
@@ -596,7 +574,7 @@ const ApplicationSettings = () => {
|
|||||||
margin="normal"
|
margin="normal"
|
||||||
/>
|
/>
|
||||||
</Grid>
|
</Grid>
|
||||||
<Grid item xs={12} sm={6} md={4}>
|
<Grid>
|
||||||
<TextField
|
<TextField
|
||||||
name="eth_phy_addr"
|
name="eth_phy_addr"
|
||||||
label={LL.ADDRESS_OF('PHY I²C')}
|
label={LL.ADDRESS_OF('PHY I²C')}
|
||||||
@@ -608,7 +586,7 @@ const ApplicationSettings = () => {
|
|||||||
margin="normal"
|
margin="normal"
|
||||||
/>
|
/>
|
||||||
</Grid>
|
</Grid>
|
||||||
<Grid item xs={12} sm={6} md={4}>
|
<Grid>
|
||||||
<TextField
|
<TextField
|
||||||
name="eth_clock_mode"
|
name="eth_clock_mode"
|
||||||
label="PHY Clk"
|
label="PHY Clk"
|
||||||
@@ -629,14 +607,8 @@ const ApplicationSettings = () => {
|
|||||||
)}
|
)}
|
||||||
</>
|
</>
|
||||||
)}
|
)}
|
||||||
<Grid
|
<Grid container spacing={2} rowSpacing={0}>
|
||||||
container
|
<Grid>
|
||||||
spacing={1}
|
|
||||||
direction="row"
|
|
||||||
justifyContent="flex-start"
|
|
||||||
alignItems="flex-start"
|
|
||||||
>
|
|
||||||
<Grid item xs={12} sm={6}>
|
|
||||||
<TextField
|
<TextField
|
||||||
name="tx_mode"
|
name="tx_mode"
|
||||||
label={LL.TX_MODE()}
|
label={LL.TX_MODE()}
|
||||||
@@ -653,7 +625,7 @@ const ApplicationSettings = () => {
|
|||||||
<MenuItem value={4}>{LL.HARDWARE()}</MenuItem>
|
<MenuItem value={4}>{LL.HARDWARE()}</MenuItem>
|
||||||
</TextField>
|
</TextField>
|
||||||
</Grid>
|
</Grid>
|
||||||
<Grid item xs={12} sm={6}>
|
<Grid>
|
||||||
<TextField
|
<TextField
|
||||||
name="ems_bus_id"
|
name="ems_bus_id"
|
||||||
label={LL.ID_OF(LL.EMS_BUS(0))}
|
label={LL.ID_OF(LL.EMS_BUS(0))}
|
||||||
@@ -741,10 +713,8 @@ const ApplicationSettings = () => {
|
|||||||
fieldErrors={fieldErrors}
|
fieldErrors={fieldErrors}
|
||||||
name="remote_timeout"
|
name="remote_timeout"
|
||||||
label={LL.REMOTE_TIMEOUT()}
|
label={LL.REMOTE_TIMEOUT()}
|
||||||
InputProps={{
|
slotProps={{
|
||||||
endAdornment: (
|
input: HoursInputProps
|
||||||
<InputAdornment position="end">{LL.HOURS()}</InputAdornment>
|
|
||||||
)
|
|
||||||
}}
|
}}
|
||||||
variant="outlined"
|
variant="outlined"
|
||||||
value={numberValue(data.remote_timeout)}
|
value={numberValue(data.remote_timeout)}
|
||||||
@@ -753,13 +723,7 @@ const ApplicationSettings = () => {
|
|||||||
/>
|
/>
|
||||||
</Box>
|
</Box>
|
||||||
)}
|
)}
|
||||||
<Grid
|
<Grid container spacing={2} rowSpacing={0}>
|
||||||
container
|
|
||||||
spacing={0}
|
|
||||||
direction="row"
|
|
||||||
justifyContent="flex-start"
|
|
||||||
alignItems="flex-start"
|
|
||||||
>
|
|
||||||
<BlockFormControlLabel
|
<BlockFormControlLabel
|
||||||
control={
|
control={
|
||||||
<Checkbox
|
<Checkbox
|
||||||
@@ -782,25 +746,15 @@ const ApplicationSettings = () => {
|
|||||||
disabled={!data.shower_timer}
|
disabled={!data.shower_timer}
|
||||||
/>
|
/>
|
||||||
</Grid>
|
</Grid>
|
||||||
<Grid
|
<Grid container spacing={2} sx={{ pt: 2 }}>
|
||||||
container
|
|
||||||
sx={{ pt: 2 }}
|
|
||||||
rowSpacing={3}
|
|
||||||
spacing={1}
|
|
||||||
direction="row"
|
|
||||||
justifyContent="flex-start"
|
|
||||||
alignItems="flex-start"
|
|
||||||
>
|
|
||||||
{data.shower_timer && (
|
{data.shower_timer && (
|
||||||
<Grid item xs={12} sm={6}>
|
<Grid>
|
||||||
<ValidatedTextField
|
<ValidatedTextField
|
||||||
fieldErrors={fieldErrors}
|
fieldErrors={fieldErrors}
|
||||||
name="shower_min_duration"
|
name="shower_min_duration"
|
||||||
label={LL.MIN_DURATION()}
|
label={LL.MIN_DURATION()}
|
||||||
InputProps={{
|
slotProps={{
|
||||||
endAdornment: (
|
input: SecondsInputProps
|
||||||
<InputAdornment position="end">{LL.SECONDS()}</InputAdornment>
|
|
||||||
)
|
|
||||||
}}
|
}}
|
||||||
variant="outlined"
|
variant="outlined"
|
||||||
value={numberValue(data.shower_min_duration)}
|
value={numberValue(data.shower_min_duration)}
|
||||||
@@ -812,15 +766,13 @@ const ApplicationSettings = () => {
|
|||||||
)}
|
)}
|
||||||
{data.shower_alert && (
|
{data.shower_alert && (
|
||||||
<>
|
<>
|
||||||
<Grid item xs={12} sm={6}>
|
<Grid>
|
||||||
<ValidatedTextField
|
<ValidatedTextField
|
||||||
fieldErrors={fieldErrors}
|
fieldErrors={fieldErrors}
|
||||||
name="shower_alert_trigger"
|
name="shower_alert_trigger"
|
||||||
label={LL.TRIGGER_TIME()}
|
label={LL.TRIGGER_TIME()}
|
||||||
InputProps={{
|
slotProps={{
|
||||||
endAdornment: (
|
input: MinutesInputProps
|
||||||
<InputAdornment position="end">{LL.MINUTES()}</InputAdornment>
|
|
||||||
)
|
|
||||||
}}
|
}}
|
||||||
variant="outlined"
|
variant="outlined"
|
||||||
value={numberValue(data.shower_alert_trigger)}
|
value={numberValue(data.shower_alert_trigger)}
|
||||||
@@ -830,15 +782,13 @@ const ApplicationSettings = () => {
|
|||||||
disabled={!data.shower_timer}
|
disabled={!data.shower_timer}
|
||||||
/>
|
/>
|
||||||
</Grid>
|
</Grid>
|
||||||
<Grid item xs={12} sm={6}>
|
<Grid>
|
||||||
<ValidatedTextField
|
<ValidatedTextField
|
||||||
fieldErrors={fieldErrors}
|
fieldErrors={fieldErrors}
|
||||||
name="shower_alert_coldshot"
|
name="shower_alert_coldshot"
|
||||||
label={LL.COLD_SHOT_DURATION()}
|
label={LL.COLD_SHOT_DURATION()}
|
||||||
InputProps={{
|
slotProps={{
|
||||||
endAdornment: (
|
input: SecondsInputProps
|
||||||
<InputAdornment position="end">{LL.SECONDS()}</InputAdornment>
|
|
||||||
)
|
|
||||||
}}
|
}}
|
||||||
variant="outlined"
|
variant="outlined"
|
||||||
value={numberValue(data.shower_alert_coldshot)}
|
value={numberValue(data.shower_alert_coldshot)}
|
||||||
@@ -869,7 +819,7 @@ const ApplicationSettings = () => {
|
|||||||
<Button
|
<Button
|
||||||
startIcon={<CancelIcon />}
|
startIcon={<CancelIcon />}
|
||||||
variant="outlined"
|
variant="outlined"
|
||||||
color="primary"
|
color="secondary"
|
||||||
type="submit"
|
type="submit"
|
||||||
onClick={loadData}
|
onClick={loadData}
|
||||||
>
|
>
|
||||||
|
|||||||
@@ -1,10 +1,20 @@
|
|||||||
import { useState } from 'react';
|
import { useState } from 'react';
|
||||||
import { toast } from 'react-toastify';
|
import { toast } from 'react-toastify';
|
||||||
|
|
||||||
|
import CancelIcon from '@mui/icons-material/Cancel';
|
||||||
import DownloadIcon from '@mui/icons-material/GetApp';
|
import DownloadIcon from '@mui/icons-material/GetApp';
|
||||||
import PowerSettingsNewIcon from '@mui/icons-material/PowerSettingsNew';
|
import InfoOutlinedIcon from '@mui/icons-material/InfoOutlined';
|
||||||
import WarningIcon from '@mui/icons-material/Warning';
|
import WarningIcon from '@mui/icons-material/Warning';
|
||||||
import { Box, Button, Divider, Link, Typography } from '@mui/material';
|
import {
|
||||||
|
Box,
|
||||||
|
Button,
|
||||||
|
Dialog,
|
||||||
|
DialogActions,
|
||||||
|
DialogContent,
|
||||||
|
DialogTitle,
|
||||||
|
Link,
|
||||||
|
Typography
|
||||||
|
} from '@mui/material';
|
||||||
|
|
||||||
import * as SystemApi from 'api/system';
|
import * as SystemApi from 'api/system';
|
||||||
import {
|
import {
|
||||||
@@ -14,7 +24,12 @@ import {
|
|||||||
getSchedule,
|
getSchedule,
|
||||||
getSettings
|
getSettings
|
||||||
} from 'api/app';
|
} from 'api/app';
|
||||||
import { getDevVersion, getStableVersion } from 'api/system';
|
import {
|
||||||
|
checkUpgrade,
|
||||||
|
getDevVersion,
|
||||||
|
getStableVersion,
|
||||||
|
uploadURL
|
||||||
|
} from 'api/system';
|
||||||
|
|
||||||
import { dialogStyle } from 'CustomTheme';
|
import { dialogStyle } from 'CustomTheme';
|
||||||
import { useRequest } from 'alova/client';
|
import { useRequest } from 'alova/client';
|
||||||
@@ -22,7 +37,6 @@ import type { APIcall } from 'app/main/types';
|
|||||||
import RestartMonitor from 'app/status/RestartMonitor';
|
import RestartMonitor from 'app/status/RestartMonitor';
|
||||||
import {
|
import {
|
||||||
FormLoader,
|
FormLoader,
|
||||||
MessageBox,
|
|
||||||
SectionContent,
|
SectionContent,
|
||||||
SingleUpload,
|
SingleUpload,
|
||||||
useLayoutTitle
|
useLayoutTitle
|
||||||
@@ -33,7 +47,9 @@ const DownloadUpload = () => {
|
|||||||
const { LL } = useI18nContext();
|
const { LL } = useI18nContext();
|
||||||
|
|
||||||
const [restarting, setRestarting] = useState<boolean>(false);
|
const [restarting, setRestarting] = useState<boolean>(false);
|
||||||
const [restartNeeded, setRestartNeeded] = useState<boolean>(false);
|
const [openDialog, setOpenDialog] = useState<boolean>(false);
|
||||||
|
const [useDev, setUseDev] = useState<boolean>(false);
|
||||||
|
const [upgradeAvailable, setUpgradeAvailable] = useState<boolean>(false);
|
||||||
|
|
||||||
const { send: sendSettings } = useRequest(getSettings(), {
|
const { send: sendSettings } = useRequest(getSettings(), {
|
||||||
immediate: false
|
immediate: false
|
||||||
@@ -59,7 +75,11 @@ const DownloadUpload = () => {
|
|||||||
saveFile(event.data, 'schedule.json');
|
saveFile(event.data, 'schedule.json');
|
||||||
});
|
});
|
||||||
|
|
||||||
const { send: getAPI } = useRequest((data: APIcall) => API(data), {
|
const { send: sendAPI } = useRequest((data: APIcall) => API(data), {
|
||||||
|
immediate: false
|
||||||
|
});
|
||||||
|
|
||||||
|
const { send: sendAPIandSave } = useRequest((data: APIcall) => API(data), {
|
||||||
immediate: false
|
immediate: false
|
||||||
}).onSuccess((event) => {
|
}).onSuccess((event) => {
|
||||||
saveFile(
|
saveFile(
|
||||||
@@ -75,40 +95,39 @@ const DownloadUpload = () => {
|
|||||||
} = useRequest(SystemApi.readHardwareStatus);
|
} = useRequest(SystemApi.readHardwareStatus);
|
||||||
|
|
||||||
const { send: sendUploadURL } = useRequest(
|
const { send: sendUploadURL } = useRequest(
|
||||||
(data: { url: string }) => SystemApi.uploadURL(data),
|
(data: { url: string }) => uploadURL(data),
|
||||||
{
|
{
|
||||||
immediate: false
|
immediate: false
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
const { send: restartCommand } = useRequest(SystemApi.restart(), {
|
const doRestart = async () => {
|
||||||
immediate: false
|
|
||||||
});
|
|
||||||
|
|
||||||
const restart = async () => {
|
|
||||||
await restartCommand()
|
|
||||||
.then(() => {
|
|
||||||
setRestarting(true);
|
setRestarting(true);
|
||||||
})
|
await sendAPI({ device: 'system', cmd: 'restart', id: 0 }).catch(
|
||||||
.catch((error: Error) => {
|
(error: Error) => {
|
||||||
toast.error(error.message);
|
toast.error(error.message);
|
||||||
});
|
}
|
||||||
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const { send: sendCheckUpgrade } = useRequest(checkUpgrade, {
|
||||||
|
immediate: false
|
||||||
|
}).onSuccess((event) => {
|
||||||
|
setUpgradeAvailable(event.data.upgradeable);
|
||||||
|
});
|
||||||
|
|
||||||
// called immediately to get the latest version, on page load
|
// called immediately to get the latest version, on page load
|
||||||
const { data: latestVersion } = useRequest(getStableVersion, {
|
const { data: latestVersion } = useRequest(getStableVersion, {
|
||||||
immediate: true
|
// uncomment next 2 lines for testing, uses https://github.com/emsesp/EMS-ESP32/releases/download/v3.6.5/EMS-ESP-3_6_5-ESP32-16MB+.bin
|
||||||
// uncomment for testing
|
|
||||||
// https://github.com/emsesp/EMS-ESP32/releases/download/v3.6.5/EMS-ESP-3_6_5-ESP32-16MB+.bin
|
|
||||||
// immediate: false,
|
// immediate: false,
|
||||||
// initialData: '3.6.5'
|
// initialData: '3.6.5'
|
||||||
});
|
});
|
||||||
const { data: latestDevVersion } = useRequest(getDevVersion, {
|
const { data: latestDevVersion } = useRequest(getDevVersion, {
|
||||||
immediate: true
|
// uncomment next 2 lines for testing, uses https://github.com/emsesp/EMS-ESP32/releases/download/latest/EMS-ESP-3_7_0-dev_31-ESP32-16MB+.bin
|
||||||
// uncomment for testing
|
|
||||||
// https://github.com/emsesp/EMS-ESP32/releases/download/latest/EMS-ESP-3_7_0-dev_31-ESP32-16MB+.bin
|
|
||||||
// immediate: false,
|
// immediate: false,
|
||||||
// initialData: '3.7.0-dev.31'
|
// initialData: '3.7.0-dev.32'
|
||||||
|
}).onSuccess((event) => {
|
||||||
|
void sendCheckUpgrade({ version: event.data });
|
||||||
});
|
});
|
||||||
|
|
||||||
const STABLE_URL = 'https://github.com/emsesp/EMS-ESP32/releases/download/';
|
const STABLE_URL = 'https://github.com/emsesp/EMS-ESP32/releases/download/';
|
||||||
@@ -119,8 +138,21 @@ const DownloadUpload = () => {
|
|||||||
const DEV_RELNOTES_URL =
|
const DEV_RELNOTES_URL =
|
||||||
'https://github.com/emsesp/EMS-ESP32/blob/dev/CHANGELOG_LATEST.md';
|
'https://github.com/emsesp/EMS-ESP32/blob/dev/CHANGELOG_LATEST.md';
|
||||||
|
|
||||||
const getBinURL = (v: string) =>
|
const getBinURL = (useDevVersion: boolean) => {
|
||||||
'EMS-ESP-' + v.replaceAll('.', '_') + '-' + getPlatform() + '.bin';
|
if (!latestVersion || !latestDevVersion) {
|
||||||
|
return '';
|
||||||
|
}
|
||||||
|
console.log('getBinURL', useDevVersion, latestDevVersion, latestVersion);
|
||||||
|
const filename =
|
||||||
|
'EMS-ESP-' +
|
||||||
|
(useDevVersion ? latestDevVersion : latestVersion).replaceAll('.', '_') +
|
||||||
|
'-' +
|
||||||
|
getPlatform() +
|
||||||
|
'.bin';
|
||||||
|
return useDevVersion
|
||||||
|
? DEV_URL + filename
|
||||||
|
: STABLE_URL + 'v' + latestVersion + '/' + filename;
|
||||||
|
};
|
||||||
|
|
||||||
const getPlatform = () => {
|
const getPlatform = () => {
|
||||||
return (
|
return (
|
||||||
@@ -173,19 +205,87 @@ const DownloadUpload = () => {
|
|||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
const callAPI = async (device: string, entity: string) => {
|
const callAPIandSave = async (device: string, cmd: string) => {
|
||||||
await getAPI({ device, entity, id: 0 }).catch((error: Error) => {
|
await sendAPIandSave({ device, cmd, id: 0 }).catch((error: Error) => {
|
||||||
toast.error(error.message);
|
toast.error(error.message);
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
useLayoutTitle(LL.DOWNLOAD_UPLOAD());
|
useLayoutTitle(LL.DOWNLOAD_UPLOAD());
|
||||||
|
|
||||||
|
const internet_live =
|
||||||
|
latestDevVersion !== undefined && latestVersion !== undefined;
|
||||||
|
|
||||||
|
const renderUploadDialog = () => {
|
||||||
|
if (!internet_live) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
return (
|
||||||
|
<Dialog
|
||||||
|
sx={dialogStyle}
|
||||||
|
open={openDialog}
|
||||||
|
onClose={() => setOpenDialog(false)}
|
||||||
|
>
|
||||||
|
<DialogTitle>
|
||||||
|
{LL.INSTALL('') +
|
||||||
|
' ' +
|
||||||
|
(useDev ? LL.DEVELOPMENT() : LL.STABLE()) +
|
||||||
|
' Firmware'}
|
||||||
|
</DialogTitle>
|
||||||
|
<DialogContent dividers>
|
||||||
|
<Typography mb={2}>
|
||||||
|
{LL.INSTALL_VERSION(useDev ? latestDevVersion : latestVersion)}
|
||||||
|
</Typography>
|
||||||
|
<Link
|
||||||
|
target="_blank"
|
||||||
|
href={useDev ? DEV_RELNOTES_URL : STABLE_RELNOTES_URL}
|
||||||
|
color="primary"
|
||||||
|
>
|
||||||
|
{LL.RELEASE_NOTES()}
|
||||||
|
</Link>
|
||||||
|
|
|
||||||
|
<Link target="_blank" href={getBinURL(useDev)} color="primary">
|
||||||
|
{LL.DOWNLOAD(1)}
|
||||||
|
</Link>
|
||||||
|
</DialogContent>
|
||||||
|
<DialogActions>
|
||||||
|
<Button
|
||||||
|
startIcon={<CancelIcon />}
|
||||||
|
variant="outlined"
|
||||||
|
onClick={() => setOpenDialog(false)}
|
||||||
|
color="secondary"
|
||||||
|
>
|
||||||
|
{LL.CANCEL()}
|
||||||
|
</Button>
|
||||||
|
<Button
|
||||||
|
startIcon={<WarningIcon color="warning" />}
|
||||||
|
variant="outlined"
|
||||||
|
onClick={() => installFirmwareURL(getBinURL(useDev))}
|
||||||
|
color="primary"
|
||||||
|
>
|
||||||
|
{LL.INSTALL('')}
|
||||||
|
</Button>
|
||||||
|
</DialogActions>
|
||||||
|
</Dialog>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
// useDevVersion = true to force using the dev version
|
||||||
|
const showFirmwareDialog = (useDevVersion: boolean) => {
|
||||||
|
if (useDevVersion || data.emsesp_version.includes('dev')) {
|
||||||
|
setUseDev(true);
|
||||||
|
}
|
||||||
|
setOpenDialog(true);
|
||||||
|
};
|
||||||
|
|
||||||
const content = () => {
|
const content = () => {
|
||||||
if (!data) {
|
if (!data) {
|
||||||
return <FormLoader onRetry={loadData} errorMessage={error?.message} />;
|
return <FormLoader onRetry={loadData} errorMessage={error?.message} />;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const isDev = data.emsesp_version.includes('dev');
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
<Typography sx={{ pb: 2 }} variant="h6" color="primary">
|
<Typography sx={{ pb: 2 }} variant="h6" color="primary">
|
||||||
@@ -200,7 +300,7 @@ const DownloadUpload = () => {
|
|||||||
startIcon={<DownloadIcon />}
|
startIcon={<DownloadIcon />}
|
||||||
variant="outlined"
|
variant="outlined"
|
||||||
color="primary"
|
color="primary"
|
||||||
onClick={() => callAPI('system', 'info')}
|
onClick={() => callAPIandSave('system', 'info')}
|
||||||
>
|
>
|
||||||
{LL.SUPPORT_INFORMATION(0)}
|
{LL.SUPPORT_INFORMATION(0)}
|
||||||
</Button>
|
</Button>
|
||||||
@@ -209,7 +309,7 @@ const DownloadUpload = () => {
|
|||||||
startIcon={<DownloadIcon />}
|
startIcon={<DownloadIcon />}
|
||||||
variant="outlined"
|
variant="outlined"
|
||||||
color="primary"
|
color="primary"
|
||||||
onClick={() => callAPI('system', 'allvalues')}
|
onClick={() => callAPIandSave('system', 'allvalues')}
|
||||||
>
|
>
|
||||||
{LL.ALLVALUES()}
|
{LL.ALLVALUES()}
|
||||||
</Button>
|
</Button>
|
||||||
@@ -274,112 +374,76 @@ const DownloadUpload = () => {
|
|||||||
</Typography>
|
</Typography>
|
||||||
</Box>
|
</Box>
|
||||||
<Box p={2} mt={2} border="1px solid grey" borderRadius={2}>
|
<Box p={2} mt={2} border="1px solid grey" borderRadius={2}>
|
||||||
{LL.VERSION_ON() + ' '}
|
<Typography>
|
||||||
<b>{data.emsesp_version}</b> ({getPlatform()})
|
<b>{LL.VERSION() + ':'}</b> {data.emsesp_version}
|
||||||
<Divider />
|
{data.build_flags && (
|
||||||
{latestVersion && (
|
<Typography variant="caption">
|
||||||
<Box mt={2}>
|
({data.build_flags})
|
||||||
{LL.THE_LATEST()} {LL.OFFICIAL()} {LL.RELEASE_IS()}
|
</Typography>
|
||||||
<b>{latestVersion}</b>
|
)}
|
||||||
(
|
</Typography>
|
||||||
<Link target="_blank" href={STABLE_RELNOTES_URL} color="primary">
|
<Typography>
|
||||||
{LL.RELEASE_NOTES()}
|
<b>Platform:</b> {getPlatform()}
|
||||||
</Link>
|
</Typography>
|
||||||
) (
|
<Typography>
|
||||||
<Link
|
<b>Release:</b> {isDev ? LL.DEVELOPMENT() : LL.STABLE()}
|
||||||
target="_blank"
|
{!isDev && (
|
||||||
href={
|
|
||||||
STABLE_URL + 'v' + latestVersion + '/' + getBinURL(latestVersion)
|
|
||||||
}
|
|
||||||
color="primary"
|
|
||||||
>
|
|
||||||
{LL.DOWNLOAD(1)}
|
|
||||||
</Link>
|
|
||||||
)
|
|
||||||
<Button
|
<Button
|
||||||
sx={{ ml: 2 }}
|
sx={{ ml: 2 }}
|
||||||
size="small"
|
size="small"
|
||||||
startIcon={<WarningIcon color="warning" />}
|
|
||||||
variant="outlined"
|
variant="outlined"
|
||||||
color="primary"
|
color="primary"
|
||||||
onClick={() =>
|
onClick={() => showFirmwareDialog(true)}
|
||||||
installFirmwareURL(
|
|
||||||
STABLE_URL + 'v' + latestVersion + '/' + getBinURL(latestVersion)
|
|
||||||
)
|
|
||||||
}
|
|
||||||
>
|
>
|
||||||
{LL.INSTALL(0)}
|
{LL.SWITCH_DEV()}
|
||||||
</Button>
|
</Button>
|
||||||
</Box>
|
|
||||||
)}
|
)}
|
||||||
{latestDevVersion && (
|
</Typography>
|
||||||
<Box mt={2}>
|
<Typography mt={2} color="secondary">
|
||||||
{LL.THE_LATEST()} {LL.DEVELOPMENT()} {LL.RELEASE_IS()}
|
<InfoOutlinedIcon color="secondary" sx={{ verticalAlign: 'middle' }} />
|
||||||
|
|
||||||
<b>{latestDevVersion}</b>
|
{upgradeAvailable ? LL.UPGRADE_AVAILABLE() : LL.LATEST_VERSION()}
|
||||||
(
|
{upgradeAvailable && internet_live && data.psram ? (
|
||||||
<Link target="_blank" href={DEV_RELNOTES_URL} color="primary">
|
|
||||||
{LL.RELEASE_NOTES()}
|
|
||||||
</Link>
|
|
||||||
) (
|
|
||||||
<Link
|
|
||||||
target="_blank"
|
|
||||||
href={DEV_URL + getBinURL(latestDevVersion)}
|
|
||||||
color="primary"
|
|
||||||
>
|
|
||||||
{LL.DOWNLOAD(1)}
|
|
||||||
</Link>
|
|
||||||
)
|
|
||||||
<Button
|
<Button
|
||||||
sx={{ ml: 2 }}
|
sx={{ ml: 2, textTransform: 'none' }}
|
||||||
size="small"
|
size="small"
|
||||||
startIcon={<WarningIcon color="warning" />}
|
|
||||||
variant="outlined"
|
variant="outlined"
|
||||||
color="primary"
|
color="primary"
|
||||||
onClick={() =>
|
onClick={() => showFirmwareDialog(false)}
|
||||||
installFirmwareURL(DEV_URL + getBinURL(latestDevVersion))
|
|
||||||
}
|
|
||||||
>
|
>
|
||||||
{LL.INSTALL(0)}
|
{isDev
|
||||||
|
? LL.INSTALL('v' + latestDevVersion)
|
||||||
|
: LL.INSTALL('v' + latestVersion)}
|
||||||
</Button>
|
</Button>
|
||||||
</Box>
|
) : (
|
||||||
|
<>
|
||||||
|
|
||||||
|
<Link target="_blank" href={getBinURL(isDev)} color="primary">
|
||||||
|
{LL.DOWNLOAD(1)} v
|
||||||
|
{isDev ? latestDevVersion : latestVersion}
|
||||||
|
</Link>
|
||||||
|
</>
|
||||||
)}
|
)}
|
||||||
|
</Typography>
|
||||||
|
|
||||||
|
{renderUploadDialog()}
|
||||||
</Box>
|
</Box>
|
||||||
|
|
||||||
<Typography sx={{ pt: 2, pb: 2 }} variant="h6" color="primary">
|
<Typography sx={{ pt: 2, pb: 2 }} variant="h6" color="primary">
|
||||||
{LL.UPLOAD()}
|
{LL.UPLOAD()}
|
||||||
</Typography>
|
</Typography>
|
||||||
|
|
||||||
<Box mb={2} color="warning.main">
|
<Box color="warning.main" sx={{ pb: 2 }}>
|
||||||
<Typography variant="body2">{LL.UPLOAD_TEXT()}</Typography>
|
<Typography variant="body2">{LL.UPLOAD_TEXT()}</Typography>
|
||||||
</Box>
|
</Box>
|
||||||
|
|
||||||
{restartNeeded ? (
|
<SingleUpload doRestart={doRestart} />
|
||||||
<MessageBox mt={2} level="warning" message={LL.RESTART_TEXT(0)}>
|
|
||||||
<Button
|
|
||||||
startIcon={<PowerSettingsNewIcon />}
|
|
||||||
variant="contained"
|
|
||||||
color="error"
|
|
||||||
onClick={restart}
|
|
||||||
>
|
|
||||||
{LL.RESTART()}
|
|
||||||
</Button>
|
|
||||||
</MessageBox>
|
|
||||||
) : (
|
|
||||||
<SingleUpload setRestartNeeded={setRestartNeeded} />
|
|
||||||
)}
|
|
||||||
</>
|
</>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<SectionContent>
|
<SectionContent>{restarting ? <RestartMonitor /> : content()}</SectionContent>
|
||||||
{restarting ? (
|
|
||||||
<RestartMonitor message="Please wait while the firmware is being uploaded and installed. This can take a few minutes. EMS-ESP will automatically restart when completed." />
|
|
||||||
) : (
|
|
||||||
content()
|
|
||||||
)}
|
|
||||||
</SectionContent>
|
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -5,12 +5,12 @@ import WarningIcon from '@mui/icons-material/Warning';
|
|||||||
import {
|
import {
|
||||||
Button,
|
Button,
|
||||||
Checkbox,
|
Checkbox,
|
||||||
Grid,
|
|
||||||
InputAdornment,
|
InputAdornment,
|
||||||
MenuItem,
|
MenuItem,
|
||||||
TextField,
|
TextField,
|
||||||
Typography
|
Typography
|
||||||
} from '@mui/material';
|
} from '@mui/material';
|
||||||
|
import Grid from '@mui/material/Grid2';
|
||||||
|
|
||||||
import * as MqttApi from 'api/mqtt';
|
import * as MqttApi from 'api/mqtt';
|
||||||
|
|
||||||
@@ -59,6 +59,10 @@ const MqttSettings = () => {
|
|||||||
updateDataValue
|
updateDataValue
|
||||||
);
|
);
|
||||||
|
|
||||||
|
const SecondsInputProps = {
|
||||||
|
endAdornment: <InputAdornment position="end">{LL.SECONDS()}</InputAdornment>
|
||||||
|
};
|
||||||
|
|
||||||
const content = () => {
|
const content = () => {
|
||||||
if (!data) {
|
if (!data) {
|
||||||
return <FormLoader onRetry={loadData} errorMessage={errorMessage} />;
|
return <FormLoader onRetry={loadData} errorMessage={errorMessage} />;
|
||||||
@@ -86,19 +90,12 @@ const MqttSettings = () => {
|
|||||||
}
|
}
|
||||||
label={LL.ENABLE_MQTT()}
|
label={LL.ENABLE_MQTT()}
|
||||||
/>
|
/>
|
||||||
<Grid
|
<Grid container spacing={2} rowSpacing={0}>
|
||||||
container
|
<Grid>
|
||||||
spacing={1}
|
|
||||||
direction="row"
|
|
||||||
justifyContent="flex-start"
|
|
||||||
alignItems="flex-start"
|
|
||||||
>
|
|
||||||
<Grid item xs={12} sm={6}>
|
|
||||||
<ValidatedTextField
|
<ValidatedTextField
|
||||||
fieldErrors={fieldErrors}
|
fieldErrors={fieldErrors}
|
||||||
name="host"
|
name="host"
|
||||||
label={LL.ADDRESS_OF(LL.BROKER())}
|
label={LL.ADDRESS_OF(LL.BROKER())}
|
||||||
fullWidth
|
|
||||||
multiline
|
multiline
|
||||||
variant="outlined"
|
variant="outlined"
|
||||||
value={data.host}
|
value={data.host}
|
||||||
@@ -106,12 +103,11 @@ const MqttSettings = () => {
|
|||||||
margin="normal"
|
margin="normal"
|
||||||
/>
|
/>
|
||||||
</Grid>
|
</Grid>
|
||||||
<Grid item xs={12} sm={6}>
|
<Grid>
|
||||||
<ValidatedTextField
|
<ValidatedTextField
|
||||||
fieldErrors={fieldErrors}
|
fieldErrors={fieldErrors}
|
||||||
name="port"
|
name="port"
|
||||||
label="Port"
|
label="Port"
|
||||||
fullWidth
|
|
||||||
variant="outlined"
|
variant="outlined"
|
||||||
value={numberValue(data.port)}
|
value={numberValue(data.port)}
|
||||||
type="number"
|
type="number"
|
||||||
@@ -119,62 +115,55 @@ const MqttSettings = () => {
|
|||||||
margin="normal"
|
margin="normal"
|
||||||
/>
|
/>
|
||||||
</Grid>
|
</Grid>
|
||||||
<Grid item xs={12} sm={6}>
|
<Grid>
|
||||||
<ValidatedTextField
|
<ValidatedTextField
|
||||||
fieldErrors={fieldErrors}
|
fieldErrors={fieldErrors}
|
||||||
name="base"
|
name="base"
|
||||||
label={LL.BASE_TOPIC()}
|
label={LL.BASE_TOPIC()}
|
||||||
fullWidth
|
|
||||||
variant="outlined"
|
variant="outlined"
|
||||||
value={data.base}
|
value={data.base}
|
||||||
onChange={updateFormValue}
|
onChange={updateFormValue}
|
||||||
margin="normal"
|
margin="normal"
|
||||||
/>
|
/>
|
||||||
</Grid>
|
</Grid>
|
||||||
<Grid item xs={12} sm={6}>
|
<Grid>
|
||||||
<TextField
|
<TextField
|
||||||
name="client_id"
|
name="client_id"
|
||||||
label={LL.ID_OF(LL.CLIENT()) + ' (' + LL.OPTIONAL() + ')'}
|
label={LL.ID_OF(LL.CLIENT()) + ' (' + LL.OPTIONAL() + ')'}
|
||||||
fullWidth
|
|
||||||
variant="outlined"
|
variant="outlined"
|
||||||
value={data.client_id}
|
value={data.client_id}
|
||||||
onChange={updateFormValue}
|
onChange={updateFormValue}
|
||||||
margin="normal"
|
margin="normal"
|
||||||
/>
|
/>
|
||||||
</Grid>
|
</Grid>
|
||||||
<Grid item xs={12} sm={6}>
|
<Grid>
|
||||||
<TextField
|
<TextField
|
||||||
name="username"
|
name="username"
|
||||||
label={LL.USERNAME(0)}
|
label={LL.USERNAME(0)}
|
||||||
fullWidth
|
|
||||||
variant="outlined"
|
variant="outlined"
|
||||||
value={data.username}
|
value={data.username}
|
||||||
onChange={updateFormValue}
|
onChange={updateFormValue}
|
||||||
margin="normal"
|
margin="normal"
|
||||||
/>
|
/>
|
||||||
</Grid>
|
</Grid>
|
||||||
<Grid item xs={12} sm={6}>
|
<Grid>
|
||||||
<ValidatedPasswordField
|
<ValidatedPasswordField
|
||||||
name="password"
|
name="password"
|
||||||
label={LL.PASSWORD()}
|
label={LL.PASSWORD()}
|
||||||
fullWidth
|
|
||||||
variant="outlined"
|
variant="outlined"
|
||||||
value={data.password}
|
value={data.password}
|
||||||
onChange={updateFormValue}
|
onChange={updateFormValue}
|
||||||
margin="normal"
|
margin="normal"
|
||||||
/>
|
/>
|
||||||
</Grid>
|
</Grid>
|
||||||
<Grid item xs={12} sm={6}>
|
<Grid>
|
||||||
<ValidatedTextField
|
<ValidatedTextField
|
||||||
fieldErrors={fieldErrors}
|
fieldErrors={fieldErrors}
|
||||||
name="keep_alive"
|
name="keep_alive"
|
||||||
label="Keep Alive"
|
label="Keep Alive"
|
||||||
InputProps={{
|
slotProps={{
|
||||||
endAdornment: (
|
input: SecondsInputProps
|
||||||
<InputAdornment position="end">{LL.SECONDS()}</InputAdornment>
|
|
||||||
)
|
|
||||||
}}
|
}}
|
||||||
fullWidth
|
|
||||||
variant="outlined"
|
variant="outlined"
|
||||||
value={numberValue(data.keep_alive)}
|
value={numberValue(data.keep_alive)}
|
||||||
type="number"
|
type="number"
|
||||||
@@ -182,12 +171,11 @@ const MqttSettings = () => {
|
|||||||
margin="normal"
|
margin="normal"
|
||||||
/>
|
/>
|
||||||
</Grid>
|
</Grid>
|
||||||
<Grid item xs={12} sm={6}>
|
<Grid>
|
||||||
<TextField
|
<TextField
|
||||||
name="mqtt_qos"
|
name="mqtt_qos"
|
||||||
label="QoS"
|
label="QoS"
|
||||||
value={data.mqtt_qos}
|
value={data.mqtt_qos}
|
||||||
fullWidth
|
|
||||||
variant="outlined"
|
variant="outlined"
|
||||||
onChange={updateFormValue}
|
onChange={updateFormValue}
|
||||||
margin="normal"
|
margin="normal"
|
||||||
@@ -215,14 +203,12 @@ const MqttSettings = () => {
|
|||||||
<ValidatedPasswordField
|
<ValidatedPasswordField
|
||||||
name="rootCA"
|
name="rootCA"
|
||||||
label={LL.CERT()}
|
label={LL.CERT()}
|
||||||
fullWidth
|
|
||||||
variant="outlined"
|
variant="outlined"
|
||||||
value={data.rootCA}
|
value={data.rootCA}
|
||||||
onChange={updateFormValue}
|
onChange={updateFormValue}
|
||||||
margin="normal"
|
margin="normal"
|
||||||
/>
|
/>
|
||||||
)}
|
)}
|
||||||
|
|
||||||
<BlockFormControlLabel
|
<BlockFormControlLabel
|
||||||
control={
|
control={
|
||||||
<Checkbox
|
<Checkbox
|
||||||
@@ -243,7 +229,6 @@ const MqttSettings = () => {
|
|||||||
}
|
}
|
||||||
label={LL.MQTT_RETAIN_FLAG()}
|
label={LL.MQTT_RETAIN_FLAG()}
|
||||||
/>
|
/>
|
||||||
|
|
||||||
<Typography sx={{ pt: 2 }} variant="h6" color="primary">
|
<Typography sx={{ pt: 2 }} variant="h6" color="primary">
|
||||||
{LL.FORMATTING()}
|
{LL.FORMATTING()}
|
||||||
</Typography>
|
</Typography>
|
||||||
@@ -251,7 +236,6 @@ const MqttSettings = () => {
|
|||||||
name="nested_format"
|
name="nested_format"
|
||||||
label={LL.MQTT_FORMAT()}
|
label={LL.MQTT_FORMAT()}
|
||||||
value={data.nested_format}
|
value={data.nested_format}
|
||||||
fullWidth
|
|
||||||
variant="outlined"
|
variant="outlined"
|
||||||
onChange={updateFormValue}
|
onChange={updateFormValue}
|
||||||
margin="normal"
|
margin="normal"
|
||||||
@@ -271,15 +255,8 @@ const MqttSettings = () => {
|
|||||||
label={LL.MQTT_RESPONSE()}
|
label={LL.MQTT_RESPONSE()}
|
||||||
/>
|
/>
|
||||||
{!data.ha_enabled && (
|
{!data.ha_enabled && (
|
||||||
<Grid
|
<Grid container spacing={2} rowSpacing={0}>
|
||||||
container
|
<Grid>
|
||||||
rowSpacing={-1}
|
|
||||||
spacing={1}
|
|
||||||
direction="row"
|
|
||||||
justifyContent="flex-start"
|
|
||||||
alignItems="flex-start"
|
|
||||||
>
|
|
||||||
<Grid item>
|
|
||||||
<BlockFormControlLabel
|
<BlockFormControlLabel
|
||||||
control={
|
control={
|
||||||
<Checkbox
|
<Checkbox
|
||||||
@@ -292,7 +269,7 @@ const MqttSettings = () => {
|
|||||||
/>
|
/>
|
||||||
</Grid>
|
</Grid>
|
||||||
{data.publish_single && (
|
{data.publish_single && (
|
||||||
<Grid item>
|
<Grid>
|
||||||
<BlockFormControlLabel
|
<BlockFormControlLabel
|
||||||
control={
|
control={
|
||||||
<Checkbox
|
<Checkbox
|
||||||
@@ -308,14 +285,8 @@ const MqttSettings = () => {
|
|||||||
</Grid>
|
</Grid>
|
||||||
)}
|
)}
|
||||||
{!data.publish_single && (
|
{!data.publish_single && (
|
||||||
<Grid
|
<Grid container spacing={2} rowSpacing={0}>
|
||||||
container
|
<Grid>
|
||||||
spacing={1}
|
|
||||||
direction="row"
|
|
||||||
justifyContent="flex-start"
|
|
||||||
alignItems="flex-start"
|
|
||||||
>
|
|
||||||
<Grid item>
|
|
||||||
<BlockFormControlLabel
|
<BlockFormControlLabel
|
||||||
control={
|
control={
|
||||||
<Checkbox
|
<Checkbox
|
||||||
@@ -328,20 +299,12 @@ const MqttSettings = () => {
|
|||||||
/>
|
/>
|
||||||
</Grid>
|
</Grid>
|
||||||
{data.ha_enabled && (
|
{data.ha_enabled && (
|
||||||
<Grid
|
<Grid container spacing={2} rowSpacing={0}>
|
||||||
container
|
<Grid>
|
||||||
sx={{ pl: 1 }}
|
|
||||||
spacing={1}
|
|
||||||
direction="row"
|
|
||||||
justifyContent="flex-start"
|
|
||||||
alignItems="flex-start"
|
|
||||||
>
|
|
||||||
<Grid item xs={12} sm={6} md={4}>
|
|
||||||
<TextField
|
<TextField
|
||||||
name="discovery_type"
|
name="discovery_type"
|
||||||
label={LL.MQTT_PUBLISH_TEXT_5()}
|
label={LL.MQTT_PUBLISH_TEXT_5()}
|
||||||
value={data.discovery_type}
|
value={data.discovery_type}
|
||||||
fullWidth
|
|
||||||
variant="outlined"
|
variant="outlined"
|
||||||
onChange={updateFormValue}
|
onChange={updateFormValue}
|
||||||
margin="normal"
|
margin="normal"
|
||||||
@@ -352,23 +315,21 @@ const MqttSettings = () => {
|
|||||||
<MenuItem value={2}>Domoticz (latest)</MenuItem>
|
<MenuItem value={2}>Domoticz (latest)</MenuItem>
|
||||||
</TextField>
|
</TextField>
|
||||||
</Grid>
|
</Grid>
|
||||||
<Grid item xs={12} sm={6} md={4}>
|
<Grid>
|
||||||
<TextField
|
<TextField
|
||||||
name="discovery_prefix"
|
name="discovery_prefix"
|
||||||
label={LL.MQTT_PUBLISH_TEXT_4()}
|
label={LL.MQTT_PUBLISH_TEXT_4()}
|
||||||
fullWidth
|
|
||||||
variant="outlined"
|
variant="outlined"
|
||||||
value={data.discovery_prefix}
|
value={data.discovery_prefix}
|
||||||
onChange={updateFormValue}
|
onChange={updateFormValue}
|
||||||
margin="normal"
|
margin="normal"
|
||||||
/>
|
/>
|
||||||
</Grid>
|
</Grid>
|
||||||
<Grid item xs={12} sm={6} md={4}>
|
<Grid>
|
||||||
<TextField
|
<TextField
|
||||||
name="entity_format"
|
name="entity_format"
|
||||||
label={LL.MQTT_ENTITY_FORMAT()}
|
label={LL.MQTT_ENTITY_FORMAT()}
|
||||||
value={data.entity_format}
|
value={data.entity_format}
|
||||||
fullWidth
|
|
||||||
variant="outlined"
|
variant="outlined"
|
||||||
onChange={updateFormValue}
|
onChange={updateFormValue}
|
||||||
margin="normal"
|
margin="normal"
|
||||||
@@ -392,24 +353,15 @@ const MqttSettings = () => {
|
|||||||
<Typography sx={{ pt: 2 }} variant="h6" color="primary">
|
<Typography sx={{ pt: 2 }} variant="h6" color="primary">
|
||||||
{LL.MQTT_PUBLISH_INTERVALS()} (0=auto)
|
{LL.MQTT_PUBLISH_INTERVALS()} (0=auto)
|
||||||
</Typography>
|
</Typography>
|
||||||
<Grid
|
<Grid container spacing={2} rowSpacing={0}>
|
||||||
container
|
<Grid>
|
||||||
spacing={1}
|
|
||||||
direction="row"
|
|
||||||
justifyContent="flex-start"
|
|
||||||
alignItems="flex-start"
|
|
||||||
>
|
|
||||||
<Grid item xs={12} sm={6} md={4}>
|
|
||||||
<ValidatedTextField
|
<ValidatedTextField
|
||||||
fieldErrors={fieldErrors}
|
fieldErrors={fieldErrors}
|
||||||
name="publish_time_heartbeat"
|
name="publish_time_heartbeat"
|
||||||
label="Heartbeat"
|
label="Heartbeat"
|
||||||
InputProps={{
|
slotProps={{
|
||||||
endAdornment: (
|
input: SecondsInputProps
|
||||||
<InputAdornment position="end">{LL.SECONDS()}</InputAdornment>
|
|
||||||
)
|
|
||||||
}}
|
}}
|
||||||
fullWidth
|
|
||||||
variant="outlined"
|
variant="outlined"
|
||||||
value={numberValue(data.publish_time_heartbeat)}
|
value={numberValue(data.publish_time_heartbeat)}
|
||||||
type="number"
|
type="number"
|
||||||
@@ -417,134 +369,112 @@ const MqttSettings = () => {
|
|||||||
margin="normal"
|
margin="normal"
|
||||||
/>
|
/>
|
||||||
</Grid>
|
</Grid>
|
||||||
<Grid item xs={12} sm={6} md={4}>
|
<Grid>
|
||||||
<TextField
|
<TextField
|
||||||
name="publish_time_boiler"
|
name="publish_time_boiler"
|
||||||
label={LL.MQTT_INT_BOILER()}
|
label={LL.MQTT_INT_BOILER()}
|
||||||
InputProps={{
|
|
||||||
endAdornment: (
|
|
||||||
<InputAdornment position="end">{LL.SECONDS()}</InputAdornment>
|
|
||||||
)
|
|
||||||
}}
|
|
||||||
fullWidth
|
|
||||||
variant="outlined"
|
variant="outlined"
|
||||||
value={numberValue(data.publish_time_boiler)}
|
value={numberValue(data.publish_time_boiler)}
|
||||||
type="number"
|
type="number"
|
||||||
onChange={updateFormValue}
|
onChange={updateFormValue}
|
||||||
margin="normal"
|
margin="normal"
|
||||||
|
slotProps={{
|
||||||
|
input: SecondsInputProps
|
||||||
|
}}
|
||||||
/>
|
/>
|
||||||
</Grid>
|
</Grid>
|
||||||
<Grid item xs={12} sm={6} md={4}>
|
<Grid>
|
||||||
<TextField
|
<TextField
|
||||||
name="publish_time_thermostat"
|
name="publish_time_thermostat"
|
||||||
label={LL.MQTT_INT_THERMOSTATS()}
|
label={LL.MQTT_INT_THERMOSTATS()}
|
||||||
InputProps={{
|
|
||||||
endAdornment: (
|
|
||||||
<InputAdornment position="end">{LL.SECONDS()}</InputAdornment>
|
|
||||||
)
|
|
||||||
}}
|
|
||||||
fullWidth
|
|
||||||
variant="outlined"
|
variant="outlined"
|
||||||
value={numberValue(data.publish_time_thermostat)}
|
value={numberValue(data.publish_time_thermostat)}
|
||||||
type="number"
|
type="number"
|
||||||
onChange={updateFormValue}
|
onChange={updateFormValue}
|
||||||
margin="normal"
|
margin="normal"
|
||||||
|
slotProps={{
|
||||||
|
input: SecondsInputProps
|
||||||
|
}}
|
||||||
/>
|
/>
|
||||||
</Grid>
|
</Grid>
|
||||||
<Grid item xs={12} sm={6} md={4}>
|
<Grid>
|
||||||
<TextField
|
<TextField
|
||||||
name="publish_time_solar"
|
name="publish_time_solar"
|
||||||
label={LL.MQTT_INT_SOLAR()}
|
label={LL.MQTT_INT_SOLAR()}
|
||||||
InputProps={{
|
|
||||||
endAdornment: (
|
|
||||||
<InputAdornment position="end">{LL.SECONDS()}</InputAdornment>
|
|
||||||
)
|
|
||||||
}}
|
|
||||||
fullWidth
|
|
||||||
variant="outlined"
|
variant="outlined"
|
||||||
value={numberValue(data.publish_time_solar)}
|
value={numberValue(data.publish_time_solar)}
|
||||||
type="number"
|
type="number"
|
||||||
onChange={updateFormValue}
|
onChange={updateFormValue}
|
||||||
margin="normal"
|
margin="normal"
|
||||||
|
slotProps={{
|
||||||
|
input: SecondsInputProps
|
||||||
|
}}
|
||||||
/>
|
/>
|
||||||
</Grid>
|
</Grid>
|
||||||
<Grid item xs={12} sm={6} md={4}>
|
<Grid>
|
||||||
<TextField
|
<TextField
|
||||||
name="publish_time_mixer"
|
name="publish_time_mixer"
|
||||||
label={LL.MQTT_INT_MIXER()}
|
label={LL.MQTT_INT_MIXER()}
|
||||||
InputProps={{
|
|
||||||
endAdornment: (
|
|
||||||
<InputAdornment position="end">{LL.SECONDS()}</InputAdornment>
|
|
||||||
)
|
|
||||||
}}
|
|
||||||
fullWidth
|
|
||||||
variant="outlined"
|
variant="outlined"
|
||||||
value={numberValue(data.publish_time_mixer)}
|
value={numberValue(data.publish_time_mixer)}
|
||||||
type="number"
|
type="number"
|
||||||
onChange={updateFormValue}
|
onChange={updateFormValue}
|
||||||
margin="normal"
|
margin="normal"
|
||||||
|
slotProps={{
|
||||||
|
input: SecondsInputProps
|
||||||
|
}}
|
||||||
/>
|
/>
|
||||||
</Grid>
|
</Grid>
|
||||||
<Grid item xs={12} sm={6} md={4}>
|
<Grid>
|
||||||
<TextField
|
<TextField
|
||||||
name="publish_time_water"
|
name="publish_time_water"
|
||||||
label={LL.MQTT_INT_WATER()}
|
label={LL.MQTT_INT_WATER()}
|
||||||
InputProps={{
|
|
||||||
endAdornment: (
|
|
||||||
<InputAdornment position="end">{LL.SECONDS()}</InputAdornment>
|
|
||||||
)
|
|
||||||
}}
|
|
||||||
fullWidth
|
|
||||||
variant="outlined"
|
variant="outlined"
|
||||||
value={numberValue(data.publish_time_water)}
|
value={numberValue(data.publish_time_water)}
|
||||||
type="number"
|
type="number"
|
||||||
onChange={updateFormValue}
|
onChange={updateFormValue}
|
||||||
margin="normal"
|
margin="normal"
|
||||||
|
slotProps={{
|
||||||
|
input: SecondsInputProps
|
||||||
|
}}
|
||||||
/>
|
/>
|
||||||
</Grid>
|
</Grid>
|
||||||
<Grid item xs={12} sm={6} md={4}>
|
<Grid>
|
||||||
<TextField
|
<TextField
|
||||||
name="publish_time_sensor"
|
name="publish_time_sensor"
|
||||||
label={LL.TEMP_SENSORS()}
|
label={LL.TEMP_SENSORS()}
|
||||||
InputProps={{
|
|
||||||
endAdornment: (
|
|
||||||
<InputAdornment position="end">{LL.SECONDS()}</InputAdornment>
|
|
||||||
)
|
|
||||||
}}
|
|
||||||
fullWidth
|
|
||||||
variant="outlined"
|
variant="outlined"
|
||||||
value={numberValue(data.publish_time_sensor)}
|
value={numberValue(data.publish_time_sensor)}
|
||||||
type="number"
|
type="number"
|
||||||
onChange={updateFormValue}
|
onChange={updateFormValue}
|
||||||
margin="normal"
|
margin="normal"
|
||||||
|
slotProps={{
|
||||||
|
input: SecondsInputProps
|
||||||
|
}}
|
||||||
/>
|
/>
|
||||||
</Grid>
|
</Grid>
|
||||||
<Grid item xs={12} sm={6} md={4}>
|
<Grid>
|
||||||
<TextField
|
<TextField
|
||||||
name="publish_time_other"
|
name="publish_time_other"
|
||||||
InputProps={{
|
|
||||||
endAdornment: (
|
|
||||||
<InputAdornment position="end">{LL.SECONDS()}</InputAdornment>
|
|
||||||
)
|
|
||||||
}}
|
|
||||||
label={LL.DEFAULT(0)}
|
label={LL.DEFAULT(0)}
|
||||||
fullWidth
|
|
||||||
variant="outlined"
|
variant="outlined"
|
||||||
value={numberValue(data.publish_time_other)}
|
value={numberValue(data.publish_time_other)}
|
||||||
type="number"
|
type="number"
|
||||||
onChange={updateFormValue}
|
onChange={updateFormValue}
|
||||||
margin="normal"
|
margin="normal"
|
||||||
|
slotProps={{
|
||||||
|
input: SecondsInputProps
|
||||||
|
}}
|
||||||
/>
|
/>
|
||||||
</Grid>
|
</Grid>
|
||||||
</Grid>
|
</Grid>
|
||||||
|
|
||||||
{dirtyFlags && dirtyFlags.length !== 0 && (
|
{dirtyFlags && dirtyFlags.length !== 0 && (
|
||||||
<ButtonRow>
|
<ButtonRow>
|
||||||
<Button
|
<Button
|
||||||
startIcon={<CancelIcon />}
|
startIcon={<CancelIcon />}
|
||||||
disabled={saving}
|
disabled={saving}
|
||||||
variant="outlined"
|
variant="outlined"
|
||||||
color="primary"
|
color="secondary"
|
||||||
type="submit"
|
type="submit"
|
||||||
onClick={loadData}
|
onClick={loadData}
|
||||||
>
|
>
|
||||||
|
|||||||
@@ -121,7 +121,7 @@ const NTPSettings = () => {
|
|||||||
startIcon={<CancelIcon />}
|
startIcon={<CancelIcon />}
|
||||||
disabled={saving}
|
disabled={saving}
|
||||||
variant="outlined"
|
variant="outlined"
|
||||||
color="primary"
|
color="secondary"
|
||||||
type="submit"
|
type="submit"
|
||||||
onClick={loadData}
|
onClick={loadData}
|
||||||
>
|
>
|
||||||
|
|||||||
@@ -17,14 +17,14 @@ import {
|
|||||||
DialogActions,
|
DialogActions,
|
||||||
DialogContent,
|
DialogContent,
|
||||||
DialogTitle,
|
DialogTitle,
|
||||||
Divider,
|
|
||||||
List
|
List
|
||||||
} from '@mui/material';
|
} from '@mui/material';
|
||||||
|
|
||||||
import * as SystemApi from 'api/system';
|
import { API } from 'api/app';
|
||||||
|
|
||||||
import { dialogStyle } from 'CustomTheme';
|
import { dialogStyle } from 'CustomTheme';
|
||||||
import { useRequest } from 'alova/client';
|
import { useRequest } from 'alova/client';
|
||||||
|
import type { APIcall } from 'app/main/types';
|
||||||
import { SectionContent, useLayoutTitle } from 'components';
|
import { SectionContent, useLayoutTitle } from 'components';
|
||||||
import ListMenuItem from 'components/layout/ListMenuItem';
|
import ListMenuItem from 'components/layout/ListMenuItem';
|
||||||
import { useI18nContext } from 'i18n/i18n-react';
|
import { useI18nContext } from 'i18n/i18n-react';
|
||||||
@@ -35,13 +35,14 @@ const Settings = () => {
|
|||||||
|
|
||||||
const [confirmFactoryReset, setConfirmFactoryReset] = useState<boolean>(false);
|
const [confirmFactoryReset, setConfirmFactoryReset] = useState<boolean>(false);
|
||||||
|
|
||||||
const { send: factoryResetCommand } = useRequest(SystemApi.factoryReset(), {
|
const { send: sendAPI } = useRequest((data: APIcall) => API(data), {
|
||||||
immediate: false
|
immediate: false
|
||||||
});
|
});
|
||||||
|
|
||||||
const factoryReset = async () => {
|
const doFormat = async () => {
|
||||||
await factoryResetCommand();
|
await sendAPI({ device: 'system', cmd: 'format', id: 0 }).then(() => {
|
||||||
setConfirmFactoryReset(false);
|
setConfirmFactoryReset(false);
|
||||||
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
const renderFactoryResetDialog = () => (
|
const renderFactoryResetDialog = () => (
|
||||||
@@ -64,7 +65,7 @@ const Settings = () => {
|
|||||||
<Button
|
<Button
|
||||||
startIcon={<SettingsBackupRestoreIcon />}
|
startIcon={<SettingsBackupRestoreIcon />}
|
||||||
variant="outlined"
|
variant="outlined"
|
||||||
onClick={factoryReset}
|
onClick={doFormat}
|
||||||
color="error"
|
color="error"
|
||||||
>
|
>
|
||||||
{LL.FACTORY_RESET()}
|
{LL.FACTORY_RESET()}
|
||||||
@@ -131,8 +132,6 @@ const Settings = () => {
|
|||||||
to="modules"
|
to="modules"
|
||||||
/>
|
/>
|
||||||
|
|
||||||
<Divider />
|
|
||||||
|
|
||||||
<ListMenuItem
|
<ListMenuItem
|
||||||
icon={ImportExportIcon}
|
icon={ImportExportIcon}
|
||||||
bgcolor="#5d89f7"
|
bgcolor="#5d89f7"
|
||||||
|
|||||||
@@ -15,7 +15,6 @@ import {
|
|||||||
List,
|
List,
|
||||||
ListItem,
|
ListItem,
|
||||||
ListItemAvatar,
|
ListItemAvatar,
|
||||||
ListItemSecondaryAction,
|
|
||||||
ListItemText,
|
ListItemText,
|
||||||
MenuItem,
|
MenuItem,
|
||||||
TextField,
|
TextField,
|
||||||
@@ -23,9 +22,10 @@ import {
|
|||||||
} from '@mui/material';
|
} from '@mui/material';
|
||||||
|
|
||||||
import * as NetworkApi from 'api/network';
|
import * as NetworkApi from 'api/network';
|
||||||
import * as SystemApi from 'api/system';
|
import { API } from 'api/app';
|
||||||
|
|
||||||
import { updateState, useRequest } from 'alova/client';
|
import { updateState, useRequest } from 'alova/client';
|
||||||
|
import type { APIcall } from 'app/main/types';
|
||||||
import type { ValidateFieldsError } from 'async-validator';
|
import type { ValidateFieldsError } from 'async-validator';
|
||||||
import {
|
import {
|
||||||
BlockFormControlLabel,
|
BlockFormControlLabel,
|
||||||
@@ -72,7 +72,7 @@ const NetworkSettings = () => {
|
|||||||
update: NetworkApi.updateNetworkSettings
|
update: NetworkApi.updateNetworkSettings
|
||||||
});
|
});
|
||||||
|
|
||||||
const { send: restartCommand } = useRequest(SystemApi.restart(), {
|
const { send: sendAPI } = useRequest((data: APIcall) => API(data), {
|
||||||
immediate: false
|
immediate: false
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -132,11 +132,13 @@ const NetworkSettings = () => {
|
|||||||
await loadData();
|
await loadData();
|
||||||
};
|
};
|
||||||
|
|
||||||
const restart = async () => {
|
const doRestart = async () => {
|
||||||
await restartCommand().catch((error: Error) => {
|
|
||||||
toast.error(error.message);
|
|
||||||
});
|
|
||||||
setRestarting(true);
|
setRestarting(true);
|
||||||
|
await sendAPI({ device: 'system', cmd: 'restart', id: 0 }).catch(
|
||||||
|
(error: Error) => {
|
||||||
|
toast.error(error.message);
|
||||||
|
}
|
||||||
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
return (
|
return (
|
||||||
@@ -163,11 +165,9 @@ const NetworkSettings = () => {
|
|||||||
selectedNetwork.bssid
|
selectedNetwork.bssid
|
||||||
}
|
}
|
||||||
/>
|
/>
|
||||||
<ListItemSecondaryAction>
|
|
||||||
<IconButton onClick={setCancel}>
|
<IconButton onClick={setCancel}>
|
||||||
<DeleteIcon />
|
<DeleteIcon />
|
||||||
</IconButton>
|
</IconButton>
|
||||||
</ListItemSecondaryAction>
|
|
||||||
</ListItem>
|
</ListItem>
|
||||||
</List>
|
</List>
|
||||||
) : (
|
) : (
|
||||||
@@ -361,7 +361,7 @@ const NetworkSettings = () => {
|
|||||||
startIcon={<PowerSettingsNewIcon />}
|
startIcon={<PowerSettingsNewIcon />}
|
||||||
variant="contained"
|
variant="contained"
|
||||||
color="error"
|
color="error"
|
||||||
onClick={restart}
|
onClick={doRestart}
|
||||||
>
|
>
|
||||||
{LL.RESTART()}
|
{LL.RESTART()}
|
||||||
</Button>
|
</Button>
|
||||||
@@ -375,7 +375,7 @@ const NetworkSettings = () => {
|
|||||||
startIcon={<CancelIcon />}
|
startIcon={<CancelIcon />}
|
||||||
disabled={saving}
|
disabled={saving}
|
||||||
variant="outlined"
|
variant="outlined"
|
||||||
color="primary"
|
color="secondary"
|
||||||
type="submit"
|
type="submit"
|
||||||
onClick={loadData}
|
onClick={loadData}
|
||||||
>
|
>
|
||||||
|
|||||||
@@ -227,7 +227,7 @@ const ManageUsers = () => {
|
|||||||
startIcon={<CancelIcon />}
|
startIcon={<CancelIcon />}
|
||||||
disabled={saving}
|
disabled={saving}
|
||||||
variant="outlined"
|
variant="outlined"
|
||||||
color="primary"
|
color="secondary"
|
||||||
type="submit"
|
type="submit"
|
||||||
onClick={onCancelSubmit}
|
onClick={onCancelSubmit}
|
||||||
>
|
>
|
||||||
|
|||||||
@@ -85,7 +85,7 @@ const SecuritySettings = () => {
|
|||||||
startIcon={<CancelIcon />}
|
startIcon={<CancelIcon />}
|
||||||
disabled={saving}
|
disabled={saving}
|
||||||
variant="outlined"
|
variant="outlined"
|
||||||
color="primary"
|
color="secondary"
|
||||||
type="submit"
|
type="submit"
|
||||||
onClick={loadData}
|
onClick={loadData}
|
||||||
>
|
>
|
||||||
|
|||||||
@@ -47,16 +47,18 @@ const HardwareStatus = () => {
|
|||||||
<List>
|
<List>
|
||||||
<ListItem>
|
<ListItem>
|
||||||
<ListItemAvatar>
|
<ListItemAvatar>
|
||||||
<Avatar sx={{ bgcolor: '#003289', color: 'white' }}>
|
|
||||||
{data.model ? (
|
{data.model ? (
|
||||||
|
<Avatar sx={{ bgcolor: '#003289', color: 'white' }}>
|
||||||
<img
|
<img
|
||||||
src={BBQKeesIcon}
|
src={BBQKeesIcon}
|
||||||
style={{ width: 16, verticalAlign: 'middle' }}
|
style={{ width: 16, verticalAlign: 'middle' }}
|
||||||
/>
|
/>
|
||||||
) : (
|
|
||||||
<TapAndPlayIcon />
|
|
||||||
)}
|
|
||||||
</Avatar>
|
</Avatar>
|
||||||
|
) : (
|
||||||
|
<Avatar sx={{ bgcolor: '#5f9a5f', color: 'white' }}>
|
||||||
|
<TapAndPlayIcon />
|
||||||
|
</Avatar>
|
||||||
|
)}
|
||||||
</ListItemAvatar>
|
</ListItemAvatar>
|
||||||
<ListItemText
|
<ListItemText
|
||||||
primary={LL.HARDWARE() + ' ' + LL.DEVICE()}
|
primary={LL.HARDWARE() + ' ' + LL.DEVICE()}
|
||||||
|
|||||||
@@ -134,8 +134,10 @@ const NTPStatus = () => {
|
|||||||
onChange={updateLocalTime}
|
onChange={updateLocalTime}
|
||||||
disabled={processing}
|
disabled={processing}
|
||||||
fullWidth
|
fullWidth
|
||||||
InputLabelProps={{
|
slotProps={{
|
||||||
|
inputLabel: {
|
||||||
shrink: true
|
shrink: true
|
||||||
|
}
|
||||||
}}
|
}}
|
||||||
/>
|
/>
|
||||||
</DialogContent>
|
</DialogContent>
|
||||||
|
|||||||
@@ -1,50 +1,79 @@
|
|||||||
import { type FC, useEffect, useRef, useState } from 'react';
|
import { useState } from 'react';
|
||||||
|
|
||||||
import * as SystemApi from 'api/system';
|
import {
|
||||||
|
Box,
|
||||||
|
CircularProgress,
|
||||||
|
Dialog,
|
||||||
|
DialogContent,
|
||||||
|
Typography
|
||||||
|
} from '@mui/material';
|
||||||
|
|
||||||
import { useRequest } from 'alova/client';
|
import { readHardwareStatus } from 'api/system';
|
||||||
import { FormLoader } from 'components';
|
|
||||||
|
import { dialogStyle } from 'CustomTheme';
|
||||||
|
import { useAutoRequest } from 'alova/client';
|
||||||
|
import MessageBox from 'components/MessageBox';
|
||||||
import { useI18nContext } from 'i18n/i18n-react';
|
import { useI18nContext } from 'i18n/i18n-react';
|
||||||
|
|
||||||
const RESTART_TIMEOUT = 2 * 60 * 1000; // 2 minutes
|
const RestartMonitor = () => {
|
||||||
const POLL_INTERVAL = 1000; // every 1 second
|
const [errorMessage, setErrorMessage] = useState<string>();
|
||||||
|
|
||||||
export interface RestartMonitorProps {
|
|
||||||
message?: string;
|
|
||||||
}
|
|
||||||
|
|
||||||
const RestartMonitor: FC<RestartMonitorProps> = ({ message }) => {
|
|
||||||
const [failed, setFailed] = useState<boolean>(false);
|
|
||||||
const [timeoutId, setTimeoutId] = useState<NodeJS.Timeout>();
|
|
||||||
const { LL } = useI18nContext();
|
const { LL } = useI18nContext();
|
||||||
const timeoutAt = useRef(new Date().getTime() + RESTART_TIMEOUT);
|
|
||||||
|
|
||||||
const { send } = useRequest(SystemApi.readSystemStatus);
|
let count = 0;
|
||||||
|
|
||||||
const poll = useRef(async () => {
|
const { data } = useAutoRequest(readHardwareStatus, {
|
||||||
try {
|
pollingTime: 1000,
|
||||||
await send();
|
force: true,
|
||||||
|
initialData: { status: 'Getting ready...' },
|
||||||
|
async middleware(_, next) {
|
||||||
|
if (count++ >= 1) {
|
||||||
|
// skip first request (1 seconds) to allow AsyncWS to send its response
|
||||||
|
await next();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.onSuccess((event) => {
|
||||||
|
if (event.data.status === 'ready' || event.data.status === undefined) {
|
||||||
document.location.href = '/';
|
document.location.href = '/';
|
||||||
} catch {
|
|
||||||
if (new Date().getTime() < timeoutAt.current) {
|
|
||||||
setTimeoutId(setTimeout(poll.current, POLL_INTERVAL));
|
|
||||||
} else {
|
|
||||||
setFailed(true);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
})
|
||||||
|
.onError((error, _method) => {
|
||||||
|
setErrorMessage(error.message);
|
||||||
});
|
});
|
||||||
|
|
||||||
useEffect(() => {
|
|
||||||
void poll.current();
|
|
||||||
}, []);
|
|
||||||
|
|
||||||
useEffect(() => () => timeoutId && clearTimeout(timeoutId), [timeoutId]);
|
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<FormLoader
|
<Dialog fullWidth={true} sx={dialogStyle} open={true}>
|
||||||
message={message ? message : LL.APPLICATION_RESTARTING() + '...'}
|
<DialogContent dividers>
|
||||||
errorMessage={failed ? 'Timed out' : undefined}
|
<Box m={2} py={2} display="flex" alignItems="center" flexDirection="column">
|
||||||
/>
|
<Typography
|
||||||
|
color="secondary"
|
||||||
|
variant="h6"
|
||||||
|
fontWeight={400}
|
||||||
|
textAlign="center"
|
||||||
|
>
|
||||||
|
{data?.status === 'uploading'
|
||||||
|
? LL.WAIT_FIRMWARE()
|
||||||
|
: data?.status === 'restarting'
|
||||||
|
? LL.APPLICATION_RESTARTING()
|
||||||
|
: data?.status === 'ready'
|
||||||
|
? LL.RESTARTING_PRE()
|
||||||
|
: LL.RESTARTING_POST()}
|
||||||
|
</Typography>
|
||||||
|
<Typography mt={2} variant="h6" fontWeight={400} textAlign="center">
|
||||||
|
{LL.PLEASE_WAIT()}…
|
||||||
|
</Typography>
|
||||||
|
|
||||||
|
{errorMessage ? (
|
||||||
|
<MessageBox my={2} level="error" message={errorMessage} />
|
||||||
|
) : (
|
||||||
|
<Box py={2}>
|
||||||
|
<CircularProgress size={48} />
|
||||||
|
</Box>
|
||||||
|
)}
|
||||||
|
</Box>
|
||||||
|
</DialogContent>
|
||||||
|
</Dialog>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -30,10 +30,11 @@ import {
|
|||||||
} from '@mui/material';
|
} from '@mui/material';
|
||||||
|
|
||||||
import * as SystemApi from 'api/system';
|
import * as SystemApi from 'api/system';
|
||||||
|
import { API } from 'api/app';
|
||||||
|
|
||||||
import { dialogStyle } from 'CustomTheme';
|
import { dialogStyle } from 'CustomTheme';
|
||||||
import { useAutoRequest, useRequest } from 'alova/client';
|
import { useAutoRequest, useRequest } from 'alova/client';
|
||||||
import { busConnectionStatus } from 'app/main/types';
|
import { type APIcall, busConnectionStatus } from 'app/main/types';
|
||||||
import { FormLoader, SectionContent, useLayoutTitle } from 'components';
|
import { FormLoader, SectionContent, useLayoutTitle } from 'components';
|
||||||
import ListMenuItem from 'components/layout/ListMenuItem';
|
import ListMenuItem from 'components/layout/ListMenuItem';
|
||||||
import { AuthenticatedContext } from 'contexts/authentication';
|
import { AuthenticatedContext } from 'contexts/authentication';
|
||||||
@@ -52,31 +53,24 @@ const SystemStatus = () => {
|
|||||||
const { me } = useContext(AuthenticatedContext);
|
const { me } = useContext(AuthenticatedContext);
|
||||||
|
|
||||||
const [confirmRestart, setConfirmRestart] = useState<boolean>(false);
|
const [confirmRestart, setConfirmRestart] = useState<boolean>(false);
|
||||||
const [processing, setProcessing] = useState<boolean>(false);
|
|
||||||
const [restarting, setRestarting] = useState<boolean>();
|
const [restarting, setRestarting] = useState<boolean>();
|
||||||
|
|
||||||
const { send: restartCommand } = useRequest(SystemApi.restart(), {
|
const { send: sendAPI } = useRequest((data: APIcall) => API(data), {
|
||||||
immediate: false
|
immediate: false
|
||||||
});
|
});
|
||||||
|
|
||||||
const { send: partitionCommand } = useRequest(SystemApi.partition(), {
|
|
||||||
immediate: false
|
|
||||||
});
|
|
||||||
|
|
||||||
const { send: factoryPartitionCommand } = useRequest(
|
|
||||||
SystemApi.factoryPartition(),
|
|
||||||
{
|
|
||||||
immediate: false
|
|
||||||
}
|
|
||||||
);
|
|
||||||
|
|
||||||
const {
|
const {
|
||||||
data: data,
|
data: data,
|
||||||
send: loadData,
|
send: loadData,
|
||||||
error
|
error
|
||||||
} = useAutoRequest(SystemApi.readSystemStatus, {
|
} = useAutoRequest(SystemApi.readSystemStatus, {
|
||||||
initialData: [],
|
initialData: [],
|
||||||
pollingTime: 5000
|
pollingTime: 5000,
|
||||||
|
async middleware(_, next) {
|
||||||
|
if (!restarting) {
|
||||||
|
await next();
|
||||||
|
}
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
const theme = useTheme();
|
const theme = useTheme();
|
||||||
@@ -207,49 +201,14 @@ const SystemStatus = () => {
|
|||||||
const activeHighlight = (value: boolean) =>
|
const activeHighlight = (value: boolean) =>
|
||||||
value ? theme.palette.success.main : theme.palette.info.main;
|
value ? theme.palette.success.main : theme.palette.info.main;
|
||||||
|
|
||||||
const restart = async () => {
|
const doRestart = async () => {
|
||||||
setProcessing(true);
|
|
||||||
await restartCommand()
|
|
||||||
.then(() => {
|
|
||||||
setRestarting(true);
|
|
||||||
})
|
|
||||||
.catch((error: Error) => {
|
|
||||||
toast.error(error.message);
|
|
||||||
})
|
|
||||||
.finally(() => {
|
|
||||||
setConfirmRestart(false);
|
setConfirmRestart(false);
|
||||||
setProcessing(false);
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
const partition = async () => {
|
|
||||||
setProcessing(true);
|
|
||||||
await partitionCommand()
|
|
||||||
.then(() => {
|
|
||||||
setRestarting(true);
|
setRestarting(true);
|
||||||
})
|
await sendAPI({ device: 'system', cmd: 'restart', id: 0 }).catch(
|
||||||
.catch((error: Error) => {
|
(error: Error) => {
|
||||||
toast.error(error.message);
|
toast.error(error.message);
|
||||||
})
|
}
|
||||||
.finally(() => {
|
);
|
||||||
setConfirmRestart(false);
|
|
||||||
setProcessing(false);
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
const factoryPartition = async () => {
|
|
||||||
setProcessing(true);
|
|
||||||
await factoryPartitionCommand()
|
|
||||||
.then(() => {
|
|
||||||
setRestarting(true);
|
|
||||||
})
|
|
||||||
.catch((error: Error) => {
|
|
||||||
toast.error(error.message);
|
|
||||||
})
|
|
||||||
.finally(() => {
|
|
||||||
setConfirmRestart(false);
|
|
||||||
setProcessing(false);
|
|
||||||
});
|
|
||||||
};
|
};
|
||||||
|
|
||||||
const renderRestartDialog = () => (
|
const renderRestartDialog = () => (
|
||||||
@@ -265,38 +224,14 @@ const SystemStatus = () => {
|
|||||||
startIcon={<CancelIcon />}
|
startIcon={<CancelIcon />}
|
||||||
variant="outlined"
|
variant="outlined"
|
||||||
onClick={() => setConfirmRestart(false)}
|
onClick={() => setConfirmRestart(false)}
|
||||||
disabled={processing}
|
|
||||||
color="secondary"
|
color="secondary"
|
||||||
>
|
>
|
||||||
{LL.CANCEL()}
|
{LL.CANCEL()}
|
||||||
</Button>
|
</Button>
|
||||||
{data.has_loader && (
|
|
||||||
<Button
|
<Button
|
||||||
startIcon={<PowerSettingsNewIcon />}
|
startIcon={<PowerSettingsNewIcon />}
|
||||||
variant="outlined"
|
variant="outlined"
|
||||||
onClick={factoryPartition}
|
onClick={doRestart}
|
||||||
disabled={processing}
|
|
||||||
color="warning"
|
|
||||||
>
|
|
||||||
EMS-ESP Boot
|
|
||||||
</Button>
|
|
||||||
)}
|
|
||||||
{data.has_partition && (
|
|
||||||
<Button
|
|
||||||
startIcon={<PowerSettingsNewIcon />}
|
|
||||||
variant="outlined"
|
|
||||||
onClick={partition}
|
|
||||||
disabled={processing}
|
|
||||||
color="warning"
|
|
||||||
>
|
|
||||||
Partition
|
|
||||||
</Button>
|
|
||||||
)}
|
|
||||||
<Button
|
|
||||||
startIcon={<PowerSettingsNewIcon />}
|
|
||||||
variant="outlined"
|
|
||||||
onClick={restart}
|
|
||||||
disabled={processing}
|
|
||||||
color="error"
|
color="error"
|
||||||
>
|
>
|
||||||
{LL.RESTART()}
|
{LL.RESTART()}
|
||||||
|
|||||||
@@ -3,15 +3,8 @@ import { toast } from 'react-toastify';
|
|||||||
|
|
||||||
import DownloadIcon from '@mui/icons-material/GetApp';
|
import DownloadIcon from '@mui/icons-material/GetApp';
|
||||||
import WarningIcon from '@mui/icons-material/Warning';
|
import WarningIcon from '@mui/icons-material/Warning';
|
||||||
import {
|
import { Box, Button, Checkbox, MenuItem, TextField, styled } from '@mui/material';
|
||||||
Box,
|
import Grid from '@mui/material/Grid2';
|
||||||
Button,
|
|
||||||
Checkbox,
|
|
||||||
Grid,
|
|
||||||
MenuItem,
|
|
||||||
TextField,
|
|
||||||
styled
|
|
||||||
} from '@mui/material';
|
|
||||||
|
|
||||||
import * as SystemApi from 'api/system';
|
import * as SystemApi from 'api/system';
|
||||||
import { fetchLogES } from 'api/system';
|
import { fetchLogES } from 'api/system';
|
||||||
@@ -102,8 +95,8 @@ const SystemLog = () => {
|
|||||||
|
|
||||||
// eslint-disable-next-line @typescript-eslint/unbound-method
|
// eslint-disable-next-line @typescript-eslint/unbound-method
|
||||||
const { onMessage, onError } = useSSE(fetchLogES, {
|
const { onMessage, onError } = useSSE(fetchLogES, {
|
||||||
immediate: true,
|
|
||||||
// withCredentials: true,
|
// withCredentials: true,
|
||||||
|
immediate: true,
|
||||||
interceptByGlobalResponded: false
|
interceptByGlobalResponded: false
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -177,14 +170,8 @@ const SystemLog = () => {
|
|||||||
|
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
<Grid
|
<Grid container spacing={2} alignItems="center">
|
||||||
container
|
<Grid size={2}>
|
||||||
spacing={3}
|
|
||||||
direction="row"
|
|
||||||
justifyContent="flex-start"
|
|
||||||
alignItems="center"
|
|
||||||
>
|
|
||||||
<Grid item xs={4}>
|
|
||||||
<TextField
|
<TextField
|
||||||
name="level"
|
name="level"
|
||||||
label={LL.LOG_LEVEL()}
|
label={LL.LOG_LEVEL()}
|
||||||
@@ -203,7 +190,7 @@ const SystemLog = () => {
|
|||||||
<MenuItem value={9}>ALL</MenuItem>
|
<MenuItem value={9}>ALL</MenuItem>
|
||||||
</TextField>
|
</TextField>
|
||||||
</Grid>
|
</Grid>
|
||||||
<Grid item xs={4}>
|
<Grid size={2}>
|
||||||
<TextField
|
<TextField
|
||||||
name="max_messages"
|
name="max_messages"
|
||||||
label={LL.BUFFER_SIZE()}
|
label={LL.BUFFER_SIZE()}
|
||||||
@@ -220,7 +207,7 @@ const SystemLog = () => {
|
|||||||
<MenuItem value={100}>100</MenuItem>
|
<MenuItem value={100}>100</MenuItem>
|
||||||
</TextField>
|
</TextField>
|
||||||
</Grid>
|
</Grid>
|
||||||
<Grid item xs={2}>
|
<Grid>
|
||||||
<BlockFormControlLabel
|
<BlockFormControlLabel
|
||||||
control={
|
control={
|
||||||
<Checkbox
|
<Checkbox
|
||||||
@@ -232,13 +219,6 @@ const SystemLog = () => {
|
|||||||
label={LL.COMPACT()}
|
label={LL.COMPACT()}
|
||||||
/>
|
/>
|
||||||
</Grid>
|
</Grid>
|
||||||
<Box
|
|
||||||
sx={{
|
|
||||||
'& button, & a, & .MuiCard-root': {
|
|
||||||
ml: 3
|
|
||||||
}
|
|
||||||
}}
|
|
||||||
>
|
|
||||||
<Button
|
<Button
|
||||||
startIcon={<DownloadIcon />}
|
startIcon={<DownloadIcon />}
|
||||||
variant="outlined"
|
variant="outlined"
|
||||||
@@ -257,7 +237,6 @@ const SystemLog = () => {
|
|||||||
{LL.APPLY_CHANGES(dirtyFlags.length)}
|
{LL.APPLY_CHANGES(dirtyFlags.length)}
|
||||||
</Button>
|
</Button>
|
||||||
)}
|
)}
|
||||||
</Box>
|
|
||||||
</Grid>
|
</Grid>
|
||||||
<Box
|
<Box
|
||||||
sx={{
|
sx={{
|
||||||
|
|||||||
@@ -10,18 +10,15 @@ import type { ValidatedTextFieldProps } from './ValidatedTextField';
|
|||||||
|
|
||||||
type ValidatedPasswordFieldProps = Omit<ValidatedTextFieldProps, 'type'>;
|
type ValidatedPasswordFieldProps = Omit<ValidatedTextFieldProps, 'type'>;
|
||||||
|
|
||||||
const ValidatedPasswordField: FC<ValidatedPasswordFieldProps> = ({
|
const ValidatedPasswordField: FC<ValidatedPasswordFieldProps> = ({ ...props }) => {
|
||||||
InputProps,
|
|
||||||
...props
|
|
||||||
}) => {
|
|
||||||
const [showPassword, setShowPassword] = useState<boolean>(false);
|
const [showPassword, setShowPassword] = useState<boolean>(false);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<ValidatedTextField
|
<ValidatedTextField
|
||||||
{...props}
|
{...props}
|
||||||
type={showPassword ? 'text' : 'password'}
|
type={showPassword ? 'text' : 'password'}
|
||||||
InputProps={{
|
slotProps={{
|
||||||
...InputProps,
|
input: {
|
||||||
endAdornment: (
|
endAdornment: (
|
||||||
<InputAdornment position="end">
|
<InputAdornment position="end">
|
||||||
<IconButton onClick={() => setShowPassword(!showPassword)} edge="end">
|
<IconButton onClick={() => setShowPassword(!showPassword)} edge="end">
|
||||||
@@ -29,6 +26,7 @@ const ValidatedPasswordField: FC<ValidatedPasswordFieldProps> = ({
|
|||||||
</IconButton>
|
</IconButton>
|
||||||
</InputAdornment>
|
</InputAdornment>
|
||||||
)
|
)
|
||||||
|
}
|
||||||
}}
|
}}
|
||||||
/>
|
/>
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -138,23 +138,22 @@ const LayoutMenu = () => {
|
|||||||
disabled={!me.admin}
|
disabled={!me.admin}
|
||||||
to="/settings"
|
to="/settings"
|
||||||
/>
|
/>
|
||||||
<LayoutMenuItem icon={LiveHelpIcon} label={LL.HELP_OF('')} to={`/help`} />
|
<LayoutMenuItem icon={LiveHelpIcon} label={LL.HELP()} to={`/help`} />
|
||||||
</List>
|
</List>
|
||||||
<Divider />
|
<Divider />
|
||||||
<List>
|
<List>
|
||||||
<ListItem disablePadding onClick={handleClick}>
|
<ListItem disablePadding onClick={handleClick}>
|
||||||
<ListItemButton>
|
<ListItemButton>
|
||||||
<ListItemIcon>
|
<ListItemIcon sx={{ color: '#9e9e9e' }}>
|
||||||
<AccountCircleIcon />
|
<AccountCircleIcon />
|
||||||
</ListItemIcon>
|
</ListItemIcon>
|
||||||
<ListItemText>{me.username}</ListItemText>
|
<ListItemText sx={{ color: '#2196f3' }}>{me.username}</ListItemText>
|
||||||
</ListItemButton>
|
</ListItemButton>
|
||||||
</ListItem>
|
</ListItem>
|
||||||
</List>
|
</List>
|
||||||
|
|
||||||
<Popover
|
<Popover
|
||||||
id={id}
|
id={id}
|
||||||
// sx={{ mb: 10 }}
|
|
||||||
open={open}
|
open={open}
|
||||||
anchorEl={anchorEl}
|
anchorEl={anchorEl}
|
||||||
onClose={handleClose}
|
onClose={handleClose}
|
||||||
@@ -186,19 +185,17 @@ const LayoutMenu = () => {
|
|||||||
</Button>
|
</Button>
|
||||||
<List>
|
<List>
|
||||||
<ListItem disablePadding>
|
<ListItem disablePadding>
|
||||||
<Avatar sx={{ bgcolor: '#b1395f', color: 'white' }}>
|
<Avatar sx={{ bgcolor: '#9e9e9e', color: 'white' }}>
|
||||||
<PersonIcon />
|
<PersonIcon />
|
||||||
</Avatar>
|
</Avatar>
|
||||||
<ListItemText
|
<ListItemText
|
||||||
sx={{ pl: 2 }}
|
sx={{ pl: 2, color: '#2196f3' }}
|
||||||
primary={me.username}
|
primary={me.username}
|
||||||
secondary={'(' + (me.admin ? LL.ADMINISTRATOR() : LL.GUEST()) + ')'}
|
secondary={'(' + (me.admin ? LL.ADMINISTRATOR() : LL.GUEST()) + ')'}
|
||||||
/>
|
/>
|
||||||
</ListItem>
|
</ListItem>
|
||||||
</List>
|
</List>
|
||||||
{/* <Box p={2}> */}
|
|
||||||
<LanguageSelector />
|
<LanguageSelector />
|
||||||
{/* </Box> */}
|
|
||||||
</Box>
|
</Box>
|
||||||
</Popover>
|
</Popover>
|
||||||
</>
|
</>
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ import { Box, Button } from '@mui/material';
|
|||||||
|
|
||||||
import { useI18nContext } from 'i18n/i18n-react';
|
import { useI18nContext } from 'i18n/i18n-react';
|
||||||
|
|
||||||
import './drag-drop.css';
|
import './dragNdrop.css';
|
||||||
|
|
||||||
const DragNdrop = ({ onFileSelected }) => {
|
const DragNdrop = ({ onFileSelected }) => {
|
||||||
const [file, setFile] = useState<File>();
|
const [file, setFile] = useState<File>();
|
||||||
@@ -87,7 +87,7 @@ const DragNdrop = ({ onFileSelected }) => {
|
|||||||
<Button
|
<Button
|
||||||
startIcon={<CancelIcon />}
|
startIcon={<CancelIcon />}
|
||||||
variant="outlined"
|
variant="outlined"
|
||||||
color="error"
|
color="secondary"
|
||||||
onClick={(e) => handleRemoveFile(e)}
|
onClick={(e) => handleRemoveFile(e)}
|
||||||
>
|
>
|
||||||
{LL.CANCEL()}
|
{LL.CANCEL()}
|
||||||
|
|||||||
@@ -32,7 +32,7 @@ function LinearProgressWithLabel(props: LinearProgressProps & { value: number })
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
const SingleUpload = ({ setRestartNeeded }) => {
|
const SingleUpload = ({ doRestart }) => {
|
||||||
const [md5, setMd5] = useState<string>();
|
const [md5, setMd5] = useState<string>();
|
||||||
const [file, setFile] = useState<File>();
|
const [file, setFile] = useState<File>();
|
||||||
const { LL } = useI18nContext();
|
const { LL } = useI18nContext();
|
||||||
@@ -44,19 +44,18 @@ const SingleUpload = ({ setRestartNeeded }) => {
|
|||||||
abort: cancelUpload
|
abort: cancelUpload
|
||||||
} = useRequest(SystemApi.uploadFile, {
|
} = useRequest(SystemApi.uploadFile, {
|
||||||
immediate: false
|
immediate: false
|
||||||
}).onSuccess(({ data }) => {
|
}).onComplete(({ data }) => {
|
||||||
if (data) {
|
if (data) {
|
||||||
setMd5(data.md5 as string);
|
setMd5(data.md5 as string);
|
||||||
toast.success(LL.UPLOAD() + ' MD5 ' + LL.SUCCESSFUL());
|
toast.success(LL.UPLOAD() + ' MD5 ' + LL.SUCCESSFUL());
|
||||||
setFile(undefined);
|
setFile(undefined);
|
||||||
} else {
|
} else {
|
||||||
setRestartNeeded(true);
|
doRestart();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
useEffect(async () => {
|
useEffect(async () => {
|
||||||
if (file) {
|
if (file) {
|
||||||
console.log('going to upload file ', file.name);
|
|
||||||
await sendUpload(file).catch((error: Error) => {
|
await sendUpload(file).catch((error: Error) => {
|
||||||
if (error.message === 'The user aborted a request') {
|
if (error.message === 'The user aborted a request') {
|
||||||
toast.warning(LL.UPLOAD() + ' ' + LL.ABORTED());
|
toast.warning(LL.UPLOAD() + ' ' + LL.ABORTED());
|
||||||
@@ -73,7 +72,7 @@ const SingleUpload = ({ setRestartNeeded }) => {
|
|||||||
<>
|
<>
|
||||||
{isUploading ? (
|
{isUploading ? (
|
||||||
<>
|
<>
|
||||||
<Box width="100%" p={2}>
|
<Box width="100%" pl={2} pr={2}>
|
||||||
<LinearProgressWithLabel
|
<LinearProgressWithLabel
|
||||||
value={
|
value={
|
||||||
progress.total === 0 || progress.loaded === 0
|
progress.total === 0 || progress.loaded === 0
|
||||||
@@ -86,10 +85,10 @@ const SingleUpload = ({ setRestartNeeded }) => {
|
|||||||
</Box>
|
</Box>
|
||||||
|
|
||||||
<Button
|
<Button
|
||||||
sx={{ ml: 2 }}
|
sx={{ ml: 2, mt: 2 }}
|
||||||
startIcon={<CancelIcon />}
|
startIcon={<CancelIcon />}
|
||||||
variant="outlined"
|
variant="outlined"
|
||||||
color="error"
|
color="secondary"
|
||||||
onClick={cancelUpload}
|
onClick={cancelUpload}
|
||||||
>
|
>
|
||||||
{LL.CANCEL()}
|
{LL.CANCEL()}
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ const de: Translation = {
|
|||||||
PASSWORD: 'Passwort',
|
PASSWORD: 'Passwort',
|
||||||
SU_PASSWORD: 'su Passwort',
|
SU_PASSWORD: 'su Passwort',
|
||||||
SETTINGS_OF: '{0} Einstellungen',
|
SETTINGS_OF: '{0} Einstellungen',
|
||||||
HELP_OF: '{0} Hilfe',
|
HELP: 'Hilfe',
|
||||||
LOGGED_IN: 'Eingeloggt als {name}',
|
LOGGED_IN: 'Eingeloggt als {name}',
|
||||||
PLEASE_SIGNIN: 'Bitte einloggen, um fortzufahren',
|
PLEASE_SIGNIN: 'Bitte einloggen, um fortzufahren',
|
||||||
UPLOAD_SUCCESSFUL: 'Hochladen erfolgreich',
|
UPLOAD_SUCCESSFUL: 'Hochladen erfolgreich',
|
||||||
@@ -145,7 +145,7 @@ const de: Translation = {
|
|||||||
CUSTOMIZATIONS_HELP_1: 'Wählen Sie ein Gerät aus und passen Sie die Entitäten mithilfe der Optionen an',
|
CUSTOMIZATIONS_HELP_1: 'Wählen Sie ein Gerät aus und passen Sie die Entitäten mithilfe der Optionen an',
|
||||||
CUSTOMIZATIONS_HELP_2: 'Als Favorit markieren',
|
CUSTOMIZATIONS_HELP_2: 'Als Favorit markieren',
|
||||||
CUSTOMIZATIONS_HELP_3: 'Schreibaktion deaktivieren',
|
CUSTOMIZATIONS_HELP_3: 'Schreibaktion deaktivieren',
|
||||||
CUSTOMIZATIONS_HELP_4: 'von MQTT und API ausschließen',
|
CUSTOMIZATIONS_HELP_4: 'Von MQTT und API ausschließen',
|
||||||
CUSTOMIZATIONS_HELP_5: 'Aus dem Kontrollzentrum ausblenden',
|
CUSTOMIZATIONS_HELP_5: 'Aus dem Kontrollzentrum ausblenden',
|
||||||
CUSTOMIZATIONS_HELP_6: 'Aus dem Speicher löschen',
|
CUSTOMIZATIONS_HELP_6: 'Aus dem Speicher löschen',
|
||||||
SELECT_DEVICE: 'Wählen Sie ein Gerät aus',
|
SELECT_DEVICE: 'Wählen Sie ein Gerät aus',
|
||||||
@@ -161,7 +161,7 @@ const de: Translation = {
|
|||||||
HELP_INFORMATION_5: 'EMS-ESP ist ein freies Open-Source Projekt. Bitte unterstützen Sie die zukünftige Entwicklung mit einem "Star" auf GitHub!',
|
HELP_INFORMATION_5: 'EMS-ESP ist ein freies Open-Source Projekt. Bitte unterstützen Sie die zukünftige Entwicklung mit einem "Star" auf GitHub!',
|
||||||
UPLOAD: 'Hochladen',
|
UPLOAD: 'Hochladen',
|
||||||
DOWNLOAD: '{{H|h|h}}erunterladen',
|
DOWNLOAD: '{{H|h|h}}erunterladen',
|
||||||
INSTALL: 'Installieren',
|
INSTALL: 'Installieren {0}',
|
||||||
ABORTED: 'abgebrochen',
|
ABORTED: 'abgebrochen',
|
||||||
FAILED: 'gescheitert',
|
FAILED: 'gescheitert',
|
||||||
SUCCESSFUL: 'erfolgreich',
|
SUCCESSFUL: 'erfolgreich',
|
||||||
@@ -169,16 +169,13 @@ const de: Translation = {
|
|||||||
LOG_OF: '{0}protokoll',
|
LOG_OF: '{0}protokoll',
|
||||||
STATUS_OF: '{0} Status',
|
STATUS_OF: '{0} Status',
|
||||||
DOWNLOAD_UPLOAD: 'Herunterladen/Hochladen',
|
DOWNLOAD_UPLOAD: 'Herunterladen/Hochladen',
|
||||||
VERSION_ON: 'Sie verwenden derzeit',
|
|
||||||
CLOSE: 'Schließen',
|
CLOSE: 'Schließen',
|
||||||
USE: 'Verwenden Sie',
|
USE: 'Verwenden Sie',
|
||||||
FACTORY_RESET: 'Werkseinstellung',
|
FACTORY_RESET: 'Werkseinstellung',
|
||||||
SYSTEM_FACTORY_TEXT: 'EMS-ESP wurde auf Werkseinstellung gesetzt und startet als Zugangspunkt neu',
|
SYSTEM_FACTORY_TEXT: 'EMS-ESP wurde auf Werkseinstellung gesetzt und startet als Zugangspunkt neu',
|
||||||
SYSTEM_FACTORY_TEXT_DIALOG: 'Sind Sie sicher alle Einstellungen auf Werkseinstellung zu setzen?',
|
SYSTEM_FACTORY_TEXT_DIALOG: 'Sind Sie sicher alle Einstellungen auf Werkseinstellung zu setzen?',
|
||||||
THE_LATEST: 'Die neueste',
|
STABLE: 'Stabil',
|
||||||
OFFICIAL: 'offizielle',
|
|
||||||
DEVELOPMENT: 'Entwicklungs',
|
DEVELOPMENT: 'Entwicklungs',
|
||||||
RELEASE_IS: 'Release ist',
|
|
||||||
RELEASE_NOTES: 'Versionshinweise',
|
RELEASE_NOTES: 'Versionshinweise',
|
||||||
EMS_ESP_VER: 'EMS-ESP Version',
|
EMS_ESP_VER: 'EMS-ESP Version',
|
||||||
UPTIME: 'System Betriebszeit',
|
UPTIME: 'System Betriebszeit',
|
||||||
@@ -333,9 +330,17 @@ const de: Translation = {
|
|||||||
ENABLE_MODBUS: 'Modbus aktivieren',
|
ENABLE_MODBUS: 'Modbus aktivieren',
|
||||||
VIEW_LOG: 'Sehen Sie sich das Protokoll an, um Probleme zu diagnostizieren',
|
VIEW_LOG: 'Sehen Sie sich das Protokoll an, um Probleme zu diagnostizieren',
|
||||||
UPLOAD_DRAG: 'Ziehen Sie eine Datei hierher oder klicken Sie, um eine auszuwählen',
|
UPLOAD_DRAG: 'Ziehen Sie eine Datei hierher oder klicken Sie, um eine auszuwählen',
|
||||||
SERVICES: 'Dienstleistungen',
|
SERVICES: 'Dienste',
|
||||||
ALLVALUES: 'Alle Werte',
|
ALLVALUES: 'Alle Werte',
|
||||||
SPECIAL_FUNCTIONS: 'Special Functions' // TODO translate
|
SPECIAL_FUNCTIONS: 'Sonderfunktionen',
|
||||||
|
WAIT_FIRMWARE: 'Die Firmware wird hochgeladen und installiert',
|
||||||
|
INSTALL_VERSION: 'Dadurch wird die Version installiert {0}. Sind Sie sicher?',
|
||||||
|
SWITCH_DEV: 'Wechseln Sie zur Entwicklungsversion',
|
||||||
|
UPGRADE_AVAILABLE: 'Es ist ein Firmware-Upgrade verfügbar!',
|
||||||
|
LATEST_VERSION: 'Sie verwenden die neueste Version.',
|
||||||
|
PLEASE_WAIT: 'Bitte warten',
|
||||||
|
RESTARTING_PRE: 'Initialisierung',
|
||||||
|
RESTARTING_POST: 'Neuladen'
|
||||||
};
|
};
|
||||||
|
|
||||||
export default de;
|
export default de;
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ const en: Translation = {
|
|||||||
PASSWORD: 'Password',
|
PASSWORD: 'Password',
|
||||||
SU_PASSWORD: 'su Password',
|
SU_PASSWORD: 'su Password',
|
||||||
SETTINGS_OF: '{0} Settings',
|
SETTINGS_OF: '{0} Settings',
|
||||||
HELP_OF: '{0} Help',
|
HELP: 'Help',
|
||||||
LOGGED_IN: 'Logged in as {name}',
|
LOGGED_IN: 'Logged in as {name}',
|
||||||
PLEASE_SIGNIN: 'Please sign in to continue',
|
PLEASE_SIGNIN: 'Please sign in to continue',
|
||||||
UPLOAD_SUCCESSFUL: 'Upload successful',
|
UPLOAD_SUCCESSFUL: 'Upload successful',
|
||||||
@@ -161,7 +161,7 @@ const en: Translation = {
|
|||||||
HELP_INFORMATION_5: 'EMS-ESP is a free and open-source project. Please support its future development by giving it a star on GitHub!',
|
HELP_INFORMATION_5: 'EMS-ESP is a free and open-source project. Please support its future development by giving it a star on GitHub!',
|
||||||
UPLOAD: 'Upload',
|
UPLOAD: 'Upload',
|
||||||
DOWNLOAD: '{{D|d|d}}ownload',
|
DOWNLOAD: '{{D|d|d}}ownload',
|
||||||
INSTALL: 'Install',
|
INSTALL: 'Install {0}',
|
||||||
ABORTED: 'aborted',
|
ABORTED: 'aborted',
|
||||||
FAILED: 'failed',
|
FAILED: 'failed',
|
||||||
SUCCESSFUL: 'successful',
|
SUCCESSFUL: 'successful',
|
||||||
@@ -169,16 +169,13 @@ const en: Translation = {
|
|||||||
LOG_OF: '{0} Log',
|
LOG_OF: '{0} Log',
|
||||||
STATUS_OF: '{0} Status',
|
STATUS_OF: '{0} Status',
|
||||||
DOWNLOAD_UPLOAD: 'Download/Upload',
|
DOWNLOAD_UPLOAD: 'Download/Upload',
|
||||||
VERSION_ON: 'You are currently on version',
|
|
||||||
CLOSE: 'Close',
|
CLOSE: 'Close',
|
||||||
USE: 'Use',
|
USE: 'Use',
|
||||||
FACTORY_RESET: 'Factory Reset',
|
FACTORY_RESET: 'Factory Reset',
|
||||||
SYSTEM_FACTORY_TEXT: 'Device has been factory reset and will now restart',
|
SYSTEM_FACTORY_TEXT: 'Device has been factory reset and will now restart',
|
||||||
SYSTEM_FACTORY_TEXT_DIALOG: 'Are you sure you want to reset EMS-ESP to its factory defaults?',
|
SYSTEM_FACTORY_TEXT_DIALOG: 'Are you sure you want to reset EMS-ESP to its factory defaults?',
|
||||||
THE_LATEST: 'The latest',
|
STABLE: 'Stable',
|
||||||
OFFICIAL: 'official',
|
DEVELOPMENT: 'Development',
|
||||||
DEVELOPMENT: 'development',
|
|
||||||
RELEASE_IS: 'release is',
|
|
||||||
RELEASE_NOTES: 'release notes',
|
RELEASE_NOTES: 'release notes',
|
||||||
EMS_ESP_VER: 'EMS-ESP Version',
|
EMS_ESP_VER: 'EMS-ESP Version',
|
||||||
UPTIME: 'System Uptime',
|
UPTIME: 'System Uptime',
|
||||||
@@ -335,7 +332,15 @@ const en: Translation = {
|
|||||||
UPLOAD_DRAG: 'drag and drop a file here or click to select one',
|
UPLOAD_DRAG: 'drag and drop a file here or click to select one',
|
||||||
SERVICES: 'Services',
|
SERVICES: 'Services',
|
||||||
ALLVALUES: 'All Values',
|
ALLVALUES: 'All Values',
|
||||||
SPECIAL_FUNCTIONS: 'Special Functions'
|
SPECIAL_FUNCTIONS: 'Special Functions',
|
||||||
|
WAIT_FIRMWARE: 'Firmware is uploading and installing',
|
||||||
|
INSTALL_VERSION: 'This will install vesion {0}. Are you sure?',
|
||||||
|
SWITCH_DEV: 'switch to the development version',
|
||||||
|
UPGRADE_AVAILABLE: 'There is a firmware upgrade available!',
|
||||||
|
LATEST_VERSION: 'You are using the latest version.',
|
||||||
|
PLEASE_WAIT: 'Please wait',
|
||||||
|
RESTARTING_PRE: 'Initializing',
|
||||||
|
RESTARTING_POST: 'Reloading'
|
||||||
};
|
};
|
||||||
|
|
||||||
export default en;
|
export default en;
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ const fr: Translation = {
|
|||||||
PASSWORD: 'Mot de passe',
|
PASSWORD: 'Mot de passe',
|
||||||
SU_PASSWORD: 'Mot de passe su',
|
SU_PASSWORD: 'Mot de passe su',
|
||||||
SETTINGS_OF: 'Paramètres {0}',
|
SETTINGS_OF: 'Paramètres {0}',
|
||||||
HELP_OF: 'Aide {0}',
|
HELP: 'Aide',
|
||||||
LOGGED_IN: 'Connecté en tant que {name}',
|
LOGGED_IN: 'Connecté en tant que {name}',
|
||||||
PLEASE_SIGNIN: 'Veuillez vous connecter pour continuer',
|
PLEASE_SIGNIN: 'Veuillez vous connecter pour continuer',
|
||||||
UPLOAD_SUCCESSFUL: 'Upload terminée',
|
UPLOAD_SUCCESSFUL: 'Upload terminée',
|
||||||
@@ -161,7 +161,7 @@ const fr: Translation = {
|
|||||||
HELP_INFORMATION_5: 'EMS-ESP est un projet libre et open-source. Merci de soutenir son développement futur en lui donnant une étoile sur GitHub !',
|
HELP_INFORMATION_5: 'EMS-ESP est un projet libre et open-source. Merci de soutenir son développement futur en lui donnant une étoile sur GitHub !',
|
||||||
UPLOAD: 'Upload',
|
UPLOAD: 'Upload',
|
||||||
DOWNLOAD: '{{D|d|d}}ownload',
|
DOWNLOAD: '{{D|d|d}}ownload',
|
||||||
INSTALL: 'Installer',
|
INSTALL: 'Installer {0}',
|
||||||
ABORTED: 'annulé',
|
ABORTED: 'annulé',
|
||||||
FAILED: 'échoué',
|
FAILED: 'échoué',
|
||||||
SUCCESSFUL: 'réussi',
|
SUCCESSFUL: 'réussi',
|
||||||
@@ -169,16 +169,13 @@ const fr: Translation = {
|
|||||||
LOG_OF: '{0} Log',
|
LOG_OF: '{0} Log',
|
||||||
STATUS_OF: 'Statut {0}',
|
STATUS_OF: 'Statut {0}',
|
||||||
DOWNLOAD_UPLOAD: 'Download/Upload', // TODO translate
|
DOWNLOAD_UPLOAD: 'Download/Upload', // TODO translate
|
||||||
VERSION_ON: 'You are currently on', // TODO translate
|
|
||||||
CLOSE: 'Fermer',
|
CLOSE: 'Fermer',
|
||||||
USE: 'Utiliser',
|
USE: 'Utiliser',
|
||||||
FACTORY_RESET: 'Réinitialisation',
|
FACTORY_RESET: 'Réinitialisation',
|
||||||
SYSTEM_FACTORY_TEXT: "L'appareil a été réinitialisé et va maintenant redémarrer",
|
SYSTEM_FACTORY_TEXT: "L'appareil a été réinitialisé et va maintenant redémarrer",
|
||||||
SYSTEM_FACTORY_TEXT_DIALOG: "Êtes-vous sûr de vouloir réinitialiser l'appareil à ses paramètres d'usine ?",
|
SYSTEM_FACTORY_TEXT_DIALOG: "Êtes-vous sûr de vouloir réinitialiser l'appareil à ses paramètres d'usine ?",
|
||||||
THE_LATEST: 'La dernière',
|
STABLE: 'Stable', // TODO translate
|
||||||
OFFICIAL: 'officielle',
|
DEVELOPMENT: 'Développement',
|
||||||
DEVELOPMENT: 'développement',
|
|
||||||
RELEASE_IS: 'release est', // TODO translate
|
|
||||||
RELEASE_NOTES: 'notes de version',
|
RELEASE_NOTES: 'notes de version',
|
||||||
EMS_ESP_VER: 'Version EMS-ESP',
|
EMS_ESP_VER: 'Version EMS-ESP',
|
||||||
UPTIME: 'Durée de fonctionnement du système',
|
UPTIME: 'Durée de fonctionnement du système',
|
||||||
@@ -335,7 +332,15 @@ const fr: Translation = {
|
|||||||
UPLOAD_DRAG: 'drag and drop a file here or click to select one', // TODO translate
|
UPLOAD_DRAG: 'drag and drop a file here or click to select one', // TODO translate
|
||||||
SERVICES: 'Services', // TODO translate
|
SERVICES: 'Services', // TODO translate
|
||||||
ALLVALUES: 'All Values', // TODO translate
|
ALLVALUES: 'All Values', // TODO translate
|
||||||
SPECIAL_FUNCTIONS: 'Special Functions' // TODO translate
|
SPECIAL_FUNCTIONS: 'Special Functions',
|
||||||
|
WAIT_FIRMWARE: 'Firmware is uploading and installing', // TODO translate
|
||||||
|
INSTALL_VERSION: 'This will install vesion {0}. Are you sure?', // TODO translate
|
||||||
|
SWITCH_DEV: 'switch to the development version', // TODO translate
|
||||||
|
UPGRADE_AVAILABLE: 'There is a firmware upgrade available!', // TODO translate
|
||||||
|
LATEST_VERSION: 'You are using the latest version.', // TODO translate // TODO translate
|
||||||
|
PLEASE_WAIT: 'Please wait', // TODO translate
|
||||||
|
RESTARTING_PRE: 'Initializing', // TODO translate
|
||||||
|
RESTARTING_POST: 'Reloading' // TODO translate
|
||||||
};
|
};
|
||||||
|
|
||||||
export default fr;
|
export default fr;
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ const it: Translation = {
|
|||||||
PASSWORD: 'Password',
|
PASSWORD: 'Password',
|
||||||
SU_PASSWORD: 'su Password',
|
SU_PASSWORD: 'su Password',
|
||||||
SETTINGS_OF: 'Impostazioni {0}',
|
SETTINGS_OF: 'Impostazioni {0}',
|
||||||
HELP_OF: '{0} Aiuto',
|
HELP: 'Aiuto',
|
||||||
LOGGED_IN: 'Registrato come {name}',
|
LOGGED_IN: 'Registrato come {name}',
|
||||||
PLEASE_SIGNIN: 'Prego registrarsi per continuare',
|
PLEASE_SIGNIN: 'Prego registrarsi per continuare',
|
||||||
UPLOAD_SUCCESSFUL: 'Caricamento finito',
|
UPLOAD_SUCCESSFUL: 'Caricamento finito',
|
||||||
@@ -161,7 +161,7 @@ const it: Translation = {
|
|||||||
HELP_INFORMATION_5: 'EMS-ESP è un progetto gratuito e open-source. Supporta il suo sviluppo futuro assegnandogli una stella su GitHub!',
|
HELP_INFORMATION_5: 'EMS-ESP è un progetto gratuito e open-source. Supporta il suo sviluppo futuro assegnandogli una stella su GitHub!',
|
||||||
UPLOAD: 'Carica',
|
UPLOAD: 'Carica',
|
||||||
DOWNLOAD: 'Scarica',
|
DOWNLOAD: 'Scarica',
|
||||||
INSTALL: 'Installare',
|
INSTALL: 'Installare {0}',
|
||||||
ABORTED: 'Annullato',
|
ABORTED: 'Annullato',
|
||||||
FAILED: 'Fallito',
|
FAILED: 'Fallito',
|
||||||
SUCCESSFUL: 'Riuscito',
|
SUCCESSFUL: 'Riuscito',
|
||||||
@@ -169,16 +169,13 @@ const it: Translation = {
|
|||||||
LOG_OF: 'Registro {0}',
|
LOG_OF: 'Registro {0}',
|
||||||
STATUS_OF: 'Stato {0}',
|
STATUS_OF: 'Stato {0}',
|
||||||
DOWNLOAD_UPLOAD: 'Scaricamento/Caricamento',
|
DOWNLOAD_UPLOAD: 'Scaricamento/Caricamento',
|
||||||
VERSION_ON: 'Attualmente stai eseguendo la versione',
|
|
||||||
CLOSE: 'Chiudere',
|
CLOSE: 'Chiudere',
|
||||||
USE: 'Usa',
|
USE: 'Usa',
|
||||||
FACTORY_RESET: 'Impostazioni di fabbrica',
|
FACTORY_RESET: 'Impostazioni di fabbrica',
|
||||||
SYSTEM_FACTORY_TEXT: 'Il dispositivo è stato ripristinato alle impostazioni di fabbrica e ora verrà riavviato',
|
SYSTEM_FACTORY_TEXT: 'Il dispositivo è stato ripristinato alle impostazioni di fabbrica e ora verrà riavviato',
|
||||||
SYSTEM_FACTORY_TEXT_DIALOG: 'Sei sicuro di voler ripristinare il dispositivo alle impostazioni di fabbrica??',
|
SYSTEM_FACTORY_TEXT_DIALOG: 'Sei sicuro di voler ripristinare il dispositivo alle impostazioni di fabbrica??',
|
||||||
THE_LATEST: 'Ultima',
|
STABLE: 'Stable', // TODO translate
|
||||||
OFFICIAL: 'ufficiale',
|
DEVELOPMENT: 'Sviluppo',
|
||||||
DEVELOPMENT: 'sviluppo',
|
|
||||||
RELEASE_IS: 'rilascio é',
|
|
||||||
RELEASE_NOTES: 'note rilascio',
|
RELEASE_NOTES: 'note rilascio',
|
||||||
EMS_ESP_VER: 'Versione EMS-ESP',
|
EMS_ESP_VER: 'Versione EMS-ESP',
|
||||||
UPTIME: 'Tempo di attività del sistema',
|
UPTIME: 'Tempo di attività del sistema',
|
||||||
@@ -335,7 +332,15 @@ const it: Translation = {
|
|||||||
UPLOAD_DRAG: 'drag and drop a file here or click to select one', // TODO translate
|
UPLOAD_DRAG: 'drag and drop a file here or click to select one', // TODO translate
|
||||||
SERVICES: 'Services', // TODO translate
|
SERVICES: 'Services', // TODO translate
|
||||||
ALLVALUES: 'All Values', // TODO translate
|
ALLVALUES: 'All Values', // TODO translate
|
||||||
SPECIAL_FUNCTIONS: 'Special Functions' // TODO translate
|
SPECIAL_FUNCTIONS: 'Special Functions', // TODO translate
|
||||||
|
WAIT_FIRMWARE: 'Firmware is uploading and installing', // TODO translate
|
||||||
|
INSTALL_VERSION: 'This will install vesion {0}. Are you sure?', // TODO translate
|
||||||
|
SWITCH_DEV: 'switch to the development version', // TODO translate
|
||||||
|
UPGRADE_AVAILABLE: 'There is a firmware upgrade available!', // TODO translate
|
||||||
|
LATEST_VERSION: 'You are using the latest version.', // TODO translate
|
||||||
|
PLEASE_WAIT: 'Please wait', // TODO translate
|
||||||
|
RESTARTING_PRE: 'Initializing', // TODO translate
|
||||||
|
RESTARTING_POST: 'Reloading' // TODO translate
|
||||||
};
|
};
|
||||||
|
|
||||||
export default it;
|
export default it;
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ const nl: Translation = {
|
|||||||
PASSWORD: 'Wachtwoord',
|
PASSWORD: 'Wachtwoord',
|
||||||
SU_PASSWORD: 'su Wachtwoord',
|
SU_PASSWORD: 'su Wachtwoord',
|
||||||
SETTINGS_OF: '{0} Instellingen',
|
SETTINGS_OF: '{0} Instellingen',
|
||||||
HELP_OF: '{0} Help',
|
HELP: 'Help',
|
||||||
LOGGED_IN: 'Ingelogd als {name}',
|
LOGGED_IN: 'Ingelogd als {name}',
|
||||||
PLEASE_SIGNIN: 'Log in om verder te gaan',
|
PLEASE_SIGNIN: 'Log in om verder te gaan',
|
||||||
UPLOAD_SUCCESSFUL: 'Upload successvol',
|
UPLOAD_SUCCESSFUL: 'Upload successvol',
|
||||||
@@ -161,7 +161,7 @@ const nl: Translation = {
|
|||||||
HELP_INFORMATION_5: 'EMS-ESP is een gratis en open source project. Steun ons met een Star op GitHub!',
|
HELP_INFORMATION_5: 'EMS-ESP is een gratis en open source project. Steun ons met een Star op GitHub!',
|
||||||
UPLOAD: 'Upload',
|
UPLOAD: 'Upload',
|
||||||
DOWNLOAD: '{{D|d|d}}ownload',
|
DOWNLOAD: '{{D|d|d}}ownload',
|
||||||
INSTALL: 'Installeren',
|
INSTALL: 'Installeren {0}',
|
||||||
ABORTED: 'afgebroken',
|
ABORTED: 'afgebroken',
|
||||||
FAILED: 'mislukt',
|
FAILED: 'mislukt',
|
||||||
SUCCESSFUL: 'successvol',
|
SUCCESSFUL: 'successvol',
|
||||||
@@ -169,16 +169,13 @@ const nl: Translation = {
|
|||||||
LOG_OF: '{0} Log',
|
LOG_OF: '{0} Log',
|
||||||
STATUS_OF: '{0} Status',
|
STATUS_OF: '{0} Status',
|
||||||
DOWNLOAD_UPLOAD: 'Download/Upload',
|
DOWNLOAD_UPLOAD: 'Download/Upload',
|
||||||
VERSION_ON: 'U bevindt zich momenteel op versie',
|
|
||||||
CLOSE: 'Sluiten',
|
CLOSE: 'Sluiten',
|
||||||
USE: 'Gebruik',
|
USE: 'Gebruik',
|
||||||
FACTORY_RESET: 'Fabrieksinstellingen',
|
FACTORY_RESET: 'Fabrieksinstellingen',
|
||||||
SYSTEM_FACTORY_TEXT: 'Gateway is gereset en start nu weer op met fabrieksinstellingen',
|
SYSTEM_FACTORY_TEXT: 'Gateway is gereset en start nu weer op met fabrieksinstellingen',
|
||||||
SYSTEM_FACTORY_TEXT_DIALOG: 'Weet je zeker dat je een reset naar fabrieksinstellingen uit wilt voeren?',
|
SYSTEM_FACTORY_TEXT_DIALOG: 'Weet je zeker dat je een reset naar fabrieksinstellingen uit wilt voeren?',
|
||||||
THE_LATEST: 'De laatste',
|
STABLE: 'Stable',
|
||||||
OFFICIAL: 'official',
|
DEVELOPMENT: 'Development',
|
||||||
DEVELOPMENT: 'development',
|
|
||||||
RELEASE_IS: 'release is',
|
|
||||||
RELEASE_NOTES: 'release notes',
|
RELEASE_NOTES: 'release notes',
|
||||||
EMS_ESP_VER: 'EMS-ESP Versie',
|
EMS_ESP_VER: 'EMS-ESP Versie',
|
||||||
UPTIME: 'Systeem Uptime',
|
UPTIME: 'Systeem Uptime',
|
||||||
@@ -335,7 +332,15 @@ const nl: Translation = {
|
|||||||
UPLOAD_DRAG: 'drag and drop a file here or click to select one', // TODO translate
|
UPLOAD_DRAG: 'drag and drop a file here or click to select one', // TODO translate
|
||||||
SERVICES: 'Services', // TODO translate
|
SERVICES: 'Services', // TODO translate
|
||||||
ALLVALUES: 'All Values', // TODO translate
|
ALLVALUES: 'All Values', // TODO translate
|
||||||
SPECIAL_FUNCTIONS: 'Special Functions' // TODO translate
|
SPECIAL_FUNCTIONS: 'Special Functions', // TODO translate
|
||||||
|
WAIT_FIRMWARE: 'Firmware is uploading and installing', // TODO translate
|
||||||
|
INSTALL_VERSION: 'This will install vesion {0}. Are you sure?', // TODO translate
|
||||||
|
SWITCH_DEV: 'switch to the development version', // TODO translate
|
||||||
|
UPGRADE_AVAILABLE: 'There is a firmware upgrade available!', // TODO translate
|
||||||
|
LATEST_VERSION: 'You are using the latest version.', // TODO translate
|
||||||
|
PLEASE_WAIT: 'Please wait', // TODO translate
|
||||||
|
RESTARTING_PRE: 'Initializing', // TODO translate
|
||||||
|
RESTARTING_POST: 'Reloading' // TODO translate
|
||||||
};
|
};
|
||||||
|
|
||||||
export default nl;
|
export default nl;
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ const no: Translation = {
|
|||||||
PASSWORD: 'Passord',
|
PASSWORD: 'Passord',
|
||||||
SU_PASSWORD: 'su Passord',
|
SU_PASSWORD: 'su Passord',
|
||||||
SETTINGS_OF: '{0} Innstillinger',
|
SETTINGS_OF: '{0} Innstillinger',
|
||||||
HELP_OF: '{0} Hjelp',
|
HELP: 'Hjelp',
|
||||||
LOGGED_IN: 'Logget in som {name}',
|
LOGGED_IN: 'Logget in som {name}',
|
||||||
PLEASE_SIGNIN: 'Venligst logge inn for å fortsetta',
|
PLEASE_SIGNIN: 'Venligst logge inn for å fortsetta',
|
||||||
UPLOAD_SUCCESSFUL: 'Opplasting lykkes',
|
UPLOAD_SUCCESSFUL: 'Opplasting lykkes',
|
||||||
@@ -161,7 +161,7 @@ const no: Translation = {
|
|||||||
HELP_INFORMATION_5: 'EMS-ESP er gratis og åpen kildekode. Bidra til utviklingen ved å gi oss en stjerne på GitHub!',
|
HELP_INFORMATION_5: 'EMS-ESP er gratis og åpen kildekode. Bidra til utviklingen ved å gi oss en stjerne på GitHub!',
|
||||||
UPLOAD: 'Opplasning',
|
UPLOAD: 'Opplasning',
|
||||||
DOWNLOAD: '{{N|n|n}}edlasting',
|
DOWNLOAD: '{{N|n|n}}edlasting',
|
||||||
INSTALL: 'Installer',
|
INSTALL: 'Installer {0}',
|
||||||
ABORTED: 'avbrutt',
|
ABORTED: 'avbrutt',
|
||||||
FAILED: 'feilet',
|
FAILED: 'feilet',
|
||||||
SUCCESSFUL: 'vellykket',
|
SUCCESSFUL: 'vellykket',
|
||||||
@@ -169,16 +169,13 @@ const no: Translation = {
|
|||||||
LOG_OF: '{0} Logg',
|
LOG_OF: '{0} Logg',
|
||||||
STATUS_OF: '{0} Status',
|
STATUS_OF: '{0} Status',
|
||||||
DOWNLOAD_UPLOAD: 'Nedlasting/Opp',
|
DOWNLOAD_UPLOAD: 'Nedlasting/Opp',
|
||||||
VERSION_ON: 'You are currently on', // TODO translate
|
|
||||||
CLOSE: 'Steng',
|
CLOSE: 'Steng',
|
||||||
USE: 'Bruk',
|
USE: 'Bruk',
|
||||||
FACTORY_RESET: 'Sett tilbake til fabrikkinstilling',
|
FACTORY_RESET: 'Sett tilbake til fabrikkinstilling',
|
||||||
SYSTEM_FACTORY_TEXT: 'Enhet har blitt satt tilbake til fabrikkinstilling og vil restarte',
|
SYSTEM_FACTORY_TEXT: 'Enhet har blitt satt tilbake til fabrikkinstilling og vil restarte',
|
||||||
SYSTEM_FACTORY_TEXT_DIALOG: 'Er du sikker på at du vil resette enheten til fabrikkinstillinger?',
|
SYSTEM_FACTORY_TEXT_DIALOG: 'Er du sikker på at du vil resette enheten til fabrikkinstillinger?',
|
||||||
THE_LATEST: 'Den nyeste',
|
STABLE: 'Stable', // TODO translate
|
||||||
OFFICIAL: 'official',
|
DEVELOPMENT: 'Development',
|
||||||
DEVELOPMENT: 'development',
|
|
||||||
RELEASE_IS: 'release er',
|
|
||||||
RELEASE_NOTES: 'release notes',
|
RELEASE_NOTES: 'release notes',
|
||||||
EMS_ESP_VER: 'EMS-ESP Version',
|
EMS_ESP_VER: 'EMS-ESP Version',
|
||||||
UPTIME: 'System Oppetid',
|
UPTIME: 'System Oppetid',
|
||||||
@@ -335,7 +332,15 @@ const no: Translation = {
|
|||||||
UPLOAD_DRAG: 'drag and drop a file here or click to select one', // TODO translate
|
UPLOAD_DRAG: 'drag and drop a file here or click to select one', // TODO translate
|
||||||
SERVICES: 'Services', // TODO translate
|
SERVICES: 'Services', // TODO translate
|
||||||
ALLVALUES: 'All Values', // TODO translate
|
ALLVALUES: 'All Values', // TODO translate
|
||||||
SPECIAL_FUNCTIONS: 'Special Functions' // TODO translate
|
SPECIAL_FUNCTIONS: 'Special Functions', // TODO translate
|
||||||
|
WAIT_FIRMWARE: 'Firmware is uploading and installing', // TODO translate
|
||||||
|
INSTALL_VERSION: 'This will install vesion {0}. Are you sure?', // TODO translate
|
||||||
|
SWITCH_DEV: 'switch to the development version', // TODO translate
|
||||||
|
UPGRADE_AVAILABLE: 'There is a firmware upgrade available!', // TODO translate
|
||||||
|
LATEST_VERSION: 'You are using the latest version.', // TODO translate
|
||||||
|
PLEASE_WAIT: 'Please wait', // TODO translate
|
||||||
|
RESTARTING_PRE: 'Initializing', // TODO translate
|
||||||
|
RESTARTING_POST: 'Reloading' // TODO translate
|
||||||
};
|
};
|
||||||
|
|
||||||
export default no;
|
export default no;
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ const pl: BaseTranslation = {
|
|||||||
PASSWORD: 'Hasło',
|
PASSWORD: 'Hasło',
|
||||||
SU_PASSWORD: 'Hasło "su"',
|
SU_PASSWORD: 'Hasło "su"',
|
||||||
SETTINGS_OF: 'Ustawienia {0}',
|
SETTINGS_OF: 'Ustawienia {0}',
|
||||||
HELP_OF: 'Pomoc {0}',
|
HELP: 'Pomoc',
|
||||||
LOGGED_IN: 'Zalogowano użytkownika {name}.',
|
LOGGED_IN: 'Zalogowano użytkownika {name}.',
|
||||||
PLEASE_SIGNIN: 'Zaloguj się aby kontynuować.',
|
PLEASE_SIGNIN: 'Zaloguj się aby kontynuować.',
|
||||||
UPLOAD_SUCCESSFUL: 'Wysyłanie zakończone.',
|
UPLOAD_SUCCESSFUL: 'Wysyłanie zakończone.',
|
||||||
@@ -161,7 +161,7 @@ const pl: BaseTranslation = {
|
|||||||
HELP_INFORMATION_5: 'EMS-ESP jest darmowym projektem typu open-source. Aby go wesprzeć, rozważ przyznanie nam gwiazdki na GitHub!',
|
HELP_INFORMATION_5: 'EMS-ESP jest darmowym projektem typu open-source. Aby go wesprzeć, rozważ przyznanie nam gwiazdki na GitHub!',
|
||||||
UPLOAD: 'Wysyłanie',
|
UPLOAD: 'Wysyłanie',
|
||||||
DOWNLOAD: '{{P|p||P}}obier{{anie|z||z}}',
|
DOWNLOAD: '{{P|p||P}}obier{{anie|z||z}}',
|
||||||
INSTALL: 'Zainstalować',
|
INSTALL: 'Zainstalować {0}',
|
||||||
ABORTED: 'zostało przerwane!',
|
ABORTED: 'zostało przerwane!',
|
||||||
FAILED: 'nie powiodł{{o|a|}} się!',
|
FAILED: 'nie powiodł{{o|a|}} się!',
|
||||||
SUCCESSFUL: 'powiodło się.',
|
SUCCESSFUL: 'powiodło się.',
|
||||||
@@ -169,16 +169,13 @@ const pl: BaseTranslation = {
|
|||||||
LOG_OF: 'Log {0}',
|
LOG_OF: 'Log {0}',
|
||||||
STATUS_OF: 'Status {0}',
|
STATUS_OF: 'Status {0}',
|
||||||
DOWNLOAD_UPLOAD: 'Plików przesyłanie',
|
DOWNLOAD_UPLOAD: 'Plików przesyłanie',
|
||||||
VERSION_ON: 'Aktualnie używasz',
|
|
||||||
CLOSE: 'Zamknij',
|
CLOSE: 'Zamknij',
|
||||||
USE: 'Aby zaktualizować firmware skorzystaj z funkcji',
|
USE: 'Aby zaktualizować firmware skorzystaj z funkcji',
|
||||||
FACTORY_RESET: 'Ustawienia fabryczne',
|
FACTORY_RESET: 'Ustawienia fabryczne',
|
||||||
SYSTEM_FACTORY_TEXT: 'Interfejs EMS-ESP został przywrócony do ustawień fabrycznych i zostanie teraz ponownie uruchomiony.',
|
SYSTEM_FACTORY_TEXT: 'Interfejs EMS-ESP został przywrócony do ustawień fabrycznych i zostanie teraz ponownie uruchomiony.',
|
||||||
SYSTEM_FACTORY_TEXT_DIALOG: 'Na pewno chcesz przywrócić ustawienia fabryczne interfejsu EMS-ESP? ',
|
SYSTEM_FACTORY_TEXT_DIALOG: 'Na pewno chcesz przywrócić ustawienia fabryczne interfejsu EMS-ESP? ',
|
||||||
THE_LATEST: 'Najnowsze',
|
STABLE: 'Stable', // TODO translate
|
||||||
OFFICIAL: 'oficjalne',
|
DEVELOPMENT: 'Testowe',
|
||||||
DEVELOPMENT: 'testowe',
|
|
||||||
RELEASE_IS: 'wydanie to',
|
|
||||||
RELEASE_NOTES: 'lista zmian',
|
RELEASE_NOTES: 'lista zmian',
|
||||||
EMS_ESP_VER: 'Wersja EMS-ESP',
|
EMS_ESP_VER: 'Wersja EMS-ESP',
|
||||||
UPTIME: 'Czas działania systemu',
|
UPTIME: 'Czas działania systemu',
|
||||||
@@ -335,7 +332,15 @@ const pl: BaseTranslation = {
|
|||||||
UPLOAD_DRAG: 'drag and drop a file here or click to select one', // TODO translate
|
UPLOAD_DRAG: 'drag and drop a file here or click to select one', // TODO translate
|
||||||
SERVICES: 'Services', // TODO translate
|
SERVICES: 'Services', // TODO translate
|
||||||
ALLVALUES: 'All Values', // TODO translate
|
ALLVALUES: 'All Values', // TODO translate
|
||||||
SPECIAL_FUNCTIONS: 'Special Functions' // TODO translate
|
SPECIAL_FUNCTIONS: 'Special Functions', // TODO translate
|
||||||
|
WAIT_FIRMWARE: 'Firmware is uploading and installing', // TODO translate
|
||||||
|
INSTALL_VERSION: 'This will install vesion {0}. Are you sure?', // TODO translate
|
||||||
|
SWITCH_DEV: 'switch to the development version', // TODO translate
|
||||||
|
UPGRADE_AVAILABLE: 'There is a firmware upgrade available!', // TODO translate
|
||||||
|
LATEST_VERSION: 'You are using the latest version.', // TODO translate
|
||||||
|
PLEASE_WAIT: 'Please wait', // TODO translate
|
||||||
|
RESTARTING_PRE: 'Initializing', // TODO translate
|
||||||
|
RESTARTING_POST: 'Reloading' // TODO translate
|
||||||
};
|
};
|
||||||
|
|
||||||
export default pl;
|
export default pl;
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ const sk: Translation = {
|
|||||||
PASSWORD: 'Heslo',
|
PASSWORD: 'Heslo',
|
||||||
SU_PASSWORD: 'su heslo',
|
SU_PASSWORD: 'su heslo',
|
||||||
SETTINGS_OF: '{0} Nastavenia',
|
SETTINGS_OF: '{0} Nastavenia',
|
||||||
HELP_OF: '{0} Pomoc',
|
HELP: 'Pomoc',
|
||||||
LOGGED_IN: 'Prihlásený ako {name}',
|
LOGGED_IN: 'Prihlásený ako {name}',
|
||||||
PLEASE_SIGNIN: 'Ak chcete pokračovať, prihláste sa',
|
PLEASE_SIGNIN: 'Ak chcete pokračovať, prihláste sa',
|
||||||
UPLOAD_SUCCESSFUL: 'Nahratie úspešné',
|
UPLOAD_SUCCESSFUL: 'Nahratie úspešné',
|
||||||
@@ -161,7 +161,7 @@ const sk: Translation = {
|
|||||||
HELP_INFORMATION_5: 'EMS-ESP je bezplatný a open source projekt. Podporte jeho budúci vývoj tým, že mu dáte hviezdičku na GitHub!',
|
HELP_INFORMATION_5: 'EMS-ESP je bezplatný a open source projekt. Podporte jeho budúci vývoj tým, že mu dáte hviezdičku na GitHub!',
|
||||||
UPLOAD: 'Nahrať',
|
UPLOAD: 'Nahrať',
|
||||||
DOWNLOAD: '{{S|s|s}}tiahnuť',
|
DOWNLOAD: '{{S|s|s}}tiahnuť',
|
||||||
INSTALL: 'Inštalovať',
|
INSTALL: 'Inštalovať {0}',
|
||||||
ABORTED: 'zrušené',
|
ABORTED: 'zrušené',
|
||||||
FAILED: 'chybné',
|
FAILED: 'chybné',
|
||||||
SUCCESSFUL: 'úspešné',
|
SUCCESSFUL: 'úspešné',
|
||||||
@@ -169,16 +169,13 @@ const sk: Translation = {
|
|||||||
LOG_OF: '{0} Log',
|
LOG_OF: '{0} Log',
|
||||||
STATUS_OF: '{0} Stav',
|
STATUS_OF: '{0} Stav',
|
||||||
DOWNLOAD_UPLOAD: 'Stiahnuť/Nahrať',
|
DOWNLOAD_UPLOAD: 'Stiahnuť/Nahrať',
|
||||||
VERSION_ON: 'Momentálne nainštalovaná verzia: ',
|
|
||||||
CLOSE: 'Zatvoriť',
|
CLOSE: 'Zatvoriť',
|
||||||
USE: 'Použiť',
|
USE: 'Použiť',
|
||||||
FACTORY_RESET: 'Továrenské nastavenia',
|
FACTORY_RESET: 'Továrenské nastavenia',
|
||||||
SYSTEM_FACTORY_TEXT: 'Zariadenie bolo obnovené z výroby a teraz sa reštartuje',
|
SYSTEM_FACTORY_TEXT: 'Zariadenie bolo obnovené z výroby a teraz sa reštartuje',
|
||||||
SYSTEM_FACTORY_TEXT_DIALOG: 'Naozaj chcete resetovať EMS-ESP na predvolené výrobné nastavenia?',
|
SYSTEM_FACTORY_TEXT_DIALOG: 'Naozaj chcete resetovať EMS-ESP na predvolené výrobné nastavenia?',
|
||||||
THE_LATEST: 'Posledná',
|
STABLE: 'Stable', // TODO translate
|
||||||
OFFICIAL: 'officiálna',
|
DEVELOPMENT: 'Vývojárska',
|
||||||
DEVELOPMENT: 'vývojárska',
|
|
||||||
RELEASE_IS: 'verzia je',
|
|
||||||
RELEASE_NOTES: 'poznámky k verzii',
|
RELEASE_NOTES: 'poznámky k verzii',
|
||||||
EMS_ESP_VER: 'EMS-ESP verzia',
|
EMS_ESP_VER: 'EMS-ESP verzia',
|
||||||
UPTIME: 'Beh systému',
|
UPTIME: 'Beh systému',
|
||||||
@@ -335,7 +332,15 @@ const sk: Translation = {
|
|||||||
UPLOAD_DRAG: 'drag and drop a file here or click to select one', // TODO translate
|
UPLOAD_DRAG: 'drag and drop a file here or click to select one', // TODO translate
|
||||||
SERVICES: 'Services', // TODO translate
|
SERVICES: 'Services', // TODO translate
|
||||||
ALLVALUES: 'All Values', // TODO translate
|
ALLVALUES: 'All Values', // TODO translate
|
||||||
SPECIAL_FUNCTIONS: 'Special Functions' // TODO translate
|
SPECIAL_FUNCTIONS: 'Special Functions', // TODO translate
|
||||||
|
WAIT_FIRMWARE: 'Firmware is uploading and installing', // TODO translate
|
||||||
|
INSTALL_VERSION: 'This will install vesion {0}. Are you sure?', // TODO translate
|
||||||
|
SWITCH_DEV: 'switch to the development version', // TODO translate
|
||||||
|
UPGRADE_AVAILABLE: 'There is a firmware upgrade available!', // TODO translate
|
||||||
|
LATEST_VERSION: 'You are using the latest version.', // TODO translate
|
||||||
|
PLEASE_WAIT: 'Please wait', // TODO translate
|
||||||
|
RESTARTING_PRE: 'Initializing', // TODO translate
|
||||||
|
RESTARTING_POST: 'Reloading' // TODO translate
|
||||||
};
|
};
|
||||||
|
|
||||||
export default sk;
|
export default sk;
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ const sv: Translation = {
|
|||||||
PASSWORD: 'Lösenord',
|
PASSWORD: 'Lösenord',
|
||||||
SU_PASSWORD: 'su Lösenord',
|
SU_PASSWORD: 'su Lösenord',
|
||||||
SETTINGS_OF: '{0} Inställningar',
|
SETTINGS_OF: '{0} Inställningar',
|
||||||
HELP_OF: '{0} Hjälp',
|
HELP: 'Hjälp',
|
||||||
LOGGED_IN: 'Inloggad som {name}',
|
LOGGED_IN: 'Inloggad som {name}',
|
||||||
PLEASE_SIGNIN: 'Vänligen logga in för att fortsätta',
|
PLEASE_SIGNIN: 'Vänligen logga in för att fortsätta',
|
||||||
UPLOAD_SUCCESSFUL: 'Uppladdning lyckades',
|
UPLOAD_SUCCESSFUL: 'Uppladdning lyckades',
|
||||||
@@ -161,7 +161,7 @@ const sv: Translation = {
|
|||||||
HELP_INFORMATION_5: 'EMS-ESP är gratis och är öppen källkod. Bidra till utvecklingen genom att ge oss en stjärna på GitHub!',
|
HELP_INFORMATION_5: 'EMS-ESP är gratis och är öppen källkod. Bidra till utvecklingen genom att ge oss en stjärna på GitHub!',
|
||||||
UPLOAD: 'Uppladdning',
|
UPLOAD: 'Uppladdning',
|
||||||
DOWNLOAD: '{{N|n|n}}edladdning',
|
DOWNLOAD: '{{N|n|n}}edladdning',
|
||||||
INSTALL: 'Installera',
|
INSTALL: 'Installera {0}',
|
||||||
ABORTED: 'Avbruten',
|
ABORTED: 'Avbruten',
|
||||||
FAILED: 'Misslyckades',
|
FAILED: 'Misslyckades',
|
||||||
SUCCESSFUL: 'Lyckades',
|
SUCCESSFUL: 'Lyckades',
|
||||||
@@ -169,16 +169,13 @@ const sv: Translation = {
|
|||||||
LOG_OF: '{0} Logg',
|
LOG_OF: '{0} Logg',
|
||||||
STATUS_OF: '{0} Status',
|
STATUS_OF: '{0} Status',
|
||||||
DOWNLOAD_UPLOAD: 'Nedladdning/Upp',
|
DOWNLOAD_UPLOAD: 'Nedladdning/Upp',
|
||||||
VERSION_ON: 'You are currently on', // TODO translate
|
|
||||||
CLOSE: 'Stäng',
|
CLOSE: 'Stäng',
|
||||||
USE: 'Använd',
|
USE: 'Använd',
|
||||||
FACTORY_RESET: 'Fabriksåterställning',
|
FACTORY_RESET: 'Fabriksåterställning',
|
||||||
SYSTEM_FACTORY_TEXT: 'Enheten har blivit fabriksåterställd och startar nu om',
|
SYSTEM_FACTORY_TEXT: 'Enheten har blivit fabriksåterställd och startar nu om',
|
||||||
SYSTEM_FACTORY_TEXT_DIALOG: 'Är du säker att du vill fabriksåterställa enheten?',
|
SYSTEM_FACTORY_TEXT_DIALOG: 'Är du säker att du vill fabriksåterställa enheten?',
|
||||||
THE_LATEST: 'Den senaste',
|
STABLE: 'Stable', // TODO translate
|
||||||
OFFICIAL: 'officiell',
|
DEVELOPMENT: 'Utveckling',
|
||||||
DEVELOPMENT: 'utveckling',
|
|
||||||
RELEASE_IS: 'release är',
|
|
||||||
RELEASE_NOTES: 'release-logg',
|
RELEASE_NOTES: 'release-logg',
|
||||||
EMS_ESP_VER: 'EMS-ESP Version',
|
EMS_ESP_VER: 'EMS-ESP Version',
|
||||||
UPTIME: 'Systemets Upptid',
|
UPTIME: 'Systemets Upptid',
|
||||||
@@ -335,7 +332,15 @@ const sv: Translation = {
|
|||||||
UPLOAD_DRAG: 'drag and drop a file here or click to select one', // TODO translate
|
UPLOAD_DRAG: 'drag and drop a file here or click to select one', // TODO translate
|
||||||
SERVICES: 'Services', // TODO translate
|
SERVICES: 'Services', // TODO translate
|
||||||
ALLVALUES: 'All Values', // TODO translate
|
ALLVALUES: 'All Values', // TODO translate
|
||||||
SPECIAL_FUNCTIONS: 'Special Functions' // TODO translate
|
SPECIAL_FUNCTIONS: 'Special Functions', // TODO translate
|
||||||
|
WAIT_FIRMWARE: 'Firmware is uploading and installing', // TODO translate
|
||||||
|
INSTALL_VERSION: 'This will install vesion {0}. Are you sure?', // TODO translate
|
||||||
|
SWITCH_DEV: 'switch to the development version', // TODO translate
|
||||||
|
UPGRADE_AVAILABLE: 'There is a firmware upgrade available!', // TODO translate
|
||||||
|
LATEST_VERSION: 'You are using the latest version.', // TODO translate
|
||||||
|
PLEASE_WAIT: 'Please wait', // TODO translate
|
||||||
|
RESTARTING_PRE: 'Initializing', // TODO translate
|
||||||
|
RESTARTING_POST: 'Reloading' // TODO translate
|
||||||
};
|
};
|
||||||
|
|
||||||
export default sv;
|
export default sv;
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ const tr: Translation = {
|
|||||||
PASSWORD: 'Şifre',
|
PASSWORD: 'Şifre',
|
||||||
SU_PASSWORD: 'SK Şifresi',
|
SU_PASSWORD: 'SK Şifresi',
|
||||||
SETTINGS_OF: '{0} Ayarlar',
|
SETTINGS_OF: '{0} Ayarlar',
|
||||||
HELP_OF: '{0} Yardım',
|
HELP: 'Yardım',
|
||||||
LOGGED_IN: '{name} olarak giriş yapıldı',
|
LOGGED_IN: '{name} olarak giriş yapıldı',
|
||||||
PLEASE_SIGNIN: 'Lütfen devam etmek için giriş yapın',
|
PLEASE_SIGNIN: 'Lütfen devam etmek için giriş yapın',
|
||||||
UPLOAD_SUCCESSFUL: 'Yükleme tamamlandı',
|
UPLOAD_SUCCESSFUL: 'Yükleme tamamlandı',
|
||||||
@@ -161,7 +161,7 @@ const tr: Translation = {
|
|||||||
HELP_INFORMATION_5: 'EMS-ESP ücretsiz ve açık kaynaklı bir projedir. Lütfen geliştirmeyi desteklemek için GitHubda projeye yıldız verin!',
|
HELP_INFORMATION_5: 'EMS-ESP ücretsiz ve açık kaynaklı bir projedir. Lütfen geliştirmeyi desteklemek için GitHubda projeye yıldız verin!',
|
||||||
UPLOAD: 'Yükleme',
|
UPLOAD: 'Yükleme',
|
||||||
DOWNLOAD: '{{İ|i|i}}İndirme',
|
DOWNLOAD: '{{İ|i|i}}İndirme',
|
||||||
INSTALL: 'Düzenlemek',
|
INSTALL: 'Düzenlemek {0}',
|
||||||
ABORTED: 'iptal edildi',
|
ABORTED: 'iptal edildi',
|
||||||
FAILED: 'başarısız',
|
FAILED: 'başarısız',
|
||||||
SUCCESSFUL: 'başarılı',
|
SUCCESSFUL: 'başarılı',
|
||||||
@@ -169,16 +169,13 @@ const tr: Translation = {
|
|||||||
LOG_OF: '{0} Kaydı',
|
LOG_OF: '{0} Kaydı',
|
||||||
STATUS_OF: '{0} Durumu',
|
STATUS_OF: '{0} Durumu',
|
||||||
DOWNLOAD_UPLOAD: 'İndirme/Yükleme',
|
DOWNLOAD_UPLOAD: 'İndirme/Yükleme',
|
||||||
VERSION_ON: 'You are currently on', // TODO translate
|
|
||||||
CLOSE: 'Kapat',
|
CLOSE: 'Kapat',
|
||||||
USE: 'KUllan',
|
USE: 'KUllan',
|
||||||
FACTORY_RESET: 'Fabrika ayarına dönme',
|
FACTORY_RESET: 'Fabrika ayarına dönme',
|
||||||
SYSTEM_FACTORY_TEXT: 'Cihaz fabrika ayarlarına döndü ve şimdi yendiden başlatılacak',
|
SYSTEM_FACTORY_TEXT: 'Cihaz fabrika ayarlarına döndü ve şimdi yendiden başlatılacak',
|
||||||
SYSTEM_FACTORY_TEXT_DIALOG: 'Cihazı fabrika ayarlarına döndürmek istediğinize emin misiniz?',
|
SYSTEM_FACTORY_TEXT_DIALOG: 'Cihazı fabrika ayarlarına döndürmek istediğinize emin misiniz?',
|
||||||
THE_LATEST: 'En son',
|
STABLE: 'Stable', // TODO translate
|
||||||
OFFICIAL: 'resmi',
|
DEVELOPMENT: 'Geliştirme',
|
||||||
DEVELOPMENT: 'geliştirme',
|
|
||||||
RELEASE_IS: 'release is', // TODO translate
|
|
||||||
RELEASE_NOTES: 'yayınlanma notları',
|
RELEASE_NOTES: 'yayınlanma notları',
|
||||||
EMS_ESP_VER: 'EMS-ESP Sürümü',
|
EMS_ESP_VER: 'EMS-ESP Sürümü',
|
||||||
UPTIME: 'Sistem Çalışma Süresi',
|
UPTIME: 'Sistem Çalışma Süresi',
|
||||||
@@ -335,7 +332,15 @@ const tr: Translation = {
|
|||||||
UPLOAD_DRAG: 'drag and drop a file here or click to select one', // TODO translate
|
UPLOAD_DRAG: 'drag and drop a file here or click to select one', // TODO translate
|
||||||
SERVICES: 'Services', // TODO translate
|
SERVICES: 'Services', // TODO translate
|
||||||
ALLVALUES: 'All Values', // TODO translate
|
ALLVALUES: 'All Values', // TODO translate
|
||||||
SPECIAL_FUNCTIONS: 'Special Functions' // TODO translate
|
SPECIAL_FUNCTIONS: 'Special Functions', // TODO translate
|
||||||
|
WAIT_FIRMWARE: 'Firmware is uploading and installing', // TODO translate
|
||||||
|
INSTALL_VERSION: 'This will install vesion {0}. Are you sure?', // TODO translate
|
||||||
|
SWITCH_DEV: 'switch to the development version', // TODO translate
|
||||||
|
UPGRADE_AVAILABLE: 'There is a firmware upgrade available!', // TODO translate
|
||||||
|
LATEST_VERSION: 'You are using the latest version.', // TODO translate
|
||||||
|
PLEASE_WAIT: 'Please wait', // TODO translate
|
||||||
|
RESTARTING_PRE: 'Initializing', // TODO translate
|
||||||
|
RESTARTING_POST: 'Reloading' // TODO translate
|
||||||
};
|
};
|
||||||
|
|
||||||
export default tr;
|
export default tr;
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ import type { NetworkConnectionStatus } from './network';
|
|||||||
|
|
||||||
export interface HardwareStatus {
|
export interface HardwareStatus {
|
||||||
emsesp_version: string;
|
emsesp_version: string;
|
||||||
|
build_flags: string;
|
||||||
esp_platform: string;
|
esp_platform: string;
|
||||||
max_alloc_heap: number;
|
max_alloc_heap: number;
|
||||||
cpu_type: string;
|
cpu_type: string;
|
||||||
@@ -26,11 +27,13 @@ export interface HardwareStatus {
|
|||||||
free_psram?: number;
|
free_psram?: number;
|
||||||
free_caps: number;
|
free_caps: number;
|
||||||
model: string;
|
model: string;
|
||||||
|
has_loader: boolean;
|
||||||
|
has_partition: boolean;
|
||||||
|
status: string;
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface SystemStatus {
|
export interface SystemStatus {
|
||||||
emsesp_version: string;
|
emsesp_version: string;
|
||||||
esp_platform: string;
|
|
||||||
status: busConnectionStatus;
|
status: busConnectionStatus;
|
||||||
uptime: number;
|
uptime: number;
|
||||||
bus_uptime: number;
|
bus_uptime: number;
|
||||||
@@ -43,8 +46,6 @@ export interface SystemStatus {
|
|||||||
ap_status: boolean;
|
ap_status: boolean;
|
||||||
network_status: NetworkConnectionStatus;
|
network_status: NetworkConnectionStatus;
|
||||||
wifi_rssi: number;
|
wifi_rssi: number;
|
||||||
has_loader: boolean;
|
|
||||||
has_partition: boolean;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
export enum LogLevel {
|
export enum LogLevel {
|
||||||
|
|||||||
@@ -1,4 +1,9 @@
|
|||||||
export const numberValue = (value: number) => (isNaN(value) ? '' : value.toString());
|
export const numberValue = (value?: number) => {
|
||||||
|
if (value !== undefined) {
|
||||||
|
return isNaN(value) ? '' : value.toString();
|
||||||
|
}
|
||||||
|
return '';
|
||||||
|
};
|
||||||
|
|
||||||
export const extractEventValue = (event: React.ChangeEvent<HTMLInputElement>) => {
|
export const extractEventValue = (event: React.ChangeEvent<HTMLInputElement>) => {
|
||||||
switch (event.target.type) {
|
switch (event.target.type) {
|
||||||
|
|||||||
@@ -5,21 +5,21 @@ __metadata:
|
|||||||
version: 8
|
version: 8
|
||||||
cacheKey: 10c0
|
cacheKey: 10c0
|
||||||
|
|
||||||
"@alova/adapter-xhr@npm:2.0.5":
|
"@alova/adapter-xhr@npm:2.0.6":
|
||||||
version: 2.0.5
|
version: 2.0.6
|
||||||
resolution: "@alova/adapter-xhr@npm:2.0.5"
|
resolution: "@alova/adapter-xhr@npm:2.0.6"
|
||||||
dependencies:
|
dependencies:
|
||||||
"@alova/shared": "npm:^1.0.4"
|
"@alova/shared": "npm:^1.0.5"
|
||||||
peerDependencies:
|
peerDependencies:
|
||||||
alova: ^3.0.9
|
alova: ^3.0.14
|
||||||
checksum: 10c0/9c48689e7dd081843726c4d8a93abbb7aca8b4654c606e67b81ab23de42542d5c17f2fbff7b65d4b75c7d484b42a74e76ba77e61446021620a256051eb82496c
|
checksum: 10c0/8a944d582ded17ff74b020a1e5defd98578a65520bde3b8a7e4586d8d0e54e40ddd03f35e1d6f8080ea9a8ac5bcba6933e861a67862278d9bd6aa8b6179f607f
|
||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"@alova/shared@npm:^1.0.4":
|
"@alova/shared@npm:^1.0.5":
|
||||||
version: 1.0.4
|
version: 1.0.5
|
||||||
resolution: "@alova/shared@npm:1.0.4"
|
resolution: "@alova/shared@npm:1.0.5"
|
||||||
checksum: 10c0/308b3163ee81fe98bb8372bd8a7df2a053be508167c86c6cfa2b3610c79389621e9a3466c391210e3f058799733465cf7dd153fcae536b03ea58dabff9d6eab4
|
checksum: 10c0/58d99d8b6b026e60c7184c55bdccd43d3b39bec598722135b272fd3c355942facc40f9433dceb6fcabb6631b87766c7227432c2a2bf3ae281d9a26b2eba2a69d
|
||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
@@ -287,7 +287,7 @@ __metadata:
|
|||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"@babel/runtime@npm:^7.0.0, @babel/runtime@npm:^7.12.5, @babel/runtime@npm:^7.18.3, @babel/runtime@npm:^7.21.0, @babel/runtime@npm:^7.23.9, @babel/runtime@npm:^7.5.5, @babel/runtime@npm:^7.8.7":
|
"@babel/runtime@npm:^7.0.0, @babel/runtime@npm:^7.12.5, @babel/runtime@npm:^7.18.3, @babel/runtime@npm:^7.21.0, @babel/runtime@npm:^7.5.5, @babel/runtime@npm:^7.8.7":
|
||||||
version: 7.25.0
|
version: 7.25.0
|
||||||
resolution: "@babel/runtime@npm:7.25.0"
|
resolution: "@babel/runtime@npm:7.25.0"
|
||||||
dependencies:
|
dependencies:
|
||||||
@@ -296,6 +296,15 @@ __metadata:
|
|||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
|
"@babel/runtime@npm:^7.25.0":
|
||||||
|
version: 7.25.4
|
||||||
|
resolution: "@babel/runtime@npm:7.25.4"
|
||||||
|
dependencies:
|
||||||
|
regenerator-runtime: "npm:^0.14.0"
|
||||||
|
checksum: 10c0/33e937e685f0bfc2d40c219261e2e50d0df7381a6e7cbf56b770e0c5d77cb0c21bf4d97da566cf0164317ed7508e992082c7b6cce7aaa3b17da5794f93fbfb46
|
||||||
|
languageName: node
|
||||||
|
linkType: hard
|
||||||
|
|
||||||
"@babel/template@npm:^7.24.7, @babel/template@npm:^7.25.0":
|
"@babel/template@npm:^7.24.7, @babel/template@npm:^7.25.0":
|
||||||
version: 7.25.0
|
version: 7.25.0
|
||||||
resolution: "@babel/template@npm:7.25.0"
|
resolution: "@babel/template@npm:7.25.0"
|
||||||
@@ -380,7 +389,7 @@ __metadata:
|
|||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"@emotion/cache@npm:^11.11.0, @emotion/cache@npm:^11.13.0":
|
"@emotion/cache@npm:^11.13.0, @emotion/cache@npm:^11.13.1":
|
||||||
version: 11.13.1
|
version: 11.13.1
|
||||||
resolution: "@emotion/cache@npm:11.13.1"
|
resolution: "@emotion/cache@npm:11.13.1"
|
||||||
dependencies:
|
dependencies:
|
||||||
@@ -416,14 +425,14 @@ __metadata:
|
|||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"@emotion/react@npm:^11.13.0":
|
"@emotion/react@npm:^11.13.3":
|
||||||
version: 11.13.0
|
version: 11.13.3
|
||||||
resolution: "@emotion/react@npm:11.13.0"
|
resolution: "@emotion/react@npm:11.13.3"
|
||||||
dependencies:
|
dependencies:
|
||||||
"@babel/runtime": "npm:^7.18.3"
|
"@babel/runtime": "npm:^7.18.3"
|
||||||
"@emotion/babel-plugin": "npm:^11.12.0"
|
"@emotion/babel-plugin": "npm:^11.12.0"
|
||||||
"@emotion/cache": "npm:^11.13.0"
|
"@emotion/cache": "npm:^11.13.0"
|
||||||
"@emotion/serialize": "npm:^1.3.0"
|
"@emotion/serialize": "npm:^1.3.1"
|
||||||
"@emotion/use-insertion-effect-with-fallbacks": "npm:^1.1.0"
|
"@emotion/use-insertion-effect-with-fallbacks": "npm:^1.1.0"
|
||||||
"@emotion/utils": "npm:^1.4.0"
|
"@emotion/utils": "npm:^1.4.0"
|
||||||
"@emotion/weak-memoize": "npm:^0.4.0"
|
"@emotion/weak-memoize": "npm:^0.4.0"
|
||||||
@@ -433,7 +442,7 @@ __metadata:
|
|||||||
peerDependenciesMeta:
|
peerDependenciesMeta:
|
||||||
"@types/react":
|
"@types/react":
|
||||||
optional: true
|
optional: true
|
||||||
checksum: 10c0/28ee0ba6818ccf2726b31da0ecf3a6ac091983c8e03b3f5d6d2eb02165e3b3d1b95c267fccd08bff2f9769e0ff7361d791810583b858a9dd788de7cf82f6667d
|
checksum: 10c0/a55e770b9ea35de5d35db05a7ad40a4a3f442809fa8e4fabaf56da63ac9444f09aaf691c4e75a1455dc388991ab0c0ab4e253ce67c5836f27513e45ebd01b673
|
||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
@@ -450,6 +459,19 @@ __metadata:
|
|||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
|
"@emotion/serialize@npm:^1.3.1":
|
||||||
|
version: 1.3.1
|
||||||
|
resolution: "@emotion/serialize@npm:1.3.1"
|
||||||
|
dependencies:
|
||||||
|
"@emotion/hash": "npm:^0.9.2"
|
||||||
|
"@emotion/memoize": "npm:^0.9.0"
|
||||||
|
"@emotion/unitless": "npm:^0.10.0"
|
||||||
|
"@emotion/utils": "npm:^1.4.0"
|
||||||
|
csstype: "npm:^3.0.2"
|
||||||
|
checksum: 10c0/ac7158e2881b5f3f9ca1e4d865186d38623f997de888675297e0928b202d16273e43b0a19aa021c0b706edefae31118bc97c5fab095820109d09d502dbcf2092
|
||||||
|
languageName: node
|
||||||
|
linkType: hard
|
||||||
|
|
||||||
"@emotion/sheet@npm:^1.4.0":
|
"@emotion/sheet@npm:^1.4.0":
|
||||||
version: 1.4.0
|
version: 1.4.0
|
||||||
resolution: "@emotion/sheet@npm:1.4.0"
|
resolution: "@emotion/sheet@npm:1.4.0"
|
||||||
@@ -477,6 +499,13 @@ __metadata:
|
|||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
|
"@emotion/unitless@npm:^0.10.0":
|
||||||
|
version: 0.10.0
|
||||||
|
resolution: "@emotion/unitless@npm:0.10.0"
|
||||||
|
checksum: 10c0/150943192727b7650eb9a6851a98034ddb58a8b6958b37546080f794696141c3760966ac695ab9af97efe10178690987aee4791f9f0ad1ff76783cdca83c1d49
|
||||||
|
languageName: node
|
||||||
|
linkType: hard
|
||||||
|
|
||||||
"@emotion/unitless@npm:^0.9.0":
|
"@emotion/unitless@npm:^0.9.0":
|
||||||
version: 0.9.0
|
version: 0.9.0
|
||||||
resolution: "@emotion/unitless@npm:0.9.0"
|
resolution: "@emotion/unitless@npm:0.9.0"
|
||||||
@@ -693,14 +722,14 @@ __metadata:
|
|||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"@eslint/config-array@npm:^0.17.1":
|
"@eslint/config-array@npm:^0.18.0":
|
||||||
version: 0.17.1
|
version: 0.18.0
|
||||||
resolution: "@eslint/config-array@npm:0.17.1"
|
resolution: "@eslint/config-array@npm:0.18.0"
|
||||||
dependencies:
|
dependencies:
|
||||||
"@eslint/object-schema": "npm:^2.1.4"
|
"@eslint/object-schema": "npm:^2.1.4"
|
||||||
debug: "npm:^4.3.1"
|
debug: "npm:^4.3.1"
|
||||||
minimatch: "npm:^3.1.2"
|
minimatch: "npm:^3.1.2"
|
||||||
checksum: 10c0/b986a0a96f2b42467578968ce3d4ae3b9284e587f8490f2dcdc44ff1b8d30580c62b221da6e58d07b09e156c3050e2dc38267f9370521d9cafc099c4e30154ef
|
checksum: 10c0/0234aeb3e6b052ad2402a647d0b4f8a6aa71524bafe1adad0b8db1dfe94d7f5f26d67c80f79bb37ac61361a1d4b14bb8fb475efe501de37263cf55eabb79868f
|
||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
@@ -721,10 +750,10 @@ __metadata:
|
|||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"@eslint/js@npm:9.9.0, @eslint/js@npm:^9.9.0":
|
"@eslint/js@npm:9.9.1, @eslint/js@npm:^9.9.1":
|
||||||
version: 9.9.0
|
version: 9.9.1
|
||||||
resolution: "@eslint/js@npm:9.9.0"
|
resolution: "@eslint/js@npm:9.9.1"
|
||||||
checksum: 10c0/6ec9f1f0d576132444d6a5c66a8a08b0be9444e3ebb563fa6a6bebcf5299df3da7e454dc04c0fa601bb811197f00764b3a04430d8458cdb8e3a4677993d23f30
|
checksum: 10c0/a3a91de2ce78469f7c4eee78c1eba77360706e1d0fa0ace2e19102079bcf237b851217c85ea501dc92c4c3719d60d9df966977abc8554d4c38e3638c1f53dcb2
|
||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
@@ -815,41 +844,41 @@ __metadata:
|
|||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"@mui/core-downloads-tracker@npm:^5.16.7":
|
"@mui/core-downloads-tracker@npm:^6.0.1":
|
||||||
version: 5.16.7
|
version: 6.0.1
|
||||||
resolution: "@mui/core-downloads-tracker@npm:5.16.7"
|
resolution: "@mui/core-downloads-tracker@npm:6.0.1"
|
||||||
checksum: 10c0/4644c850160d01232c1abdbed141e4fa70e155891a9c68f0c2cc3054b4a3cdc1d28cf2d6665366fd8c725b2b091db677e11831552889a4e4e14f1e44450cf654
|
checksum: 10c0/504cb0244af97c0de5b9e09e2da28a2fa5f937879f07c743618bc63c036d75864759bfb3059928f3a840de5cd5a182d48e40d1dbdfe3c7d51dacee2ff0720196
|
||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"@mui/icons-material@npm:^5.16.7":
|
"@mui/icons-material@npm:^6.0.1":
|
||||||
version: 5.16.7
|
version: 6.0.1
|
||||||
resolution: "@mui/icons-material@npm:5.16.7"
|
resolution: "@mui/icons-material@npm:6.0.1"
|
||||||
dependencies:
|
dependencies:
|
||||||
"@babel/runtime": "npm:^7.23.9"
|
"@babel/runtime": "npm:^7.25.0"
|
||||||
peerDependencies:
|
peerDependencies:
|
||||||
"@mui/material": ^5.0.0
|
"@mui/material": ^6.0.1
|
||||||
"@types/react": ^17.0.0 || ^18.0.0
|
"@types/react": ^17.0.0 || ^18.0.0 || ^19.0.0
|
||||||
react: ^17.0.0 || ^18.0.0
|
react: ^17.0.0 || ^18.0.0 || ^19.0.0
|
||||||
peerDependenciesMeta:
|
peerDependenciesMeta:
|
||||||
"@types/react":
|
"@types/react":
|
||||||
optional: true
|
optional: true
|
||||||
checksum: 10c0/49bab1754334798acaf93187d27200cf90d7c50b6a019531594aeac9e5ced9168281fec70bb040792dc86c8bc0d3bf9a876f22cfbf86ad07941ca6bc6c564921
|
checksum: 10c0/fac4c194e4ac37f695be7f694cbbd240975326daba2ca24a2c9997e06c9d1bf7bd7fa8d4f0cf08216c4320b97235434eb3661dcce1c70bc0d7c521fd4d0a7b6a
|
||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"@mui/material@npm:^5.16.7":
|
"@mui/material@npm:^6.0.1":
|
||||||
version: 5.16.7
|
version: 6.0.1
|
||||||
resolution: "@mui/material@npm:5.16.7"
|
resolution: "@mui/material@npm:6.0.1"
|
||||||
dependencies:
|
dependencies:
|
||||||
"@babel/runtime": "npm:^7.23.9"
|
"@babel/runtime": "npm:^7.25.0"
|
||||||
"@mui/core-downloads-tracker": "npm:^5.16.7"
|
"@mui/core-downloads-tracker": "npm:^6.0.1"
|
||||||
"@mui/system": "npm:^5.16.7"
|
"@mui/system": "npm:^6.0.1"
|
||||||
"@mui/types": "npm:^7.2.15"
|
"@mui/types": "npm:^7.2.16"
|
||||||
"@mui/utils": "npm:^5.16.6"
|
"@mui/utils": "npm:^6.0.1"
|
||||||
"@popperjs/core": "npm:^2.11.8"
|
"@popperjs/core": "npm:^2.11.8"
|
||||||
"@types/react-transition-group": "npm:^4.4.10"
|
"@types/react-transition-group": "npm:^4.4.11"
|
||||||
clsx: "npm:^2.1.0"
|
clsx: "npm:^2.1.1"
|
||||||
csstype: "npm:^3.1.3"
|
csstype: "npm:^3.1.3"
|
||||||
prop-types: "npm:^15.8.1"
|
prop-types: "npm:^15.8.1"
|
||||||
react-is: "npm:^18.3.1"
|
react-is: "npm:^18.3.1"
|
||||||
@@ -857,75 +886,78 @@ __metadata:
|
|||||||
peerDependencies:
|
peerDependencies:
|
||||||
"@emotion/react": ^11.5.0
|
"@emotion/react": ^11.5.0
|
||||||
"@emotion/styled": ^11.3.0
|
"@emotion/styled": ^11.3.0
|
||||||
"@types/react": ^17.0.0 || ^18.0.0
|
"@mui/material-pigment-css": ^6.0.1
|
||||||
react: ^17.0.0 || ^18.0.0
|
"@types/react": ^17.0.0 || ^18.0.0 || ^19.0.0
|
||||||
react-dom: ^17.0.0 || ^18.0.0
|
react: ^17.0.0 || ^18.0.0 || ^19.0.0
|
||||||
|
react-dom: ^17.0.0 || ^18.0.0 || ^19.0.0
|
||||||
peerDependenciesMeta:
|
peerDependenciesMeta:
|
||||||
"@emotion/react":
|
"@emotion/react":
|
||||||
optional: true
|
optional: true
|
||||||
"@emotion/styled":
|
"@emotion/styled":
|
||||||
optional: true
|
optional: true
|
||||||
|
"@mui/material-pigment-css":
|
||||||
|
optional: true
|
||||||
"@types/react":
|
"@types/react":
|
||||||
optional: true
|
optional: true
|
||||||
checksum: 10c0/b11419c1a77835413471f9352586fed65fb5de19c6737e121669da0484c441c7dd9939aa73fdad779482c30efaa694fb9fdcf18dcf418af07881e60eaff92b4f
|
checksum: 10c0/3516bee79b65d3680d424d3f8946f0bcce554393af21706ffbe993a90b7dd8ca3009cd62de9b84b4f78920e39f83616ff4b22d866b69903a282b0261b69c3e86
|
||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"@mui/private-theming@npm:^5.16.6":
|
"@mui/private-theming@npm:^6.0.1":
|
||||||
version: 5.16.6
|
version: 6.0.1
|
||||||
resolution: "@mui/private-theming@npm:5.16.6"
|
resolution: "@mui/private-theming@npm:6.0.1"
|
||||||
dependencies:
|
dependencies:
|
||||||
"@babel/runtime": "npm:^7.23.9"
|
"@babel/runtime": "npm:^7.25.0"
|
||||||
"@mui/utils": "npm:^5.16.6"
|
"@mui/utils": "npm:^6.0.1"
|
||||||
prop-types: "npm:^15.8.1"
|
prop-types: "npm:^15.8.1"
|
||||||
peerDependencies:
|
peerDependencies:
|
||||||
"@types/react": ^17.0.0 || ^18.0.0
|
"@types/react": ^17.0.0 || ^18.0.0 || ^19.0.0
|
||||||
react: ^17.0.0 || ^18.0.0
|
react: ^17.0.0 || ^18.0.0 || ^19.0.0
|
||||||
peerDependenciesMeta:
|
peerDependenciesMeta:
|
||||||
"@types/react":
|
"@types/react":
|
||||||
optional: true
|
optional: true
|
||||||
checksum: 10c0/0a09afd6c2be37197973a856049f97e2f17f3e5e6cf6387af036055342efbfcd7d7066dcad587886f25f491e5940e4e9bb7d732d5099eb85b53b84ef120e9555
|
checksum: 10c0/23d858aed7fa5075239352e63f66f714c5f5221308a5cc5a6faa917bd59ffa0f1f56a5d412c0ff011f39a0f268e7d8b363ebad78cc5e9f2014b16622a52257b1
|
||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"@mui/styled-engine@npm:^5.16.6":
|
"@mui/styled-engine@npm:^6.0.1":
|
||||||
version: 5.16.6
|
version: 6.0.1
|
||||||
resolution: "@mui/styled-engine@npm:5.16.6"
|
resolution: "@mui/styled-engine@npm:6.0.1"
|
||||||
dependencies:
|
dependencies:
|
||||||
"@babel/runtime": "npm:^7.23.9"
|
"@babel/runtime": "npm:^7.25.0"
|
||||||
"@emotion/cache": "npm:^11.11.0"
|
"@emotion/cache": "npm:^11.13.1"
|
||||||
csstype: "npm:^3.1.3"
|
csstype: "npm:^3.1.3"
|
||||||
prop-types: "npm:^15.8.1"
|
prop-types: "npm:^15.8.1"
|
||||||
peerDependencies:
|
peerDependencies:
|
||||||
"@emotion/react": ^11.4.1
|
"@emotion/react": ^11.4.1
|
||||||
"@emotion/styled": ^11.3.0
|
"@emotion/styled": ^11.3.0
|
||||||
react: ^17.0.0 || ^18.0.0
|
react: ^17.0.0 || ^18.0.0 || ^19.0.0
|
||||||
peerDependenciesMeta:
|
peerDependenciesMeta:
|
||||||
"@emotion/react":
|
"@emotion/react":
|
||||||
optional: true
|
optional: true
|
||||||
"@emotion/styled":
|
"@emotion/styled":
|
||||||
optional: true
|
optional: true
|
||||||
checksum: 10c0/b15e653c8756059c8ae2891ca54900573e22f6ed1aaf65a389ec838f2aca3252aeeb9a79aec4a43f080152b161a416e60b31a62595ba86ad5f72eda5642caaf2
|
checksum: 10c0/6616653b985dfe4e0650a8b8a0af7ae35fb7e30d98a8a20a0ab9bd4a44f475b29561a8bb401b3c91a4c571daa0229688717cdffc5ba6f8ac214b634e37343596
|
||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"@mui/system@npm:^5.16.7":
|
"@mui/system@npm:^6.0.1":
|
||||||
version: 5.16.7
|
version: 6.0.1
|
||||||
resolution: "@mui/system@npm:5.16.7"
|
resolution: "@mui/system@npm:6.0.1"
|
||||||
dependencies:
|
dependencies:
|
||||||
"@babel/runtime": "npm:^7.23.9"
|
"@babel/runtime": "npm:^7.25.0"
|
||||||
"@mui/private-theming": "npm:^5.16.6"
|
"@mui/private-theming": "npm:^6.0.1"
|
||||||
"@mui/styled-engine": "npm:^5.16.6"
|
"@mui/styled-engine": "npm:^6.0.1"
|
||||||
"@mui/types": "npm:^7.2.15"
|
"@mui/types": "npm:^7.2.16"
|
||||||
"@mui/utils": "npm:^5.16.6"
|
"@mui/utils": "npm:^6.0.1"
|
||||||
clsx: "npm:^2.1.0"
|
clsx: "npm:^2.1.1"
|
||||||
csstype: "npm:^3.1.3"
|
csstype: "npm:^3.1.3"
|
||||||
prop-types: "npm:^15.8.1"
|
prop-types: "npm:^15.8.1"
|
||||||
peerDependencies:
|
peerDependencies:
|
||||||
"@emotion/react": ^11.5.0
|
"@emotion/react": ^11.5.0
|
||||||
"@emotion/styled": ^11.3.0
|
"@emotion/styled": ^11.3.0
|
||||||
"@types/react": ^17.0.0 || ^18.0.0
|
"@types/react": ^17.0.0 || ^18.0.0 || ^19.0.0
|
||||||
react: ^17.0.0 || ^18.0.0
|
react: ^17.0.0 || ^18.0.0 || ^19.0.0
|
||||||
peerDependenciesMeta:
|
peerDependenciesMeta:
|
||||||
"@emotion/react":
|
"@emotion/react":
|
||||||
optional: true
|
optional: true
|
||||||
@@ -933,39 +965,39 @@ __metadata:
|
|||||||
optional: true
|
optional: true
|
||||||
"@types/react":
|
"@types/react":
|
||||||
optional: true
|
optional: true
|
||||||
checksum: 10c0/c07479c0728433847c1e3d7f57b96d9e0770cc814dfd1c9e070304955984a0b706832703b22388eb83906d1a01691f37047e2bac6a5e5c083e8c29a54302d476
|
checksum: 10c0/9268f2f66457c996e41a34449acf0152d99e079ffb00acaab861c13d1de85c80ed89b18aa086565d7e05611ccf577c56bee83672ad23e19d9f0fa069fa779bba
|
||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"@mui/types@npm:^7.2.15":
|
"@mui/types@npm:^7.2.16":
|
||||||
version: 7.2.15
|
version: 7.2.16
|
||||||
resolution: "@mui/types@npm:7.2.15"
|
resolution: "@mui/types@npm:7.2.16"
|
||||||
peerDependencies:
|
peerDependencies:
|
||||||
"@types/react": ^17.0.0 || ^18.0.0
|
"@types/react": ^17.0.0 || ^18.0.0 || ^19.0.0
|
||||||
peerDependenciesMeta:
|
peerDependenciesMeta:
|
||||||
"@types/react":
|
"@types/react":
|
||||||
optional: true
|
optional: true
|
||||||
checksum: 10c0/26c39674fe6f653a4c7406890b081b772e62efbd5b2754ab28bb8346819265d7c6496db8a8923230a84252ffd890e3d0b41642c151b78fdf8505336c92d78e14
|
checksum: 10c0/e51189d464e4217616a0d2bf45468b949c5b660b154fa03f1153456e4ef1422157454ed442dc9bde6a247166c8db7de6c405c629829525e3ca500ee9cf48f507
|
||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"@mui/utils@npm:^5.16.6":
|
"@mui/utils@npm:^6.0.1":
|
||||||
version: 5.16.6
|
version: 6.0.1
|
||||||
resolution: "@mui/utils@npm:5.16.6"
|
resolution: "@mui/utils@npm:6.0.1"
|
||||||
dependencies:
|
dependencies:
|
||||||
"@babel/runtime": "npm:^7.23.9"
|
"@babel/runtime": "npm:^7.25.0"
|
||||||
"@mui/types": "npm:^7.2.15"
|
"@mui/types": "npm:^7.2.16"
|
||||||
"@types/prop-types": "npm:^15.7.12"
|
"@types/prop-types": "npm:^15.7.12"
|
||||||
clsx: "npm:^2.1.1"
|
clsx: "npm:^2.1.1"
|
||||||
prop-types: "npm:^15.8.1"
|
prop-types: "npm:^15.8.1"
|
||||||
react-is: "npm:^18.3.1"
|
react-is: "npm:^18.3.1"
|
||||||
peerDependencies:
|
peerDependencies:
|
||||||
"@types/react": ^17.0.0 || ^18.0.0
|
"@types/react": ^17.0.0 || ^18.0.0 || ^19.0.0
|
||||||
react: ^17.0.0 || ^18.0.0
|
react: ^17.0.0 || ^18.0.0 || ^19.0.0
|
||||||
peerDependenciesMeta:
|
peerDependenciesMeta:
|
||||||
"@types/react":
|
"@types/react":
|
||||||
optional: true
|
optional: true
|
||||||
checksum: 10c0/2db3d11a83d7216fb8ceb459d4b30c795922c04cd8fabc26c721dd7b4f5ed5c4f3f3ace6ea70227bf3b79361bd58f13b723562cfd40255424d979ab238ab2e91
|
checksum: 10c0/2683da8f1c9410718aef2bdacef736d2a4f9dac32fd0202bcc35368c1d522a43dc857e6440b23a58e9025274e1acfab8ab3904dc5433b58c0d0db27a5fdcef3e
|
||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
@@ -1121,114 +1153,114 @@ __metadata:
|
|||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"@rollup/rollup-android-arm-eabi@npm:4.20.0":
|
"@rollup/rollup-android-arm-eabi@npm:4.21.1":
|
||||||
version: 4.20.0
|
version: 4.21.1
|
||||||
resolution: "@rollup/rollup-android-arm-eabi@npm:4.20.0"
|
resolution: "@rollup/rollup-android-arm-eabi@npm:4.21.1"
|
||||||
conditions: os=android & cpu=arm
|
conditions: os=android & cpu=arm
|
||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"@rollup/rollup-android-arm64@npm:4.20.0":
|
"@rollup/rollup-android-arm64@npm:4.21.1":
|
||||||
version: 4.20.0
|
version: 4.21.1
|
||||||
resolution: "@rollup/rollup-android-arm64@npm:4.20.0"
|
resolution: "@rollup/rollup-android-arm64@npm:4.21.1"
|
||||||
conditions: os=android & cpu=arm64
|
conditions: os=android & cpu=arm64
|
||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"@rollup/rollup-darwin-arm64@npm:4.20.0":
|
"@rollup/rollup-darwin-arm64@npm:4.21.1":
|
||||||
version: 4.20.0
|
version: 4.21.1
|
||||||
resolution: "@rollup/rollup-darwin-arm64@npm:4.20.0"
|
resolution: "@rollup/rollup-darwin-arm64@npm:4.21.1"
|
||||||
conditions: os=darwin & cpu=arm64
|
conditions: os=darwin & cpu=arm64
|
||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"@rollup/rollup-darwin-x64@npm:4.20.0":
|
"@rollup/rollup-darwin-x64@npm:4.21.1":
|
||||||
version: 4.20.0
|
version: 4.21.1
|
||||||
resolution: "@rollup/rollup-darwin-x64@npm:4.20.0"
|
resolution: "@rollup/rollup-darwin-x64@npm:4.21.1"
|
||||||
conditions: os=darwin & cpu=x64
|
conditions: os=darwin & cpu=x64
|
||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"@rollup/rollup-linux-arm-gnueabihf@npm:4.20.0":
|
"@rollup/rollup-linux-arm-gnueabihf@npm:4.21.1":
|
||||||
version: 4.20.0
|
version: 4.21.1
|
||||||
resolution: "@rollup/rollup-linux-arm-gnueabihf@npm:4.20.0"
|
resolution: "@rollup/rollup-linux-arm-gnueabihf@npm:4.21.1"
|
||||||
conditions: os=linux & cpu=arm & libc=glibc
|
conditions: os=linux & cpu=arm & libc=glibc
|
||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"@rollup/rollup-linux-arm-musleabihf@npm:4.20.0":
|
"@rollup/rollup-linux-arm-musleabihf@npm:4.21.1":
|
||||||
version: 4.20.0
|
version: 4.21.1
|
||||||
resolution: "@rollup/rollup-linux-arm-musleabihf@npm:4.20.0"
|
resolution: "@rollup/rollup-linux-arm-musleabihf@npm:4.21.1"
|
||||||
conditions: os=linux & cpu=arm & libc=musl
|
conditions: os=linux & cpu=arm & libc=musl
|
||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"@rollup/rollup-linux-arm64-gnu@npm:4.20.0":
|
"@rollup/rollup-linux-arm64-gnu@npm:4.21.1":
|
||||||
version: 4.20.0
|
version: 4.21.1
|
||||||
resolution: "@rollup/rollup-linux-arm64-gnu@npm:4.20.0"
|
resolution: "@rollup/rollup-linux-arm64-gnu@npm:4.21.1"
|
||||||
conditions: os=linux & cpu=arm64 & libc=glibc
|
conditions: os=linux & cpu=arm64 & libc=glibc
|
||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"@rollup/rollup-linux-arm64-musl@npm:4.20.0":
|
"@rollup/rollup-linux-arm64-musl@npm:4.21.1":
|
||||||
version: 4.20.0
|
version: 4.21.1
|
||||||
resolution: "@rollup/rollup-linux-arm64-musl@npm:4.20.0"
|
resolution: "@rollup/rollup-linux-arm64-musl@npm:4.21.1"
|
||||||
conditions: os=linux & cpu=arm64 & libc=musl
|
conditions: os=linux & cpu=arm64 & libc=musl
|
||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"@rollup/rollup-linux-powerpc64le-gnu@npm:4.20.0":
|
"@rollup/rollup-linux-powerpc64le-gnu@npm:4.21.1":
|
||||||
version: 4.20.0
|
version: 4.21.1
|
||||||
resolution: "@rollup/rollup-linux-powerpc64le-gnu@npm:4.20.0"
|
resolution: "@rollup/rollup-linux-powerpc64le-gnu@npm:4.21.1"
|
||||||
conditions: os=linux & cpu=ppc64 & libc=glibc
|
conditions: os=linux & cpu=ppc64 & libc=glibc
|
||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"@rollup/rollup-linux-riscv64-gnu@npm:4.20.0":
|
"@rollup/rollup-linux-riscv64-gnu@npm:4.21.1":
|
||||||
version: 4.20.0
|
version: 4.21.1
|
||||||
resolution: "@rollup/rollup-linux-riscv64-gnu@npm:4.20.0"
|
resolution: "@rollup/rollup-linux-riscv64-gnu@npm:4.21.1"
|
||||||
conditions: os=linux & cpu=riscv64 & libc=glibc
|
conditions: os=linux & cpu=riscv64 & libc=glibc
|
||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"@rollup/rollup-linux-s390x-gnu@npm:4.20.0":
|
"@rollup/rollup-linux-s390x-gnu@npm:4.21.1":
|
||||||
version: 4.20.0
|
version: 4.21.1
|
||||||
resolution: "@rollup/rollup-linux-s390x-gnu@npm:4.20.0"
|
resolution: "@rollup/rollup-linux-s390x-gnu@npm:4.21.1"
|
||||||
conditions: os=linux & cpu=s390x & libc=glibc
|
conditions: os=linux & cpu=s390x & libc=glibc
|
||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"@rollup/rollup-linux-x64-gnu@npm:4.20.0":
|
"@rollup/rollup-linux-x64-gnu@npm:4.21.1":
|
||||||
version: 4.20.0
|
version: 4.21.1
|
||||||
resolution: "@rollup/rollup-linux-x64-gnu@npm:4.20.0"
|
resolution: "@rollup/rollup-linux-x64-gnu@npm:4.21.1"
|
||||||
conditions: os=linux & cpu=x64 & libc=glibc
|
conditions: os=linux & cpu=x64 & libc=glibc
|
||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"@rollup/rollup-linux-x64-musl@npm:4.20.0":
|
"@rollup/rollup-linux-x64-musl@npm:4.21.1":
|
||||||
version: 4.20.0
|
version: 4.21.1
|
||||||
resolution: "@rollup/rollup-linux-x64-musl@npm:4.20.0"
|
resolution: "@rollup/rollup-linux-x64-musl@npm:4.21.1"
|
||||||
conditions: os=linux & cpu=x64 & libc=musl
|
conditions: os=linux & cpu=x64 & libc=musl
|
||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"@rollup/rollup-win32-arm64-msvc@npm:4.20.0":
|
"@rollup/rollup-win32-arm64-msvc@npm:4.21.1":
|
||||||
version: 4.20.0
|
version: 4.21.1
|
||||||
resolution: "@rollup/rollup-win32-arm64-msvc@npm:4.20.0"
|
resolution: "@rollup/rollup-win32-arm64-msvc@npm:4.21.1"
|
||||||
conditions: os=win32 & cpu=arm64
|
conditions: os=win32 & cpu=arm64
|
||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"@rollup/rollup-win32-ia32-msvc@npm:4.20.0":
|
"@rollup/rollup-win32-ia32-msvc@npm:4.21.1":
|
||||||
version: 4.20.0
|
version: 4.21.1
|
||||||
resolution: "@rollup/rollup-win32-ia32-msvc@npm:4.20.0"
|
resolution: "@rollup/rollup-win32-ia32-msvc@npm:4.21.1"
|
||||||
conditions: os=win32 & cpu=ia32
|
conditions: os=win32 & cpu=ia32
|
||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"@rollup/rollup-win32-x64-msvc@npm:4.20.0":
|
"@rollup/rollup-win32-x64-msvc@npm:4.21.1":
|
||||||
version: 4.20.0
|
version: 4.21.1
|
||||||
resolution: "@rollup/rollup-win32-x64-msvc@npm:4.20.0"
|
resolution: "@rollup/rollup-win32-x64-msvc@npm:4.21.1"
|
||||||
conditions: os=win32 & cpu=x64
|
conditions: os=win32 & cpu=x64
|
||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
@@ -1454,12 +1486,12 @@ __metadata:
|
|||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"@types/node@npm:^22.4.0":
|
"@types/node@npm:^22.5.2":
|
||||||
version: 22.4.0
|
version: 22.5.2
|
||||||
resolution: "@types/node@npm:22.4.0"
|
resolution: "@types/node@npm:22.5.2"
|
||||||
dependencies:
|
dependencies:
|
||||||
undici-types: "npm:~6.19.2"
|
undici-types: "npm:~6.19.2"
|
||||||
checksum: 10c0/84cd094b19a27e0db425f1d02614e4f7ac59b5eb3b21e288c8f8d4d0a4c9ad370107bc1a649d4c2b4e810cd133feea26e0bbf7e7c617f93e9e139d6d2568cf50
|
checksum: 10c0/624a7fd76229eacc6c158eb3b9afd55b811d7f01976c5f92c630d5b9d47047cc218928c343988484a165ac400e5eb6fe70ea300fc7242deeb0e920c7724290f6
|
||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
@@ -1507,16 +1539,16 @@ __metadata:
|
|||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"@types/react-transition-group@npm:^4.4.10":
|
"@types/react-transition-group@npm:^4.4.11":
|
||||||
version: 4.4.10
|
version: 4.4.11
|
||||||
resolution: "@types/react-transition-group@npm:4.4.10"
|
resolution: "@types/react-transition-group@npm:4.4.11"
|
||||||
dependencies:
|
dependencies:
|
||||||
"@types/react": "npm:*"
|
"@types/react": "npm:*"
|
||||||
checksum: 10c0/3eb9bca143abc21eb781aa5cb1bded0c9335689d515bf0513fb8e63217b7a8122c6a323ecd5644a06938727e1f467ee061d8df1c93b68825a80ff1b47ab777a2
|
checksum: 10c0/8fbf0dcc1b81985cdcebe3c59d769fe2ea3f4525f12c3a10a7429a59f93e303c82b2abb744d21cb762879f4514969d70a7ab11b9bf486f92213e8fe70e04098d
|
||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"@types/react@npm:*, @types/react@npm:^18.3.3":
|
"@types/react@npm:*":
|
||||||
version: 18.3.3
|
version: 18.3.3
|
||||||
resolution: "@types/react@npm:18.3.3"
|
resolution: "@types/react@npm:18.3.3"
|
||||||
dependencies:
|
dependencies:
|
||||||
@@ -1526,6 +1558,16 @@ __metadata:
|
|||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
|
"@types/react@npm:^18.3.5":
|
||||||
|
version: 18.3.5
|
||||||
|
resolution: "@types/react@npm:18.3.5"
|
||||||
|
dependencies:
|
||||||
|
"@types/prop-types": "npm:*"
|
||||||
|
csstype: "npm:^3.0.2"
|
||||||
|
checksum: 10c0/548b1d3d7c2f0242fbfdbbd658731b4ce69a134be072fa83e6ab516f2840402a3f20e3e7f72e95133b23d4880ef24a6d864050dc8e1f7c68f39fa87ca8445917
|
||||||
|
languageName: node
|
||||||
|
linkType: hard
|
||||||
|
|
||||||
"@types/responselike@npm:^1.0.0":
|
"@types/responselike@npm:^1.0.0":
|
||||||
version: 1.0.3
|
version: 1.0.3
|
||||||
resolution: "@types/responselike@npm:1.0.3"
|
resolution: "@types/responselike@npm:1.0.3"
|
||||||
@@ -1544,15 +1586,15 @@ __metadata:
|
|||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"@typescript-eslint/eslint-plugin@npm:8.1.0":
|
"@typescript-eslint/eslint-plugin@npm:8.3.0":
|
||||||
version: 8.1.0
|
version: 8.3.0
|
||||||
resolution: "@typescript-eslint/eslint-plugin@npm:8.1.0"
|
resolution: "@typescript-eslint/eslint-plugin@npm:8.3.0"
|
||||||
dependencies:
|
dependencies:
|
||||||
"@eslint-community/regexpp": "npm:^4.10.0"
|
"@eslint-community/regexpp": "npm:^4.10.0"
|
||||||
"@typescript-eslint/scope-manager": "npm:8.1.0"
|
"@typescript-eslint/scope-manager": "npm:8.3.0"
|
||||||
"@typescript-eslint/type-utils": "npm:8.1.0"
|
"@typescript-eslint/type-utils": "npm:8.3.0"
|
||||||
"@typescript-eslint/utils": "npm:8.1.0"
|
"@typescript-eslint/utils": "npm:8.3.0"
|
||||||
"@typescript-eslint/visitor-keys": "npm:8.1.0"
|
"@typescript-eslint/visitor-keys": "npm:8.3.0"
|
||||||
graphemer: "npm:^1.4.0"
|
graphemer: "npm:^1.4.0"
|
||||||
ignore: "npm:^5.3.1"
|
ignore: "npm:^5.3.1"
|
||||||
natural-compare: "npm:^1.4.0"
|
natural-compare: "npm:^1.4.0"
|
||||||
@@ -1563,68 +1605,68 @@ __metadata:
|
|||||||
peerDependenciesMeta:
|
peerDependenciesMeta:
|
||||||
typescript:
|
typescript:
|
||||||
optional: true
|
optional: true
|
||||||
checksum: 10c0/7bbeae588f859b59c34d6a76cac06ef0fa605921b40c5d3b65b94829984280ea84c4dd3f5cb9ce2eb326f5563e9abb4c90ebff05c47f83f4def296c2ea1fa86c
|
checksum: 10c0/d5242b16b8602ab5817cf04b35ac7208b6bee530730eeed6eab886667d1f2c5fac1537b3e33c453393090a1c6fcd50f727c07f5168985a00e7d23d1f99576988
|
||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"@typescript-eslint/parser@npm:8.1.0":
|
"@typescript-eslint/parser@npm:8.3.0":
|
||||||
version: 8.1.0
|
version: 8.3.0
|
||||||
resolution: "@typescript-eslint/parser@npm:8.1.0"
|
resolution: "@typescript-eslint/parser@npm:8.3.0"
|
||||||
dependencies:
|
dependencies:
|
||||||
"@typescript-eslint/scope-manager": "npm:8.1.0"
|
"@typescript-eslint/scope-manager": "npm:8.3.0"
|
||||||
"@typescript-eslint/types": "npm:8.1.0"
|
"@typescript-eslint/types": "npm:8.3.0"
|
||||||
"@typescript-eslint/typescript-estree": "npm:8.1.0"
|
"@typescript-eslint/typescript-estree": "npm:8.3.0"
|
||||||
"@typescript-eslint/visitor-keys": "npm:8.1.0"
|
"@typescript-eslint/visitor-keys": "npm:8.3.0"
|
||||||
debug: "npm:^4.3.4"
|
debug: "npm:^4.3.4"
|
||||||
peerDependencies:
|
peerDependencies:
|
||||||
eslint: ^8.57.0 || ^9.0.0
|
eslint: ^8.57.0 || ^9.0.0
|
||||||
peerDependenciesMeta:
|
peerDependenciesMeta:
|
||||||
typescript:
|
typescript:
|
||||||
optional: true
|
optional: true
|
||||||
checksum: 10c0/b94b2d3ab5ca505484d100701fad6a04a5dc8d595029bac1b9f5b8a4a91d80fd605b0f65d230b36a97ab7e5d55eeb0c28af2ab63929a3e4ab8fdefd2a548c36b
|
checksum: 10c0/8185e7f1f570cded8719cfb1e8147fcbbc5b8796de628d68024d2929ce6fb02d1f6101b741161229e877be1c30c720701e1e1f7c4313dba33d4bb1190a85f705
|
||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"@typescript-eslint/scope-manager@npm:8.1.0":
|
"@typescript-eslint/scope-manager@npm:8.3.0":
|
||||||
version: 8.1.0
|
version: 8.3.0
|
||||||
resolution: "@typescript-eslint/scope-manager@npm:8.1.0"
|
resolution: "@typescript-eslint/scope-manager@npm:8.3.0"
|
||||||
dependencies:
|
dependencies:
|
||||||
"@typescript-eslint/types": "npm:8.1.0"
|
"@typescript-eslint/types": "npm:8.3.0"
|
||||||
"@typescript-eslint/visitor-keys": "npm:8.1.0"
|
"@typescript-eslint/visitor-keys": "npm:8.3.0"
|
||||||
checksum: 10c0/2bcf8cd176a1819bddcae16c572e7da8fba821b995a91cd53d64d8d6b85a17f5a895522f281ba57e34929574bddd4d6684ee3e545ec4e8096be4c3198e253a9a
|
checksum: 10c0/24d093505d444a07db88f9ab44af04eb738ce523ac3f98b0a641cf3a3ee38d18aff9f72bbf2b2e2d9f45e57c973f31016f1e224cd8ab773f6e7c3477c5a09ad3
|
||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"@typescript-eslint/type-utils@npm:8.1.0":
|
"@typescript-eslint/type-utils@npm:8.3.0":
|
||||||
version: 8.1.0
|
version: 8.3.0
|
||||||
resolution: "@typescript-eslint/type-utils@npm:8.1.0"
|
resolution: "@typescript-eslint/type-utils@npm:8.3.0"
|
||||||
dependencies:
|
dependencies:
|
||||||
"@typescript-eslint/typescript-estree": "npm:8.1.0"
|
"@typescript-eslint/typescript-estree": "npm:8.3.0"
|
||||||
"@typescript-eslint/utils": "npm:8.1.0"
|
"@typescript-eslint/utils": "npm:8.3.0"
|
||||||
debug: "npm:^4.3.4"
|
debug: "npm:^4.3.4"
|
||||||
ts-api-utils: "npm:^1.3.0"
|
ts-api-utils: "npm:^1.3.0"
|
||||||
peerDependenciesMeta:
|
peerDependenciesMeta:
|
||||||
typescript:
|
typescript:
|
||||||
optional: true
|
optional: true
|
||||||
checksum: 10c0/62753941c4136e8d2daa72fe0410dea48e5317a6f12ece6382ca85e29912bd1b3f739b61d1060fc0a1f8c488dfc905beab4c8b8497951a21c3138a659c7271ec
|
checksum: 10c0/0e4b42ff2bfcd1727893bb7fe5fcf1aa808b45b5f690c249c68ce7aff68ddfba3d8b1565de2f08972915df23fa7ab114c09f507668e9b0b63faf1e34a5091706
|
||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"@typescript-eslint/types@npm:8.1.0":
|
"@typescript-eslint/types@npm:8.3.0":
|
||||||
version: 8.1.0
|
version: 8.3.0
|
||||||
resolution: "@typescript-eslint/types@npm:8.1.0"
|
resolution: "@typescript-eslint/types@npm:8.3.0"
|
||||||
checksum: 10c0/ceade44455f45974e68956016c4d1c6626580732f7f9675e14ffa63db80b551752b0df596b20473dae9f0dc6ed966e17417dc2cf36e1a82b6ab0edc97c5eaa50
|
checksum: 10c0/5cd733af7ffa0cdaa5842f6c5e275b3a5c9b98dc49bf1bb9df1f0b51d346bef2a10a827d886f60492d502218a272e935cef50b4f7c69100217d5b10a2499c7b1
|
||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"@typescript-eslint/typescript-estree@npm:8.1.0":
|
"@typescript-eslint/typescript-estree@npm:8.3.0":
|
||||||
version: 8.1.0
|
version: 8.3.0
|
||||||
resolution: "@typescript-eslint/typescript-estree@npm:8.1.0"
|
resolution: "@typescript-eslint/typescript-estree@npm:8.3.0"
|
||||||
dependencies:
|
dependencies:
|
||||||
"@typescript-eslint/types": "npm:8.1.0"
|
"@typescript-eslint/types": "npm:8.3.0"
|
||||||
"@typescript-eslint/visitor-keys": "npm:8.1.0"
|
"@typescript-eslint/visitor-keys": "npm:8.3.0"
|
||||||
debug: "npm:^4.3.4"
|
debug: "npm:^4.3.4"
|
||||||
globby: "npm:^11.1.0"
|
fast-glob: "npm:^3.3.2"
|
||||||
is-glob: "npm:^4.0.3"
|
is-glob: "npm:^4.0.3"
|
||||||
minimatch: "npm:^9.0.4"
|
minimatch: "npm:^9.0.4"
|
||||||
semver: "npm:^7.6.0"
|
semver: "npm:^7.6.0"
|
||||||
@@ -1632,31 +1674,31 @@ __metadata:
|
|||||||
peerDependenciesMeta:
|
peerDependenciesMeta:
|
||||||
typescript:
|
typescript:
|
||||||
optional: true
|
optional: true
|
||||||
checksum: 10c0/a7bc8275df1c79c4cb14ef086c56674316dd4907efec53eddca35d0b5220428b69c82178ce2d95138da2e398269c8bd0764cae8020a36417e411e35c3c47bc4b
|
checksum: 10c0/dd73aa1a9d7b5c7e6238e766e6ecdb6d87a9b28a24815258b7bbdc59c49fb525d3fe15d9b7c672e2220678f9d5fabdd9615e4cd5ee97a102fd46023ec0735d50
|
||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"@typescript-eslint/utils@npm:8.1.0":
|
"@typescript-eslint/utils@npm:8.3.0":
|
||||||
version: 8.1.0
|
version: 8.3.0
|
||||||
resolution: "@typescript-eslint/utils@npm:8.1.0"
|
resolution: "@typescript-eslint/utils@npm:8.3.0"
|
||||||
dependencies:
|
dependencies:
|
||||||
"@eslint-community/eslint-utils": "npm:^4.4.0"
|
"@eslint-community/eslint-utils": "npm:^4.4.0"
|
||||||
"@typescript-eslint/scope-manager": "npm:8.1.0"
|
"@typescript-eslint/scope-manager": "npm:8.3.0"
|
||||||
"@typescript-eslint/types": "npm:8.1.0"
|
"@typescript-eslint/types": "npm:8.3.0"
|
||||||
"@typescript-eslint/typescript-estree": "npm:8.1.0"
|
"@typescript-eslint/typescript-estree": "npm:8.3.0"
|
||||||
peerDependencies:
|
peerDependencies:
|
||||||
eslint: ^8.57.0 || ^9.0.0
|
eslint: ^8.57.0 || ^9.0.0
|
||||||
checksum: 10c0/c95503a6bdcd98b1ff04d1adbf46377b2036b1c510d90a4a056401f996f775f06c3108c95fb81cd6babc9c97b73b91b8e848f0337bc508de8a49c993582f0e75
|
checksum: 10c0/e4e9e820cf4b4775bb66b2293a2a827897edaba88577b63df317b50752a01d542be521cc4842976fbbd93e08b9e273ce9d20e23768d06de68a83d68cc0f68a93
|
||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"@typescript-eslint/visitor-keys@npm:8.1.0":
|
"@typescript-eslint/visitor-keys@npm:8.3.0":
|
||||||
version: 8.1.0
|
version: 8.3.0
|
||||||
resolution: "@typescript-eslint/visitor-keys@npm:8.1.0"
|
resolution: "@typescript-eslint/visitor-keys@npm:8.3.0"
|
||||||
dependencies:
|
dependencies:
|
||||||
"@typescript-eslint/types": "npm:8.1.0"
|
"@typescript-eslint/types": "npm:8.3.0"
|
||||||
eslint-visitor-keys: "npm:^3.4.3"
|
eslint-visitor-keys: "npm:^3.4.3"
|
||||||
checksum: 10c0/b7544dbb0eec1ddbfcd95c04b51b9a739c2e768c16d1c88508f976a2b0d1bc02fefb7491930e06e48073a5c07c6f488cd8403bba3a8b918888b93a88d5ac3869
|
checksum: 10c0/4c19216636f2cc25026fe20d2832d857f05c262eba78bc4159121c696199e44cac68443565959f9336372f7686a14b452867300cf4deb3c0507b8dbde88ac0e6
|
||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
@@ -1664,27 +1706,27 @@ __metadata:
|
|||||||
version: 0.0.0-use.local
|
version: 0.0.0-use.local
|
||||||
resolution: "EMS-ESP@workspace:."
|
resolution: "EMS-ESP@workspace:."
|
||||||
dependencies:
|
dependencies:
|
||||||
"@alova/adapter-xhr": "npm:2.0.5"
|
"@alova/adapter-xhr": "npm:2.0.6"
|
||||||
"@babel/core": "npm:^7.25.2"
|
"@babel/core": "npm:^7.25.2"
|
||||||
"@emotion/react": "npm:^11.13.0"
|
"@emotion/react": "npm:^11.13.3"
|
||||||
"@emotion/styled": "npm:^11.13.0"
|
"@emotion/styled": "npm:^11.13.0"
|
||||||
"@eslint/js": "npm:^9.9.0"
|
"@eslint/js": "npm:^9.9.1"
|
||||||
"@mui/icons-material": "npm:^5.16.7"
|
"@mui/icons-material": "npm:^6.0.1"
|
||||||
"@mui/material": "npm:^5.16.7"
|
"@mui/material": "npm:^6.0.1"
|
||||||
"@preact/compat": "npm:^17.1.2"
|
"@preact/compat": "npm:^17.1.2"
|
||||||
"@preact/preset-vite": "npm:^2.9.0"
|
"@preact/preset-vite": "npm:^2.9.0"
|
||||||
"@table-library/react-table-library": "npm:4.1.7"
|
"@table-library/react-table-library": "npm:4.1.7"
|
||||||
"@trivago/prettier-plugin-sort-imports": "npm:^4.3.0"
|
"@trivago/prettier-plugin-sort-imports": "npm:^4.3.0"
|
||||||
"@types/babel__core": "npm:^7"
|
"@types/babel__core": "npm:^7"
|
||||||
"@types/formidable": "npm:^3"
|
"@types/formidable": "npm:^3"
|
||||||
"@types/node": "npm:^22.4.0"
|
"@types/node": "npm:^22.5.2"
|
||||||
"@types/react": "npm:^18.3.3"
|
"@types/react": "npm:^18.3.5"
|
||||||
"@types/react-dom": "npm:^18.3.0"
|
"@types/react-dom": "npm:^18.3.0"
|
||||||
"@types/react-router-dom": "npm:^5.3.3"
|
"@types/react-router-dom": "npm:^5.3.3"
|
||||||
alova: "npm:3.0.9"
|
alova: "npm:3.0.14"
|
||||||
async-validator: "npm:^4.2.5"
|
async-validator: "npm:^4.2.5"
|
||||||
concurrently: "npm:^8.2.2"
|
concurrently: "npm:^8.2.2"
|
||||||
eslint: "npm:^9.9.0"
|
eslint: "npm:^9.9.1"
|
||||||
eslint-config-prettier: "npm:^9.1.0"
|
eslint-config-prettier: "npm:^9.1.0"
|
||||||
formidable: "npm:^3.5.1"
|
formidable: "npm:^3.5.1"
|
||||||
jwt-decode: "npm:^4.0.0"
|
jwt-decode: "npm:^4.0.0"
|
||||||
@@ -1700,8 +1742,8 @@ __metadata:
|
|||||||
terser: "npm:^5.31.6"
|
terser: "npm:^5.31.6"
|
||||||
typesafe-i18n: "npm:^5.26.2"
|
typesafe-i18n: "npm:^5.26.2"
|
||||||
typescript: "npm:^5.5.4"
|
typescript: "npm:^5.5.4"
|
||||||
typescript-eslint: "npm:8.1.0"
|
typescript-eslint: "npm:8.3.0"
|
||||||
vite: "npm:^5.4.1"
|
vite: "npm:^5.4.2"
|
||||||
vite-plugin-imagemin: "npm:^0.6.1"
|
vite-plugin-imagemin: "npm:^0.6.1"
|
||||||
vite-tsconfig-paths: "npm:^5.0.1"
|
vite-tsconfig-paths: "npm:^5.0.1"
|
||||||
languageName: unknown
|
languageName: unknown
|
||||||
@@ -1763,13 +1805,13 @@ __metadata:
|
|||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"alova@npm:3.0.9":
|
"alova@npm:3.0.14":
|
||||||
version: 3.0.9
|
version: 3.0.14
|
||||||
resolution: "alova@npm:3.0.9"
|
resolution: "alova@npm:3.0.14"
|
||||||
dependencies:
|
dependencies:
|
||||||
"@alova/shared": "npm:^1.0.4"
|
"@alova/shared": "npm:^1.0.5"
|
||||||
rate-limiter-flexible: "npm:^5.0.3"
|
rate-limiter-flexible: "npm:^5.0.3"
|
||||||
checksum: 10c0/df4cf0e513e10cf12d0af37c3b4f04bd81c5f1681073335c23d8d6d32f7d08aaba88822c7ff99f862ef55a959f336c9f26d14bb7dde051b2add813cc9a6ffdad
|
checksum: 10c0/67e943b7d75ecfb1a3b0d32d0491302ecae317295804300a03d20ac61fcd85de9b442dd4bac7871e555c68db6fb0dd662377b18afdd441adb56972c9d4e2eef6
|
||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
@@ -3182,15 +3224,15 @@ __metadata:
|
|||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"eslint@npm:^9.9.0":
|
"eslint@npm:^9.9.1":
|
||||||
version: 9.9.0
|
version: 9.9.1
|
||||||
resolution: "eslint@npm:9.9.0"
|
resolution: "eslint@npm:9.9.1"
|
||||||
dependencies:
|
dependencies:
|
||||||
"@eslint-community/eslint-utils": "npm:^4.2.0"
|
"@eslint-community/eslint-utils": "npm:^4.2.0"
|
||||||
"@eslint-community/regexpp": "npm:^4.11.0"
|
"@eslint-community/regexpp": "npm:^4.11.0"
|
||||||
"@eslint/config-array": "npm:^0.17.1"
|
"@eslint/config-array": "npm:^0.18.0"
|
||||||
"@eslint/eslintrc": "npm:^3.1.0"
|
"@eslint/eslintrc": "npm:^3.1.0"
|
||||||
"@eslint/js": "npm:9.9.0"
|
"@eslint/js": "npm:9.9.1"
|
||||||
"@humanwhocodes/module-importer": "npm:^1.0.1"
|
"@humanwhocodes/module-importer": "npm:^1.0.1"
|
||||||
"@humanwhocodes/retry": "npm:^0.3.0"
|
"@humanwhocodes/retry": "npm:^0.3.0"
|
||||||
"@nodelib/fs.walk": "npm:^1.2.8"
|
"@nodelib/fs.walk": "npm:^1.2.8"
|
||||||
@@ -3227,7 +3269,7 @@ __metadata:
|
|||||||
optional: true
|
optional: true
|
||||||
bin:
|
bin:
|
||||||
eslint: bin/eslint.js
|
eslint: bin/eslint.js
|
||||||
checksum: 10c0/3a22f68c99d75dcbafe6e2fef18d2b5bbcc960c2437f48a414ccf9ca214254733a18e6b79d07bbd374a2369a648413e421aabd07b11be3de5a44d5a4b9997877
|
checksum: 10c0/5e71efda7c0a14ee95436d5cdfed04ee61dfb1d89d7a32b50a424de2e680af82849628ea6581950c2e0726491f786a3cfd0032ce013c1c5093786e475cfdfb33
|
||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
@@ -3400,7 +3442,7 @@ __metadata:
|
|||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"fast-glob@npm:^3.0.3, fast-glob@npm:^3.2.9":
|
"fast-glob@npm:^3.0.3, fast-glob@npm:^3.3.2":
|
||||||
version: 3.3.2
|
version: 3.3.2
|
||||||
resolution: "fast-glob@npm:3.3.2"
|
resolution: "fast-glob@npm:3.3.2"
|
||||||
dependencies:
|
dependencies:
|
||||||
@@ -3881,20 +3923,6 @@ __metadata:
|
|||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"globby@npm:^11.1.0":
|
|
||||||
version: 11.1.0
|
|
||||||
resolution: "globby@npm:11.1.0"
|
|
||||||
dependencies:
|
|
||||||
array-union: "npm:^2.1.0"
|
|
||||||
dir-glob: "npm:^3.0.1"
|
|
||||||
fast-glob: "npm:^3.2.9"
|
|
||||||
ignore: "npm:^5.2.0"
|
|
||||||
merge2: "npm:^1.4.1"
|
|
||||||
slash: "npm:^3.0.0"
|
|
||||||
checksum: 10c0/b39511b4afe4bd8a7aead3a27c4ade2b9968649abab0a6c28b1a90141b96ca68ca5db1302f7c7bd29eab66bf51e13916b8e0a3d0ac08f75e1e84a39b35691189
|
|
||||||
languageName: node
|
|
||||||
linkType: hard
|
|
||||||
|
|
||||||
"globrex@npm:^0.1.2":
|
"globrex@npm:^0.1.2":
|
||||||
version: 0.1.2
|
version: 0.1.2
|
||||||
resolution: "globrex@npm:0.1.2"
|
resolution: "globrex@npm:0.1.2"
|
||||||
@@ -4910,7 +4938,7 @@ __metadata:
|
|||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"merge2@npm:^1.2.3, merge2@npm:^1.3.0, merge2@npm:^1.4.1":
|
"merge2@npm:^1.2.3, merge2@npm:^1.3.0":
|
||||||
version: 1.4.1
|
version: 1.4.1
|
||||||
resolution: "merge2@npm:1.4.1"
|
resolution: "merge2@npm:1.4.1"
|
||||||
checksum: 10c0/254a8a4605b58f450308fc474c82ac9a094848081bf4c06778200207820e5193726dc563a0d2c16468810516a5c97d9d3ea0ca6585d23c58ccfff2403e8dbbeb
|
checksum: 10c0/254a8a4605b58f450308fc474c82ac9a094848081bf4c06778200207820e5193726dc563a0d2c16468810516a5c97d9d3ea0ca6585d23c58ccfff2403e8dbbeb
|
||||||
@@ -6039,26 +6067,26 @@ __metadata:
|
|||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"rollup@npm:^4.13.0":
|
"rollup@npm:^4.20.0":
|
||||||
version: 4.20.0
|
version: 4.21.1
|
||||||
resolution: "rollup@npm:4.20.0"
|
resolution: "rollup@npm:4.21.1"
|
||||||
dependencies:
|
dependencies:
|
||||||
"@rollup/rollup-android-arm-eabi": "npm:4.20.0"
|
"@rollup/rollup-android-arm-eabi": "npm:4.21.1"
|
||||||
"@rollup/rollup-android-arm64": "npm:4.20.0"
|
"@rollup/rollup-android-arm64": "npm:4.21.1"
|
||||||
"@rollup/rollup-darwin-arm64": "npm:4.20.0"
|
"@rollup/rollup-darwin-arm64": "npm:4.21.1"
|
||||||
"@rollup/rollup-darwin-x64": "npm:4.20.0"
|
"@rollup/rollup-darwin-x64": "npm:4.21.1"
|
||||||
"@rollup/rollup-linux-arm-gnueabihf": "npm:4.20.0"
|
"@rollup/rollup-linux-arm-gnueabihf": "npm:4.21.1"
|
||||||
"@rollup/rollup-linux-arm-musleabihf": "npm:4.20.0"
|
"@rollup/rollup-linux-arm-musleabihf": "npm:4.21.1"
|
||||||
"@rollup/rollup-linux-arm64-gnu": "npm:4.20.0"
|
"@rollup/rollup-linux-arm64-gnu": "npm:4.21.1"
|
||||||
"@rollup/rollup-linux-arm64-musl": "npm:4.20.0"
|
"@rollup/rollup-linux-arm64-musl": "npm:4.21.1"
|
||||||
"@rollup/rollup-linux-powerpc64le-gnu": "npm:4.20.0"
|
"@rollup/rollup-linux-powerpc64le-gnu": "npm:4.21.1"
|
||||||
"@rollup/rollup-linux-riscv64-gnu": "npm:4.20.0"
|
"@rollup/rollup-linux-riscv64-gnu": "npm:4.21.1"
|
||||||
"@rollup/rollup-linux-s390x-gnu": "npm:4.20.0"
|
"@rollup/rollup-linux-s390x-gnu": "npm:4.21.1"
|
||||||
"@rollup/rollup-linux-x64-gnu": "npm:4.20.0"
|
"@rollup/rollup-linux-x64-gnu": "npm:4.21.1"
|
||||||
"@rollup/rollup-linux-x64-musl": "npm:4.20.0"
|
"@rollup/rollup-linux-x64-musl": "npm:4.21.1"
|
||||||
"@rollup/rollup-win32-arm64-msvc": "npm:4.20.0"
|
"@rollup/rollup-win32-arm64-msvc": "npm:4.21.1"
|
||||||
"@rollup/rollup-win32-ia32-msvc": "npm:4.20.0"
|
"@rollup/rollup-win32-ia32-msvc": "npm:4.21.1"
|
||||||
"@rollup/rollup-win32-x64-msvc": "npm:4.20.0"
|
"@rollup/rollup-win32-x64-msvc": "npm:4.21.1"
|
||||||
"@types/estree": "npm:1.0.5"
|
"@types/estree": "npm:1.0.5"
|
||||||
fsevents: "npm:~2.3.2"
|
fsevents: "npm:~2.3.2"
|
||||||
dependenciesMeta:
|
dependenciesMeta:
|
||||||
@@ -6098,7 +6126,7 @@ __metadata:
|
|||||||
optional: true
|
optional: true
|
||||||
bin:
|
bin:
|
||||||
rollup: dist/bin/rollup
|
rollup: dist/bin/rollup
|
||||||
checksum: 10c0/9b23bf0e3380e64573a5f68a55274d5c7969036e55c19aab9fb4deea2e938d76769db70f3c95ee3783c24af152bea1772ad73f9e3625b6ffd4e600a788fe97ea
|
checksum: 10c0/e64b6adabadc3e18544c68e9704744c333b38a68ba803c49b5344a015c5865bf35a72669ba121ba26869fa306f193884e07319ccfc570c08fd8f9e72c9949d4d
|
||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
@@ -6831,17 +6859,17 @@ __metadata:
|
|||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"typescript-eslint@npm:8.1.0":
|
"typescript-eslint@npm:8.3.0":
|
||||||
version: 8.1.0
|
version: 8.3.0
|
||||||
resolution: "typescript-eslint@npm:8.1.0"
|
resolution: "typescript-eslint@npm:8.3.0"
|
||||||
dependencies:
|
dependencies:
|
||||||
"@typescript-eslint/eslint-plugin": "npm:8.1.0"
|
"@typescript-eslint/eslint-plugin": "npm:8.3.0"
|
||||||
"@typescript-eslint/parser": "npm:8.1.0"
|
"@typescript-eslint/parser": "npm:8.3.0"
|
||||||
"@typescript-eslint/utils": "npm:8.1.0"
|
"@typescript-eslint/utils": "npm:8.3.0"
|
||||||
peerDependenciesMeta:
|
peerDependenciesMeta:
|
||||||
typescript:
|
typescript:
|
||||||
optional: true
|
optional: true
|
||||||
checksum: 10c0/9b5769b95aeca54ae9fa15cd2f0e5656747f643a7be220513555de143ff19d70c5945eb82259a3fb29ab4d37f4d158f7f088e7b2cf98e2e8253a7429ac19d072
|
checksum: 10c0/90134b4b601d6fa582a95c9bee23c254f6ac2ca38aed07986d0a3bb75e1ddfdceeb9650c8647b34148696115d5fe0ce281413e4a8ec001e1e928356242a1756d
|
||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
@@ -7037,14 +7065,14 @@ __metadata:
|
|||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"vite@npm:^5.4.1":
|
"vite@npm:^5.4.2":
|
||||||
version: 5.4.1
|
version: 5.4.2
|
||||||
resolution: "vite@npm:5.4.1"
|
resolution: "vite@npm:5.4.2"
|
||||||
dependencies:
|
dependencies:
|
||||||
esbuild: "npm:^0.21.3"
|
esbuild: "npm:^0.21.3"
|
||||||
fsevents: "npm:~2.3.3"
|
fsevents: "npm:~2.3.3"
|
||||||
postcss: "npm:^8.4.41"
|
postcss: "npm:^8.4.41"
|
||||||
rollup: "npm:^4.13.0"
|
rollup: "npm:^4.20.0"
|
||||||
peerDependencies:
|
peerDependencies:
|
||||||
"@types/node": ^18.0.0 || >=20.0.0
|
"@types/node": ^18.0.0 || >=20.0.0
|
||||||
less: "*"
|
less: "*"
|
||||||
@@ -7076,7 +7104,7 @@ __metadata:
|
|||||||
optional: true
|
optional: true
|
||||||
bin:
|
bin:
|
||||||
vite: bin/vite.js
|
vite: bin/vite.js
|
||||||
checksum: 10c0/b9ea824f1a946aa494f756e6d9dd88869baa62ae5ba3071b32b6a20958fd622cb624c860bdd7daee201c83ca029feaf8bbe2d2a6e172a5d49308772f8899d86d
|
checksum: 10c0/23e347ca8aa6f0a774227e4eb7abae228f12c6806a727b046aa75e7ee37ffc2d68cff74360e12a42c347f79adc294e2363bc723b957bf4b382b5a8fb39e4df9d
|
||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
|
|||||||
@@ -66,10 +66,7 @@ void ArduinoJsonJWT::parseJWT(String jwt, JsonDocument & jsonDocument) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* ESP32 uses mbedtls, ESP2866 uses bearssl.
|
* ESP32 uses mbedtls, with decent HMAC implementations supporting sha256, as well as others.
|
||||||
*
|
|
||||||
* Both come with decent HMAC implementations supporting sha256, as well as others.
|
|
||||||
*
|
|
||||||
* No need to pull in additional crypto libraries - lets use what we already have.
|
* No need to pull in additional crypto libraries - lets use what we already have.
|
||||||
*/
|
*/
|
||||||
String ArduinoJsonJWT::sign(String & payload) {
|
String ArduinoJsonJWT::sign(String & payload) {
|
||||||
|
|||||||
@@ -14,9 +14,7 @@ ESP8266React::ESP8266React(AsyncWebServer * server, FS * fs)
|
|||||||
, _uploadFileService(server, &_securitySettingsService)
|
, _uploadFileService(server, &_securitySettingsService)
|
||||||
, _mqttSettingsService(server, fs, &_securitySettingsService)
|
, _mqttSettingsService(server, fs, &_securitySettingsService)
|
||||||
, _mqttStatus(server, &_mqttSettingsService, &_securitySettingsService)
|
, _mqttStatus(server, &_mqttSettingsService, &_securitySettingsService)
|
||||||
, _authenticationService(server, &_securitySettingsService)
|
, _authenticationService(server, &_securitySettingsService) {
|
||||||
, _restartService(server, &_securitySettingsService)
|
|
||||||
, _factoryResetService(server, fs, &_securitySettingsService) {
|
|
||||||
//
|
//
|
||||||
// Serve static web resources
|
// Serve static web resources
|
||||||
//
|
//
|
||||||
|
|||||||
@@ -4,13 +4,11 @@
|
|||||||
#include "APSettingsService.h"
|
#include "APSettingsService.h"
|
||||||
#include "APStatus.h"
|
#include "APStatus.h"
|
||||||
#include "AuthenticationService.h"
|
#include "AuthenticationService.h"
|
||||||
#include "FactoryResetService.h"
|
|
||||||
#include "MqttSettingsService.h"
|
#include "MqttSettingsService.h"
|
||||||
#include "MqttStatus.h"
|
#include "MqttStatus.h"
|
||||||
#include "NTPSettingsService.h"
|
#include "NTPSettingsService.h"
|
||||||
#include "NTPStatus.h"
|
#include "NTPStatus.h"
|
||||||
#include "UploadFileService.h"
|
#include "UploadFileService.h"
|
||||||
#include "RestartService.h"
|
|
||||||
#include "SecuritySettingsService.h"
|
#include "SecuritySettingsService.h"
|
||||||
#include "WiFiScanner.h"
|
#include "WiFiScanner.h"
|
||||||
#include "NetworkSettingsService.h"
|
#include "NetworkSettingsService.h"
|
||||||
@@ -68,12 +66,6 @@ class ESP8266React {
|
|||||||
return _apSettingsService.getAPNetworkStatus() == APNetworkStatus::ACTIVE;
|
return _apSettingsService.getAPNetworkStatus() == APNetworkStatus::ACTIVE;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifndef EMSESP_STANDALONE
|
|
||||||
void factoryReset() {
|
|
||||||
_factoryResetService.factoryReset();
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
SecuritySettingsService _securitySettingsService;
|
SecuritySettingsService _securitySettingsService;
|
||||||
NetworkSettingsService _networkSettingsService;
|
NetworkSettingsService _networkSettingsService;
|
||||||
@@ -87,8 +79,6 @@ class ESP8266React {
|
|||||||
MqttSettingsService _mqttSettingsService;
|
MqttSettingsService _mqttSettingsService;
|
||||||
MqttStatus _mqttStatus;
|
MqttStatus _mqttStatus;
|
||||||
AuthenticationService _authenticationService;
|
AuthenticationService _authenticationService;
|
||||||
RestartService _restartService;
|
|
||||||
FactoryResetService _factoryResetService;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -1,29 +0,0 @@
|
|||||||
#include "FactoryResetService.h"
|
|
||||||
|
|
||||||
FactoryResetService::FactoryResetService(AsyncWebServer * server, FS * fs, SecurityManager * securityManager)
|
|
||||||
: fs(fs) {
|
|
||||||
server->on(FACTORY_RESET_SERVICE_PATH,
|
|
||||||
HTTP_POST,
|
|
||||||
securityManager->wrapRequest([this](AsyncWebServerRequest * request) { handleRequest(request); }, AuthenticationPredicates::IS_ADMIN));
|
|
||||||
}
|
|
||||||
|
|
||||||
void FactoryResetService::handleRequest(AsyncWebServerRequest * request) {
|
|
||||||
request->onDisconnect([this] { factoryReset(); });
|
|
||||||
request->send(200);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Delete function assumes that all files are stored flat, within the config directory.
|
|
||||||
*/
|
|
||||||
void FactoryResetService::factoryReset() {
|
|
||||||
// TODO To replaced with fs.rmdir(FS_CONFIG_DIRECTORY) now we're using IDF 4.2
|
|
||||||
File root = fs->open(FS_CONFIG_DIRECTORY);
|
|
||||||
File file;
|
|
||||||
while ((file = root.openNextFile())) {
|
|
||||||
String path = file.path();
|
|
||||||
file.close();
|
|
||||||
fs->remove(path);
|
|
||||||
}
|
|
||||||
|
|
||||||
RestartService::restartNow();
|
|
||||||
}
|
|
||||||
@@ -1,25 +0,0 @@
|
|||||||
#ifndef FactoryResetService_h
|
|
||||||
#define FactoryResetService_h
|
|
||||||
|
|
||||||
#include <WiFi.h>
|
|
||||||
#include <ESPAsyncWebServer.h>
|
|
||||||
#include <FS.h>
|
|
||||||
|
|
||||||
#include "SecurityManager.h"
|
|
||||||
#include "RestartService.h"
|
|
||||||
|
|
||||||
#define FS_CONFIG_DIRECTORY "/config"
|
|
||||||
#define FACTORY_RESET_SERVICE_PATH "/rest/factoryReset"
|
|
||||||
|
|
||||||
class FactoryResetService {
|
|
||||||
public:
|
|
||||||
FactoryResetService(AsyncWebServer * server, FS * fs, SecurityManager * securityManager);
|
|
||||||
|
|
||||||
void factoryReset();
|
|
||||||
|
|
||||||
private:
|
|
||||||
FS * fs;
|
|
||||||
void handleRequest(AsyncWebServerRequest * request);
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif
|
|
||||||
@@ -182,7 +182,7 @@ void NetworkSettingsService::setWiFiPowerOnRSSI() {
|
|||||||
|
|
||||||
#ifdef EMSESP_DEBUG
|
#ifdef EMSESP_DEBUG
|
||||||
uint8_t set_power = min_tx_pwr / 10; // this is the recommended power setting to use
|
uint8_t set_power = min_tx_pwr / 10; // this is the recommended power setting to use
|
||||||
emsesp::EMSESP::logger().debug("Recommended set WiFi Tx Power (set_power %d, new power %d, rssi %d, threshold %d)", set_power, p, rssi, threshold);
|
emsesp::EMSESP::logger().debug("Recommended WiFi Tx Power (set_power %d, new power %d, rssi %d, threshold %d)", set_power, p, rssi, threshold);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (!WiFi.setTxPower(p)) {
|
if (!WiFi.setTxPower(p)) {
|
||||||
@@ -369,12 +369,12 @@ void NetworkSettingsService::WiFiEvent(WiFiEvent_t event, WiFiEventInfo_t info)
|
|||||||
case ARDUINO_EVENT_ETH_GOT_IP6:
|
case ARDUINO_EVENT_ETH_GOT_IP6:
|
||||||
#if !TASMOTA_SDK && ESP_IDF_VERSION_MAJOR < 5
|
#if !TASMOTA_SDK && ESP_IDF_VERSION_MAJOR < 5
|
||||||
if (emsesp::EMSESP::system_.ethernet_connected()) {
|
if (emsesp::EMSESP::system_.ethernet_connected()) {
|
||||||
emsesp::EMSESP::logger().info("LocalIPv6 (ETH)=%s", ETH.localIPv6().toString().c_str());
|
emsesp::EMSESP::logger().info("Local IPv6=%s", ETH.localIPv6().toString().c_str());
|
||||||
} else {
|
} else {
|
||||||
emsesp::EMSESP::logger().info("LocalIPv6 (WiFI)=%s", WiFi.localIPv6().toString().c_str());
|
emsesp::EMSESP::logger().info("Local IPv6=%s", WiFi.localIPv6().toString().c_str());
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
emsesp::EMSESP::logger().info("IPv6=%s", IPAddress(IPv6, (uint8_t *)info.got_ip6.ip6_info.ip.addr, 0).toString().c_str());
|
emsesp::EMSESP::logger().info("Local IPv6=%s", IPAddress(IPv6, (uint8_t *)info.got_ip6.ip6_info.ip.addr, 0).toString().c_str());
|
||||||
#endif
|
#endif
|
||||||
emsesp::EMSESP::system_.has_ipv6(true);
|
emsesp::EMSESP::system_.has_ipv6(true);
|
||||||
break;
|
break;
|
||||||
|
|||||||
@@ -1,59 +0,0 @@
|
|||||||
#include "RestartService.h"
|
|
||||||
|
|
||||||
#include <esp_ota_ops.h>
|
|
||||||
|
|
||||||
#include "../../src/emsesp_stub.hpp"
|
|
||||||
|
|
||||||
RestartService::RestartService(AsyncWebServer * server, SecurityManager * securityManager) {
|
|
||||||
server->on(RESTART_SERVICE_PATH,
|
|
||||||
HTTP_POST,
|
|
||||||
securityManager->wrapRequest([this](AsyncWebServerRequest * request) { restart(request); }, AuthenticationPredicates::IS_ADMIN));
|
|
||||||
server->on(PARTITION_SERVICE_PATH,
|
|
||||||
HTTP_POST,
|
|
||||||
securityManager->wrapRequest([this](AsyncWebServerRequest * request) { partition(request); }, AuthenticationPredicates::IS_ADMIN));
|
|
||||||
server->on(FACTORYPARTITION_SERVICE_PATH,
|
|
||||||
HTTP_POST,
|
|
||||||
securityManager->wrapRequest([this](AsyncWebServerRequest * request) { factory(request); }, AuthenticationPredicates::IS_ADMIN));
|
|
||||||
}
|
|
||||||
|
|
||||||
void RestartService::restartNow() {
|
|
||||||
WiFi.disconnect(true);
|
|
||||||
delay(500);
|
|
||||||
ESP.restart();
|
|
||||||
}
|
|
||||||
|
|
||||||
void RestartService::restart(AsyncWebServerRequest * request) {
|
|
||||||
emsesp::EMSESP::system_.store_nvs_values();
|
|
||||||
request->onDisconnect(RestartService::restartNow);
|
|
||||||
request->send(200);
|
|
||||||
}
|
|
||||||
|
|
||||||
void RestartService::partition(AsyncWebServerRequest * request) {
|
|
||||||
const esp_partition_t * ota_partition = esp_ota_get_next_update_partition(nullptr);
|
|
||||||
if (!ota_partition) {
|
|
||||||
request->send(400); // bad request
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
uint64_t buffer;
|
|
||||||
esp_partition_read(ota_partition, 0, &buffer, 8);
|
|
||||||
if (buffer == 0xFFFFFFFFFFFFFFFF) { // partition empty
|
|
||||||
request->send(400); // bad request
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
esp_ota_set_boot_partition(ota_partition);
|
|
||||||
emsesp::EMSESP::system_.store_nvs_values();
|
|
||||||
request->onDisconnect(RestartService::restartNow);
|
|
||||||
request->send(200);
|
|
||||||
}
|
|
||||||
|
|
||||||
void RestartService::factory(AsyncWebServerRequest * request) {
|
|
||||||
const esp_partition_t * factory_partition = esp_partition_find_first(ESP_PARTITION_TYPE_APP, ESP_PARTITION_SUBTYPE_APP_FACTORY, nullptr);
|
|
||||||
if (!factory_partition) {
|
|
||||||
request->send(400);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
esp_ota_set_boot_partition(factory_partition);
|
|
||||||
emsesp::EMSESP::system_.store_nvs_values();
|
|
||||||
request->onDisconnect(RestartService::restartNow);
|
|
||||||
request->send(200);
|
|
||||||
}
|
|
||||||
@@ -1,26 +0,0 @@
|
|||||||
#ifndef RestartService_h
|
|
||||||
#define RestartService_h
|
|
||||||
|
|
||||||
#include <WiFi.h>
|
|
||||||
#include <AsyncTCP.h>
|
|
||||||
#include <ESPAsyncWebServer.h>
|
|
||||||
|
|
||||||
#include "SecurityManager.h"
|
|
||||||
|
|
||||||
#define RESTART_SERVICE_PATH "/rest/restart"
|
|
||||||
#define PARTITION_SERVICE_PATH "/rest/partition"
|
|
||||||
#define FACTORYPARTITION_SERVICE_PATH "/rest/factoryPartition"
|
|
||||||
|
|
||||||
class RestartService {
|
|
||||||
public:
|
|
||||||
RestartService(AsyncWebServer * server, SecurityManager * securityManager);
|
|
||||||
|
|
||||||
static void restartNow();
|
|
||||||
|
|
||||||
private:
|
|
||||||
void restart(AsyncWebServerRequest * request);
|
|
||||||
void partition(AsyncWebServerRequest * request);
|
|
||||||
void factory(AsyncWebServerRequest * request);
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif
|
|
||||||
@@ -16,7 +16,7 @@ UploadFileService::UploadFileService(AsyncWebServer * server, SecurityManager *
|
|||||||
: _securityManager(securityManager)
|
: _securityManager(securityManager)
|
||||||
, _is_firmware(false)
|
, _is_firmware(false)
|
||||||
, _md5() {
|
, _md5() {
|
||||||
// end-points
|
// upload a file via a form
|
||||||
server->on(
|
server->on(
|
||||||
UPLOAD_FILE_PATH,
|
UPLOAD_FILE_PATH,
|
||||||
HTTP_POST,
|
HTTP_POST,
|
||||||
@@ -25,6 +25,7 @@ UploadFileService::UploadFileService(AsyncWebServer * server, SecurityManager *
|
|||||||
handleUpload(request, filename, index, data, len, final);
|
handleUpload(request, filename, index, data, len, final);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// upload from a URL
|
||||||
server->on(UPLOAD_URL_PATH,
|
server->on(UPLOAD_URL_PATH,
|
||||||
securityManager->wrapCallback([this](AsyncWebServerRequest * request, JsonVariant json) { uploadURL(request, json); },
|
securityManager->wrapCallback([this](AsyncWebServerRequest * request, JsonVariant json) { uploadURL(request, json); },
|
||||||
AuthenticationPredicates::IS_AUTHENTICATED));
|
AuthenticationPredicates::IS_AUTHENTICATED));
|
||||||
@@ -121,20 +122,18 @@ void UploadFileService::uploadComplete(AsyncWebServerRequest * request) {
|
|||||||
// did we just complete uploading a json file?
|
// did we just complete uploading a json file?
|
||||||
if (request->_tempFile) {
|
if (request->_tempFile) {
|
||||||
request->_tempFile.close(); // close the file handle as the upload is now done
|
request->_tempFile.close(); // close the file handle as the upload is now done
|
||||||
emsesp::EMSESP::system_.store_nvs_values();
|
|
||||||
request->onDisconnect(RestartService::restartNow);
|
|
||||||
AsyncWebServerResponse * response = request->beginResponse(200);
|
AsyncWebServerResponse * response = request->beginResponse(200);
|
||||||
request->send(response);
|
request->send(response);
|
||||||
|
emsesp::EMSESP::system_.restart_pending(true); // will be handled by the main loop. We use pending for the Web's RestartMonitor
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// check if it was a firmware upgrade
|
// check if it was a firmware upgrade
|
||||||
// if no error, send the success response as a JSON
|
// if no error, send the success response as a JSON
|
||||||
if (_is_firmware && !request->_tempObject) {
|
if (_is_firmware && !request->_tempObject) {
|
||||||
emsesp::EMSESP::system_.store_nvs_values();
|
|
||||||
request->onDisconnect(RestartService::restartNow);
|
|
||||||
AsyncWebServerResponse * response = request->beginResponse(200);
|
AsyncWebServerResponse * response = request->beginResponse(200);
|
||||||
request->send(response);
|
request->send(response);
|
||||||
|
emsesp::EMSESP::system_.restart_pending(true); // will be handled by the main loop. We use pending for the Web's RestartMonitor
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
#ifndef UploadFileService_h
|
#ifndef UploadFileService_h
|
||||||
#define UploadFileService_h
|
#define UploadFileService_h
|
||||||
|
|
||||||
#include "RestartService.h"
|
|
||||||
#include "SecurityManager.h"
|
#include "SecurityManager.h"
|
||||||
|
|
||||||
#include <Arduino.h>
|
#include <Arduino.h>
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
# The response will be shown in the right panel
|
# The response will be shown in the right panel
|
||||||
|
|
||||||
@host = http://ems-esp.local
|
@host = http://ems-esp.local
|
||||||
@host_dev = http://10.10.10.173
|
@host_dev = http://10.10.10.175
|
||||||
@host_standalone = http://localhost:3080
|
@host_standalone = http://localhost:3080
|
||||||
@host_standalone2 = http://localhost:3082
|
@host_standalone2 = http://localhost:3082
|
||||||
|
|
||||||
@@ -77,6 +77,8 @@ GET {{host}}/api/boiler/commands
|
|||||||
# Test on dev
|
# Test on dev
|
||||||
#
|
#
|
||||||
|
|
||||||
|
###
|
||||||
|
|
||||||
GET {{host_dev}}/api/system/info
|
GET {{host_dev}}/api/system/info
|
||||||
|
|
||||||
# Run a test. EMS-ESP must be compiled with -DEMSESP_TEST
|
# Run a test. EMS-ESP must be compiled with -DEMSESP_TEST
|
||||||
@@ -84,6 +86,11 @@ GET {{host_dev}}/api/system/info
|
|||||||
|
|
||||||
###
|
###
|
||||||
|
|
||||||
|
GET {{host_dev}}/api/system/restart
|
||||||
|
Authorization: Bearer {{token}}
|
||||||
|
|
||||||
|
###
|
||||||
|
|
||||||
GET {{host_dev}}/api?device=system&cmd=test&data=general
|
GET {{host_dev}}/api?device=system&cmd=test&data=general
|
||||||
|
|
||||||
###
|
###
|
||||||
@@ -150,7 +157,7 @@ Content-Type: application/json
|
|||||||
# https://developers.home-assistant.io/docs/api/rest/#post-apiservicesdomainservice
|
# https://developers.home-assistant.io/docs/api/rest/#post-apiservicesdomainservice
|
||||||
POST {{host_standalone}}/api
|
POST {{host_standalone}}/api
|
||||||
|
|
||||||
# HA
|
# HA tests
|
||||||
|
|
||||||
@ha = http://192.168.1.42:8123
|
@ha = http://192.168.1.42:8123
|
||||||
@ha_token = eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiIwMzMyZjU1MjhlZmM0NGIyOTgyMjIxNThiODU1NDkyNSIsImlhdCI6MTcyMTMwNDg2NSwiZXhwIjoyMDM2NjY0ODY1fQ.Q-Y7E_i7clH3ff4Ma-OMmhZfbN7aMi_CahKwmoar
|
@ha_token = eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiIwMzMyZjU1MjhlZmM0NGIyOTgyMjIxNThiODU1NDkyNSIsImlhdCI6MTcyMTMwNDg2NSwiZXhwIjoyMDM2NjY0ODY1fQ.Q-Y7E_i7clH3ff4Ma-OMmhZfbN7aMi_CahKwmoar
|
||||||
|
|||||||
@@ -11,7 +11,7 @@
|
|||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@msgpack/msgpack": "^2.8.0",
|
"@msgpack/msgpack": "^2.8.0",
|
||||||
"@trivago/prettier-plugin-sort-imports": "^4.3.0",
|
"@trivago/prettier-plugin-sort-imports": "^4.3.0",
|
||||||
"eslint": "^9.9.0",
|
"eslint": "^9.9.1",
|
||||||
"eslint-config-prettier": "^9.1.0",
|
"eslint-config-prettier": "^9.1.0",
|
||||||
"formidable": "^3.5.1",
|
"formidable": "^3.5.1",
|
||||||
"itty-router": "^5.0.18",
|
"itty-router": "^5.0.18",
|
||||||
|
|||||||
@@ -30,6 +30,7 @@ const headers = {
|
|||||||
|
|
||||||
// GLOBAL VARIABLES
|
// GLOBAL VARIABLES
|
||||||
let countWifiScanPoll = 0; // wifi network scan
|
let countWifiScanPoll = 0; // wifi network scan
|
||||||
|
let countHardwarePoll = 0; // for during an upload
|
||||||
|
|
||||||
function updateMask(entity: any, de: any, dd: any) {
|
function updateMask(entity: any, de: any, dd: any) {
|
||||||
const current_mask = parseInt(entity.slice(0, 2), 16);
|
const current_mask = parseInt(entity.slice(0, 2), 16);
|
||||||
@@ -331,6 +332,7 @@ let mqtt_settings = {
|
|||||||
publish_time_other: 10,
|
publish_time_other: 10,
|
||||||
publish_time_sensor: 10,
|
publish_time_sensor: 10,
|
||||||
publish_time_heartbeat: 60,
|
publish_time_heartbeat: 60,
|
||||||
|
publish_time_water: 60,
|
||||||
mqtt_qos: 0,
|
mqtt_qos: 0,
|
||||||
rootCA: '',
|
rootCA: '',
|
||||||
mqtt_retain: false,
|
mqtt_retain: false,
|
||||||
@@ -358,18 +360,19 @@ const ACTIVITY_ENDPOINT = REST_ENDPOINT_ROOT + 'activity';
|
|||||||
// SETTINGS
|
// SETTINGS
|
||||||
const HARDWARE_STATUS_ENDPOINT = REST_ENDPOINT_ROOT + 'hardwareStatus';
|
const HARDWARE_STATUS_ENDPOINT = REST_ENDPOINT_ROOT + 'hardwareStatus';
|
||||||
const SECURITY_SETTINGS_ENDPOINT = REST_ENDPOINT_ROOT + 'securitySettings';
|
const SECURITY_SETTINGS_ENDPOINT = REST_ENDPOINT_ROOT + 'securitySettings';
|
||||||
const RESTART_ENDPOINT = REST_ENDPOINT_ROOT + 'restart';
|
|
||||||
const RESTART_PARTITION_ENDPOINT = REST_ENDPOINT_ROOT + 'partition';
|
|
||||||
const FACTORY_RESET_ENDPOINT = REST_ENDPOINT_ROOT + 'factoryReset';
|
|
||||||
|
|
||||||
// SYSTEM SIGNIN
|
// SYSTEM SIGNIN
|
||||||
const VERIFY_AUTHORIZATION_ENDPOINT = REST_ENDPOINT_ROOT + 'verifyAuthorization';
|
const VERIFY_AUTHORIZATION_ENDPOINT = REST_ENDPOINT_ROOT + 'verifyAuthorization';
|
||||||
const SIGN_IN_ENDPOINT = REST_ENDPOINT_ROOT + 'signIn';
|
const SIGN_IN_ENDPOINT = REST_ENDPOINT_ROOT + 'signIn';
|
||||||
const GENERATE_TOKEN_ENDPOINT = REST_ENDPOINT_ROOT + 'generateToken';
|
const GENERATE_TOKEN_ENDPOINT = REST_ENDPOINT_ROOT + 'generateToken';
|
||||||
|
|
||||||
const hardware_status = {
|
const VERSION = '3.7.0-dev.0';
|
||||||
emsesp_version: '3.7-demo',
|
// const VERSION = '3.6.4';
|
||||||
|
|
||||||
|
let hardware_status = {
|
||||||
|
emsesp_version: VERSION,
|
||||||
esp_platform: 'ESP32S3',
|
esp_platform: 'ESP32S3',
|
||||||
|
build_flags: 'DEMO',
|
||||||
cpu_type: 'ESP32-S3',
|
cpu_type: 'ESP32-S3',
|
||||||
cpu_rev: 0,
|
cpu_rev: 0,
|
||||||
cpu_cores: 2,
|
cpu_cores: 2,
|
||||||
@@ -386,17 +389,18 @@ const hardware_status = {
|
|||||||
fs_used: 24,
|
fs_used: 24,
|
||||||
fs_free: 2024,
|
fs_free: 2024,
|
||||||
free_caps: 8376,
|
free_caps: 8376,
|
||||||
psram: 8189,
|
// psram: false,
|
||||||
|
psram: true,
|
||||||
psram_size: 8189,
|
psram_size: 8189,
|
||||||
free_psram: 8166,
|
free_psram: 8166,
|
||||||
has_loader: true,
|
has_loader: true,
|
||||||
// model: ''
|
// model: ''
|
||||||
model: 'BBQKees Electronics EMS Gateway E32 V2 (E32 V2.0 P3/2024011)'
|
model: 'BBQKees Electronics EMS Gateway E32 V2 (E32 V2.0 P3/2024011)',
|
||||||
|
status: 'downloading'
|
||||||
};
|
};
|
||||||
|
|
||||||
const system_status = {
|
const system_status = {
|
||||||
emsesp_version: '3.7-demo',
|
emsesp_version: VERSION,
|
||||||
esp_platform: 'ESP32',
|
|
||||||
status: 0,
|
status: 0,
|
||||||
// status: 2,
|
// status: 2,
|
||||||
uptime: 77186,
|
uptime: 77186,
|
||||||
@@ -452,6 +456,7 @@ const EMSESP_DEVICEDATA_ENDPOINT2 = REST_ENDPOINT_ROOT + 'deviceData/:id?';
|
|||||||
const EMSESP_DEVICEENTITIES_ENDPOINT1 = REST_ENDPOINT_ROOT + 'deviceEntities';
|
const EMSESP_DEVICEENTITIES_ENDPOINT1 = REST_ENDPOINT_ROOT + 'deviceEntities';
|
||||||
const EMSESP_DEVICEENTITIES_ENDPOINT2 = REST_ENDPOINT_ROOT + 'deviceEntities/:id?';
|
const EMSESP_DEVICEENTITIES_ENDPOINT2 = REST_ENDPOINT_ROOT + 'deviceEntities/:id?';
|
||||||
|
|
||||||
|
const EMSESP_CHECK_UPGRADE_ENDPOINT = REST_ENDPOINT_ROOT + 'checkUpgrade';
|
||||||
const EMSESP_BOARDPROFILE_ENDPOINT = REST_ENDPOINT_ROOT + 'boardProfile';
|
const EMSESP_BOARDPROFILE_ENDPOINT = REST_ENDPOINT_ROOT + 'boardProfile';
|
||||||
const EMSESP_WRITE_DEVICEVALUE_ENDPOINT = REST_ENDPOINT_ROOT + 'writeDeviceValue';
|
const EMSESP_WRITE_DEVICEVALUE_ENDPOINT = REST_ENDPOINT_ROOT + 'writeDeviceValue';
|
||||||
const EMSESP_WRITE_DEVICENAME_ENDPOINT = REST_ENDPOINT_ROOT + 'writeDeviceName';
|
const EMSESP_WRITE_DEVICENAME_ENDPOINT = REST_ENDPOINT_ROOT + 'writeDeviceName';
|
||||||
@@ -4207,7 +4212,21 @@ router
|
|||||||
router
|
router
|
||||||
.get(SYSTEM_STATUS_ENDPOINT, () => system_status)
|
.get(SYSTEM_STATUS_ENDPOINT, () => system_status)
|
||||||
.get(ACTIVITY_ENDPOINT, () => activity)
|
.get(ACTIVITY_ENDPOINT, () => activity)
|
||||||
.get(HARDWARE_STATUS_ENDPOINT, () => hardware_status)
|
.get(HARDWARE_STATUS_ENDPOINT, () => {
|
||||||
|
if (countHardwarePoll === 0) {
|
||||||
|
console.log('Reseting hardware count...');
|
||||||
|
}
|
||||||
|
|
||||||
|
if (countHardwarePoll >= 2) {
|
||||||
|
countHardwarePoll = 0;
|
||||||
|
hardware_status.status = 'ready';
|
||||||
|
}
|
||||||
|
|
||||||
|
console.log('Hardware count ' + countHardwarePoll + ' of 2');
|
||||||
|
countHardwarePoll++;
|
||||||
|
|
||||||
|
return hardware_status;
|
||||||
|
})
|
||||||
.get(SECURITY_SETTINGS_ENDPOINT, () => security_settings)
|
.get(SECURITY_SETTINGS_ENDPOINT, () => security_settings)
|
||||||
.post(SECURITY_SETTINGS_ENDPOINT, async (request: any) => {
|
.post(SECURITY_SETTINGS_ENDPOINT, async (request: any) => {
|
||||||
security_settings = await request.json();
|
security_settings = await request.json();
|
||||||
@@ -4215,15 +4234,6 @@ router
|
|||||||
return status(200);
|
return status(200);
|
||||||
})
|
})
|
||||||
.get(VERIFY_AUTHORIZATION_ENDPOINT, () => verify_authentication)
|
.get(VERIFY_AUTHORIZATION_ENDPOINT, () => verify_authentication)
|
||||||
.post(RESTART_ENDPOINT, () => {
|
|
||||||
console.log('restarting...');
|
|
||||||
return status(200);
|
|
||||||
})
|
|
||||||
.post(RESTART_PARTITION_ENDPOINT, () => {
|
|
||||||
console.log('restarting...');
|
|
||||||
return status(200);
|
|
||||||
})
|
|
||||||
.post(FACTORY_RESET_ENDPOINT, () => status(200))
|
|
||||||
.post(SIGN_IN_ENDPOINT, () => signin)
|
.post(SIGN_IN_ENDPOINT, () => signin)
|
||||||
.get(GENERATE_TOKEN_ENDPOINT, () => generate_token);
|
.get(GENERATE_TOKEN_ENDPOINT, () => generate_token);
|
||||||
|
|
||||||
@@ -4529,6 +4539,17 @@ router
|
|||||||
return status(200);
|
return status(200);
|
||||||
})
|
})
|
||||||
|
|
||||||
|
// check upgrade
|
||||||
|
.post(EMSESP_CHECK_UPGRADE_ENDPOINT, async (request: any) => {
|
||||||
|
const content = await request.json();
|
||||||
|
console.log('check upgrade from ', content.version);
|
||||||
|
const data = {
|
||||||
|
upgradeable: true
|
||||||
|
// upgradeable: false
|
||||||
|
};
|
||||||
|
return data;
|
||||||
|
})
|
||||||
|
|
||||||
// Settings - board profile
|
// Settings - board profile
|
||||||
.post(EMSESP_BOARDPROFILE_ENDPOINT, async (request: any) => {
|
.post(EMSESP_BOARDPROFILE_ENDPOINT, async (request: any) => {
|
||||||
const content = await request.json();
|
const content = await request.json();
|
||||||
@@ -4679,13 +4700,33 @@ router
|
|||||||
.get(EMSESP_SYSTEM_INFO_ENDPOINT, () => emsesp_info)
|
.get(EMSESP_SYSTEM_INFO_ENDPOINT, () => emsesp_info)
|
||||||
.post(API_ENDPOINT_ROOT, async (request: any) => {
|
.post(API_ENDPOINT_ROOT, async (request: any) => {
|
||||||
const data = await request.json();
|
const data = await request.json();
|
||||||
|
// check if the json data has key called cmd
|
||||||
|
let cmd = '';
|
||||||
|
if (data.hasOwnProperty('cmd')) {
|
||||||
|
cmd = data.cmd;
|
||||||
|
} else if (data.hasOwnProperty('entity')) {
|
||||||
|
cmd = data.entity;
|
||||||
|
} else {
|
||||||
|
return status(400); // bad request
|
||||||
|
}
|
||||||
|
|
||||||
if (data.device === 'system') {
|
if (data.device === 'system') {
|
||||||
if (data.entity === 'info') {
|
if (cmd === 'info') {
|
||||||
return emsesp_info;
|
return emsesp_info;
|
||||||
}
|
}
|
||||||
if (data.entity === 'allvalues') {
|
if (cmd === 'allvalues') {
|
||||||
return emsesp_allvalues;
|
return emsesp_allvalues;
|
||||||
}
|
}
|
||||||
|
if (cmd === 'format') {
|
||||||
|
console.log('formatting...');
|
||||||
|
return status(200);
|
||||||
|
}
|
||||||
|
if (cmd === 'restart') {
|
||||||
|
console.log('restarting...');
|
||||||
|
hardware_status.status = 'restarting';
|
||||||
|
countHardwarePoll = 0;
|
||||||
|
return status(200);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return status(404); // not found
|
return status(404); // not found
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -1 +0,0 @@
|
|||||||
leave empty
|
|
||||||
@@ -180,14 +180,14 @@ __metadata:
|
|||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"@eslint/config-array@npm:^0.17.1":
|
"@eslint/config-array@npm:^0.18.0":
|
||||||
version: 0.17.1
|
version: 0.18.0
|
||||||
resolution: "@eslint/config-array@npm:0.17.1"
|
resolution: "@eslint/config-array@npm:0.18.0"
|
||||||
dependencies:
|
dependencies:
|
||||||
"@eslint/object-schema": "npm:^2.1.4"
|
"@eslint/object-schema": "npm:^2.1.4"
|
||||||
debug: "npm:^4.3.1"
|
debug: "npm:^4.3.1"
|
||||||
minimatch: "npm:^3.1.2"
|
minimatch: "npm:^3.1.2"
|
||||||
checksum: 10c0/b986a0a96f2b42467578968ce3d4ae3b9284e587f8490f2dcdc44ff1b8d30580c62b221da6e58d07b09e156c3050e2dc38267f9370521d9cafc099c4e30154ef
|
checksum: 10c0/0234aeb3e6b052ad2402a647d0b4f8a6aa71524bafe1adad0b8db1dfe94d7f5f26d67c80f79bb37ac61361a1d4b14bb8fb475efe501de37263cf55eabb79868f
|
||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
@@ -208,10 +208,10 @@ __metadata:
|
|||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"@eslint/js@npm:9.9.0":
|
"@eslint/js@npm:9.9.1":
|
||||||
version: 9.9.0
|
version: 9.9.1
|
||||||
resolution: "@eslint/js@npm:9.9.0"
|
resolution: "@eslint/js@npm:9.9.1"
|
||||||
checksum: 10c0/6ec9f1f0d576132444d6a5c66a8a08b0be9444e3ebb563fa6a6bebcf5299df3da7e454dc04c0fa601bb811197f00764b3a04430d8458cdb8e3a4677993d23f30
|
checksum: 10c0/a3a91de2ce78469f7c4eee78c1eba77360706e1d0fa0ace2e19102079bcf237b851217c85ea501dc92c4c3719d60d9df966977abc8554d4c38e3638c1f53dcb2
|
||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
@@ -574,15 +574,15 @@ __metadata:
|
|||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"eslint@npm:^9.9.0":
|
"eslint@npm:^9.9.1":
|
||||||
version: 9.9.0
|
version: 9.9.1
|
||||||
resolution: "eslint@npm:9.9.0"
|
resolution: "eslint@npm:9.9.1"
|
||||||
dependencies:
|
dependencies:
|
||||||
"@eslint-community/eslint-utils": "npm:^4.2.0"
|
"@eslint-community/eslint-utils": "npm:^4.2.0"
|
||||||
"@eslint-community/regexpp": "npm:^4.11.0"
|
"@eslint-community/regexpp": "npm:^4.11.0"
|
||||||
"@eslint/config-array": "npm:^0.17.1"
|
"@eslint/config-array": "npm:^0.18.0"
|
||||||
"@eslint/eslintrc": "npm:^3.1.0"
|
"@eslint/eslintrc": "npm:^3.1.0"
|
||||||
"@eslint/js": "npm:9.9.0"
|
"@eslint/js": "npm:9.9.1"
|
||||||
"@humanwhocodes/module-importer": "npm:^1.0.1"
|
"@humanwhocodes/module-importer": "npm:^1.0.1"
|
||||||
"@humanwhocodes/retry": "npm:^0.3.0"
|
"@humanwhocodes/retry": "npm:^0.3.0"
|
||||||
"@nodelib/fs.walk": "npm:^1.2.8"
|
"@nodelib/fs.walk": "npm:^1.2.8"
|
||||||
@@ -619,7 +619,7 @@ __metadata:
|
|||||||
optional: true
|
optional: true
|
||||||
bin:
|
bin:
|
||||||
eslint: bin/eslint.js
|
eslint: bin/eslint.js
|
||||||
checksum: 10c0/3a22f68c99d75dcbafe6e2fef18d2b5bbcc960c2437f48a414ccf9ca214254733a18e6b79d07bbd374a2369a648413e421aabd07b11be3de5a44d5a4b9997877
|
checksum: 10c0/5e71efda7c0a14ee95436d5cdfed04ee61dfb1d89d7a32b50a424de2e680af82849628ea6581950c2e0726491f786a3cfd0032ce013c1c5093786e475cfdfb33
|
||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
@@ -960,7 +960,7 @@ __metadata:
|
|||||||
dependencies:
|
dependencies:
|
||||||
"@msgpack/msgpack": "npm:^2.8.0"
|
"@msgpack/msgpack": "npm:^2.8.0"
|
||||||
"@trivago/prettier-plugin-sort-imports": "npm:^4.3.0"
|
"@trivago/prettier-plugin-sort-imports": "npm:^4.3.0"
|
||||||
eslint: "npm:^9.9.0"
|
eslint: "npm:^9.9.1"
|
||||||
eslint-config-prettier: "npm:^9.1.0"
|
eslint-config-prettier: "npm:^9.1.0"
|
||||||
formidable: "npm:^3.5.1"
|
formidable: "npm:^3.5.1"
|
||||||
itty-router: "npm:^5.0.18"
|
itty-router: "npm:^5.0.18"
|
||||||
|
|||||||
@@ -16,10 +16,9 @@
|
|||||||
; my_build_flags = -DEMSESP_DEBUG -DEMSESP_TEST -DEMSESP_PINGTEST
|
; my_build_flags = -DEMSESP_DEBUG -DEMSESP_TEST -DEMSESP_PINGTEST
|
||||||
|
|
||||||
[platformio]
|
[platformio]
|
||||||
; default_envs = s_4M
|
|
||||||
; default_envs = s_16M_P ; BBQKees E32V2
|
; default_envs = s_16M_P ; BBQKees E32V2
|
||||||
; default_envs = s3_16M ; BBQKees S3
|
; default_envs = s3_16M_P ; BBQKees S3
|
||||||
; default_envs = c3_mini_4M
|
default_envs = s_4M ; BBQKees S32
|
||||||
; default_envs = native
|
; default_envs = native
|
||||||
; default_envs = debug
|
; default_envs = debug
|
||||||
|
|
||||||
@@ -27,11 +26,10 @@
|
|||||||
; upload settings
|
; upload settings
|
||||||
; for USB
|
; for USB
|
||||||
; upload_protocol = esptool
|
; upload_protocol = esptool
|
||||||
; upload_port = /dev/ttyUSB*
|
upload_port = /dev/ttyUSB*
|
||||||
; for OTA add scripts/upload.py to extra_scripts
|
; for OTA add scripts/upload.py to extra_scripts
|
||||||
upload_protocol = custom
|
upload_protocol = custom
|
||||||
; custom_emsesp_ip = 10.10.10.175
|
custom_emsesp_ip = 10.10.10.175
|
||||||
custom_emsesp_ip = 192.168.1.23
|
|
||||||
; custom_emsesp_ip = ems-esp.local
|
; custom_emsesp_ip = ems-esp.local
|
||||||
custom_username = admin
|
custom_username = admin
|
||||||
custom_password = admin
|
custom_password = admin
|
||||||
@@ -45,19 +43,19 @@ extra_scripts =
|
|||||||
; pre:scripts/refresh_module_library_native.py
|
; pre:scripts/refresh_module_library_native.py
|
||||||
post:scripts/run_native.py
|
post:scripts/run_native.py
|
||||||
|
|
||||||
[env:s3_16M]
|
|
||||||
extra_scripts =
|
|
||||||
pre:scripts/build_interface.py ; comment out if you don't want to re-build the WebUI each time
|
|
||||||
scripts/rename_fw.py
|
|
||||||
scripts/upload.py
|
|
||||||
|
|
||||||
[env:s_16M_P]
|
[env:s_16M_P]
|
||||||
extra_scripts =
|
extra_scripts =
|
||||||
pre:scripts/build_interface.py ; comment out if you don't want to re-build the WebUI each time
|
pre:scripts/build_interface.py ; comment out if you don't want to re-build the WebUI each time
|
||||||
scripts/rename_fw.py
|
scripts/rename_fw.py
|
||||||
scripts/upload.py
|
scripts/upload.py
|
||||||
|
|
||||||
[env:c3_mini_4M]
|
[env:s3_16M_P]
|
||||||
|
extra_scripts =
|
||||||
|
; pre:scripts/build_interface.py ; comment out if you don't want to re-build the WebUI each time
|
||||||
|
scripts/rename_fw.py
|
||||||
|
scripts/upload.py
|
||||||
|
|
||||||
|
[env:s_4M]
|
||||||
extra_scripts =
|
extra_scripts =
|
||||||
pre:scripts/build_interface.py ; comment out if you don't want to re-build the WebUI each time
|
pre:scripts/build_interface.py ; comment out if you don't want to re-build the WebUI each time
|
||||||
scripts/rename_fw.py
|
scripts/rename_fw.py
|
||||||
|
|||||||
@@ -43,7 +43,8 @@ framework = arduino
|
|||||||
board_build.filesystem = littlefs
|
board_build.filesystem = littlefs
|
||||||
build_flags =
|
build_flags =
|
||||||
${common.build_flags}
|
${common.build_flags}
|
||||||
build_unflags = ${common.unbuild_flags}
|
build_unflags =
|
||||||
|
${common.unbuild_flags}
|
||||||
extra_scripts =
|
extra_scripts =
|
||||||
pre:scripts/build_interface.py
|
pre:scripts/build_interface.py
|
||||||
scripts/rename_fw.py
|
scripts/rename_fw.py
|
||||||
@@ -51,18 +52,15 @@ extra_scripts =
|
|||||||
[espressi32_base_tasmota]
|
[espressi32_base_tasmota]
|
||||||
; use Tasmota's library for 4MB variants
|
; use Tasmota's library for 4MB variants
|
||||||
; it removes some unused libs (like mbedtsl, so no WiFi_secure.h) and increases available heap
|
; it removes some unused libs (like mbedtsl, so no WiFi_secure.h) and increases available heap
|
||||||
; Tasmota Arduino Core 2.0.17 with IPv6 support, based on IDF 4.4.7
|
|
||||||
; platform = https://github.com/tasmota/platform-espressif32/releases/download/2024.05.00/platform-espressif32.zip
|
|
||||||
; Tasmota Arduino Core 2.0.18 with IPv6 support, based on IDF 4.4.8
|
; Tasmota Arduino Core 2.0.18 with IPv6 support, based on IDF 4.4.8
|
||||||
platform = https://github.com/tasmota/platform-espressif32/releases/download/2024.06.00/platform-espressif32.zip
|
platform = https://github.com/tasmota/platform-espressif32/releases/download/2024.06.00/platform-espressif32.zip
|
||||||
; Tasmota Arduino Core 3.0.1.240605 based on IDF v5.1.4.240602
|
|
||||||
; platform = https://github.com/tasmota/platform-espressif32/releases/download/2024.06.10/platform-espressif32.zip
|
|
||||||
framework = arduino
|
framework = arduino
|
||||||
board_build.filesystem = littlefs
|
board_build.filesystem = littlefs
|
||||||
build_flags =
|
build_flags =
|
||||||
${common.build_flags}
|
${common.build_flags}
|
||||||
-DTASMOTA_SDK
|
-DTASMOTA_SDK
|
||||||
build_unflags = ${common.unbuild_flags}
|
build_unflags =
|
||||||
|
${common.unbuild_flags}
|
||||||
extra_scripts =
|
extra_scripts =
|
||||||
pre:scripts/build_interface.py
|
pre:scripts/build_interface.py
|
||||||
scripts/rename_fw.py
|
scripts/rename_fw.py
|
||||||
@@ -82,7 +80,7 @@ lib_deps =
|
|||||||
https://github.com/emsesp/EMS-ESP-Modules.git
|
https://github.com/emsesp/EMS-ESP-Modules.git
|
||||||
|
|
||||||
;
|
;
|
||||||
; build for GitHub Actions CI
|
; builds for GitHub Actions CI
|
||||||
;
|
;
|
||||||
; the Web interface is built seperately during the GH Action so is skipped (not included in extra_scripts)
|
; the Web interface is built seperately during the GH Action so is skipped (not included in extra_scripts)
|
||||||
;
|
;
|
||||||
@@ -91,30 +89,27 @@ lib_deps =
|
|||||||
extends = espressi32_base_tasmota
|
extends = espressi32_base_tasmota
|
||||||
extra_scripts = scripts/rename_fw.py
|
extra_scripts = scripts/rename_fw.py
|
||||||
board = esp32dev
|
board = esp32dev
|
||||||
|
board_upload.flash_size = 4MB
|
||||||
board_build.partitions = esp32_partition_4M.csv
|
board_build.partitions = esp32_partition_4M.csv
|
||||||
build_flags =
|
board_build.extra_flags = '-DEMSESP_DEFAULT_BOARD_PROFILE="S32"'
|
||||||
${espressi32_base_tasmota.build_flags}
|
|
||||||
|
|
||||||
[env:ci_s_16M]
|
[env:ci_s_16M]
|
||||||
; 16MB ESP32 - using Tasmota - no SSL, no PSRAM - like the BBQKees older S32 models
|
; 16MB ESP32 - using Tasmota - no SSL, no PSRAM - like the BBQKees older S32 models
|
||||||
extends = espressi32_base_tasmota
|
extends = espressi32_base_tasmota
|
||||||
extra_scripts = scripts/rename_fw.py
|
extra_scripts = scripts/rename_fw.py
|
||||||
board = esp32dev
|
board = esp32dev
|
||||||
|
board_upload.flash_size = 16MB
|
||||||
board_build.partitions = esp32_partition_16M.csv
|
board_build.partitions = esp32_partition_16M.csv
|
||||||
build_flags =
|
board_build.extra_flags = '-DEMSESP_DEFAULT_BOARD_PROFILE="S32"'
|
||||||
${espressi32_base_tasmota.build_flags}
|
|
||||||
'-DEMSESP_DEFAULT_BOARD_PROFILE="S32"'
|
|
||||||
|
|
||||||
[env:ci_s_16M_P]
|
[env:ci_s_16M_P]
|
||||||
; 16MB ESP32 - with PSRAM - like BBQKees E32V2
|
; 16MB ESP32 - with PSRAM - like BBQKees E32V2
|
||||||
extends = espressi32_base
|
extends = espressi32_base
|
||||||
extra_scripts = scripts/rename_fw.py
|
extra_scripts = scripts/rename_fw.py
|
||||||
board = esp32dev
|
board = esp32dev
|
||||||
|
board_upload.flash_size = 16MB
|
||||||
board_build.partitions = esp32_partition_16M.csv
|
board_build.partitions = esp32_partition_16M.csv
|
||||||
board_build.extra_flags = -DBOARD_HAS_PSRAM
|
board_build.extra_flags = -DBOARD_HAS_PSRAM '-DEMSESP_DEFAULT_BOARD_PROFILE="E32V2"'
|
||||||
build_flags =
|
|
||||||
${espressi32_base.build_flags}
|
|
||||||
'-DEMSESP_DEFAULT_BOARD_PROFILE="E32V2"'
|
|
||||||
|
|
||||||
[env:ci_s3_16M_P]
|
[env:ci_s3_16M_P]
|
||||||
; 16MB ESP32-S3 - with PSRAM - like BBQKees S3
|
; 16MB ESP32-S3 - with PSRAM - like BBQKees S3
|
||||||
@@ -124,44 +119,41 @@ board = lolin_s3
|
|||||||
board_build.f_cpu = 240000000L
|
board_build.f_cpu = 240000000L
|
||||||
board_upload.flash_size = 16MB
|
board_upload.flash_size = 16MB
|
||||||
board_build.partitions = esp32_partition_16M.csv
|
board_build.partitions = esp32_partition_16M.csv
|
||||||
build_unflags = ${common.unbuild_flags}
|
board_build.extra_flags = -DBOARD_HAS_PSRAM '-DEMSESP_DEFAULT_BOARD_PROFILE="S32S3"'
|
||||||
build_flags =
|
|
||||||
${espressi32_base.build_flags}
|
|
||||||
'-DEMSESP_DEFAULT_BOARD_PROFILE="S32S3"'
|
|
||||||
|
|
||||||
;
|
;
|
||||||
; Direct builds
|
; Direct builds
|
||||||
;
|
;
|
||||||
|
; For board params see jsonb files in https://github.com/platformio/platform-espressif32/tree/master/boards
|
||||||
|
;
|
||||||
|
|
||||||
[env:s_4M]
|
[env:s_4M]
|
||||||
extends = espressi32_base_tasmota
|
extends = espressi32_base_tasmota
|
||||||
board = esp32dev
|
board = esp32dev
|
||||||
board_upload.flash_size = 4MB
|
board_upload.flash_size = 4MB
|
||||||
board_build.partitions = esp32_partition_4M.csv
|
board_build.partitions = esp32_partition_4M.csv
|
||||||
build_flags =
|
board_build.extra_flags = '-DEMSESP_DEFAULT_BOARD_PROFILE="S32"'
|
||||||
${espressi32_base_tasmota.build_flags}
|
|
||||||
|
|
||||||
[env:s_asym_4M]
|
[env:s_asym_4M]
|
||||||
extends = espressi32_base_tasmota
|
extends = espressi32_base_tasmota
|
||||||
board = esp32dev
|
board = esp32dev
|
||||||
board_upload.flash_size = 4MB
|
board_upload.flash_size = 4MB
|
||||||
board_build.partitions = esp32_asym_partition_4M.csv
|
board_build.partitions = esp32_asym_partition_4M.csv
|
||||||
|
board_build.extra_flags = '-DEMSESP_DEFAULT_BOARD_PROFILE="S32"'
|
||||||
|
|
||||||
[env:s_16M_P]
|
[env:s_16M_P]
|
||||||
extends = espressi32_base
|
extends = espressi32_base
|
||||||
board = esp32dev
|
board = esp32dev
|
||||||
board_build.extra_flags = -DBOARD_HAS_PSRAM
|
|
||||||
board_upload.flash_size = 16MB
|
board_upload.flash_size = 16MB
|
||||||
board_build.partitions = esp32_partition_16M.csv
|
board_build.partitions = esp32_partition_16M.csv
|
||||||
|
board_build.extra_flags = -DBOARD_HAS_PSRAM '-DEMSESP_DEFAULT_BOARD_PROFILE="S32"'
|
||||||
|
|
||||||
[env:c3_mini_4M]
|
[env:c3_mini_4M]
|
||||||
extends = espressi32_base_tasmota
|
extends = espressi32_base_tasmota
|
||||||
board = lolin_c3_mini
|
board = lolin_c3_mini
|
||||||
board_upload.flash_size = 4MB
|
board_upload.flash_size = 4MB
|
||||||
board_build.partitions = esp32_partition_4M.csv
|
board_build.partitions = esp32_partition_4M.csv
|
||||||
build_flags =
|
board_build.extra_flags = '-DEMSESP_DEFAULT_BOARD_PROFILE="C3MINI"'
|
||||||
${espressi32_base_tasmota.build_flags}
|
|
||||||
'-DEMSESP_DEFAULT_BOARD_PROFILE="C3MINI"'
|
|
||||||
|
|
||||||
; lolin C3 mini v1 needs special wifi init.
|
; lolin C3 mini v1 needs special wifi init.
|
||||||
; https://www.wemos.cc/en/latest/c3/c3_mini_1_0_0.html#about-wifi
|
; https://www.wemos.cc/en/latest/c3/c3_mini_1_0_0.html#about-wifi
|
||||||
@@ -170,60 +162,32 @@ extends = espressi32_base_tasmota
|
|||||||
board = lolin_c3_mini
|
board = lolin_c3_mini
|
||||||
board_upload.flash_size = 4MB
|
board_upload.flash_size = 4MB
|
||||||
board_build.partitions = esp32_partition_4M.csv
|
board_build.partitions = esp32_partition_4M.csv
|
||||||
build_flags =
|
board_build.extra_flags = -DBOARD_C3_MINI_V1 '-DEMSESP_DEFAULT_BOARD_PROFILE="C3MINI"'
|
||||||
${espressi32_base_tasmota.build_flags}
|
|
||||||
-DBOARD_C3_MINI_V1
|
|
||||||
'-DEMSESP_DEFAULT_BOARD_PROFILE="C3MINI"'
|
|
||||||
|
|
||||||
[env:s2_4M]
|
[env:s2_4M]
|
||||||
extends = espressi32_base_tasmota
|
extends = espressi32_base_tasmota
|
||||||
board = lolin_s2_mini
|
board = lolin_s2_mini
|
||||||
board_upload.flash_size = 4MB
|
board_upload.flash_size = 4MB
|
||||||
board_build.partitions = esp32_partition_4M.csv
|
board_build.partitions = esp32_partition_4M.csv
|
||||||
build_flags =
|
board_build.extra_flags = '-DEMSESP_DEFAULT_BOARD_PROFILE="S2MINI"'
|
||||||
${espressi32_base_tasmota.build_flags}
|
|
||||||
'-DEMSESP_DEFAULT_BOARD_PROFILE="S2MINI"'
|
|
||||||
|
|
||||||
[env:s3_16M]
|
[env:s3_16M_P]
|
||||||
extends = espressi32_base
|
extends = espressi32_base
|
||||||
board = lolin_s3
|
board = lolin_s3
|
||||||
board_build.f_cpu = 240000000L
|
|
||||||
board_upload.flash_size = 16MB
|
|
||||||
board_build.partitions = esp32_partition_16M.csv
|
|
||||||
board_upload.use_1200bps_touch = false
|
board_upload.use_1200bps_touch = false
|
||||||
board_upload.wait_for_upload_port = false
|
board_upload.wait_for_upload_port = false
|
||||||
build_flags =
|
|
||||||
${espressi32_base.build_flags}
|
|
||||||
'-DEMSESP_DEFAULT_BOARD_PROFILE="S32S3"'
|
|
||||||
|
|
||||||
[env:s3_32M]
|
|
||||||
extends = espressi32_base
|
|
||||||
board = lolin_s3
|
|
||||||
board_build.f_cpu = 240000000L
|
|
||||||
board_upload.flash_size = 32MB
|
|
||||||
board_build.partitions = esp32_partition_32M.csv
|
|
||||||
board_build.flash_mode = opi
|
|
||||||
board_build.arduino.memory_type: opi_opi
|
|
||||||
build_unflags = ${common.unbuild_flags}
|
|
||||||
build_flags =
|
|
||||||
${espressi32_base.build_flags}
|
|
||||||
'-DEMSESP_DEFAULT_BOARD_PROFILE="S32S3"'
|
|
||||||
|
|
||||||
# for testing against the latest Arduino core v3 with IDF 5.1
|
|
||||||
[env:espressi32_v3]
|
|
||||||
platform = espressif32
|
|
||||||
platform_packages=
|
|
||||||
platformio/framework-arduinoespressif32 @ https://github.com/espressif/arduino-esp32.git#3.0.1
|
|
||||||
platformio/framework-arduinoespressif32-libs @ https://github.com/espressif/esp32-arduino-libs.git#idf-release/v5.1
|
|
||||||
framework = arduino
|
|
||||||
board = esp32dev
|
|
||||||
board_build.filesystem = littlefs
|
|
||||||
board_upload.flash_size = 16MB
|
board_upload.flash_size = 16MB
|
||||||
board_build.partitions = esp32_partition_16M.csv
|
board_build.partitions = esp32_partition_16M.csv
|
||||||
board_build.extra_flags = -DBOARD_HAS_PSRAM
|
board_build.extra_flags = -DBOARD_HAS_PSRAM '-DEMSESP_DEFAULT_BOARD_PROFILE="S32S3"'
|
||||||
build_flags =
|
|
||||||
${common.build_flags}
|
[env:s3_32M_P]
|
||||||
build_unflags = ${common.unbuild_flags}
|
extends = espressi32_base
|
||||||
|
board = lolin_s3
|
||||||
|
board_build.arduino.memory_type: opi_opi
|
||||||
|
board_build.flash_mode = opi
|
||||||
|
board_upload.flash_size = 32MB
|
||||||
|
board_build.partitions = esp32_partition_32M.csv
|
||||||
|
board_build.extra_flags = -DBOARD_HAS_PSRAM '-DEMSESP_DEFAULT_BOARD_PROFILE="S32S3"'
|
||||||
|
|
||||||
;
|
;
|
||||||
; Building and testing natively, standalone without an ESP32.
|
; Building and testing natively, standalone without an ESP32.
|
||||||
|
|||||||
@@ -54,8 +54,11 @@ def bin_copy(source, target, env):
|
|||||||
|
|
||||||
print("*********************************************")
|
print("*********************************************")
|
||||||
print("EMS-ESP version: " + app_version)
|
print("EMS-ESP version: " + app_version)
|
||||||
print("Has PSRAM: "+str(psram))
|
|
||||||
print("mcu: "+str(mcu))
|
# show psram as Yes or No
|
||||||
|
psram_status = "Yes" if psram else "No"
|
||||||
|
print("Has PSRAM: " + psram_status)
|
||||||
|
print("MCU: "+str(mcu))
|
||||||
print("Flash Mem: " + flash_mem)
|
print("Flash Mem: " + flash_mem)
|
||||||
|
|
||||||
# convert . to _ so Windows doesn't complain
|
# convert . to _ so Windows doesn't complain
|
||||||
@@ -84,17 +87,19 @@ def bin_copy(source, target, env):
|
|||||||
if os.path.isfile(f):
|
if os.path.isfile(f):
|
||||||
os.remove(f)
|
os.remove(f)
|
||||||
|
|
||||||
print("Renaming file to "+bin_file)
|
print("Filename: "+bin_file)
|
||||||
|
|
||||||
# copy firmware.bin to firmware/<variant>.bin
|
# copy firmware.bin to firmware/<variant>.bin
|
||||||
shutil.copy(str(target[0]), bin_file)
|
shutil.copy(str(target[0]), bin_file)
|
||||||
|
|
||||||
with open(bin_file,"rb") as f:
|
with open(bin_file,"rb") as f:
|
||||||
result = hashlib.md5(f.read())
|
result = hashlib.md5(f.read())
|
||||||
print("Calculating MD5: "+result.hexdigest())
|
print("MD5: "+result.hexdigest())
|
||||||
file1 = open(md5_file, 'w')
|
file1 = open(md5_file, 'w')
|
||||||
file1.write(result.hexdigest())
|
file1.write(result.hexdigest())
|
||||||
file1.close()
|
file1.close()
|
||||||
|
|
||||||
|
print("*********************************************")
|
||||||
|
|
||||||
env.AddPostAction("$BUILD_DIR/${PROGNAME}.bin", [bin_copy])
|
env.AddPostAction("$BUILD_DIR/${PROGNAME}.bin", [bin_copy])
|
||||||
env.AddPostAction("$BUILD_DIR/${PROGNAME}.md5", [bin_copy])
|
env.AddPostAction("$BUILD_DIR/${PROGNAME}.md5", [bin_copy])
|
||||||
|
|||||||
@@ -35,7 +35,7 @@ def move_file(source, target, env):
|
|||||||
print("app version: " + app_version)
|
print("app version: " + app_version)
|
||||||
print("platform: " + platform)
|
print("platform: " + platform)
|
||||||
|
|
||||||
# TODO do I need .exe for windows?
|
# TODO do we need to add a .exe extension for windows? - need to test
|
||||||
variant = "native"
|
variant = "native"
|
||||||
|
|
||||||
# check if output directories exist and create if necessary
|
# check if output directories exist and create if necessary
|
||||||
|
|||||||
@@ -1,7 +1,9 @@
|
|||||||
|
|
||||||
# Modified from https://github.com/ayushsharma82/ElegantOTA
|
# Modified from https://github.com/ayushsharma82/ElegantOTA
|
||||||
|
#
|
||||||
# This is called during the platformIO upload process
|
# This is called during the PlatformIO upload process, when the target is 'upload'.
|
||||||
|
# Use the file upload_cli.py for manual uploads outside PIO.
|
||||||
|
#
|
||||||
# To use create a pio_local.ini file in the project root and add the following:
|
# To use create a pio_local.ini file in the project root and add the following:
|
||||||
# [env]
|
# [env]
|
||||||
# upload_protocol = custom
|
# upload_protocol = custom
|
||||||
@@ -12,7 +14,6 @@
|
|||||||
# and
|
# and
|
||||||
# extra_scripts = scripts/upload.py
|
# extra_scripts = scripts/upload.py
|
||||||
#
|
#
|
||||||
# This only works when the PlatformIO target is upload
|
|
||||||
|
|
||||||
import requests
|
import requests
|
||||||
import hashlib
|
import hashlib
|
||||||
@@ -67,7 +68,7 @@ def on_upload(source, target, env):
|
|||||||
"password": password
|
"password": password
|
||||||
}
|
}
|
||||||
|
|
||||||
response = requests.post(signon_url, json=username_password, headers=signon_headers, auth=None)
|
response = requests.post(signon_url, json=username_password, headers=signon_headers)
|
||||||
|
|
||||||
if response.status_code != 200:
|
if response.status_code != 200:
|
||||||
print_fail("Authentication failed (code " + str(response.status_code) + ")")
|
print_fail("Authentication failed (code " + str(response.status_code) + ")")
|
||||||
@@ -115,7 +116,7 @@ def on_upload(source, target, env):
|
|||||||
|
|
||||||
upload_url = f"{emsesp_url}/rest/uploadFile"
|
upload_url = f"{emsesp_url}/rest/uploadFile"
|
||||||
|
|
||||||
response = requests.post(upload_url, data=monitor, headers=post_headers, auth=None)
|
response = requests.post(upload_url, data=monitor, headers=post_headers)
|
||||||
|
|
||||||
bar.close()
|
bar.close()
|
||||||
time.sleep(0.1)
|
time.sleep(0.1)
|
||||||
@@ -125,7 +126,22 @@ def on_upload(source, target, env):
|
|||||||
if response.status_code != 200:
|
if response.status_code != 200:
|
||||||
print_fail("Upload failed (code " + response.status.code + ").")
|
print_fail("Upload failed (code " + response.status.code + ").")
|
||||||
else:
|
else:
|
||||||
print_success("Upload successful.")
|
print_success("Upload successful. Rebooting device.")
|
||||||
|
restart_headers = {
|
||||||
|
'Host': host_ip,
|
||||||
|
'User-Agent': 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/118.0',
|
||||||
|
'Accept': '*/*',
|
||||||
|
'Accept-Language': 'de,en-US;q=0.7,en;q=0.3',
|
||||||
|
'Accept-Encoding': 'gzip, deflate',
|
||||||
|
'Referer': f'{emsesp_url}',
|
||||||
|
'Content-Type': 'application/json',
|
||||||
|
'Connection': 'keep-alive',
|
||||||
|
'Authorization': 'Bearer ' + f'{access_token}'
|
||||||
|
}
|
||||||
|
restart_url = f"{emsesp_url}/api/system/restart"
|
||||||
|
response = requests.get(restart_url, headers=restart_headers)
|
||||||
|
if response.status_code != 200:
|
||||||
|
print_fail("Restart failed (code " + str(response.status_code) + ")")
|
||||||
|
|
||||||
print()
|
print()
|
||||||
|
|
||||||
|
|||||||
@@ -215,20 +215,6 @@ static void setup_commands(std::shared_ptr<Commands> & commands) {
|
|||||||
string_vector{F_(wifi), F_(reconnect)},
|
string_vector{F_(wifi), F_(reconnect)},
|
||||||
[](Shell & shell, const std::vector<std::string> & arguments) { to_app(shell).system_.wifi_reconnect(); });
|
[](Shell & shell, const std::vector<std::string> & arguments) { to_app(shell).system_.wifi_reconnect(); });
|
||||||
|
|
||||||
commands->add_command(ShellContext::MAIN, CommandFlags::ADMIN, string_vector{F_(format)}, [](Shell & shell, const std::vector<std::string> & arguments) {
|
|
||||||
shell.enter_password(F_(password_prompt), [=](Shell & shell, bool completed, const std::string & password) {
|
|
||||||
if (completed) {
|
|
||||||
to_app(shell).esp8266React.getSecuritySettingsService()->read([&](SecuritySettings & securitySettings) {
|
|
||||||
if (securitySettings.jwtSecret.equals(password.c_str())) {
|
|
||||||
to_app(shell).system_.format(shell);
|
|
||||||
} else {
|
|
||||||
shell.println("incorrect password");
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
//
|
//
|
||||||
// SET commands
|
// SET commands
|
||||||
//
|
//
|
||||||
@@ -285,7 +271,8 @@ static void setup_commands(std::shared_ptr<Commands> & commands) {
|
|||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
commands->add_command(ShellContext::MAIN,
|
commands->add_command(
|
||||||
|
ShellContext::MAIN,
|
||||||
CommandFlags::ADMIN,
|
CommandFlags::ADMIN,
|
||||||
string_vector{F_(set), F_(board_profile)},
|
string_vector{F_(set), F_(board_profile)},
|
||||||
string_vector{F_(name_mandatory), F_(nvs_optional)},
|
string_vector{F_(name_mandatory), F_(nvs_optional)},
|
||||||
@@ -293,7 +280,7 @@ static void setup_commands(std::shared_ptr<Commands> & commands) {
|
|||||||
std::vector<int8_t> data; // led, dallas, rx, tx, button, phy_type, eth_power, eth_phy_addr, eth_clock_mode
|
std::vector<int8_t> data; // led, dallas, rx, tx, button, phy_type, eth_power, eth_phy_addr, eth_clock_mode
|
||||||
std::string board_profile = Helpers::toUpper(arguments.front());
|
std::string board_profile = Helpers::toUpper(arguments.front());
|
||||||
if (!to_app(shell).system_.load_board_profile(data, board_profile)) {
|
if (!to_app(shell).system_.load_board_profile(data, board_profile)) {
|
||||||
shell.println("Invalid board profile (S32, E32, E32V2, MH-ET, NODEMCU, OLIMEX, OLIMEXPOE, C3MINI, S2MINI, S3MINI, CUSTOM)");
|
shell.println("Invalid board profile (S32, E32, E32V2, MH-ET, NODEMCU, LOLIN, OLIMEX, OLIMEXPOE, C3MINI, S2MINI, S3MINI, S32S3, CUSTOM)");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (arguments.size() == 2 && Helpers::toLower(arguments.back()) == "nvs") {
|
if (arguments.size() == 2 && Helpers::toLower(arguments.back()) == "nvs") {
|
||||||
@@ -651,11 +638,7 @@ void EMSESPShell::stopped() {
|
|||||||
void EMSESPShell::display_banner() {
|
void EMSESPShell::display_banner() {
|
||||||
println();
|
println();
|
||||||
printfln("┌───────────────────────────────────────┐");
|
printfln("┌───────────────────────────────────────┐");
|
||||||
#ifndef EMSESP_DEBUG
|
|
||||||
printfln("│ %sEMS-ESP version %-20s%s │", COLOR_BOLD_ON, EMSESP_APP_VERSION, COLOR_BOLD_OFF);
|
printfln("│ %sEMS-ESP version %-20s%s │", COLOR_BOLD_ON, EMSESP_APP_VERSION, COLOR_BOLD_OFF);
|
||||||
#else
|
|
||||||
printfln("│ %sEMS-ESP version %s%-8s%s │", COLOR_BOLD_ON, EMSESP_APP_VERSION, " (D)", COLOR_BOLD_OFF);
|
|
||||||
#endif
|
|
||||||
printfln("│ │");
|
printfln("│ │");
|
||||||
printfln("│ %shelp%s to show available commands │", COLOR_UNDERLINE, COLOR_RESET);
|
printfln("│ %shelp%s to show available commands │", COLOR_UNDERLINE, COLOR_RESET);
|
||||||
printfln("│ %ssu%s to access admin commands │", COLOR_UNDERLINE, COLOR_RESET);
|
printfln("│ %ssu%s to access admin commands │", COLOR_UNDERLINE, COLOR_RESET);
|
||||||
|
|||||||
@@ -1569,7 +1569,7 @@ void EMSESP::start() {
|
|||||||
// do a quick scan of the filesystem to see if we have a /config folder
|
// do a quick scan of the filesystem to see if we have a /config folder
|
||||||
// so we know if this is a new install or not
|
// so we know if this is a new install or not
|
||||||
#ifndef EMSESP_STANDALONE
|
#ifndef EMSESP_STANDALONE
|
||||||
File root = LittleFS.open("/config");
|
File root = LittleFS.open(EMSESP_FS_CONFIG_DIRECTORY);
|
||||||
bool factory_settings = !root;
|
bool factory_settings = !root;
|
||||||
if (!root) {
|
if (!root) {
|
||||||
LOG_INFO("No config found, assuming factory settings");
|
LOG_INFO("No config found, assuming factory settings");
|
||||||
@@ -1589,9 +1589,9 @@ void EMSESP::start() {
|
|||||||
LOG_DEBUG("NVS device information: %s", system_.getBBQKeesGatewayDetails().c_str());
|
LOG_DEBUG("NVS device information: %s", system_.getBBQKeesGatewayDetails().c_str());
|
||||||
|
|
||||||
#ifndef EMSESP_STANDALONE
|
#ifndef EMSESP_STANDALONE
|
||||||
LOG_INFO("Starting EMS-ESP version %s from %s partition", EMSESP_APP_VERSION, esp_ota_get_running_partition()->label); // welcome message
|
LOG_INFO("Booting EMS-ESP version %s from %s partition", EMSESP_APP_VERSION, esp_ota_get_running_partition()->label); // welcome message
|
||||||
#else
|
#else
|
||||||
LOG_INFO("Starting EMS-ESP version %s", EMSESP_APP_VERSION); // welcome message
|
LOG_INFO("Booting EMS-ESP version %s", EMSESP_APP_VERSION); // welcome message
|
||||||
#endif
|
#endif
|
||||||
LOG_DEBUG("System is running in Debug mode");
|
LOG_DEBUG("System is running in Debug mode");
|
||||||
LOG_INFO("Last system reset reason Core0: %s, Core1: %s", system_.reset_reason(0).c_str(), system_.reset_reason(1).c_str());
|
LOG_INFO("Last system reset reason Core0: %s, Core1: %s", system_.reset_reason(0).c_str(), system_.reset_reason(1).c_str());
|
||||||
@@ -1610,6 +1610,12 @@ void EMSESP::start() {
|
|||||||
system_.system_restart();
|
system_.system_restart();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// Load our library of known devices into stack mem. Names are stored in Flash memory
|
||||||
|
device_library_ = {
|
||||||
|
#include "device_library.h"
|
||||||
|
};
|
||||||
|
LOG_INFO("Loaded EMS device library (%d)", device_library_.size());
|
||||||
|
|
||||||
system_.reload_settings(); // ... and store some of the settings locally
|
system_.reload_settings(); // ... and store some of the settings locally
|
||||||
|
|
||||||
webCustomizationService.begin(); // load the customizations
|
webCustomizationService.begin(); // load the customizations
|
||||||
@@ -1627,40 +1633,32 @@ void EMSESP::start() {
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// start services
|
||||||
if (system_.modbus_enabled()) {
|
if (system_.modbus_enabled()) {
|
||||||
modbus_ = new Modbus;
|
modbus_ = new Modbus;
|
||||||
modbus_->start(1, system_.modbus_port(), system_.modbus_max_clients(), system_.modbus_timeout());
|
modbus_->start(1, system_.modbus_port(), system_.modbus_max_clients(), system_.modbus_timeout());
|
||||||
}
|
}
|
||||||
|
|
||||||
mqtt_.start(); // mqtt init
|
mqtt_.start(); // mqtt init
|
||||||
system_.start(); // starts commands, led, adc, button, network (sets hostname), syslog & uart
|
system_.start(); // starts commands, led, adc, button, network (sets hostname), syslog & uart
|
||||||
shower_.start(); // initialize shower timer and shower alert
|
shower_.start(); // initialize shower timer and shower alert
|
||||||
temperaturesensor_.start(); // Temperature external sensors
|
temperaturesensor_.start(); // Temperature external sensors
|
||||||
analogsensor_.start(); // Analog external sensors
|
analogsensor_.start(); // Analog external sensors
|
||||||
|
|
||||||
|
// start web services
|
||||||
webLogService.start(); // apply settings to weblog service
|
webLogService.start(); // apply settings to weblog service
|
||||||
|
|
||||||
webModulesService.begin(); // setup the external library modules
|
webModulesService.begin(); // setup the external library modules
|
||||||
|
|
||||||
// Load our library of known devices into stack mem. Names are stored in Flash memory
|
|
||||||
device_library_ = {
|
|
||||||
#include "device_library.h"
|
|
||||||
};
|
|
||||||
LOG_INFO("Loaded EMS device library (%d records)", device_library_.size());
|
|
||||||
|
|
||||||
#if defined(EMSESP_STANDALONE)
|
|
||||||
Mqtt::on_connect(); // simulate an MQTT connection
|
|
||||||
#endif
|
|
||||||
|
|
||||||
webServer.begin(); // start the web server
|
webServer.begin(); // start the web server
|
||||||
|
LOG_INFO("Starting Web Server");
|
||||||
}
|
}
|
||||||
|
|
||||||
// main loop calling all services
|
// main loop calling all services
|
||||||
void EMSESP::loop() {
|
void EMSESP::loop() {
|
||||||
esp8266React.loop(); // web services
|
esp8266React.loop(); // web services
|
||||||
system_.loop(); // does LED and checks system health, and syslog service
|
system_.loop(); // does LED and checks system health, and syslog service
|
||||||
|
static bool upload_status = true; // ready for any OTA uploads
|
||||||
|
|
||||||
// if we're doing an OTA upload, skip everything except from console refresh
|
// if we're doing an OTA upload, skip everything except from console refresh
|
||||||
if (!system_.upload_status()) {
|
if (!system_.upload_isrunning()) {
|
||||||
// service loops
|
// service loops
|
||||||
webLogService.loop(); // log in Web UI
|
webLogService.loop(); // log in Web UI
|
||||||
rxservice_.loop(); // process any incoming Rx telegrams
|
rxservice_.loop(); // process any incoming Rx telegrams
|
||||||
@@ -1670,14 +1668,18 @@ void EMSESP::loop() {
|
|||||||
publish_all_loop(); // with HA messages in parts to avoid flooding the mqtt queue
|
publish_all_loop(); // with HA messages in parts to avoid flooding the mqtt queue
|
||||||
mqtt_.loop(); // sends out anything in the MQTT queue
|
mqtt_.loop(); // sends out anything in the MQTT queue
|
||||||
webModulesService.loop(); // loop through the external library modules
|
webModulesService.loop(); // loop through the external library modules
|
||||||
if (system_.PSram() == 0) {
|
if (system_.PSram() == 0) { // run non-async if there is no PSRAM available
|
||||||
webSchedulerService.loop(); // run non-async if there is no PSRAM available
|
webSchedulerService.loop();
|
||||||
}
|
}
|
||||||
|
|
||||||
// force a query on the EMS devices to fetch latest data at a set interval (1 min)
|
scheduled_fetch_values(); // force a query on the EMS devices to fetch latest data at a set interval (1 min)
|
||||||
scheduled_fetch_values();
|
|
||||||
} else {
|
} else if (upload_status) {
|
||||||
emsesp::EMSESP::system_.uploadFirmwareURL(); // start an upload from a URL. This is blocking.
|
// start an upload from a URL, if it exists. This is blocking.
|
||||||
|
if (!system_.uploadFirmwareURL()) {
|
||||||
|
upload_status = false; // abort all other attempts, until reset (after a restart normally)
|
||||||
|
system_.upload_isrunning(false);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
uuid::loop();
|
uuid::loop();
|
||||||
|
|||||||
@@ -67,6 +67,7 @@ MAKE_WORD_TRANSLATION(setiovalue_cmd, "set io value", "Setze Wertevorgabe", "ins
|
|||||||
MAKE_WORD_TRANSLATION(changeloglevel_cmd, "change log level", "Ändere Sysloglevel", "aanpassen log niveau", "", "zmień poziom log-u", "endre loggnivå", "", "Kayıt seviyesini değiştir", "cambia livello registrazione", "") // TODO translate
|
MAKE_WORD_TRANSLATION(changeloglevel_cmd, "change log level", "Ändere Sysloglevel", "aanpassen log niveau", "", "zmień poziom log-u", "endre loggnivå", "", "Kayıt seviyesini değiştir", "cambia livello registrazione", "") // TODO translate
|
||||||
MAKE_WORD_TRANSLATION(fetch_cmd, "refresh all EMS values", "Lese alle EMS-Werte neu", "Verversen alle EMS waardes", "", "odśwież wszystkie wartości EMS", "oppfrisk alle EMS verdier", "", "Bütün EMS değerlerini yenile", "aggiornare tutti i valori EMS", "obnoviť všetky hodnoty EMS") // TODO translate
|
MAKE_WORD_TRANSLATION(fetch_cmd, "refresh all EMS values", "Lese alle EMS-Werte neu", "Verversen alle EMS waardes", "", "odśwież wszystkie wartości EMS", "oppfrisk alle EMS verdier", "", "Bütün EMS değerlerini yenile", "aggiornare tutti i valori EMS", "obnoviť všetky hodnoty EMS") // TODO translate
|
||||||
MAKE_WORD_TRANSLATION(restart_cmd, "restart EMS-ESP", "Neustart", "opnieuw opstarten", "", "uruchom ponownie EMS-ESP", "restart EMS-ESP", "redémarrer EMS-ESP", "EMS-ESPyi yeniden başlat", "riavvia EMS-ESP", "reštart EMS-ESP") // TODO translate
|
MAKE_WORD_TRANSLATION(restart_cmd, "restart EMS-ESP", "Neustart", "opnieuw opstarten", "", "uruchom ponownie EMS-ESP", "restart EMS-ESP", "redémarrer EMS-ESP", "EMS-ESPyi yeniden başlat", "riavvia EMS-ESP", "reštart EMS-ESP") // TODO translate
|
||||||
|
MAKE_WORD_TRANSLATION(format_cmd, "factory reset EMS-ESP", "", "", "", "", "", "", "", "", "") // TODO translate
|
||||||
MAKE_WORD_TRANSLATION(watch_cmd, "watch incoming telegrams", "Watch auf eingehende Telegramme", "inkomende telegrammen bekijken", "", "obserwuj przyczodzące telegramy", "se innkommende telegrammer", "", "Gelen telegramları", "guardare i telegrammi in arrivo", "sledovať prichádzajúce telegramy") // TODO translate
|
MAKE_WORD_TRANSLATION(watch_cmd, "watch incoming telegrams", "Watch auf eingehende Telegramme", "inkomende telegrammen bekijken", "", "obserwuj przyczodzące telegramy", "se innkommende telegrammer", "", "Gelen telegramları", "guardare i telegrammi in arrivo", "sledovať prichádzajúce telegramy") // TODO translate
|
||||||
MAKE_WORD_TRANSLATION(publish_cmd, "publish all to MQTT", "Publiziere MQTT", "publiceer alles naar MQTT", "", "opublikuj wszystko na MQTT", "Publiser alt til MQTT", "", "Hepsini MQTTye gönder", "pubblica tutto su MQTT", "zverejniť všetko na MQTT") // TODO translate
|
MAKE_WORD_TRANSLATION(publish_cmd, "publish all to MQTT", "Publiziere MQTT", "publiceer alles naar MQTT", "", "opublikuj wszystko na MQTT", "Publiser alt til MQTT", "", "Hepsini MQTTye gönder", "pubblica tutto su MQTT", "zverejniť všetko na MQTT") // TODO translate
|
||||||
MAKE_WORD_TRANSLATION(system_info_cmd, "show system info", "Zeige System-Status", "toon systeemstatus", "", "pokaż status systemu", "vis system status", "", "Sistem Durumunu Göster", "visualizza stati di sistema", "zobraziť stav systému") // TODO translate
|
MAKE_WORD_TRANSLATION(system_info_cmd, "show system info", "Zeige System-Status", "toon systeemstatus", "", "pokaż status systemu", "vis system status", "", "Sistem Durumunu Göster", "visualizza stati di sistema", "zobraziť stav systému") // TODO translate
|
||||||
|
|||||||
@@ -508,10 +508,14 @@ int Modbus::getRegisterCount(const DeviceValue & dv) {
|
|||||||
uint32_t num_values = std::max(dv.max, (uint32_t)abs(dv.min));
|
uint32_t num_values = std::max(dv.max, (uint32_t)abs(dv.min));
|
||||||
int num_registers = 0;
|
int num_registers = 0;
|
||||||
|
|
||||||
if (num_values <= (1L << 8)) num_registers = 1;
|
if (num_values <= (1L << 8))
|
||||||
else if(num_values <= (1L << 16)) num_registers = 2;
|
num_registers = 1;
|
||||||
else if(num_values <= (1L << 32)) num_registers = 4;
|
else if (num_values <= (1L << 16))
|
||||||
else LOG_ERROR("num_registers is too big to be encoded with modbus registers");
|
num_registers = 2;
|
||||||
|
else if (num_values <= (1L << 32))
|
||||||
|
num_registers = 4;
|
||||||
|
else
|
||||||
|
LOG_ERROR("num_registers is too big to be encoded with modbus registers");
|
||||||
|
|
||||||
LOG_DEBUG("Value for CMD '%s' can take on %ld values and is encoded in %d registers", dv.short_name, num_values, num_registers);
|
LOG_DEBUG("Value for CMD '%s' can take on %ld values and is encoded in %d registers", dv.short_name, num_values, num_registers);
|
||||||
|
|
||||||
|
|||||||
@@ -393,6 +393,10 @@ void Mqtt::start() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
EMSESP::esp8266React.setWill(will_topic); // with qos 1, retain true
|
EMSESP::esp8266React.setWill(will_topic); // with qos 1, retain true
|
||||||
|
|
||||||
|
#if defined(EMSESP_STANDALONE)
|
||||||
|
Mqtt::on_connect(); // simulate an MQTT connection
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void Mqtt::set_publish_time_boiler(uint16_t publish_time) {
|
void Mqtt::set_publish_time_boiler(uint16_t publish_time) {
|
||||||
|
|||||||
127
src/system.cpp
127
src/system.cpp
@@ -78,6 +78,7 @@ uuid::log::Logger System::logger_{F_(system), uuid::log::Facility::KERN};
|
|||||||
// init statics
|
// init statics
|
||||||
PButton System::myPButton_;
|
PButton System::myPButton_;
|
||||||
bool System::restart_requested_ = false;
|
bool System::restart_requested_ = false;
|
||||||
|
bool System::restart_pending_ = false;
|
||||||
bool System::test_set_all_active_ = false;
|
bool System::test_set_all_active_ = false;
|
||||||
uint32_t System::max_alloc_mem_;
|
uint32_t System::max_alloc_mem_;
|
||||||
uint32_t System::heap_mem_;
|
uint32_t System::heap_mem_;
|
||||||
@@ -288,14 +289,20 @@ void System::store_nvs_values() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// restart EMS-ESP
|
// restart EMS-ESP
|
||||||
|
// app0 or app1
|
||||||
|
// on 16MB we have the additional boot and factory partitions
|
||||||
void System::system_restart(const char * partitionname) {
|
void System::system_restart(const char * partitionname) {
|
||||||
#ifndef EMSESP_STANDALONE
|
#ifndef EMSESP_STANDALONE
|
||||||
|
// see if we are forcing a partition to use
|
||||||
if (partitionname != nullptr) {
|
if (partitionname != nullptr) {
|
||||||
|
// Factory partition - label will be "factory"
|
||||||
const esp_partition_t * partition = esp_partition_find_first(ESP_PARTITION_TYPE_APP, ESP_PARTITION_SUBTYPE_APP_FACTORY, NULL);
|
const esp_partition_t * partition = esp_partition_find_first(ESP_PARTITION_TYPE_APP, ESP_PARTITION_SUBTYPE_APP_FACTORY, NULL);
|
||||||
if (partition && strcmp(partition->label, partitionname) == 0) {
|
if (partition && strcmp(partition->label, partitionname) == 0) {
|
||||||
esp_ota_set_boot_partition(partition);
|
esp_ota_set_boot_partition(partition);
|
||||||
} else if (strcmp(esp_ota_get_running_partition()->label, partitionname) != 0) {
|
} else
|
||||||
partition = esp_ota_get_next_update_partition(NULL);
|
// try and find the parition by name
|
||||||
|
if (strcmp(esp_ota_get_running_partition()->label, partitionname) != 0) {
|
||||||
|
partition = esp_ota_get_next_update_partition(nullptr);
|
||||||
if (!partition) {
|
if (!partition) {
|
||||||
LOG_ERROR("Partition '%s' not found", partitionname);
|
LOG_ERROR("Partition '%s' not found", partitionname);
|
||||||
return;
|
return;
|
||||||
@@ -307,21 +314,28 @@ void System::system_restart(const char * partitionname) {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// check if partition is empty
|
||||||
uint64_t buffer;
|
uint64_t buffer;
|
||||||
esp_partition_read(partition, 0, &buffer, 8);
|
esp_partition_read(partition, 0, &buffer, 8);
|
||||||
if (buffer == 0xFFFFFFFFFFFFFFFF) { // partition empty
|
if (buffer == 0xFFFFFFFFFFFFFFFF) {
|
||||||
LOG_ERROR("Partition '%s' is empty, not bootable", partition->label);
|
LOG_ERROR("Partition '%s' is empty, not bootable", partition->label);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
// set the boot partition
|
||||||
esp_ota_set_boot_partition(partition);
|
esp_ota_set_boot_partition(partition);
|
||||||
}
|
}
|
||||||
LOG_INFO("Restarting EMS-ESP from %s partition", partitionname);
|
LOG_INFO("Restarting EMS-ESP from %s partition", partitionname);
|
||||||
} else {
|
} else {
|
||||||
LOG_INFO("Restarting EMS-ESP...");
|
LOG_INFO("Restarting EMS-ESP...");
|
||||||
}
|
}
|
||||||
store_nvs_values();
|
|
||||||
Shell::loop_all();
|
// make sure it's only executed once
|
||||||
delay(1000); // wait a second
|
restart_requested(false);
|
||||||
|
restart_pending(false);
|
||||||
|
|
||||||
|
store_nvs_values(); // save any NVS values
|
||||||
|
Shell::loop_all(); // flush log to output
|
||||||
|
delay(1000); // wait 1 second
|
||||||
ESP.restart();
|
ESP.restart();
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
@@ -336,19 +350,6 @@ void System::wifi_reconnect() {
|
|||||||
EMSESP::esp8266React.getNetworkSettingsService()->callUpdateHandlers(); // in case we've changed ssid or password
|
EMSESP::esp8266React.getNetworkSettingsService()->callUpdateHandlers(); // in case we've changed ssid or password
|
||||||
}
|
}
|
||||||
|
|
||||||
// format the FS. Wipes everything.
|
|
||||||
void System::format(uuid::console::Shell & shell) {
|
|
||||||
auto msg = ("Formatting file system. This will reset all settings to their defaults");
|
|
||||||
shell.logger().warning(msg);
|
|
||||||
EMSuart::stop();
|
|
||||||
|
|
||||||
#ifndef EMSESP_STANDALONE
|
|
||||||
LittleFS.format();
|
|
||||||
#endif
|
|
||||||
|
|
||||||
System::system_restart();
|
|
||||||
}
|
|
||||||
|
|
||||||
void System::syslog_init() {
|
void System::syslog_init() {
|
||||||
EMSESP::webSettingsService.read([&](WebSettings & settings) {
|
EMSESP::webSettingsService.read([&](WebSettings & settings) {
|
||||||
syslog_enabled_ = settings.syslog_enabled;
|
syslog_enabled_ = settings.syslog_enabled;
|
||||||
@@ -528,12 +529,9 @@ void System::button_OnLongPress(PButton & b) {
|
|||||||
EMSESP::system_.system_restart("boot");
|
EMSESP::system_.system_restart("boot");
|
||||||
}
|
}
|
||||||
|
|
||||||
// button indefinite press
|
// button indefinite press - do nothing for now
|
||||||
void System::button_OnVLongPress(PButton & b) {
|
void System::button_OnVLongPress(PButton & b) {
|
||||||
LOG_NOTICE("Button pressed - very long press - factory reset");
|
LOG_NOTICE("Button pressed - very long press");
|
||||||
#ifndef EMSESP_STANDALONE
|
|
||||||
EMSESP::esp8266React.factoryReset();
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// push button
|
// push button
|
||||||
@@ -577,32 +575,33 @@ void System::led_init(bool refresh) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// returns true if OTA is uploading
|
// returns true if OTA is uploading
|
||||||
bool System::upload_status() {
|
bool System::upload_isrunning() {
|
||||||
#if defined(EMSESP_STANDALONE)
|
#if defined(EMSESP_STANDALONE)
|
||||||
return false;
|
return false;
|
||||||
#else
|
#else
|
||||||
return upload_status_ || Update.isRunning();
|
return upload_isrunning_ || Update.isRunning();
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void System::upload_status(bool in_progress) {
|
void System::upload_isrunning(bool in_progress) {
|
||||||
// if we've just started an upload
|
// if we've just started an upload
|
||||||
if (!upload_status_ && in_progress) {
|
if (!upload_isrunning_ && in_progress) {
|
||||||
EMSuart::stop();
|
EMSuart::stop();
|
||||||
}
|
}
|
||||||
upload_status_ = in_progress;
|
upload_isrunning_ = in_progress;
|
||||||
}
|
}
|
||||||
|
|
||||||
// checks system health and handles LED flashing wizardry
|
// checks system health and handles LED flashing wizardry
|
||||||
void System::loop() {
|
void System::loop() {
|
||||||
// check if we're supposed to do a reset/restart
|
// check if we're supposed to do a reset/restart
|
||||||
if (restart_requested()) {
|
if (restart_requested()) {
|
||||||
this->system_restart();
|
system_restart();
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifndef EMSESP_STANDALONE
|
#ifndef EMSESP_STANDALONE
|
||||||
myPButton_.check(); // check button press
|
myPButton_.check(); // check button press
|
||||||
|
|
||||||
|
// syslog
|
||||||
if (syslog_enabled_) {
|
if (syslog_enabled_) {
|
||||||
syslog_.loop();
|
syslog_.loop();
|
||||||
}
|
}
|
||||||
@@ -849,9 +848,8 @@ void System::system_check() {
|
|||||||
void System::commands_init() {
|
void System::commands_init() {
|
||||||
Command::add(EMSdevice::DeviceType::SYSTEM, F_(send), System::command_send, FL_(send_cmd), CommandFlag::ADMIN_ONLY);
|
Command::add(EMSdevice::DeviceType::SYSTEM, F_(send), System::command_send, FL_(send_cmd), CommandFlag::ADMIN_ONLY);
|
||||||
Command::add(EMSdevice::DeviceType::SYSTEM, F_(fetch), System::command_fetch, FL_(fetch_cmd), CommandFlag::ADMIN_ONLY);
|
Command::add(EMSdevice::DeviceType::SYSTEM, F_(fetch), System::command_fetch, FL_(fetch_cmd), CommandFlag::ADMIN_ONLY);
|
||||||
|
|
||||||
// restart, watch, message (and test) are also exposed as Console commands
|
|
||||||
Command::add(EMSdevice::DeviceType::SYSTEM, F_(restart), System::command_restart, FL_(restart_cmd), CommandFlag::ADMIN_ONLY);
|
Command::add(EMSdevice::DeviceType::SYSTEM, F_(restart), System::command_restart, FL_(restart_cmd), CommandFlag::ADMIN_ONLY);
|
||||||
|
Command::add(EMSdevice::DeviceType::SYSTEM, F_(format), System::command_format, FL_(format_cmd), CommandFlag::ADMIN_ONLY);
|
||||||
Command::add(EMSdevice::DeviceType::SYSTEM, F_(watch), System::command_watch, FL_(watch_cmd));
|
Command::add(EMSdevice::DeviceType::SYSTEM, F_(watch), System::command_watch, FL_(watch_cmd));
|
||||||
Command::add(EMSdevice::DeviceType::SYSTEM, F_(message), System::command_message, FL_(message_cmd));
|
Command::add(EMSdevice::DeviceType::SYSTEM, F_(message), System::command_message, FL_(message_cmd));
|
||||||
#if defined(EMSESP_TEST)
|
#if defined(EMSESP_TEST)
|
||||||
@@ -1737,13 +1735,36 @@ bool System::load_board_profile(std::vector<int8_t> & data, const std::string &
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
// restart command - perform a hard reset
|
// format command - factory reset, removing all config files
|
||||||
bool System::command_restart(const char * value, const int8_t id) {
|
bool System::command_format(const char * value, const int8_t id) {
|
||||||
if (value != nullptr && value[0] != '\0') {
|
LOG_INFO("Removing all config files");
|
||||||
EMSESP::system_.system_restart(value);
|
#ifndef EMSESP_STANDALONE
|
||||||
} else {
|
// TODO To replaced with fs.rmdir(FS_CONFIG_DIRECTORY) now we're using IDF 4.2+
|
||||||
EMSESP::system_.system_restart();
|
File root = LittleFS.open(EMSESP_FS_CONFIG_DIRECTORY);
|
||||||
|
File file;
|
||||||
|
while ((file = root.openNextFile())) {
|
||||||
|
String path = file.path();
|
||||||
|
file.close();
|
||||||
|
LittleFS.remove(path);
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
EMSESP::system_.restart_requested(true); // will be handled by the main loop
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
// restart command - perform a hard reset (system reboot)
|
||||||
|
bool System::command_restart(const char * value, const int8_t id) {
|
||||||
|
if (id == 0) {
|
||||||
|
// if it has an id then it's a web call and we need to queue the restart
|
||||||
|
// default id is -1 when calling /api/system/restart directly for example
|
||||||
|
LOG_INFO("Preparing to restart system");
|
||||||
|
EMSESP::system_.restart_pending(true);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
LOG_INFO("Restarting system immediately");
|
||||||
|
EMSESP::system_.restart_requested(true); // will be handled by the main loop
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1842,30 +1863,30 @@ bool System::uploadFirmwareURL(const char * url) {
|
|||||||
|
|
||||||
static String saved_url;
|
static String saved_url;
|
||||||
|
|
||||||
// if the URL is not empty, save it for later
|
// if the URL is not empty, store the URL for the 2nd pass
|
||||||
if (url && strlen(url) > 0) {
|
if (url && strlen(url) > 0) {
|
||||||
saved_url = url;
|
saved_url = url;
|
||||||
EMSESP::system_.upload_status(true); // tell EMS-ESP we're ready to start the uploading process
|
EMSESP::system_.upload_isrunning(true); // tell EMS-ESP we're ready to start the uploading process
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
// make sure we have a valid URL
|
// make sure we have a valid URL
|
||||||
if (saved_url.isEmpty()) {
|
if (saved_url.isEmpty()) {
|
||||||
LOG_ERROR("Firmware upload failed - no URL");
|
return false; // error
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Configure temporary client
|
// Configure temporary client
|
||||||
HTTPClient http;
|
HTTPClient http;
|
||||||
http.setFollowRedirects(HTTPC_FORCE_FOLLOW_REDIRECTS); // important for GitHub 302's
|
http.setFollowRedirects(HTTPC_STRICT_FOLLOW_REDIRECTS); // important for GitHub 302's
|
||||||
http.useHTTP10(true);
|
http.setTimeout(8000);
|
||||||
|
http.useHTTP10(true); // use HTTP/1.0 for update since the update handler not support any transfer Encoding
|
||||||
http.begin(saved_url);
|
http.begin(saved_url);
|
||||||
|
|
||||||
// start a connection
|
// start a connection, returns -1 if fails
|
||||||
int httpCode = http.GET();
|
int httpCode = http.GET();
|
||||||
if (httpCode != HTTP_CODE_OK) {
|
if (httpCode != HTTP_CODE_OK) {
|
||||||
LOG_ERROR("Firmware upload failed - HTTP code %u", httpCode);
|
LOG_ERROR("Firmware upload failed - HTTP code %d", httpCode);
|
||||||
return false;
|
return false; // error
|
||||||
}
|
}
|
||||||
|
|
||||||
// check we have enough space for the upload in the ota partition
|
// check we have enough space for the upload in the ota partition
|
||||||
@@ -1873,32 +1894,32 @@ bool System::uploadFirmwareURL(const char * url) {
|
|||||||
LOG_INFO("Firmware uploading (file: %s, size: %d bytes). Please wait...", saved_url.c_str(), firmware_size);
|
LOG_INFO("Firmware uploading (file: %s, size: %d bytes). Please wait...", saved_url.c_str(), firmware_size);
|
||||||
if (!Update.begin(firmware_size)) {
|
if (!Update.begin(firmware_size)) {
|
||||||
LOG_ERROR("Firmware upload failed - no space");
|
LOG_ERROR("Firmware upload failed - no space");
|
||||||
return false;
|
return false; // error
|
||||||
}
|
}
|
||||||
|
|
||||||
// flush buffers so latest log messages are shown
|
// flush log buffers so latest messages are shown
|
||||||
Shell::loop_all();
|
Shell::loop_all();
|
||||||
|
|
||||||
// get tcp stream and send it to Updater
|
// get tcp stream and send it to Updater
|
||||||
WiFiClient * stream = http.getStreamPtr();
|
WiFiClient * stream = http.getStreamPtr();
|
||||||
if (Update.writeStream(*stream) != firmware_size) {
|
if (Update.writeStream(*stream) != firmware_size) {
|
||||||
LOG_ERROR("Firmware upload failed - size differences");
|
LOG_ERROR("Firmware upload failed - size differences");
|
||||||
return false;
|
return false; // error
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!Update.end(true)) {
|
if (!Update.end(true)) {
|
||||||
LOG_ERROR("Firmware upload failed - general error");
|
LOG_ERROR("Firmware upload failed - general error");
|
||||||
return false;
|
return false; // error
|
||||||
}
|
}
|
||||||
|
|
||||||
http.end();
|
http.end();
|
||||||
|
|
||||||
EMSESP::system_.upload_status(false);
|
EMSESP::system_.upload_isrunning(false);
|
||||||
saved_url.clear(); // prevent from downloading again
|
saved_url.clear(); // prevent from downloading again
|
||||||
|
|
||||||
LOG_INFO("Firmware uploaded successfully. Restarting...");
|
LOG_INFO("Firmware uploaded successfully. Restarting...");
|
||||||
|
|
||||||
restart_requested(true);
|
restart_pending(true);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|||||||
22
src/system.h
22
src/system.h
@@ -41,6 +41,8 @@
|
|||||||
|
|
||||||
using uuid::console::Shell;
|
using uuid::console::Shell;
|
||||||
|
|
||||||
|
#define EMSESP_FS_CONFIG_DIRECTORY "/config"
|
||||||
|
|
||||||
namespace emsesp {
|
namespace emsesp {
|
||||||
|
|
||||||
enum PHY_type : uint8_t { PHY_TYPE_NONE = 0, PHY_TYPE_LAN8720, PHY_TYPE_TLK110 };
|
enum PHY_type : uint8_t { PHY_TYPE_NONE = 0, PHY_TYPE_LAN8720, PHY_TYPE_TLK110 };
|
||||||
@@ -55,12 +57,14 @@ class System {
|
|||||||
static bool command_publish(const char * value, const int8_t id);
|
static bool command_publish(const char * value, const int8_t id);
|
||||||
static bool command_fetch(const char * value, const int8_t id);
|
static bool command_fetch(const char * value, const int8_t id);
|
||||||
static bool command_restart(const char * value, const int8_t id);
|
static bool command_restart(const char * value, const int8_t id);
|
||||||
static bool command_syslog_level(const char * value, const int8_t id);
|
static bool command_format(const char * value, const int8_t id);
|
||||||
|
// static bool command_syslog_level(const char * value, const int8_t id);
|
||||||
static bool command_watch(const char * value, const int8_t id);
|
static bool command_watch(const char * value, const int8_t id);
|
||||||
static bool command_message(const char * value, const int8_t id);
|
static bool command_message(const char * value, const int8_t id);
|
||||||
static bool command_info(const char * value, const int8_t id, JsonObject output);
|
static bool command_info(const char * value, const int8_t id, JsonObject output);
|
||||||
static bool command_response(const char * value, const int8_t id, JsonObject output);
|
static bool command_response(const char * value, const int8_t id, JsonObject output);
|
||||||
static bool command_allvalues(const char * value, const int8_t id, JsonObject output);
|
static bool command_allvalues(const char * value, const int8_t id, JsonObject output);
|
||||||
|
|
||||||
static bool get_value_info(JsonObject root, const char * cmd);
|
static bool get_value_info(JsonObject root, const char * cmd);
|
||||||
static void get_value_json(JsonObject output, const std::string & circuit, const std::string & name, JsonVariant val);
|
static void get_value_json(JsonObject output, const std::string & circuit, const std::string & name, JsonVariant val);
|
||||||
|
|
||||||
@@ -72,9 +76,8 @@ class System {
|
|||||||
|
|
||||||
void store_nvs_values();
|
void store_nvs_values();
|
||||||
void system_restart(const char * partition = nullptr);
|
void system_restart(const char * partition = nullptr);
|
||||||
void format(uuid::console::Shell & shell);
|
void upload_isrunning(bool in_progress);
|
||||||
void upload_status(bool in_progress);
|
bool upload_isrunning();
|
||||||
bool upload_status();
|
|
||||||
void show_mem(const char * note);
|
void show_mem(const char * note);
|
||||||
void reload_settings();
|
void reload_settings();
|
||||||
void syslog_init();
|
void syslog_init();
|
||||||
@@ -116,11 +119,17 @@ class System {
|
|||||||
static void restart_requested(bool restart_requested) {
|
static void restart_requested(bool restart_requested) {
|
||||||
restart_requested_ = restart_requested;
|
restart_requested_ = restart_requested;
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool restart_requested() {
|
static bool restart_requested() {
|
||||||
return restart_requested_;
|
return restart_requested_;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void restart_pending(bool restart_pending) {
|
||||||
|
restart_pending_ = restart_pending;
|
||||||
|
}
|
||||||
|
static bool restart_pending() {
|
||||||
|
return restart_pending_;
|
||||||
|
}
|
||||||
|
|
||||||
bool telnet_enabled() {
|
bool telnet_enabled() {
|
||||||
return telnet_enabled_;
|
return telnet_enabled_;
|
||||||
}
|
}
|
||||||
@@ -291,6 +300,7 @@ class System {
|
|||||||
private:
|
private:
|
||||||
static uuid::log::Logger logger_;
|
static uuid::log::Logger logger_;
|
||||||
static bool restart_requested_;
|
static bool restart_requested_;
|
||||||
|
static bool restart_pending_; // used in 2-stage process to call restart from Web API
|
||||||
static bool test_set_all_active_; // force all entities in a device to have a value
|
static bool test_set_all_active_; // force all entities in a device to have a value
|
||||||
static uint32_t max_alloc_mem_;
|
static uint32_t max_alloc_mem_;
|
||||||
static uint32_t heap_mem_;
|
static uint32_t heap_mem_;
|
||||||
@@ -330,7 +340,7 @@ class System {
|
|||||||
uint8_t healthcheck_ = HEALTHCHECK_NO_NETWORK | HEALTHCHECK_NO_BUS; // start with all flags set, no wifi and no ems bus connection
|
uint8_t healthcheck_ = HEALTHCHECK_NO_NETWORK | HEALTHCHECK_NO_BUS; // start with all flags set, no wifi and no ems bus connection
|
||||||
uint32_t last_system_check_ = 0;
|
uint32_t last_system_check_ = 0;
|
||||||
|
|
||||||
bool upload_status_ = false; // true if we're in the middle of a OTA firmware upload
|
bool upload_isrunning_ = false; // true if we're in the middle of a OTA firmware upload
|
||||||
bool ethernet_connected_ = false;
|
bool ethernet_connected_ = false;
|
||||||
bool has_ipv6_ = false;
|
bool has_ipv6_ = false;
|
||||||
|
|
||||||
|
|||||||
@@ -417,7 +417,10 @@ void Test::run_test(uuid::console::Shell & shell, const std::string & cmd, const
|
|||||||
|
|
||||||
if (command == "upload") {
|
if (command == "upload") {
|
||||||
// S3 has 16MB flash
|
// S3 has 16MB flash
|
||||||
EMSESP::system_.uploadFirmwareURL("https://github.com/emsesp/EMS-ESP32/releases/download/latest/EMS-ESP-3_7_0-dev_31-ESP32S3-16MB+.bin"); // TODO remove
|
// EMSESP::system_.uploadFirmwareURL("https://github.com/emsesp/EMS-ESP32/releases/download/latest/EMS-ESP-3_7_0-dev_32-ESP32S3-16MB+.bin");
|
||||||
|
|
||||||
|
// Test for 4MB Tasmota builds
|
||||||
|
EMSESP::system_.uploadFirmwareURL("https://github.com/emsesp/EMS-ESP32/releases/download/latest/EMS-ESP-3_7_0-dev_32-ESP32-16MB.bin");
|
||||||
ok = true;
|
ok = true;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
@@ -958,8 +961,8 @@ void Test::run_test(uuid::console::Shell & shell, const std::string & cmd, const
|
|||||||
|
|
||||||
bool single;
|
bool single;
|
||||||
|
|
||||||
// single = true;
|
single = true;
|
||||||
single = false;
|
// single = false;
|
||||||
|
|
||||||
AsyncWebServerRequest request;
|
AsyncWebServerRequest request;
|
||||||
JsonDocument doc;
|
JsonDocument doc;
|
||||||
@@ -972,19 +975,33 @@ void Test::run_test(uuid::console::Shell & shell, const std::string & cmd, const
|
|||||||
|
|
||||||
if (single) {
|
if (single) {
|
||||||
// run dedicated tests only
|
// run dedicated tests only
|
||||||
EMSESP::webCustomEntityService.test(); // custom entities
|
|
||||||
EMSESP::webCustomizationService.test(); // set customizations - this will overwrite any settings in the FS
|
// EMSESP::webCustomEntityService.test(); // custom entities
|
||||||
EMSESP::temperaturesensor_.test(); // add temperature sensors
|
// EMSESP::webCustomizationService.test(); // set customizations - this will overwrite any settings in the FS
|
||||||
EMSESP::webSchedulerService.test(); // run scheduler tests, and conditions
|
// EMSESP::temperaturesensor_.test(); // add temperature sensors
|
||||||
|
// EMSESP::webSchedulerService.test(); // run scheduler tests, and conditions
|
||||||
|
|
||||||
// shell.invoke_command("call system fetch");
|
// shell.invoke_command("call system fetch");
|
||||||
// request.url("/api/system/fetch");
|
// request.url("/api/system/fetch");
|
||||||
// EMSESP::webAPIService.webAPIService(&request);
|
// EMSESP::webAPIService.webAPIService(&request);
|
||||||
|
|
||||||
request.url("/api/thermostat");
|
// request.url("/api/system/restart");
|
||||||
EMSESP::webAPIService.webAPIService(&request);
|
// EMSESP::webAPIService.webAPIService(&request);
|
||||||
request.url("/api/thermostat/hc1");
|
|
||||||
EMSESP::webAPIService.webAPIService(&request);
|
// request.url("/api/system/format");
|
||||||
|
// EMSESP::webAPIService.webAPIService(&request);
|
||||||
|
|
||||||
|
request.method(HTTP_POST);
|
||||||
|
char data_api[] = "{\"device\":\"system\", \"cmd\":\"restart\",\"id\":-1}";
|
||||||
|
deserializeJson(doc, data_api);
|
||||||
|
json = doc.as<JsonVariant>();
|
||||||
|
request.url("/api");
|
||||||
|
EMSESP::webAPIService.webAPIService(&request, json);
|
||||||
|
|
||||||
|
// request.url("/api/thermostat");
|
||||||
|
// EMSESP::webAPIService.webAPIService(&request);
|
||||||
|
// request.url("/api/thermostat/hc1");
|
||||||
|
// EMSESP::webAPIService.webAPIService(&request);
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
EMSESP::webCustomEntityService.test(); // custom entities
|
EMSESP::webCustomEntityService.test(); // custom entities
|
||||||
@@ -2062,7 +2079,8 @@ void Test::run_test(uuid::console::Shell & shell, const std::string & cmd, const
|
|||||||
shell.printfln("Testing modbus->handleWrite() for thermostat:");
|
shell.printfln("Testing modbus->handleWrite() for thermostat:");
|
||||||
|
|
||||||
uint16_t reg = Modbus::REGISTER_BLOCK_SIZE * DeviceValueTAG::TAG_HC1 + 41; // remotetemp
|
uint16_t reg = Modbus::REGISTER_BLOCK_SIZE * DeviceValueTAG::TAG_HC1 + 41; // remotetemp
|
||||||
ModbusMessage request({thermostat_dev->device_type(), 0x06, static_cast<unsigned char>(reg >> 8), static_cast<unsigned char>(reg & 0xff), 0, 1, 2, 0, 45});
|
ModbusMessage request(
|
||||||
|
{thermostat_dev->device_type(), 0x06, static_cast<unsigned char>(reg >> 8), static_cast<unsigned char>(reg & 0xff), 0, 1, 2, 0, 45});
|
||||||
auto response = EMSESP::modbus_->handleWrite(request);
|
auto response = EMSESP::modbus_->handleWrite(request);
|
||||||
|
|
||||||
if (response.getError() == SUCCESS) {
|
if (response.getError() == SUCCESS) {
|
||||||
|
|||||||
@@ -59,7 +59,7 @@ namespace emsesp {
|
|||||||
// #define EMSESP_DEBUG_DEFAULT "scheduler"
|
// #define EMSESP_DEBUG_DEFAULT "scheduler"
|
||||||
// #define EMSESP_DEBUG_DEFAULT "heat_exchange"
|
// #define EMSESP_DEBUG_DEFAULT "heat_exchange"
|
||||||
// #define EMSESP_DEBUG_DEFAULT "ls"
|
// #define EMSESP_DEBUG_DEFAULT "ls"
|
||||||
#define EMSESP_DEBUG_DEFAULT "upload"
|
// #define EMSESP_DEBUG_DEFAULT "upload"
|
||||||
|
|
||||||
#ifndef EMSESP_DEBUG_DEFAULT
|
#ifndef EMSESP_DEBUG_DEFAULT
|
||||||
#define EMSESP_DEBUG_DEFAULT "general"
|
#define EMSESP_DEBUG_DEFAULT "general"
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
#define EMSESP_APP_VERSION "3.7.0-dev.32"
|
#define EMSESP_APP_VERSION "3.7.0-dev.33"
|
||||||
|
|||||||
@@ -25,25 +25,7 @@ uint16_t WebAPIService::api_fails_ = 0;
|
|||||||
|
|
||||||
WebAPIService::WebAPIService(AsyncWebServer * server, SecurityManager * securityManager)
|
WebAPIService::WebAPIService(AsyncWebServer * server, SecurityManager * securityManager)
|
||||||
: _securityManager(securityManager) {
|
: _securityManager(securityManager) {
|
||||||
// API
|
|
||||||
server->on(EMSESP_API_SERVICE_PATH, [this](AsyncWebServerRequest * request, JsonVariant json) { webAPIService(request, json); });
|
server->on(EMSESP_API_SERVICE_PATH, [this](AsyncWebServerRequest * request, JsonVariant json) { webAPIService(request, json); });
|
||||||
|
|
||||||
// settings
|
|
||||||
server->on(GET_SETTINGS_PATH,
|
|
||||||
HTTP_GET,
|
|
||||||
securityManager->wrapRequest([this](AsyncWebServerRequest * request) { getSettings(request); }, AuthenticationPredicates::IS_ADMIN));
|
|
||||||
|
|
||||||
server->on(GET_CUSTOMIZATIONS_PATH,
|
|
||||||
HTTP_GET,
|
|
||||||
securityManager->wrapRequest([this](AsyncWebServerRequest * request) { getCustomizations(request); }, AuthenticationPredicates::IS_ADMIN));
|
|
||||||
|
|
||||||
server->on(GET_SCHEDULE_PATH,
|
|
||||||
HTTP_GET,
|
|
||||||
securityManager->wrapRequest([this](AsyncWebServerRequest * request) { getSchedule(request); }, AuthenticationPredicates::IS_ADMIN));
|
|
||||||
|
|
||||||
server->on(GET_ENTITIES_PATH,
|
|
||||||
HTTP_GET,
|
|
||||||
securityManager->wrapRequest([this](AsyncWebServerRequest * request) { getEntities(request); }, AuthenticationPredicates::IS_ADMIN));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// POST|GET /{device}
|
// POST|GET /{device}
|
||||||
@@ -173,62 +155,6 @@ void WebAPIService::parse(AsyncWebServerRequest * request, JsonObject input) {
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void WebAPIService::getSettings(AsyncWebServerRequest * request) {
|
|
||||||
auto * response = new AsyncJsonResponse(false);
|
|
||||||
JsonObject root = response->getRoot();
|
|
||||||
|
|
||||||
root["type"] = "settings";
|
|
||||||
|
|
||||||
JsonObject node = root["System"].to<JsonObject>();
|
|
||||||
node["version"] = EMSESP_APP_VERSION;
|
|
||||||
|
|
||||||
System::extractSettings(NETWORK_SETTINGS_FILE, "Network", root);
|
|
||||||
System::extractSettings(AP_SETTINGS_FILE, "AP", root);
|
|
||||||
System::extractSettings(MQTT_SETTINGS_FILE, "MQTT", root);
|
|
||||||
System::extractSettings(NTP_SETTINGS_FILE, "NTP", root);
|
|
||||||
System::extractSettings(SECURITY_SETTINGS_FILE, "Security", root);
|
|
||||||
System::extractSettings(EMSESP_SETTINGS_FILE, "Settings", root);
|
|
||||||
|
|
||||||
response->setLength();
|
|
||||||
request->send(response);
|
|
||||||
}
|
|
||||||
|
|
||||||
void WebAPIService::getCustomizations(AsyncWebServerRequest * request) {
|
|
||||||
auto * response = new AsyncJsonResponse(false);
|
|
||||||
JsonObject root = response->getRoot();
|
|
||||||
|
|
||||||
root["type"] = "customizations";
|
|
||||||
|
|
||||||
System::extractSettings(EMSESP_CUSTOMIZATION_FILE, "Customizations", root);
|
|
||||||
|
|
||||||
response->setLength();
|
|
||||||
request->send(response);
|
|
||||||
}
|
|
||||||
|
|
||||||
void WebAPIService::getSchedule(AsyncWebServerRequest * request) {
|
|
||||||
auto * response = new AsyncJsonResponse(false);
|
|
||||||
JsonObject root = response->getRoot();
|
|
||||||
|
|
||||||
root["type"] = "schedule";
|
|
||||||
|
|
||||||
System::extractSettings(EMSESP_SCHEDULER_FILE, "Schedule", root);
|
|
||||||
|
|
||||||
response->setLength();
|
|
||||||
request->send(response);
|
|
||||||
}
|
|
||||||
|
|
||||||
void WebAPIService::getEntities(AsyncWebServerRequest * request) {
|
|
||||||
auto * response = new AsyncJsonResponse(false);
|
|
||||||
JsonObject root = response->getRoot();
|
|
||||||
|
|
||||||
root["type"] = "entities";
|
|
||||||
|
|
||||||
System::extractSettings(EMSESP_CUSTOMENTITY_FILE, "Entities", root);
|
|
||||||
|
|
||||||
response->setLength();
|
|
||||||
request->send(response);
|
|
||||||
}
|
|
||||||
|
|
||||||
#if defined(EMSESP_UNITY)
|
#if defined(EMSESP_UNITY)
|
||||||
// store the result so we can test with Unity later
|
// store the result so we can test with Unity later
|
||||||
static JsonDocument storeResponseDoc_;
|
static JsonDocument storeResponseDoc_;
|
||||||
|
|||||||
@@ -21,11 +21,6 @@
|
|||||||
|
|
||||||
#define EMSESP_API_SERVICE_PATH "/api"
|
#define EMSESP_API_SERVICE_PATH "/api"
|
||||||
|
|
||||||
#define GET_SETTINGS_PATH "/rest/getSettings"
|
|
||||||
#define GET_CUSTOMIZATIONS_PATH "/rest/getCustomizations"
|
|
||||||
#define GET_SCHEDULE_PATH "/rest/getSchedule"
|
|
||||||
#define GET_ENTITIES_PATH "/rest/getEntities"
|
|
||||||
|
|
||||||
namespace emsesp {
|
namespace emsesp {
|
||||||
|
|
||||||
class WebAPIService {
|
class WebAPIService {
|
||||||
@@ -56,10 +51,6 @@ class WebAPIService {
|
|||||||
static uint16_t api_fails_;
|
static uint16_t api_fails_;
|
||||||
|
|
||||||
void parse(AsyncWebServerRequest * request, JsonObject input);
|
void parse(AsyncWebServerRequest * request, JsonObject input);
|
||||||
void getSettings(AsyncWebServerRequest * request);
|
|
||||||
void getCustomizations(AsyncWebServerRequest * request);
|
|
||||||
void getSchedule(AsyncWebServerRequest * request);
|
|
||||||
void getEntities(AsyncWebServerRequest * request);
|
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace emsesp
|
} // namespace emsesp
|
||||||
|
|||||||
@@ -29,6 +29,9 @@ WebCustomEntityService::WebCustomEntityService(AsyncWebServer * server, FS * fs,
|
|||||||
securityManager,
|
securityManager,
|
||||||
AuthenticationPredicates::IS_AUTHENTICATED)
|
AuthenticationPredicates::IS_AUTHENTICATED)
|
||||||
, _fsPersistence(WebCustomEntity::read, WebCustomEntity::update, this, fs, EMSESP_CUSTOMENTITY_FILE) {
|
, _fsPersistence(WebCustomEntity::read, WebCustomEntity::update, this, fs, EMSESP_CUSTOMENTITY_FILE) {
|
||||||
|
server->on(EMSESP_GET_ENTITIES_PATH,
|
||||||
|
HTTP_GET,
|
||||||
|
securityManager->wrapRequest([this](AsyncWebServerRequest * request) { getEntities(request); }, AuthenticationPredicates::IS_ADMIN));
|
||||||
}
|
}
|
||||||
|
|
||||||
// load the settings when the service starts
|
// load the settings when the service starts
|
||||||
@@ -708,4 +711,17 @@ void WebCustomEntityService::test() {
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
// return entities as a json object
|
||||||
|
void WebCustomEntityService::getEntities(AsyncWebServerRequest * request) {
|
||||||
|
auto * response = new AsyncJsonResponse(false);
|
||||||
|
JsonObject root = response->getRoot();
|
||||||
|
|
||||||
|
root["type"] = "entities";
|
||||||
|
|
||||||
|
System::extractSettings(EMSESP_CUSTOMENTITY_FILE, "Entities", root);
|
||||||
|
|
||||||
|
response->setLength();
|
||||||
|
request->send(response);
|
||||||
|
}
|
||||||
|
|
||||||
} // namespace emsesp
|
} // namespace emsesp
|
||||||
|
|||||||
@@ -22,6 +22,7 @@
|
|||||||
|
|
||||||
#define EMSESP_CUSTOMENTITY_FILE "/config/emsespEntity.json"
|
#define EMSESP_CUSTOMENTITY_FILE "/config/emsespEntity.json"
|
||||||
#define EMSESP_CUSTOMENTITY_SERVICE_PATH "/rest/customEntities" // GET and POST
|
#define EMSESP_CUSTOMENTITY_SERVICE_PATH "/rest/customEntities" // GET and POST
|
||||||
|
#define EMSESP_GET_ENTITIES_PATH "/rest/getEntities"
|
||||||
|
|
||||||
namespace emsesp {
|
namespace emsesp {
|
||||||
|
|
||||||
@@ -80,6 +81,8 @@ class WebCustomEntityService : public StatefulService<WebCustomEntity> {
|
|||||||
HttpEndpoint<WebCustomEntity> _httpEndpoint;
|
HttpEndpoint<WebCustomEntity> _httpEndpoint;
|
||||||
FSPersistence<WebCustomEntity> _fsPersistence;
|
FSPersistence<WebCustomEntity> _fsPersistence;
|
||||||
|
|
||||||
|
void getEntities(AsyncWebServerRequest * request);
|
||||||
|
|
||||||
std::list<CustomEntityItem> * customEntityItems_; // pointer to the list of entity items
|
std::list<CustomEntityItem> * customEntityItems_; // pointer to the list of entity items
|
||||||
|
|
||||||
bool ha_registered_ = false;
|
bool ha_registered_ = false;
|
||||||
|
|||||||
@@ -25,24 +25,25 @@ bool WebCustomization::_start = true;
|
|||||||
WebCustomizationService::WebCustomizationService(AsyncWebServer * server, FS * fs, SecurityManager * securityManager)
|
WebCustomizationService::WebCustomizationService(AsyncWebServer * server, FS * fs, SecurityManager * securityManager)
|
||||||
: _fsPersistence(WebCustomization::read, WebCustomization::update, this, fs, EMSESP_CUSTOMIZATION_FILE) {
|
: _fsPersistence(WebCustomization::read, WebCustomization::update, this, fs, EMSESP_CUSTOMIZATION_FILE) {
|
||||||
// GET
|
// GET
|
||||||
server->on(DEVICE_ENTITIES_PATH,
|
server->on(EMSESP_DEVICE_ENTITIES_PATH,
|
||||||
HTTP_GET,
|
HTTP_GET,
|
||||||
securityManager->wrapRequest([this](AsyncWebServerRequest * request) { device_entities(request); }, AuthenticationPredicates::IS_AUTHENTICATED));
|
securityManager->wrapRequest([this](AsyncWebServerRequest * request) { device_entities(request); }, AuthenticationPredicates::IS_AUTHENTICATED));
|
||||||
|
server->on(EMSESP_DEVICES_SERVICE_PATH,
|
||||||
server->on(DEVICES_SERVICE_PATH,
|
|
||||||
HTTP_GET,
|
HTTP_GET,
|
||||||
securityManager->wrapRequest([this](AsyncWebServerRequest * request) { devices(request); }, AuthenticationPredicates::IS_AUTHENTICATED));
|
securityManager->wrapRequest([this](AsyncWebServerRequest * request) { devices(request); }, AuthenticationPredicates::IS_AUTHENTICATED));
|
||||||
|
server->on(EMSESP_GET_CUSTOMIZATIONS_PATH,
|
||||||
|
HTTP_GET,
|
||||||
|
securityManager->wrapRequest([this](AsyncWebServerRequest * request) { getCustomizations(request); }, AuthenticationPredicates::IS_ADMIN));
|
||||||
|
|
||||||
|
|
||||||
// POST
|
// POST
|
||||||
server->on(RESET_CUSTOMIZATION_SERVICE_PATH,
|
server->on(EMSESP_RESET_CUSTOMIZATION_SERVICE_PATH,
|
||||||
HTTP_POST,
|
HTTP_POST,
|
||||||
securityManager->wrapRequest([this](AsyncWebServerRequest * request) { reset_customization(request); }, AuthenticationPredicates::IS_ADMIN));
|
securityManager->wrapRequest([this](AsyncWebServerRequest * request) { reset_customization(request); }, AuthenticationPredicates::IS_ADMIN));
|
||||||
|
server->on(EMSESP_WRITE_DEVICE_NAME_PATH,
|
||||||
server->on(WRITE_DEVICE_NAME_PATH,
|
|
||||||
securityManager->wrapCallback([this](AsyncWebServerRequest * request, JsonVariant json) { writeDeviceName(request, json); },
|
securityManager->wrapCallback([this](AsyncWebServerRequest * request, JsonVariant json) { writeDeviceName(request, json); },
|
||||||
AuthenticationPredicates::IS_AUTHENTICATED));
|
AuthenticationPredicates::IS_AUTHENTICATED));
|
||||||
|
server->on(EMSESP_CUSTOMIZATION_ENTITIES_PATH,
|
||||||
server->on(CUSTOMIZATION_ENTITIES_PATH,
|
|
||||||
securityManager->wrapCallback([this](AsyncWebServerRequest * request, JsonVariant json) { customization_entities(request, json); },
|
securityManager->wrapCallback([this](AsyncWebServerRequest * request, JsonVariant json) { customization_entities(request, json); },
|
||||||
AuthenticationPredicates::IS_AUTHENTICATED));
|
AuthenticationPredicates::IS_AUTHENTICATED));
|
||||||
}
|
}
|
||||||
@@ -155,7 +156,7 @@ void WebCustomizationService::reset_customization(AsyncWebServerRequest * reques
|
|||||||
if (LittleFS.remove(EMSESP_CUSTOMIZATION_FILE)) {
|
if (LittleFS.remove(EMSESP_CUSTOMIZATION_FILE)) {
|
||||||
AsyncWebServerResponse * response = request->beginResponse(205); // restart needed
|
AsyncWebServerResponse * response = request->beginResponse(205); // restart needed
|
||||||
request->send(response);
|
request->send(response);
|
||||||
EMSESP::system_.restart_requested(true);
|
EMSESP::system_.restart_pending(true);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -424,4 +425,17 @@ void WebCustomizationService::test() {
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
// return all customizations in a json object
|
||||||
|
void WebCustomizationService::getCustomizations(AsyncWebServerRequest * request) {
|
||||||
|
auto * response = new AsyncJsonResponse(false);
|
||||||
|
JsonObject root = response->getRoot();
|
||||||
|
|
||||||
|
root["type"] = "customizations";
|
||||||
|
|
||||||
|
System::extractSettings(EMSESP_CUSTOMIZATION_FILE, "Customizations", root);
|
||||||
|
|
||||||
|
response->setLength();
|
||||||
|
request->send(response);
|
||||||
|
}
|
||||||
|
|
||||||
} // namespace emsesp
|
} // namespace emsesp
|
||||||
|
|||||||
@@ -22,13 +22,14 @@
|
|||||||
#define EMSESP_CUSTOMIZATION_FILE "/config/emsespCustomization.json"
|
#define EMSESP_CUSTOMIZATION_FILE "/config/emsespCustomization.json"
|
||||||
|
|
||||||
// GET
|
// GET
|
||||||
#define DEVICES_SERVICE_PATH "/rest/devices"
|
#define EMSESP_DEVICES_SERVICE_PATH "/rest/devices"
|
||||||
#define DEVICE_ENTITIES_PATH "/rest/deviceEntities"
|
#define EMSESP_DEVICE_ENTITIES_PATH "/rest/deviceEntities"
|
||||||
|
#define EMSESP_GET_CUSTOMIZATIONS_PATH "/rest/getCustomizations"
|
||||||
|
|
||||||
// POST
|
// POST
|
||||||
#define CUSTOMIZATION_ENTITIES_PATH "/rest/customizationEntities"
|
#define EMSESP_CUSTOMIZATION_ENTITIES_PATH "/rest/customizationEntities"
|
||||||
#define RESET_CUSTOMIZATION_SERVICE_PATH "/rest/resetCustomizations"
|
#define EMSESP_RESET_CUSTOMIZATION_SERVICE_PATH "/rest/resetCustomizations"
|
||||||
#define WRITE_DEVICE_NAME_PATH "/rest/writeDeviceName"
|
#define EMSESP_WRITE_DEVICE_NAME_PATH "/rest/writeDeviceName"
|
||||||
|
|
||||||
namespace emsesp {
|
namespace emsesp {
|
||||||
|
|
||||||
@@ -99,6 +100,7 @@ class WebCustomizationService : public StatefulService<WebCustomization> {
|
|||||||
// GET
|
// GET
|
||||||
void devices(AsyncWebServerRequest * request);
|
void devices(AsyncWebServerRequest * request);
|
||||||
void device_entities(AsyncWebServerRequest * request);
|
void device_entities(AsyncWebServerRequest * request);
|
||||||
|
void getCustomizations(AsyncWebServerRequest * request);
|
||||||
|
|
||||||
// POST
|
// POST
|
||||||
void customization_entities(AsyncWebServerRequest * request, JsonVariant json);
|
void customization_entities(AsyncWebServerRequest * request, JsonVariant json);
|
||||||
|
|||||||
@@ -22,25 +22,25 @@ namespace emsesp {
|
|||||||
|
|
||||||
WebDataService::WebDataService(AsyncWebServer * server, SecurityManager * securityManager) {
|
WebDataService::WebDataService(AsyncWebServer * server, SecurityManager * securityManager) {
|
||||||
// write endpoints
|
// write endpoints
|
||||||
server->on(WRITE_DEVICE_VALUE_SERVICE_PATH,
|
server->on(EMSESP_WRITE_DEVICE_VALUE_SERVICE_PATH,
|
||||||
securityManager->wrapCallback([this](AsyncWebServerRequest * request, JsonVariant json) { write_device_value(request, json); },
|
securityManager->wrapCallback([this](AsyncWebServerRequest * request, JsonVariant json) { write_device_value(request, json); },
|
||||||
AuthenticationPredicates::IS_ADMIN));
|
AuthenticationPredicates::IS_ADMIN));
|
||||||
server->on(WRITE_TEMPERATURE_SENSOR_SERVICE_PATH,
|
server->on(EMSESP_WRITE_TEMPERATURE_SENSOR_SERVICE_PATH,
|
||||||
securityManager->wrapCallback([this](AsyncWebServerRequest * request, JsonVariant json) { write_temperature_sensor(request, json); },
|
securityManager->wrapCallback([this](AsyncWebServerRequest * request, JsonVariant json) { write_temperature_sensor(request, json); },
|
||||||
AuthenticationPredicates::IS_ADMIN));
|
AuthenticationPredicates::IS_ADMIN));
|
||||||
server->on(WRITE_ANALOG_SENSOR_SERVICE_PATH,
|
server->on(EMSESP_WRITE_ANALOG_SENSOR_SERVICE_PATH,
|
||||||
securityManager->wrapCallback([this](AsyncWebServerRequest * request, JsonVariant json) { write_analog_sensor(request, json); },
|
securityManager->wrapCallback([this](AsyncWebServerRequest * request, JsonVariant json) { write_analog_sensor(request, json); },
|
||||||
AuthenticationPredicates::IS_ADMIN));
|
AuthenticationPredicates::IS_ADMIN));
|
||||||
// GET's
|
// GET's
|
||||||
server->on(DEVICE_DATA_SERVICE_PATH,
|
server->on(EMSESP_DEVICE_DATA_SERVICE_PATH,
|
||||||
HTTP_GET,
|
HTTP_GET,
|
||||||
securityManager->wrapRequest([this](AsyncWebServerRequest * request) { device_data(request); }, AuthenticationPredicates::IS_AUTHENTICATED));
|
securityManager->wrapRequest([this](AsyncWebServerRequest * request) { device_data(request); }, AuthenticationPredicates::IS_AUTHENTICATED));
|
||||||
|
|
||||||
server->on(CORE_DATA_SERVICE_PATH,
|
server->on(EMSESP_CORE_DATA_SERVICE_PATH,
|
||||||
HTTP_GET,
|
HTTP_GET,
|
||||||
securityManager->wrapRequest([this](AsyncWebServerRequest * request) { core_data(request); }, AuthenticationPredicates::IS_AUTHENTICATED));
|
securityManager->wrapRequest([this](AsyncWebServerRequest * request) { core_data(request); }, AuthenticationPredicates::IS_AUTHENTICATED));
|
||||||
|
|
||||||
server->on(SENSOR_DATA_SERVICE_PATH,
|
server->on(EMSESP_SENSOR_DATA_SERVICE_PATH,
|
||||||
HTTP_GET,
|
HTTP_GET,
|
||||||
securityManager->wrapRequest([this](AsyncWebServerRequest * request) { sensor_data(request); }, AuthenticationPredicates::IS_AUTHENTICATED));
|
securityManager->wrapRequest([this](AsyncWebServerRequest * request) { sensor_data(request); }, AuthenticationPredicates::IS_AUTHENTICATED));
|
||||||
}
|
}
|
||||||
@@ -341,7 +341,7 @@ void WebDataService::write_analog_sensor(AsyncWebServerRequest * request, JsonVa
|
|||||||
ok = EMSESP::analogsensor_.update(gpio, name, offset, factor, uom, type, deleted);
|
ok = EMSESP::analogsensor_.update(gpio, name, offset, factor, uom, type, deleted);
|
||||||
}
|
}
|
||||||
|
|
||||||
AsyncWebServerResponse * response = request->beginResponse(ok ? 200 : 400); // bad request
|
AsyncWebServerResponse * response = request->beginResponse(ok ? 200 : 400); // ok or bad request
|
||||||
request->send(response);
|
request->send(response);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -20,14 +20,14 @@
|
|||||||
#define WebDataService_h
|
#define WebDataService_h
|
||||||
|
|
||||||
// GET
|
// GET
|
||||||
#define CORE_DATA_SERVICE_PATH "/rest/coreData"
|
#define EMSESP_CORE_DATA_SERVICE_PATH "/rest/coreData"
|
||||||
#define DEVICE_DATA_SERVICE_PATH "/rest/deviceData"
|
#define EMSESP_DEVICE_DATA_SERVICE_PATH "/rest/deviceData"
|
||||||
#define SENSOR_DATA_SERVICE_PATH "/rest/sensorData"
|
#define EMSESP_SENSOR_DATA_SERVICE_PATH "/rest/sensorData"
|
||||||
|
|
||||||
// POST
|
// POST
|
||||||
#define WRITE_DEVICE_VALUE_SERVICE_PATH "/rest/writeDeviceValue"
|
#define EMSESP_WRITE_DEVICE_VALUE_SERVICE_PATH "/rest/writeDeviceValue"
|
||||||
#define WRITE_TEMPERATURE_SENSOR_SERVICE_PATH "/rest/writeTemperatureSensor"
|
#define EMSESP_WRITE_TEMPERATURE_SENSOR_SERVICE_PATH "/rest/writeTemperatureSensor"
|
||||||
#define WRITE_ANALOG_SENSOR_SERVICE_PATH "/rest/writeAnalogSensor"
|
#define EMSESP_WRITE_ANALOG_SENSOR_SERVICE_PATH "/rest/writeAnalogSensor"
|
||||||
|
|
||||||
namespace emsesp {
|
namespace emsesp {
|
||||||
|
|
||||||
|
|||||||
@@ -21,12 +21,12 @@
|
|||||||
namespace emsesp {
|
namespace emsesp {
|
||||||
|
|
||||||
WebLogService::WebLogService(AsyncWebServer * server, SecurityManager * securityManager)
|
WebLogService::WebLogService(AsyncWebServer * server, SecurityManager * securityManager)
|
||||||
: events_(EVENT_SOURCE_LOG_PATH) {
|
: events_(EMSESP_EVENT_SOURCE_LOG_PATH) {
|
||||||
// get & set settings
|
// get & set settings
|
||||||
server->on(LOG_SETTINGS_PATH, [this](AsyncWebServerRequest * request, JsonVariant json) { getSetValues(request, json); });
|
server->on(EMSESP_LOG_SETTINGS_PATH, [this](AsyncWebServerRequest * request, JsonVariant json) { getSetValues(request, json); });
|
||||||
|
|
||||||
// for bring back the whole log - is a command, hence a POST
|
// for bring back the whole log - is a command, hence a POST
|
||||||
server->on(FETCH_LOG_PATH, HTTP_POST, [this](AsyncWebServerRequest * request) { fetchLog(request); });
|
server->on(EMSESP_FETCH_LOG_PATH, HTTP_POST, [this](AsyncWebServerRequest * request) { fetchLog(request); });
|
||||||
|
|
||||||
// events_.setFilter(securityManager->filterRequest(AuthenticationPredicates::IS_ADMIN));
|
// events_.setFilter(securityManager->filterRequest(AuthenticationPredicates::IS_ADMIN));
|
||||||
server->addHandler(&events_);
|
server->addHandler(&events_);
|
||||||
|
|||||||
@@ -19,9 +19,9 @@
|
|||||||
#ifndef WebLogService_h
|
#ifndef WebLogService_h
|
||||||
#define WebLogService_h
|
#define WebLogService_h
|
||||||
|
|
||||||
#define EVENT_SOURCE_LOG_PATH "/es/log"
|
#define EMSESP_EVENT_SOURCE_LOG_PATH "/es/log"
|
||||||
#define FETCH_LOG_PATH "/rest/fetchLog"
|
#define EMSESP_FETCH_LOG_PATH "/rest/fetchLog"
|
||||||
#define LOG_SETTINGS_PATH "/rest/logSettings"
|
#define EMSESP_LOG_SETTINGS_PATH "/rest/logSettings"
|
||||||
|
|
||||||
namespace emsesp {
|
namespace emsesp {
|
||||||
|
|
||||||
|
|||||||
@@ -25,6 +25,9 @@ namespace emsesp {
|
|||||||
WebSchedulerService::WebSchedulerService(AsyncWebServer * server, FS * fs, SecurityManager * securityManager)
|
WebSchedulerService::WebSchedulerService(AsyncWebServer * server, FS * fs, SecurityManager * securityManager)
|
||||||
: _httpEndpoint(WebScheduler::read, WebScheduler::update, this, server, EMSESP_SCHEDULER_SERVICE_PATH, securityManager, AuthenticationPredicates::IS_AUTHENTICATED)
|
: _httpEndpoint(WebScheduler::read, WebScheduler::update, this, server, EMSESP_SCHEDULER_SERVICE_PATH, securityManager, AuthenticationPredicates::IS_AUTHENTICATED)
|
||||||
, _fsPersistence(WebScheduler::read, WebScheduler::update, this, fs, EMSESP_SCHEDULER_FILE) {
|
, _fsPersistence(WebScheduler::read, WebScheduler::update, this, fs, EMSESP_SCHEDULER_FILE) {
|
||||||
|
server->on(EMSESP_GET_SCHEDULE_PATH,
|
||||||
|
HTTP_GET,
|
||||||
|
securityManager->wrapRequest([this](AsyncWebServerRequest * request) { getSchedule(request); }, AuthenticationPredicates::IS_ADMIN));
|
||||||
}
|
}
|
||||||
|
|
||||||
// load the settings when the service starts
|
// load the settings when the service starts
|
||||||
@@ -526,7 +529,7 @@ void WebSchedulerService::loop() {
|
|||||||
void WebSchedulerService::scheduler_task(void * pvParameters) {
|
void WebSchedulerService::scheduler_task(void * pvParameters) {
|
||||||
while (1) {
|
while (1) {
|
||||||
delay(10); // no need to hurry
|
delay(10); // no need to hurry
|
||||||
if (!EMSESP::system_.upload_status()) {
|
if (!EMSESP::system_.upload_isrunning()) {
|
||||||
EMSESP::webSchedulerService.loop();
|
EMSESP::webSchedulerService.loop();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -610,4 +613,17 @@ void WebSchedulerService::test() {
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
// return schedule entries in a json object
|
||||||
|
void WebSchedulerService::getSchedule(AsyncWebServerRequest * request) {
|
||||||
|
auto * response = new AsyncJsonResponse(false);
|
||||||
|
JsonObject root = response->getRoot();
|
||||||
|
|
||||||
|
root["type"] = "schedule";
|
||||||
|
|
||||||
|
System::extractSettings(EMSESP_SCHEDULER_FILE, "Schedule", root);
|
||||||
|
|
||||||
|
response->setLength();
|
||||||
|
request->send(response);
|
||||||
|
}
|
||||||
|
|
||||||
} // namespace emsesp
|
} // namespace emsesp
|
||||||
|
|||||||
@@ -21,6 +21,7 @@
|
|||||||
|
|
||||||
#define EMSESP_SCHEDULER_FILE "/config/emsespScheduler.json"
|
#define EMSESP_SCHEDULER_FILE "/config/emsespScheduler.json"
|
||||||
#define EMSESP_SCHEDULER_SERVICE_PATH "/rest/schedule" // GET and POST
|
#define EMSESP_SCHEDULER_SERVICE_PATH "/rest/schedule" // GET and POST
|
||||||
|
#define EMSESP_GET_SCHEDULE_PATH "/rest/getSchedule"
|
||||||
|
|
||||||
// bit flags for the schedule items. Matches those in interface/src/app/main/SchedulerDialog.tsx
|
// bit flags for the schedule items. Matches those in interface/src/app/main/SchedulerDialog.tsx
|
||||||
// 0-127 (0->0x7F) is day schedule
|
// 0-127 (0->0x7F) is day schedule
|
||||||
@@ -90,6 +91,8 @@ class WebSchedulerService : public StatefulService<WebScheduler> {
|
|||||||
HttpEndpoint<WebScheduler> _httpEndpoint;
|
HttpEndpoint<WebScheduler> _httpEndpoint;
|
||||||
FSPersistence<WebScheduler> _fsPersistence;
|
FSPersistence<WebScheduler> _fsPersistence;
|
||||||
|
|
||||||
|
void getSchedule(AsyncWebServerRequest * request);
|
||||||
|
|
||||||
std::list<ScheduleItem> * scheduleItems_; // pointer to the list of schedule events
|
std::list<ScheduleItem> * scheduleItems_; // pointer to the list of schedule events
|
||||||
bool ha_registered_ = false;
|
bool ha_registered_ = false;
|
||||||
std::deque<ScheduleItem *> cmd_changed_;
|
std::deque<ScheduleItem *> cmd_changed_;
|
||||||
|
|||||||
@@ -29,6 +29,10 @@ WebSettingsService::WebSettingsService(AsyncWebServer * server, FS * fs, Securit
|
|||||||
HTTP_GET,
|
HTTP_GET,
|
||||||
securityManager->wrapRequest([this](AsyncWebServerRequest * request) { board_profile(request); }, AuthenticationPredicates::IS_AUTHENTICATED));
|
securityManager->wrapRequest([this](AsyncWebServerRequest * request) { board_profile(request); }, AuthenticationPredicates::IS_AUTHENTICATED));
|
||||||
addUpdateHandler([this] { onUpdate(); }, false);
|
addUpdateHandler([this] { onUpdate(); }, false);
|
||||||
|
|
||||||
|
server->on(EMSESP_GET_SETTINGS_PATH,
|
||||||
|
HTTP_GET,
|
||||||
|
securityManager->wrapRequest([this](AsyncWebServerRequest * request) { getSettings(request); }, AuthenticationPredicates::IS_ADMIN));
|
||||||
}
|
}
|
||||||
|
|
||||||
void WebSettings::read(WebSettings & settings, JsonObject root) {
|
void WebSettings::read(WebSettings & settings, JsonObject root) {
|
||||||
@@ -152,7 +156,8 @@ StateUpdateResult WebSettings::update(JsonObject root, WebSettings & settings) {
|
|||||||
} else {
|
} else {
|
||||||
EMSESP::nvs_.putString("boot", "S32");
|
EMSESP::nvs_.putString("boot", "S32");
|
||||||
}
|
}
|
||||||
ESP.restart();
|
// ESP.restart();
|
||||||
|
EMSESP::system_.restart_requested(true);
|
||||||
#elif CONFIG_IDF_TARGET_ESP32C3
|
#elif CONFIG_IDF_TARGET_ESP32C3
|
||||||
settings.board_profile = "C3MINI";
|
settings.board_profile = "C3MINI";
|
||||||
#elif CONFIG_IDF_TARGET_ESP32S2
|
#elif CONFIG_IDF_TARGET_ESP32S2
|
||||||
@@ -425,4 +430,25 @@ void WebSettingsService::board_profile(AsyncWebServerRequest * request) {
|
|||||||
request->send(response);
|
request->send(response);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// returns json with all system settings
|
||||||
|
void WebSettingsService::getSettings(AsyncWebServerRequest * request) {
|
||||||
|
auto * response = new AsyncJsonResponse(false);
|
||||||
|
JsonObject root = response->getRoot();
|
||||||
|
|
||||||
|
root["type"] = "settings";
|
||||||
|
|
||||||
|
JsonObject node = root["System"].to<JsonObject>();
|
||||||
|
node["version"] = EMSESP_APP_VERSION;
|
||||||
|
|
||||||
|
System::extractSettings(NETWORK_SETTINGS_FILE, "Network", root);
|
||||||
|
System::extractSettings(AP_SETTINGS_FILE, "AP", root);
|
||||||
|
System::extractSettings(MQTT_SETTINGS_FILE, "MQTT", root);
|
||||||
|
System::extractSettings(NTP_SETTINGS_FILE, "NTP", root);
|
||||||
|
System::extractSettings(SECURITY_SETTINGS_FILE, "Security", root);
|
||||||
|
System::extractSettings(EMSESP_SETTINGS_FILE, "Settings", root);
|
||||||
|
|
||||||
|
response->setLength();
|
||||||
|
request->send(response);
|
||||||
|
}
|
||||||
|
|
||||||
} // namespace emsesp
|
} // namespace emsesp
|
||||||
|
|||||||
@@ -22,8 +22,10 @@
|
|||||||
#include "../default_settings.h"
|
#include "../default_settings.h"
|
||||||
|
|
||||||
#define EMSESP_SETTINGS_FILE "/config/emsespSettings.json"
|
#define EMSESP_SETTINGS_FILE "/config/emsespSettings.json"
|
||||||
|
|
||||||
#define EMSESP_SETTINGS_SERVICE_PATH "/rest/settings"
|
#define EMSESP_SETTINGS_SERVICE_PATH "/rest/settings"
|
||||||
#define EMSESP_BOARD_PROFILE_SERVICE_PATH "/rest/boardProfile"
|
#define EMSESP_BOARD_PROFILE_SERVICE_PATH "/rest/boardProfile"
|
||||||
|
#define EMSESP_GET_SETTINGS_PATH "/rest/getSettings"
|
||||||
|
|
||||||
namespace emsesp {
|
namespace emsesp {
|
||||||
|
|
||||||
@@ -134,6 +136,7 @@ class WebSettingsService : public StatefulService<WebSettings> {
|
|||||||
FSPersistence<WebSettings> _fsPersistence;
|
FSPersistence<WebSettings> _fsPersistence;
|
||||||
|
|
||||||
void board_profile(AsyncWebServerRequest * request);
|
void board_profile(AsyncWebServerRequest * request);
|
||||||
|
void getSettings(AsyncWebServerRequest * request);
|
||||||
|
|
||||||
void onUpdate();
|
void onUpdate();
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -24,35 +24,22 @@
|
|||||||
|
|
||||||
namespace emsesp {
|
namespace emsesp {
|
||||||
|
|
||||||
// /rest/hardwareStatus
|
|
||||||
WebStatusService::WebStatusService(AsyncWebServer * server, SecurityManager * securityManager) {
|
WebStatusService::WebStatusService(AsyncWebServer * server, SecurityManager * securityManager) {
|
||||||
server->on(HARDWARE_STATUS_SERVICE_PATH, HTTP_GET, [this](AsyncWebServerRequest * request) { hardwareStatus(request); });
|
// GET
|
||||||
server->on(SYSTEM_STATUS_SERVICE_PATH, HTTP_GET, [this](AsyncWebServerRequest * request) { systemStatus(request); });
|
server->on(EMSESP_HARDWARE_STATUS_SERVICE_PATH, HTTP_GET, [this](AsyncWebServerRequest * request) { hardwareStatus(request); });
|
||||||
|
server->on(EMSESP_SYSTEM_STATUS_SERVICE_PATH, HTTP_GET, [this](AsyncWebServerRequest * request) { systemStatus(request); });
|
||||||
|
// POST
|
||||||
|
server->on(EMSESP_CHECK_UPGRADE_PATH, [this](AsyncWebServerRequest * request, JsonVariant json) { checkUpgrade(request, json); });
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// /rest/systemStatus
|
||||||
void WebStatusService::systemStatus(AsyncWebServerRequest * request) {
|
void WebStatusService::systemStatus(AsyncWebServerRequest * request) {
|
||||||
// This is a litle trick for the OTA upload. We don't want the React RestartService to think we're finished
|
|
||||||
// with the upload so we fake it and pretent the /rest/systemStatus is not available. That way the spinner keeps spinning.
|
|
||||||
if (EMSESP::system_.upload_status()) {
|
|
||||||
return; // ignore endpoint
|
|
||||||
}
|
|
||||||
|
|
||||||
EMSESP::system_.refreshHeapMem(); // refresh free heap and max alloc heap
|
EMSESP::system_.refreshHeapMem(); // refresh free heap and max alloc heap
|
||||||
|
|
||||||
auto * response = new AsyncJsonResponse(false);
|
auto * response = new AsyncJsonResponse(false);
|
||||||
JsonObject root = response->getRoot();
|
JsonObject root = response->getRoot();
|
||||||
|
|
||||||
#ifdef EMSESP_DEBUG
|
|
||||||
root["emsesp_version"] = std::string(EMSESP_APP_VERSION) + " (DEBUG)";
|
|
||||||
#else
|
|
||||||
#ifdef EMSESP_TEST
|
|
||||||
root["emsesp_version"] = std::string(EMSESP_APP_VERSION) + " (TEST)";
|
|
||||||
#else
|
|
||||||
root["emsesp_version"] = EMSESP_APP_VERSION;
|
root["emsesp_version"] = EMSESP_APP_VERSION;
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
root["esp_platform"] = EMSESP_PLATFORM; // from default_settings.h: ESP32, ESP32C3, ESP32S2, ESP32S3
|
|
||||||
root["status"] = EMSESP::bus_status(); // 0, 1 or 2
|
root["status"] = EMSESP::bus_status(); // 0, 1 or 2
|
||||||
root["bus_uptime"] = EMSbus::bus_uptime();
|
root["bus_uptime"] = EMSbus::bus_uptime();
|
||||||
root["num_devices"] = EMSESP::count_devices();
|
root["num_devices"] = EMSESP::count_devices();
|
||||||
@@ -87,38 +74,30 @@ void WebStatusService::systemStatus(AsyncWebServerRequest * request) {
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifndef EMSESP_STANDALONE
|
|
||||||
const esp_partition_t * partition = esp_partition_find_first(ESP_PARTITION_TYPE_APP, ESP_PARTITION_SUBTYPE_APP_FACTORY, nullptr);
|
|
||||||
root["has_loader"] = partition != NULL && partition != esp_ota_get_running_partition();
|
|
||||||
partition = esp_ota_get_next_update_partition(nullptr);
|
|
||||||
if (partition) {
|
|
||||||
uint64_t buffer;
|
|
||||||
esp_partition_read(partition, 0, &buffer, 8);
|
|
||||||
root["has_partition"] = (buffer != 0xFFFFFFFFFFFFFFFF);
|
|
||||||
} else {
|
|
||||||
root["has_partition"] = false;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
response->setLength();
|
response->setLength();
|
||||||
request->send(response);
|
request->send(response);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// /rest/hardwareStatus
|
||||||
|
// This is also used for polling
|
||||||
void WebStatusService::hardwareStatus(AsyncWebServerRequest * request) {
|
void WebStatusService::hardwareStatus(AsyncWebServerRequest * request) {
|
||||||
EMSESP::system_.refreshHeapMem(); // refresh free heap and max alloc heap
|
EMSESP::system_.refreshHeapMem(); // refresh free heap and max alloc heap
|
||||||
|
|
||||||
auto * response = new AsyncJsonResponse(false);
|
auto * response = new AsyncJsonResponse(false);
|
||||||
JsonObject root = response->getRoot();
|
JsonObject root = response->getRoot();
|
||||||
|
|
||||||
#ifdef EMSESP_DEBUG
|
|
||||||
root["emsesp_version"] = std::string(EMSESP_APP_VERSION) + " (DEBUG)";
|
|
||||||
#else
|
|
||||||
#ifdef EMSESP_TEST
|
|
||||||
root["emsesp_version"] = std::string(EMSESP_APP_VERSION) + " (TEST)";
|
|
||||||
#else
|
|
||||||
root["emsesp_version"] = EMSESP_APP_VERSION;
|
root["emsesp_version"] = EMSESP_APP_VERSION;
|
||||||
|
|
||||||
|
#ifdef EMSESP_DEBUG
|
||||||
|
#ifdef EMSESP_TEST
|
||||||
|
root["build_flags"] = "DEBUG,TEST";
|
||||||
|
#else
|
||||||
|
root["build_flags"] = "DEBUG";
|
||||||
#endif
|
#endif
|
||||||
|
#elif defined(EMSESP_TEST)
|
||||||
|
root["build_flags"] = "TEST";
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
root["esp_platform"] = EMSESP_PLATFORM;
|
root["esp_platform"] = EMSESP_PLATFORM;
|
||||||
|
|
||||||
#ifndef EMSESP_STANDALONE
|
#ifndef EMSESP_STANDALONE
|
||||||
@@ -139,19 +118,56 @@ void WebStatusService::hardwareStatus(AsyncWebServerRequest * request) {
|
|||||||
root["fs_used"] = FSused;
|
root["fs_used"] = FSused;
|
||||||
root["fs_free"] = EMSESP::system_.FStotal() - FSused;
|
root["fs_free"] = EMSESP::system_.FStotal() - FSused;
|
||||||
root["free_caps"] = heap_caps_get_free_size(MALLOC_CAP_8BIT) / 1024; // includes heap and psram
|
root["free_caps"] = heap_caps_get_free_size(MALLOC_CAP_8BIT) / 1024; // includes heap and psram
|
||||||
|
root["psram"] = (EMSESP::system_.PSram() > 0); // boolean
|
||||||
root["psram"] = EMSESP::system_.PSram();
|
|
||||||
if (EMSESP::system_.PSram()) {
|
if (EMSESP::system_.PSram()) {
|
||||||
root["psram_size"] = EMSESP::system_.PSram();
|
root["psram_size"] = EMSESP::system_.PSram();
|
||||||
root["free_psram"] = ESP.getFreePsram() / 1024;
|
root["free_psram"] = ESP.getFreePsram() / 1024;
|
||||||
}
|
}
|
||||||
|
|
||||||
root["model"] = EMSESP::system_.getBBQKeesGatewayDetails();
|
root["model"] = EMSESP::system_.getBBQKeesGatewayDetails();
|
||||||
|
|
||||||
|
// check for a factory partition first
|
||||||
|
const esp_partition_t * partition = esp_partition_find_first(ESP_PARTITION_TYPE_APP, ESP_PARTITION_SUBTYPE_APP_FACTORY, nullptr);
|
||||||
|
root["has_loader"] = partition != NULL && partition != esp_ota_get_running_partition();
|
||||||
|
partition = esp_ota_get_next_update_partition(nullptr);
|
||||||
|
if (partition) {
|
||||||
|
uint64_t buffer;
|
||||||
|
esp_partition_read(partition, 0, &buffer, 8);
|
||||||
|
root["has_partition"] = (buffer != 0xFFFFFFFFFFFFFFFF);
|
||||||
|
} else {
|
||||||
|
root["has_partition"] = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Matches status codes in RestartMonitor.tsx
|
||||||
|
if (EMSESP::system_.restart_pending()) {
|
||||||
|
root["status"] = "restarting";
|
||||||
|
EMSESP::system_.restart_requested(true); // tell emsesp loop to start restart
|
||||||
|
} else {
|
||||||
|
root["status"] = EMSESP::system_.upload_isrunning() ? "uploading" : "ready";
|
||||||
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
response->setLength();
|
response->setLength();
|
||||||
request->send(response);
|
request->send(response);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// returns trues if there is an upgrade available
|
||||||
|
void WebStatusService::checkUpgrade(AsyncWebServerRequest * request, JsonVariant json) {
|
||||||
|
auto * response = new AsyncJsonResponse();
|
||||||
|
JsonObject root = response->getRoot();
|
||||||
|
|
||||||
|
version::Semver200_version settings_version(EMSESP_APP_VERSION);
|
||||||
|
std::string latest_version = json["version"] | EMSESP_APP_VERSION;
|
||||||
|
version::Semver200_version this_version(latest_version);
|
||||||
|
|
||||||
|
#ifdef EMSESP_DEBUG
|
||||||
|
emsesp::EMSESP::logger().debug("Checking for upgrade: %s > %s", EMSESP_APP_VERSION, latest_version.c_str());
|
||||||
|
#endif
|
||||||
|
|
||||||
|
root["upgradeable"] = (this_version > settings_version);
|
||||||
|
|
||||||
|
response->setLength();
|
||||||
|
request->send(response);
|
||||||
|
}
|
||||||
|
|
||||||
} // namespace emsesp
|
} // namespace emsesp
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user