mirror of
https://github.com/emsesp/EMS-ESP32.git
synced 2026-09-13 05:34:34 +00:00
Compare commits
35
Commits
5f548c3287
...
dev
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
ef11879dc0 | ||
|
|
e3d9f03097 | ||
|
|
f90b7e9d91 | ||
|
|
e489c0f77d | ||
|
|
99dd04cbf5 | ||
|
|
4dac338e2c | ||
|
|
ff47722693 | ||
|
|
6aed13a9b2 | ||
|
|
dbf54f09f5 | ||
|
|
204ad1f8c9 | ||
|
|
928e1e7a69 | ||
|
|
a6ea91439b | ||
|
|
7735c9e8f2 | ||
|
|
a22cab95fa | ||
|
|
629c20ee11 | ||
|
|
5d75583dba | ||
|
|
2ec8450b78 | ||
|
|
f911950aee | ||
|
|
d1b97daff0 | ||
|
|
7caa5a1ba0 | ||
|
|
3ba7099987 | ||
|
|
0a50a9b1fa | ||
|
|
6291bdfa5d | ||
|
|
81fa7c592e | ||
|
|
1b345f788d | ||
|
|
7a709ba497 | ||
|
|
b4548ed257 | ||
|
|
9d3a49a0de | ||
|
|
355029ca9f | ||
|
|
889ddee86e | ||
|
|
e43226af7e | ||
|
|
09e1ee9914 | ||
|
|
dc623cb32a | ||
|
|
c1e514d8bf | ||
|
|
cc2865ebdd |
@@ -13,6 +13,7 @@ This release is based on the latest Espressif/Arduino core version 3. It brings
|
||||
- option to disable factory reset [#3150](https://github.com/emsesp/EMS-ESP32/issues/3150)
|
||||
- TLS support with 4MB boards without PSRAM
|
||||
- added eth_10mbit to Network Settings, which forces 10BASE-T half-duplex & autonegotiation off, halving the PHY’s power draw. It’s off by default as it will cause issues on managed switches with a port forced to 100Mb [#3213](https://github.com/emsesp/EMS-ESP32/pull/3213)
|
||||
- cleaner MD5 and firmware uploading in WebUI [#3222](https://github.com/emsesp/EMS-ESP32/issues/3222)
|
||||
|
||||
## Fixed
|
||||
|
||||
@@ -24,6 +25,7 @@ This release is based on the latest Espressif/Arduino core version 3. It brings
|
||||
- "IPv4 nameserver" showed an IPv6 address when IPv6 was in use
|
||||
- HA Discovery warning on Uptime after EMS-ESP boot due to NTP not ready
|
||||
- hc/control setting for UI800 thermostats [#3181](https://github.com/emsesp/EMS-ESP32/discussions/3181)
|
||||
- solar module switches [#3223](https://github.com/emsesp/EMS-ESP32/issues/3223)
|
||||
|
||||
## Changed
|
||||
|
||||
|
||||
@@ -113,7 +113,7 @@ CPPFLAGS += $(DEFINES) $(DEFAULTS) $(INCLUDE)
|
||||
CPPFLAGS += -ggdb -g3 -MMD
|
||||
CPPFLAGS += -flto=auto
|
||||
CPPFLAGS += -Wall -Wextra -Werror
|
||||
CPPFLAGS += -Wno-unused-parameter -Wno-missing-braces -Wno-vla-cxx-extension -Wno-switch-enum -Wno-unused-lambda-capture
|
||||
CPPFLAGS += -Wno-unused-parameter -Wno-missing-braces -Wno-vla-cxx-extension -Wno-switch-enum
|
||||
CPPFLAGS += -ffunction-sections -fdata-sections -fno-exceptions -fno-rtti -fno-threadsafe-statics
|
||||
CPPFLAGS += -Os -DNDEBUG
|
||||
|
||||
|
||||
@@ -317,7 +317,7 @@ uint8
|
||||
uint8
|
||||
| burnminperiod | burner min period | uint8 (>=0<=120) | minutes | true | DEVICE_DATA | 262 | 1 | 1 |
|
||||
| absburnpow | burner current power (absolute) | uint8 | % | false | DEVICE_DATA | 263 | 1 | 1 |
|
||||
| heatblock | heating block | uint16 | C | false | DEVICE_DATA | 264 | 1 | 1/10 |
|
||||
| heatblock | Heatblock temperature | uint16 | C | false | DEVICE_DATA | 264 | 1 | 1/10 |
|
||||
int8
|
||||
| boilhyston | hysteresis on temperature | int8 (>=-20<=0) | C | true | DEVICE_DATA | 265 | 1 | 1 |
|
||||
int8
|
||||
@@ -477,7 +477,7 @@ uint8
|
||||
uint8
|
||||
| burnminperiod | burner min period | uint8 (>=0<=120) | minutes | true | DEVICE_DATA | 262 | 1 | 1 |
|
||||
| absburnpow | burner current power (absolute) | uint8 | % | false | DEVICE_DATA | 263 | 1 | 1 |
|
||||
| heatblock | heating block | uint16 | C | false | DEVICE_DATA | 264 | 1 | 1/10 |
|
||||
| heatblock | Heatblock temperature | uint16 | C | false | DEVICE_DATA | 264 | 1 | 1/10 |
|
||||
int8
|
||||
| boilhyston | hysteresis on temperature | int8 (>=-20<=0) | C | true | DEVICE_DATA | 265 | 1 | 1 |
|
||||
int8
|
||||
@@ -637,7 +637,7 @@ uint8
|
||||
uint8
|
||||
| burnminperiod | burner min period | uint8 (>=0<=120) | minutes | true | DEVICE_DATA | 262 | 1 | 1 |
|
||||
| absburnpow | burner current power (absolute) | uint8 | % | false | DEVICE_DATA | 263 | 1 | 1 |
|
||||
| heatblock | heating block | uint16 | C | false | DEVICE_DATA | 264 | 1 | 1/10 |
|
||||
| heatblock | Heatblock temperature | uint16 | C | false | DEVICE_DATA | 264 | 1 | 1/10 |
|
||||
int8
|
||||
| boilhyston | hysteresis on temperature | int8 (>=-20<=0) | C | true | DEVICE_DATA | 265 | 1 | 1 |
|
||||
int8
|
||||
@@ -797,7 +797,7 @@ uint8
|
||||
uint8
|
||||
| burnminperiod | burner min period | uint8 (>=0<=120) | minutes | true | DEVICE_DATA | 262 | 1 | 1 |
|
||||
| absburnpow | burner current power (absolute) | uint8 | % | false | DEVICE_DATA | 263 | 1 | 1 |
|
||||
| heatblock | heating block | uint16 | C | false | DEVICE_DATA | 264 | 1 | 1/10 |
|
||||
| heatblock | Heatblock temperature | uint16 | C | false | DEVICE_DATA | 264 | 1 | 1/10 |
|
||||
int8
|
||||
| boilhyston | hysteresis on temperature | int8 (>=-20<=0) | C | true | DEVICE_DATA | 265 | 1 | 1 |
|
||||
int8
|
||||
@@ -957,7 +957,7 @@ uint8
|
||||
uint8
|
||||
| burnminperiod | burner min period | uint8 (>=0<=120) | minutes | true | DEVICE_DATA | 262 | 1 | 1 |
|
||||
| absburnpow | burner current power (absolute) | uint8 | % | false | DEVICE_DATA | 263 | 1 | 1 |
|
||||
| heatblock | heating block | uint16 | C | false | DEVICE_DATA | 264 | 1 | 1/10 |
|
||||
| heatblock | Heatblock temperature | uint16 | C | false | DEVICE_DATA | 264 | 1 | 1/10 |
|
||||
int8
|
||||
| boilhyston | hysteresis on temperature | int8 (>=-20<=0) | C | true | DEVICE_DATA | 265 | 1 | 1 |
|
||||
int8
|
||||
@@ -1117,7 +1117,7 @@ uint8
|
||||
uint8
|
||||
| burnminperiod | burner min period | uint8 (>=0<=120) | minutes | true | DEVICE_DATA | 262 | 1 | 1 |
|
||||
| absburnpow | burner current power (absolute) | uint8 | % | false | DEVICE_DATA | 263 | 1 | 1 |
|
||||
| heatblock | heating block | uint16 | C | false | DEVICE_DATA | 264 | 1 | 1/10 |
|
||||
| heatblock | Heatblock temperature | uint16 | C | false | DEVICE_DATA | 264 | 1 | 1/10 |
|
||||
int8
|
||||
| boilhyston | hysteresis on temperature | int8 (>=-20<=0) | C | true | DEVICE_DATA | 265 | 1 | 1 |
|
||||
int8
|
||||
@@ -1277,7 +1277,7 @@ uint8
|
||||
uint8
|
||||
| burnminperiod | burner min period | uint8 (>=0<=120) | minutes | true | DEVICE_DATA | 262 | 1 | 1 |
|
||||
| absburnpow | burner current power (absolute) | uint8 | % | false | DEVICE_DATA | 263 | 1 | 1 |
|
||||
| heatblock | heating block | uint16 | C | false | DEVICE_DATA | 264 | 1 | 1/10 |
|
||||
| heatblock | Heatblock temperature | uint16 | C | false | DEVICE_DATA | 264 | 1 | 1/10 |
|
||||
int8
|
||||
| boilhyston | hysteresis on temperature | int8 (>=-20<=0) | C | true | DEVICE_DATA | 265 | 1 | 1 |
|
||||
int8
|
||||
@@ -1437,7 +1437,7 @@ uint8
|
||||
uint8
|
||||
| burnminperiod | burner min period | uint8 (>=0<=120) | minutes | true | DEVICE_DATA | 262 | 1 | 1 |
|
||||
| absburnpow | burner current power (absolute) | uint8 | % | false | DEVICE_DATA | 263 | 1 | 1 |
|
||||
| heatblock | heating block | uint16 | C | false | DEVICE_DATA | 264 | 1 | 1/10 |
|
||||
| heatblock | Heatblock temperature | uint16 | C | false | DEVICE_DATA | 264 | 1 | 1/10 |
|
||||
int8
|
||||
| boilhyston | hysteresis on temperature | int8 (>=-20<=0) | C | true | DEVICE_DATA | 265 | 1 | 1 |
|
||||
int8
|
||||
@@ -1597,7 +1597,7 @@ uint8
|
||||
uint8
|
||||
| burnminperiod | burner min period | uint8 (>=0<=120) | minutes | true | DEVICE_DATA | 262 | 1 | 1 |
|
||||
| absburnpow | burner current power (absolute) | uint8 | % | false | DEVICE_DATA | 263 | 1 | 1 |
|
||||
| heatblock | heating block | uint16 | C | false | DEVICE_DATA | 264 | 1 | 1/10 |
|
||||
| heatblock | Heatblock temperature | uint16 | C | false | DEVICE_DATA | 264 | 1 | 1/10 |
|
||||
int8
|
||||
| boilhyston | hysteresis on temperature | int8 (>=-20<=0) | C | true | DEVICE_DATA | 265 | 1 | 1 |
|
||||
int8
|
||||
@@ -1757,7 +1757,7 @@ uint8
|
||||
uint8
|
||||
| burnminperiod | burner min period | uint8 (>=0<=120) | minutes | true | DEVICE_DATA | 262 | 1 | 1 |
|
||||
| absburnpow | burner current power (absolute) | uint8 | % | false | DEVICE_DATA | 263 | 1 | 1 |
|
||||
| heatblock | heating block | uint16 | C | false | DEVICE_DATA | 264 | 1 | 1/10 |
|
||||
| heatblock | Heatblock temperature | uint16 | C | false | DEVICE_DATA | 264 | 1 | 1/10 |
|
||||
int8
|
||||
| boilhyston | hysteresis on temperature | int8 (>=-20<=0) | C | true | DEVICE_DATA | 265 | 1 | 1 |
|
||||
int8
|
||||
@@ -1917,7 +1917,7 @@ uint8
|
||||
uint8
|
||||
| burnminperiod | burner min period | uint8 (>=0<=120) | minutes | true | DEVICE_DATA | 262 | 1 | 1 |
|
||||
| absburnpow | burner current power (absolute) | uint8 | % | false | DEVICE_DATA | 263 | 1 | 1 |
|
||||
| heatblock | heating block | uint16 | C | false | DEVICE_DATA | 264 | 1 | 1/10 |
|
||||
| heatblock | Heatblock temperature | uint16 | C | false | DEVICE_DATA | 264 | 1 | 1/10 |
|
||||
int8
|
||||
| boilhyston | hysteresis on temperature | int8 (>=-20<=0) | C | true | DEVICE_DATA | 265 | 1 | 1 |
|
||||
int8
|
||||
@@ -2077,7 +2077,7 @@ uint8
|
||||
uint8
|
||||
| burnminperiod | burner min period | uint8 (>=0<=120) | minutes | true | DEVICE_DATA | 262 | 1 | 1 |
|
||||
| absburnpow | burner current power (absolute) | uint8 | % | false | DEVICE_DATA | 263 | 1 | 1 |
|
||||
| heatblock | heating block | uint16 | C | false | DEVICE_DATA | 264 | 1 | 1/10 |
|
||||
| heatblock | Heatblock temperature | uint16 | C | false | DEVICE_DATA | 264 | 1 | 1/10 |
|
||||
int8
|
||||
| boilhyston | hysteresis on temperature | int8 (>=-20<=0) | C | true | DEVICE_DATA | 265 | 1 | 1 |
|
||||
int8
|
||||
@@ -2237,7 +2237,7 @@ uint8
|
||||
uint8
|
||||
| burnminperiod | burner min period | uint8 (>=0<=120) | minutes | true | DEVICE_DATA | 262 | 1 | 1 |
|
||||
| absburnpow | burner current power (absolute) | uint8 | % | false | DEVICE_DATA | 263 | 1 | 1 |
|
||||
| heatblock | heating block | uint16 | C | false | DEVICE_DATA | 264 | 1 | 1/10 |
|
||||
| heatblock | Heatblock temperature | uint16 | C | false | DEVICE_DATA | 264 | 1 | 1/10 |
|
||||
int8
|
||||
| boilhyston | hysteresis on temperature | int8 (>=-20<=0) | C | true | DEVICE_DATA | 265 | 1 | 1 |
|
||||
int8
|
||||
@@ -2397,7 +2397,7 @@ uint8
|
||||
uint8
|
||||
| burnminperiod | burner min period | uint8 (>=0<=120) | minutes | true | DEVICE_DATA | 262 | 1 | 1 |
|
||||
| absburnpow | burner current power (absolute) | uint8 | % | false | DEVICE_DATA | 263 | 1 | 1 |
|
||||
| heatblock | heating block | uint16 | C | false | DEVICE_DATA | 264 | 1 | 1/10 |
|
||||
| heatblock | Heatblock temperature | uint16 | C | false | DEVICE_DATA | 264 | 1 | 1/10 |
|
||||
int8
|
||||
| boilhyston | hysteresis on temperature | int8 (>=-20<=0) | C | true | DEVICE_DATA | 265 | 1 | 1 |
|
||||
int8
|
||||
@@ -2557,7 +2557,7 @@ uint8
|
||||
uint8
|
||||
| burnminperiod | burner min period | uint8 (>=0<=120) | minutes | true | DEVICE_DATA | 262 | 1 | 1 |
|
||||
| absburnpow | burner current power (absolute) | uint8 | % | false | DEVICE_DATA | 263 | 1 | 1 |
|
||||
| heatblock | heating block | uint16 | C | false | DEVICE_DATA | 264 | 1 | 1/10 |
|
||||
| heatblock | Heatblock temperature | uint16 | C | false | DEVICE_DATA | 264 | 1 | 1/10 |
|
||||
int8
|
||||
| boilhyston | hysteresis on temperature | int8 (>=-20<=0) | C | true | DEVICE_DATA | 265 | 1 | 1 |
|
||||
int8
|
||||
@@ -2717,7 +2717,7 @@ uint8
|
||||
uint8
|
||||
| burnminperiod | burner min period | uint8 (>=0<=120) | minutes | true | DEVICE_DATA | 262 | 1 | 1 |
|
||||
| absburnpow | burner current power (absolute) | uint8 | % | false | DEVICE_DATA | 263 | 1 | 1 |
|
||||
| heatblock | heating block | uint16 | C | false | DEVICE_DATA | 264 | 1 | 1/10 |
|
||||
| heatblock | Heatblock temperature | uint16 | C | false | DEVICE_DATA | 264 | 1 | 1/10 |
|
||||
int8
|
||||
| boilhyston | hysteresis on temperature | int8 (>=-20<=0) | C | true | DEVICE_DATA | 265 | 1 | 1 |
|
||||
int8
|
||||
@@ -2877,7 +2877,7 @@ uint8
|
||||
uint8
|
||||
| burnminperiod | burner min period | uint8 (>=0<=120) | minutes | true | DEVICE_DATA | 262 | 1 | 1 |
|
||||
| absburnpow | burner current power (absolute) | uint8 | % | false | DEVICE_DATA | 263 | 1 | 1 |
|
||||
| heatblock | heating block | uint16 | C | false | DEVICE_DATA | 264 | 1 | 1/10 |
|
||||
| heatblock | Heatblock temperature | uint16 | C | false | DEVICE_DATA | 264 | 1 | 1/10 |
|
||||
int8
|
||||
| boilhyston | hysteresis on temperature | int8 (>=-20<=0) | C | true | DEVICE_DATA | 265 | 1 | 1 |
|
||||
int8
|
||||
@@ -3037,7 +3037,7 @@ uint8
|
||||
uint8
|
||||
| burnminperiod | burner min period | uint8 (>=0<=120) | minutes | true | DEVICE_DATA | 262 | 1 | 1 |
|
||||
| absburnpow | burner current power (absolute) | uint8 | % | false | DEVICE_DATA | 263 | 1 | 1 |
|
||||
| heatblock | heating block | uint16 | C | false | DEVICE_DATA | 264 | 1 | 1/10 |
|
||||
| heatblock | Heatblock temperature | uint16 | C | false | DEVICE_DATA | 264 | 1 | 1/10 |
|
||||
int8
|
||||
| boilhyston | hysteresis on temperature | int8 (>=-20<=0) | C | true | DEVICE_DATA | 265 | 1 | 1 |
|
||||
int8
|
||||
@@ -3197,7 +3197,7 @@ uint8
|
||||
uint8
|
||||
| burnminperiod | burner min period | uint8 (>=0<=120) | minutes | true | DEVICE_DATA | 262 | 1 | 1 |
|
||||
| absburnpow | burner current power (absolute) | uint8 | % | false | DEVICE_DATA | 263 | 1 | 1 |
|
||||
| heatblock | heating block | uint16 | C | false | DEVICE_DATA | 264 | 1 | 1/10 |
|
||||
| heatblock | Heatblock temperature | uint16 | C | false | DEVICE_DATA | 264 | 1 | 1/10 |
|
||||
int8
|
||||
| boilhyston | hysteresis on temperature | int8 (>=-20<=0) | C | true | DEVICE_DATA | 265 | 1 | 1 |
|
||||
int8
|
||||
@@ -3357,7 +3357,7 @@ uint8
|
||||
uint8
|
||||
| burnminperiod | burner min period | uint8 (>=0<=120) | minutes | true | DEVICE_DATA | 262 | 1 | 1 |
|
||||
| absburnpow | burner current power (absolute) | uint8 | % | false | DEVICE_DATA | 263 | 1 | 1 |
|
||||
| heatblock | heating block | uint16 | C | false | DEVICE_DATA | 264 | 1 | 1/10 |
|
||||
| heatblock | Heatblock temperature | uint16 | C | false | DEVICE_DATA | 264 | 1 | 1/10 |
|
||||
int8
|
||||
| boilhyston | hysteresis on temperature | int8 (>=-20<=0) | C | true | DEVICE_DATA | 265 | 1 | 1 |
|
||||
int8
|
||||
@@ -4067,7 +4067,7 @@ uint8
|
||||
uint8
|
||||
| burnminperiod | burner min period | uint8 (>=0<=120) | minutes | true | DEVICE_DATA | 262 | 1 | 1 |
|
||||
| absburnpow | burner current power (absolute) | uint8 | % | false | DEVICE_DATA | 263 | 1 | 1 |
|
||||
| heatblock | heating block | uint16 | C | false | DEVICE_DATA | 264 | 1 | 1/10 |
|
||||
| heatblock | Heatblock temperature | uint16 | C | false | DEVICE_DATA | 264 | 1 | 1/10 |
|
||||
int8
|
||||
| boilhyston | hysteresis on temperature | int8 (>=-20<=0) | C | true | DEVICE_DATA | 265 | 1 | 1 |
|
||||
int8
|
||||
@@ -4227,7 +4227,7 @@ uint8
|
||||
uint8
|
||||
| burnminperiod | burner min period | uint8 (>=0<=120) | minutes | true | DEVICE_DATA | 262 | 1 | 1 |
|
||||
| absburnpow | burner current power (absolute) | uint8 | % | false | DEVICE_DATA | 263 | 1 | 1 |
|
||||
| heatblock | heating block | uint16 | C | false | DEVICE_DATA | 264 | 1 | 1/10 |
|
||||
| heatblock | Heatblock temperature | uint16 | C | false | DEVICE_DATA | 264 | 1 | 1/10 |
|
||||
int8
|
||||
| boilhyston | hysteresis on temperature | int8 (>=-20<=0) | C | true | DEVICE_DATA | 265 | 1 | 1 |
|
||||
int8
|
||||
@@ -4387,7 +4387,7 @@ uint8
|
||||
uint8
|
||||
| burnminperiod | burner min period | uint8 (>=0<=120) | minutes | true | DEVICE_DATA | 262 | 1 | 1 |
|
||||
| absburnpow | burner current power (absolute) | uint8 | % | false | DEVICE_DATA | 263 | 1 | 1 |
|
||||
| heatblock | heating block | uint16 | C | false | DEVICE_DATA | 264 | 1 | 1/10 |
|
||||
| heatblock | Heatblock temperature | uint16 | C | false | DEVICE_DATA | 264 | 1 | 1/10 |
|
||||
int8
|
||||
| boilhyston | hysteresis on temperature | int8 (>=-20<=0) | C | true | DEVICE_DATA | 265 | 1 | 1 |
|
||||
int8
|
||||
@@ -4547,7 +4547,7 @@ uint8
|
||||
uint8
|
||||
| burnminperiod | burner min period | uint8 (>=0<=120) | minutes | true | DEVICE_DATA | 262 | 1 | 1 |
|
||||
| absburnpow | burner current power (absolute) | uint8 | % | false | DEVICE_DATA | 263 | 1 | 1 |
|
||||
| heatblock | heating block | uint16 | C | false | DEVICE_DATA | 264 | 1 | 1/10 |
|
||||
| heatblock | Heatblock temperature | uint16 | C | false | DEVICE_DATA | 264 | 1 | 1/10 |
|
||||
int8
|
||||
| boilhyston | hysteresis on temperature | int8 (>=-20<=0) | C | true | DEVICE_DATA | 265 | 1 | 1 |
|
||||
int8
|
||||
@@ -4707,7 +4707,7 @@ uint8
|
||||
uint8
|
||||
| burnminperiod | burner min period | uint8 (>=0<=120) | minutes | true | DEVICE_DATA | 262 | 1 | 1 |
|
||||
| absburnpow | burner current power (absolute) | uint8 | % | false | DEVICE_DATA | 263 | 1 | 1 |
|
||||
| heatblock | heating block | uint16 | C | false | DEVICE_DATA | 264 | 1 | 1/10 |
|
||||
| heatblock | Heatblock temperature | uint16 | C | false | DEVICE_DATA | 264 | 1 | 1/10 |
|
||||
int8
|
||||
| boilhyston | hysteresis on temperature | int8 (>=-20<=0) | C | true | DEVICE_DATA | 265 | 1 | 1 |
|
||||
int8
|
||||
@@ -4867,7 +4867,7 @@ uint8
|
||||
uint8
|
||||
| burnminperiod | burner min period | uint8 (>=0<=120) | minutes | true | DEVICE_DATA | 262 | 1 | 1 |
|
||||
| absburnpow | burner current power (absolute) | uint8 | % | false | DEVICE_DATA | 263 | 1 | 1 |
|
||||
| heatblock | heating block | uint16 | C | false | DEVICE_DATA | 264 | 1 | 1/10 |
|
||||
| heatblock | Heatblock temperature | uint16 | C | false | DEVICE_DATA | 264 | 1 | 1/10 |
|
||||
int8
|
||||
| boilhyston | hysteresis on temperature | int8 (>=-20<=0) | C | true | DEVICE_DATA | 265 | 1 | 1 |
|
||||
int8
|
||||
@@ -5155,7 +5155,7 @@ uint8
|
||||
uint8
|
||||
| burnminperiod | burner min period | uint8 (>=0<=120) | minutes | true | DEVICE_DATA | 262 | 1 | 1 |
|
||||
| absburnpow | burner current power (absolute) | uint8 | % | false | DEVICE_DATA | 263 | 1 | 1 |
|
||||
| heatblock | heating block | uint16 | C | false | DEVICE_DATA | 264 | 1 | 1/10 |
|
||||
| heatblock | Heatblock temperature | uint16 | C | false | DEVICE_DATA | 264 | 1 | 1/10 |
|
||||
int8
|
||||
| boilhyston | hysteresis on temperature | int8 (>=-20<=0) | C | true | DEVICE_DATA | 265 | 1 | 1 |
|
||||
int8
|
||||
|
||||
+27
-27
@@ -242,7 +242,7 @@ device name,device type,product id,shortname,fullname,type [options...] \| (min/
|
||||
"Greenstar 2000",boiler,11,burnmaxpower,burner max power,uint8 (>=0<=254),%,true,number.boiler_burner_max_power,number.boiler_burnmaxpower,6,0,1,261,1
|
||||
"Greenstar 2000",boiler,11,burnminperiod,burner min period,uint8 (>=0<=120),minutes,true,number.boiler_burner_min_period,number.boiler_burnminperiod,6,0,1,262,1
|
||||
"Greenstar 2000",boiler,11,absburnpow,burner current power (absolute),uint8,%,false,sensor.boiler_burner_current_power_(absolute),sensor.boiler_absburnpow,6,0,1,263,1
|
||||
"Greenstar 2000",boiler,11,heatblock,heating block,uint16,C,false,sensor.boiler_heating_block,sensor.boiler_heatblock,6,0,1/10,264,1
|
||||
"Greenstar 2000",boiler,11,heatblock,Heatblock temperature,uint16,C,false,sensor.boiler_Heatblock_temperature,sensor.boiler_heatblock,6,0,1/10,264,1
|
||||
"Greenstar 2000",boiler,11,boilhyston,hysteresis on temperature,int8 (>=-20<=0),C,true,number.boiler_hysteresis_on_temperature,number.boiler_boilhyston,6,0,1,265,1
|
||||
"Greenstar 2000",boiler,11,boilhystoff,hysteresis off temperature,int8 (>=0<=20),C,true,number.boiler_hysteresis_off_temperature,number.boiler_boilhystoff,6,0,1,266,1
|
||||
"Greenstar 2000",boiler,11,boil2hyston,hysteresis stage 2 on temperature,int8 (>=-20<=0),C,true,number.boiler_hysteresis_stage_2_on_temperature,number.boiler_boil2hyston,6,0,1,267,1
|
||||
@@ -362,7 +362,7 @@ device name,device type,product id,shortname,fullname,type [options...] \| (min/
|
||||
"C1200W",boiler,12,burnmaxpower,burner max power,uint8 (>=0<=254),%,true,number.boiler_burner_max_power,number.boiler_burnmaxpower,6,0,1,261,1
|
||||
"C1200W",boiler,12,burnminperiod,burner min period,uint8 (>=0<=120),minutes,true,number.boiler_burner_min_period,number.boiler_burnminperiod,6,0,1,262,1
|
||||
"C1200W",boiler,12,absburnpow,burner current power (absolute),uint8,%,false,sensor.boiler_burner_current_power_(absolute),sensor.boiler_absburnpow,6,0,1,263,1
|
||||
"C1200W",boiler,12,heatblock,heating block,uint16,C,false,sensor.boiler_heating_block,sensor.boiler_heatblock,6,0,1/10,264,1
|
||||
"C1200W",boiler,12,heatblock,Heatblock temperature,uint16,C,false,sensor.boiler_Heatblock_temperature,sensor.boiler_heatblock,6,0,1/10,264,1
|
||||
"C1200W",boiler,12,boilhyston,hysteresis on temperature,int8 (>=-20<=0),C,true,number.boiler_hysteresis_on_temperature,number.boiler_boilhyston,6,0,1,265,1
|
||||
"C1200W",boiler,12,boilhystoff,hysteresis off temperature,int8 (>=0<=20),C,true,number.boiler_hysteresis_off_temperature,number.boiler_boilhystoff,6,0,1,266,1
|
||||
"C1200W",boiler,12,boil2hyston,hysteresis stage 2 on temperature,int8 (>=-20<=0),C,true,number.boiler_hysteresis_stage_2_on_temperature,number.boiler_boil2hyston,6,0,1,267,1
|
||||
@@ -482,7 +482,7 @@ device name,device type,product id,shortname,fullname,type [options...] \| (min/
|
||||
"CS5800iG",boiler,16,burnmaxpower,burner max power,uint8 (>=0<=254),%,true,number.boiler_burner_max_power,number.boiler_burnmaxpower,6,0,1,261,1
|
||||
"CS5800iG",boiler,16,burnminperiod,burner min period,uint8 (>=0<=120),minutes,true,number.boiler_burner_min_period,number.boiler_burnminperiod,6,0,1,262,1
|
||||
"CS5800iG",boiler,16,absburnpow,burner current power (absolute),uint8,%,false,sensor.boiler_burner_current_power_(absolute),sensor.boiler_absburnpow,6,0,1,263,1
|
||||
"CS5800iG",boiler,16,heatblock,heating block,uint16,C,false,sensor.boiler_heating_block,sensor.boiler_heatblock,6,0,1/10,264,1
|
||||
"CS5800iG",boiler,16,heatblock,Heatblock temperature,uint16,C,false,sensor.boiler_Heatblock_temperature,sensor.boiler_heatblock,6,0,1/10,264,1
|
||||
"CS5800iG",boiler,16,boilhyston,hysteresis on temperature,int8 (>=-20<=0),C,true,number.boiler_hysteresis_on_temperature,number.boiler_boilhyston,6,0,1,265,1
|
||||
"CS5800iG",boiler,16,boilhystoff,hysteresis off temperature,int8 (>=0<=20),C,true,number.boiler_hysteresis_off_temperature,number.boiler_boilhystoff,6,0,1,266,1
|
||||
"CS5800iG",boiler,16,boil2hyston,hysteresis stage 2 on temperature,int8 (>=-20<=0),C,true,number.boiler_hysteresis_stage_2_on_temperature,number.boiler_boil2hyston,6,0,1,267,1
|
||||
@@ -602,7 +602,7 @@ device name,device type,product id,shortname,fullname,type [options...] \| (min/
|
||||
"BK13/BK15, Smartline, GB1*2",boiler,64,burnmaxpower,burner max power,uint8 (>=0<=254),%,true,number.boiler_burner_max_power,number.boiler_burnmaxpower,6,0,1,261,1
|
||||
"BK13/BK15, Smartline, GB1*2",boiler,64,burnminperiod,burner min period,uint8 (>=0<=120),minutes,true,number.boiler_burner_min_period,number.boiler_burnminperiod,6,0,1,262,1
|
||||
"BK13/BK15, Smartline, GB1*2",boiler,64,absburnpow,burner current power (absolute),uint8,%,false,sensor.boiler_burner_current_power_(absolute),sensor.boiler_absburnpow,6,0,1,263,1
|
||||
"BK13/BK15, Smartline, GB1*2",boiler,64,heatblock,heating block,uint16,C,false,sensor.boiler_heating_block,sensor.boiler_heatblock,6,0,1/10,264,1
|
||||
"BK13/BK15, Smartline, GB1*2",boiler,64,heatblock,Heatblock temperature,uint16,C,false,sensor.boiler_Heatblock_temperature,sensor.boiler_heatblock,6,0,1/10,264,1
|
||||
"BK13/BK15, Smartline, GB1*2",boiler,64,boilhyston,hysteresis on temperature,int8 (>=-20<=0),C,true,number.boiler_hysteresis_on_temperature,number.boiler_boilhyston,6,0,1,265,1
|
||||
"BK13/BK15, Smartline, GB1*2",boiler,64,boilhystoff,hysteresis off temperature,int8 (>=0<=20),C,true,number.boiler_hysteresis_off_temperature,number.boiler_boilhystoff,6,0,1,266,1
|
||||
"BK13/BK15, Smartline, GB1*2",boiler,64,boil2hyston,hysteresis stage 2 on temperature,int8 (>=-20<=0),C,true,number.boiler_hysteresis_stage_2_on_temperature,number.boiler_boil2hyston,6,0,1,267,1
|
||||
@@ -722,7 +722,7 @@ device name,device type,product id,shortname,fullname,type [options...] \| (min/
|
||||
"Logano GB1*5, Logamatic MC10",boiler,72,burnmaxpower,burner max power,uint8 (>=0<=254),%,true,number.boiler_burner_max_power,number.boiler_burnmaxpower,6,0,1,261,1
|
||||
"Logano GB1*5, Logamatic MC10",boiler,72,burnminperiod,burner min period,uint8 (>=0<=120),minutes,true,number.boiler_burner_min_period,number.boiler_burnminperiod,6,0,1,262,1
|
||||
"Logano GB1*5, Logamatic MC10",boiler,72,absburnpow,burner current power (absolute),uint8,%,false,sensor.boiler_burner_current_power_(absolute),sensor.boiler_absburnpow,6,0,1,263,1
|
||||
"Logano GB1*5, Logamatic MC10",boiler,72,heatblock,heating block,uint16,C,false,sensor.boiler_heating_block,sensor.boiler_heatblock,6,0,1/10,264,1
|
||||
"Logano GB1*5, Logamatic MC10",boiler,72,heatblock,Heatblock temperature,uint16,C,false,sensor.boiler_Heatblock_temperature,sensor.boiler_heatblock,6,0,1/10,264,1
|
||||
"Logano GB1*5, Logamatic MC10",boiler,72,boilhyston,hysteresis on temperature,int8 (>=-20<=0),C,true,number.boiler_hysteresis_on_temperature,number.boiler_boilhyston,6,0,1,265,1
|
||||
"Logano GB1*5, Logamatic MC10",boiler,72,boilhystoff,hysteresis off temperature,int8 (>=0<=20),C,true,number.boiler_hysteresis_off_temperature,number.boiler_boilhystoff,6,0,1,266,1
|
||||
"Logano GB1*5, Logamatic MC10",boiler,72,boil2hyston,hysteresis stage 2 on temperature,int8 (>=-20<=0),C,true,number.boiler_hysteresis_stage_2_on_temperature,number.boiler_boil2hyston,6,0,1,267,1
|
||||
@@ -842,7 +842,7 @@ device name,device type,product id,shortname,fullname,type [options...] \| (min/
|
||||
"Cascade CM10",boiler,81,burnmaxpower,burner max power,uint8 (>=0<=254),%,true,number.boiler_burner_max_power,number.boiler_burnmaxpower,6,0,1,261,1
|
||||
"Cascade CM10",boiler,81,burnminperiod,burner min period,uint8 (>=0<=120),minutes,true,number.boiler_burner_min_period,number.boiler_burnminperiod,6,0,1,262,1
|
||||
"Cascade CM10",boiler,81,absburnpow,burner current power (absolute),uint8,%,false,sensor.boiler_burner_current_power_(absolute),sensor.boiler_absburnpow,6,0,1,263,1
|
||||
"Cascade CM10",boiler,81,heatblock,heating block,uint16,C,false,sensor.boiler_heating_block,sensor.boiler_heatblock,6,0,1/10,264,1
|
||||
"Cascade CM10",boiler,81,heatblock,Heatblock temperature,uint16,C,false,sensor.boiler_Heatblock_temperature,sensor.boiler_heatblock,6,0,1/10,264,1
|
||||
"Cascade CM10",boiler,81,boilhyston,hysteresis on temperature,int8 (>=-20<=0),C,true,number.boiler_hysteresis_on_temperature,number.boiler_boilhyston,6,0,1,265,1
|
||||
"Cascade CM10",boiler,81,boilhystoff,hysteresis off temperature,int8 (>=0<=20),C,true,number.boiler_hysteresis_off_temperature,number.boiler_boilhystoff,6,0,1,266,1
|
||||
"Cascade CM10",boiler,81,boil2hyston,hysteresis stage 2 on temperature,int8 (>=-20<=0),C,true,number.boiler_hysteresis_stage_2_on_temperature,number.boiler_boil2hyston,6,0,1,267,1
|
||||
@@ -962,7 +962,7 @@ device name,device type,product id,shortname,fullname,type [options...] \| (min/
|
||||
"Logamax Plus GB022",boiler,84,burnmaxpower,burner max power,uint8 (>=0<=254),%,true,number.boiler_burner_max_power,number.boiler_burnmaxpower,6,0,1,261,1
|
||||
"Logamax Plus GB022",boiler,84,burnminperiod,burner min period,uint8 (>=0<=120),minutes,true,number.boiler_burner_min_period,number.boiler_burnminperiod,6,0,1,262,1
|
||||
"Logamax Plus GB022",boiler,84,absburnpow,burner current power (absolute),uint8,%,false,sensor.boiler_burner_current_power_(absolute),sensor.boiler_absburnpow,6,0,1,263,1
|
||||
"Logamax Plus GB022",boiler,84,heatblock,heating block,uint16,C,false,sensor.boiler_heating_block,sensor.boiler_heatblock,6,0,1/10,264,1
|
||||
"Logamax Plus GB022",boiler,84,heatblock,Heatblock temperature,uint16,C,false,sensor.boiler_Heatblock_temperature,sensor.boiler_heatblock,6,0,1/10,264,1
|
||||
"Logamax Plus GB022",boiler,84,boilhyston,hysteresis on temperature,int8 (>=-20<=0),C,true,number.boiler_hysteresis_on_temperature,number.boiler_boilhyston,6,0,1,265,1
|
||||
"Logamax Plus GB022",boiler,84,boilhystoff,hysteresis off temperature,int8 (>=0<=20),C,true,number.boiler_hysteresis_off_temperature,number.boiler_boilhystoff,6,0,1,266,1
|
||||
"Logamax Plus GB022",boiler,84,boil2hyston,hysteresis stage 2 on temperature,int8 (>=-20<=0),C,true,number.boiler_hysteresis_stage_2_on_temperature,number.boiler_boil2hyston,6,0,1,267,1
|
||||
@@ -1082,7 +1082,7 @@ device name,device type,product id,shortname,fullname,type [options...] \| (min/
|
||||
"Condens, Logamax/Logomatic, Cerapur Top, Greenstar, Generic HT3",boiler,95,burnmaxpower,burner max power,uint8 (>=0<=254),%,true,number.boiler_burner_max_power,number.boiler_burnmaxpower,6,0,1,261,1
|
||||
"Condens, Logamax/Logomatic, Cerapur Top, Greenstar, Generic HT3",boiler,95,burnminperiod,burner min period,uint8 (>=0<=120),minutes,true,number.boiler_burner_min_period,number.boiler_burnminperiod,6,0,1,262,1
|
||||
"Condens, Logamax/Logomatic, Cerapur Top, Greenstar, Generic HT3",boiler,95,absburnpow,burner current power (absolute),uint8,%,false,sensor.boiler_burner_current_power_(absolute),sensor.boiler_absburnpow,6,0,1,263,1
|
||||
"Condens, Logamax/Logomatic, Cerapur Top, Greenstar, Generic HT3",boiler,95,heatblock,heating block,uint16,C,false,sensor.boiler_heating_block,sensor.boiler_heatblock,6,0,1/10,264,1
|
||||
"Condens, Logamax/Logomatic, Cerapur Top, Greenstar, Generic HT3",boiler,95,heatblock,Heatblock temperature,uint16,C,false,sensor.boiler_Heatblock_temperature,sensor.boiler_heatblock,6,0,1/10,264,1
|
||||
"Condens, Logamax/Logomatic, Cerapur Top, Greenstar, Generic HT3",boiler,95,boilhyston,hysteresis on temperature,int8 (>=-20<=0),C,true,number.boiler_hysteresis_on_temperature,number.boiler_boilhyston,6,0,1,265,1
|
||||
"Condens, Logamax/Logomatic, Cerapur Top, Greenstar, Generic HT3",boiler,95,boilhystoff,hysteresis off temperature,int8 (>=0<=20),C,true,number.boiler_hysteresis_off_temperature,number.boiler_boilhystoff,6,0,1,266,1
|
||||
"Condens, Logamax/Logomatic, Cerapur Top, Greenstar, Generic HT3",boiler,95,boil2hyston,hysteresis stage 2 on temperature,int8 (>=-20<=0),C,true,number.boiler_hysteresis_stage_2_on_temperature,number.boiler_boil2hyston,6,0,1,267,1
|
||||
@@ -1202,7 +1202,7 @@ device name,device type,product id,shortname,fullname,type [options...] \| (min/
|
||||
"Topline, GB162",boiler,115,burnmaxpower,burner max power,uint8 (>=0<=254),%,true,number.boiler_burner_max_power,number.boiler_burnmaxpower,6,0,1,261,1
|
||||
"Topline, GB162",boiler,115,burnminperiod,burner min period,uint8 (>=0<=120),minutes,true,number.boiler_burner_min_period,number.boiler_burnminperiod,6,0,1,262,1
|
||||
"Topline, GB162",boiler,115,absburnpow,burner current power (absolute),uint8,%,false,sensor.boiler_burner_current_power_(absolute),sensor.boiler_absburnpow,6,0,1,263,1
|
||||
"Topline, GB162",boiler,115,heatblock,heating block,uint16,C,false,sensor.boiler_heating_block,sensor.boiler_heatblock,6,0,1/10,264,1
|
||||
"Topline, GB162",boiler,115,heatblock,Heatblock temperature,uint16,C,false,sensor.boiler_Heatblock_temperature,sensor.boiler_heatblock,6,0,1/10,264,1
|
||||
"Topline, GB162",boiler,115,boilhyston,hysteresis on temperature,int8 (>=-20<=0),C,true,number.boiler_hysteresis_on_temperature,number.boiler_boilhyston,6,0,1,265,1
|
||||
"Topline, GB162",boiler,115,boilhystoff,hysteresis off temperature,int8 (>=0<=20),C,true,number.boiler_hysteresis_off_temperature,number.boiler_boilhystoff,6,0,1,266,1
|
||||
"Topline, GB162",boiler,115,boil2hyston,hysteresis stage 2 on temperature,int8 (>=-20<=0),C,true,number.boiler_hysteresis_stage_2_on_temperature,number.boiler_boil2hyston,6,0,1,267,1
|
||||
@@ -1322,7 +1322,7 @@ device name,device type,product id,shortname,fullname,type [options...] \| (min/
|
||||
"Cascade MCM10",boiler,121,burnmaxpower,burner max power,uint8 (>=0<=254),%,true,number.boiler_burner_max_power,number.boiler_burnmaxpower,6,0,1,261,1
|
||||
"Cascade MCM10",boiler,121,burnminperiod,burner min period,uint8 (>=0<=120),minutes,true,number.boiler_burner_min_period,number.boiler_burnminperiod,6,0,1,262,1
|
||||
"Cascade MCM10",boiler,121,absburnpow,burner current power (absolute),uint8,%,false,sensor.boiler_burner_current_power_(absolute),sensor.boiler_absburnpow,6,0,1,263,1
|
||||
"Cascade MCM10",boiler,121,heatblock,heating block,uint16,C,false,sensor.boiler_heating_block,sensor.boiler_heatblock,6,0,1/10,264,1
|
||||
"Cascade MCM10",boiler,121,heatblock,Heatblock temperature,uint16,C,false,sensor.boiler_Heatblock_temperature,sensor.boiler_heatblock,6,0,1/10,264,1
|
||||
"Cascade MCM10",boiler,121,boilhyston,hysteresis on temperature,int8 (>=-20<=0),C,true,number.boiler_hysteresis_on_temperature,number.boiler_boilhyston,6,0,1,265,1
|
||||
"Cascade MCM10",boiler,121,boilhystoff,hysteresis off temperature,int8 (>=0<=20),C,true,number.boiler_hysteresis_off_temperature,number.boiler_boilhystoff,6,0,1,266,1
|
||||
"Cascade MCM10",boiler,121,boil2hyston,hysteresis stage 2 on temperature,int8 (>=-20<=0),C,true,number.boiler_hysteresis_stage_2_on_temperature,number.boiler_boil2hyston,6,0,1,267,1
|
||||
@@ -1442,7 +1442,7 @@ device name,device type,product id,shortname,fullname,type [options...] \| (min/
|
||||
"Proline",boiler,122,burnmaxpower,burner max power,uint8 (>=0<=254),%,true,number.boiler_burner_max_power,number.boiler_burnmaxpower,6,0,1,261,1
|
||||
"Proline",boiler,122,burnminperiod,burner min period,uint8 (>=0<=120),minutes,true,number.boiler_burner_min_period,number.boiler_burnminperiod,6,0,1,262,1
|
||||
"Proline",boiler,122,absburnpow,burner current power (absolute),uint8,%,false,sensor.boiler_burner_current_power_(absolute),sensor.boiler_absburnpow,6,0,1,263,1
|
||||
"Proline",boiler,122,heatblock,heating block,uint16,C,false,sensor.boiler_heating_block,sensor.boiler_heatblock,6,0,1/10,264,1
|
||||
"Proline",boiler,122,heatblock,Heatblock temperature,uint16,C,false,sensor.boiler_Heatblock_temperature,sensor.boiler_heatblock,6,0,1/10,264,1
|
||||
"Proline",boiler,122,boilhyston,hysteresis on temperature,int8 (>=-20<=0),C,true,number.boiler_hysteresis_on_temperature,number.boiler_boilhyston,6,0,1,265,1
|
||||
"Proline",boiler,122,boilhystoff,hysteresis off temperature,int8 (>=0<=20),C,true,number.boiler_hysteresis_off_temperature,number.boiler_boilhystoff,6,0,1,266,1
|
||||
"Proline",boiler,122,boil2hyston,hysteresis stage 2 on temperature,int8 (>=-20<=0),C,true,number.boiler_hysteresis_stage_2_on_temperature,number.boiler_boil2hyston,6,0,1,267,1
|
||||
@@ -1562,7 +1562,7 @@ device name,device type,product id,shortname,fullname,type [options...] \| (min/
|
||||
"GB*72, Trendline, Cerapur, Greenstar Si",boiler,123,burnmaxpower,burner max power,uint8 (>=0<=254),%,true,number.boiler_burner_max_power,number.boiler_burnmaxpower,6,0,1,261,1
|
||||
"GB*72, Trendline, Cerapur, Greenstar Si",boiler,123,burnminperiod,burner min period,uint8 (>=0<=120),minutes,true,number.boiler_burner_min_period,number.boiler_burnminperiod,6,0,1,262,1
|
||||
"GB*72, Trendline, Cerapur, Greenstar Si",boiler,123,absburnpow,burner current power (absolute),uint8,%,false,sensor.boiler_burner_current_power_(absolute),sensor.boiler_absburnpow,6,0,1,263,1
|
||||
"GB*72, Trendline, Cerapur, Greenstar Si",boiler,123,heatblock,heating block,uint16,C,false,sensor.boiler_heating_block,sensor.boiler_heatblock,6,0,1/10,264,1
|
||||
"GB*72, Trendline, Cerapur, Greenstar Si",boiler,123,heatblock,Heatblock temperature,uint16,C,false,sensor.boiler_Heatblock_temperature,sensor.boiler_heatblock,6,0,1/10,264,1
|
||||
"GB*72, Trendline, Cerapur, Greenstar Si",boiler,123,boilhyston,hysteresis on temperature,int8 (>=-20<=0),C,true,number.boiler_hysteresis_on_temperature,number.boiler_boilhyston,6,0,1,265,1
|
||||
"GB*72, Trendline, Cerapur, Greenstar Si",boiler,123,boilhystoff,hysteresis off temperature,int8 (>=0<=20),C,true,number.boiler_hysteresis_off_temperature,number.boiler_boilhystoff,6,0,1,266,1
|
||||
"GB*72, Trendline, Cerapur, Greenstar Si",boiler,123,boil2hyston,hysteresis stage 2 on temperature,int8 (>=-20<=0),C,true,number.boiler_hysteresis_stage_2_on_temperature,number.boiler_boil2hyston,6,0,1,267,1
|
||||
@@ -1682,7 +1682,7 @@ device name,device type,product id,shortname,fullname,type [options...] \| (min/
|
||||
"GB212",boiler,131,burnmaxpower,burner max power,uint8 (>=0<=254),%,true,number.boiler_burner_max_power,number.boiler_burnmaxpower,6,0,1,261,1
|
||||
"GB212",boiler,131,burnminperiod,burner min period,uint8 (>=0<=120),minutes,true,number.boiler_burner_min_period,number.boiler_burnminperiod,6,0,1,262,1
|
||||
"GB212",boiler,131,absburnpow,burner current power (absolute),uint8,%,false,sensor.boiler_burner_current_power_(absolute),sensor.boiler_absburnpow,6,0,1,263,1
|
||||
"GB212",boiler,131,heatblock,heating block,uint16,C,false,sensor.boiler_heating_block,sensor.boiler_heatblock,6,0,1/10,264,1
|
||||
"GB212",boiler,131,heatblock,Heatblock temperature,uint16,C,false,sensor.boiler_Heatblock_temperature,sensor.boiler_heatblock,6,0,1/10,264,1
|
||||
"GB212",boiler,131,boilhyston,hysteresis on temperature,int8 (>=-20<=0),C,true,number.boiler_hysteresis_on_temperature,number.boiler_boilhyston,6,0,1,265,1
|
||||
"GB212",boiler,131,boilhystoff,hysteresis off temperature,int8 (>=0<=20),C,true,number.boiler_hysteresis_off_temperature,number.boiler_boilhystoff,6,0,1,266,1
|
||||
"GB212",boiler,131,boil2hyston,hysteresis stage 2 on temperature,int8 (>=-20<=0),C,true,number.boiler_hysteresis_stage_2_on_temperature,number.boiler_boil2hyston,6,0,1,267,1
|
||||
@@ -1802,7 +1802,7 @@ device name,device type,product id,shortname,fullname,type [options...] \| (min/
|
||||
"GC7000F",boiler,132,burnmaxpower,burner max power,uint8 (>=0<=254),%,true,number.boiler_burner_max_power,number.boiler_burnmaxpower,6,0,1,261,1
|
||||
"GC7000F",boiler,132,burnminperiod,burner min period,uint8 (>=0<=120),minutes,true,number.boiler_burner_min_period,number.boiler_burnminperiod,6,0,1,262,1
|
||||
"GC7000F",boiler,132,absburnpow,burner current power (absolute),uint8,%,false,sensor.boiler_burner_current_power_(absolute),sensor.boiler_absburnpow,6,0,1,263,1
|
||||
"GC7000F",boiler,132,heatblock,heating block,uint16,C,false,sensor.boiler_heating_block,sensor.boiler_heatblock,6,0,1/10,264,1
|
||||
"GC7000F",boiler,132,heatblock,Heatblock temperature,uint16,C,false,sensor.boiler_Heatblock_temperature,sensor.boiler_heatblock,6,0,1/10,264,1
|
||||
"GC7000F",boiler,132,boilhyston,hysteresis on temperature,int8 (>=-20<=0),C,true,number.boiler_hysteresis_on_temperature,number.boiler_boilhyston,6,0,1,265,1
|
||||
"GC7000F",boiler,132,boilhystoff,hysteresis off temperature,int8 (>=0<=20),C,true,number.boiler_hysteresis_off_temperature,number.boiler_boilhystoff,6,0,1,266,1
|
||||
"GC7000F",boiler,132,boil2hyston,hysteresis stage 2 on temperature,int8 (>=-20<=0),C,true,number.boiler_hysteresis_stage_2_on_temperature,number.boiler_boil2hyston,6,0,1,267,1
|
||||
@@ -1922,7 +1922,7 @@ device name,device type,product id,shortname,fullname,type [options...] \| (min/
|
||||
"Logano GB125/KB195i, Logamatic MC110",boiler,133,burnmaxpower,burner max power,uint8 (>=0<=254),%,true,number.boiler_burner_max_power,number.boiler_burnmaxpower,6,0,1,261,1
|
||||
"Logano GB125/KB195i, Logamatic MC110",boiler,133,burnminperiod,burner min period,uint8 (>=0<=120),minutes,true,number.boiler_burner_min_period,number.boiler_burnminperiod,6,0,1,262,1
|
||||
"Logano GB125/KB195i, Logamatic MC110",boiler,133,absburnpow,burner current power (absolute),uint8,%,false,sensor.boiler_burner_current_power_(absolute),sensor.boiler_absburnpow,6,0,1,263,1
|
||||
"Logano GB125/KB195i, Logamatic MC110",boiler,133,heatblock,heating block,uint16,C,false,sensor.boiler_heating_block,sensor.boiler_heatblock,6,0,1/10,264,1
|
||||
"Logano GB125/KB195i, Logamatic MC110",boiler,133,heatblock,Heatblock temperature,uint16,C,false,sensor.boiler_Heatblock_temperature,sensor.boiler_heatblock,6,0,1/10,264,1
|
||||
"Logano GB125/KB195i, Logamatic MC110",boiler,133,boilhyston,hysteresis on temperature,int8 (>=-20<=0),C,true,number.boiler_hysteresis_on_temperature,number.boiler_boilhyston,6,0,1,265,1
|
||||
"Logano GB125/KB195i, Logamatic MC110",boiler,133,boilhystoff,hysteresis off temperature,int8 (>=0<=20),C,true,number.boiler_hysteresis_off_temperature,number.boiler_boilhystoff,6,0,1,266,1
|
||||
"Logano GB125/KB195i, Logamatic MC110",boiler,133,boil2hyston,hysteresis stage 2 on temperature,int8 (>=-20<=0),C,true,number.boiler_hysteresis_stage_2_on_temperature,number.boiler_boil2hyston,6,0,1,267,1
|
||||
@@ -2042,7 +2042,7 @@ device name,device type,product id,shortname,fullname,type [options...] \| (min/
|
||||
"Greenstar 30Ri Compact",boiler,154,burnmaxpower,burner max power,uint8 (>=0<=254),%,true,number.boiler_burner_max_power,number.boiler_burnmaxpower,6,0,1,261,1
|
||||
"Greenstar 30Ri Compact",boiler,154,burnminperiod,burner min period,uint8 (>=0<=120),minutes,true,number.boiler_burner_min_period,number.boiler_burnminperiod,6,0,1,262,1
|
||||
"Greenstar 30Ri Compact",boiler,154,absburnpow,burner current power (absolute),uint8,%,false,sensor.boiler_burner_current_power_(absolute),sensor.boiler_absburnpow,6,0,1,263,1
|
||||
"Greenstar 30Ri Compact",boiler,154,heatblock,heating block,uint16,C,false,sensor.boiler_heating_block,sensor.boiler_heatblock,6,0,1/10,264,1
|
||||
"Greenstar 30Ri Compact",boiler,154,heatblock,Heatblock temperature,uint16,C,false,sensor.boiler_Heatblock_temperature,sensor.boiler_heatblock,6,0,1/10,264,1
|
||||
"Greenstar 30Ri Compact",boiler,154,boilhyston,hysteresis on temperature,int8 (>=-20<=0),C,true,number.boiler_hysteresis_on_temperature,number.boiler_boilhyston,6,0,1,265,1
|
||||
"Greenstar 30Ri Compact",boiler,154,boilhystoff,hysteresis off temperature,int8 (>=0<=20),C,true,number.boiler_hysteresis_off_temperature,number.boiler_boilhystoff,6,0,1,266,1
|
||||
"Greenstar 30Ri Compact",boiler,154,boil2hyston,hysteresis stage 2 on temperature,int8 (>=-20<=0),C,true,number.boiler_hysteresis_stage_2_on_temperature,number.boiler_boil2hyston,6,0,1,267,1
|
||||
@@ -2162,7 +2162,7 @@ device name,device type,product id,shortname,fullname,type [options...] \| (min/
|
||||
"Suprapur-o",boiler,155,burnmaxpower,burner max power,uint8 (>=0<=254),%,true,number.boiler_burner_max_power,number.boiler_burnmaxpower,6,0,1,261,1
|
||||
"Suprapur-o",boiler,155,burnminperiod,burner min period,uint8 (>=0<=120),minutes,true,number.boiler_burner_min_period,number.boiler_burnminperiod,6,0,1,262,1
|
||||
"Suprapur-o",boiler,155,absburnpow,burner current power (absolute),uint8,%,false,sensor.boiler_burner_current_power_(absolute),sensor.boiler_absburnpow,6,0,1,263,1
|
||||
"Suprapur-o",boiler,155,heatblock,heating block,uint16,C,false,sensor.boiler_heating_block,sensor.boiler_heatblock,6,0,1/10,264,1
|
||||
"Suprapur-o",boiler,155,heatblock,Heatblock temperature,uint16,C,false,sensor.boiler_Heatblock_temperature,sensor.boiler_heatblock,6,0,1/10,264,1
|
||||
"Suprapur-o",boiler,155,boilhyston,hysteresis on temperature,int8 (>=-20<=0),C,true,number.boiler_hysteresis_on_temperature,number.boiler_boilhyston,6,0,1,265,1
|
||||
"Suprapur-o",boiler,155,boilhystoff,hysteresis off temperature,int8 (>=0<=20),C,true,number.boiler_hysteresis_off_temperature,number.boiler_boilhystoff,6,0,1,266,1
|
||||
"Suprapur-o",boiler,155,boil2hyston,hysteresis stage 2 on temperature,int8 (>=-20<=0),C,true,number.boiler_hysteresis_stage_2_on_temperature,number.boiler_boil2hyston,6,0,1,267,1
|
||||
@@ -2282,7 +2282,7 @@ device name,device type,product id,shortname,fullname,type [options...] \| (min/
|
||||
"Cerapur Aero",boiler,167,burnmaxpower,burner max power,uint8 (>=0<=254),%,true,number.boiler_burner_max_power,number.boiler_burnmaxpower,6,0,1,261,1
|
||||
"Cerapur Aero",boiler,167,burnminperiod,burner min period,uint8 (>=0<=120),minutes,true,number.boiler_burner_min_period,number.boiler_burnminperiod,6,0,1,262,1
|
||||
"Cerapur Aero",boiler,167,absburnpow,burner current power (absolute),uint8,%,false,sensor.boiler_burner_current_power_(absolute),sensor.boiler_absburnpow,6,0,1,263,1
|
||||
"Cerapur Aero",boiler,167,heatblock,heating block,uint16,C,false,sensor.boiler_heating_block,sensor.boiler_heatblock,6,0,1/10,264,1
|
||||
"Cerapur Aero",boiler,167,heatblock,Heatblock temperature,uint16,C,false,sensor.boiler_Heatblock_temperature,sensor.boiler_heatblock,6,0,1/10,264,1
|
||||
"Cerapur Aero",boiler,167,boilhyston,hysteresis on temperature,int8 (>=-20<=0),C,true,number.boiler_hysteresis_on_temperature,number.boiler_boilhyston,6,0,1,265,1
|
||||
"Cerapur Aero",boiler,167,boilhystoff,hysteresis off temperature,int8 (>=0<=20),C,true,number.boiler_hysteresis_off_temperature,number.boiler_boilhystoff,6,0,1,266,1
|
||||
"Cerapur Aero",boiler,167,boil2hyston,hysteresis stage 2 on temperature,int8 (>=-20<=0),C,true,number.boiler_hysteresis_stage_2_on_temperature,number.boiler_boil2hyston,6,0,1,267,1
|
||||
@@ -2402,7 +2402,7 @@ device name,device type,product id,shortname,fullname,type [options...] \| (min/
|
||||
"Hybrid Heatpump",boiler,168,burnmaxpower,burner max power,uint8 (>=0<=254),%,true,number.boiler_burner_max_power,number.boiler_burnmaxpower,6,0,1,261,1
|
||||
"Hybrid Heatpump",boiler,168,burnminperiod,burner min period,uint8 (>=0<=120),minutes,true,number.boiler_burner_min_period,number.boiler_burnminperiod,6,0,1,262,1
|
||||
"Hybrid Heatpump",boiler,168,absburnpow,burner current power (absolute),uint8,%,false,sensor.boiler_burner_current_power_(absolute),sensor.boiler_absburnpow,6,0,1,263,1
|
||||
"Hybrid Heatpump",boiler,168,heatblock,heating block,uint16,C,false,sensor.boiler_heating_block,sensor.boiler_heatblock,6,0,1/10,264,1
|
||||
"Hybrid Heatpump",boiler,168,heatblock,Heatblock temperature,uint16,C,false,sensor.boiler_Heatblock_temperature,sensor.boiler_heatblock,6,0,1/10,264,1
|
||||
"Hybrid Heatpump",boiler,168,boilhyston,hysteresis on temperature,int8 (>=-20<=0),C,true,number.boiler_hysteresis_on_temperature,number.boiler_boilhyston,6,0,1,265,1
|
||||
"Hybrid Heatpump",boiler,168,boilhystoff,hysteresis off temperature,int8 (>=0<=20),C,true,number.boiler_hysteresis_off_temperature,number.boiler_boilhystoff,6,0,1,266,1
|
||||
"Hybrid Heatpump",boiler,168,boil2hyston,hysteresis stage 2 on temperature,int8 (>=-20<=0),C,true,number.boiler_hysteresis_stage_2_on_temperature,number.boiler_boil2hyston,6,0,1,267,1
|
||||
@@ -2522,7 +2522,7 @@ device name,device type,product id,shortname,fullname,type [options...] \| (min/
|
||||
"Logano GB212",boiler,170,burnmaxpower,burner max power,uint8 (>=0<=254),%,true,number.boiler_burner_max_power,number.boiler_burnmaxpower,6,0,1,261,1
|
||||
"Logano GB212",boiler,170,burnminperiod,burner min period,uint8 (>=0<=120),minutes,true,number.boiler_burner_min_period,number.boiler_burnminperiod,6,0,1,262,1
|
||||
"Logano GB212",boiler,170,absburnpow,burner current power (absolute),uint8,%,false,sensor.boiler_burner_current_power_(absolute),sensor.boiler_absburnpow,6,0,1,263,1
|
||||
"Logano GB212",boiler,170,heatblock,heating block,uint16,C,false,sensor.boiler_heating_block,sensor.boiler_heatblock,6,0,1/10,264,1
|
||||
"Logano GB212",boiler,170,heatblock,Heatblock temperature,uint16,C,false,sensor.boiler_Heatblock_temperature,sensor.boiler_heatblock,6,0,1/10,264,1
|
||||
"Logano GB212",boiler,170,boilhyston,hysteresis on temperature,int8 (>=-20<=0),C,true,number.boiler_hysteresis_on_temperature,number.boiler_boilhyston,6,0,1,265,1
|
||||
"Logano GB212",boiler,170,boilhystoff,hysteresis off temperature,int8 (>=0<=20),C,true,number.boiler_hysteresis_off_temperature,number.boiler_boilhystoff,6,0,1,266,1
|
||||
"Logano GB212",boiler,170,boil2hyston,hysteresis stage 2 on temperature,int8 (>=-20<=0),C,true,number.boiler_hysteresis_stage_2_on_temperature,number.boiler_boil2hyston,6,0,1,267,1
|
||||
@@ -3078,7 +3078,7 @@ device name,device type,product id,shortname,fullname,type [options...] \| (min/
|
||||
"Condens 5000i, Greenstar 8000/GC9800IW, GB192i*2",boiler,195,burnmaxpower,burner max power,uint8 (>=0<=254),%,true,number.boiler_burner_max_power,number.boiler_burnmaxpower,6,0,1,261,1
|
||||
"Condens 5000i, Greenstar 8000/GC9800IW, GB192i*2",boiler,195,burnminperiod,burner min period,uint8 (>=0<=120),minutes,true,number.boiler_burner_min_period,number.boiler_burnminperiod,6,0,1,262,1
|
||||
"Condens 5000i, Greenstar 8000/GC9800IW, GB192i*2",boiler,195,absburnpow,burner current power (absolute),uint8,%,false,sensor.boiler_burner_current_power_(absolute),sensor.boiler_absburnpow,6,0,1,263,1
|
||||
"Condens 5000i, Greenstar 8000/GC9800IW, GB192i*2",boiler,195,heatblock,heating block,uint16,C,false,sensor.boiler_heating_block,sensor.boiler_heatblock,6,0,1/10,264,1
|
||||
"Condens 5000i, Greenstar 8000/GC9800IW, GB192i*2",boiler,195,heatblock,Heatblock temperature,uint16,C,false,sensor.boiler_Heatblock_temperature,sensor.boiler_heatblock,6,0,1/10,264,1
|
||||
"Condens 5000i, Greenstar 8000/GC9800IW, GB192i*2",boiler,195,boilhyston,hysteresis on temperature,int8 (>=-20<=0),C,true,number.boiler_hysteresis_on_temperature,number.boiler_boilhyston,6,0,1,265,1
|
||||
"Condens 5000i, Greenstar 8000/GC9800IW, GB192i*2",boiler,195,boilhystoff,hysteresis off temperature,int8 (>=0<=20),C,true,number.boiler_hysteresis_off_temperature,number.boiler_boilhystoff,6,0,1,266,1
|
||||
"Condens 5000i, Greenstar 8000/GC9800IW, GB192i*2",boiler,195,boil2hyston,hysteresis stage 2 on temperature,int8 (>=-20<=0),C,true,number.boiler_hysteresis_stage_2_on_temperature,number.boiler_boil2hyston,6,0,1,267,1
|
||||
@@ -3198,7 +3198,7 @@ device name,device type,product id,shortname,fullname,type [options...] \| (min/
|
||||
"Logamax U122, Cerapur",boiler,203,burnmaxpower,burner max power,uint8 (>=0<=254),%,true,number.boiler_burner_max_power,number.boiler_burnmaxpower,6,0,1,261,1
|
||||
"Logamax U122, Cerapur",boiler,203,burnminperiod,burner min period,uint8 (>=0<=120),minutes,true,number.boiler_burner_min_period,number.boiler_burnminperiod,6,0,1,262,1
|
||||
"Logamax U122, Cerapur",boiler,203,absburnpow,burner current power (absolute),uint8,%,false,sensor.boiler_burner_current_power_(absolute),sensor.boiler_absburnpow,6,0,1,263,1
|
||||
"Logamax U122, Cerapur",boiler,203,heatblock,heating block,uint16,C,false,sensor.boiler_heating_block,sensor.boiler_heatblock,6,0,1/10,264,1
|
||||
"Logamax U122, Cerapur",boiler,203,heatblock,Heatblock temperature,uint16,C,false,sensor.boiler_Heatblock_temperature,sensor.boiler_heatblock,6,0,1/10,264,1
|
||||
"Logamax U122, Cerapur",boiler,203,boilhyston,hysteresis on temperature,int8 (>=-20<=0),C,true,number.boiler_hysteresis_on_temperature,number.boiler_boilhyston,6,0,1,265,1
|
||||
"Logamax U122, Cerapur",boiler,203,boilhystoff,hysteresis off temperature,int8 (>=0<=20),C,true,number.boiler_hysteresis_off_temperature,number.boiler_boilhystoff,6,0,1,266,1
|
||||
"Logamax U122, Cerapur",boiler,203,boil2hyston,hysteresis stage 2 on temperature,int8 (>=-20<=0),C,true,number.boiler_hysteresis_stage_2_on_temperature,number.boiler_boil2hyston,6,0,1,267,1
|
||||
@@ -3318,7 +3318,7 @@ device name,device type,product id,shortname,fullname,type [options...] \| (min/
|
||||
"Ecomline Excellent",boiler,206,burnmaxpower,burner max power,uint8 (>=0<=254),%,true,number.boiler_burner_max_power,number.boiler_burnmaxpower,6,0,1,261,1
|
||||
"Ecomline Excellent",boiler,206,burnminperiod,burner min period,uint8 (>=0<=120),minutes,true,number.boiler_burner_min_period,number.boiler_burnminperiod,6,0,1,262,1
|
||||
"Ecomline Excellent",boiler,206,absburnpow,burner current power (absolute),uint8,%,false,sensor.boiler_burner_current_power_(absolute),sensor.boiler_absburnpow,6,0,1,263,1
|
||||
"Ecomline Excellent",boiler,206,heatblock,heating block,uint16,C,false,sensor.boiler_heating_block,sensor.boiler_heatblock,6,0,1/10,264,1
|
||||
"Ecomline Excellent",boiler,206,heatblock,Heatblock temperature,uint16,C,false,sensor.boiler_Heatblock_temperature,sensor.boiler_heatblock,6,0,1/10,264,1
|
||||
"Ecomline Excellent",boiler,206,boilhyston,hysteresis on temperature,int8 (>=-20<=0),C,true,number.boiler_hysteresis_on_temperature,number.boiler_boilhyston,6,0,1,265,1
|
||||
"Ecomline Excellent",boiler,206,boilhystoff,hysteresis off temperature,int8 (>=0<=20),C,true,number.boiler_hysteresis_off_temperature,number.boiler_boilhystoff,6,0,1,266,1
|
||||
"Ecomline Excellent",boiler,206,boil2hyston,hysteresis stage 2 on temperature,int8 (>=-20<=0),C,true,number.boiler_hysteresis_stage_2_on_temperature,number.boiler_boil2hyston,6,0,1,267,1
|
||||
@@ -3438,7 +3438,7 @@ device name,device type,product id,shortname,fullname,type [options...] \| (min/
|
||||
"Logamax Plus, GB192, Condens GC9000, Greenstar ErP",boiler,208,burnmaxpower,burner max power,uint8 (>=0<=254),%,true,number.boiler_burner_max_power,number.boiler_burnmaxpower,6,0,1,261,1
|
||||
"Logamax Plus, GB192, Condens GC9000, Greenstar ErP",boiler,208,burnminperiod,burner min period,uint8 (>=0<=120),minutes,true,number.boiler_burner_min_period,number.boiler_burnminperiod,6,0,1,262,1
|
||||
"Logamax Plus, GB192, Condens GC9000, Greenstar ErP",boiler,208,absburnpow,burner current power (absolute),uint8,%,false,sensor.boiler_burner_current_power_(absolute),sensor.boiler_absburnpow,6,0,1,263,1
|
||||
"Logamax Plus, GB192, Condens GC9000, Greenstar ErP",boiler,208,heatblock,heating block,uint16,C,false,sensor.boiler_heating_block,sensor.boiler_heatblock,6,0,1/10,264,1
|
||||
"Logamax Plus, GB192, Condens GC9000, Greenstar ErP",boiler,208,heatblock,Heatblock temperature,uint16,C,false,sensor.boiler_Heatblock_temperature,sensor.boiler_heatblock,6,0,1/10,264,1
|
||||
"Logamax Plus, GB192, Condens GC9000, Greenstar ErP",boiler,208,boilhyston,hysteresis on temperature,int8 (>=-20<=0),C,true,number.boiler_hysteresis_on_temperature,number.boiler_boilhyston,6,0,1,265,1
|
||||
"Logamax Plus, GB192, Condens GC9000, Greenstar ErP",boiler,208,boilhystoff,hysteresis off temperature,int8 (>=0<=20),C,true,number.boiler_hysteresis_off_temperature,number.boiler_boilhystoff,6,0,1,266,1
|
||||
"Logamax Plus, GB192, Condens GC9000, Greenstar ErP",boiler,208,boil2hyston,hysteresis stage 2 on temperature,int8 (>=-20<=0),C,true,number.boiler_hysteresis_stage_2_on_temperature,number.boiler_boil2hyston,6,0,1,267,1
|
||||
@@ -3558,7 +3558,7 @@ device name,device type,product id,shortname,fullname,type [options...] \| (min/
|
||||
"Cascade MC400",boiler,210,burnmaxpower,burner max power,uint8 (>=0<=254),%,true,number.boiler_burner_max_power,number.boiler_burnmaxpower,6,0,1,261,1
|
||||
"Cascade MC400",boiler,210,burnminperiod,burner min period,uint8 (>=0<=120),minutes,true,number.boiler_burner_min_period,number.boiler_burnminperiod,6,0,1,262,1
|
||||
"Cascade MC400",boiler,210,absburnpow,burner current power (absolute),uint8,%,false,sensor.boiler_burner_current_power_(absolute),sensor.boiler_absburnpow,6,0,1,263,1
|
||||
"Cascade MC400",boiler,210,heatblock,heating block,uint16,C,false,sensor.boiler_heating_block,sensor.boiler_heatblock,6,0,1/10,264,1
|
||||
"Cascade MC400",boiler,210,heatblock,Heatblock temperature,uint16,C,false,sensor.boiler_Heatblock_temperature,sensor.boiler_heatblock,6,0,1/10,264,1
|
||||
"Cascade MC400",boiler,210,boilhyston,hysteresis on temperature,int8 (>=-20<=0),C,true,number.boiler_hysteresis_on_temperature,number.boiler_boilhyston,6,0,1,265,1
|
||||
"Cascade MC400",boiler,210,boilhystoff,hysteresis off temperature,int8 (>=0<=20),C,true,number.boiler_hysteresis_off_temperature,number.boiler_boilhystoff,6,0,1,266,1
|
||||
"Cascade MC400",boiler,210,boil2hyston,hysteresis stage 2 on temperature,int8 (>=-20<=0),C,true,number.boiler_hysteresis_stage_2_on_temperature,number.boiler_boil2hyston,6,0,1,267,1
|
||||
@@ -3678,7 +3678,7 @@ device name,device type,product id,shortname,fullname,type [options...] \| (min/
|
||||
"EasyControl Adapter",boiler,211,burnmaxpower,burner max power,uint8 (>=0<=254),%,true,number.boiler_burner_max_power,number.boiler_burnmaxpower,6,0,1,261,1
|
||||
"EasyControl Adapter",boiler,211,burnminperiod,burner min period,uint8 (>=0<=120),minutes,true,number.boiler_burner_min_period,number.boiler_burnminperiod,6,0,1,262,1
|
||||
"EasyControl Adapter",boiler,211,absburnpow,burner current power (absolute),uint8,%,false,sensor.boiler_burner_current_power_(absolute),sensor.boiler_absburnpow,6,0,1,263,1
|
||||
"EasyControl Adapter",boiler,211,heatblock,heating block,uint16,C,false,sensor.boiler_heating_block,sensor.boiler_heatblock,6,0,1/10,264,1
|
||||
"EasyControl Adapter",boiler,211,heatblock,Heatblock temperature,uint16,C,false,sensor.boiler_Heatblock_temperature,sensor.boiler_heatblock,6,0,1/10,264,1
|
||||
"EasyControl Adapter",boiler,211,boilhyston,hysteresis on temperature,int8 (>=-20<=0),C,true,number.boiler_hysteresis_on_temperature,number.boiler_boilhyston,6,0,1,265,1
|
||||
"EasyControl Adapter",boiler,211,boilhystoff,hysteresis off temperature,int8 (>=0<=20),C,true,number.boiler_hysteresis_off_temperature,number.boiler_boilhystoff,6,0,1,266,1
|
||||
"EasyControl Adapter",boiler,211,boil2hyston,hysteresis stage 2 on temperature,int8 (>=-20<=0),C,true,number.boiler_hysteresis_stage_2_on_temperature,number.boiler_boil2hyston,6,0,1,267,1
|
||||
@@ -3898,7 +3898,7 @@ device name,device type,product id,shortname,fullname,type [options...] \| (min/
|
||||
"Logamax Plus GB122, Condense 2300, Junkers Cerapur GC2200W",boiler,234,burnmaxpower,burner max power,uint8 (>=0<=254),%,true,number.boiler_burner_max_power,number.boiler_burnmaxpower,6,0,1,261,1
|
||||
"Logamax Plus GB122, Condense 2300, Junkers Cerapur GC2200W",boiler,234,burnminperiod,burner min period,uint8 (>=0<=120),minutes,true,number.boiler_burner_min_period,number.boiler_burnminperiod,6,0,1,262,1
|
||||
"Logamax Plus GB122, Condense 2300, Junkers Cerapur GC2200W",boiler,234,absburnpow,burner current power (absolute),uint8,%,false,sensor.boiler_burner_current_power_(absolute),sensor.boiler_absburnpow,6,0,1,263,1
|
||||
"Logamax Plus GB122, Condense 2300, Junkers Cerapur GC2200W",boiler,234,heatblock,heating block,uint16,C,false,sensor.boiler_heating_block,sensor.boiler_heatblock,6,0,1/10,264,1
|
||||
"Logamax Plus GB122, Condense 2300, Junkers Cerapur GC2200W",boiler,234,heatblock,Heatblock temperature,uint16,C,false,sensor.boiler_Heatblock_temperature,sensor.boiler_heatblock,6,0,1/10,264,1
|
||||
"Logamax Plus GB122, Condense 2300, Junkers Cerapur GC2200W",boiler,234,boilhyston,hysteresis on temperature,int8 (>=-20<=0),C,true,number.boiler_hysteresis_on_temperature,number.boiler_boilhyston,6,0,1,265,1
|
||||
"Logamax Plus GB122, Condense 2300, Junkers Cerapur GC2200W",boiler,234,boilhystoff,hysteresis off temperature,int8 (>=0<=20),C,true,number.boiler_hysteresis_off_temperature,number.boiler_boilhystoff,6,0,1,266,1
|
||||
"Logamax Plus GB122, Condense 2300, Junkers Cerapur GC2200W",boiler,234,boil2hyston,hysteresis stage 2 on temperature,int8 (>=-20<=0),C,true,number.boiler_hysteresis_stage_2_on_temperature,number.boiler_boil2hyston,6,0,1,267,1
|
||||
|
||||
|
Can't render this file because it is too large.
|
@@ -42,11 +42,11 @@
|
||||
"@eslint/js": "^10.0.1",
|
||||
"@preact/preset-vite": "^2.10.6",
|
||||
"@trivago/prettier-plugin-sort-imports": "^6.0.2",
|
||||
"@types/node": "^26.4.1",
|
||||
"@types/node": "^26.5.0",
|
||||
"@types/react": "^19.2.18",
|
||||
"@types/react-dom": "^19.2.5",
|
||||
"@types/react-dom": "^19.2.7",
|
||||
"concurrently": "^10.0.5",
|
||||
"eslint": "^10.9.1",
|
||||
"eslint": "^10.10.0",
|
||||
"eslint-config-prettier": "^10.1.8",
|
||||
"etag": "^1.8.1",
|
||||
"mime-types": "^3.0.2",
|
||||
@@ -54,9 +54,9 @@
|
||||
"rollup-plugin-visualizer": "^7.1.1",
|
||||
"terser": "^5.51.2",
|
||||
"typescript": "^6.0.3",
|
||||
"typescript-eslint": "^8.69.0",
|
||||
"typescript-eslint": "^8.70.0",
|
||||
"vite": "^8.2.2",
|
||||
"vite-plugin-imagemin": "^0.6.1"
|
||||
},
|
||||
"packageManager": "pnpm@11.25.0+sha512.5cde925b4f075f725eb71fbae18a42ffe784524789f19b61c731cb8721ec28aaee160e01a8d5af4fedb2a42cdbf300efe23db356b0d4a17b4d63e11f8ab7c956"
|
||||
"packageManager": "pnpm@12.3.4+sha512.961aa41fb077da3a04a441d9f8e15ebc0c96da8ef710b2eb67bf9ee7cb0610eabd48f1fd85f51cffe73846785fa0f87c56a3a872a1d893f8446741b5cce45457"
|
||||
}
|
||||
|
||||
Generated
+416
-267
File diff suppressed because it is too large
Load Diff
@@ -19,6 +19,7 @@ export const uploadFile = (file: File) => {
|
||||
const formData = new FormData();
|
||||
formData.append('file', file);
|
||||
return alovaInstance.Post('/rest/uploadFile', formData, {
|
||||
timeout: UPLOAD_TIMEOUT
|
||||
timeout: UPLOAD_TIMEOUT,
|
||||
enableUpload: true
|
||||
});
|
||||
};
|
||||
|
||||
@@ -307,6 +307,7 @@ export const BOARD_PROFILES = {
|
||||
LOLIN: 'Lolin D32',
|
||||
OLIMEX: 'Olimex ESP32-EVB',
|
||||
OLIMEXPOE: 'Olimex ESP32-POE',
|
||||
OLIMEXPOEW: 'Olimex ESP32-POE-ISO WROVER (PSRAM)',
|
||||
C3MINI: 'Wemos C3 Mini',
|
||||
S2MINI: 'Wemos S2 Mini',
|
||||
S3MINI: 'Liligo S3'
|
||||
|
||||
@@ -165,11 +165,7 @@ const DownloadUpload = () => {
|
||||
{LL.UPLOAD()}
|
||||
</Typography>
|
||||
|
||||
<Typography sx={{ pb: 2 }} color="warning" variant="body1">
|
||||
{LL.UPLOAD_TEXT()}:
|
||||
</Typography>
|
||||
|
||||
<SingleUpload doRestart={doRestart} />
|
||||
<SingleUpload text={LL.UPLOAD_BACKUP_TEXT()} doRestart={doRestart} />
|
||||
</SectionContent>
|
||||
);
|
||||
};
|
||||
|
||||
@@ -846,7 +846,7 @@ const Version = () => {
|
||||
<Typography sx={{ pt: 2, pb: 2 }} variant="h6" color="primary">
|
||||
{LL.UPLOAD()}
|
||||
</Typography>
|
||||
<SingleUpload doRestart={doRestart} />
|
||||
<SingleUpload text={LL.UPLOAD_FIRMWARE_TEXT()} doRestart={doRestart} />
|
||||
</>
|
||||
)}
|
||||
</Box>
|
||||
|
||||
@@ -369,7 +369,7 @@ const SystemLog = () => {
|
||||
) : (
|
||||
<>
|
||||
{data.developer_mode && (
|
||||
<IconButton onClick={sendReadCommand} aria-label={LL.EXECUTE()}>
|
||||
<IconButton onClick={sendReadCommand} aria-label={LL.RUN()}>
|
||||
<PlayArrowIcon color="primary" />
|
||||
</IconButton>
|
||||
)}
|
||||
|
||||
@@ -14,9 +14,10 @@ import { LinearProgressWithLabel } from './LinearProgressWithLabel';
|
||||
|
||||
interface SingleUploadProps {
|
||||
doRestart: () => void;
|
||||
text: string;
|
||||
}
|
||||
|
||||
const SingleUpload = ({ doRestart }: SingleUploadProps) => {
|
||||
const SingleUpload = ({ doRestart, text }: SingleUploadProps) => {
|
||||
const [md5, setMd5] = useState<string>();
|
||||
const [file, setFile] = useState<File>();
|
||||
const { LL } = useI18nContext();
|
||||
@@ -29,11 +30,22 @@ const SingleUpload = ({ doRestart }: SingleUploadProps) => {
|
||||
} = useRequest(SystemApi.uploadFile, {
|
||||
immediate: false
|
||||
}).onSuccess(({ data }) => {
|
||||
if (data && typeof data === 'object' && 'md5' in data) {
|
||||
setMd5((data as { md5: string }).md5);
|
||||
toast.success(LL.UPLOAD() + ' MD5 ' + LL.SUCCESSFUL());
|
||||
let payload = data;
|
||||
if (typeof payload === 'string' && payload.length > 0) {
|
||||
try {
|
||||
payload = JSON.parse(payload);
|
||||
} catch {
|
||||
payload = data;
|
||||
}
|
||||
}
|
||||
if (payload && typeof payload === 'object' && 'md5' in payload) {
|
||||
setMd5((payload as { md5: string }).md5);
|
||||
toast.success(LL.UPLOAD_MD5_RECEIVED());
|
||||
setFile(undefined);
|
||||
} else {
|
||||
if (payload && typeof payload === 'object' && 'md5_ok' in payload) {
|
||||
toast.success(LL.UPLOAD_MD5_MATCHED());
|
||||
}
|
||||
doRestart();
|
||||
}
|
||||
});
|
||||
@@ -80,12 +92,17 @@ const SingleUpload = ({ doRestart }: SingleUploadProps) => {
|
||||
</Button>
|
||||
</>
|
||||
) : (
|
||||
<DragNdrop text={LL.UPLOAD_DROP_TEXT()} onFileSelected={setFile} />
|
||||
<DragNdrop
|
||||
text={(md5 ? LL.UPLOAD_MD5_RECEIVED() : text) + '...'}
|
||||
onFileSelected={setFile}
|
||||
/>
|
||||
)}
|
||||
|
||||
{md5 && (
|
||||
<Box sx={{ mt: 2 }}>
|
||||
<Typography variant="body2">{'MD5: ' + md5}</Typography>
|
||||
<Typography variant="body2" color="success">
|
||||
{'MD5: ' + md5}
|
||||
</Typography>
|
||||
</Box>
|
||||
)}
|
||||
</>
|
||||
|
||||
@@ -178,8 +178,6 @@ const cs: Translation = {
|
||||
DOWNLOAD_SETTINGS_TEXT: 'Vytvořte zálohu svého nastavení a konfigurace',
|
||||
DOWNLOAD_SETTINGS_TEXT2: 'Exportovat všechny hodnoty',
|
||||
DOWNLOAD_SYSTEM_BACKUP: 'Systémová záloha',
|
||||
UPLOAD_TEXT: 'Nahrajte nový soubor firmwaru (.bin) nebo záložní soubor (.json)',
|
||||
UPLOAD_DROP_TEXT: 'Přetáhněte soubor sem nebo klikněte pro výběr',
|
||||
ERROR: 'Neočekávaná chyba, zkuste to prosím znovu',
|
||||
TIME_SET: 'Čas nastaven',
|
||||
MANAGE_USERS: 'Spravovat uživatele',
|
||||
@@ -349,7 +347,11 @@ const cs: Translation = {
|
||||
COMMANDS_HELP_1: 'Definujte vlastní příkazy pro magistrali EMS',
|
||||
COMMAND_EXECUTED: 'Příkaz úspěšně spuštěn',
|
||||
RUN: 'Spustit příkaz',
|
||||
INTERNET_CONNECTION_CHECK: 'Kontrola online pro dostupné verze'
|
||||
INTERNET_CONNECTION_CHECK: 'Kontrola online pro dostupné verze',
|
||||
UPLOAD_BACKUP_TEXT: 'Klikněte, abyste vybrali nebo přetáhli a pustili soubor zálohy (.json) sem',
|
||||
UPLOAD_FIRMWARE_TEXT: 'Klikněte, abyste vybrali nebo přetáhli a pustili soubor firmware .bin/.md5 sem',
|
||||
UPLOAD_MD5_RECEIVED: 'Digest přijat, nyní nahrajte firmware .bin',
|
||||
UPLOAD_MD5_MATCHED: 'MD5 souhlasí, firmware se instaluje...'
|
||||
};
|
||||
|
||||
export default cs;
|
||||
|
||||
@@ -178,8 +178,6 @@ const de: Translation = {
|
||||
DOWNLOAD_SETTINGS_TEXT: 'Erstellen Sie eine Sicherung Ihrer Konfigurationen und Einstellungen',
|
||||
DOWNLOAD_SETTINGS_TEXT2: 'Exportiere alle Werte',
|
||||
DOWNLOAD_SYSTEM_BACKUP: 'Systemsicherung',
|
||||
UPLOAD_TEXT: 'Laden Sie eine neue Firmware-Datei (.bin) oder eine Sicherungsdatei (.json) hoch',
|
||||
UPLOAD_DROP_TEXT: 'Legen Sie eine Firmware-Datei (.bin) ab oder klicken Sie hier',
|
||||
ERROR: 'Unerwarteter Fehler, bitte versuchen Sie es erneut.',
|
||||
TIME_SET: 'Zeit gesetzt',
|
||||
MANAGE_USERS: 'Nutzerverwaltung',
|
||||
@@ -349,7 +347,11 @@ const de: Translation = {
|
||||
COMMANDS_HELP_1: 'Definieren Sie eigene Befehle für die EMS-Magistral',
|
||||
COMMAND_EXECUTED: 'Befehl erfolgreich ausgeführt',
|
||||
RUN: 'Befehl ausführen',
|
||||
INTERNET_CONNECTION_CHECK: 'Online-Prüfung auf verfügbare Versionen'
|
||||
INTERNET_CONNECTION_CHECK: 'Online-Prüfung auf verfügbare Versionen',
|
||||
UPLOAD_BACKUP_TEXT: 'Klicken Sie, um eine Sicherungsdatei (.json) auszuwählen oder zu ziehen und abzulegen',
|
||||
UPLOAD_FIRMWARE_TEXT: 'Klicken Sie, um eine Firmware-Datei (.bin/.md5) auszuwählen oder zu ziehen und abzulegen',
|
||||
UPLOAD_MD5_RECEIVED: 'Prüfsumme empfangen, jetzt die Firmware-Datei (.bin) hochladen',
|
||||
UPLOAD_MD5_MATCHED: 'MD5 stimmt überein, Firmware wird installiert...'
|
||||
};
|
||||
|
||||
export default de;
|
||||
|
||||
@@ -178,8 +178,6 @@ const en: Translation = {
|
||||
DOWNLOAD_SETTINGS_TEXT: 'Create a backup of your configuration and settings',
|
||||
DOWNLOAD_SETTINGS_TEXT2: 'Export all values',
|
||||
DOWNLOAD_SYSTEM_BACKUP: 'System Backup',
|
||||
UPLOAD_TEXT: 'Upload a new firmware file (.bin) or a backup file (.json)',
|
||||
UPLOAD_DROP_TEXT: 'Drop a firmware .bin file or click here',
|
||||
ERROR: 'Unexpected Error, please try again',
|
||||
TIME_SET: 'Time set',
|
||||
MANAGE_USERS: 'Manage Users',
|
||||
@@ -349,7 +347,11 @@ const en: Translation = {
|
||||
COMMANDS_HELP_1: 'Define reusable named commands below. These can be executed from the console, API/MQTT, or referenced by the Scheduler',
|
||||
COMMAND_EXECUTED: 'Command executed successfully',
|
||||
RUN: 'Run',
|
||||
INTERNET_CONNECTION_CHECK: 'Checking online for available versions'
|
||||
INTERNET_CONNECTION_CHECK: 'Checking online for available versions',
|
||||
UPLOAD_BACKUP_TEXT: 'Click to select or Drag&Drop a backup file (.json) here',
|
||||
UPLOAD_FIRMWARE_TEXT: 'Click to select or Drag&Drop a firmware .bin/.md5 file',
|
||||
UPLOAD_MD5_RECEIVED: 'Digest received, now upload the firmware .bin file',
|
||||
UPLOAD_MD5_MATCHED: 'MD5 matches, installing firmware...'
|
||||
};
|
||||
|
||||
export default en;
|
||||
|
||||
@@ -178,8 +178,6 @@ const fr: Translation = {
|
||||
DOWNLOAD_SETTINGS_TEXT: 'Créer une sauvegarde de vos paramètres et configurations',
|
||||
DOWNLOAD_SETTINGS_TEXT2: 'Exporter toutes les valeurs',
|
||||
DOWNLOAD_SYSTEM_BACKUP: 'Sauvegarde système',
|
||||
UPLOAD_TEXT: 'Télécharger un nouveau fichier firmware (.bin) ou une sauvegarde (.json)',
|
||||
UPLOAD_DROP_TEXT: 'Drop a firmware .bin file or click here',
|
||||
ERROR: 'Erreur inattendue, veuillez réessayer',
|
||||
TIME_SET: 'Time set',
|
||||
MANAGE_USERS: 'Gérer les utilisateurs',
|
||||
@@ -349,7 +347,11 @@ const fr: Translation = {
|
||||
COMMANDS_HELP_1: 'Définir des commandes personnalisées pour la magistral EMS',
|
||||
COMMAND_EXECUTED: 'Commande exécutée avec succès',
|
||||
RUN: 'Exécuter une commande',
|
||||
INTERNET_CONNECTION_CHECK: 'Vérification en ligne pour les versions disponibles'
|
||||
INTERNET_CONNECTION_CHECK: 'Vérification en ligne pour les versions disponibles',
|
||||
UPLOAD_BACKUP_TEXT: 'Cliquez pour sélectionner ou faites glisser et déposez un fichier de sauvegarde (.json) ici',
|
||||
UPLOAD_FIRMWARE_TEXT: 'Cliquez pour sélectionner ou faites glisser et déposez un fichier firmware .bin/.md5 ici',
|
||||
UPLOAD_MD5_RECEIVED: 'Empreinte reçue, téléversez maintenant le fichier firmware .bin',
|
||||
UPLOAD_MD5_MATCHED: 'MD5 concordant, installation du firmware...'
|
||||
};
|
||||
|
||||
export default fr;
|
||||
|
||||
@@ -178,8 +178,6 @@ const it: Translation = {
|
||||
DOWNLOAD_SETTINGS_TEXT: 'Create a backup of your configuration and settings',
|
||||
DOWNLOAD_SETTINGS_TEXT2: 'Esporta tutti i valori',
|
||||
DOWNLOAD_SYSTEM_BACKUP: 'Backup sistema',
|
||||
UPLOAD_TEXT: 'Upload a new firmware file (.bin) or a backup file (.json)',
|
||||
UPLOAD_DROP_TEXT: 'Drop a firmware .bin file or click here',
|
||||
ERROR: 'Errore Inaspettato, prego tenta ancora',
|
||||
TIME_SET: 'Imposta Ora',
|
||||
MANAGE_USERS: 'Gestione Utenti',
|
||||
@@ -349,7 +347,11 @@ const it: Translation = {
|
||||
COMMANDS_HELP_1: 'Definisci comandi personalizzati per la magistrali EMS',
|
||||
COMMAND_EXECUTED: 'Comando eseguito con successo',
|
||||
RUN: 'Esegui comando',
|
||||
INTERNET_CONNECTION_CHECK: 'Controllo online per le versioni disponibili'
|
||||
INTERNET_CONNECTION_CHECK: 'Controllo online per le versioni disponibili',
|
||||
UPLOAD_BACKUP_TEXT: 'Klik per selezionare o trascinare e rilasciare un file di backup (.json) qui',
|
||||
UPLOAD_FIRMWARE_TEXT: 'Klik per selezionare o trascinare e rilasciare un file firmware .bin/.md5 qui',
|
||||
UPLOAD_MD5_RECEIVED: 'Digest ricevuto, ora caricare il file firmware .bin',
|
||||
UPLOAD_MD5_MATCHED: 'MD5 corrispondente, installazione firmware...'
|
||||
};
|
||||
|
||||
export default it;
|
||||
|
||||
@@ -178,8 +178,6 @@ const nl: Translation = {
|
||||
DOWNLOAD_SETTINGS_TEXT: 'Maak een back-up van uw configuratie en instellingen',
|
||||
DOWNLOAD_SETTINGS_TEXT2: 'Exporteer alle waarden',
|
||||
DOWNLOAD_SYSTEM_BACKUP: 'Systeem Backup',
|
||||
UPLOAD_TEXT: 'Upload een nieuw firmwarebestand (.bin) of een back-upbestand (.json)',
|
||||
UPLOAD_DROP_TEXT: 'Sleep en firmware .bin bestand hierheen of klik hier',
|
||||
ERROR: 'Onverwachte fout, probeer opnieuw',
|
||||
TIME_SET: 'Tijd ingesteld',
|
||||
MANAGE_USERS: 'Gebruikersbeheer',
|
||||
@@ -349,7 +347,11 @@ const nl: Translation = {
|
||||
COMMANDS_HELP_1: 'Definieer hergebruikbare benoemde commando\'s hieronder. Deze kunnen worden uitgevoerd vanuit de console, API/MQTT, of worden aangeroepen door de Scheduler',
|
||||
COMMAND_EXECUTED: 'Commando uitgevoerd succesvol',
|
||||
RUN: 'Commando uitvoeren',
|
||||
INTERNET_CONNECTION_CHECK: 'Controleren op online beschikbare versies'
|
||||
INTERNET_CONNECTION_CHECK: 'Controleren op online beschikbare versies',
|
||||
UPLOAD_BACKUP_TEXT: 'Klik voor selecteren of sleep en drop een back-upbestand (.json) hier',
|
||||
UPLOAD_FIRMWARE_TEXT: 'Klik voor selecteren of sleep en drop een firmware .bin/.md5 bestand hier',
|
||||
UPLOAD_MD5_RECEIVED: 'Digest ontvangen, upload nu het firmware .bin-bestand',
|
||||
UPLOAD_MD5_MATCHED: 'MD5 komt overeen, firmware wordt geïnstalleerd...'
|
||||
};
|
||||
|
||||
export default nl;
|
||||
|
||||
@@ -178,8 +178,6 @@ const no: Translation = {
|
||||
DOWNLOAD_SETTINGS_TEXT: 'Lag en sikkerhetskopi av dine konfigurasjon og innstillinger',
|
||||
DOWNLOAD_SETTINGS_TEXT2: 'Eksporter alle verdier',
|
||||
DOWNLOAD_SYSTEM_BACKUP: 'System Sikkerhetskopi',
|
||||
UPLOAD_TEXT: 'Last opp en ny firmware fil (.bin) eller en sikkerhetskopi fil (.json)',
|
||||
UPLOAD_DROP_TEXT: 'Dropp en firmware fil (.bin) eller klikk her',
|
||||
ERROR: 'Ukjent feil, prøv igjen',
|
||||
TIME_SET: 'Still in tid',
|
||||
MANAGE_USERS: 'Administrer Brukere',
|
||||
@@ -349,7 +347,11 @@ const no: Translation = {
|
||||
COMMANDS_HELP_1: 'Definer egne kommandoer for EMS-Magistral',
|
||||
COMMAND_EXECUTED: 'Kommando kjørt lykkes',
|
||||
RUN: 'Kjør',
|
||||
INTERNET_CONNECTION_CHECK: 'Kontrollerer online for tilgjengelige versjoner'
|
||||
INTERNET_CONNECTION_CHECK: 'Kontrollerer online for tilgjengelige versjoner',
|
||||
UPLOAD_BACKUP_TEXT: 'Klikk for å velge eller dra og slipp en sikkerhetskopi (.json) her',
|
||||
UPLOAD_FIRMWARE_TEXT: 'Klikk for å velge eller dra og slipp en firmware .bin/.md5 her',
|
||||
UPLOAD_MD5_RECEIVED: 'MD5 mottatt, last nå opp firmware .bin-filen',
|
||||
UPLOAD_MD5_MATCHED: 'MD5 stemmer, firmware installeres...'
|
||||
};
|
||||
|
||||
export default no;
|
||||
|
||||
@@ -178,8 +178,6 @@ const pl: BaseTranslation = {
|
||||
DOWNLOAD_SETTINGS_TEXT: 'Utwórz kopię swoich ustawień i konfiguracji',
|
||||
DOWNLOAD_SETTINGS_TEXT2: 'Eksportuj wszystkie wartości',
|
||||
DOWNLOAD_SYSTEM_BACKUP: 'Kopia zapasowa systemu',
|
||||
UPLOAD_TEXT: 'Wgraj nowy plik firmware (.bin) lub kopię ustawień (.json)',
|
||||
UPLOAD_DROP_TEXT: 'Upuść plik firmware .bin lub kliknij tutaj',
|
||||
ERROR: 'Nieoczekiwany błąd, spróbuj ponownie!',
|
||||
TIME_SET: 'Zegar został ustawiony.',
|
||||
MANAGE_USERS: 'Zarządzanie użytkownikami',
|
||||
@@ -349,7 +347,11 @@ const pl: BaseTranslation = {
|
||||
COMMANDS_HELP_1: 'Zdefiniuj niestandardowe komendy dla magistrali EMS',
|
||||
COMMAND_EXECUTED: 'Komenda wykonana pomyślnie',
|
||||
RUN: 'Wykonaj',
|
||||
INTERNET_CONNECTION_CHECK: 'Sprawdzanie online dla dostępnych wersji'
|
||||
INTERNET_CONNECTION_CHECK: 'Sprawdzanie online dla dostępnych wersji',
|
||||
UPLOAD_BACKUP_TEXT: 'Kliknij, aby wybrać lub przeciągnij i upuść plik kopii zapasowej (.json) tutaj',
|
||||
UPLOAD_FIRMWARE_TEXT: 'Kliknij, aby wybrać lub przeciągnij i upuść plik firmware .bin/.md5',
|
||||
UPLOAD_MD5_RECEIVED: 'Suma MD5 odebrana, teraz wgraj plik firmware .bin',
|
||||
UPLOAD_MD5_MATCHED: 'MD5 zgodne, instalowanie firmware...'
|
||||
};
|
||||
|
||||
export default pl;
|
||||
|
||||
@@ -178,8 +178,6 @@ const sk: Translation = {
|
||||
DOWNLOAD_SETTINGS_TEXT: 'Vytvorte zálohu svojej konfigurácie a nastavení',
|
||||
DOWNLOAD_SETTINGS_TEXT2: 'Exportovať všetky hodnoty',
|
||||
DOWNLOAD_SYSTEM_BACKUP: 'Systémová záloha',
|
||||
UPLOAD_TEXT: 'Nahrajte nový súbor firmvéru (.bin) alebo súbor zálohy (.json)',
|
||||
UPLOAD_DROP_TEXT: 'Presuňte súbor .bin firmvéru alebo kliknite sem',
|
||||
ERROR: 'Neočakávaná chyba, prosím skúste to znova',
|
||||
TIME_SET: 'Nastavený čas',
|
||||
MANAGE_USERS: 'Správa používateľov',
|
||||
@@ -349,7 +347,11 @@ const sk: Translation = {
|
||||
COMMANDS_HELP_1: 'Definujte vlastné príkazy pre magistrali EMS',
|
||||
COMMAND_EXECUTED: 'Príkaz vykonaný úspešne',
|
||||
RUN: 'Volať príkaz',
|
||||
INTERNET_CONNECTION_CHECK: 'Kontrola online pre dostupné verzie'
|
||||
INTERNET_CONNECTION_CHECK: 'Kontrola online pre dostupné verzie',
|
||||
UPLOAD_BACKUP_TEXT: 'Kliknite, aby ste vybrali alebo presuňte a upustili súbor zálohy (.json) sem',
|
||||
UPLOAD_FIRMWARE_TEXT: 'Kliknite, aby ste vybrali alebo presuňte a upustili súbor firmware .bin/.md5',
|
||||
UPLOAD_MD5_RECEIVED: 'Suma MD5 prijatá, teraz nahrajte firmware .bin',
|
||||
UPLOAD_MD5_MATCHED: 'MD5 súhlasí, firmvér sa inštaluje...'
|
||||
};
|
||||
|
||||
export default sk;
|
||||
|
||||
@@ -178,8 +178,6 @@ const sv: Translation = {
|
||||
DOWNLOAD_SETTINGS_TEXT: 'Skapa en säkerhetskopia av din konfiguration och inställningar',
|
||||
DOWNLOAD_SETTINGS_TEXT2: 'Exportera alla värden',
|
||||
DOWNLOAD_SYSTEM_BACKUP: 'System säkerhetskopia',
|
||||
UPLOAD_TEXT: 'Ladda upp en ny firmwarefil (.bin) eller en säkerhetskopiafil (.json)',
|
||||
UPLOAD_DROP_TEXT: 'Droppa en firmware .bin fil eller klicka här',
|
||||
ERROR: 'Okänt fel, var god försök igen',
|
||||
TIME_SET: 'Ställ in tid',
|
||||
MANAGE_USERS: 'Användare',
|
||||
@@ -349,7 +347,11 @@ const sv: Translation = {
|
||||
COMMANDS_HELP_1: 'Definiera egna kommandon för EMS-Magistral',
|
||||
COMMAND_EXECUTED: 'Kommando kört lyckades',
|
||||
RUN: 'Kör kommando',
|
||||
INTERNET_CONNECTION_CHECK: 'Kontrollerar online för tillgängliga versioner'
|
||||
INTERNET_CONNECTION_CHECK: 'Kontrollerar online för tillgängliga versioner',
|
||||
UPLOAD_BACKUP_TEXT: 'Klicka för att välja eller dra och släpp en säkerhetskopia (.json) här',
|
||||
UPLOAD_FIRMWARE_TEXT: 'Klicka för att välja eller dra och släpp en firmware .bin/.md5 här',
|
||||
UPLOAD_MD5_RECEIVED: 'MD5 mottagen, ladda nu upp firmware .bin-filen',
|
||||
UPLOAD_MD5_MATCHED: 'MD5 stämmer, firmware installeras...'
|
||||
};
|
||||
|
||||
export default sv;
|
||||
|
||||
@@ -178,8 +178,6 @@ const tr: Translation = {
|
||||
DOWNLOAD_SETTINGS_TEXT: 'Yapılandırma ve ayarlarınızın yedekleme yapın',
|
||||
DOWNLOAD_SETTINGS_TEXT2: 'Tüm değerleri dışarı al',
|
||||
DOWNLOAD_SYSTEM_BACKUP: 'Sistem yedekleme',
|
||||
UPLOAD_TEXT: 'Yeni bir firmware dosyası (.bin) veya yedek dosyası (.json) yükle',
|
||||
UPLOAD_DROP_TEXT: 'Bir firmware .bin dosyası veya buraya tıklayın',
|
||||
ERROR: 'Beklenemedik hata, lütfen tekrar deneyin.',
|
||||
TIME_SET: 'Zaman ayarı',
|
||||
MANAGE_USERS: 'Kullanıcıları yönet',
|
||||
@@ -349,7 +347,11 @@ const tr: Translation = {
|
||||
COMMANDS_HELP_1: 'Özel komutları EMS hattına tanımlayın',
|
||||
COMMAND_EXECUTED: 'Komut başarıyla çalıştırıldı',
|
||||
RUN: 'Komutu çalıştır',
|
||||
INTERNET_CONNECTION_CHECK: 'Online bağlantısı kontrol ediliyor'
|
||||
INTERNET_CONNECTION_CHECK: 'Online bağlantısı kontrol ediliyor',
|
||||
UPLOAD_BACKUP_TEXT: 'Yeni bir firmware dosyası (.bin) veya yedek dosyası (.json) yükle',
|
||||
UPLOAD_FIRMWARE_TEXT: 'Bir firmware .bin dosyası veya buraya tıklayın',
|
||||
UPLOAD_MD5_RECEIVED: 'Özet alındı, şimdi firmware .bin dosyasını yükleyin',
|
||||
UPLOAD_MD5_MATCHED: 'MD5 eşleşti, firmware yükleniyor...'
|
||||
};
|
||||
|
||||
export default tr;
|
||||
|
||||
@@ -57,6 +57,7 @@
|
||||
"assumeChangesOnlyAffectDirectDependencies": true,
|
||||
|
||||
// Path mapping for cleaner imports
|
||||
"ignoreDeprecations": "6.0",
|
||||
"baseUrl": ".",
|
||||
"paths": {
|
||||
"@/*": ["src/*"],
|
||||
|
||||
@@ -207,9 +207,6 @@ export default defineConfig(
|
||||
async ({ command, mode }: { command: string; mode: string }) => {
|
||||
if (command === 'serve') {
|
||||
console.log(`Preparing for standalone build with server, mode=${mode}`);
|
||||
// Imported through a computed URL so the config bundler leaves it as a real
|
||||
// runtime import: mock-api is a separate package with its own node_modules,
|
||||
// and inlining it here would drag its dependencies into every build.
|
||||
const mockServerUrl = pathToFileURL(
|
||||
path.resolve(import.meta.dirname, '../mock-api/mockServer.js')
|
||||
).href;
|
||||
|
||||
@@ -29,6 +29,7 @@
|
||||
|
||||
NativeConsole Serial;
|
||||
|
||||
EspClass ESP;
|
||||
ETHClass ETH;
|
||||
WiFiClass WiFi;
|
||||
|
||||
|
||||
@@ -34,6 +34,15 @@
|
||||
#include "WString.h"
|
||||
#include "Network.h"
|
||||
|
||||
// stub of Arduino-ESP32's EspClass, holding only what is called outside of #ifndef EMSESP_STANDALONE
|
||||
class EspClass {
|
||||
public:
|
||||
size_t getPsramSize() {
|
||||
return 0; // standalone has no PSRAM
|
||||
}
|
||||
};
|
||||
|
||||
extern EspClass ESP;
|
||||
extern ETHClass ETH;
|
||||
extern WiFiClass WiFi;
|
||||
|
||||
|
||||
+106
-115
@@ -1,27 +1,11 @@
|
||||
// Mock server for development
|
||||
// Simulates file uploads and EventSource (SSE) for log messages
|
||||
import formidable from 'formidable';
|
||||
|
||||
// Constants reused across requests
|
||||
const VALID_EXTENSIONS = new Set(['bin', 'json', 'md5']);
|
||||
// EMS-ESP standalone mode to simulate
|
||||
// a REST server for file uploads
|
||||
// an EventSource (Server-Sent Events) for log messages in EMS-ESP standalone mode
|
||||
const ONE_SECOND_MS = 1000;
|
||||
const TEN_PERCENT = 10;
|
||||
|
||||
// padding function
|
||||
const pad = (number) => String(number).padStart(2, '0');
|
||||
|
||||
// Simple throttle helper (time-based)
|
||||
const throttle = (fn, intervalMs) => {
|
||||
let last = 0;
|
||||
return (...args) => {
|
||||
const now = Date.now();
|
||||
if (now - last >= intervalMs) {
|
||||
last = now;
|
||||
fn(...args);
|
||||
}
|
||||
};
|
||||
};
|
||||
|
||||
// Cached date formatter to avoid prototype pollution
|
||||
const formatDate = (date) => {
|
||||
const year = date.getUTCFullYear();
|
||||
@@ -38,108 +22,115 @@ const formatDate = (date) => {
|
||||
return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}.${milliseconds}`;
|
||||
};
|
||||
|
||||
const MOCK_REST_ORIGIN = 'http://localhost:3080';
|
||||
const UPLOAD_SIMULATED_KB_PER_SEC = 256;
|
||||
const UPLOAD_SLICE_BYTES = 16 * 1024;
|
||||
|
||||
const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
|
||||
|
||||
const readRequestThrottled = (req) =>
|
||||
new Promise((resolve, reject) => {
|
||||
const chunks = [];
|
||||
let ended = false;
|
||||
let settled = false;
|
||||
|
||||
const settle = (settler, value) => {
|
||||
if (settled) {
|
||||
return;
|
||||
}
|
||||
settled = true;
|
||||
settler(value);
|
||||
};
|
||||
|
||||
req.on('error', (error) => settle(reject, error));
|
||||
req.on('end', () => {
|
||||
ended = true;
|
||||
void step();
|
||||
});
|
||||
|
||||
const step = async () => {
|
||||
if (settled) {
|
||||
return;
|
||||
}
|
||||
try {
|
||||
const chunk = req.read(UPLOAD_SLICE_BYTES);
|
||||
if (chunk) {
|
||||
chunks.push(chunk);
|
||||
await sleep((chunk.length / (UPLOAD_SIMULATED_KB_PER_SEC * 1024)) * 1000);
|
||||
void step();
|
||||
return;
|
||||
}
|
||||
if (ended || req.readableEnded) {
|
||||
settle(resolve, Buffer.concat(chunks));
|
||||
return;
|
||||
}
|
||||
req.once('readable', () => {
|
||||
void step();
|
||||
});
|
||||
} catch (error) {
|
||||
settle(reject, error);
|
||||
}
|
||||
};
|
||||
|
||||
void step();
|
||||
});
|
||||
|
||||
const forwardThrottledUpload = async (req, res) => {
|
||||
const startedAt = Date.now();
|
||||
try {
|
||||
const body = await readRequestThrottled(req);
|
||||
console.log(
|
||||
`Upload received: ${body.length} bytes in ${((Date.now() - startedAt) / 1000).toFixed(1)}s`
|
||||
);
|
||||
const headers = {};
|
||||
if (req.headers['content-type']) {
|
||||
headers['content-type'] = req.headers['content-type'];
|
||||
}
|
||||
if (req.headers.authorization) {
|
||||
headers.authorization = req.headers.authorization;
|
||||
}
|
||||
headers['content-length'] = String(body.length);
|
||||
|
||||
const bunRes = await fetch(`${MOCK_REST_ORIGIN}${req.url}`, {
|
||||
method: 'POST',
|
||||
headers,
|
||||
body
|
||||
});
|
||||
const buf = Buffer.from(await bunRes.arrayBuffer());
|
||||
res.statusCode = bunRes.status;
|
||||
bunRes.headers.forEach((value, key) => {
|
||||
if (key !== 'transfer-encoding' && key !== 'content-encoding') {
|
||||
res.setHeader(key, value);
|
||||
}
|
||||
});
|
||||
res.end(buf);
|
||||
} catch (error) {
|
||||
if (error?.code === 'ECONNRESET' || req.destroyed) {
|
||||
console.log('Upload cancelled by the client');
|
||||
} else {
|
||||
console.error('Throttled upload proxy failed', error);
|
||||
}
|
||||
if (!res.headersSent) {
|
||||
res.statusCode = 502;
|
||||
}
|
||||
if (!res.writableEnded) {
|
||||
res.end();
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
export default () => {
|
||||
return {
|
||||
name: 'vite:mockserver',
|
||||
name: 'vite:mockServer',
|
||||
configureServer: async (server) => {
|
||||
server.middlewares.use(async (req, res, next) => {
|
||||
// Handle file uploads
|
||||
if (req.url.startsWith('/rest/uploadFile')) {
|
||||
// CORS preflight support
|
||||
if (req.method === 'OPTIONS') {
|
||||
res.writeHead(204, {
|
||||
'Access-Control-Allow-Origin': '*',
|
||||
'Access-Control-Allow-Methods': 'POST, OPTIONS',
|
||||
'Access-Control-Allow-Headers': 'Content-Type, Cache-Control',
|
||||
'Access-Control-Max-Age': '600'
|
||||
});
|
||||
res.end();
|
||||
return;
|
||||
}
|
||||
|
||||
if (req.method !== 'POST') {
|
||||
res.statusCode = 405;
|
||||
res.setHeader('Allow', 'POST, OPTIONS');
|
||||
res.end('Method Not Allowed');
|
||||
return;
|
||||
}
|
||||
|
||||
const fileSize = parseInt(req.headers['content-length'] || '0', 10);
|
||||
let progress = 0;
|
||||
|
||||
// Track upload progress
|
||||
const logThrottled = throttle((percentage) => {
|
||||
console.log(`Upload progress: ${percentage}%`);
|
||||
}, ONE_SECOND_MS);
|
||||
|
||||
req.on('data', (chunk) => {
|
||||
progress += chunk.length;
|
||||
if (fileSize > 0) {
|
||||
const percentage = Math.round((progress / fileSize) * 100);
|
||||
// Only log every ~1s and for meaningful changes (>=10%)
|
||||
if (percentage % TEN_PERCENT === 0) {
|
||||
logThrottled(percentage);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
try {
|
||||
const form = formidable({
|
||||
maxFileSize: 50 * 1024 * 1024, // 50MB limit
|
||||
keepExtensions: true,
|
||||
multiples: false,
|
||||
allowEmptyFiles: false
|
||||
});
|
||||
|
||||
const [fields, files] = await form.parse(req);
|
||||
|
||||
if (Object.keys(files).length === 0) {
|
||||
res.statusCode = 400;
|
||||
res.end('No file uploaded');
|
||||
return;
|
||||
}
|
||||
|
||||
const uploadedFile = Array.isArray(files.file)
|
||||
? files.file[0]
|
||||
: files.file;
|
||||
const fileName = uploadedFile.originalFilename;
|
||||
const fileExtension = fileName
|
||||
.substring(fileName.lastIndexOf('.') + 1)
|
||||
.toLowerCase();
|
||||
|
||||
console.log(
|
||||
`File uploaded: ${fileName} (${fileExtension}, ${fileSize} bytes)`
|
||||
);
|
||||
|
||||
// Validate file extension
|
||||
if (!VALID_EXTENSIONS.has(fileExtension)) {
|
||||
res.statusCode = 406;
|
||||
res.end('Invalid file extension');
|
||||
return;
|
||||
}
|
||||
|
||||
// Handle different file types
|
||||
if (fileExtension === 'md5') {
|
||||
res.setHeader('Content-Type', 'application/json');
|
||||
res.end(
|
||||
JSON.stringify({
|
||||
md5: 'ef4304fc4d9025a58dcf25d71c882d2c'
|
||||
})
|
||||
);
|
||||
} else {
|
||||
console.log('File uploaded successfully!');
|
||||
res.end();
|
||||
}
|
||||
} catch (err) {
|
||||
console.error('Upload error:', err && err.message ? err.message : err);
|
||||
res.statusCode = err.httpCode || 400;
|
||||
res.setHeader('Content-Type', 'text/plain');
|
||||
res.end(err && err.message ? err.message : 'Upload error');
|
||||
}
|
||||
if (req.url.startsWith('/rest/uploadFile') && req.method === 'POST') {
|
||||
await forwardThrottledUpload(req, res);
|
||||
return;
|
||||
}
|
||||
|
||||
// Handle Server-Sent Events (SSE) for log streaming
|
||||
else if (req.url.startsWith('/es/log')) {
|
||||
if (req.url.startsWith('/es/log')) {
|
||||
// Set SSE headers
|
||||
res.writeHead(200, {
|
||||
Connection: 'keep-alive',
|
||||
@@ -210,7 +201,7 @@ export default () => {
|
||||
res.on('error', cleanup);
|
||||
res.on('finish', cleanup);
|
||||
} else {
|
||||
next(); // Continue to next middleware
|
||||
next(); // Continue to next middleware (Vite proxy → restServer)
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@@ -11,12 +11,11 @@
|
||||
},
|
||||
"dependencies": {
|
||||
"@msgpack/msgpack": "^3.1.3",
|
||||
"formidable": "^3.5.4",
|
||||
"itty-router": "^5.0.24"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@trivago/prettier-plugin-sort-imports": "^6.0.2",
|
||||
"prettier": "^3.9.6"
|
||||
},
|
||||
"packageManager": "pnpm@11.25.0+sha512.5cde925b4f075f725eb71fbae18a42ffe784524789f19b61c731cb8721ec28aaee160e01a8d5af4fedb2a42cdbf300efe23db356b0d4a17b4d63e11f8ab7c956"
|
||||
"packageManager": "pnpm@12.3.4+sha512.961aa41fb077da3a04a441d9f8e15ebc0c96da8ef710b2eb67bf9ee7cb0610eabd48f1fd85f51cffe73846785fa0f87c56a3a872a1d893f8446741b5cce45457"
|
||||
}
|
||||
|
||||
Generated
+101
-51
@@ -1,3 +1,104 @@
|
||||
---
|
||||
lockfileVersion: '9.0'
|
||||
|
||||
importers:
|
||||
|
||||
.:
|
||||
configDependencies: {}
|
||||
packageManagerDependencies:
|
||||
pnpm:
|
||||
specifier: 12.3.4
|
||||
version: 12.3.4
|
||||
|
||||
packages:
|
||||
|
||||
'@pnpm/exe.darwin-arm64@12.3.4':
|
||||
resolution: {integrity: sha512-PAyUol8T1+/+ViOiXAt51ECA+QnfXCqz6foL4bW+LsoX0NcVd5XVEM2mRQu+LV4oc7uRz9zf9U0P+XFfuQeDAw==}
|
||||
cpu: [arm64]
|
||||
os: [darwin]
|
||||
|
||||
'@pnpm/exe.darwin-x64@12.3.4':
|
||||
resolution: {integrity: sha512-fxP9JCk0Cdye+ePuj+GJJLMUMTqHGWRdb1dtv4How876uQ2ehxvenpgiYAir/ceO9PsYUZkFTtyZdx+rRu5QOA==}
|
||||
cpu: [x64]
|
||||
os: [darwin]
|
||||
|
||||
'@pnpm/exe.linux-arm64-musl@12.3.4':
|
||||
resolution: {integrity: sha512-FBOt0/7ye6O6q4AllVV5QMviB6qE6fqkeczV/+MDWQsmo+QJrlfsh6X7CpH/tClVpBZEyIbjpUoT8bNhCYBxEg==}
|
||||
cpu: [arm64]
|
||||
os: [linux]
|
||||
libc: [musl]
|
||||
|
||||
'@pnpm/exe.linux-arm64@12.3.4':
|
||||
resolution: {integrity: sha512-t71AVA7LRqiKTyZ5xMYaZc2n5DfdpMbfokZuiIOXHBOM03ECnF0t4iYwaBDqJgVjlKYUOwaF/bRQajGNA4cJ4w==}
|
||||
cpu: [arm64]
|
||||
os: [linux]
|
||||
libc: [glibc]
|
||||
|
||||
'@pnpm/exe.linux-x64-musl@12.3.4':
|
||||
resolution: {integrity: sha512-RPmk7Jb/aYaFvL2iyDN/AtMY+hUEsue732WmXpcuQ9tBpMnGyA5py7Z3+e+qmQaJ0zY/4ni9jJiyPBQHujmv6w==}
|
||||
cpu: [x64]
|
||||
os: [linux]
|
||||
libc: [musl]
|
||||
|
||||
'@pnpm/exe.linux-x64@12.3.4':
|
||||
resolution: {integrity: sha512-2ZqOlSPkfwX1h5cR+FPiWf8+F+2hZT/3TvhUK5sigHqwaQCIiq8R7CGxhndKs63JtcLi2a1Qpo+wX/EoyfjyJQ==}
|
||||
cpu: [x64]
|
||||
os: [linux]
|
||||
libc: [glibc]
|
||||
|
||||
'@pnpm/exe.win32-arm64@12.3.4':
|
||||
resolution: {integrity: sha512-ANyrHqyqco6SXBysUTRF74itDyyraea7IbFsKFdNXTjcFnfycTDx37EwuhdpPYFNSIh2JhUG4fByclsRfiHX7w==}
|
||||
cpu: [arm64]
|
||||
os: [win32]
|
||||
|
||||
'@pnpm/exe.win32-x64@12.3.4':
|
||||
resolution: {integrity: sha512-WH/KqBPY/hq2Tb7SgQltEZytimcjgKRaCRL/aM9CI0c67iKc5TVmHUhIiL3Ux9FB4bWn36i6XewUcScQI+zG8w==}
|
||||
cpu: [x64]
|
||||
os: [win32]
|
||||
|
||||
pnpm@12.3.4:
|
||||
resolution: {integrity: sha512-lhqkH7B32joEpEHZ+OFevAyW2o73ELLrZ7+e58sGEOq9SPH9hfUc/+c4RnhfoPh8VqOocqHYk/hEZ0G1zORUVw==}
|
||||
engines: {node: '>=18.*'}
|
||||
hasBin: true
|
||||
|
||||
snapshots:
|
||||
|
||||
'@pnpm/exe.darwin-arm64@12.3.4':
|
||||
optional: true
|
||||
|
||||
'@pnpm/exe.darwin-x64@12.3.4':
|
||||
optional: true
|
||||
|
||||
'@pnpm/exe.linux-arm64-musl@12.3.4':
|
||||
optional: true
|
||||
|
||||
'@pnpm/exe.linux-arm64@12.3.4':
|
||||
optional: true
|
||||
|
||||
'@pnpm/exe.linux-x64-musl@12.3.4':
|
||||
optional: true
|
||||
|
||||
'@pnpm/exe.linux-x64@12.3.4':
|
||||
optional: true
|
||||
|
||||
'@pnpm/exe.win32-arm64@12.3.4':
|
||||
optional: true
|
||||
|
||||
'@pnpm/exe.win32-x64@12.3.4':
|
||||
optional: true
|
||||
|
||||
pnpm@12.3.4:
|
||||
optionalDependencies:
|
||||
'@pnpm/exe.darwin-arm64': 12.3.4
|
||||
'@pnpm/exe.darwin-x64': 12.3.4
|
||||
'@pnpm/exe.linux-arm64': 12.3.4
|
||||
'@pnpm/exe.linux-arm64-musl': 12.3.4
|
||||
'@pnpm/exe.linux-x64': 12.3.4
|
||||
'@pnpm/exe.linux-x64-musl': 12.3.4
|
||||
'@pnpm/exe.win32-arm64': 12.3.4
|
||||
'@pnpm/exe.win32-x64': 12.3.4
|
||||
|
||||
---
|
||||
lockfileVersion: '9.0'
|
||||
|
||||
settings:
|
||||
@@ -11,9 +112,6 @@ importers:
|
||||
'@msgpack/msgpack':
|
||||
specifier: ^3.1.3
|
||||
version: 3.1.3
|
||||
formidable:
|
||||
specifier: ^3.5.4
|
||||
version: 3.5.4
|
||||
itty-router:
|
||||
specifier: ^5.0.24
|
||||
version: 5.0.24
|
||||
@@ -81,13 +179,6 @@ packages:
|
||||
resolution: {integrity: sha512-47XIizs9XZXvuJgoaJUIE2lFoID8ugvc0jzSHP+Ptfk8nTbnR8g788wv48N03Kx0UkAv559HWRQ3yzOgzlRNUA==}
|
||||
engines: {node: '>= 18'}
|
||||
|
||||
'@noble/hashes@1.8.0':
|
||||
resolution: {integrity: sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A==}
|
||||
engines: {node: ^14.21.3 || >=16}
|
||||
|
||||
'@paralleldrive/cuid2@2.3.1':
|
||||
resolution: {integrity: sha512-XO7cAxhnTZl0Yggq6jOgjiOHhbgcO4NqFqwSmQpjK3b6TEE6Uj/jfSk6wzYyemh3+I0sHirKSetjQwn5cZktFw==}
|
||||
|
||||
'@trivago/prettier-plugin-sort-imports@6.0.2':
|
||||
resolution: {integrity: sha512-3DgfkukFyC/sE/VuYjaUUWoFfuVjPK55vOFDsxD56XXynFMCZDYFogH2l/hDfOsQAm1myoU/1xByJ3tWqtulXA==}
|
||||
engines: {node: '>= 20'}
|
||||
@@ -107,9 +198,6 @@ packages:
|
||||
svelte:
|
||||
optional: true
|
||||
|
||||
asap@2.0.6:
|
||||
resolution: {integrity: sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==}
|
||||
|
||||
balanced-match@1.0.2:
|
||||
resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
|
||||
|
||||
@@ -125,13 +213,6 @@ packages:
|
||||
supports-color:
|
||||
optional: true
|
||||
|
||||
dezalgo@1.0.4:
|
||||
resolution: {integrity: sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig==}
|
||||
|
||||
formidable@3.5.4:
|
||||
resolution: {integrity: sha512-YikH+7CUTOtP44ZTnUhR7Ic2UASBPOqmaRkRKxRbywPTe5VxF7RRCck4af9wutiZ/QKM5nME9Bie2fFaPz5Gug==}
|
||||
engines: {node: '>=14.0.0'}
|
||||
|
||||
itty-router@5.0.24:
|
||||
resolution: {integrity: sha512-PXij1qGKtE6jg3dLgrTRdh/Frovl5Wc4Av67sD2xfhDPrgNt4u79++/il8/c/OfZGkhD/8uYJub8tjo+H165rA==}
|
||||
|
||||
@@ -156,9 +237,6 @@ packages:
|
||||
ms@2.1.3:
|
||||
resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
|
||||
|
||||
once@1.4.0:
|
||||
resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
|
||||
|
||||
parse-imports-exports@0.2.4:
|
||||
resolution: {integrity: sha512-4s6vd6dx1AotCx/RCI2m7t7GCh5bDRUtGNvRfHSP2wbBQdMi67pPe7mtzmgwcaQ8VKK/6IB7Glfyu3qdZJPybQ==}
|
||||
|
||||
@@ -173,9 +251,6 @@ packages:
|
||||
engines: {node: '>=14'}
|
||||
hasBin: true
|
||||
|
||||
wrappy@1.0.2:
|
||||
resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
|
||||
|
||||
snapshots:
|
||||
|
||||
'@babel/code-frame@7.29.7':
|
||||
@@ -241,12 +316,6 @@ snapshots:
|
||||
|
||||
'@msgpack/msgpack@3.1.3': {}
|
||||
|
||||
'@noble/hashes@1.8.0': {}
|
||||
|
||||
'@paralleldrive/cuid2@2.3.1':
|
||||
dependencies:
|
||||
'@noble/hashes': 1.8.0
|
||||
|
||||
'@trivago/prettier-plugin-sort-imports@6.0.2(prettier@3.9.6)':
|
||||
dependencies:
|
||||
'@babel/generator': 7.29.8
|
||||
@@ -261,8 +330,6 @@ snapshots:
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
|
||||
asap@2.0.6: {}
|
||||
|
||||
balanced-match@1.0.2: {}
|
||||
|
||||
brace-expansion@2.1.4:
|
||||
@@ -273,17 +340,6 @@ snapshots:
|
||||
dependencies:
|
||||
ms: 2.1.3
|
||||
|
||||
dezalgo@1.0.4:
|
||||
dependencies:
|
||||
asap: 2.0.6
|
||||
wrappy: 1.0.2
|
||||
|
||||
formidable@3.5.4:
|
||||
dependencies:
|
||||
'@paralleldrive/cuid2': 2.3.1
|
||||
dezalgo: 1.0.4
|
||||
once: 1.4.0
|
||||
|
||||
itty-router@5.0.24: {}
|
||||
|
||||
javascript-natural-sort@0.7.1: {}
|
||||
@@ -300,10 +356,6 @@ snapshots:
|
||||
|
||||
ms@2.1.3: {}
|
||||
|
||||
once@1.4.0:
|
||||
dependencies:
|
||||
wrappy: 1.0.2
|
||||
|
||||
parse-imports-exports@0.2.4:
|
||||
dependencies:
|
||||
parse-statements: 1.0.11
|
||||
@@ -313,5 +365,3 @@ snapshots:
|
||||
picocolors@1.1.1: {}
|
||||
|
||||
prettier@3.9.6: {}
|
||||
|
||||
wrappy@1.0.2: {}
|
||||
|
||||
+81
-24
@@ -239,6 +239,17 @@ switch (emulate_esp) {
|
||||
// GLOBAL VARIABLES
|
||||
let countWifiScanPoll = 0; // wifi network scan
|
||||
let countHardwarePoll = 0; // for during an upload
|
||||
let pendingFirmwareMd5 = false; // set by a .md5 upload, cleared by the next .bin
|
||||
|
||||
const VALID_UPLOAD_EXTENSIONS = new Set(['bin', 'json', 'md5']);
|
||||
|
||||
function parseMd5Digest(text: string): string | null {
|
||||
const token = text.trim().split(/\s+/)[0];
|
||||
if (/^[0-9a-fA-F]{32}$/.test(token)) {
|
||||
return token.toLowerCase();
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
// DeviceTypes
|
||||
const enum ScheduleFlag {
|
||||
@@ -329,10 +340,10 @@ function updateMask(entity: any, de: any, dd: any) {
|
||||
const old_custom_name = dd.nodes[dd_objIndex].cn;
|
||||
console.log(
|
||||
'comparing names, old (' +
|
||||
old_custom_name +
|
||||
') with new (' +
|
||||
new_custom_name +
|
||||
')'
|
||||
old_custom_name +
|
||||
') with new (' +
|
||||
new_custom_name +
|
||||
')'
|
||||
);
|
||||
if (old_custom_name !== new_custom_name) {
|
||||
changed = true;
|
||||
@@ -434,24 +445,28 @@ function upgradeImportantMessages(version: string) {
|
||||
// 0 is do nothing
|
||||
// 1 means 3.9 and factory reset required
|
||||
// 2 means a major version upgrade
|
||||
|
||||
let upgradeImportantMessageType_n = 0;
|
||||
|
||||
// see if its a filename with a .bin extension
|
||||
if (version.endsWith('.bin')) {
|
||||
upgradeImportantMessageType_n = 1; // make it 1, for testing, meaning factory reset required
|
||||
} else if (version.endsWith('.md')) {
|
||||
upgradeImportantMessageType_n = 0; // use default 0, no message
|
||||
// check file extensions
|
||||
if (version.endsWith('.md5') || version.endsWith('.json')) {
|
||||
upgradeImportantMessageType_n = 0; // digest / backup restore: no upgrade warning
|
||||
} else if (version.endsWith('.bin')) {
|
||||
// extract the version number from the filename and if its going from 3.8.x to 3.9.x, then set upgradeImportantMessageType_n to 1
|
||||
const versionNumber = version.split('.');
|
||||
if (versionNumber[0] === '3' && versionNumber[1] === '8') {
|
||||
upgradeImportantMessageType_n = 1; // make it 1, factory reset required
|
||||
}
|
||||
} else {
|
||||
// this is a version string like "3.9.0"
|
||||
// upgradeImportantMessageType_n = 2; // make it 2, for testing, meaning a major version upgrade
|
||||
upgradeImportantMessageType_n = 1; // make it 1, for testing, meaning a factory reset is required
|
||||
}
|
||||
|
||||
console.log(
|
||||
'upgradeImportantMessageType: version=' +
|
||||
version +
|
||||
' type=' +
|
||||
upgradeImportantMessageType_n
|
||||
version +
|
||||
' type=' +
|
||||
upgradeImportantMessageType_n
|
||||
);
|
||||
return { upgradeImportantMessageType: upgradeImportantMessageType_n };
|
||||
}
|
||||
@@ -502,17 +517,17 @@ function get_versions() {
|
||||
|
||||
console.log(
|
||||
'getVersions: current=' +
|
||||
THIS_VERSION +
|
||||
' stable=' +
|
||||
LATEST_STABLE_VERSION +
|
||||
' (upgradeable=' +
|
||||
(STABLE_VERSION_IS_UPGRADEABLE ? 'YES' : 'NO') +
|
||||
') dev=' +
|
||||
LATEST_DEV_VERSION +
|
||||
' (upgradeable=' +
|
||||
(DEV_VERSION_IS_UPGRADEABLE ? 'YES' : 'NO') +
|
||||
')' +
|
||||
(MOCK_OFFLINE ? ' [offline]' : '')
|
||||
THIS_VERSION +
|
||||
' stable=' +
|
||||
LATEST_STABLE_VERSION +
|
||||
' (upgradeable=' +
|
||||
(STABLE_VERSION_IS_UPGRADEABLE ? 'YES' : 'NO') +
|
||||
') dev=' +
|
||||
LATEST_DEV_VERSION +
|
||||
' (upgradeable=' +
|
||||
(DEV_VERSION_IS_UPGRADEABLE ? 'YES' : 'NO') +
|
||||
')' +
|
||||
(MOCK_OFFLINE ? ' [offline]' : '')
|
||||
);
|
||||
return data;
|
||||
}
|
||||
@@ -774,6 +789,7 @@ const EMSESP_COMMANDS_ENDPOINT = REST_ENDPOINT_ROOT + 'commands';
|
||||
const EMSESP_CUSTOMENTITIES_ENDPOINT = REST_ENDPOINT_ROOT + 'customEntities';
|
||||
const EMSESP_MODULES_ENDPOINT = REST_ENDPOINT_ROOT + 'modules';
|
||||
const EMSESP_ACTION_ENDPOINT = REST_ENDPOINT_ROOT + 'action';
|
||||
const EMSESP_UPLOAD_FILE_ENDPOINT = REST_ENDPOINT_ROOT + 'uploadFile';
|
||||
|
||||
// these are used in the API calls only
|
||||
const EMSESP_SYSTEM_INFO_ENDPOINT = API_ENDPOINT_ROOT + 'system/info';
|
||||
@@ -4637,6 +4653,47 @@ router
|
||||
|
||||
// SYSTEM and SETTINGS
|
||||
router
|
||||
.post(EMSESP_UPLOAD_FILE_ENDPOINT, async (request: Request) => {
|
||||
const formData = await request.formData();
|
||||
const uploaded = formData.get('file');
|
||||
if (!uploaded || typeof uploaded === 'string') {
|
||||
return status(400);
|
||||
}
|
||||
|
||||
const fileName = uploaded.name || '';
|
||||
const fileExtension = fileName.includes('.')
|
||||
? fileName.substring(fileName.lastIndexOf('.') + 1).toLowerCase()
|
||||
: '';
|
||||
console.log(
|
||||
`File uploaded: ${fileName} (${fileExtension}, ${uploaded.size} bytes)`
|
||||
);
|
||||
|
||||
if (!VALID_UPLOAD_EXTENSIONS.has(fileExtension)) {
|
||||
console.log('Invalid file extension');
|
||||
return status(406);
|
||||
}
|
||||
|
||||
if (fileExtension === 'md5') {
|
||||
const digest = parseMd5Digest(await uploaded.text());
|
||||
if (!digest) {
|
||||
console.log('Invalid MD5 digest file');
|
||||
return status(406);
|
||||
}
|
||||
pendingFirmwareMd5 = true;
|
||||
console.log('MD5 digest received', digest);
|
||||
return { md5: digest };
|
||||
}
|
||||
|
||||
if (fileExtension === 'bin' && pendingFirmwareMd5) {
|
||||
pendingFirmwareMd5 = false;
|
||||
console.log('Firmware MD5 matches');
|
||||
return { md5_ok: true };
|
||||
}
|
||||
|
||||
pendingFirmwareMd5 = false;
|
||||
console.log('File uploaded successfully!');
|
||||
return status(200);
|
||||
})
|
||||
.get(ACTIVITY_ENDPOINT, () => activity)
|
||||
.get(SYSTEM_STATUS_ENDPOINT, async () => {
|
||||
if (countHardwarePoll >= 2) {
|
||||
|
||||
+4
-2
@@ -744,7 +744,7 @@ mlongcalls
|
||||
mmio
|
||||
mmode
|
||||
mmplus
|
||||
mockserver
|
||||
mockServer
|
||||
modbus
|
||||
modee
|
||||
modetype
|
||||
@@ -1347,4 +1347,6 @@ roomtempoffset
|
||||
dhcpc
|
||||
wifioff
|
||||
autonegotiation
|
||||
Mbit
|
||||
Mbit
|
||||
WROVER
|
||||
OLIMEXPOEW
|
||||
@@ -84,7 +84,7 @@ void MqttSettingsService::loop() {
|
||||
}
|
||||
if (_reconfigureMqtt || (_disconnectedAt && static_cast<uint32_t>(uuid::get_uptime() - _disconnectedAt) >= MQTT_RECONNECTION_DELAY)) {
|
||||
// configure MQTT client
|
||||
if (_reconfigureMqtt) {
|
||||
if (_reconfigureMqtt && _state.enabled) {
|
||||
emsesp::EMSESP::logger().info("Starting MQTT service");
|
||||
}
|
||||
_disconnectedAt = configureMqtt() ? 0 : uuid::get_uptime();
|
||||
@@ -130,6 +130,7 @@ MqttClient * MqttSettingsService::getMqttClient() {
|
||||
void MqttSettingsService::onMqttConnect(bool sessionPresent) {
|
||||
(void)sessionPresent;
|
||||
emsesp::EMSESP::mqtt_.on_connect();
|
||||
_disconnectReason = espMqttClientTypes::DisconnectReason::USER_OK;
|
||||
}
|
||||
|
||||
void MqttSettingsService::onMqttDisconnect(espMqttClientTypes::DisconnectReason reason) {
|
||||
@@ -158,6 +159,9 @@ bool MqttSettingsService::configureMqtt() {
|
||||
emsesp::EMSESP::logger().debug("Disconnecting to configure");
|
||||
#endif
|
||||
_mqttClient->disconnect(true);
|
||||
if (!_state.enabled) {
|
||||
emsesp::EMSESP::logger().info("Stopping MQTT client");
|
||||
}
|
||||
}
|
||||
|
||||
// only connect if WiFi is connected and MQTT is enabled
|
||||
|
||||
@@ -13,10 +13,32 @@ static String getFilenameExtension(const String & filename) {
|
||||
return {};
|
||||
}
|
||||
|
||||
// Accepts a raw 32-char hex digest, optionally with trailing newline or a GNU "hash filename" suffix.
|
||||
static bool parseMd5Digest(const uint8_t * data, size_t len, std::array<char, 33> & out) {
|
||||
size_t i = 0;
|
||||
while (i < len && (data[i] == ' ' || data[i] == '\t' || data[i] == '\r' || data[i] == '\n')) {
|
||||
++i;
|
||||
}
|
||||
if (len - i < 32) {
|
||||
return false;
|
||||
}
|
||||
for (size_t n = 0; n < 32; n++) {
|
||||
const char c = static_cast<char>(data[i + n]);
|
||||
const bool hex = (c >= '0' && c <= '9') || (c >= 'a' && c <= 'f') || (c >= 'A' && c <= 'F');
|
||||
if (!hex) {
|
||||
return false;
|
||||
}
|
||||
out[n] = (c >= 'A' && c <= 'F') ? static_cast<char>(c - 'A' + 'a') : c;
|
||||
}
|
||||
out[32] = '\0';
|
||||
return true;
|
||||
}
|
||||
|
||||
UploadFileService::UploadFileService(AsyncWebServer * server, SecurityManager * securityManager)
|
||||
: _securityManager(securityManager)
|
||||
, _is_firmware(false)
|
||||
, _is_filesystem(false)
|
||||
, _md5_applied(false)
|
||||
, _md5() {
|
||||
server->on(
|
||||
UPLOAD_FILE_PATH,
|
||||
@@ -48,18 +70,23 @@ void UploadFileService::handleUpload(AsyncWebServerRequest * request, const Stri
|
||||
// LittleFS filesystem image
|
||||
_is_filesystem = true;
|
||||
_md5[0] = '\0'; // clear any stale md5 so Update.end() doesn't compare against it
|
||||
_md5_applied = false;
|
||||
} else if ((extension == "bin") && (filesize > 1000000)) {
|
||||
_is_firmware = true;
|
||||
} else if (extension == "json") {
|
||||
_md5[0] = '\0'; // clear md5
|
||||
_md5[0] = '\0'; // clear md5
|
||||
_md5_applied = false;
|
||||
} else if (extension == "md5") {
|
||||
if (len == _md5.size() - 1) {
|
||||
std::memcpy(_md5.data(), data, _md5.size() - 1);
|
||||
_md5.back() = '\0';
|
||||
if (!parseMd5Digest(data, len, _md5)) {
|
||||
emsesp::EMSESP::logger().err("Invalid MD5 digest file");
|
||||
handleError(request, 406); // Not Acceptable
|
||||
} else {
|
||||
emsesp::EMSESP::logger().info("MD5 digest received (%s). Now upload the firmware BIN", _md5.data());
|
||||
}
|
||||
return;
|
||||
} else {
|
||||
_md5.front() = '\0';
|
||||
_md5_applied = false;
|
||||
emsesp::EMSESP::logger().err("Unsupported file type: %s, size: %u", filename.c_str(), filesize);
|
||||
handleError(request, 406); // Not Acceptable - unsupported file type
|
||||
return;
|
||||
@@ -103,9 +130,11 @@ void UploadFileService::handleUpload(AsyncWebServerRequest * request, const Stri
|
||||
emsesp::EMSESP::system_.systemStatus(emsesp::SYSTEM_STATUS::SYSTEM_STATUS_UPLOADING);
|
||||
|
||||
if (Update.begin(filesize - sizeof(esp_image_header_t))) {
|
||||
_md5_applied = false;
|
||||
if (strlen(_md5.data()) == _md5.size() - 1) {
|
||||
Update.setMD5(_md5.data());
|
||||
_md5.front() = '\0';
|
||||
_md5_applied = true;
|
||||
emsesp::EMSESP::logger().info("Firmware MD5 check enabled (%s)", _md5.data());
|
||||
}
|
||||
request->onDisconnect([this] { handleDisconnect(); }); // success, let's make sure we end the update if the client hangs up
|
||||
} else {
|
||||
@@ -183,8 +212,19 @@ void UploadFileService::uploadComplete(AsyncWebServerRequest * request) {
|
||||
emsesp::EMSESP::nvs_.putBool(emsesp::EMSESP_NVS_BOOT_NEW_FIRMWARE, true);
|
||||
}
|
||||
|
||||
AsyncWebServerResponse * response = request->beginResponse(200);
|
||||
request->send(response);
|
||||
if (_is_firmware && _md5_applied) {
|
||||
emsesp::EMSESP::logger().info("Firmware MD5 matches");
|
||||
auto * response = new emsesp::PsramAsyncJsonResponse(false);
|
||||
JsonObject root = response->getRoot();
|
||||
root["md5_ok"] = true;
|
||||
response->setLength();
|
||||
request->send(response);
|
||||
_md5.front() = '\0';
|
||||
_md5_applied = false;
|
||||
} else {
|
||||
AsyncWebServerResponse * response = request->beginResponse(200);
|
||||
request->send(response);
|
||||
}
|
||||
emsesp::EMSESP::system_.systemStatus(
|
||||
emsesp::SYSTEM_STATUS::SYSTEM_STATUS_PENDING_RESTART); // will be handled by the main loop. We use pending for the Web's SystemMonitor
|
||||
return;
|
||||
|
||||
@@ -23,6 +23,7 @@ class UploadFileService {
|
||||
SecurityManager * _securityManager;
|
||||
bool _is_firmware;
|
||||
bool _is_filesystem;
|
||||
bool _md5_applied; // true if an MD5 digest was applied to the current firmware upload
|
||||
std::array<char, 33> _md5;
|
||||
|
||||
void handleUpload(AsyncWebServerRequest * request, const String & filename, size_t index, uint8_t * data, size_t len, bool final);
|
||||
|
||||
+28
-29
@@ -295,36 +295,35 @@ static void setup_commands(std::shared_ptr<Commands> const & commands) {
|
||||
});
|
||||
|
||||
|
||||
commands->add_command(
|
||||
ShellContext::MAIN,
|
||||
CommandFlags::ADMIN,
|
||||
string_vector{F_(set), F_(board_profile)},
|
||||
{F_(name_mandatory)},
|
||||
[](Shell & shell, const std::vector<std::string> & arguments) {
|
||||
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());
|
||||
if (!EMSESP::system_.load_board_profile(data, board_profile)) {
|
||||
shell.println(
|
||||
"Invalid board profile (S32, E32, E32V2, E32V2_2, MH-ET, NODEMCU, LOLIN, OLIMEX, OLIMEXPOE, C3MINI, S2MINI, S3MINI, S32S3, CUSTOM)");
|
||||
return;
|
||||
}
|
||||
commands->add_command(ShellContext::MAIN,
|
||||
CommandFlags::ADMIN,
|
||||
string_vector{F_(set), F_(board_profile)},
|
||||
{F_(name_mandatory)},
|
||||
[](Shell & shell, const std::vector<std::string> & arguments) {
|
||||
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());
|
||||
if (!EMSESP::system_.load_board_profile(data, board_profile)) {
|
||||
shell.println("Invalid board profile (S32, E32, E32V2, E32V2_2, MH-ET, NODEMCU, LOLIN, OLIMEX, OLIMEXPOE, OLIMEXPOEW, "
|
||||
"C3MINI, S2MINI, S3MINI, S32S3, CUSTOM)");
|
||||
return;
|
||||
}
|
||||
|
||||
EMSESP::webSettingsService.update([&](WebSettings & settings) {
|
||||
settings.board_profile = board_profile.c_str();
|
||||
settings.led_gpio = data[0];
|
||||
settings.dallas_gpio = data[1];
|
||||
settings.rx_gpio = data[2];
|
||||
settings.tx_gpio = data[3];
|
||||
settings.pbutton_gpio = data[4];
|
||||
settings.phy_type = data[5];
|
||||
settings.eth_power = data[6]; // can be -1
|
||||
settings.eth_phy_addr = data[7];
|
||||
settings.eth_clock_mode = data[8];
|
||||
return StateUpdateResult::CHANGED;
|
||||
});
|
||||
shell.printfln("Loaded board profile %s. Restarting...", board_profile.c_str());
|
||||
EMSESP::system_.system_restart();
|
||||
});
|
||||
EMSESP::webSettingsService.update([&](WebSettings & settings) {
|
||||
settings.board_profile = board_profile.c_str();
|
||||
settings.led_gpio = data[0];
|
||||
settings.dallas_gpio = data[1];
|
||||
settings.rx_gpio = data[2];
|
||||
settings.tx_gpio = data[3];
|
||||
settings.pbutton_gpio = data[4];
|
||||
settings.phy_type = data[5];
|
||||
settings.eth_power = data[6]; // can be -1
|
||||
settings.eth_phy_addr = data[7];
|
||||
settings.eth_clock_mode = data[8];
|
||||
return StateUpdateResult::CHANGED;
|
||||
});
|
||||
shell.printfln("Loaded board profile %s. Restarting...", board_profile.c_str());
|
||||
EMSESP::system_.system_restart();
|
||||
});
|
||||
|
||||
commands->add_command(
|
||||
ShellContext::MAIN,
|
||||
|
||||
+8
-12
@@ -1740,15 +1740,16 @@ void EMSESP::start() {
|
||||
bool factory_settings = false;
|
||||
#endif
|
||||
|
||||
// #if defined(EMSESP_DEBUG)
|
||||
// LOG_DEBUG("Listing root directory before:");
|
||||
// system_.listDir("/", 3); // show the contents of the root directory
|
||||
// #endif
|
||||
|
||||
// start NVS storage
|
||||
if (!nvs_.begin("ems-esp", false, "nvs1")) { // try bigger nvs partition on 16M flash first
|
||||
nvs_.begin("ems-esp", false, "nvs"); // fallback to small nvs
|
||||
#ifndef EMSESP_STANDALONE
|
||||
if (esp_partition_find(ESP_PARTITION_TYPE_DATA, ESP_PARTITION_SUBTYPE_DATA_NVS, "nvs1")) {
|
||||
nvs_.begin("ems-esp", false, "nvs1");
|
||||
} else {
|
||||
nvs_.begin("ems-esp", false, "nvs"); // fallback to small nvs
|
||||
}
|
||||
#else
|
||||
nvs_.begin("ems-esp", false, "nvs");
|
||||
#endif
|
||||
|
||||
// set valid GPIOs list based on ESP32 chip/platform type
|
||||
system_.set_valid_system_gpios();
|
||||
@@ -1759,11 +1760,6 @@ void EMSESP::start() {
|
||||
// loads core system services settings (mqtt, ap, ntp etc)
|
||||
esp32React.begin();
|
||||
|
||||
// #if defined(EMSESP_DEBUG)
|
||||
// LOG_DEBUG("Listing root directory after:");
|
||||
// system_.listDir("/", 3); // show the contents of the root directory
|
||||
// #endif
|
||||
|
||||
#ifndef EMSESP_STANDALONE
|
||||
if (factory_settings) {
|
||||
LOG_WARNING("No settings found on filesystem. Using factory settings.");
|
||||
|
||||
@@ -430,7 +430,7 @@ MAKE_TRANSLATION(pumpMode, "pumpmode", "boiler pump mode", "Kesselpumpenmodus",
|
||||
MAKE_TRANSLATION(pumpCharacter, "pumpcharacter", "boiler pump characteristic", "Charakteristik der Kesselpumpe", "karakteristiek ketelpomp", "pannpumpsegenskaper", "charakterystyka pompy kotłowej", "kjelepumpekarakteristikk", "caractéristique de la pompe de la chaudière", "kazan pompası karakteristiği", "caratteristica della pompa della caldaia", "charakteristika kotlového čerpadla", "charakteristika čerpadla kotle")
|
||||
MAKE_TRANSLATION(pumpOnTemp, "pumpontemp", "pump logic temperature", "Pumpenlogiktemperatur", "pomplogica temperatuur", "Pumplogiktemperatur", "temperatura logiki pompy", "pumpelogikktemperatur", "température logique pompe", "pompa mantık sıcaklığı", "temperatura logica pompa", "teplota logiky čerpadla", "teplota logiky čerpadla")
|
||||
MAKE_TRANSLATION(headertemp, "headertemp", "low loss header", "Hydr. Weiche", "open verdeler", "Fördelare", "sprzęgło hydrauliczne", "lav tap header", "bouteille de déc. hydr.", "isı bloğu gidiş suyu sıc.", "comp. idr.", "nízkostratová hlavica", "hydraulický oddělovač")
|
||||
MAKE_TRANSLATION(heatblock, "heatblock", "Heatblok temperature", "Wärmeblocktemperatur", "Aanvoertemp. warmtecel", "Värmeblock", "blok grzewczy", "varmeblokk", "départ corps de chauffe", "Hid.denge kabı sıcaklığı", "mandata scamb. pr.", "vykurovací blok", "blok topení")
|
||||
MAKE_TRANSLATION(heatblock, "heatblock", "Heatblock temperature", "Wärmeblocktemperatur", "Heatblock temperatuur", "Värmeblocktemperatur", "temperatura bloku grzewczego", "varmeblokk temperatur", "température du bloc chauffant", "ısı bloğu sıcaklığı", "temperatura blocco riscaldante", "teplota tepelného bloku", "teplota tepelného bloku")
|
||||
MAKE_TRANSLATION(pumpKickHour, "pumpkickhour", "pump kick hour", "Stunde Pumpkick")
|
||||
MAKE_TRANSLATION(pumpKickDay, "pumpkickday", "pump kick day", "Tag Pumpkick")
|
||||
MAKE_TRANSLATION(pumpKickDelay, "pumpkickdelay", "pump kick delay", "Pause vor Pumpkick")
|
||||
|
||||
+11
-1
@@ -229,9 +229,14 @@ void Network::reconnect() {
|
||||
// boards without an Ethernet PHY skip straight to WIFI; without a configured SSID, straight to AP
|
||||
// (unless AP provision mode is Never — then stay on WIFI and keep waiting)
|
||||
NetPhase Network::initialPhase() const {
|
||||
if (phy_type_ != PHY_type::PHY_TYPE_NONE) {
|
||||
#if CONFIG_IDF_TARGET_ESP32
|
||||
|
||||
bool eth_clock_conflicts_psram =
|
||||
ESP.getPsramSize() && ((eth_clock_mode_t)eth_clock_mode_ == ETH_CLOCK_GPIO16_OUT || (eth_clock_mode_t)eth_clock_mode_ == ETH_CLOCK_GPIO17_OUT);
|
||||
if (phy_type_ != PHY_type::PHY_TYPE_NONE && !eth_clock_conflicts_psram) {
|
||||
return NetPhase::ETHERNET;
|
||||
}
|
||||
#endif
|
||||
if (!ssid_.isEmpty() || ap_provisionMode_ == AP_MODE_NEVER) {
|
||||
return NetPhase::WIFI;
|
||||
}
|
||||
@@ -600,6 +605,11 @@ void Network::startEthernet() {
|
||||
return;
|
||||
}
|
||||
|
||||
if (ESP.getPsramSize() && ((eth_clock_mode_t)eth_clock_mode_ == ETH_CLOCK_GPIO16_OUT || (eth_clock_mode_t)eth_clock_mode_ == ETH_CLOCK_GPIO17_OUT)) {
|
||||
LOG_ERROR("Ethernet clock mode %d (GPIO16/17) conflicts with PSRAM - disabling Ethernet", eth_clock_mode_);
|
||||
return;
|
||||
}
|
||||
|
||||
/*
|
||||
// The Tasmota SDK is built with CONFIG_ESP32_UNIVERSAL_MAC_ADDRESSES=2, so the Ethernet MAC is derived as
|
||||
// a locally-administered address from base+1 instead of the universal base+3 that Arduino Core 2 used.
|
||||
|
||||
+7
-21
@@ -867,7 +867,7 @@ bool System::loop() {
|
||||
void System::send_info_mqtt() {
|
||||
static uint8_t _connection = 0;
|
||||
uint8_t connection = (EMSESP::network_.ethernet_connected() ? 1 : 0) + (EMSESP::network_.wifi_connected() ? 2 : 0) + (ntp_connected_ ? 4 : 0)
|
||||
+ (EMSESP::network_.has_ipv6() ? 8 : 0);
|
||||
+ (EMSESP::network_.has_ipv6() ? 8 : 0);
|
||||
// check if connection status has changed
|
||||
if (!Mqtt::connected() || connection == _connection) {
|
||||
return;
|
||||
@@ -1092,6 +1092,7 @@ void System::show_system(uuid::console::Shell & shell) {
|
||||
shell.println();
|
||||
shell.println("System:");
|
||||
shell.printfln(" Version: %s", EMSESP_APP_VERSION);
|
||||
shell.printfln(" System name: %s", system_name_.c_str());
|
||||
#ifndef EMSESP_STANDALONE
|
||||
shell.printfln(" Platform: %s (%s)", EMSESP_PLATFORM, ESP.getChipModel());
|
||||
shell.printfln(" Model: %s", getBBQKeesGatewayDetails().c_str());
|
||||
@@ -1978,24 +1979,6 @@ bool System::command_service(const char * cmd, const char * value) {
|
||||
}
|
||||
}
|
||||
|
||||
int n;
|
||||
if (!ok && Helpers::value2number(value, n)) {
|
||||
#ifndef EMSESP_STANDALONE
|
||||
if (!strcmp(cmd, "fuse/mfg")) {
|
||||
ok = esp_efuse_write_reg(EFUSE_BLK3, 0, (uint32_t)n) == ESP_OK;
|
||||
ok ? LOG_INFO("fuse programed with value '%X': successful", n) : LOG_ERROR("fuse programed with value '%X': failed", n);
|
||||
}
|
||||
if (!strcmp(cmd, "fuse/mfgadd")) {
|
||||
uint8_t reg = 0;
|
||||
while (esp_efuse_read_reg(EFUSE_BLK3, reg) != 0 && reg < 7)
|
||||
reg++;
|
||||
ok = esp_efuse_write_reg(EFUSE_BLK3, reg, (uint32_t)n) == ESP_OK;
|
||||
ok ? LOG_INFO("fuse %d programed with value '%X': successful", reg, n) : LOG_ERROR("fuse %d programed with value '%X': failed", reg, n);
|
||||
return true;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
if (ok) {
|
||||
LOG_INFO("System command '%s' with value '%s'", cmd, value);
|
||||
}
|
||||
@@ -2822,6 +2805,9 @@ bool System::load_board_profile(std::vector<int8_t> & data, const std::string &
|
||||
// https://github.com/OLIMEX/ESP32-POE/blob/master/HARDWARE/ESP32-PoE-hardware-revision-L1/ESP32-PoE_Rev_L1.pdf
|
||||
// uart0 = 1, 3; SD-card = 2, 14, 15; button = 34;
|
||||
valid_system_gpios_ = {4, 34, 36, 12, 13, 21, 22, 25, 26, 27, 32, 33, 39};
|
||||
} else if (board_profile == "OLIMEXPOEW") {
|
||||
data = {0, 0, 36, 4, 34, PHY_type::PHY_TYPE_LAN8720, 12, 0, 1, 0}; // Olimex ESP32-POE-ISO WROVER (PSRAM)
|
||||
valid_system_gpios_ = {4, 34, 36, 12, 13, 21, 22, 25, 26, 27, 32, 33, 39};
|
||||
} else if (board_profile == "C3MINI") {
|
||||
#if defined(BOARD_C3_MINI_V1)
|
||||
data = {7, 1, 4, 5, 9, PHY_type::PHY_TYPE_NONE, 0, 0, 0, 0}; // Lolin C3 Mini V1
|
||||
@@ -2914,7 +2900,7 @@ bool System::command_txpause(const char * value, const int8_t) {
|
||||
return true;
|
||||
}
|
||||
|
||||
// format command - factory reset, removing all config files
|
||||
// format command - factory reset, removing all settings files
|
||||
bool System::command_format(const char * value, const int8_t id) {
|
||||
if (EMSESP::system_.disable_reset()) {
|
||||
LOG_NOTICE("Factory reset disabled");
|
||||
@@ -2924,7 +2910,7 @@ bool System::command_format(const char * value, const int8_t id) {
|
||||
#if !defined(EMSESP_STANDALONE) && !defined(EMSESP_TEST)
|
||||
// don't really format the filesystem in test or standalone mode
|
||||
if (LittleFS.format()) {
|
||||
LOG_INFO("Filesystem formatted successfully. All config files removed.");
|
||||
LOG_INFO("Filesystem formatted successfully. All settings files removed.");
|
||||
} else {
|
||||
LOG_ERROR("Format failed");
|
||||
}
|
||||
|
||||
@@ -935,7 +935,7 @@ bool Solar::set_heatTransferSystem(const char * value, const int8_t id) {
|
||||
if (!Helpers::value2bool(value, b)) {
|
||||
return false;
|
||||
}
|
||||
write_command(0x358, 5, b ? 0x01 : 0x00, 0x358);
|
||||
write_command(0x358, 5, b ? 0xFF : 0x00); // change is broadcasted
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -945,7 +945,7 @@ bool Solar::set_externalCyl(const char * value, const int8_t id) {
|
||||
if (!Helpers::value2bool(value, b)) {
|
||||
return false;
|
||||
}
|
||||
write_command(0x358, 9, b ? 0x01 : 0x00, 0x358);
|
||||
write_command(0x358, 9, b ? 0xFF : 0x00); // change is broadcasted
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -955,7 +955,7 @@ bool Solar::set_thermalDisinfect(const char * value, const int8_t id) {
|
||||
if (!Helpers::value2bool(value, b)) {
|
||||
return false;
|
||||
}
|
||||
write_command(0x358, 10, b ? 0x01 : 0x00, 0x358);
|
||||
write_command(0x358, 10, b ? 0xFF : 0x00); // change is broadcasted
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -965,7 +965,7 @@ bool Solar::set_heatMetering(const char * value, const int8_t id) {
|
||||
if (!Helpers::value2bool(value, b)) {
|
||||
return false;
|
||||
}
|
||||
write_command(0x358, 14, b ? 0x01 : 0x00, 0x358);
|
||||
write_command(0x358, 14, b ? 0xFF : 0x00); // change is broadcasted
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -978,7 +978,7 @@ bool Solar::set_solarEnabled(const char * value, const int8_t id) {
|
||||
if (flags() == EMSdevice::EMS_DEVICE_FLAG_SM10) {
|
||||
write_command(0x96, 0, b ? 0xFF : 0x00, 0x96);
|
||||
} else {
|
||||
write_command(0x358, 19, b ? 0x01 : 0x00, 0x358);
|
||||
write_command(0x358, 19, b ? 0xFF : 0x00); // change is broadcasted
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -1 +1 @@
|
||||
#define EMSESP_APP_VERSION "3.9.0-dev.7"
|
||||
#define EMSESP_APP_VERSION "3.9.0-dev.8"
|
||||
|
||||
Reference in New Issue
Block a user