4118 Commits

Author SHA1 Message Date
proddy
f444ca31e0 Merge remote-tracking branch 'origin/dev' 2024-10-27 11:41:47 +01:00
Proddy
3cd67741d6 Merge pull request #2143 from proddy/dev
minor UI changes
2024-10-27 10:52:35 +01:00
proddy
4a4ea0e749 change text for customizations/rename 2024-10-27 10:48:11 +01:00
proddy
13a24e4d85 update test data 2024-10-27 10:47:51 +01:00
proddy
72a515faab formatting text 2024-10-27 10:47:39 +01:00
proddy
4fdf1d810e tidy up rename buttons 2024-10-27 10:47:23 +01:00
Proddy
d440e6dc9a Merge pull request #2141 from proddy/dev
prepare 3.7.0
2024-10-26 20:56:23 +02:00
proddy
8a12248bc5 auto generated 2024-10-26 20:52:46 +02:00
proddy
997b05528b bump version 2024-10-26 20:50:01 +02:00
proddy
8bb8dae763 auto generated 2024-10-26 20:49:54 +02:00
proddy
9eb71cfe95 enclose device name in quotes, as we now use commas and it breaks csv 2024-10-26 20:49:45 +02:00
proddy
21c6742725 change show commands text 2024-10-26 20:49:23 +02:00
proddy
1809ceb380 10 -> 11 languages supported 2024-10-26 20:49:12 +02:00
proddy
4a1b78636b updated scripts - adding missing entities to modbus 2024-10-26 20:48:53 +02:00
proddy
0521bbb66e test version to 3.7.0 2024-10-26 20:48:39 +02:00
proddy
0ab8692e36 updated 3.7.0 screenshots 2024-10-26 20:48:14 +02:00
proddy
5a659ff6c9 package update 2024-10-26 20:48:01 +02:00
proddy
fbc2e40fba change comments 2024-10-26 20:47:49 +02:00
proddy
e8e73e1b83 package update 2024-10-26 11:14:56 +02:00
Proddy
76af1b73c1 Merge pull request #2139 from MichaelDvP/dev
cz translation #2096, MH210 mapping #2138
2024-10-25 18:17:28 +02:00
MichaelDvP
108f91b44f map MH210 prod.248, id 0x20 as mixer, #2138 2024-10-25 17:40:03 +02:00
MichaelDvP
eaeecc2f84 update cz entity translations from @skylk 2024-10-25 17:38:58 +02:00
MichaelDvP
698ab4b72e update pkg 2024-10-25 17:38:05 +02:00
Proddy
b2c5a387bb Merge pull request #2134 from MichaelDvP/dev
16MB partitions
2024-10-24 09:25:51 +02:00
MichaelDvP
f901559499 Merge branch 'dev' of https://github.com/emsesp/EMS-ESP32 into dev 2024-10-24 08:02:42 +02:00
MichaelDvP
2d4fb09e0e partitions 16MB 2024-10-24 07:35:17 +02:00
MichaelDvP
c3ee89e8cd add CR10H 2024-10-24 07:34:45 +02:00
Proddy
33884a9c94 Merge pull request #2133 from proddy/dev
updates
2024-10-23 21:23:40 +02:00
proddy
0d43703f16 make unknown - #2124 2024-10-23 17:49:16 +02:00
proddy
d248d5cc21 add comment 2024-10-23 17:48:59 +02:00
proddy
03445377b5 update dictionary 2024-10-23 17:48:47 +02:00
proddy
bf1c2b8a6c update package 2024-10-23 17:48:39 +02:00
proddy
3535e4eeee remove debug line 2024-10-23 15:02:44 +02:00
Proddy
db86c564b3 Merge branch 'emsesp:dev' into dev 2024-10-23 10:24:12 +02:00
Proddy
003ab39c97 Merge pull request #2131 from MichaelDvP/dev
update changelog
2024-10-23 09:14:02 +02:00
MichaelDvP
5c3441aa88 update changelog 2024-10-23 08:42:06 +02:00
Proddy
2d0de0d976 Merge branch 'emsesp:dev' into dev 2024-10-22 22:08:38 +02:00
Proddy
16be0e1cbc Merge pull request #2129 from MichaelDvP/dev
scheduler functions #2115, uptime notset-value #2109, device custom name #2073
2024-10-22 22:08:10 +02:00
Proddy
68c924427e Merge pull request #2128 from mattreim/dev
i18n fullstops remove
2024-10-22 21:55:08 +02:00
MichaelDvP
a9d5133917 cz entitiy translations from #2096 2024-10-22 20:03:57 +02:00
mattreim
185188d964 i18n fullstops remove
There were still a few missing.
2024-10-22 18:37:39 +02:00
MichaelDvP
f12cbb1f32 Merge branch 'dev' of https://github.com/emsesp/EMS-ESP32 into dev 2024-10-22 18:36:13 +02:00
proddy
808385fb8a update spellings 2024-10-22 17:41:27 +02:00
Proddy
98b544d789 Merge pull request #2127 from proddy/dev
bump version to 3.7.0-dev.48
2024-10-22 17:36:08 +02:00
proddy
c85a8f80e5 Merge branch 'dev' of https://github.com/proddy/EMS-ESP32 into dev 2024-10-22 17:34:57 +02:00
proddy
9a19464eac bump version 2024-10-22 17:33:52 +02:00
Proddy
5f018310e3 Merge pull request #2126 from proddy/dev
fix version check in Settings page
2024-10-22 17:32:53 +02:00
proddy
94d4d13a47 add test data for checkUpgrade action 2024-10-22 17:31:58 +02:00
proddy
496b335780 check for empty param 2024-10-22 17:26:37 +02:00
proddy
747aabef0a comments 2024-10-22 17:26:30 +02:00
proddy
9d22609370 remove debug 2024-10-22 17:26:14 +02:00
proddy
ebe9dc8fa9 fullstops again 2024-10-22 17:25:53 +02:00
proddy
7e2f3f610f add missing fullstop 2024-10-22 17:25:37 +02:00
proddy
de64e95441 add more tests for actions 2024-10-22 17:25:22 +02:00
proddy
b610bcd4bb package update 2024-10-22 17:25:10 +02:00
Proddy
6094804e5b Merge pull request #2120 from proddy/dev
fix potential buffer overflow
2024-10-22 14:14:44 +02:00
proddy
4565e64f63 fix potential buffer overflow 2024-10-22 14:14:05 +02:00
Proddy
0a062b17da Merge pull request #2117 from proddy/dev
Developer Mode and send EMS Read Commands from WebUI - #2116
2024-10-22 13:57:01 +02:00
proddy
aa4fab7296 package update 2024-10-22 13:54:43 +02:00
proddy
bc17e2cd94 add version page, move off Status to Settings 2024-10-22 12:14:41 +02:00
proddy
f877aaa11d package update 2024-10-22 12:14:25 +02:00
proddy
1513e1cec5 add emsesp_version 2024-10-22 12:14:11 +02:00
proddy
10cffd5c6f remove all values 2024-10-22 12:13:44 +02:00
proddy
4e8771ead2 remove RELEASE_NOTES 2024-10-22 12:13:31 +02:00
MichaelDvP
614f05a286 read telegram 0x01 offset 27 device name 2024-10-22 08:01:04 +02:00
MichaelDvP
21b2fb46de read telegram set length to max 25/27 per telegram part 2024-10-22 07:59:13 +02:00
proddy
0dfcd10505 improved read cmd dialog 2024-10-21 23:28:10 +02:00
proddy
26aa55346a use data instead of value for apicall 2024-10-21 23:27:52 +02:00
proddy
f929a8e843 update read command test 2024-10-21 20:45:38 +02:00
proddy
5bb125545d fix eslint warnings 2024-10-21 20:45:32 +02:00
proddy
c6c4a5bfb7 use strlcpy for readCommand 2024-10-21 20:44:57 +02:00
proddy
697daeeefd package update 2024-10-21 20:44:18 +02:00
proddy
03d4e560e5 remove unused variables 2024-10-21 15:38:12 +02:00
proddy
8f35be4edf replace sstream 2024-10-21 15:35:13 +02:00
proddy
670a2bbb4a add fullstop to title 2024-10-21 13:50:28 +02:00
proddy
07d35fd19c remove json | false, as it will always default to false 2024-10-21 13:37:30 +02:00
proddy
120bdf653d update test data 2024-10-21 10:46:31 +02:00
proddy
21e6775182 remove Unity 2024-10-21 10:46:23 +02:00
proddy
8e48348d10 update comment 2024-10-21 10:46:15 +02:00
proddy
28ee4f0255 remove commented code 2024-10-21 10:33:03 +02:00
proddy
85d68129d8 banded rows 2024-10-21 10:32:52 +02:00
proddy
a049f063a1 move tests 2024-10-21 10:32:41 +02:00
proddy
4bd95b77c9 DE translation fix by @mattreim 2024-10-20 19:10:35 +02:00
proddy
adaa58c499 use developer mode 2024-10-20 19:07:29 +02:00
proddy
9320316041 German translation by @mattreim 2024-10-20 19:07:14 +02:00
proddy
a735db7e8f remove mention of extra_flags and EMSESP_DEFAULT_BOARD_PROFILE 2024-10-20 15:02:54 +02:00
proddy
3edbf68de0 typo in comment 2024-10-20 15:02:34 +02:00
proddy
d8f92e509a slow down log to every second 2024-10-20 15:02:25 +02:00
proddy
798e20a266 Call read commands from Web #2116 2024-10-20 15:02:11 +02:00
proddy
bd08b7e0e4 add Developer Mode and value to API Call 2024-10-20 15:01:08 +02:00
proddy
685dec4c8e change color of no data available 2024-10-20 15:00:38 +02:00
MichaelDvP
995b759230 EMS_VALUE_UINT32_NOTSET to 0xFFFFFF00 #2109 2024-10-20 14:30:26 +02:00
MichaelDvP
f816bbde62 add round, abs, int, etc. to scheduler shunting yard 2024-10-20 14:23:02 +02:00
Proddy
a130dabda5 Merge pull request #2112 from proddy/dev
update dump/export files
2024-10-19 12:15:38 +02:00
proddy
f60c692d59 update dumps 2024-10-19 12:14:59 +02:00
proddy
5f0d49e13b package update 2024-10-19 12:14:53 +02:00
Proddy
8bab7579ee Merge pull request #2107 from proddy/dev
dont show broken link if IMG cant be found
2024-10-17 14:04:19 +02:00
proddy
849610950f dont show broken link if IMG cant be found 2024-10-17 14:02:16 +02:00
proddy
fd7b823f52 auto formatting 2024-10-17 14:01:58 +02:00
Proddy
210637fde3 Merge pull request #2106 from proddy/dev
minor cleanup
2024-10-17 10:32:11 +02:00
proddy
5bae37275e package update 2024-10-17 10:27:21 +02:00
proddy
a801af1e89 maintain return type 2024-10-17 10:27:15 +02:00
Proddy
0292d55ccc Merge branch 'emsesp:dev' into dev 2024-10-17 09:17:46 +02:00
proddy
064b6ba53f Czech language 2024-10-17 00:02:15 +02:00
Proddy
c4f3046167 Merge pull request #2105 from proddy/dev
show dashboard nodes when there is data
2024-10-17 00:00:21 +02:00
proddy
7d93ecb949 show dashboard nodes when there is data 2024-10-16 23:59:34 +02:00
proddy
3f1c30c948 keep consistent messages, with fullstop at end 2024-10-16 21:54:03 +02:00
proddy
c7b565f033 package update 2024-10-16 21:53:34 +02:00
Proddy
96d37ea289 Merge pull request #2102 from suaveolent/patch-1 2024-10-15 19:27:40 +01:00
suaveolent
32aa4923dc Remove Logatherm from thermostat identifier 2024-10-15 20:14:22 +02:00
Proddy
9bdebb4960 Merge pull request #2100 from MichaelDvP/dev 2024-10-15 17:14:25 +01:00
MichaelDvP
19f983c657 formatting 2024-10-15 17:51:40 +02:00
MichaelDvP
dd8d4b29e5 add cz web translations, update pkg 2024-10-15 17:32:04 +02:00
Proddy
0f877b67de Merge pull request #2097 from mattreim/dev
Rename from "CUSTOMIZATIONS_HELP_5" and update slovak translation
2024-10-14 21:52:28 +01:00
mattreim
c06017ccf6 Update slovak (SoftVienka) translate
#2096
2024-10-14 22:44:06 +02:00
mattreim
aa741ae09b Rename from "CUSTOMIZATIONS_HELP_5"
If you choose to rename.
2024-10-14 22:36:31 +02:00
Proddy
5f35659fa7 Merge pull request #2094 from MichaelDvP/dev
fix empty scheduler on dashboard
2024-10-14 18:28:26 +01:00
MichaelDvP
2cb55be1cc Merge branch 'dev' of https://github.com/emsesp/EMS-ESP32 into dev 2024-10-14 19:03:45 +02:00
MichaelDvP
6767ec7208 fix empty scheduler on dashboard 2024-10-14 19:03:30 +02:00
Proddy
f27916274a Merge pull request #2092 from proddy/dev
update version to 3.7.0-dev.45
2024-10-14 17:02:00 +01:00
proddy
b59681a939 bump to version 3.7.0-dev.45 2024-10-14 17:00:50 +01:00
proddy
216fcd4939 package update 2024-10-14 17:00:37 +01:00
Proddy
19d7e8dcd0 Merge pull request #2091 from MichaelDvP/dev
S3-Temperature, Thermostat dhw circuits
2024-10-14 16:41:52 +01:00
MichaelDvP
93f3583527 add boiler pumpOnTemp #2088 2024-10-14 15:50:42 +02:00
MichaelDvP
66f3c57c8e mqtt status retain, #2086 2024-10-14 13:37:37 +02:00
MichaelDvP
e44487b67f use deque for emsdevices 2024-10-14 13:34:58 +02:00
MichaelDvP
b9a8bbd1a9 fix digital_out active_low/high 2024-10-14 13:34:37 +02:00
MichaelDvP
f773f03c11 Merge branch 'dev' of https://github.com/emsesp/EMS-ESP32 into dev 2024-10-14 13:13:32 +02:00
Proddy
1435409540 Merge pull request #2089 from proddy/ft_dashboard
Ft dashboard - ui changes
2024-10-14 00:08:38 +01:00
Proddy
ee9682ae0a Merge pull request #7 from MichaelDvP/ft_dashboard
fix uom display for digital_out
2024-10-14 00:07:47 +01:00
proddy
6964620bd4 consistent hover effect in tables 2024-10-14 00:06:08 +01:00
proddy
079cae767c fix count 2024-10-13 23:13:55 +01:00
proddy
f66832c7f3 retain toggle in dashboard, refresh when new devices loaded 2024-10-13 22:45:34 +01:00
proddy
e71542d9aa formatting 2024-10-13 22:45:12 +01:00
Proddy
00dcdecc30 Merge pull request #2083 from proddy/ft_dashboard
Ft dashboard - #1958
2024-10-13 18:41:43 +01:00
proddy
3c1bfa0f3e formatting table 2024-10-13 18:40:57 +01:00
proddy
55bcc4410b fix dashboard/disabled analog sensors 2024-10-13 09:21:56 +01:00
proddy
e40d01ff87 package update 2024-10-13 09:21:39 +01:00
proddy
ed11260ffa don't include disabled analog sensors in dashboard 2024-10-13 00:09:54 +01:00
proddy
4ca7da684e add a test_analogsensor3 that is disabled 2024-10-13 00:09:43 +01:00
MichaelDvP
f0a2f4082c thermostat dhw circuits use offset only 2024-10-12 17:42:31 +02:00
proddy
801c1aedaa add TODOs for formatting reminders 2024-10-12 16:17:40 +01:00
proddy
67f7cc53b3 update sample test data 2024-10-12 16:17:12 +01:00
proddy
b78f6da35b add comment reminders 2024-10-12 16:15:08 +01:00
proddy
b251fa4f26 alova update 2024-10-12 10:43:52 +01:00
MichaelDvP
712c627bbd Merge branch 'ft_dashboard' of https://github.com/proddy/EMS-ESP32 into ft_dashboard 2024-10-12 09:34:34 +02:00
MichaelDvP
eb895b44ae fix uom display for digital_out 2024-10-12 09:34:19 +02:00
proddy
ebd7d86502 table formatting 2024-10-12 01:06:09 +01:00
proddy
4fac364600 table formatting, remove inner scrollbar 2024-10-11 22:01:13 +01:00
proddy
c79d5f2890 toast slide in from left so it doesnt obscure data 2024-10-11 22:00:57 +01:00
proddy
38f42445aa update test data for dashboard 2024-10-11 22:00:39 +01:00
Proddy
e36f6db59d Merge pull request #6 from MichaelDvP/ft_dashboard
small changes, use commands to change dashboard values
2024-10-11 20:46:11 +01:00
proddy
662df4c902 package update 2024-10-11 20:38:41 +01:00
MichaelDvP
33efb1a440 all dashboard changes uses commands 2024-10-11 20:14:10 +02:00
MichaelDvP
ef3d42b619 fix s3 board_build.extra_flags for USB serial 2024-10-11 19:51:39 +02:00
MichaelDvP
57f337ce22 fix board_build.extra_flags, (for serial USB) #2082 2024-10-11 15:50:45 +02:00
MichaelDvP
9304cc6e47 dhw circuit number only per offset 2024-10-11 15:44:05 +02:00
proddy
6d45dfb925 DE translations for Dashboard 2024-10-11 10:49:02 +01:00
proddy
d373309fea Implements back end for Dashboard - Feature: Dashboard showing all data (favourites, sensors, custom) #1958 2024-10-10 21:27:00 +01:00
proddy
a001a31401 use DeviceTypeUniqueID 2024-10-10 21:26:39 +01:00
proddy
31cfdc6604 support single scheduler item updates for Dashboard 2024-10-10 21:26:22 +01:00
proddy
37ac684d24 rename test temp sensors 2024-10-10 21:25:48 +01:00
proddy
e52753e83c rename DialogProps 2024-10-10 21:25:11 +01:00
proddy
9a6e84c68a replace DashboardData with array 2024-10-10 21:24:57 +01:00
proddy
b7e6552557 Dashboard - #1958 2024-10-10 21:24:32 +01:00
proddy
ca8ed2d1a5 added DeviceTypeUniqueID for Dashboard 2024-10-10 21:24:04 +01:00
proddy
a9b01e05c9 CTRL-D for console 2024-10-10 21:23:51 +01:00
proddy
5234a4477f 3.7.0-dev.44 2024-10-10 21:23:34 +01:00
proddy
c5257d7ccf ignore local package 2024-10-10 21:23:15 +01:00
proddy
0e451f0a82 rename test sensors 2024-10-10 21:22:49 +01:00
proddy
5a472cb6ee package update 2024-10-10 21:22:32 +01:00
proddy
594a48afed Dashboard data 2024-10-10 21:22:21 +01:00
proddy
03ae9735ef add test for Dashboard 2024-10-10 21:22:12 +01:00
proddy
87c9036b87 text for Dashboard 2024-10-10 21:21:57 +01:00
proddy
faa019863b DashboardItem[] 2024-10-10 21:21:45 +01:00
proddy
2bdd4afd23 support for unknown value and uom 2024-10-10 21:21:35 +01:00
proddy
d39fc8221e rename DevicesDialog 2024-10-10 21:21:19 +01:00
proddy
3203d03252 move Sensors to Modules 2024-10-10 21:20:49 +01:00
proddy
6b99fb0404 add icon for Scheduler 2024-10-10 21:20:36 +01:00
MichaelDvP
ffdcbac1e0 add PV max compressor power 2024-10-10 16:19:59 +02:00
MichaelDvP
e78b54dc23 add S3 temperature #2077 2024-10-10 13:19:12 +02:00
MichaelDvP
c4e9f3c328 fix dhw circuits #2079 2024-10-10 13:18:32 +02:00
MichaelDvP
6187378388 fix dhw circuit tset elegrams #2079 2024-10-10 09:53:52 +02:00
MichaelDvP
08f5c4b674 fix digital_out: active_low 2024-10-10 09:52:54 +02:00
MichaelDvP
1c3b1f5790 Merge branch 'dev' of https://github.com/emsesp/EMS-ESP32 into dev 2024-10-10 09:34:18 +02:00
proddy
1e7835787b package update 2024-10-09 09:04:40 +02:00
proddy
0881c574b2 reverse polarity if offset 0 2024-10-09 09:04:32 +02:00
proddy
63f35170c6 make all REMOVE and UPDATE buttons look the same 2024-10-08 22:55:23 +02:00
proddy
8e56cbfa63 fix data loading when dialog was open 2024-10-08 22:55:06 +02:00
proddy
81541d0323 added a standalone test 2024-10-08 22:54:39 +02:00
proddy
dbaefe4d50 added some comments 2024-10-08 22:54:24 +02:00
proddy
f94ac6b067 change CTRL-C to CTRL-S as pio monitor uses ctrl-c to exit 2024-10-08 22:54:01 +02:00
proddy
4611ed49b0 Dashboard implementation 2024-10-08 22:53:36 +02:00
proddy
fc0fd625d3 show error when using an invalid gpio in webUI 2024-10-08 22:52:05 +02:00
proddy
aa88c0793b more cleanup 2024-10-08 22:51:40 +02:00
proddy
8cbac95b99 3.7.0-dev.44 2024-10-08 22:51:26 +02:00
proddy
8b1015b706 add note about upload speeds on MacBooks 2024-10-08 22:51:14 +02:00
proddy
621f35b1d5 add Dashboard test in api3 2024-10-08 22:50:51 +02:00
proddy
e7d9978e02 package update 2024-10-08 22:50:37 +02:00
proddy
0c3a83d3b3 ignore mjs files 2024-10-08 22:50:28 +02:00
proddy
59c4866530 updated for Dashboard 2024-10-08 22:50:19 +02:00
proddy
1681d99238 replace data with nodes 2024-10-08 22:50:06 +02:00
proddy
5d69ce18a2 optimize with useMemo 2024-10-08 22:49:44 +02:00
proddy
87cea5865a optimize with useMemo 2024-10-08 22:49:29 +02:00
proddy
10c03a3f6b Merge branch 'dev' into ft_dashboard 2024-10-06 14:00:30 +02:00
Proddy
60ab5a3e42 tidy up device names
continuation from https://github.com/emsesp/EMS-ESP32/issues/2071
2024-10-06 09:02:55 +02:00
Proddy
95944aa7a6 Merge pull request #2070 from proddy/dev
sonar optimizations
2024-10-05 19:03:32 +02:00
proddy
da53d063e7 changed comments 2024-10-05 19:02:39 +02:00
proddy
90b2ba14c6 package update 2024-10-05 19:02:31 +02:00
proddy
ffbaff8028 updated 2024-10-05 19:02:21 +02:00
proddy
34fc9f3047 fixes #2071 2024-10-05 18:37:36 +02:00
proddy
812df3640b turn on test data 2024-10-05 16:28:28 +02:00
proddy
e501ac31f5 translations and finish writeDevice 2024-10-05 16:25:53 +02:00
proddy
4fde9e7c54 fix slowness 2024-10-04 15:41:58 +02:00
proddy
fd7d8ca532 enable write in dashboard 2024-10-04 13:32:42 +02:00
proddy
01db9db6ae update dashboard for analog 2024-10-03 21:09:50 +02:00
proddy
fb0d9454ef dashboard v.01 2024-10-03 18:06:46 +02:00
MichaelDvP
cd4d0f5abe check device active for fetching values 2024-10-03 13:23:19 +02:00
proddy
f9f87ddc0e add comment 2024-10-02 18:53:36 +02:00
proddy
fa4281cc63 package update 2024-10-02 18:53:23 +02:00
proddy
58ddee98f4 mock dashboard data 2024-10-02 18:53:08 +02:00
proddy
aac0a375c2 comment 2024-10-02 15:00:48 +02:00
proddy
2528e15a9c optimizations 2024-10-02 14:01:02 +02:00
proddy
5d1c007777 3.7.0-dev.43 2024-10-02 13:56:28 +02:00
proddy
7ea0caaab7 remove separate sonar tsconfig 2024-10-02 13:56:14 +02:00
proddy
f1800d9250 remove fixing yarn version 2024-10-02 13:55:59 +02:00
proddy
a541a56caa update lock file 2024-10-02 13:55:42 +02:00
proddy
50b22dd265 fix condition after adding a time 2024-10-02 13:55:34 +02:00
proddy
c3dd5e002a add comment 2024-10-02 13:55:09 +02:00
proddy
e0130affb7 link to sonarcloud 2024-10-02 13:55:00 +02:00
Proddy
8e6434cf7f sonarlint improvements 2024-10-02 13:32:51 +02:00
Proddy
1eaa16995b Merge pull request #2066 from proddy/dev
custom support page, action endpoint
2024-10-02 13:31:22 +02:00
proddy
8ccc708532 highlight upload box when dragging 2024-10-02 10:30:03 +02:00
proddy
4dee945632 fix HA warning, dont translate bool 2024-10-02 10:04:38 +02:00
proddy
91d6249ada add comments 2024-10-02 10:04:13 +02:00
proddy
52cd8fa3e8 smaller box 2024-10-02 09:30:53 +02:00
proddy
e5b98dadde code cleanup - sonarlint 2024-10-02 09:02:24 +02:00
proddy
465f14a113 package update 2024-10-02 08:54:57 +02:00
proddy
fe0d0bb11c remove data type 2024-10-02 08:54:31 +02:00
proddy
fc896914e9 sonarlint 2024-10-02 08:54:17 +02:00
proddy
eef130e229 more spacing after back arrow 2024-10-02 08:53:55 +02:00
proddy
88a01426c1 fix referer for external images 2024-10-01 09:56:32 +02:00
proddy
ed685d4a5e remove duplicate condition 2024-09-30 15:55:46 +02:00
proddy
c8603dcd81 merge all "show" commands into a single command 2024-09-30 15:28:05 +02:00
proddy
d728b1c116 move info/commands/values to top so its not repeated 2024-09-30 15:27:46 +02:00
proddy
b5203e11f0 Show Flash size in show system 2024-09-30 15:27:14 +02:00
proddy
23c2f0ceba add test img_url 2024-09-30 15:26:47 +02:00
proddy
30f491b434 fixes to https://github.com/emsesp/EMS-ESP32/pull/2066 2024-09-30 10:08:50 +02:00
proddy
d5aac1789e rename custom_support type to customSupport 2024-09-29 17:44:03 +02:00
proddy
670a5499dd use EMS-ESP-Modules.git@1.0.2 2024-09-29 16:42:09 +02:00
Proddy
2d011a899e Merge branch 'dev' into dev 2024-09-29 12:01:40 +02:00
proddy
ab040e120e move uploadURL as an action 2024-09-29 11:08:49 +02:00
Proddy
596872f5aa Merge pull request #2065 from MichaelDvP/dev
fix using NUMOP_MUL50 on webUI #2064, dev41
2024-09-29 09:48:24 +02:00
proddy
93066e4836 customSupport read file 2024-09-29 09:40:18 +02:00
proddy
c9dd2d4a72 move allvalues to new action endpoint 2024-09-29 09:17:11 +02:00
MichaelDvP
505aa1f945 fix using NUMOP_MUL50 on webUI #2064, dev41 2024-09-29 09:00:05 +02:00
proddy
a2e41d6d1e URL updates 2024-09-28 21:01:37 +02:00
Proddy
f096c1b632 Merge pull request #2063 from MichaelDvP/dev
fix rendering "-0.x" values (reported on discord)
2024-09-28 16:30:22 +02:00
MichaelDvP
77768f9bdc Merge branch 'dev' of https://github.com/emsesp/EMS-ESP32 into dev 2024-09-28 12:22:21 +02:00
MichaelDvP
7c02894e02 fix rendering "-0.x" values (reported on discord) 2024-09-28 12:20:12 +02:00
Proddy
554425b727 Merge pull request #2061 from mattreim/dev
Update German translation
2024-09-28 09:44:00 +02:00
mattreim
6b0ad1f3f6 Update German translation 2024-09-27 17:39:19 +02:00
Proddy
243da8851c Merge pull request #2057 from proddy/dev
fixes #2056
2024-09-26 22:25:44 +02:00
proddy
68efcf3742 package update 2024-09-26 22:24:29 +02:00
proddy
b35abd744b minor issue: search in customizations only searches the english/original names (not the tranlated ones) #2056 2024-09-26 22:24:25 +02:00
Proddy
64fbc1e4aa Merge pull request #2055 from proddy/dev
#2054
2024-09-26 17:50:44 +02:00
proddy
6814f54e64 Feature: Custom Support info #2054 2024-09-26 17:44:46 +02:00
proddy
ccfbdfbd0f Gues mode in help #2054 2024-09-26 17:44:46 +02:00
proddy
00ca334fd3 update package 2024-09-26 17:44:46 +02:00
proddy
607f2cfa71 change 'show log' message 2024-09-26 17:44:46 +02:00
Proddy
bf46efd326 Merge pull request #2053 from MichaelDvP/dev
fix get attribute for second thermostat #2052
2024-09-26 17:27:25 +02:00
MichaelDvP
715f86b717 fix get attribute for second thermostat #2052 2024-09-26 15:51:24 +02:00
Proddy
ccd6b132cc Merge pull request #2051 from mattreim/dev
Update ButtonTooltip  translation
2024-09-26 07:48:40 +02:00
mattreim
e7dca3d2f4 Update ButtonTooltip translation 2024-09-25 22:57:11 +02:00
Proddy
d60cbc6a02 Merge pull request #2050 from MichaelDvP/dev
show emsesp-devices in system info, add common fields to value_info #2033
2024-09-25 20:00:34 +02:00
MichaelDvP
83d5b919d6 show emsesp-devices in system info, add common fields to value_info #2033 2024-09-25 18:47:09 +02:00
Proddy
9ca16bd2c8 Merge pull request #2049 from proddy/dev
package updates, python formatting
2024-09-25 17:33:36 +02:00
proddy
c48b7a9a5d show version on CTRL-C message 2024-09-25 17:32:43 +02:00
proddy
5cba925717 formatting 2024-09-25 17:32:31 +02:00
proddy
e802812fc6 update packages 2024-09-25 17:32:24 +02:00
Proddy
978799f3a7 Merge pull request #2048 from proddy/dev
package updates
2024-09-24 09:02:45 +02:00
proddy
7d38db705f update packages to avoid warnings 2024-09-24 09:01:45 +02:00
proddy
bf1979705b add sonarlint 2024-09-24 09:01:35 +02:00
Proddy
a79d176793 Merge pull request #2045 from proddy/dev
junkers summertime is DIV2
2024-09-23 11:09:08 +02:00
proddy
b9d7a6ac85 junkers summertime is DIV2 - fixes Thermostat FW100 wrong reading #2044 2024-09-23 11:08:36 +02:00
proddy
d61876298e 3.7.0-dev.39 2024-09-23 11:08:14 +02:00
Proddy
9787dfc0a0 Merge pull request #2043 from MichaelDvP/dev
fix api_data as command data
2024-09-22 21:38:05 +02:00
MichaelDvP
c248830042 fix api_data as command data 2024-09-22 17:40:39 +02:00
Proddy
6e22e69fec Merge pull request #2042 from proddy/dev
update console screenshots
2024-09-22 15:11:03 +02:00
proddy
cfe5cd9bff update console screenshots 2024-09-22 15:10:32 +02:00
Proddy
b8c6efffcd Merge pull request #2041 from proddy/dev
fix refreshing Module library
2024-09-22 14:30:42 +02:00
proddy
32739fe77b package update 2024-09-22 14:19:33 +02:00
Proddy
171cbd3bb1 Merge branch 'emsesp:dev' into dev 2024-09-22 14:18:47 +02:00
proddy
b0451024f8 fixes #2039 2024-09-22 14:17:47 +02:00
Proddy
c3aa64227e Merge pull request #2040 from xarbit/update_device_library
Update device library
2024-09-22 14:07:10 +02:00
Jason Scurtu
5e498cb0c2 add BOSCH Connect-Key K 30 RF 2024-09-22 11:47:09 +02:00
Jason Scurtu
a5a309ff09 update device family CS5800i/CS6800i/WLW176i 2024-09-22 11:32:28 +02:00
Proddy
82502e8222 Merge pull request #2037 from mheyse/add-modbus-registers
Modbus: add new entities
2024-09-21 23:57:06 +02:00
Proddy
c405f5b14f Merge pull request #2036 from MichaelDvP/dev
stack for scheduler 5k
2024-09-21 23:52:50 +02:00
mheyse
ad586f1101 Modbus: add new entities
- hpCurrPower
- hpPowerLimit
- pc0Flow
- pc1Flow
- pc1On
- pc1Rate
2024-09-21 16:53:00 +02:00
MichaelDvP
1c7186171e stack for scheduler 5k 2024-09-21 14:35:36 +02:00
Proddy
4905047177 Merge pull request #2035 from MichaelDvP/dev
some fixes
2024-09-21 08:34:27 +02:00
MichaelDvP
d2558708a0 shell call device/commands show info/values/commands 2024-09-20 16:03:08 +02:00
MichaelDvP
483a138f9d json type 2024-09-20 15:59:45 +02:00
MichaelDvP
c315463692 fix command name for custom entities 2024-09-20 14:14:37 +02:00
MichaelDvP
c2b52f731c customizations: tag not part of name, don't show Custom Entities as device 2024-09-20 13:30:47 +02:00
Proddy
cf9bd4d824 Merge pull request #2032 from proddy/dev
updated README
2024-09-20 09:12:03 +02:00
proddy
c34e59b540 updated feature list 2024-09-20 09:11:15 +02:00
proddy
6c61297449 fix seplling 2024-09-20 09:11:04 +02:00
proddy
c2db3c0bd6 package update 2024-09-20 09:10:54 +02:00
Proddy
6c2769fe08 Merge pull request #2031 from MichaelDvP/dev
add australian models #2030
2024-09-20 08:32:48 +02:00
MichaelDvP
748062d0e7 add australien modells #2030 2024-09-20 07:47:22 +02:00
Proddy
e292aa3e77 Merge pull request #2029 from proddy/dev
incorporated Michael's changes #2027
2024-09-19 18:39:21 +02:00
proddy
5b1493b940 incorporated Michael's changes https://github.com/emsesp/EMS-ESP32/pull/2027 2024-09-19 18:38:36 +02:00
proddy
e0130638c3 updated test results for 3.7.0 2024-09-19 18:37:33 +02:00
proddy
8762f9c64a updated text on how to run the unit tests 2024-09-19 18:37:21 +02:00
proddy
788efb1266 CTRL-C, not CTRL-L 2024-09-19 17:28:30 +02:00
Proddy
384eb9bd1f Merge pull request #2028 from proddy/dev
updated breaking change text
2024-09-19 14:50:56 +02:00
proddy
529b5d9321 updated breaking change text 2024-09-19 14:50:30 +02:00
Proddy
876a45d7a0 Merge pull request #2027 from proddy/dev
upgrade to ArduinoJson 7.2
2024-09-19 12:17:33 +02:00
proddy
cf1eae9426 ArduinoJson 7.2 upgrade 2024-09-19 12:15:19 +02:00
proddy
0ee1246865 package update 2024-09-19 12:14:47 +02:00
Proddy
3195f92276 Merge pull request #2024 from MichaelDvP/dev
few small changes
2024-09-18 09:55:46 +02:00
MichaelDvP
aca2ae88cc allow minutes only for clock input 2024-09-18 09:28:16 +02:00
MichaelDvP
3fa18e2984 german translation, see #2020 2024-09-18 09:09:43 +02:00
MichaelDvP
1235ea88b9 show ipv6 type also for wifi 2024-09-18 09:08:51 +02:00
Proddy
c30f821015 Merge pull request #2023 from proddy/dev
remove is_cmd from dump_telegrams
2024-09-17 16:02:29 +02:00
proddy
83744a96a6 remove is_cmd 2024-09-17 15:59:20 +02:00
proddy
f386fdaedd remove is_cmd 2024-09-17 15:58:42 +02:00
Proddy
fc163cc00d Merge pull request #2022 from proddy/dev
remove duplicate ctrl-c prompt in console
2024-09-17 14:13:39 +02:00
Proddy
9aadedd884 Merge branch 'emsesp:dev' into dev 2024-09-17 14:13:16 +02:00
proddy
64d4e4a2ac remove duplicate ctrl-c prompt 2024-09-17 14:12:52 +02:00
proddy
661a7cfde9 package update 2024-09-17 14:12:38 +02:00
Proddy
09753421d9 Merge pull request #2021 from proddy/dev
ipv6, comments, fix dumps
2024-09-17 11:21:38 +02:00
proddy
b3e749b10f check ipV6 fc & fd 2024-09-17 11:20:51 +02:00
proddy
869ba98d6e check for Eth boards with no PHY power-pin (-1) 2024-09-17 10:22:05 +02:00
proddy
7fe68d9db3 add comment about E32V2 2024-09-17 10:21:32 +02:00
proddy
b1795fec4d add Michael's IPv6 check 2024-09-17 10:21:22 +02:00
proddy
da08429ce8 update 2024-09-17 09:48:14 +02:00
proddy
a7bee4bf9a remove cmd 2024-09-17 09:42:24 +02:00
proddy
ade5cb79e3 dump telegrams doesnt need to show the cmd 2024-09-17 09:31:03 +02:00
proddy
6f556a9ebb package update 2024-09-17 09:30:46 +02:00
Proddy
1263df39ef Merge pull request #2019 from mattreim/dev
Update locale_translations.h
2024-09-16 23:43:17 +02:00
mattreim
c168ef93f4 Update locale_translations.h 2024-09-16 23:30:53 +02:00
Proddy
01e79aee4c Merge pull request #2018 from proddy/dev
network
2024-09-16 20:59:23 +02:00
proddy
0c72005ebb network checks - still checking 2024-09-16 16:21:53 +02:00
proddy
4af5484e16 network checks 2024-09-16 16:03:14 +02:00
proddy
f0974a552f make copy of bins for backwards compatibility with 3.6.x web version check 2024-09-16 16:03:14 +02:00
proddy
872e4117b0 update packages 2024-09-16 16:03:14 +02:00
proddy
cf49f1b398 update 2024-09-16 16:03:14 +02:00
Proddy
4a16af08b5 Merge branch 'emsesp:dev' into dev 2024-09-16 15:58:18 +02:00
Proddy
856f95769d Merge pull request #2017 from MichaelDvP/dev
fix for #2001 and #2011
2024-09-16 15:58:05 +02:00
MichaelDvP
8c1f67a779 Merge branch 'dev' of https://github.com/emsesp/EMS-ESP32 into dev 2024-09-16 13:48:18 +02:00
MichaelDvP
1c6464a4f3 pc0, pc1 flow, add uom l/h, fix #2001 2024-09-16 13:47:52 +02:00
MichaelDvP
a6ca1313ca roomifl_factor for FW120 to mul10, fix #2011 2024-09-16 13:45:59 +02:00
proddy
77b5e934a3 tidy up EMSESP_DEBUG 2024-09-15 18:09:15 +02:00
Proddy
3e9b18222b Merge pull request #2015 from mattreim/dev
Update locale_translations.h
2024-09-15 16:53:23 +02:00
mattreim
a80a5093d6 Update locale_translations.h 2024-09-15 13:39:33 +02:00
Proddy
865cd634f8 Merge pull request #2014 from proddy/dev
small changes
2024-09-15 12:35:18 +02:00
proddy
5cb4f48905 only show running partition which is boot on 1st install and then cycle between app0/app1 2024-09-15 12:34:31 +02:00
proddy
9234bfd34c add show command 2024-09-15 12:33:51 +02:00
proddy
d10e27c7c3 remove obsolete last_transmit 2024-09-15 12:33:42 +02:00
proddy
e54d9a6c32 minor std::string optimizations 2024-09-15 12:33:27 +02:00
proddy
9a20bf350a more checks 2024-09-15 12:32:35 +02:00
proddy
1bb33fbd3c package update 2024-09-15 12:32:28 +02:00
Proddy
2e4a2952f7 Merge pull request #2013 from mattreim/dev
Update locale_translations.h
2024-09-15 09:24:57 +02:00
mattreim
65b90b595b Update locale_translations.h 2024-09-14 23:50:56 +02:00
mattreim
35ffd9b2dc Update locale_translations.h 2024-09-14 15:54:58 +02:00
Proddy
1757f67bbc Merge pull request #2012 from mattreim/dev
Update locale_translations.h
2024-09-14 14:56:17 +02:00
mattreim
4881e95d28 Add "Betriebsart" 2024-09-14 14:27:06 +02:00
mattreim
e92fa7b85e Update locale_translations.h 2024-09-14 13:29:36 +02:00
Proddy
c73ac6cca9 Merge pull request #2010 from proddy/dev
update doc in prep for 3.7.0 release
2024-09-13 11:14:20 +02:00
proddy
3904b20ff9 update doc in prep for 3.7.0 release 2024-09-13 11:13:45 +02:00
Proddy
6b372402f6 Merge pull request #2009 from proddy/dev
merge endpoints
2024-09-13 10:06:29 +02:00
proddy
191edffe3c optimize endpoints, so re-use where possible 2024-09-13 10:03:11 +02:00
proddy
63a3152b91 remove unused useRequest 2024-09-13 10:02:19 +02:00
proddy
dd1ed08f7c remove .txt and .csv 2024-09-13 10:01:59 +02:00
proddy
003d78be9f update dictionary 2024-09-13 10:01:43 +02:00
proddy
68036f6467 3.7.0-dev.37 2024-09-13 10:01:29 +02:00
MichaelDvP
2578c052b3 compiles with pioarduino 2024-09-12 19:08:59 +02:00
Proddy
f0ff51af25 Merge pull request #2006 from proddy/dev
fix typos, optimize web log
2024-09-12 18:14:10 +02:00
proddy
fde425512e update pio example for upload params 2024-09-12 18:11:49 +02:00
proddy
b4712db4ae remove /rest/fetchLog 2024-09-12 17:54:17 +02:00
proddy
44644d522c auto scroll 2024-09-12 17:53:34 +02:00
Proddy
ddd2083de8 Merge branch 'emsesp:dev' into dev 2024-09-12 17:50:49 +02:00
Proddy
a417cf7136 Merge pull request #2008 from mattreim/dev
Update German translation
2024-09-12 17:50:32 +02:00
mattreim
26fbfd6671 Update German translation 2024-09-12 17:07:35 +02:00
proddy
9e5182e4b2 auto scroll translation 2024-09-12 16:06:26 +02:00
proddy
141c3a7b1e comment out REFRESH_SYNC 2024-09-12 16:06:17 +02:00
proddy
64c93bda6b remove fetchlog endpoint data 2024-09-12 16:06:04 +02:00
proddy
083041134b onError/onMessage changes 2024-09-12 16:05:45 +02:00
proddy
4c877e1ea1 package update 2024-09-12 16:04:56 +02:00
proddy
6c1fe40ef7 add back formidable 2024-09-12 12:02:29 +02:00
proddy
6e5ffa9920 package cleanup 2024-09-12 09:03:57 +02:00
proddy
92ee5c3c38 add new words to spell check 2024-09-12 08:57:10 +02:00
proddy
8091250397 remove unused packages 2024-09-12 08:57:02 +02:00
Proddy
8858820630 Merge branch 'emsesp:dev' into dev 2024-09-12 08:43:32 +02:00
Proddy
0572968530 Merge pull request #2007 from mattreim/dev
Update German translation[corrections]
2024-09-12 08:43:14 +02:00
mattreim
3c12f01cce Update German translation[corrections] 2024-09-12 00:54:24 +02:00
proddy
6ab70b2609 update sk 2024-09-11 23:00:29 +02:00
Proddy
86597e0ee0 Merge branch 'emsesp:dev' into dev 2024-09-11 22:57:21 +02:00
Proddy
ee355f44d7 Merge pull request #2005 from mattreim/dev
Update German translation
2024-09-11 22:57:05 +02:00
mattreim
0fe49528fa Update index.ts 2024-09-11 22:55:41 +02:00
proddy
061a5d4abf lowercase Me and All, so its same as device names 2024-09-11 22:33:47 +02:00
proddy
1eb4fd95d8 updated dev-35 2024-09-11 22:32:11 +02:00
proddy
b2fcce180f removed delay in TCP log transmision 2024-09-11 22:31:15 +02:00
proddy
59273027fb decreased wait time for log 2024-09-11 22:30:52 +02:00
proddy
57709d7dbb added auto scroll 2024-09-11 22:30:38 +02:00
proddy
1e3285b299 applied bugfix 2024-09-11 22:30:26 +02:00
proddy
76673d6694 updated 2024-09-11 22:30:12 +02:00
mattreim
b9924587d7 Update German translation 2024-09-11 22:13:53 +02:00
proddy
44ef7dd0bc fix all typos 2024-09-11 20:23:58 +02:00
proddy
426555bac6 remove comment 2024-09-11 15:28:05 +02:00
Proddy
694f1f01d9 Merge pull request #1991 from proddy/dev
some minor fixes
2024-09-11 15:04:15 +02:00
Proddy
9ba9ffcdf9 Merge branch 'dev' into dev 2024-09-11 15:03:03 +02:00
proddy
e3157907de change download buttons 2024-09-11 14:59:56 +02:00
proddy
55efaa2c9e spellcheck 2024-09-11 14:59:42 +02:00
proddy
5fc82c72f4 don't restart when upload error happens 2024-09-11 14:59:27 +02:00
proddy
5f1877f995 align with 3.7.0-dev.35 changes 2024-09-11 14:59:03 +02:00
Proddy
837bdf37e7 Merge pull request #2000 from mattreim/dev
Add Slovak(SoftVienka) & German translation to locale_translations/i18n
2024-09-11 14:51:29 +02:00
proddy
9368f78401 larger tx mode box size 2024-09-11 13:25:19 +02:00
proddy
3bb936784b update doc and pictures 2024-09-11 13:21:56 +02:00
proddy
a0d90fd78e package update 2024-09-11 13:21:47 +02:00
mattreim
74dff21706 Add Slovak(SoftVienka) & German translation to locale_translations/i18n 2024-09-11 12:18:19 +02:00
proddy
806e40cb31 remove nvs from board_profile 2024-09-11 09:04:45 +02:00
proddy
88c8155b05 tidy up 2024-09-11 08:50:33 +02:00
Proddy
532e36a9b0 Merge branch 'emsesp:dev' into dev 2024-09-10 15:27:16 +02:00
Proddy
fc5b0c762f Merge pull request #1998 from mattreim/dev
Update locale_translations.h
2024-09-10 14:02:59 +02:00
mattreim
ab943a4bbd Update locale_translations.h 2024-09-10 13:30:28 +02:00
proddy
cfb19328f0 fail back to S32 2024-09-10 11:25:11 +02:00
proddy
04dc0401b5 translated Restarting 2024-09-10 10:53:43 +02:00
proddy
cc14a87357 mention show log uses the log level defined in the web 2024-09-10 10:42:30 +02:00
proddy
b0114e9d68 formatting 2024-09-10 10:42:13 +02:00
proddy
49c0bb4f17 formatting 2024-09-10 10:24:37 +02:00
proddy
6c349d0304 formatting 2024-09-10 10:20:13 +02:00
proddy
79e2d6b4a5 formatting 2024-09-10 10:19:56 +02:00
proddy
ab40a21805 show log 2024-09-10 10:19:35 +02:00
proddy
c5e2402770 getter for ipv6 enabled 2024-09-10 10:19:04 +02:00
proddy
ef73994b08 show boot/running partition 2024-09-10 10:18:53 +02:00
proddy
f6c6359121 remove board profiles, handled in code now 2024-09-10 10:18:29 +02:00
proddy
39c7435c21 prevent ipv6 calling twice with Eth 2024-09-10 10:18:09 +02:00
Proddy
bb2ffca295 Merge branch 'emsesp:dev' into dev 2024-09-10 08:03:56 +02:00
Proddy
e1cbe557d2 Merge pull request #1995 from mattreim/dev 2024-09-09 22:18:42 +02:00
mattreim
95dfec8bf9 Update locale_translations.h 2024-09-09 21:56:50 +02:00
proddy
92904e5861 text change 2024-09-09 21:32:45 +02:00
Proddy
716d249719 Merge branch 'emsesp:dev' into dev 2024-09-09 21:23:54 +02:00
Proddy
a7c7fc31b5 Merge pull request #1994 from mattreim/dev
Update locale_translations.h
2024-09-09 21:23:32 +02:00
proddy
690a4c74c7 package update 2024-09-09 21:02:00 +02:00
proddy
bf5bcd6fd3 default to S32/S3 if ethernet not found and EMSESP_DEFAULT_BOARD_PROFILE not set (edge case) 2024-09-09 21:01:38 +02:00
mattreim
9daae873ea Update locale_translations.h 2024-09-09 20:59:05 +02:00
proddy
9ffc8665f4 update with log show command 2024-09-09 17:47:17 +02:00
proddy
b2b65365f2 react-router update 2024-09-09 17:46:22 +02:00
proddy
54d8c5ad8f tidy up TODOs 2024-09-09 17:46:13 +02:00
proddy
5fae9872e6 new command 'log show' to dump out last log messages. useful for serial when you've missed the startup messages 2024-09-09 17:29:55 +02:00
proddy
8617658169 set CORE_DEBUG_LEVEL to 0 to hide annoying littlefs warnings. Can be overridden by pio_local.ini 2024-09-09 17:12:59 +02:00
proddy
fc9372b2ec string casting 2024-09-09 16:41:23 +02:00
proddy
f51781ae77 console starts with DEBUG, less warning messages with standalone 2024-09-09 16:39:46 +02:00
proddy
2c8c8e3365 suppress log warnings when in standalone 2024-09-09 16:39:05 +02:00
proddy
69171f03e9 fix typo 2024-09-09 16:38:39 +02:00
proddy
b7703c46e6 start serial console on command, fix exit 2024-09-09 14:37:29 +02:00
proddy
ee87ee8c34 force web buffer to 25 during update for boards with no psram 2024-09-09 14:31:24 +02:00
proddy
2558513809 formatting 2024-09-09 14:30:55 +02:00
proddy
1e3c115b58 rename Reloading 2024-09-09 13:48:36 +02:00
proddy
6a43f20767 package update 2024-09-09 13:48:28 +02:00
proddy
f9295d9e22 text changes in updater 2024-09-09 11:37:20 +02:00
proddy
783c226d2a formatting 2024-09-09 11:37:02 +02:00
proddy
fbbf93bd28 re-order cflags 2024-09-09 09:33:43 +02:00
proddy
e71965c7d5 fix typos 2024-09-09 09:33:33 +02:00
proddy
577e429edb updated CSV files 2024-09-09 09:02:17 +02:00
proddy
df76340b6f make compile MacOSX 2024-09-09 08:55:17 +02:00
proddy
be6e189948 remove date/time from log, its already in the log 2024-09-09 08:41:57 +02:00
proddy
b57bf51afb change log message (not 'recognized new...') 2024-09-09 08:41:36 +02:00
proddy
fa614dcaca typo 2024-09-09 08:41:10 +02:00
proddy
99d97b2c7b updated auto-gen files 2024-09-09 08:40:51 +02:00
Proddy
5b8d0b9dda Merge branch 'emsesp:dev' into dev 2024-09-09 06:44:55 +02:00
Proddy
03a607fe83 Merge pull request #1992 from mattreim/dev
Update locale_translations.h
2024-09-09 06:44:37 +02:00
mattreim
e96a760fe6 Update locale_translations.h 2024-09-08 23:13:32 +02:00
proddy
30fb4fbad7 limit WebUI log to 25 if no psram 2024-09-08 20:05:24 +02:00
proddy
48fa6f149b add psram 2024-09-08 19:55:53 +02:00
proddy
0db3a9c632 add psram 2024-09-08 19:55:43 +02:00
proddy
859b218609 formatting 2024-09-08 19:55:34 +02:00
proddy
20a1a6f952 better scripting 2024-09-08 19:55:23 +02:00
proddy
ae98027ced only override board profile for BBQKees boards 2024-09-08 16:01:44 +02:00
proddy
8d9e594f1c 3.7.0-dev.35 2024-09-08 15:47:24 +02:00
proddy
1cceda2c49 re-factor update() to use the NVS boot param, which precedes over any manually set board profile 2024-09-08 15:46:38 +02:00
proddy
4fc10a1f6a text formatting 2024-09-08 15:44:49 +02:00
proddy
29c5881cf0 fix error when checking for FS. re-order events for cleaner logging 2024-09-08 15:44:13 +02:00
proddy
195c889e17 exclude vscode settings 2024-09-08 15:42:04 +02:00
proddy
5f4dd924ca fix incorrect board profile on s_16M_P 2024-09-08 15:41:47 +02:00
proddy
c69d870925 add test for long log messages 2024-09-08 15:41:18 +02:00
proddy
b5f571f2cb formatting 2024-09-08 15:41:07 +02:00
proddy
4f29221c39 package update 2024-09-08 15:40:58 +02:00
proddy
38bb7a195f show log colors like it does in the console/terminal 2024-09-08 15:40:49 +02:00
proddy
c6879ca1d5 ethernet may not be connected, so check if it exists in GPIO check 2024-09-08 10:27:30 +02:00
proddy
98fd43f8f2 formatting, text change 2024-09-08 10:26:50 +02:00
proddy
2c60b13022 formatting 2024-09-08 10:26:37 +02:00
Proddy
aa29b70cf1 Merge pull request #1988 from proddy/dev
fix standalone building
2024-09-07 13:28:21 +02:00
proddy
5544dc3b52 fix standalone building 2024-09-07 13:27:58 +02:00
proddy
8f6e2926c2 package update 2024-09-07 13:27:49 +02:00
Proddy
383c3d026a Merge pull request #1986 from mattreim/dev
Update locale_translations.h
2024-09-07 13:20:35 +02:00
Proddy
56d799b00a Merge pull request #1987 from proddy/dev
add more info to system/info and show system cmd
2024-09-07 10:23:07 +02:00
proddy
03127e5ff8 add more info to system/info and show system cmd 2024-09-07 10:22:27 +02:00
proddy
1b650dd118 add link to pio registry files so I remember where they are 2024-09-07 10:22:05 +02:00
proddy
b92973cec2 remove comment 2024-09-07 10:21:40 +02:00
proddy
2957cb2a81 restart after upload 2024-09-07 10:21:30 +02:00
proddy
2aee961f4d pacakge update 2024-09-07 10:21:17 +02:00
mattreim
649c3f0095 Update locale_translations.h 2024-09-06 23:30:37 +02:00
Proddy
e02fe4df32 Merge branch 'emsesp:dev' into dev 2024-09-06 18:47:46 +02:00
Proddy
32dec56703 Merge pull request #1985 from MichaelDvP/dev
add back command for remoteseltemp #1982
2024-09-06 18:47:11 +02:00
MichaelDvP
d31eb3d606 add back command for remoteseltemp #1982 2024-09-06 16:52:12 +02:00
proddy
8c29ccc153 show partition in `show system' 2024-09-06 16:32:18 +02:00
Proddy
d7a4f4af00 Merge pull request #1981 from proddy/dev
"show system" command shows NVS device details, so can be checked aft…
2024-09-06 00:45:19 +02:00
proddy
69b62e2be9 "show system" command shows NVS device details, so can be checked after flashing without going to the web 2024-09-06 00:44:18 +02:00
Proddy
581e027307 Merge pull request #1977 from mattreim/dev
Update English and German translation
2024-09-05 23:37:32 +02:00
Proddy
2450bf966b Merge pull request #1980 from proddy/dev
turn off wifi nosleep
2024-09-05 23:37:02 +02:00
Proddy
d3fe0422d0 Merge branch 'emsesp:dev' into dev 2024-09-05 23:36:34 +02:00
proddy
795fbabe02 3.7.0-dev.34 2024-09-05 23:36:06 +02:00
proddy
07f5a8090e fix compile error 2024-09-05 23:35:12 +02:00
proddy
42572977d4 turn off wifi nosleep 2024-09-05 23:35:04 +02:00
proddy
316c1d0912 package update 2024-09-05 23:34:51 +02:00
mattreim
3a032e4bb3 Update English and German translation 2024-09-05 15:20:45 +02:00
Proddy
2885629d8d Merge pull request #1975 from mattreim/dev
Update German translation
2024-09-04 21:51:20 +02:00
mattreim
da383864fd Update German translation 2024-09-04 21:38:27 +02:00
Proddy
de567649ab Update test_release.yml 2024-09-04 11:36:34 +02:00
Proddy
c9349e4167 Update tagged_release.yml 2024-09-04 11:35:29 +02:00
Proddy
16bfaedd90 Update pre_release.yml 2024-09-04 11:23:15 +02:00
Proddy
737c07d3d8 uses: "emsesp/GH-Automatic-Releases@<VERSION>" 2024-09-04 10:37:04 +02:00
Proddy
5d541b4c84 Merge pull request #1974 from proddy/dev
fix error with system filenames
2024-09-04 09:56:25 +02:00
proddy
6dfb83d90f update packages 2024-09-04 09:54:33 +02:00
proddy
21f53252fd fix name of system file 2024-09-04 09:54:23 +02:00
Proddy
e92b43e62b Merge branch 'emsesp:dev' into dev 2024-09-03 08:10:06 +02:00
Proddy
17489a63ff Merge pull request #1973 from mattreim/dev
Update German translation
2024-09-03 07:51:12 +02:00
mattreim
84dc41ff01 Update German translation 2024-09-02 22:02:57 +02:00
proddy
77c95d6300 don't show download link if on latest version 2024-09-02 11:37:00 +02:00
Proddy
082c7858dc Merge pull request #1972 from proddy/dev
change (c) header
2024-09-01 20:41:49 +02:00
proddy
c951877172 change (c) header 2024-09-01 20:41:27 +02:00
Proddy
71743d4dce Merge pull request #1969 from proddy/dev
autodetect, download and install firmware upgrades
2024-09-01 20:38:13 +02:00
proddy
6d020fa4d1 fix dev vs stable for 4MB downloads 2024-09-01 20:37:03 +02:00
proddy
b3a89ee8c9 add S32 2024-09-01 20:14:51 +02:00
proddy
4807e9749f package update 2024-09-01 20:14:20 +02:00
proddy
cbd38dbf15 fix upload_status 2024-09-01 14:17:37 +02:00
proddy
e1f5dbae81 don't install via URL if Tasmota build on 4MB without PSRAM, as SSL is needed 2024-09-01 14:13:30 +02:00
proddy
6504ac8cb7 make psram boolean 2024-09-01 14:12:54 +02:00
proddy
94f521e460 experimenting with loops 2024-09-01 13:45:01 +02:00
proddy
722e7f38fc rename upload status 2024-09-01 13:44:48 +02:00
proddy
dfdb6bca47 upload url test for 4MB Tasmota 2024-09-01 13:44:22 +02:00
proddy
0e5f0215f3 text change 2024-09-01 13:44:10 +02:00
proddy
53db93fe04 updated 2024-09-01 13:44:01 +02:00
proddy
1040e4fb8c add validation for # bytes in RAW 2024-09-01 12:29:38 +02:00
proddy
94d1aa56b1 use numberValue() to prevent web errors with integers 2024-09-01 12:29:23 +02:00
proddy
1d45a08668 support optional numbers 2024-09-01 12:28:45 +02:00
proddy
89854a45b5 add restart translations 2024-09-01 11:43:40 +02:00
proddy
4ff7e95b19 add missing board profiles 2024-09-01 11:08:50 +02:00
proddy
a257733b3d pio cleanup 2024-09-01 11:08:05 +02:00
proddy
689a326c89 fixes to restart 2024-09-01 11:07:52 +02:00
proddy
ccf4362bfc updated 2024-09-01 09:30:10 +02:00
proddy
8d6f0cc44c fix test 2024-09-01 09:29:34 +02:00
proddy
3699c76985 text formatting 2024-09-01 09:00:52 +02:00
proddy
3607d9f2ad auto-formatting 2024-08-31 16:25:49 +02:00
Proddy
c78777835c Merge branch 'emsesp:dev' into dev 2024-08-31 16:20:10 +02:00
Proddy
66fe96454f Merge pull request #1970 from mheyse/modbus-write-cmd
Modbus: Handle writes to CMD entities, extend tests
2024-08-31 16:19:56 +02:00
proddy
f68c61d229 remove unused import 2024-08-31 16:15:52 +02:00
proddy
a36e26b767 add note about translations 2024-08-31 16:15:41 +02:00
proddy
d9e4c58543 updated translations for restart 2024-08-31 16:13:47 +02:00
proddy
e023e74057 callRestart to doRestart 2024-08-31 16:13:31 +02:00
proddy
b787b975a2 add standlone connect (was in emsesp main class) 2024-08-31 16:13:17 +02:00
proddy
b3951e92a4 grid formatting 2024-08-31 16:12:57 +02:00
proddy
931827c526 refactored restart and format services to be non-blocking 2024-08-31 16:12:30 +02:00
proddy
382c46622d comment 2024-08-31 16:10:26 +02:00
proddy
e965ffc210 comment 2024-08-31 16:10:16 +02:00
proddy
9c83124424 debug tests for api's 2024-08-31 16:09:48 +02:00
proddy
0753fee385 replace restart/format endpoints with system calls 2024-08-31 16:09:22 +02:00
proddy
55a55cbfca add status to be used when uploading/restarting etc 2024-08-31 16:07:49 +02:00
proddy
71d90d6416 CANCEL button always in dark blue (secondary) color 2024-08-30 14:59:12 +02:00
proddy
35cb567b62 migrate deprecated Grid v5 to v6 (Grid2) 2024-08-30 14:55:24 +02:00
proddy
eff3e3f404 package update 2024-08-30 14:55:10 +02:00
proddy
7c3c5917db fixes to install 2024-08-30 14:54:30 +02:00
proddy
c0305ddf38 German translations 2024-08-30 11:21:35 +02:00
proddy
6cacc1473d add back immediate for SSE calls (Alova bug) 2024-08-30 11:21:26 +02:00
proddy
70642de2a6 remove Divider 2024-08-30 11:21:11 +02:00
proddy
5635268fd1 fix autoupdate in dialog 2024-08-30 11:21:03 +02:00
proddy
3f2d5bea67 formatting 2024-08-30 11:10:50 +02:00
proddy
4a6e85106a change colors of icon/text for user profile 2024-08-30 11:10:39 +02:00
proddy
ad386f7c8d only show blue icon for BBQKees boards 2024-08-30 11:10:22 +02:00
proddy
67c3a652b7 move has_partition and has_loader to hardware status 2024-08-30 11:10:06 +02:00
proddy
5d6830c7c6 package update 2024-08-30 11:09:48 +02:00
proddy
00bb31738e comments changed 2024-08-30 11:09:39 +02:00
proddy
5bafe6587c move has_partition and has_loader to hardware status 2024-08-30 11:09:31 +02:00
proddy
6d1e08d244 text changes 2024-08-30 11:09:14 +02:00
proddy
117b55cc16 tidy up restart 2024-08-30 11:09:05 +02:00
proddy
d2f6f8203f remove deprecated ListItemSecondaryAction 2024-08-30 11:08:00 +02:00
proddy
79ae51fbe5 HELP_OF to HELP 2024-08-30 11:07:44 +02:00
proddy
666f5626ea smaller spinner 2024-08-30 11:06:54 +02:00
proddy
21b75ef392 remove timeout 2024-08-30 11:06:44 +02:00
proddy
2ce728d03f comment change 2024-08-30 11:06:35 +02:00
mheyse
ffcd5b7100 Modbus: Handle writes to CMD entities, extend tests 2024-08-30 08:46:55 +02:00
proddy
41ec9162fd add partition text 2024-08-29 14:49:21 +02:00
proddy
908284177f remove deprecated component 2024-08-29 14:49:09 +02:00
proddy
19922ca9fb move the Get* endpoints to their right service classes 2024-08-29 13:53:27 +02:00
proddy
e2aabb1418 don't show warning when uploading using script 2024-08-29 13:52:58 +02:00
proddy
eafd659870 move shunting yard to main code folder 2024-08-29 13:52:36 +02:00
proddy
7aafe1fbbc improve comment 2024-08-29 13:52:20 +02:00
proddy
4188588ea0 remove uploads folder/directory 2024-08-29 13:52:12 +02:00
proddy
cdb8920db6 package update 2024-08-29 13:51:58 +02:00
proddy
1bf4e85fcb remove unneeded immediate param 2024-08-29 13:51:35 +02:00
proddy
fe50c9f6d0 autodetect, download and install firmware upgrades 2024-08-29 13:51:17 +02:00
Proddy
f1e6d5a331 Merge pull request #1967 from MichaelDvP/dev
fix close shell in native build #1966
2024-08-29 08:36:57 +02:00
MichaelDvP
58531815d0 fix close shell in native build #1966 2024-08-29 07:34:26 +02:00
MichaelDvP
0c4d0d0afb Merge branch 'dev' of https://github.com/emsesp/EMS-ESP32 into dev 2024-08-27 16:09:40 +02:00
Proddy
3a5194cb6c Merge pull request #1956 from mattreim/dev
Fix for official release button [Translation]
2024-08-19 16:01:44 +02:00
mattreim
1cd547049e Fix for official release button
Sorry, I overlooked it.
2024-08-19 13:44:53 +02:00
Proddy
fb5c272899 Merge pull request #1954 from mattreim/dev
Add install button translation
2024-08-19 08:38:52 +02:00
mattreim
8b68f03dd9 Add install button translation 2024-08-18 19:14:07 +02:00
Proddy
f2d2e07325 Merge pull request #1952 from MichaelDvP/dev
fix read RC300WWtemp, #1950
2024-08-18 18:08:31 +02:00
MichaelDvP
4e016baca8 Merge branch 'dev' of https://github.com/emsesp/EMS-ESP32 into dev 2024-08-18 17:58:57 +02:00
Proddy
7f247e58e9 Merge pull request #1951 from proddy/dev
upload and install firmware automatically
2024-08-18 17:46:31 +02:00
MichaelDvP
3c16e95cee fix read RC300WWtemp, #1950 2024-08-18 16:47:14 +02:00
proddy
ff9f82aa6c immediately refresh sensors after closing dialog - making it more responsive. there was a lag when removing. 2024-08-18 16:45:45 +02:00
proddy
87ee50708b prevent annoying screen jump when rendering 2024-08-18 16:39:59 +02:00
proddy
405e23561f remove space 2024-08-18 16:39:43 +02:00
proddy
a7a93eb4f5 revert back hardcoded GH calls 2024-08-18 16:18:52 +02:00
proddy
119dcaa7fc make it work from web (thanks michael) 2024-08-18 16:17:03 +02:00
proddy
92a8a268a7 update firmware automatically - #1920 2024-08-18 13:18:07 +02:00
proddy
d9d854e456 formatting 2024-08-18 13:17:23 +02:00
proddy
47dc7346dc package update 2024-08-18 13:17:13 +02:00
proddy
cd5fb061aa added comments 2024-08-18 13:17:01 +02:00
Proddy
bfc712f365 Merge pull request #1949 from mattreim/dev
Add help translation
2024-08-17 17:01:45 +02:00
mattreim
67a21b25a8 Add help translation 2024-08-17 13:32:53 +02:00
Proddy
c7d721bb10 Merge pull request #1948 from proddy/dev
small improvements to upload
2024-08-17 12:40:30 +02:00
Proddy
5de696d7be Merge branch 'emsesp:dev' into dev 2024-08-17 12:39:58 +02:00
proddy
44477d8fcd revert github spam 2024-08-17 12:38:19 +02:00
proddy
f576ee4fe6 improvements https://github.com/emsesp/EMS-ESP32/pull/1931#issuecomment-2294803388 2024-08-17 12:37:11 +02:00
proddy
cf949a9c86 formatting 2024-08-17 12:36:22 +02:00
proddy
22ed193609 unused css 2024-08-17 12:36:09 +02:00
proddy
b2bcc67923 typo 2024-08-17 12:36:01 +02:00
proddy
7a1a5aad7e package update 2024-08-17 12:35:53 +02:00
Proddy
8eb2de5e76 Merge pull request #1941 from proddy/dev
correct firmware naming #1933
2024-08-16 20:03:09 +02:00
Proddy
32053ad0fd Merge pull request #1946 from MichaelDvP/dev
typo
2024-08-16 17:54:01 +02:00
MichaelDvP
6c6461dd9a typo 2024-08-16 17:42:33 +02:00
Proddy
8975c5fba2 Merge branch 'dev' into dev 2024-08-16 17:06:00 +02:00
proddy
1c86cc6799 remove default board profile from ci_s_4M 2024-08-16 16:52:37 +02:00
Proddy
dc7042c8fa Merge pull request #1945 from MichaelDvP/dev
add energy and meter for cooling #1940
2024-08-16 16:49:25 +02:00
MichaelDvP
388245ece9 add energy and meter for cooling #1940 2024-08-16 16:44:36 +02:00
proddy
bc8a840695 fix sonar compile 2024-08-16 16:14:07 +02:00
proddy
1d287b6e20 auto-formatting 2024-08-16 16:13:58 +02:00
Proddy
140aba52d1 Merge pull request #1939 from paludi/patch-1
add hint for manual workaround to preserve nrg values to CHANGELOG_LATEST.md
2024-08-16 15:45:03 +02:00
Proddy
d06465132c Merge pull request #1943 from mattreim/dev
Add German translation
2024-08-16 15:44:31 +02:00
Proddy
0a1743b99b Merge branch 'emsesp:dev' into dev 2024-08-16 15:33:49 +02:00
Proddy
a8895290bc Merge pull request #1942 from MichaelDvP/dev
some small fixes
2024-08-16 15:33:33 +02:00
mattreim
668334d139 Add German translation 2024-08-16 15:32:40 +02:00
proddy
aa8009019d ci_s_16M uses Tasmota 2024-08-16 15:29:21 +02:00
MichaelDvP
00e2808afe use fixed names for energies in nvs #1938 2024-08-16 14:58:58 +02:00
MichaelDvP
68ec48fa80 start scheduler conditions after 1 min 2024-08-16 14:57:29 +02:00
Proddy
2fad0df647 Merge branch 'emsesp:dev' into dev 2024-08-16 14:49:49 +02:00
proddy
bbbea027cb correct firmware naming #1933 2024-08-16 14:49:05 +02:00
MichaelDvP
ed0fcefc27 Merge branch 'dev' of https://github.com/emsesp/EMS-ESP32 into dev 2024-08-16 14:45:21 +02:00
Proddy
1672cc84ef Merge pull request #1931 from proddy/dev
Web changes #1920
2024-08-16 13:49:32 +02:00
proddy
5404537da8 move restarting to parent component - #1920 2024-08-16 13:48:28 +02:00
proddy
d3a7ab8fc1 formatting 2024-08-16 13:48:05 +02:00
proddy
1f8c966022 package update 2024-08-16 13:47:38 +02:00
proddy
0ff1de8baa special functions naming - #1920 2024-08-16 13:47:29 +02:00
proddy
7e0d568a5a code formatting 2024-08-16 13:47:08 +02:00
proddy
a3f69b64df fix autorefresh in open dialog - #1920 2024-08-16 13:46:57 +02:00
paludi
10dd117d0f Update CHANGELOG_LATEST.md
added hint to manually preserve value of dhw energy (nrgww)
2024-08-16 10:48:04 +02:00
proddy
1a6bfebf9b check file extension on drag/drop 2024-08-15 21:56:49 +02:00
proddy
500a398dd1 re-arrange application settings page - Updates to webUI #1920 2024-08-15 21:15:51 +02:00
proddy
d4d296a97e translations for drag&drop 2024-08-15 16:48:24 +02:00
proddy
07507eaeb6 show spinner when waiting for EMS to connect 2024-08-15 16:48:12 +02:00
proddy
b1d5d07cab reorder upload and download, fix minor issues 2024-08-15 16:23:21 +02:00
proddy
e0765f1c5b formatting 2024-08-15 12:27:50 +02:00
proddy
817b2d1ad7 add back drag & drop to upload 2024-08-15 12:14:14 +02:00
proddy
4e640a0abe updates to upload, move mock eventsource server into middleware 2024-08-15 09:59:08 +02:00
MichaelDvP
20b833b4ee scheduler/mqtt running assync with psram, sync without psram 2024-08-15 07:56:24 +02:00
proddy
5a058746bb update the upload 2024-08-14 18:53:52 +02:00
MichaelDvP
7dc4dc67f6 don't show factory partiton button if we are in factory 2024-08-13 08:03:22 +02:00
MichaelDvP
9a46db07d1 fix hex buffer length 2024-08-12 12:35:23 +02:00
proddy
d5fec4aec8 psram check #1933 2024-08-12 09:29:56 +02:00
MichaelDvP
b5d964c074 Merge branch 'dev' of https://github.com/emsesp/EMS-ESP32 into dev 2024-08-12 09:26:46 +02:00
MichaelDvP
9181b70394 checks for long raw custom entities #1934 2024-08-12 09:26:37 +02:00
MichaelDvP
8a409e8e9c restart dialog 2024-08-12 09:23:46 +02:00
proddy
f5968412a0 useAutoRequest tidy up 2024-08-11 10:40:11 +02:00
proddy
962d007d91 replace Refresh with Alova useAutoRequest() 2024-08-10 20:54:57 +02:00
Proddy
cde8ba0e9e Merge branch 'dev' into dev 2024-08-10 15:07:44 +02:00
proddy
5b60ec1836 move to emsesp.org 2024-08-10 15:06:16 +02:00
proddy
1b70b55989 update demo url 2024-08-10 14:58:48 +02:00
proddy
a842a3ee43 add back package manager 2024-08-10 13:41:06 +02:00
proddy
3c04bfadc9 remove cache 2024-08-10 13:19:17 +02:00
proddy
fd5e254a84 change package manager 2024-08-10 13:19:08 +02:00
proddy
53d0afb774 3.7.0-dev.31 2024-08-10 13:18:56 +02:00
proddy
a718f8ed0d Alova 3 now working 2024-08-10 11:39:31 +02:00
proddy
bb98042957 default Alova v2 2024-08-10 10:22:14 +02:00
proddy
efa9718081 fix return for app settings 2024-08-10 10:22:01 +02:00
proddy
681cdfb01e disable changing the board profile if its a fixed BBQKees one 2024-08-09 14:43:13 +02:00
proddy
251b0ea287 api refactoring 2024-08-09 14:35:33 +02:00
proddy
93ed502e57 fix appending 16M to S3 downloads 2024-08-09 10:45:48 +02:00
proddy
3d1fba1c30 fixes WiFi scan not working when EMS-ESP is an Access Point 2024-08-09 10:20:41 +02:00
proddy
3e7ce2025a package update 2024-08-09 09:31:48 +02:00
proddy
08f1915b4c prevent forcing caps when on mobile (ios) 2024-08-09 09:31:36 +02:00
proddy
5355c65da8 FC removal 2024-08-08 12:57:04 +02:00
proddy
3481a879c2 alova 3 2024-08-08 12:39:48 +02:00
Proddy
dc53ff42f6 Merge branch 'emsesp:dev' into dev 2024-08-07 09:30:51 +02:00
Proddy
f10d8757b8 Merge pull request #1928 from MichaelDvP/dev
do not close local shell #1926
2024-08-07 09:30:39 +02:00
Proddy
d807f2fa21 Merge branch 'emsesp:dev' into dev 2024-08-07 09:30:05 +02:00
proddy
46ab42531d native build updates 2024-08-07 09:16:58 +02:00
MichaelDvP
70b16149d0 read custom entity raw from fetched telegrams 2024-08-07 07:42:30 +02:00
MichaelDvP
0105338e29 do not close local shell #1926 2024-08-06 14:17:53 +02:00
proddy
7b6fe53e74 add console tests to Unity 2024-08-06 10:33:22 +02:00
proddy
3045144cc3 package update 2024-08-06 10:33:12 +02:00
Proddy
0e8655862e Merge pull request #1927 from mattreim/dev 2024-08-05 14:23:15 +02:00
mattreim
e8839b22b8 Add scheduler dialog to i18n 2024-08-05 13:53:30 +02:00
Proddy
968cd7de5f Merge branch 'emsesp:dev' into dev 2024-08-05 10:51:39 +02:00
proddy
66ed8a1e17 fixes #1926 - serial shell not working 2024-08-05 10:50:51 +02:00
Proddy
8e52af2338 Merge branch 'emsesp:dev' into dev 2024-08-05 07:00:45 +02:00
Proddy
38ae744a10 Merge pull request #1925 from mattreim/dev
Fix modules translation
2024-08-05 06:00:53 +02:00
mattreim
4ade5094f3 Fix modules translation 2024-08-05 01:57:24 +02:00
Proddy
a9bbbc025f Merge branch 'emsesp:dev' into dev 2024-08-04 22:03:59 +02:00
Proddy
aa807c3b78 Merge pull request #1924 from mattreim/dev
Add modules helper to i18n
2024-08-04 21:45:15 +02:00
mattreim
48dc9738b1 Add modules helper to i18n 2024-08-04 21:41:00 +02:00
Proddy
574f685d93 Merge pull request #1923 from mattreim/dev
Added more German translation and google translation to boiler pump characteristic
2024-08-04 20:17:18 +02:00
mattreim
01b63482bd Add google translation to boiler pump characteristic 2024-08-04 18:58:36 +02:00
mattreim
09d393d002 Added more German translation 2024-08-04 17:47:17 +02:00
Proddy
1f2f77b833 Merge pull request #1921 from MichaelDvP/dev
switchProgMode offset 13 to 19, increase length of raw custom entities
2024-08-04 16:15:34 +02:00
MichaelDvP
8d70dc7a02 custom entity RAW allow length up to 256 2024-08-04 16:07:57 +02:00
MichaelDvP
95c995f87a switchProgMode offset 13 to 19 2024-08-04 15:52:31 +02:00
Proddy
1a11aa50ac Merge pull request #1919 from MichaelDvP/dev
fix switchProgMode #1903
2024-08-04 14:58:33 +02:00
MichaelDvP
ebb327edf6 fix switchProgMode #1903 2024-08-04 10:44:29 +02:00
proddy
7751baf8bf upgrade alova to v3 2024-08-03 15:35:54 +02:00
Proddy
9a23d4e2b3 Merge pull request #1914 from proddy/dev
various changes, work in progress
2024-08-03 13:25:36 +02:00
Proddy
71183d81e5 Merge branch 'emsesp:dev' into dev 2024-08-03 13:24:54 +02:00
Proddy
276a19648e Merge pull request #1917 from MichaelDvP/dev
fix #1910 and small changes
2024-08-03 13:24:40 +02:00
proddy
5050d11555 add Unity unit tests 2024-08-03 13:22:24 +02:00
proddy
8f91394c75 add Michaels fix for circuits 2024-08-02 14:28:39 +02:00
proddy
2c21658de7 don't compile with DEBUG for tests 2024-08-02 14:24:23 +02:00
MichaelDvP
732949fdb8 fix api no dhw in boiler 2024-08-02 14:16:37 +02:00
proddy
2ec52cccf0 add test for thermostat multi-circuit 2024-08-02 14:16:14 +02:00
proddy
ce1c5671b4 add comments 2024-08-02 14:15:55 +02:00
MichaelDvP
ab587fa1b7 move 6x identical code to one function add_ha_bool 2024-08-02 12:44:47 +02:00
MichaelDvP
aeafb5f566 remove useless boiler setBurnPow and wrong wwsetpumppow #1910 2024-08-02 12:37:51 +02:00
proddy
60c1da327b compile all platforms 2024-08-02 12:34:07 +02:00
proddy
3159561cfb compile native on OSX 2024-08-02 12:20:09 +02:00
MichaelDvP
21c23e1fd8 remove useless http check 2024-08-02 12:04:17 +02:00
proddy
de582f2f61 added coverage to unit tests 2024-08-02 10:17:26 +02:00
proddy
a22ee0274b check BBQKees as mfg 2024-08-02 09:59:59 +02:00
proddy
69aa7275d8 surpress output when running Unity tests 2024-08-02 09:59:48 +02:00
proddy
57416bc817 remove __linux__ 2024-08-02 09:59:32 +02:00
proddy
7e8a4f72ef add comment 2024-08-02 09:59:22 +02:00
proddy
085314fba4 added one more test to test the tests while testing 2024-08-02 09:59:13 +02:00
Proddy
cd79e73693 Merge branch 'dev' into dev 2024-08-02 09:16:31 +02:00
Proddy
e109e383c0 Merge pull request #1913 from MichaelDvP/dev
fix sonar complains
2024-08-02 09:13:30 +02:00
MichaelDvP
cd992ff457 fix sonar complains 2024-08-02 08:42:32 +02:00
Proddy
d0b01812e6 Merge pull request #1912 from MichaelDvP/dev
scheduler: change to std::string
2024-08-02 08:30:30 +02:00
MichaelDvP
70e5b19223 scheduler: change to std::string 2024-08-02 08:20:10 +02:00
MichaelDvP
fb04bdf54c platform 6.8.1 2024-08-02 08:08:11 +02:00
MichaelDvP
f417cb991d all devices api default to /values 2024-08-02 08:07:55 +02:00
proddy
f47dd7b629 Merge branch 'dev' of https://github.com/proddy/EMS-ESP32 into dev 2024-08-01 22:19:38 +02:00
proddy
11d0335815 text changes and comments 2024-08-01 22:14:19 +02:00
proddy
b38ec2f25e support Unity testing 2024-08-01 22:13:52 +02:00
proddy
4ec5739b67 test on Windows 2024-08-01 22:12:33 +02:00
proddy
dac033e962 remove PrettyAsyncJsonResponse 2024-08-01 22:11:12 +02:00
Proddy
279d40636c Merge pull request #1907 from MichaelDvP/dev
refactor common commands
2024-08-01 19:25:54 +02:00
MichaelDvP
900b2bf340 scheduler, small fixes, allow commands in json get url 2024-08-01 18:52:26 +02:00
MichaelDvP
1b69c3ef4e platform 6.8.0 2024-08-01 18:42:21 +02:00
MichaelDvP
63ba0df07a update packages 2024-08-01 18:42:03 +02:00
MichaelDvP
49b7f99e81 allow call system allvalues [values|info|entities], increase TCP stack 2024-07-31 14:15:46 +02:00
MichaelDvP
a33733484c always default to values (incl. allvalues), fix typo, 2024-07-31 10:41:15 +02:00
MichaelDvP
95f0478fa7 add switchProgMode #1903 2024-07-30 15:18:01 +02:00
MichaelDvP
80aa1e65b7 refactor common commands #1897 2024-07-30 15:07:45 +02:00
MichaelDvP
d844e67239 Merge branch 'dev' of https://github.com/emsesp/EMS-ESP32 into dev 2024-07-29 07:38:19 +02:00
MichaelDvP
ee193c6366 read states of VC0, VW1, #1898 2024-07-29 07:37:57 +02:00
Proddy
ab06c53720 Merge pull request #1901 from proddy/dev
updates to scheduler web
2024-07-28 19:50:29 +02:00
proddy
a14d3b98e1 must have one button type selected 2024-07-28 11:02:51 +02:00
proddy
0fbba50b2f updates to scheduler web 2024-07-28 10:56:33 +02:00
Proddy
4b136fb7ee Merge pull request #1900 from proddy/dev
updates to scheduler web ui for #1893
2024-07-28 09:27:05 +02:00
proddy
f4781b91c2 fix bootloop with missing version 2024-07-28 09:26:02 +02:00
proddy
0edb5c0fd9 updates to scheduler for immediate commands #1893 2024-07-27 15:04:22 +02:00
proddy
008e2f0c7a package update 2024-07-27 15:03:37 +02:00
Proddy
0a7f3ae930 Merge pull request #1899 from MichaelDvP/dev
scheduler single and fixes
2024-07-26 21:47:39 +02:00
MichaelDvP
7703ca15dc Merge branch 'dev' of https://github.com/emsesp/EMS-ESP32 into dev 2024-07-26 18:30:14 +02:00
MichaelDvP
a83bca995b typo 2024-07-26 18:23:37 +02:00
MichaelDvP
5b67060674 scheduler single action on command 2024-07-26 18:00:41 +02:00
MichaelDvP
1183db88b7 command executed only for commands without value, fix hcx custom names 2024-07-26 17:59:49 +02:00
MichaelDvP
dd7cce508f add system/values 2024-07-26 17:58:16 +02:00
MichaelDvP
a06b9d7268 clear response_id on tx_error 2024-07-26 17:58:00 +02:00
Proddy
8f082dfd68 Merge pull request #1895 from proddy/dev
some renaming, more logs
2024-07-26 13:33:03 +02:00
proddy
65a5eeee69 debug text changes 2024-07-26 13:25:44 +02:00
proddy
7a3300b8f8 rename console "Command executed" 2024-07-26 13:25:30 +02:00
proddy
78a0fc2091 add optional object to be included in error message 2024-07-26 13:25:19 +02:00
proddy
51783ab7a1 tidy up how paths are checked for API and MQTT 2024-07-26 13:25:02 +02:00
proddy
b3532bd372 remove version from payload 2024-07-26 13:24:40 +02:00
proddy
c947889e53 add test for mqtt via API 2024-07-26 13:24:28 +02:00
proddy
e169f27ade include psram in hardware status 2024-07-26 13:24:18 +02:00
proddy
3f6157d7a4 fetch hardware status on load, so we have the psram setting 2024-07-26 13:23:47 +02:00
proddy
ae7737e47b rename HardwareStatus to hardwareStatus 2024-07-26 13:23:23 +02:00
MichaelDvP
8adb35e47a response "" for empty, fix value for some cases 2024-07-25 17:58:38 +02:00
MichaelDvP
9c80c92f06 fix response for empty 2024-07-25 17:27:32 +02:00
MichaelDvP
9ba026934b Merge branch 'dev' of https://github.com/emsesp/EMS-ESP32 into dev 2024-07-25 15:49:52 +02:00
Proddy
593593d3bb Merge pull request #1891 from proddy/dev
camelCase, added free_caps to webUI, renamed EMSESPStatus endpoint to Hardware
2024-07-25 15:20:03 +02:00
MichaelDvP
eb120f5b90 response to system send telegram, redetect device, not only update from database 2024-07-25 14:48:32 +02:00
proddy
4446c839d3 updated text for system info 2024-07-25 14:39:04 +02:00
MichaelDvP
c6e6b62435 fix mqtt-ssl 2024-07-25 14:33:15 +02:00
MichaelDvP
babf112a7a analogsensor default name fix 2024-07-25 14:32:55 +02:00
MichaelDvP
51d323a41d validators, names when editing sensors 2024-07-25 14:32:34 +02:00
MichaelDvP
cfecb390f9 scheduler task priority, add comments 2024-07-25 14:31:24 +02:00
MichaelDvP
bdfd40d230 cleanup, typos, formatting 2024-07-25 14:30:43 +02:00
proddy
89e95daaee fix typo freMem 2024-07-25 13:50:16 +02:00
proddy
2970065a4a add free_caps 2024-07-25 13:18:10 +02:00
proddy
9b20edf862 change back default test 2024-07-25 12:52:32 +02:00
proddy
141fa3c953 #1860 camelCase system/info 2024-07-25 12:52:22 +02:00
proddy
1eb903d228 show free caps in web 2024-07-25 12:51:51 +02:00
proddy
26e290a4ef package update 2024-07-25 12:51:35 +02:00
proddy
645d6a514c rename HardwareStatus 2024-07-25 12:51:25 +02:00
MichaelDvP
a8307bddbe Merge branch 'dev' of https://github.com/emsesp/EMS-ESP32 into dev 2024-07-24 20:38:23 +02:00
MichaelDvP
5da56bc853 read_next checks 2024-07-24 20:33:19 +02:00
Proddy
1b666a07dc Merge pull request #1888 from proddy/dev
fix system command
2024-07-24 17:59:59 +02:00
proddy
d92f17c774 remove TODO 2024-07-24 17:59:32 +02:00
proddy
05ff54e5e5 log_info for command calls 2024-07-24 17:57:51 +02:00
MichaelDvP
b2873fb901 fix terminal read command 2024-07-24 17:22:39 +02:00
proddy
fa54cb6a48 more minor changes to clean up messaging 2024-07-24 13:22:34 +02:00
proddy
0054a89c38 add test for system commands - to see what is logged 2024-07-24 09:33:39 +02:00
proddy
5c2aa63842 bump to 3.7.0-dev.27 2024-07-23 23:07:52 +02:00
proddy
0cca9b7723 removed comment 2024-07-23 23:07:12 +02:00
proddy
93e4e4ba0d increase rx/tx queue when running standalone 2024-07-23 23:07:04 +02:00
proddy
70344ce832 rename deviceID - removing space 2024-07-23 23:06:46 +02:00
proddy
c4f4abf1bd remove compression 2024-07-23 23:06:16 +02:00
proddy
0028dbfb4f package update 2024-07-23 22:32:24 +02:00
proddy
ee87b75cf5 prevent 'call system test' crashing 2024-07-23 22:30:40 +02:00
proddy
89e9b14347 add values_cmd 2024-07-23 22:29:41 +02:00
proddy
fa24a6878e add values as a possible command 2024-07-23 22:29:30 +02:00
proddy
ada7b1740b handle attribute_s like we did with the other device classes 2024-07-23 20:48:52 +02:00
proddy
0e40acb90f formatting for logging in debug/standalone 2024-07-23 20:48:30 +02:00
proddy
ae9aaf327c text change 2024-07-23 20:48:15 +02:00
proddy
76418dd39d show message if there is no error message set 2024-07-23 20:48:06 +02:00
proddy
e30c2b673e more tests 2024-07-23 20:47:49 +02:00
Proddy
bcd1b90bc5 Merge branch 'emsesp:dev' into dev 2024-07-23 18:58:07 +02:00
proddy
baf381461f fix system commands - #1886 2024-07-23 18:57:50 +02:00
proddy
48b5970d28 text changes 2024-07-23 18:55:26 +02:00
proddy
0d0d0aa111 show attribute in log message 2024-07-23 18:54:17 +02:00
proddy
49ca42d683 updated tesst with system commands like send 2024-07-23 18:53:03 +02:00
proddy
ad561129a2 remove unused imports 2024-07-23 18:52:46 +02:00
proddy
0b8034a3d6 package update 2024-07-23 18:52:36 +02:00
MichaelDvP
bc7d848b9b fix 1886 raw telegram 2024-07-23 17:19:56 +02:00
MichaelDvP
39199e1701 clear command output if cf found 2024-07-23 17:18:54 +02:00
Proddy
dfe85b9ba7 Merge pull request #1885 from MichaelDvP/dev
fix command prefix parsing #1884
2024-07-23 10:49:11 +02:00
MichaelDvP
ed234f9fee Merge branch 'dev' of https://github.com/emsesp/EMS-ESP32 into dev 2024-07-23 10:41:26 +02:00
Proddy
e90f80d690 Merge pull request #1883 from proddy/dev
refactor web file structure and seperate settings from status
2024-07-23 10:28:49 +02:00
MichaelDvP
6a9e073f03 fix command prefix parsing #1884 2024-07-23 10:12:40 +02:00
proddy
914b84de7d include local copy of module library for native compiling without dependencies 2024-07-23 10:07:49 +02:00
proddy
e98264d1a6 go back to local copy of ArduinoJson as a single header 2024-07-23 10:07:25 +02:00
proddy
641b4e5bf0 remove scan 2024-07-22 17:08:11 +02:00
proddy
77e5c6bf2c add message to log menu option 2024-07-22 15:01:20 +02:00
Proddy
60368a32c3 Merge branch 'emsesp:dev' into dev 2024-07-22 14:46:44 +02:00
proddy
53e9a062e8 refactor web file structure and seperate settings from status 2024-07-22 14:46:22 +02:00
Proddy
9c20e93b3c Merge pull request #1881 from proddy/dev
add back button
2024-07-21 19:14:44 +02:00
proddy
d0976cd660 add back button 2024-07-21 19:13:54 +02:00
Proddy
152b7bdee2 Merge pull request #1880 from proddy/dev
fix downloading of 16M firmware bins
2024-07-21 14:45:11 +02:00
proddy
7ef99f3dc0 remove obsolete include 2024-07-21 14:44:10 +02:00
proddy
217d2703f5 fix downloading of 16M builds 2024-07-21 14:42:47 +02:00
proddy
452b3be953 add comment 2024-07-21 14:42:31 +02:00
proddy
8a291bea61 add comment 2024-07-21 14:42:22 +02:00
Proddy
169e8be5ee Merge pull request #1879 from proddy/dev
fixes to api
2024-07-21 13:00:28 +02:00
proddy
62152825bd cleanup 2024-07-21 12:59:23 +02:00
proddy
2a9ebde829 fix unknown command being added to return json 2024-07-21 12:59:19 +02:00
proddy
006b38df27 make standalone compile 2024-07-21 12:58:42 +02:00
proddy
cb8e8cb1da update test 2024-07-21 12:58:28 +02:00
proddy
337d27a41c fix lint warnings 2024-07-21 12:57:51 +02:00
Proddy
55476a7828 Merge pull request #1877 from MichaelDvP/dev
schedule onChange optimize queue
2024-07-21 09:27:18 +02:00
MichaelDvP
74b009f658 schedule onChange optimize queue 2024-07-21 09:04:53 +02:00
Proddy
e4decb53b0 Merge pull request #1876 from MichaelDvP/dev
scheduler async, command use string, lowercase
2024-07-20 20:15:31 +02:00
MichaelDvP
4dd3a668df fix http.GetString 2024-07-20 19:10:20 +02:00
MichaelDvP
c21c0b5dd1 scheduler async, command use string, lowercase 2024-07-20 18:21:26 +02:00
Proddy
d35dd1a9c4 Merge pull request #1875 from proddy/dev
add test for URI in scheduler
2024-07-20 16:32:11 +02:00
proddy
74c4940971 add test for URI in scheduler 2024-07-20 16:31:40 +02:00
Proddy
87548f9322 Merge pull request #1874 from proddy/dev
web updates and scheduler
2024-07-20 15:49:55 +02:00
proddy
809c5c7ead scheduler http tests 2024-07-20 13:22:01 +02:00
proddy
353e1f4460 remove comments 2024-07-20 13:21:20 +02:00
proddy
f27eb05024 color log lines to match system log 2024-07-20 13:03:30 +02:00
proddy
6bdca66bfb rotate level 2024-07-20 13:03:17 +02:00
proddy
164c1f5542 add comment TODO 2024-07-20 11:45:02 +02:00
proddy
8838eae3fa package update 2024-07-20 11:44:51 +02:00
proddy
d3447694fa rename alphanumeric 2024-07-20 11:44:44 +02:00
proddy
27eb56aee8 scheduler command max 300 2024-07-20 11:44:31 +02:00
proddy
ac27096087 dont close dialog if clicking outside, also fix warning https://w3c.github.io/aria/#aria-hidden 2024-07-20 11:44:18 +02:00
Proddy
a0ba0e8af9 Merge pull request #1873 from MichaelDvP/dev
Scheduler web access and others
2024-07-20 09:47:17 +02:00
MichaelDvP
c3296ccf97 offset correction for next telegram 2024-07-19 19:57:13 +02:00
MichaelDvP
1a400bfd40 Merge branch 'dev' of https://github.com/emsesp/EMS-ESP32 into dev 2024-07-19 18:42:50 +02:00
MichaelDvP
58c48584ac fetch next telegram part for different offset 2024-07-19 18:40:24 +02:00
Proddy
5603360aab Merge pull request #1872 from proddy/dev
more minor changes
2024-07-19 13:51:37 +02:00
MichaelDvP
f7278ab3a9 v3.7.0-dev.26, changelog 2024-07-19 12:50:50 +02:00
MichaelDvP
3ad676235d update pkg 2024-07-19 12:45:40 +02:00
MichaelDvP
559caeb30f schedulder enhancement url json #1806 2024-07-19 12:45:27 +02:00
MichaelDvP
b857eedab8 add cooling parameters #1857 2024-07-19 12:27:24 +02:00
MichaelDvP
9ac1907e16 naming for RC220 #1871 2024-07-19 12:20:56 +02:00
proddy
9efd9f27fc add comment 2024-07-19 10:12:11 +02:00
proddy
d8c1a7e82d show brand in system/info 2024-07-19 10:12:03 +02:00
proddy
79e51ad71c package update 2024-07-19 10:11:45 +02:00
proddy
887cd33f5b change order of menu items, make all bus status clickable for bbqkees 2024-07-18 15:59:13 +02:00
proddy
7826f3b873 add HA API test 2024-07-18 15:00:38 +02:00
proddy
3af3d3f0d8 add comments 2024-07-18 15:00:25 +02:00
proddy
ce84aae950 removed obsolete files 2024-07-18 15:00:18 +02:00
Proddy
5b4d392640 Merge pull request #1869 from MichaelDvP/dev
add RT800 remote #1867, use ems_bus_id for raw telegrams if src is not set(0)
2024-07-18 14:54:15 +02:00
MichaelDvP
f5e2bbfdec Merge branch 'dev' of https://github.com/emsesp/EMS-ESP32 into dev 2024-07-18 12:39:40 +02:00
Proddy
a7dcb32931 Merge pull request #1868 from proddy/dev
minor changes
2024-07-18 11:26:52 +02:00
Proddy
d135fa3a66 Merge branch 'dev' into dev 2024-07-18 11:26:44 +02:00
proddy
836f6bf5df remove TODO comment 2024-07-18 10:11:15 +02:00
proddy
581e3e6649 include version as HA sensor - https://github.com/tp1de/ioBroker.ems-esp/issues/84 2024-07-18 09:53:57 +02:00
proddy
48f48564e7 package update 2024-07-18 09:53:46 +02:00
proddy
7891b8abe5 update node 2024-07-17 09:15:12 +02:00
proddy
0c1db756c7 show unknown command in API output so its same as a log 2024-07-17 09:14:39 +02:00
proddy
f34f503b19 no need to check for duplicate EMS devices when showing commands 2024-07-17 09:14:20 +02:00
proddy
e2ce367478 fix left over testing 2024-07-17 09:14:04 +02:00
proddy
0c1c3c9b8d rename max alloc (largest free heap memory block) 2024-07-16 22:46:17 +02:00
proddy
31be3fb3c3 add icon for bbqkees boards 2024-07-16 20:56:32 +02:00
proddy
b31e035eeb text changes 2024-07-16 20:34:06 +02:00
proddy
fb0491d8ba some more refactoring around processing commands 2024-07-16 20:34:00 +02:00
proddy
95f6d57df4 include scheduler name so we can show it in log 2024-07-16 20:33:27 +02:00
proddy
51b24fe766 remove english description, lists to non-plural 2024-07-16 20:33:06 +02:00
proddy
83042e3560 update test for 2 thermostats 2024-07-16 20:32:41 +02:00
proddy
2e9e5b69be add comments 2024-07-16 20:32:31 +02:00
proddy
78e1ec483e package update 2024-07-16 20:32:17 +02:00
MichaelDvP
711d1dfe94 remote RT800 #1867 2024-07-16 19:09:59 +02:00
MichaelDvP
54a023d812 update packages 2024-07-16 19:08:05 +02:00
MichaelDvP
58aacc189f system/send: use busId if SRC is null 2024-07-16 13:57:03 +02:00
Proddy
af0e8db8ea Merge pull request #1866 from MichaelDvP/dev
fix value info for second thermostat
2024-07-15 23:26:40 +02:00
MichaelDvP
4755e685f4 Merge branch 'dev' of https://github.com/emsesp/EMS-ESP32 into dev 2024-07-15 22:12:42 +02:00
MichaelDvP
a3ef7fcf09 fix value info for second thermostat 2024-07-15 22:08:51 +02:00
Proddy
1afc21d565 Merge pull request #1865 from proddy/dev
moved Device model to Hardware Status page (was System Status)
2024-07-15 21:36:54 +02:00
Proddy
e15f0e7d6d Merge branch 'emsesp:dev' into dev 2024-07-15 21:35:46 +02:00
Proddy
4cfcb33b4f Merge pull request #1864 from MichaelDvP/dev
set `remotehum` as CMD
2024-07-15 21:35:30 +02:00
proddy
d0bb9aca3b rename System Status to Hardware Status 2024-07-15 21:31:11 +02:00
proddy
2d63320afb text changes, rename system status to hardware, added model 2024-07-15 21:17:02 +02:00
proddy
f04ab8e3c1 update packages 2024-07-15 20:59:27 +02:00
proddy
87b47c57bb add TODO reminders 2024-07-15 20:59:14 +02:00
proddy
16fa03fb48 default test back to general 2024-07-15 20:59:05 +02:00
proddy
6097c01d72 sort devices and change model 2024-07-15 20:58:53 +02:00
MichaelDvP
dae1d4e3a8 set remotehum as CMD 2024-07-15 19:52:56 +02:00
Proddy
686ed20222 Merge pull request #1863 from MichaelDvP/dev
add CMD to api/mqtt to show it in ioBroker, etc.
2024-07-15 11:42:41 +02:00
MichaelDvP
ce33ec4bd3 validate names lowerCase 2024-07-15 11:16:42 +02:00
MichaelDvP
5b143cd22a change order in "cannot find 'device' in 'command'" 2024-07-15 08:56:36 +02:00
MichaelDvP
4c6d396d70 analogsensor default name, validators 2024-07-15 08:10:21 +02:00
MichaelDvP
3d2912b998 check system/values lower case 2024-07-15 08:08:34 +02:00
MichaelDvP
46f674f0dc fix info/values command with circuit api/device/circuit/values 2024-07-15 08:07:43 +02:00
MichaelDvP
7727093767 Merge branch 'dev' of https://github.com/emsesp/EMS-ESP32 into dev 2024-07-15 07:13:30 +02:00
Proddy
96bb220b36 Merge pull request #1855 from proddy/dev
Implements Feature: message notification #1854
2024-07-14 23:46:16 +02:00
proddy
7fc2afc11b auto comments 2024-07-14 23:45:07 +02:00
proddy
5f1cc56939 remove obsolete file 2024-07-14 23:44:54 +02:00
proddy
10444473c9 clean make 2024-07-14 23:44:43 +02:00
proddy
301a1afd41 auto formatting 2024-07-14 23:23:43 +02:00
proddy
b35ff53d63 add TODO for BSSID 2024-07-14 23:22:55 +02:00
proddy
2c2ffe1555 show message if empty return from call command 2024-07-14 23:22:28 +02:00
proddy
d696da2ee8 change debug msg 2024-07-14 23:22:14 +02:00
proddy
a6b307442c fix layout on mobile 2024-07-13 16:21:56 +02:00
proddy
710a924cbe package update 2024-07-13 16:21:48 +02:00
proddy
fbe20fec41 optimize device_info 2024-07-12 15:20:48 +02:00
proddy
f839c07d23 full coverage for api tests 2024-07-12 15:20:37 +02:00
proddy
901b58220e update packages 2024-07-12 15:20:27 +02:00
proddy
c4ace6f877 fix typo 2024-07-11 17:02:33 +02:00
proddy
937e4890f7 fix typo 2024-07-11 17:02:23 +02:00
proddy
f3f5bbb460 add comment 2024-07-11 17:02:10 +02:00
proddy
a9d85748ef back to default test 2024-07-11 17:01:59 +02:00
proddy
d7ba360483 fixes for device_info 2024-07-11 16:29:37 +02:00
proddy
76675c79fb update test data for api3 2024-07-11 16:27:10 +02:00
proddy
fec76baea5 fix to compile on Mac OSX 2024-07-11 16:26:50 +02:00
proddy
2b7b8c1bd9 fix for compiling on Mac OSX Apple Silicon 2024-07-11 16:26:33 +02:00
proddy
d3d303cfc4 update to show problem and a change 2024-07-11 16:26:14 +02:00
proddy
3c64693275 fixes #1859 2024-07-11 11:03:32 +02:00
proddy
e1ecb78375 schedule name can be empty 2024-07-11 10:42:35 +02:00
proddy
0de73c8c85 package update 2024-07-11 10:42:23 +02:00
proddy
7e0e28f515 update dumps 2024-07-10 14:55:04 +02:00
proddy
4a2036d588 no need to append space, as strings can be quoted 2024-07-10 13:12:18 +02:00
proddy
7b80524a5a scheduler name can be empty 2024-07-10 13:11:57 +02:00
proddy
1da44afddb getBBQKeesGatewayDetails 2024-07-10 12:54:53 +02:00
proddy
154b1d5ec1 show if running debug mode in console 2024-07-10 12:53:47 +02:00
proddy
07c6f8993d show help when command not found 2024-07-10 12:53:30 +02:00
proddy
4f40a3d990 Show bbqkees model - #1815 2024-07-10 12:53:18 +02:00
MichaelDvP
c3ce0c1e2d send CMD value for number as NAN 2024-07-08 19:04:16 +02:00
MichaelDvP
3d7378a1a8 cmd info shows right type (number/enum), no value 2024-07-08 18:02:14 +02:00
proddy
6f0062be5c replace size with isNull for jsondoc. size() walks a linked-list to count the elements, so its time complexity is O(n). 2024-07-08 15:29:33 +02:00
proddy
4f9a32fb36 typo 2024-07-08 15:26:21 +02:00
proddy
f05a012ef3 concatenate all token strings - experimental 2024-07-08 14:57:26 +02:00
proddy
e4e1bc3c1e remove old debug statement 2024-07-08 14:56:57 +02:00
proddy
a902a24150 fix typo 2024-07-08 14:56:38 +02:00
proddy
bef664b6d6 show RSSI in standalone to test negative value with shuntingyard 2024-07-08 14:56:21 +02:00
proddy
9bda29044f formatting 2024-07-08 12:06:20 +02:00
proddy
b9c2c2ad59 update api tests 2024-07-08 12:06:03 +02:00
proddy
39b5aa6c8e formatting 2024-07-08 12:05:45 +02:00
proddy
94b0f21461 EMSESP_DEFAULT_PUBLISH_TIME_OTHER is 1 minute 2024-07-08 12:05:31 +02:00
proddy
1f106ac5f5 show DEBUG messages 2024-07-08 12:05:14 +02:00
proddy
8dbde11dd5 default publishing time for other (E.g. scheduler) is 60 seconds 2024-07-08 12:05:01 +02:00
proddy
30430844d3 name is optional 2024-07-08 12:04:34 +02:00
proddy
8dc2677c13 add DEBUG type 2024-07-08 12:04:23 +02:00
proddy
08efccf260 sort by flags (type), not name 2024-07-08 12:04:12 +02:00
MichaelDvP
d774591065 Scheduler name optional 2024-07-08 10:20:13 +02:00
MichaelDvP
2f66fec748 add CMD to api/mqtt to show it in ioBroker 2024-07-08 08:06:27 +02:00
proddy
e0d30bfca5 Feature: message notification #1854 2024-07-07 17:15:34 +02:00
proddy
acda3a254c ignore i18n files 2024-07-07 17:14:57 +02:00
Proddy
611f02f81b Merge pull request #1853 from mheyse/fix/modbus-test
Only include mocked modbus data structures in standalone builds.
2024-07-07 09:02:03 +02:00
mheyse
6a721808a4 Only include mocked modbus data structures in standalone builds. 2024-07-06 21:08:39 +02:00
Proddy
9cb6b800cb Merge pull request #1851 from proddy/dev
small change to make sure flags are set in Scheduler with a Timer
2024-07-06 19:27:46 +02:00
proddy
05cd1ef686 ensure flag is set before adding a timer 2024-07-06 19:26:38 +02:00
proddy
5eb56c3243 remove duplicate toast 2024-07-06 19:26:22 +02:00
Proddy
8a4218206d Merge pull request #1850 from MichaelDvP/dev
custom name null and fix HA CMD
2024-07-06 19:06:37 +02:00
MichaelDvP
ba3df3e3df fix cmd HA-mqtt 2024-07-06 17:55:06 +02:00
Proddy
dec7e2ec68 Merge pull request #1847 from proddy/dev
minor updates
2024-07-06 12:40:38 +02:00
proddy
7f0cbe7226 update eslint 2024-07-06 12:34:49 +02:00
proddy
2e6add0dac remove error, unused 2024-07-06 12:34:41 +02:00
proddy
c795eea436 rename partitionsname to partitionname 2024-07-06 12:20:12 +02:00
proddy
ca7373792d add /partition endpoint 2024-07-06 12:19:03 +02:00
proddy
fc4e1c0084 package update 2024-07-06 12:18:50 +02:00
proddy
e92b27c0bb re-order restart button 2024-07-06 12:18:43 +02:00
proddy
9d5eb11ba4 remove "event" from info topic 2024-07-06 12:18:31 +02:00
MichaelDvP
a2c5aebfd9 fix possible crash for custom_name==nullptr, dev.23 2024-07-06 12:06:33 +02:00
Proddy
af07572b1c Merge pull request #1846 from proddy/dev
default shower detect start time 3 minutes (was 2)
2024-07-05 15:19:32 +02:00
proddy
0dc125df4d default shower detect start time 3 minutes (was 2) 2024-07-05 15:19:10 +02:00
Proddy
fb517d2521 Merge pull request #1845 from proddy/dev
github action update for forks (sonar) and test data cleanup
2024-07-04 21:56:35 +02:00
Proddy
503f7e8fbb Merge branch 'emsesp:dev' into dev 2024-07-04 21:56:08 +02:00
proddy
6feae50ecd test data with more - to _ replacements for sensor IDs 2024-07-04 21:55:35 +02:00
proddy
cdac298d38 update test data 2024-07-04 21:55:18 +02:00
proddy
c82b64e257 see if it fixes adjust GitHub actions so they only run for ems-esp and not forks #513 2024-07-04 21:55:08 +02:00
Proddy
5f2e6280ac Merge pull request #1844 from MichaelDvP/dev
rename remote sensor to avoid conflict CMD/INT16 in api/thermostat
2024-07-04 18:11:56 +02:00
MichaelDvP
03c5f48208 rename remote sensor to avoid conflict CMD/INT16 in api/thermostat 2024-07-04 17:20:54 +02:00
Proddy
bab64a3ab3 Merge pull request #1843 from MichaelDvP/dev
remotetemp CMD, temperaturesensor id, controlsettings BC400, Boiler/HP
2024-07-04 16:52:18 +02:00
MichaelDvP
6d0e73cc4b show sensor in remote RC20 2024-07-04 16:15:40 +02:00
MichaelDvP
c527d006dd show Boiler/HP on web pages 2024-07-04 15:46:47 +02:00
MichaelDvP
81d97405f9 Merge branch 'dev' of https://github.com/emsesp/EMS-ESP32 into dev 2024-07-04 14:43:48 +02:00
MichaelDvP
827b7fc370 show RC20 roomtemp in remote 2024-07-04 14:15:36 +02:00
MichaelDvP
2b4b2881c9 changelog v3.7.0-dev.22 2024-07-04 13:47:13 +02:00
MichaelDvP
cee2d5ca31 change temperaturesensor id to underscore notation 2024-07-04 13:42:23 +02:00
MichaelDvP
147804b4b8 change remotetemp to CMD 2024-07-04 13:41:17 +02:00
MichaelDvP
a211f95758 control setting BC400 #1838 2024-07-04 13:02:05 +02:00
Proddy
6b6224dead Merge pull request #1840 from mheyse/fix/check-parameter-order
fix: nullptr linter error
2024-07-04 10:02:31 +02:00
mheyse
8c810f2276 fix nullptr linter error 2024-07-04 09:00:12 +02:00
Proddy
a0ca1ce87c Merge pull request #1839 from proddy/dev
minor updates for modbus
2024-07-03 22:40:54 +02:00
proddy
12a4942714 minor updates for modbus 2024-07-03 22:39:41 +02:00
Proddy
9277efd1d7 Merge pull request #1832 from mheyse/feat/modbus
feat: add Modbus support
2024-07-03 22:14:37 +02:00
mheyse
0c76a249e3 feat: add Modbus support 2024-07-03 15:27:37 +02:00
Proddy
217d90629a Merge pull request #1834 from proddy/dev
Allow device name to be customized
2024-07-03 13:29:44 +02:00
proddy
807804ca90 update tasmota for 4mb builds 2024-07-03 11:42:33 +02:00
proddy
307c196046 #1174 - include translated device type name in dropdown 2024-07-03 11:19:41 +02:00
proddy
0aa8e138b5 update package 2024-07-03 11:19:18 +02:00
proddy
03ef598b42 update package 2024-07-03 11:19:09 +02:00
proddy
86f6e0a2fd add TODO as reminder 2024-07-02 20:05:52 +02:00
proddy
3ae48f4d16 Feature: Allow device name to be customized #1174 2024-07-02 20:05:39 +02:00
proddy
46b79f4819 use name() function instead of name_ 2024-07-02 20:04:46 +02:00
proddy
20381e5e09 auto-formatting 2024-07-02 20:04:23 +02:00
proddy
259cba8aa9 load customization before loading devices 2024-07-02 20:04:11 +02:00
proddy
9a01feafd1 move DEBUG msg 2024-07-02 20:03:49 +02:00
proddy
ab24528582 bump dev.20 2024-07-02 20:03:37 +02:00
proddy
642f44daaa remove TODO 2024-07-02 20:03:25 +02:00
proddy
3309e8c3d6 remove TODO 2024-07-02 20:03:09 +02:00
proddy
c5c5651149 don't include type in name of device (in customization list) 2024-07-01 21:48:40 +02:00
proddy
a28db9369b add comment 2024-07-01 21:48:19 +02:00
proddy
a626ad4af1 add more test data 2024-07-01 21:48:05 +02:00
proddy
fcbd668d7a package update 2024-07-01 21:47:54 +02:00
proddy
2688ed0084 rename Device 2024-07-01 13:43:37 +02:00
Proddy
463fbd69c8 Merge pull request #1831 from proddy/dev
prep for modbus merge
2024-06-29 10:06:38 +01:00
proddy
2155c2e70f update for 3.7.0 2024-06-29 11:05:24 +02:00
proddy
47cbbba675 updates 2024-06-29 10:24:14 +02:00
Proddy
66470071f6 Merge pull request #1830 from MichaelDvP/dev
CR120 fixes #1779
2024-06-28 20:59:43 +01:00
MichaelDvP
e63090573a CR120: dhw modes off/comfort/auto 2024-06-28 17:51:58 +02:00
MichaelDvP
5a7da199ed fix manualtemp for CR120 #1779 2024-06-28 17:51:37 +02:00
Proddy
03e5834d59 Merge pull request #1802 from SLTKA/feature/pump-characteristic 2024-06-28 14:35:03 +01:00
Proddy
23fdfd4f26 Merge pull request #1829 from proddy/dev
ArduinoJson 7.1.0
2024-06-28 08:05:42 +01:00
Proddy
021cf8dd70 Merge branch 'emsesp:dev' into dev 2024-06-28 08:05:17 +01:00
proddy
3a6bbf57ae bump ArduinoJson to 7.1.0 2024-06-28 09:04:30 +02:00
proddy
430bbf9c46 package update (vite) 2024-06-28 09:04:19 +02:00
Proddy
ffb91ce997 Merge pull request #1828 from MichaelDvP/dev
fixes device redetction, command id -1 #1779
2024-06-28 07:48:58 +01:00
MichaelDvP
c74ebc8aae log text for command 2024-06-28 07:31:25 +02:00
MichaelDvP
69b6bcfaed Merge branch 'dev' of https://github.com/emsesp/EMS-ESP32 into dev 2024-06-28 07:27:20 +02:00
MichaelDvP
b2b79734c1 don't update products with valid product-id 2024-06-28 07:25:06 +02:00
MichaelDvP
a9de8ec046 fix ommands with auto-id (-1) 2024-06-28 07:23:12 +02:00
Proddy
ae70ca2079 Merge pull request #1827 from proddy/dev 2024-06-27 15:12:23 +01:00
proddy
eebb8e68f7 match type - rename none to Disabled 2024-06-27 15:12:30 +02:00
proddy
407191b72c added comment 2024-06-27 15:12:06 +02:00
proddy
2097e8e271 remove TODO comments 2024-06-27 14:53:30 +02:00
proddy
139d32c431 stop crashing when ETH used and Analog Sensor is pin 21/SDA or 22/SCC (I2C conflict). Show when its a bad GPIO in log. 2024-06-27 14:52:48 +02:00
proddy
320035fd72 show which IP is for which when both ETH and Wifi and enabled 2024-06-27 14:51:40 +02:00
proddy
ccd4b8917f update packages 2024-06-27 14:51:17 +02:00
proddy
eccca23163 adding spelling to vscode check (optional) 2024-06-27 14:51:08 +02:00
Alexandr Yeskov
deedd49721 feat: Add support for Boiler Pump Characteristic
This adds support for pump characteristic and pump output settings
for 0xE6 type
2024-06-27 21:39:49 +10:00
Proddy
95915611b5 Merge pull request #1825 from MichaelDvP/dev
Scheduler fixes and additions
2024-06-27 08:14:34 +01:00
MichaelDvP
266a7a4e9b allow multiple instances of "?:" in a schedule 2024-06-27 08:28:38 +02:00
MichaelDvP
a46b9c60dd allow multiple onChange schedules with same trigger #1806 2024-06-27 08:27:16 +02:00
MichaelDvP
03513be144 add heatingactive/tapwateractive to onChange #1806 2024-06-27 08:26:16 +02:00
MichaelDvP
39014a2216 Merge branch 'dev' of https://github.com/emsesp/EMS-ESP32 into dev 2024-06-25 15:28:43 +02:00
MichaelDvP
e5a8fd7be4 german translation #1800 2024-06-25 15:28:05 +02:00
Proddy
a4ad8f551a Merge pull request #1821 from proddy/dev
minor changes
2024-06-25 09:53:21 +01:00
proddy
edaeafd619 don't run sonar on pulls 2024-06-25 10:51:08 +02:00
proddy
9a63307b33 updated for dev.18 2024-06-25 10:44:44 +02:00
proddy
18483558d4 lowercase Entities 2024-06-25 10:42:18 +02:00
proddy
2184fbb113 experiment with cache (again) 2024-06-25 10:42:05 +02:00
proddy
4ebd0657f4 include device data in export 2024-06-25 10:41:36 +02:00
Proddy
c7759a71b4 Merge pull request #1820 from proddy/dev
export DeviceValues and format Device Values window
2024-06-24 20:53:07 +01:00
proddy
e3b37e8220 rename GitHub 2024-06-24 21:49:29 +02:00
proddy
5f08e218ec formatting 2024-06-24 21:49:21 +02:00
proddy
26eb2a3b29 add button tooltip, also export json 2024-06-24 21:49:06 +02:00
proddy
03933edcae update packages 2024-06-24 21:48:21 +02:00
Proddy
e037c0753d Merge pull request #1819 from proddy/dev
fix shower duration
2024-06-23 10:39:33 +01:00
proddy
ef4588e3de auto formatting 2024-06-23 11:38:37 +02:00
proddy
79e784239b fix duration conversion from ms #1801 2024-06-23 11:36:38 +02:00
proddy
9d42684591 formatting 2024-06-23 11:36:02 +02:00
proddy
8c4e8f5fa6 add /rest test 2024-06-23 11:35:55 +02:00
Proddy
f417b6087b Merge pull request #1818 from MichaelDvP/dev
update pkg, fix changes-number, sort by name(required)
2024-06-23 09:38:46 +01:00
MichaelDvP
a07cc4fcc7 update pkg, fix changes-number, sort by name(required) 2024-06-22 20:00:50 +02:00
Proddy
402498d7cb Merge pull request #1817 from MichaelDvP/dev 2024-06-22 16:00:16 +01:00
MichaelDvP
78b38c2ee1 sonar warning 2024-06-22 15:12:44 +02:00
Proddy
9098689136 Merge pull request #1816 from MichaelDvP/dev 2024-06-22 13:17:13 +01:00
MichaelDvP
eba737a119 typo 2024-06-22 13:24:50 +02:00
MichaelDvP
02242a2568 Merge branch 'dev' of https://github.com/emsesp/EMS-ESP32 into dev 2024-06-22 12:36:43 +02:00
MichaelDvP
dc6b41a473 always use F_(devicename) 2024-06-22 12:34:25 +02:00
MichaelDvP
5ffd4d87fb fix timeout remote 2024-06-22 12:32:02 +02:00
MichaelDvP
bed7793dab multiple onChange and check one ? : sequence 2024-06-22 08:33:13 +02:00
Proddy
4b3d801312 Merge pull request #1814 from proddy/dev
minor cleanup, fix codacy
2024-06-21 13:52:32 +01:00
proddy
ddbd9dab79 remove columns 2024-06-21 13:50:12 +01:00
proddy
ec2acb60b3 formatting 2024-06-21 13:50:00 +01:00
proddy
999d08e485 formatting 2024-06-21 13:49:50 +01:00
proddy
2e2cf30c12 formatting 2024-06-21 13:49:17 +01:00
proddy
4754ea6211 fix codacy link 2024-06-21 13:48:56 +01:00
proddy
ae716b5caa update packages 2024-06-21 13:48:46 +01:00
proddy
50d8814f3b remove comments 2024-06-21 13:48:25 +01:00
Proddy
345c7378ad Merge pull request #1813 from MichaelDvP/dev
scheduler fixes, additions
2024-06-21 12:41:00 +01:00
MichaelDvP
649734df43 set default 00:00 for schedule time 2024-06-21 12:21:01 +02:00
MichaelDvP
a8adc26fc4 add unused cases for sonar scanner 2024-06-21 12:20:27 +02:00
MichaelDvP
920f24b45a add mock api example 2024-06-21 12:19:57 +02:00
MichaelDvP
3ff3e8a8cf system commands case independend, logic checks, small fixes 2024-06-21 11:03:33 +02:00
MichaelDvP
fb8deb41f9 remove string conversion 2024-06-21 08:28:07 +02:00
Proddy
74506e1775 Merge pull request #1812 from MichaelDvP/dev
scheduler conditions
2024-06-20 22:21:52 +01:00
MichaelDvP
0fc62b216a merge conditions, 3.7.0-dev.17 2024-06-20 22:08:47 +02:00
MichaelDvP
926a22d9ba Merge branch 'dev' of https://github.com/emsesp/EMS-ESP32 into dev2 2024-06-20 21:49:00 +02:00
Proddy
d37e4d7e5f Merge pull request #1811 from MichaelDvP/dev
Make remote timeout editable #1774, dev-16
2024-06-20 20:36:08 +01:00
MichaelDvP
09bc8f42cc fix typo 2024-06-20 21:13:35 +02:00
MichaelDvP
1b09a301ba Make remotetimeout editable #1774, dev-16 2024-06-20 19:46:09 +02:00
Proddy
d8f989543e Merge pull request #1810 from proddy/dev
sonar fix, shower max duration
2024-06-20 17:15:18 +01:00
proddy
12701b2143 max shower min duration 6 minutes 2024-06-20 17:13:50 +01:00
proddy
a861649249 fix sonar (again!) 2024-06-20 17:13:38 +01:00
MichaelDvP
4a48e03552 update testrelease 2024-06-20 17:47:48 +02:00
MichaelDvP
c40625d658 Conditions, v3.7.0-test.15 2024-06-20 15:46:08 +02:00
MichaelDvP
6c111c7816 Scheduler conditions: allow system 2024-06-20 15:44:02 +02:00
MichaelDvP
95d404551c Merge branch 'dev' of https://github.com/emsesp/EMS-ESP32 into feat_conditions 2024-06-20 14:51:56 +02:00
MichaelDvP
240137d3a2 Merge branch 'dev' of https://github.com/emsesp/EMS-ESP32 into dev 2024-06-20 14:51:23 +02:00
MichaelDvP
fbc3807daa update packages, arduino test 2024-06-20 14:50:25 +02:00
Proddy
6ffc466dff Merge pull request #1809 from proddy/dev
fix sonar again
2024-06-20 08:35:35 +01:00
proddy
8f1d5e4752 fix sonar again 2024-06-20 08:35:06 +01:00
Proddy
19c93e25ef Merge pull request #1807 from proddy/dev
#1801 shower_duration_min
2024-06-20 08:17:16 +01:00
proddy
fc54d6a289 dev15, update chngelog 2024-06-20 08:15:07 +01:00
proddy
1364fcca52 120 seconds for shower_min_duration 2024-06-19 20:08:03 +01:00
proddy
20beda740a shower_min_duration #1801 2024-06-19 18:18:00 +01:00
proddy
9a085c8961 remove unused pragma 2024-06-19 18:15:26 +01:00
proddy
e6ccee1bf2 update sonar 2024-06-19 18:14:44 +01:00
proddy
d975e1b6da use arduino 2.0.17, not 3.0.1 2024-06-19 18:14:26 +01:00
proddy
c9a8d6aeb0 update packages 2024-06-19 18:14:07 +01:00
MichaelDvP
b1750265aa back to arduino core 2.xx 2024-06-19 11:46:20 +02:00
MichaelDvP
03496acd22 back to arduino 2.xx 2024-06-19 11:38:07 +02:00
MichaelDvP
bae5a11264 schedule conditions chack numbers and strings, fix custom commands 2024-06-18 18:23:08 +02:00
Proddy
912826d20e Merge pull request #1805 from MichaelDvP/dev
add model() for CR120 for different modes
2024-06-17 18:51:25 +01:00
MichaelDvP
f76c5f6afe Merge branch 'dev' into feat_conditions 2024-06-17 16:00:26 +02:00
MichaelDvP
644a694ed2 add model() for CR120 for different modes 2024-06-17 16:00:01 +02:00
MichaelDvP
fc75824921 scheduler: onChange and conditions 2024-06-15 20:00:08 +02:00
Proddy
55316334d4 Merge pull request #1803 from MichaelDvP/dev
fix #1800
2024-06-15 16:31:10 +02:00
MichaelDvP
ffb7fd3f12 Merge branch 'dev' of https://github.com/emsesp/EMS-ESP32 into dev 2024-06-15 13:47:49 +02:00
Proddy
0b6f7527e5 Merge pull request #1799 from proddy/dev
add Makefile back so sonar tests run again
2024-06-14 23:19:18 +02:00
proddy
f94bbcaf39 remove obsolete file 2024-06-14 23:18:30 +02:00
proddy
c7b7952303 add Makefile back - needed for sonar 2024-06-14 23:18:19 +02:00
proddy
d9906b0da4 update packages 2024-06-14 23:17:45 +02:00
Proddy
9bfdb69012 Merge pull request #1798 from proddy/dev
formatting, fix MQTT HA
2024-06-14 12:33:44 +02:00
proddy
1c7c2a7f83 resolve lint warnings 2024-06-14 12:29:42 +02:00
proddy
ff49caaada make copy of state in creating HA's avty_json as string would go out of scope 2024-06-14 11:48:12 +02:00
proddy
13eee19981 update packages 2024-06-14 11:47:26 +02:00
proddy
3d335963b9 color restart button 2024-06-14 11:47:04 +02:00
proddy
9989a03993 remove base() as it's unused 2024-06-14 11:40:49 +02:00
proddy
c9148b574f default EMSESP_DEFAULT_ENTITY_FORMAT is 1 (SINGLE_SHORT) 2024-06-14 11:40:32 +02:00
Proddy
74e0123475 Merge pull request #1793 from proddy/dev
Modules
2024-06-13 22:20:25 +02:00
proddy
28abf579e8 process all modules before showing error 2024-06-13 21:11:49 +02:00
proddy
c044e1a221 dev.13 2024-06-13 21:11:31 +02:00
proddy
ce4957f087 update packages 2024-06-13 21:11:19 +02:00
proddy
53837e36b4 lint fixing 2024-06-12 20:57:50 +02:00
proddy
07dbe7d260 update packages 2024-06-12 10:24:23 +02:00
proddy
e56263eb51 update example 2024-06-12 10:23:52 +02:00
proddy
9e2b6a2963 rename standalone to native 2024-06-12 10:23:43 +02:00
proddy
b4a8d3c181 pull MAC from efuse 2024-06-12 10:23:26 +02:00
proddy
509c7ee900 text changes 2024-06-12 10:22:53 +02:00
proddy
9e1d9431c1 remove getMacAddress 2024-06-12 10:22:44 +02:00
proddy
b92607f0e9 use total for energyLastHour instead 2024-06-12 10:22:11 +02:00
proddy
dcb83989c8 removed as it's old 2024-06-12 10:21:39 +02:00
proddy
9331a6e7a1 fixes #1796 2024-06-12 08:44:55 +02:00
Proddy
caa6a0b7ae Merge pull request #1792 from proddy/feat_modules
Feat modules
2024-06-09 14:03:45 +02:00
proddy
8783267e18 updates to look & feel 2024-06-09 14:03:11 +02:00
Proddy
a1d61b4422 Merge branch 'emsesp:feat_modules' into feat_modules 2024-06-09 13:52:47 +02:00
proddy
924de1cd42 use framework-arduinoespressif32 3.0.1 2024-06-09 12:44:16 +02:00
Proddy
66ba2f3218 Merge pull request #1791 from proddy/feat_modules
Feat modules
2024-06-08 16:01:40 +02:00
Proddy
bc53c953e8 Merge branch 'emsesp:feat_modules' into feat_modules 2024-06-08 16:01:10 +02:00
proddy
9d64282c0b remove debug comment 2024-06-08 15:08:58 +02:00
proddy
8625d65fb6 update example 2024-06-08 15:08:48 +02:00
proddy
23fe7f6ad3 remove Restart 2024-06-08 15:08:40 +02:00
proddy
b7f3612738 adjust modules text 2024-06-08 15:08:31 +02:00
proddy
e9bba003af change title 2024-06-08 15:08:21 +02:00
proddy
fe17411406 default mqtt format is 3 (for 3.6) 2024-06-08 15:07:25 +02:00
Proddy
ec01dd7581 Merge pull request #1790 from proddy/feat_modules
Feat modules
2024-06-08 12:27:23 +02:00
proddy
6a734b9c61 add module license 2024-06-08 12:26:32 +02:00
MichaelDvP
0c6141e13b Merge branch 'dev' of https://github.com/emsesp/EMS-ESP32 into dev 2024-06-05 19:36:46 +02:00
MichaelDvP
cb844e0b92 fix mode init 2024-06-05 19:35:47 +02:00
MichaelDvP
1883c98b39 fix raw telegram write from other id 2024-06-05 19:31:46 +02:00
proddy
69d0cba893 ClientPosixIPAddress 2024-06-04 21:19:58 +02:00
proddy
7f1dbbcb94 update to 1.7.0 2024-06-04 21:19:48 +02:00
proddy
26ac0057a5 replace IPAddress with MQTT library one 2024-06-04 21:19:34 +02:00
Proddy
d63bab5982 Merge pull request #1788 from proddy/feat_modules
Feat modules
2024-06-04 17:21:36 +02:00
proddy
d3690bb51b remove makefile 2024-06-04 17:20:28 +02:00
proddy
d327ae25c5 cleanup 2024-06-04 17:20:14 +02:00
MichaelDvP
a2ba88fe26 add CR120 as name to device-lib 2024-05-31 17:21:54 +02:00
Proddy
354e9154c5 Merge pull request #1785 from proddy/feat_modules
Feat modules
2024-05-31 06:04:56 +02:00
proddy
fffb6d6072 update changelog 2024-05-31 06:04:13 +02:00
proddy
07034824d6 Merge remote-tracking branch 'origin/dev' into feat_modules 2024-05-31 05:59:30 +02:00
Proddy
c8300a7a12 Merge pull request #1783 from MichaelDvP/dev
dev12, fixes #1774 (change timeout #1680 to 24h) and #1779
2024-05-30 22:04:17 +02:00
Proddy
9b983a8069 Merge pull request #1784 from proddy/feat_modules
Feat modules
2024-05-30 22:03:53 +02:00
Proddy
00528c8c6d Merge branch 'emsesp:feat_modules' into feat_modules 2024-05-30 22:03:35 +02:00
proddy
0184f77246 Merge branch 'feat_modules' of https://github.com/proddy/EMS-ESP32 into feat_modules 2024-05-30 22:02:35 +02:00
proddy
6f9633ae9a recommend restart 2024-05-30 22:01:54 +02:00
proddy
abfe6f0cbd add debug notes 2024-05-30 22:01:40 +02:00
proddy
826559c2a1 add comments 2024-05-30 22:01:27 +02:00
Proddy
49bd11dd57 Merge pull request #1782 from proddy/feat_modules
Feat modules - add web
2024-05-30 18:24:07 +02:00
Proddy
44abbcbc22 Merge branch 'emsesp:feat_modules' into feat_modules 2024-05-30 18:23:35 +02:00
proddy
cfe8235cee add web for Modules 2024-05-30 18:16:31 +02:00
MichaelDvP
845e6f4527 fix set mode 2024-05-30 15:01:10 +02:00
MichaelDvP
93a9e5da1d changelog, v3.7.0-dev.12 2024-05-30 12:22:11 +02:00
MichaelDvP
f942aec67b seltemp for CR120 thermostat, #1779 2024-05-30 12:21:32 +02:00
MichaelDvP
5fc6678d0b set remottemp timeout to one day, #1774, #1680 2024-05-30 12:01:20 +02:00
Proddy
b9fa689829 Merge pull request #1780 from proddy/feat_modules
Feat modules
2024-05-29 22:24:40 +02:00
proddy
fb6b8813c7 add web page for modules 2024-05-29 22:23:01 +02:00
proddy
3fa42be6d4 update core 3.0 2024-05-29 22:22:54 +02:00
proddy
5daa76649b add comment 2024-05-29 22:22:39 +02:00
proddy
fdad5973c3 rename setup() to start() for module 2024-05-28 12:10:10 +02:00
proddy
4cce16b168 remove arduinojson defines 2024-05-28 12:06:02 +02:00
proddy
5fceca38d9 add module's loop to loop() 2024-05-27 22:16:10 +02:00
proddy
38d22fd587 update comments 2024-05-27 22:15:53 +02:00
proddy
bb1d2d6680 getMacAddress() 2024-05-27 22:15:33 +02:00
proddy
bcb78ee4d2 add getMacAddress, used in Modules 2024-05-27 22:15:21 +02:00
proddy
b0d3a2204a update to use external Modules 2024-05-27 22:15:08 +02:00
proddy
29da1b646a use online version of ArduinoJson 2024-05-27 22:14:53 +02:00
proddy
20063d48ed update modules 2024-05-26 16:06:18 +02:00
Proddy
8ffed9fab7 Merge pull request #1769 from proddy/dev
small updates
2024-05-18 09:35:30 +02:00
Proddy
c8b0e07203 Merge branch 'emsesp:dev' into dev 2024-05-18 09:35:02 +02:00
proddy
98fbb2b926 fix type in setAuthentication 2024-05-18 09:33:03 +02:00
proddy
bd42b4539e update espressif v3 target 2024-05-18 09:32:42 +02:00
proddy
4975771f28 add comment 2024-05-18 09:32:18 +02:00
proddy
dd7456cdd5 espressif32@6.7.0 2024-05-18 08:56:34 +02:00
proddy
2cfdd12168 bump to 3.7.0-dev.11 2024-05-18 08:56:23 +02:00
proddy
e00284deb1 package update 2024-05-18 08:56:09 +02:00
proddy
43476f41df typesafe format for numbers 2024-05-18 08:55:59 +02:00
proddy
e87ad5db2d don't render list if no device selected 2024-05-18 08:55:39 +02:00
proddy
825d8b57a4 summerTemp to 45 - #1767 2024-05-18 08:55:20 +02:00
Proddy
ab9241376b Merge pull request #1763 from MichaelDvP/dev
fix missing vacation date #1712
2024-05-14 11:52:13 +02:00
MichaelDvP
0f13449548 fix missing vacation date #1712 2024-05-14 07:37:04 +02:00
Proddy
0b498633d3 Merge pull request #1762 from MichaelDvP/dev
fix timout switchoff #1680
2024-05-13 08:01:28 +02:00
MichaelDvP
f080107d86 fix timout switchoff #1680 2024-05-13 07:15:12 +02:00
Proddy
9acaf41564 Merge pull request #1761 from Bingo2023/patch-1 2024-05-10 18:23:23 +02:00
Bingo2023
d1f14ac298 #1443
#1443
2024-05-10 16:29:31 +02:00
Proddy
f8050f3638 Merge pull request #1759 from MichaelDvP/dev 2024-05-10 15:15:39 +02:00
MichaelDvP
4f6399f35e timeout 3h for remote temperature #1680 2024-05-10 14:45:05 +02:00
Proddy
24af84f27c Merge pull request #1753 from proddy/dev
add corepack to tagged release
2024-05-08 20:43:05 +02:00
proddy
c481bc78dc add corepack to tagged release 2024-05-08 20:42:01 +02:00
Proddy
11e887553d Update pre_release.yml 2024-05-08 20:30:46 +02:00
Proddy
ff3dad26db Merge pull request #1752 from proddy/dev
enable corepack
2024-05-08 20:26:58 +02:00
proddy
708b7f384d enable corepack 2024-05-08 20:26:18 +02:00
Proddy
24dc7489da Merge pull request #1751 from proddy/dev
add back commented web build (was mistake)
2024-05-08 20:11:09 +02:00
proddy
7a4476d302 add back commented web build (was mistake) 2024-05-08 20:10:34 +02:00
Proddy
2e1b57dcdd Merge pull request #1750 from proddy/dev
yarn updates
2024-05-08 19:59:42 +02:00
proddy
52c045e839 update packages 2024-05-08 19:58:53 +02:00
proddy
2f015d940f tidy up yarn 2024-05-08 11:19:37 +02:00
proddy
c5f88daa29 remove unused icon 2024-05-08 11:19:25 +02:00
proddy
e279de4474 update example 2024-05-08 11:19:01 +02:00
Proddy
660bc633da Merge pull request #1748 from MichaelDvP/dev
dhw tag in HA format 3.4, fix #1747
2024-05-07 17:37:15 +02:00
MichaelDvP
b51b751e53 dhw tag in HA format 3.4, fix #1747 2024-05-07 17:20:39 +02:00
Proddy
3bd0567f52 Merge pull request #1746 from MichaelDvP/dev
ipv6 permanent, shutdown command (fixed)
2024-05-07 10:14:05 +02:00
MichaelDvP
bbe4d35f26 update yarn-4.2.1 2024-05-07 07:22:16 +02:00
MichaelDvP
de16f9a585 fix crash on shutdown command register 2024-05-06 21:55:36 +02:00
MichaelDvP
628083101c Merge branch 'dev' of https://github.com/emsesp/EMS-ESP32 into dev 2024-05-06 16:51:27 +02:00
MichaelDvP
39b2148609 make shutdown to type:CMD 2024-05-06 13:48:19 +02:00
MichaelDvP
4f40e2457a permanent enable IPv6 support 2024-05-06 13:47:51 +02:00
MichaelDvP
fa6649d57e heap check for HA mqtt-configs, debug-log the numbers of configs sent. 2024-05-06 12:46:05 +02:00
Proddy
9f4aef6d40 Merge pull request #1743 from proddy/dev
move esp status from settings page
2024-05-05 17:53:21 +02:00
proddy
837d70e79d rename Application Settings 2024-05-05 17:16:59 +02:00
proddy
4a1319d95a move esp status to under status (not in settings) 2024-05-05 17:16:31 +02:00
proddy
24c7238a8b updated example 2024-05-05 17:16:06 +02:00
Proddy
d829850fc9 Merge pull request #1742 from proddy/dev
move restart button to System menu
2024-05-05 13:02:03 +02:00
proddy
e87de4bd17 add back babel-core 2024-05-05 13:01:18 +02:00
proddy
85c249db2a move restart to system 2024-05-05 12:58:45 +02:00
proddy
d45fa55f66 remove blur 2024-05-05 12:58:34 +02:00
Proddy
8084b9141d Merge pull request #1741 from MichaelDvP/dev
rego holiday and fix command with command as value, dev-10
2024-05-05 09:52:07 +02:00
MichaelDvP
f44bd81fd9 fix command with command as value, #1740 2024-05-05 09:15:54 +02:00
MichaelDvP
2bd14e5648 v3.7.0-dev.10 2024-05-04 19:39:24 +02:00
MichaelDvP
8c627a2ade Merge branch 'dev' of https://github.com/emsesp/EMS-ESP32 into dev 2024-05-04 19:39:00 +02:00
Proddy
43777f4a15 Merge pull request #1739 from proddy/dev
Remove OTA feature #1738
2024-05-04 18:56:57 +02:00
proddy
98839015fa updated screenshot with removed ota 2024-05-04 14:32:17 +02:00
proddy
dabb958f06 Remove OTA feature #1738 2024-05-04 14:19:19 +02:00
proddy
6537abedb9 formatting 2024-05-04 14:18:47 +02:00
proddy
42cbacd07c add comments 2024-05-04 14:18:27 +02:00
proddy
2112f1916f formatting 2024-05-04 14:17:35 +02:00
proddy
a2e2cf7f75 add test for signin 2024-05-04 14:17:16 +02:00
proddy
f14523d7aa add python venv 2024-05-04 14:16:53 +02:00
proddy
a58706ef41 formatting 2024-05-04 14:16:16 +02:00
proddy
5af16b7b7e formatting 2024-05-04 14:16:04 +02:00
proddy
71eea5abb3 add comment to source of library 2024-05-04 14:15:48 +02:00
proddy
e8241e580b package update 2024-05-04 14:15:32 +02:00
MichaelDvP
9a2d635c62 fix date format 2024-05-04 13:32:04 +02:00
MichaelDvP
e84bf9a181 add rego3000 holiday, dev9, update pkg 2024-05-04 12:49:33 +02:00
Proddy
8c88c2ec38 Merge pull request #1736 from MichaelDvP/dev
some more id/tag changes
2024-05-03 14:01:20 +02:00
MichaelDvP
f54b6959ab tagged_cmd use const string & 2024-05-03 11:53:09 +02:00
MichaelDvP
1fa6da8eff avoid compiler warning, add back RC30 pause/party 2024-05-03 11:52:24 +02:00
MichaelDvP
ee2fded5de cleanup id/tag 2024-05-03 11:51:29 +02:00
Proddy
35ee3776ca Merge pull request #1733 from MichaelDvP/dev
fix show commands, add hp input states
2024-05-03 09:44:27 +02:00
MichaelDvP
7cec0e58a1 fix length of vacation string 2024-05-03 09:37:50 +02:00
MichaelDvP
476c8de82f update packages 2024-05-03 08:31:43 +02:00
MichaelDvP
3a772a0dbf sync tag and id, add RC30 vacation #1712 2024-05-03 08:31:20 +02:00
MichaelDvP
d056846eb0 Merge branch 'dev' of https://github.com/emsesp/EMS-ESP32 into dev 2024-05-02 13:52:35 +02:00
MichaelDvP
65d9c2d5d3 remove redundant dhw suffixes, add to HA v3.6 compatibility modes, dev8 2024-05-02 12:00:16 +02:00
MichaelDvP
0598f0d679 add hp input states #1723 2024-05-02 11:14:50 +02:00
MichaelDvP
961f61d48d fix show commands/api/<device>/commands, rename CommandFlags 2024-05-02 08:57:55 +02:00
Proddy
cce76c1769 Merge pull request #1731 from proddy/dev
fix unbuild flag
2024-05-01 22:29:34 +02:00
proddy
dc68258e8c fix compile unbuild flags 2024-05-01 22:28:52 +02:00
proddy
d5675e24e7 formatting 2024-05-01 22:27:12 +02:00
proddy
ad73fba36e package update 2024-05-01 22:27:04 +02:00
Proddy
14af4a0680 Merge pull request #1730 from MichaelDvP/dev
fix thermostat dhw commands #1692
2024-04-30 14:38:29 +02:00
MichaelDvP
1af43a8397 fix thermostat dhw commands 2024-04-30 13:10:01 +02:00
Proddy
9ed554bef7 Merge pull request #1729 from proddy/dev
Dump Telegrams - #1728
2024-04-29 20:59:16 +02:00
proddy
5f77fd7f40 remove is_received from dump 2024-04-29 20:57:56 +02:00
proddy
dcedd75ea1 package update 2024-04-29 20:57:45 +02:00
proddy
543cfc921e https://github.com/emsesp/EMS-ESP32/issues/1728 2024-04-29 20:31:16 +02:00
proddy
c12c7845bf update with 3.7.0-dev.7 2024-04-29 20:30:37 +02:00
proddy
34d2f7fa27 package update 2024-04-29 20:23:21 +02:00
proddy
74c672afab remove comment 2024-04-29 20:08:15 +02:00
Proddy
5da07db42d Merge pull request #1727 from MichaelDvP/dev
fix compile for S3
2024-04-29 16:58:38 +02:00
MichaelDvP
b6db8767e5 fix compile for S3 2024-04-29 15:35:53 +02:00
Proddy
dfe56618f2 Merge pull request #1726 from MichaelDvP/dev
Compile with arduino 3.0
2024-04-29 14:11:06 +02:00
MichaelDvP
0e69ffa7bf set hc->control on command, don't wait for verify 2024-04-29 14:02:32 +02:00
MichaelDvP
b034bd05e8 Compile with arduino 3.0 2024-04-29 13:53:00 +02:00
Proddy
abbf2e091b Merge pull request #1722 from proddy/dev
small changes
2024-04-29 13:09:30 +02:00
proddy
0b8d8eb7a0 fix https://github.com/emsesp/EMS-ESP32/pull/1722#discussion_r1582823521 2024-04-29 13:09:12 +02:00
proddy
87f05df375 Rego3000 https://github.com/emsesp/EMS-ESP32/issues/1692 2024-04-28 14:39:23 +02:00
proddy
80915cb7b2 rename auxElecHeatNrgConsWw (code only) 2024-04-28 14:38:41 +02:00
proddy
7199fae4fa rename auxElecHeatNrgConsWw 2024-04-28 14:38:16 +02:00
proddy
9e72bef480 show help text for add command 2024-04-28 14:38:01 +02:00
proddy
ecc625cca4 add target for latest Arduino v3 RC1 2024-04-27 14:00:05 +02:00
proddy
9b47cf0e0e add ipv6 support for arduino v3 2024-04-27 13:59:43 +02:00
proddy
e43b7dec1b added back prettierignore so vscode can find it 2024-04-27 13:01:22 +02:00
proddy
b149fb2e4d update packages 2024-04-27 13:01:04 +02:00
proddy
c07dc899de added LanguageSelector 2024-04-27 13:00:32 +02:00
proddy
9252093fb6 cleaned up formatting 2024-04-27 13:00:11 +02:00
Proddy
13e7a53e5e Merge pull request #1721 from proddy/dev
progress bar and PL fixes
2024-04-26 20:40:25 +02:00
proddy
7973c3d4a8 rollback PL translations for User type 2024-04-26 20:39:37 +02:00
Proddy
444bd67f07 Merge branch 'emsesp:dev' into dev 2024-04-26 20:33:59 +02:00
Proddy
aeb10aa6ab Merge pull request #1718 from pswid/dev
Polish translation update
2024-04-26 20:33:47 +02:00
proddy
56c9d3c265 bump 2024-04-26 20:33:08 +02:00
proddy
f2a6b861aa upload progress changes 2024-04-26 20:30:02 +02:00
Proddy
611f37bf2c Merge pull request #1719 from MichaelDvP/dev
Thermostat dhw, mqtt, ..
2024-04-26 12:37:53 +02:00
MichaelDvP
ed6a4ea1c1 thermostat hc check remove redundant code 2024-04-26 10:43:34 +02:00
MichaelDvP
13db893e4a Use warning level for scheduler command fails 2024-04-26 10:12:03 +02:00
MichaelDvP
3627dff3a1 update packages, alova 2.20.2 2024-04-26 10:11:13 +02:00
pswid
a3b0e37060 Polish translation update 2024-04-26 09:11:16 +02:00
MichaelDvP
a5f8a900b6 HA discovery topics for dhw compatibilty modes 2024-04-25 19:07:13 +02:00
MichaelDvP
6cc912fd5e fix val_tpl for 3wayvalve #1716 2024-04-25 18:14:31 +02:00
MichaelDvP
8b781da564 HA mqtt format multi with v3.6 compatiblity 2024-04-25 16:14:07 +02:00
MichaelDvP
634ee24a66 add stat_cla to temperaturesensor #1713 2024-04-25 16:12:36 +02:00
MichaelDvP
4f9a2fe1aa HA mqtt compatible setting 2024-04-25 14:32:42 +02:00
MichaelDvP
21488ad95a register thermostat dhw circuits dynamic 2024-04-25 14:32:19 +02:00
MichaelDvP
a28c2441a0 formatting 2024-04-25 14:31:47 +02:00
MichaelDvP
c4d2060cd9 update pkg 2024-04-25 14:31:26 +02:00
Proddy
3270139b01 Merge pull request #1711 from MichaelDvP/dev
small fixes, check second dhw circuit
2024-04-24 13:51:42 +02:00
MichaelDvP
696cfc0415 fix burnpower min>max, #1703 2024-04-24 07:56:29 +02:00
MichaelDvP
5ec68b85d2 add meters for gasboiler 2024-04-24 07:55:25 +02:00
MichaelDvP
355ff5656a fix auxheaterStatus #1160 2024-04-24 07:36:54 +02:00
MichaelDvP
85492781bc fix missing values (bool/enum/string) in dashboard 2024-04-23 15:26:38 +02:00
MichaelDvP
28347fd0a4 Read RC300 dhw2 circuit only if active 2024-04-23 08:50:14 +02:00
Proddy
b893b5d609 Merge pull request #1707 from MichaelDvP/dev
Rename DeviceValueTypes, add UINT32 for custom entities #1706
2024-04-22 19:06:36 +02:00
MichaelDvP
0dcd0bad68 add UINT32 to HA 2024-04-22 13:27:50 +02:00
MichaelDvP
d166b05c3c Merge branch 'dev' of https://github.com/emsesp/EMS-ESP32 into dev 2024-04-22 13:14:24 +02:00
Proddy
01cd3c3587 Merge pull request #1705 from proddy/dev
web formatting
2024-04-21 21:53:04 +02:00
MichaelDvP
1027d403c5 update packages 2024-04-21 20:16:09 +02:00
MichaelDvP
719cd46a21 Rename DeviceValueTypes, add UINT32 for custom entities #1706 2024-04-21 20:14:39 +02:00
Proddy
66570e6f46 Merge branch 'dev' into dev 2024-04-21 15:29:19 +02:00
Proddy
cafa1cbc90 Merge pull request #1698 from MichaelDvP/dev
dhw circuits, fixes for remote, new entities
2024-04-21 15:11:03 +02:00
proddy
ac39a46442 formatting 2024-04-21 15:10:22 +02:00
proddy
befa487482 use alova 2.19.2 since 2.20 breaks upload progress bar 2024-04-21 15:10:10 +02:00
proddy
43606e151a dont format i18n files 2024-04-21 15:09:32 +02:00
MichaelDvP
0eb04b9027 fix coldshot command with dhw tag, restart coldshot timer 2024-04-21 10:39:17 +02:00
MichaelDvP
8c7b0a674f check fetch for custom entities for multibyte split 2024-04-21 10:37:41 +02:00
MichaelDvP
ed317902ca custom min/max have priority #1703 2024-04-21 10:36:36 +02:00
proddy
8bcfd9b86f remove admin authentication on log 2024-04-20 21:50:30 +02:00
proddy
b68805e078 rename Customize to Module 2024-04-20 20:51:43 +02:00
proddy
9dc91f2d69 new linting, make sure code is type safe 2024-04-20 20:46:01 +02:00
MichaelDvP
037175f7b0 show incomplete Rx with crc 2024-04-19 09:25:50 +02:00
MichaelDvP
010ca2f2ab fix log entry shower duration 2024-04-19 09:25:16 +02:00
MichaelDvP
37ce3047cb show telegram read length in log decimal 2024-04-18 09:27:56 +02:00
MichaelDvP
0114899944 fix incompletes when using remote emulation 2024-04-17 08:27:38 +02:00
proddy
ae7cd23758 package update 2024-04-15 22:11:22 +02:00
proddy
1966a68638 always show devices even in test 2024-04-15 22:11:22 +02:00
MichaelDvP
c58baf3fec fix typo 7F->F7 2024-04-15 14:05:42 +02:00
MichaelDvP
c60254b624 add back poll-ack for remote, add F7-02 reply 2024-04-15 12:32:23 +02:00
MichaelDvP
4d400bd7ce no poll-ack for remote thermostat 2024-04-15 09:08:05 +02:00
MichaelDvP
3c5790639e improve uart break timing 2024-04-14 17:08:01 +02:00
MichaelDvP
7b1845ed2e add fan example comment 2024-04-14 16:23:48 +02:00
MichaelDvP
e2569f5317 formatting, add heatpump shutdown 2024-04-13 18:16:10 +02:00
MichaelDvP
605c61cd29 changelog, ver 3.7.0-dev3 2024-04-13 16:50:50 +02:00
MichaelDvP
7e6ebb217a log telegrams F7/F9 with data in reads 2024-04-12 15:18:18 +02:00
MichaelDvP
6a16027e16 remote default to RC200, boiler reset command 2024-04-12 13:07:53 +02:00
MichaelDvP
fc1b7becce remote send interval 15 sec 2024-04-12 11:35:29 +02:00
MichaelDvP
8774ca5f7f fix multiple remotes, add RC100 2024-04-12 10:35:48 +02:00
MichaelDvP
adebc15939 Merge branch 'dev' into dev2 2024-04-12 09:13:32 +02:00
MichaelDvP
0df53b3856 Merge branch 'dev' of https://github.com/emsesp/EMS-ESP32 into dev 2024-04-12 09:10:11 +02:00
MichaelDvP
52704039ca remote emulation type for different hcs 2024-04-12 09:09:02 +02:00
MichaelDvP
d0f7d4ebbc test for +1691 2024-04-12 08:55:55 +02:00
MichaelDvP
8c6a45493b fix typo 2024-04-12 08:51:25 +02:00
Proddy
e095f6bd97 Merge pull request #1694 from proddy/dev
web testing cleanup + Tasmota Arduino Core 2.0.15 with IPv6 support, based on IDF 4.4.7 / core 2.0.15
2024-04-11 22:08:47 +02:00
proddy
0881262f4c package update 2024-04-11 22:07:11 +02:00
proddy
8080989005 Tasmota Arduino Core 2.0.15 with IPv6 support, based on IDF 4.4.7 / core 2.0.15 2024-04-11 22:06:55 +02:00
proddy
bfbc77c92e add standalone test for web uploading - https://github.com/emsesp/EMS-ESP32/issues/1564 2024-04-07 15:50:19 +02:00
MichaelDvP
5cda8f599b MM100 set telegram to 0x2CD,.. test for #1679 2024-04-03 18:23:53 +02:00
Proddy
85c8b663b1 Merge pull request #1685 from proddy/dev
fix test data (wrong icons in web)
2024-04-02 21:09:28 +02:00
proddy
f0f65c65dc fix test data (wrong icons) 2024-04-02 21:08:37 +02:00
proddy
e9e3594ee4 update packages 2024-04-02 21:08:28 +02:00
MichaelDvP
8c0d0c4468 shower wwtapactivated to dhw/tapactivated 2024-04-02 18:51:10 +02:00
MichaelDvP
f111c75e19 fix typo in api/mqtt command restart [partition] 2024-04-02 17:31:34 +02:00
MichaelDvP
6dde6580f3 Merge branch 'dev' of https://github.com/emsesp/EMS-ESP32 into dev 2024-03-31 18:22:21 +02:00
MichaelDvP
f21279056a DHW tags/nests for all devices, remove ww prefix from mqtt 2024-03-31 18:22:02 +02:00
Proddy
3359f87177 Merge pull request #1683 from proddy/dev
updated screenshots, faster log sync
2024-03-31 15:50:10 +02:00
proddy
09401c0524 3.7.0-dev.2 2024-03-31 15:49:09 +02:00
proddy
3135496f30 updated with latest devices 2024-03-31 15:48:25 +02:00
proddy
a28fd1484b mention 120 devices 2024-03-31 15:48:17 +02:00
proddy
4b4d7e40f0 updated screenshots for 3.7.x 2024-03-31 15:48:06 +02:00
proddy
bd78c07c80 remove splitVendorChunkPlugin 2024-03-31 15:22:36 +02:00
proddy
46c4dc8925 decrease sync time for log - Fix missing log entries in web #1652 2024-03-31 15:22:18 +02:00
Proddy
e02a731237 Merge pull request #1682 from proddy/dev
minor changes
2024-03-30 18:58:59 +01:00
proddy
2604368cf8 auto-formatting 2024-03-30 18:57:35 +01:00
proddy
9822aa6e13 update packages, add back eventstream testing 2024-03-30 18:57:20 +01:00
proddy
d8ff9da733 formatting 2024-03-30 18:56:40 +01:00
proddy
09e5231735 add translations 2024-03-30 18:56:23 +01:00
proddy
5ae837e9eb add translations 2024-03-30 18:56:16 +01:00
proddy
a3511724f3 remove initiating ES multiple times, may fix the collisions on slow networks 2024-03-30 18:56:10 +01:00
proddy
d9a5232293 add translations 2024-03-30 18:55:28 +01:00
proddy
b25cb244c0 remove ws 2024-03-30 18:54:53 +01:00
proddy
7bff76e553 added missing translations 2024-03-30 18:54:37 +01:00
proddy
90eda9f996 make standalone compile 2024-03-27 19:49:20 +05:30
proddy
52f605b118 lower ram when compiling multiple jobs 2024-03-27 19:49:09 +05:30
proddy
c7c17a4617 package update 2024-03-27 19:48:52 +05:30
proddy
973ee2fd43 3.7.0-dev.1 2024-03-27 19:48:37 +05:30
Proddy
cd2afd02be Merge pull request #1675 from MichaelDvP/dev2
update sk-language
2024-03-27 18:59:41 +05:30
MichaelDvP
07f8f9e704 update sk-language 2024-03-27 12:49:04 +01:00
Proddy
b7b09a8c93 Merge pull request #1674 from MichaelDvP/dev2
fix sk-language #1673, update pkg
2024-03-27 17:11:03 +05:30
MichaelDvP
8628bfa983 fix sk-language, update pkg 2024-03-27 11:34:49 +01:00
Proddy
8ef8eeb9ec Merge pull request #1672 from MichaelDvP/dev2
dev2 3.7.0-test, merge all changes from dev
2024-03-24 17:35:09 +01:00
MichaelDvP
765ddb6702 Merge branch 'dev' of https://github.com/emsesp/EMS-ESP32 into dev2 2024-03-24 10:03:20 +01:00
Proddy
6cab020241 Merge pull request #1670 from proddy/dev
fix minor lint warnings
2024-03-24 09:45:53 +01:00
proddy
cf489f7632 fix minor lint warnings 2024-03-24 09:45:12 +01:00
MichaelDvP
6943913d30 make factory partition default on 16M systems 2024-03-24 09:06:28 +01:00
MichaelDvP
c5eaebc4b4 Merge branch 'dev' of https://github.com/emsesp/EMS-ESP32 into dev2 2024-03-24 08:38:07 +01:00
Proddy
6905abf9f4 Merge pull request #1669 from proddy/dev
sync issues
2024-03-23 22:11:15 +01:00
proddy
ef3b8a308f update node 2024-03-23 22:07:04 +01:00
Proddy
8a66c056d8 Merge branch 'emsesp:dev' into dev 2024-03-23 19:24:29 +01:00
proddy
7967754024 3.7.0 2024-03-23 19:24:06 +01:00
Proddy
800528f843 Merge pull request #1667 from proddy/dev
changes to web layout (status and settings)
2024-03-23 19:18:59 +01:00
Proddy
a6a60215d4 Merge branch 'dev' into dev 2024-03-23 19:18:54 +01:00
proddy
1487f30c43 Merge remote-tracking branch 'origin/dev' for 3.6.5 2024-03-23 17:56:05 +01:00
proddy
793021573a update packages for 3.6.5 release 2024-03-23 17:28:38 +01:00
proddy
0deaafb9ce fix NTP icons, add AP 2024-03-23 17:16:45 +01:00
proddy
2ab50bd0a2 fix incorrect link when clicking on version 2024-03-22 17:06:42 +01:00
proddy
ecb82bd48b tidy up 2024-03-22 17:03:10 +01:00
proddy
5592d18e1f button border is consistent across screens 2024-03-22 17:02:02 +01:00
proddy
bcfcc7690f fix uptime in seconds 2024-03-22 17:01:47 +01:00
proddy
a2fa2515b3 updates to backend to match new frontend - #1665 2024-03-22 16:25:18 +01:00
proddy
c8e7eb3657 always show bus status even if offline - #1666 2024-03-22 16:23:08 +01:00
proddy
24ea975575 added status and renamed components 2024-03-20 23:57:19 +01:00
proddy
863bc04c21 status screen updates 2024-03-19 23:25:31 +01:00
proddy
217b424320 updates to settng page 2024-03-18 21:59:11 +01:00
proddy
e022c34fe7 fix read-only access 2024-03-18 13:25:17 +01:00
proddy
1af103d5ee updates to web pages 2024-03-17 23:23:09 +01:00
proddy
20ddbeb709 rename User defined entities to 'Custom entities' 2024-03-17 19:08:50 +01:00
proddy
e1ad7d3c01 add vscode settings.json back in 2024-03-17 19:08:31 +01:00
proddy
8f7c65c9b5 update packages 2024-03-17 19:08:11 +01:00
proddy
9bf7fbfb2e #1665 2024-03-17 19:08:03 +01:00
Proddy
2739712c5b Merge pull request #1661 from MichaelDvP/dev
add telnet command to reboot to previous version #1657
2024-03-16 08:41:23 +01:00
MichaelDvP
fbfaea6b56 Merge branch 'dev' into dev2 2024-03-15 17:43:08 +01:00
MichaelDvP
21207f88f3 update packages 2024-03-15 17:06:36 +01:00
MichaelDvP
9945b8d09f changelog, 3.6.5-dev.18 2024-03-15 14:50:01 +01:00
MichaelDvP
ee3fafa066 Merge branch 'dev' of https://github.com/emsesp/EMS-ESP32 into dev 2024-03-15 14:49:33 +01:00
MichaelDvP
eec3b3be7a restart option partitionname, console-command set service 2024-03-15 14:42:47 +01:00
MichaelDvP
77ad209ce1 stop fetching empty messages after 5 min 2024-03-15 13:59:20 +01:00
MichaelDvP
8a0152ebe6 log running partition on startup 2024-03-15 13:57:52 +01:00
MichaelDvP
ce8d8699c3 add 16M partitions with factory and two ota 2024-03-15 13:57:03 +01:00
Proddy
2efb9d18c9 Merge pull request #1662 from proddy/dev
small regression fixes from the last messy build I created (sorry!)
2024-03-13 18:51:50 +01:00
proddy
9af782c485 fix web log 2024-03-13 18:49:38 +01:00
proddy
bc232fcff2 added some debug log messages 2024-03-13 17:50:33 +01:00
proddy
287232be5c fix bug where changing wifi ssid/password was not persisted from console 2024-03-13 17:39:39 +01:00
proddy
c1058ba06c package update 2024-03-13 17:37:35 +01:00
proddy
9fe6d1092a add back monitor filters for colors in VSC 2024-03-13 17:37:27 +01:00
proddy
ada55ffaba package cleanup 2024-03-13 17:37:07 +01:00
proddy
c70b1c3bbd don't need to start mDNS for IPv6 as its already running 2024-03-13 17:36:58 +01:00
MichaelDvP
a5708e11ba update packages 2024-03-13 16:21:41 +01:00
MichaelDvP
8dfc84eac2 add restart other command to change partition #1657 2024-03-13 16:03:28 +01:00
Proddy
e00c30cd4f Merge pull request #1658 from proddy/dev
fix broken web - #1656
2024-03-12 23:15:14 +01:00
Proddy
be6bb1de6a fixes #1656 2024-03-12 23:08:57 +01:00
Proddy
0bd57973c5 remove duplicate wifi log message for ipv6 2024-03-12 23:08:24 +01:00
Proddy
39cfa3ab79 uri doesnt need to be a string 2024-03-12 23:08:06 +01:00
Proddy
d36fe1c0bf update yarn 2024-03-12 23:07:55 +01:00
Proddy
27aa57da3c Merge pull request #1655 from proddy/dev
fix compiling local test
2024-03-10 21:36:55 +01:00
Proddy
b7bd2be0a5 fix compiling local test 2024-03-10 21:36:22 +01:00
Proddy
9ad80fc74d Merge pull request #1653 from MichaelDvP/dev
CW100/RC100 controlmode, fix emsesp#1650
2024-03-10 21:17:34 +01:00
Proddy
7fc7c24a20 Merge pull request #1654 from proddy/dev
cleanup and making asyncWS cleaner
2024-03-10 21:17:21 +01:00
Proddy
c1ae0e76c8 autoformatting 2024-03-10 21:15:52 +01:00
Proddy
f1f9bacf76 ignore vscode 2024-03-10 21:15:42 +01:00
Proddy
4e3eb3aeaa asyncwebserver optimizations 2024-03-10 21:15:34 +01:00
Proddy
18c5aaf598 ignore local vsc files 2024-03-10 21:14:20 +01:00
Proddy
cff60f4ed8 update API tests 2024-03-10 21:14:09 +01:00
MichaelDvP
9fe54825f8 Merge branch 'dev' of https://github.com/emsesp/EMS-ESP32 into dev 2024-03-09 16:09:17 +01:00
Proddy
c5f2dba1ef Merge pull request #1651 from proddy/dev
minor text changes
2024-03-09 14:52:16 +01:00
proddy
b94b3e7e2e added comment to show test add example 2024-03-09 14:51:03 +01:00
proddy
c75f7b6c7d simulate hc's 2024-03-09 14:50:52 +01:00
proddy
d25ead5208 update version in standalone 2024-03-09 14:50:37 +01:00
proddy
68f09f03f8 formatting console 2024-03-09 14:50:23 +01:00
MichaelDvP
fc1e009f09 CW100/RC100 controlmode, fix #1650 2024-03-09 14:38:07 +01:00
Proddy
a5ef1d16d5 Merge pull request #1649 from proddy/dev
package updates
2024-03-09 00:58:53 -08:00
Proddy
e80c2b0814 package updates 2024-03-09 09:58:12 +01:00
MichaelDvP
7ba330176a update packages 2024-03-07 11:38:00 +01:00
MichaelDvP
ab9caeba9c roomctrl: disable rf_sensor, set type with controlmode 2024-03-07 11:37:31 +01:00
MichaelDvP
7a5eeaa88a weblog refresh_sync to 80 ms 2024-03-07 11:12:26 +01:00
Proddy
bb3550810d Merge pull request #1647 from MichaelDvP/dev2
update testbuild to latest dev change
2024-03-02 10:54:20 +01:00
Proddy
5bdf7978bf Merge pull request #1646 from MichaelDvP/dev
enable IPv6 for tasmota-arduino
2024-03-02 10:53:45 +01:00
MichaelDvP
f77fb12c80 revert uart change, event.size not set for break. 2024-03-02 10:41:15 +01:00
MichaelDvP
9fc109eec1 update changelog, 3.6.5-dev.16 2024-02-29 18:54:49 +01:00
MichaelDvP
f1342e4d62 Merge branch 'dev' into dev2 2024-02-29 15:06:05 +01:00
MichaelDvP
854f764b3c add esp32_s3_32M profile, 16M partitions with larger data space, packages 2024-02-29 14:28:58 +01:00
MichaelDvP
463c68d08c enable IPv6 for tasmota, add env:ci_16M for E32V2 2024-02-29 10:12:42 +01:00
MichaelDvP
2ddd2401eb add limits to entities #1642 2024-02-28 12:41:21 +01:00
MichaelDvP
ff045b1a01 back to platform 2024.01.01, show dns ipv6 in right format 2024-02-28 12:40:27 +01:00
MichaelDvP
7c73e70986 more weather compensation entities #1642 2024-02-28 07:46:22 +01:00
MichaelDvP
8699bd4eb0 update packages 2024-02-28 07:45:17 +01:00
MichaelDvP
626c32763f add weather compensation, #1642 2024-02-27 17:48:54 +01:00
MichaelDvP
56c958a141 back to tasmota 2024.01.00, fix dns issue 2024-02-27 16:58:24 +01:00
MichaelDvP
d09abc1b49 back to platform 24.01.00 2024-02-27 16:17:50 +01:00
Proddy
8c4fc495a3 Merge pull request #1639 from MichaelDvP/dev2
merge dev changes/fixes, new entities, env for N32R8 chip, fix custom board profile on boot
2024-02-27 08:26:58 +01:00
Proddy
fd1d4b97a0 Merge pull request #1638 from MichaelDvP/dev
fix command attribute #1637
2024-02-27 08:25:16 +01:00
MichaelDvP
d8b77fc056 Merge branch 'dev' into dev2 2024-02-27 07:58:21 +01:00
MichaelDvP
82579869a4 fix command attribute #1637 2024-02-27 07:53:22 +01:00
MichaelDvP
12690eeaf4 Merge branch 'dev' of https://github.com/emsesp/EMS-ESP32 into dev 2024-02-27 07:27:44 +01:00
MichaelDvP
a359618cca v.test.16, update changelog 2024-02-26 14:59:36 +01:00
MichaelDvP
20165a528d heatpump dhw stop temperatures #1624 2024-02-26 14:59:05 +01:00
MichaelDvP
3a23dae178 show in info and use for mqtt: heap_caps_get_free_size, #1622 2024-02-26 14:58:23 +01:00
MichaelDvP
e50d4fafb5 Slovak language fix #1636 2024-02-26 14:56:49 +01:00
MichaelDvP
673b4c2881 add env and partition for devKitC-1-N32R8, #1635 2024-02-26 14:56:18 +01:00
MichaelDvP
b676c4d164 fix thermostat wwc2 commands 2024-02-25 13:54:06 +01:00
MichaelDvP
40716f9c55 add RC300 wwc2 entities 2024-02-25 10:51:08 +01:00
MichaelDvP
df0210bfac update packages 2024-02-25 10:50:31 +01:00
MichaelDvP
41ac8120d0 16M partitions, second nvs 2024-02-24 18:32:20 +01:00
MichaelDvP
6a66c7def7 fix custom board profile on boot 2024-02-24 18:31:39 +01:00
MichaelDvP
3b0b6d75a7 uart check break first 2024-02-24 18:31:09 +01:00
MichaelDvP
292ed242c4 AsyncTCP queue 32 2024-02-24 18:30:38 +01:00
MichaelDvP
bb670e97ff add platform to system_info 2024-02-24 18:30:08 +01:00
MichaelDvP
768bdcaaaa add platform to system info 2024-02-24 14:38:08 +01:00
Proddy
1db4a33a1d Merge pull request #1631 from MichaelDvP/dev
small fixes
2024-02-24 13:28:50 +01:00
MichaelDvP
61d11ce440 update packages 2024-02-24 10:04:09 +01:00
MichaelDvP
08918a7349 AsyncTCP stack and queue settings 2024-02-24 10:03:58 +01:00
MichaelDvP
87542fb9df update packages 2024-02-24 09:47:34 +01:00
Proddy
fb09386c22 Merge pull request #1633 from proddy/dev
fix issue with HA, removing availability check for online status as it may not have been published in time
2024-02-23 19:43:17 +01:00
Proddy
d42ae52aff fix issue with HA, removing availability check for online status as it may not have been published in time 2024-02-23 19:42:15 +01:00
Proddy
271d1fda92 package update 2024-02-23 19:41:44 +01:00
Proddy
df982e3ea9 Merge pull request #1632 from MichaelDvP/dev2
update to all dev changes
2024-02-23 19:13:32 +01:00
MichaelDvP
222aaca218 store relais states in nvs 2024-02-23 10:00:15 +01:00
MichaelDvP
8a56c599e6 uart-isr to iram 2024-02-23 09:57:53 +01:00
MichaelDvP
003d3740af partitions: nvs: 20k, fs: 1M 2024-02-23 09:57:34 +01:00
MichaelDvP
74342ba654 Merge branch 'dev' into dev2 2024-02-23 08:56:43 +01:00
MichaelDvP
392015f3af Merge branch 'dev' of https://github.com/emsesp/EMS-ESP32 into dev 2024-02-23 08:48:27 +01:00
Proddy
c769fd6d2c Merge pull request #1626 from proddy/dev
Expose EMS-ESP commands (like reset) via MQTT Discovery #1605
2024-02-22 21:29:21 +01:00
Proddy
0f06bfa91c 3.6.5-dev15 2024-02-22 21:29:04 +01:00
Proddy
dffc4a7c02 package update 2024-02-22 21:27:43 +01:00
Proddy
34201025c3 update with #1628 2024-02-21 23:10:56 +01:00
Proddy
189ea6b23d Send MQTT heartbeat immediately after connection 2024-02-21 23:04:32 +01:00
Proddy
24f2d86059 update packages 2024-02-21 23:04:18 +01:00
Proddy
1a08ab6a2b remove RSSI from info payload as its in the heartbeat 2024-02-21 23:04:10 +01:00
MichaelDvP
5e5e6ff053 fixed ip for ETH, setting order 2024-02-21 16:02:04 +01:00
MichaelDvP
08204a94d8 fix typo #1622 2024-02-21 16:01:35 +01:00
MichaelDvP
0eb3df704e Merge branch 'dev' of https://github.com/emsesp/EMS-ESP32 into dev 2024-02-21 15:59:56 +01:00
Proddy
2eb77b5f97 package update 2024-02-20 23:28:06 +01:00
Proddy
33b6ece55b Expose EMS-ESP commands (like reset) via MQTT Discovery #1605 2024-02-20 23:27:56 +01:00
MichaelDvP
0010f71a3c uart in iram 2024-02-19 09:56:54 +01:00
MichaelDvP
38a546d6f7 remotetemp with RC200 v32.02, version as 10 byte telegram., fix #1622 2024-02-17 18:32:29 +01:00
MichaelDvP
4346de27b6 remote thermostat 30 sec interval, update packages 2024-02-16 13:41:30 +01:00
MichaelDvP
d797c3371b Merge branch 'dev' of https://github.com/emsesp/EMS-ESP32 into dev2 2024-02-15 09:08:01 +01:00
Proddy
5d3f8e5b69 updates 2024-02-14 22:19:11 +01:00
Proddy
8ebc552cac Merge pull request #1615 from proddy/dev
fix WiFi TxPower, plus a ton of other refactoring
2024-02-14 15:08:04 +01:00
proddy
944d86b644 removed unused _retained's 2024-02-14 15:07:35 +01:00
proddy
8bd2a39d4e update for 3.6.5-dev14 2024-02-14 15:07:17 +01:00
proddy
ed9cad6e39 hostname is multiline 2024-02-14 15:07:02 +01:00
proddy
e31330e931 200 char limit for hostnames 2024-02-14 15:06:51 +01:00
proddy
49d749e89f move generateClientId() 2024-02-14 14:47:29 +01:00
proddy
d3fadd7081 remove comment 2024-02-14 14:47:17 +01:00
proddy
31ff0f5aba add override 2024-02-14 14:47:09 +01:00
proddy
b24a63b992 add missing overrides 2024-02-14 14:46:59 +01:00
proddy
f5ec9e9602 remove unneeded file 2024-02-14 14:46:20 +01:00
proddy
b6accb8d02 add extra {} to SubscribeItem list[1] 2024-02-14 14:46:10 +01:00
Proddy
a35486ec24 remove bogus flags 2024-02-14 11:09:08 +01:00
Proddy
fdaa9a6188 tidy up standalone 2024-02-14 11:00:16 +01:00
Proddy
daf08e7bd9 support standalone 2024-02-14 11:00:03 +01:00
Proddy
994e1fc26b remove bogus include 2024-02-14 10:54:16 +01:00
Proddy
34b7dd61cf clean up standalone 2024-02-14 10:53:53 +01:00
Proddy
ce3c3e0b3e tidy up lambda's 2024-02-13 20:19:58 +01:00
Proddy
92a80c3aaf factoryReset only used with button in test mode 2024-02-13 20:19:41 +01:00
Proddy
df21c15972 code cleaning 2024-02-13 20:19:21 +01:00
Proddy
b683d1dd21 default mqtt will base off ESP32's chip code 2024-02-13 20:19:03 +01:00
Proddy
a7d0259b30 replace lambda [&] with [this] 2024-02-13 15:19:06 +01:00
Proddy
16779064f4 update 2024-02-13 15:17:47 +01:00
Proddy
732ad4bc6a remove retainStr 2024-02-13 15:17:34 +01:00
Proddy
f40a6f20c6 change log text 2024-02-13 15:16:58 +01:00
proddy
4bf22dd6a5 refresh sync to 30ms for faster display in web 2024-02-13 10:57:37 +01:00
proddy
62ae5332de use consistent log message format 2024-02-13 10:57:11 +01:00
proddy
12e65279ef package update 2024-02-13 10:56:56 +01:00
proddy
295b90f49c NTP log text 2024-02-13 10:56:50 +01:00
Proddy
644907e58b fix error in event log 2024-02-12 14:51:10 +01:00
Proddy
a8a875f9d5 add missing tx_power 2024-02-12 14:40:08 +01:00
Proddy
6cd9dfc685 fixes for #1615 2024-02-12 14:25:21 +01:00
Proddy
80a3007f8b refactoring 2024-02-12 14:21:30 +01:00
Proddy
ed5f0bc6d5 start logging service sooner so weblog captures setup like network, mqtt etc 2024-02-12 11:22:56 +01:00
Proddy
df1109ea39 remove wifi_tweak 2024-02-12 11:22:21 +01:00
Proddy
1f7c968d0d remove OriginID from state service 2024-02-12 11:22:07 +01:00
Proddy
65cf8005a4 fixes for txPower 2024-02-11 23:01:32 +01:00
proddy
7c97aaf735 try out etags instead of immutable cache 2024-02-11 21:54:31 +01:00
proddy
23cfdd9b34 remove cmd 2024-02-11 21:54:08 +01:00
Proddy
b454e87405 Merge branch 'emsesp:dev' into dev 2024-02-11 14:23:24 +01:00
Proddy
3d715c45e0 Wifi Tx Power not adjusted #1614 2024-02-11 14:21:51 +01:00
proddy
fea63b0d52 #1614 - WiFi Tx Power 2024-02-11 10:32:33 +01:00
MichaelDvP
ce33fa6535 Merge branch 'dev' of https://github.com/emsesp/EMS-ESP32 into dev2 2024-02-10 17:25:50 +01:00
Proddy
57296e55f2 Merge pull request #1610 from proddy/dev
memory optimizations
2024-02-10 16:43:34 +01:00
Proddy
12f0120afd fix standalone compiling 2024-02-10 16:17:40 +01:00
Proddy
303e86a5eb remove unused comments 2024-02-10 15:43:59 +01:00
Proddy
52479c408f added comment for refactor reminder 2024-02-10 15:43:49 +01:00
Proddy
fc8eea91eb scope optimization 2024-02-10 15:43:35 +01:00
Proddy
fe5a6fb568 added missing data points 2024-02-10 15:43:19 +01:00
Proddy
55672cc9de don't show bus scanning, so orange warning doesn't render on refresh 2024-02-10 15:43:03 +01:00
Proddy
6d6291e659 remove feature as its not used, and speed up web loading slightly 2024-02-10 15:42:14 +01:00
MichaelDvP
c2be9b210e GPIO check, typo and missing platform 2024-02-10 14:35:53 +01:00
proddy
257b40c2e4 fix MQTT discovery of custom entity doesn't consider type of data #1587 2024-02-10 09:51:29 +01:00
proddy
e6b61b7a51 bump 3.6.5-dev.13 2024-02-10 09:50:58 +01:00
proddy
f167be37a1 ArduinoJson 7.0.3 2024-02-10 09:50:32 +01:00
proddy
4ac2d1a9a7 remove extra v 2024-02-10 09:50:13 +01:00
proddy
8c602cd058 default -O2 2024-02-10 09:50:04 +01:00
proddy
b8f6664176 rename msgpack 2024-02-10 09:49:53 +01:00
proddy
1024dbb61f refactoring 2024-02-09 18:23:55 +01:00
MichaelDvP
464341c2cb DHW meter for heatpump #1609, test remote RF sensor 2024-02-09 09:13:55 +01:00
MichaelDvP
f765d7c31b update packages 2024-02-09 09:02:26 +01:00
MichaelDvP
72b64a0c30 arduino 3.0 adapt for tasmota <=2024.01.10, not compatble with new IP6Address 2024-02-08 21:42:13 +01:00
MichaelDvP
2b88fec2ee check valid pins for board_profile and analog 2024-02-08 18:52:27 +01:00
MichaelDvP
119b2b9514 RC100H emulation version and telegrams 2024-02-08 18:51:45 +01:00
MichaelDvP
4f406e8d33 update packages 2024-02-08 18:47:46 +01:00
MichaelDvP
0d80f58ea6 AsyncWebServer arduino3.0 compatible 2024-02-08 18:39:15 +01:00
MichaelDvP
6c7a3ad68c update esp32 platform 2024-02-08 17:42:35 +01:00
MichaelDvP
52a8b20c54 Merge branch 'dev' of https://github.com/emsesp/EMS-ESP32 into dev2 2024-02-06 19:30:24 +01:00
MichaelDvP
5213382246 add #1609 dhw energy meter and some thermostat junkers settings 2024-02-06 19:25:14 +01:00
MichaelDvP
0b452ddd39 use FB10 telegram 0x123, ack writes 2024-02-05 13:24:35 +01:00
Proddy
253adfeb45 memory optimizations 2024-02-05 09:38:11 +01:00
MichaelDvP
355c7cbd92 fix ht3-reply 2024-02-05 08:52:29 +01:00
MichaelDvP
99d7ff0dc7 async tcp formatting 2024-02-05 08:42:38 +01:00
MichaelDvP
6564e444ab thermostat emulation check ht3 adddress 2024-02-05 07:33:52 +01:00
MichaelDvP
51b0a0ae5b Junkers FB10 telegram-id 2024-02-04 20:14:21 +01:00
Proddy
738d9b1d94 Merge pull request #1608 from xobed/dev
Fix Slovenian -> Slovak
2024-02-04 18:20:49 +01:00
xobed
4319d648aa Fix Slovenian -> Slovak 2024-02-04 17:52:05 +01:00
Proddy
2595b906a5 Merge pull request #1606 from proddy/dev
small updates
2024-02-04 15:10:06 +01:00
Proddy
c98e1a629b add type to device info, so we know if its a Ram variable or not 2024-02-04 14:52:35 +01:00
Proddy
ae7f0445a3 added DEBUG around logger().debug to prevent 'undefined' showing in log 2024-02-04 14:52:12 +01:00
Proddy
8406657906 text change 2024-02-04 14:51:44 +01:00
Proddy
9135635af2 auto-formatting 2024-02-04 14:51:35 +01:00
Proddy
25098409df text update 2024-02-04 14:51:22 +01:00
Proddy
8176120bf9 text update 2024-02-04 14:51:10 +01:00
Proddy
5cfb7b4548 default C++17 and added CONFIG_ASYNC_TCP_STACK_SIZE 2024-02-04 14:51:03 +01:00
Proddy
3f17d74bc6 update packages 2024-02-04 14:50:43 +01:00
Proddy
1694a0b41d use default test general 2024-02-04 14:50:28 +01:00
Proddy
ec8a182aa3 bump version 2024-02-04 14:50:14 +01:00
Proddy
22b70ac378 replace list with vector (makes no diff) 2024-02-04 14:49:59 +01:00
Proddy
40a685aeb2 remove cache 2024-02-04 14:49:23 +01:00
Proddy
a580998f25 update libraries 2024-02-04 14:49:11 +01:00
MichaelDvP
faa888ff36 remote emulation FB10, #1602 2024-02-04 14:38:34 +01:00
Proddy
afc34fc387 Merge branch 'emsesp:dev' into dev 2024-02-04 10:24:39 +01:00
Proddy
45335be4ed Merge pull request #1603 from MichaelDvP/dev
add diff for #1597, fix #1599
2024-02-04 10:23:20 +01:00
MichaelDvP
b834c8fd89 Merge branch 'dev' into dev2 2024-02-03 18:38:34 +01:00
MichaelDvP
24162b7350 update packages 2024-02-03 18:37:26 +01:00
MichaelDvP
3bb7e3514f add #1597 temp diff 2024-02-03 18:14:31 +01:00
MichaelDvP
58b75ee203 Merge branch 'dev' of https://github.com/emsesp/EMS-ESP32 into dev 2024-02-03 15:00:01 +01:00
MichaelDvP
d32178480d fix #1599 2024-02-03 14:59:14 +01:00
MichaelDvP
38e08be752 button should always be input 2024-02-03 14:58:49 +01:00
MichaelDvP
9573c4ed94 pretty_telegram 2nd fallback for name 2024-02-03 14:58:07 +01:00
Proddy
56e5e87238 Merge branch 'emsesp:dev' into dev 2024-01-30 20:54:58 +01:00
Proddy
ef47ee62a3 Merge pull request #1592 from MichaelDvP/dev2
update dev2 to latest dev changes
2024-01-30 20:38:49 +01:00
Proddy
a9a2380287 Merge pull request #1591 from MichaelDvP/dev
fix #1590 and more checks for device-telegram mapping
2024-01-30 19:57:08 +01:00
MichaelDvP
5bd9ec963f update translations 2024-01-30 08:09:18 +01:00
MichaelDvP
427e8cf11c update packages 2024-01-30 08:09:03 +01:00
MichaelDvP
de9c224a23 show sensor command commands 2024-01-30 08:05:50 +01:00
MichaelDvP
5532d20657 update packages 2024-01-30 07:47:42 +01:00
MichaelDvP
b7ce69ee2d map RFM200/T1RF to connect/extension 2024-01-30 07:42:57 +01:00
MichaelDvP
00b3525503 show sensor command commands 2024-01-30 07:41:49 +01:00
MichaelDvP
1065c9eec9 translations 2024-01-30 07:41:17 +01:00
MichaelDvP
8d3dd9d8e9 Merge branch 'dev' into dev2 2024-01-30 07:31:00 +01:00
MichaelDvP
0f799d5922 fix broadcast sending 2024-01-30 07:15:11 +01:00
MichaelDvP
3a8bed6976 Merge branch 'dev' of https://github.com/emsesp/EMS-ESP32 into dev 2024-01-29 10:20:15 +01:00
proddy
aadf4b7a53 package update 2024-01-28 21:58:25 +01:00
Proddy
ed7ba17bc7 Merge pull request #1575 from proddy/dev
small changes, optimizations and fixes
2024-01-28 18:30:19 +01:00
Proddy
526c36728f Merge branch 'emsesp:dev' into dev 2024-01-28 18:29:52 +01:00
Proddy
c7a35ebc58 updated with changes to sensor commands 2024-01-28 18:29:22 +01:00
Proddy
5735ffd222 tidied up commands 2024-01-28 18:28:26 +01:00
Proddy
d11508282f tidied up commands info, values etc 2024-01-28 18:28:12 +01:00
Proddy
30e11ad593 added comment 2024-01-28 18:27:51 +01:00
proddy
040954bb70 tidy up commands for temperature sensor 2024-01-28 16:36:18 +01:00
proddy
eec0051997 hide IP addresses 2024-01-28 14:09:42 +01:00
proddy
fab74a9061 package update 2024-01-28 13:21:52 +01:00
proddy
8e9edcb673 fixes #1583 2024-01-28 13:21:45 +01:00
MichaelDvP
2bd66bf4b6 reset wait_validate, typo 2024-01-28 12:16:35 +01:00
MichaelDvP
ce6e89338f reset wait_validate 2024-01-28 12:15:16 +01:00
MichaelDvP
9e423d9769 Merge branch 'dev' of https://github.com/MichaelDvP/EMS-ESP32 into dev 2024-01-28 11:37:41 +01:00
MichaelDvP
52bb6b8218 Merge branch 'dev' into dev2 2024-01-28 11:35:43 +01:00
MichaelDvP
5748bd4074 Merge branch 'dev' of https://github.com/MichaelDvP/EMS-ESP32 into dev 2024-01-28 11:31:42 +01:00
MichaelDvP
6155645436 process telegram selection of device 2024-01-28 11:31:17 +01:00
MichaelDvP
85a839e86b Merge branch 'emsesp:dev' into dev 2024-01-28 11:21:47 +01:00
MichaelDvP
0760e6e021 hpPressure telegram 2024-01-28 09:07:49 +01:00
MichaelDvP
fbd3ebbd4e fetch mixer 0x2CC 2024-01-28 09:07:28 +01:00
MichaelDvP
24b8e004ec fix jsonvariant in command 2024-01-28 09:07:05 +01:00
MichaelDvP
542246c142 hpPressure telegram 2024-01-28 09:03:22 +01:00
MichaelDvP
31bea94d9c fetch mixer 0x2CC 2024-01-28 08:41:02 +01:00
MichaelDvP
5669deeb80 fix jsonvariant in command 2024-01-28 08:40:38 +01:00
proddy
34cafe0d4d minor refactor moving scheduler item list loading once 2024-01-26 23:01:44 +01:00
proddy
e319f5e270 package update 2024-01-26 23:01:17 +01:00
Proddy
133decf453 Merge pull request #1579 from myxor/myxor-patch-2
Add Buderus MX300 Internet Gateway
2024-01-24 23:41:48 +01:00
Marco H
541615d405 Add Buderus MX300 Internet Gateway 2024-01-24 20:02:02 +01:00
MichaelDvP
1042298541 add brackets to make logic clear 2024-01-24 11:10:16 +01:00
MichaelDvP
6aca61deee typo, telegram name for pretty telegram 2024-01-24 07:44:20 +01:00
MichaelDvP
9266454f82 rework process telegram 2024-01-23 13:47:28 +01:00
MichaelDvP
21de630f8e check telegrams for dest==thermostat 2024-01-22 16:13:23 +01:00
Proddy
8a0e037c60 change default version for testing 2024-01-22 10:03:02 +01:00
Proddy
326e7bcc2a add TODO comments so reminding me what to do next 2024-01-21 21:51:52 +01:00
Proddy
cc8839ab31 add tests in a consistent way 2024-01-21 21:49:39 +01:00
Proddy
fcffa3df5c add comment 2024-01-21 21:49:06 +01:00
Proddy
27d0ba0526 store custom files for testing 2024-01-21 21:48:36 +01:00
Proddy
18d329f3ee add analog test 2024-01-21 21:48:24 +01:00
Proddy
9e064eb564 remove comments 2024-01-21 21:48:04 +01:00
Proddy
2764185132 minor text changes 2024-01-21 18:28:07 +01:00
Proddy
79d7142e5f add test data 2024-01-21 18:27:58 +01:00
Proddy
2a3838771a cleanup tests 2024-01-21 18:27:22 +01:00
Proddy
8d712c47f0 package update 2024-01-21 18:26:47 +01:00
Proddy
a3ccc83cf3 change text for custom entities 2024-01-21 18:26:36 +01:00
proddy
fe30b8de8d work on muter/upload testing 2024-01-21 11:46:13 +01:00
proddy
d8671dd114 formatting 2024-01-21 11:45:40 +01:00
proddy
603036a5e9 formatting 2024-01-21 11:45:29 +01:00
proddy
9eb617bcb0 package update 2024-01-21 11:45:22 +01:00
proddy
82e1b069eb rename callback function 2024-01-21 11:45:00 +01:00
Proddy
89da6d5851 Merge pull request #1574 from MichaelDvP/dev2
Update dev2 to latest changes of dev
2024-01-21 10:18:10 +01:00
MichaelDvP
1491f283a8 update packages 2024-01-21 09:35:26 +01:00
MichaelDvP
a8c3b21ee6 Merge branch 'dev' into dev2 2024-01-21 09:35:16 +01:00
Proddy
1b27e1fd09 Merge pull request #1572 from proddy/dev
update web standalone with variable custom entity
2024-01-20 21:00:20 +01:00
Proddy
d99222450c minor code optimizations 2024-01-20 20:58:46 +01:00
Proddy
ef075787dc add ram to test data 2024-01-20 20:58:38 +01:00
Proddy
ec411a7dff Merge pull request #1570 from MichaelDvP/dev
custom variables #1423
2024-01-20 20:20:34 +01:00
Proddy
fd4f649db3 Merge pull request #1571 from proddy/dev
minor tweaks
2024-01-20 20:18:50 +01:00
Proddy
0c93f1daa5 update esptool files 2024-01-20 20:17:46 +01:00
Proddy
7da2806ab4 add missing security endpoint 2024-01-20 20:17:30 +01:00
Proddy
f88685833d fix endless loop with token 2024-01-20 20:17:17 +01:00
MichaelDvP
c0e77698aa Add custom variables #1423 2024-01-20 17:57:01 +01:00
MichaelDvP
9fd7b2553c set min/max for hpDiffPress 2024-01-20 17:24:47 +01:00
Proddy
bb5ca8a804 Merge pull request #1569 from MichaelDvP/dev
telegram mapping to device, add 0x2CC telegrams
2024-01-20 15:13:39 +01:00
MichaelDvP
cd8921e78e add hpSetDiffPressure #1563 2024-01-20 15:01:41 +01:00
MichaelDvP
9260db330e add mixer values #1554 2024-01-20 15:01:11 +01:00
MichaelDvP
3b32dcb407 Map telegrams as mentioned in #1563 2024-01-20 14:59:59 +01:00
Proddy
549a0302b7 Merge pull request #1568 from MichaelDvP/dev
fix #1565 and workaround for #1564
2024-01-20 12:22:31 +01:00
MichaelDvP
4d1a428acf fix #1565, use String for output a single api_data 2024-01-20 10:48:16 +01:00
MichaelDvP
cc83dab97b remove unused type 2024-01-20 10:46:10 +01:00
MichaelDvP
65ff765219 workaround for #1564 2024-01-20 10:45:52 +01:00
MichaelDvP
d5cb5c1c51 update packages 2024-01-20 10:45:01 +01:00
MichaelDvP
4974208a65 update arduinoJson 7.02 2024-01-20 08:36:06 +01:00
MichaelDvP
e88ede2d8b typo 2024-01-20 08:29:17 +01:00
Proddy
2b6fd41d5a Merge pull request #1559 from proddy/dev
add tag after fullname instead of before
2024-01-17 11:58:55 +01:00
Proddy
e26208a5e9 package update 2024-01-17 11:58:33 +01:00
Proddy
12a545ddbf rollback #1338 2024-01-17 11:58:25 +01:00
Proddy
4ad5c7299e fixes #1338 2024-01-14 21:32:00 +01:00
Proddy
c04371dfae rename Discovery to lowercase so it looks consistent 2024-01-14 21:31:43 +01:00
Proddy
d810494211 update react-toastify 2024-01-14 21:31:20 +01:00
Proddy
18dd207d3c fixes #1338 2024-01-14 21:12:50 +01:00
Proddy
a34c8661bd optimize so easier to port to IDF later 2024-01-14 21:12:36 +01:00
Proddy
f9516860e3 remove comment 2024-01-14 21:12:15 +01:00
Proddy
ded7b547e1 Merge pull request #1558 from proddy/dev
renamed Web custom entity TSX class, remove bogus URI handler from Web customization, added icon to Custom table
2024-01-14 15:26:14 +01:00
Proddy
77607263a9 3.6.5-dev.9 2024-01-14 15:22:07 +01:00
Proddy
c55e05e7b2 remove redundant rest call to /rest/customization 2024-01-14 15:16:50 +01:00
Proddy
d529cbf269 package update 2024-01-14 15:15:48 +01:00
Proddy
c578154b5e tidy up custom entities, add writeable icon (inspired by #1557) 2024-01-14 15:15:40 +01:00
MichaelDvP
6c398109f4 Mixer set message to 0x2CD, .. 2024-01-14 10:20:54 +01:00
Proddy
bbfdb0ff0e Merge pull request #1555 from proddy/dev
routine updates
2024-01-13 22:24:02 +01:00
Proddy
48de155201 update example 2024-01-13 22:21:50 +01:00
Proddy
a2cfe00113 update tasmota lib 2024-01-13 22:21:43 +01:00
Proddy
e0c8557d5c package update 2024-01-13 22:21:12 +01:00
MichaelDvP
74691ce34a roomctrl RC200 version with 2.id 2024-01-13 15:43:31 +01:00
MichaelDvP
ef6ac3848f mixer telegram 0x2CC, #1554 2024-01-13 15:36:01 +01:00
MichaelDvP
5c490834cf fix telegram length check of remote 2024-01-13 13:25:25 +01:00
Proddy
d6aa1fb48b ArduinoJson 7.0.1 2024-01-13 11:37:37 +01:00
Proddy
2190db77ad package update 2024-01-13 11:37:19 +01:00
MichaelDvP
7b4f76d51d remote type depends on control setting 2024-01-12 10:42:16 +01:00
MichaelDvP
16010b2223 remote use RC200 for hc3/4 2024-01-12 09:50:21 +01:00
Proddy
8c2aba8eb1 Merge pull request #1552 from proddy/dev
new 'add' test
2024-01-12 08:50:55 +01:00
proddy
c834c5e43e debug formatting 2024-01-11 21:37:48 +01:00
proddy
94f268a62d add new 'add' test 2024-01-11 21:37:40 +01:00
proddy
1f81ccb686 remove comment 2024-01-11 21:36:58 +01:00
proddy
356180dbf9 package update 2024-01-11 21:36:52 +01:00
MichaelDvP
ea2d5b77c0 use RC100H again for remote 2024-01-11 18:24:46 +01:00
MichaelDvP
81b0b77e2b type-ids RemoteCorrection/Batterie device dependend 2024-01-11 17:34:24 +01:00
MichaelDvP
af1209cb04 fix roomctrl for hc>1 2024-01-11 07:55:07 +01:00
MichaelDvP
b6ec8e14ec remote emulation RC200 for hc3/4 instead of RC100H 2024-01-10 18:32:23 +01:00
MichaelDvP
63cf4bdc21 remote thermostat for hc3 at 0x1A 2024-01-09 10:51:59 +01:00
Proddy
1d025d5b97 Merge pull request #1548 from proddy/dev
also remove references from JsonObjectConst and JsonArray
2024-01-08 11:45:30 +01:00
Proddy
cf8c5430d1 also remove references from JsonObjectConst and JsonArray 2024-01-08 11:44:33 +01:00
Proddy
1dde495f61 Merge pull request #1546 from MichaelDvP/dev
fix typo #1521
2024-01-08 11:33:50 +01:00
Proddy
c3650817ef Merge pull request #1547 from proddy/dev
remove & reference to JsonVariant (prevent dangling references)
2024-01-08 11:33:37 +01:00
Proddy
3f10523e66 remove & reference to JsonVariant (prevent dangling references) 2024-01-08 11:32:58 +01:00
MichaelDvP
8ddc167f93 Merge branch 'dev' into dev2 2024-01-08 11:26:17 +01:00
MichaelDvP
54d2f38841 Merge branch 'dev2' of https://github.com/emsesp/EMS-ESP32 into dev2 2024-01-08 11:26:07 +01:00
Proddy
ad9e463923 update package 2024-01-08 11:25:35 +01:00
MichaelDvP
5f2859fae2 fix typo #1521 2024-01-08 11:23:17 +01:00
Proddy
2b03d01a15 Merge pull request #1544 from proddy/dev
small changes, but many
2024-01-06 18:00:23 +01:00
Proddy
2366f6ba50 update licensing year to 2024 2024-01-06 17:58:11 +01:00
Proddy
10d6728c82 remove obsolete reference to JsonObject 2024-01-06 17:42:42 +01:00
Proddy
778cdaabb6 Merge branch 'emsesp:dev' into dev 2024-01-06 17:37:49 +01:00
Proddy
efa4f80b99 Merge pull request #1542 from MichaelDvP/dev
fix #1495 and #1536
2024-01-06 17:16:35 +01:00
Proddy
f25ab5f293 Merge pull request #1543 from MichaelDvP/dev2
Update dev2 to latest changes from dev
2024-01-06 17:13:03 +01:00
MichaelDvP
ae15c7ccd0 add boiler C1200W, #1536 2024-01-06 16:50:37 +01:00
MichaelDvP
025f43953a Merge branch 'dev' of https://github.com/emsesp/EMS-ESP32 into dev2 2024-01-06 16:36:01 +01:00
MichaelDvP
bf95205af6 fix #1495 wwComfort mode 2024-01-06 16:10:12 +01:00
Proddy
cb11305416 upper case Digital In 2024-01-06 10:48:49 +01:00
Proddy
5e0c6a527a fix test for device list 2024-01-06 10:48:27 +01:00
Proddy
8540e71145 add additional cache header 2024-01-06 10:48:15 +01:00
Proddy
cb2746b741 show total size in a comment in file 2024-01-06 10:48:03 +01:00
Proddy
209644d500 unused 2024-01-06 10:47:51 +01:00
Proddy
273dc4b83c fix case of Value (introduced by Polish translations) 2024-01-06 10:47:43 +01:00
Proddy
75574f663b uppercase Digital In/Out 2024-01-06 10:47:15 +01:00
Proddy
462870fe6b uppercase Value 2024-01-06 10:47:02 +01:00
Proddy
f365fe5317 Merge pull request #1539 from proddy/dev
ArduinoJson version 7.0.0 - #1538
2024-01-05 22:42:20 +01:00
Proddy
19eb755157 fix Arduino 7 (using to<> and not as<> 2024-01-05 22:39:35 +01:00
Proddy
26e4badc1b add sections for MQTT Discovery 2024-01-05 22:39:08 +01:00
Proddy
fb00f4eef9 update 3.6.5.dev-8 2024-01-05 22:37:24 +01:00
Proddy
2ef85bb9fa package update 2024-01-05 22:37:07 +01:00
Proddy
2dfba3f7d0 default GPIO is 21 (40 is invalid) 2024-01-05 22:36:53 +01:00
Proddy
5259d55f23 show Platform (taken from build) 2024-01-05 22:36:31 +01:00
Proddy
af237c4fc0 Arduino v7 2024-01-04 23:43:30 +01:00
Proddy
13a915e1f4 Merge pull request #1537 from proddy/dev
fixes #1360 (domoticz) and #1528 (HA dev name)
2024-01-04 18:12:43 +01:00
Proddy
df33a24951 fix add_ha_sections_to_doc calls 2024-01-04 18:11:08 +01:00
Proddy
e62fc14b6d support domoticz - MQTT autodiscovery in Domoticz not working #1360 2024-01-04 18:10:53 +01:00
Proddy
591b8afcb0 restructuring and added additional domoticz support 2024-01-04 18:10:16 +01:00
Proddy
35ee8c33b3 add comment 2024-01-04 18:09:42 +01:00
Proddy
9ca47627d2 updated example pio 2024-01-04 18:09:29 +01:00
Proddy
4c27cb831e update tests for temp sensors 2024-01-04 18:09:18 +01:00
Proddy
a3b6656be7 add additional Domoticz to discovery_type 2024-01-04 18:09:00 +01:00
Proddy
b0076cd5da change comments 2024-01-04 18:08:41 +01:00
Proddy
b6dbf93de2 add missing setContentType 2024-01-04 18:08:31 +01:00
MichaelDvP
e8217b68a5 Merge branch 'dev' of https://github.com/emsesp/EMS-ESP32 into dev2 2024-01-04 11:53:38 +01:00
MichaelDvP
ebfe487a3a add Bosch C1200 boiler id 12 2024-01-04 11:43:49 +01:00
MichaelDvP
ce34567939 another test wwComfort 2024-01-04 11:43:29 +01:00
Proddy
3f42c4d56b fix typo 2024-01-03 23:57:00 +01:00
Proddy
55ce551868 added hostname to network status 2024-01-03 23:56:52 +01:00
Proddy
d16e77bba3 updated example 2024-01-03 23:56:31 +01:00
Proddy
c9efd095e7 show network hostname in webui 2024-01-03 23:56:23 +01:00
Proddy
8384344c5a no need to pretty json output 2024-01-03 23:03:41 +01:00
Proddy
cb5f707b2d use add_ha_sections_to_doc(), add via_device, add check for domoticz 2024-01-03 23:00:07 +01:00
Proddy
e525552e10 wifi console help text 2024-01-03 22:58:21 +01:00
Proddy
78bd0a1b76 espressif 6.5.0 2024-01-03 22:57:59 +01:00
Proddy
1316fe9509 3.6.5-dev.8 2024-01-03 22:57:13 +01:00
Proddy
c45fd23227 package update 2024-01-03 22:56:26 +01:00
Proddy
d6856e8a23 optimized chunking 2024-01-03 22:56:16 +01:00
Proddy
5fcad37fb9 ok to show devices if no ems connection 2024-01-03 22:56:03 +01:00
Proddy
ab58a3dfd3 add spacing 2024-01-03 22:55:44 +01:00
MichaelDvP
a81695e973 Merge branch 'dev2' of https://github.com/emsesp/EMS-ESP32 into dev2 2024-01-03 08:04:42 +01:00
MichaelDvP
8d1a36c669 wwcomfort on ems+ 2024-01-03 08:04:20 +01:00
Proddy
0fce450418 Merge pull request #1530 from proddy/dev
minor changes
2023-12-28 14:21:35 +01:00
Proddy
3a92d69c77 minor changes from https branch 2023-12-28 14:20:06 +01:00
Proddy
fa1a372468 https://github.com/emsesp/EMS-ESP32/pull/1517 2023-12-28 14:19:54 +01:00
Proddy
62b341a614 Merge pull request #1517 from arturzx/dev
fix: Fixed dev section in analog sensor HA discovery
2023-12-28 13:56:34 +01:00
Proddy
0058632d71 Merge pull request #1523 from pswid/dev
Polish translation update
2023-12-28 13:53:45 +01:00
Proddy
339408e12a Merge pull request #1529 from proddy/dev
fix HA modes from dev2 for #1525
2023-12-28 13:41:38 +01:00
Proddy
8bffa6b304 bump version 2023-12-28 13:40:45 +01:00
Proddy
7c80364bcf package update 2023-12-28 13:39:28 +01:00
Proddy
ac950e0e92 fix from dev2 for https://github.com/emsesp/EMS-ESP32/pull/1525 2023-12-28 13:39:14 +01:00
Proddy
77700c4873 Merge pull request #1525 from Bingo2023/dev2
Dev2 - corrected mode control for HA (including translations).
2023-12-28 07:48:01 +01:00
Bingo2023
d035a29f24 // corrected mode control for HA (including translations).
modified:   src/mqtt.cpp
2023-12-23 14:14:20 +01:00
Bingo2023
4c51b90663 modified: src/mqtt.cpp 2023-12-22 20:02:12 +01:00
Proddy
8d33a89e39 Merge pull request #1524 from MichaelDvP/dev
add ES79 and fix german translation, fixes #1521, #1522
2023-12-22 16:18:04 +01:00
MichaelDvP
41260a4370 fix nompower warning 2023-12-22 14:46:23 +01:00
MichaelDvP
7d15a8010d update pkg 2023-12-22 12:32:10 +01:00
MichaelDvP
606a7e6eec add Sieger ES79, #1521 2023-12-22 12:27:39 +01:00
MichaelDvP
83e400fbe9 fix german translation from #1522 2023-12-22 12:25:07 +01:00
pswid
d3ae73e6b2 Restored Polish characters in the font file
Polish characters disappeared from the re.woff2 file sometime between April and August this year. I assume it was unintentional.
2023-12-22 11:15:17 +01:00
pswid
b4b2531e33 Polish translation update 2023-12-22 10:45:37 +01:00
Proddy
225e482814 Merge pull request #1519 from MichaelDvP/dev_1
compile with tasmota arduino 2.14 and 3.0
2023-12-20 22:06:39 +01:00
MichaelDvP
ddd1f5de5b Merge branch 'dev' into dev2 2023-12-19 18:35:10 +01:00
MichaelDvP
446601c6e0 update mqttClient, works with tasmota-arduino 2.14 / 3.0 without WiFiSecure 2023-12-19 13:47:10 +01:00
MichaelDvP
9f3e2dbcd3 merge PR#1497 from pswid, add partiton, resort system status 2023-12-19 13:44:15 +01:00
Artur Zabroński
3163a142a9 fix: Fixed dev section in analog sensor HA discovery 2023-12-19 08:51:56 +01:00
MichaelDvP
dcb0d5087f Merge branch 'dev' of https://github.com/emsesp/EMS-ESP32 into dev 2023-12-18 18:18:10 +01:00
MichaelDvP
e2544947f7 sk-translation 2023-12-18 10:47:58 +01:00
MichaelDvP
19743da558 translation cold water 2023-12-18 09:48:25 +01:00
Proddy
08c5fd8f64 Merge pull request #1514 from MichaelDvP/dev
ethernet with arduino_3.0, sort translations alphabetical
2023-12-18 09:45:38 +01:00
Proddy
a28cdaa930 Merge pull request #1515 from proddy/dev
add SK entity translations (from Michael)
2023-12-18 09:44:25 +01:00
proddy
3f31962a9a add SK translations (from Michael) 2023-12-18 09:43:38 +01:00
proddy
651b1b1c50 package update 2023-12-18 09:43:21 +01:00
MichaelDvP
ca2ca972b9 add sk entity translations 2023-12-17 13:58:04 +01:00
MichaelDvP
215c4e49ca sort translation alphabetical 2023-12-17 12:48:36 +01:00
MichaelDvP
d1dbce84c7 ethernet working with arduino_3.0 2023-12-17 12:39:36 +01:00
MichaelDvP
fb4a0b0ae8 Merge branch 'dev' of https://github.com/emsesp/EMS-ESP32 into dev 2023-12-17 12:35:46 +01:00
MichaelDvP
854a39fe6b ethernet working with arduino_3.0 2023-12-17 12:35:07 +01:00
Proddy
a01ee4a48d Merge pull request #1513 from proddy/dev
fix SK
2023-12-17 09:47:19 +01:00
proddy
8ed867314d fix SK 2023-12-17 09:46:53 +01:00
Proddy
abf4eeb39a Merge pull request #1508 from misa1515/patch-8
Update index.ts
2023-12-17 09:33:00 +01:00
Proddy
40a85634ef Merge pull request #1509 from misa1515/patch-9
Update LayoutAuthMenu.tsx
2023-12-17 09:32:31 +01:00
Proddy
a5c41a1cd8 Merge pull request #1510 from misa1515/patch-10
Update SignIn.tsx
2023-12-17 09:32:07 +01:00
Proddy
c6668e1d6a Merge pull request #1511 from misa1515/patch-11
Update system.cpp
2023-12-17 09:31:38 +01:00
misa1515
5384abc780 Update system.cpp 2023-12-16 22:54:14 +01:00
misa1515
444d5fb7c3 Update SignIn.tsx 2023-12-16 22:50:51 +01:00
misa1515
3b76a020c7 Update LayoutAuthMenu.tsx 2023-12-16 22:49:23 +01:00
misa1515
804187afb9 Update index.ts 2023-12-16 22:44:54 +01:00
Proddy
ef2ed0f4d1 Merge pull request #1507 from proddy/dev
add SK
2023-12-16 22:40:08 +01:00
proddy
68084fc9b5 add SK 2023-12-16 22:36:25 +01:00
MichaelDvP
a684a46404 Merge branch 'dev' into dev2 2023-12-14 07:59:01 +01:00
MichaelDvP
1556bf02ba fix setting dhw comfort #1495 2023-12-14 07:57:48 +01:00
Proddy
b29c36d01d Merge pull request #1500 from MichaelDvP/dev2
Testbild keep up to date with dev
2023-12-13 11:52:18 +01:00
Proddy
68cb94547e Merge pull request #1499 from MichaelDvP/dev
latest entities
2023-12-13 11:51:58 +01:00
MichaelDvP
a0e1894262 Merge branch 'dev' of https://github.com/emsesp/EMS-ESP32 into dev2 2023-12-13 07:24:06 +01:00
MichaelDvP
ee584375c5 Merge branch 'dev' of https://github.com/emsesp/EMS-ESP32 into dev 2023-12-13 07:15:52 +01:00
Proddy
ac288b794f Merge pull request #1493 from proddy/dev
update standalone server to bun and itty-router, add back router paths, add support download button
2023-12-12 22:37:56 +01:00
Proddy
a1f296b2ae upercase Remember 2023-12-12 22:37:48 +01:00
Proddy
9b1e399730 fixes #1494 2023-12-12 22:35:10 +01:00
Proddy
dd6b435417 merge latest change from official repo 2023-12-12 22:34:34 +01:00
Proddy
3d5c08118c package update 2023-12-12 22:34:18 +01:00
MichaelDvP
29a3e79804 Merge branch 'dev' into dev2 2023-12-12 14:41:31 +01:00
MichaelDvP
d78d4aed9d Merge branch 'dev' of https://github.com/proddy/EMS-ESP32 into dev 2023-12-12 14:40:38 +01:00
MichaelDvP
9f34531956 fix dhw comfort mode, #1495 2023-12-12 10:11:52 +01:00
MichaelDvP
d1f3ead8b9 fix mqtt::on_message, #1494 2023-12-12 10:09:02 +01:00
Proddy
a33f17932f support info downloaded as txt 2023-12-11 16:18:11 +01:00
Proddy
eb05b83009 package update 2023-12-11 16:17:57 +01:00
Proddy
367c022e6c updated vscode 2023-12-11 16:17:45 +01:00
MichaelDvP
b9af4325c9 set curBurnPower for 3.party burners, #1483 2023-12-11 10:57:17 +01:00
MichaelDvP
1ae2a624f7 add back lowres dewtemp, #1491 2023-12-11 09:12:23 +01:00
MichaelDvP
d4c9a3c846 Merge branch 'dev' of https://github.com/proddy/EMS-ESP32 into dev 2023-12-11 09:05:58 +01:00
Proddy
0b481a44a1 experiment with path args (for future change) 2023-12-10 14:58:33 +01:00
Proddy
513d0e982e replace express with itty router - its 2x faster 2023-12-10 14:52:15 +01:00
Proddy
2629471a56 package update 2023-12-10 14:51:33 +01:00
Proddy
c1ce4f1b73 tidy up support download - https://github.com/emsesp/EMS-ESP32/discussions/1489 2023-12-10 14:51:20 +01:00
Proddy
faa21abe54 revert back to absolute routing 2023-12-10 14:50:34 +01:00
MichaelDvP
72f4d00cb3 Merge branch 'dev' into dev2 2023-12-09 15:41:03 +01:00
MichaelDvP
c9f5b0a2c1 fix wwCurFlow #1334, fix active state #1483, dev.4 2023-12-09 15:39:10 +01:00
MichaelDvP
8453422c9c Merge branch 'dev' into dev2 2023-12-08 19:15:41 +01:00
MichaelDvP
ed060a400d update packages 2023-12-08 19:15:15 +01:00
MichaelDvP
6c3e5d976c console tx_mode without reboot 2023-12-08 19:15:05 +01:00
MichaelDvP
443050ae28 fix syspress for ems+ 2023-12-08 19:14:29 +01:00
Proddy
d81b833951 Merge pull request #1490 from MichaelDvP/dev2
fix RC300 mode, #1488
2023-12-08 11:53:36 +01:00
MichaelDvP
510602e117 fix RC300 mode, #1488 2023-12-08 11:34:20 +01:00
Proddy
4008883627 Merge pull request #1482 from MichaelDvP/dev2
Testbuild
2023-12-04 20:28:49 +01:00
MichaelDvP
4081a55207 Merge branch 'dev' into dev2 2023-12-04 17:39:29 +01:00
Proddy
c9ca395e6d Merge branch 'emsesp:dev' into dev 2023-12-04 17:39:07 +01:00
Proddy
c3ac215493 Merge pull request #1481 from MichaelDvP/dev
add hpMaxPower #1475
2023-12-04 17:38:54 +01:00
MichaelDvP
10cabd032b update packages, formatting, changelog 2023-12-04 17:27:07 +01:00
MichaelDvP
7b9a04ede1 add hpMaxPower fix #1475 2023-12-04 17:17:23 +01:00
MichaelDvP
1845d5060a add hpMaxPower 2023-12-04 17:11:40 +01:00
Proddy
9375fb4d2d Merge branch 'emsesp:dev' into dev 2023-12-03 21:28:42 +01:00
Proddy
f9b8ac6f30 Merge pull request #1478 from MichaelDvP/dev
fixes for #1474 and #1477
2023-12-03 21:28:23 +01:00
MichaelDvP
ad577eaa2a Merge branch 'dev' into dev2 2023-12-03 18:24:06 +01:00
MichaelDvP
42ba93bdc1 add checkbox for MQTT-TLS, fix #1474 2023-12-03 18:07:30 +01:00
MichaelDvP
fd5f5d49b7 add back boil2hyst, fix #1477 2023-12-03 17:23:02 +01:00
proddy
80f4e63850 adjust help text 2023-12-02 12:26:11 +01:00
Proddy
7efa8ffbe0 Merge pull request #1473 from proddy/dev
roll back dom-router changes
2023-12-02 11:06:46 +01:00
Proddy
85016d6582 Merge branch 'emsesp:dev' into dev 2023-12-02 11:06:06 +01:00
Proddy
06bf2f3427 rollback dom router changes - https://github.com/emsesp/EMS-ESP32/pull/1465 2023-12-02 11:05:17 +01:00
Proddy
c38832ef06 fix warning 2023-12-02 11:04:45 +01:00
Proddy
c1fa5c42c4 Merge pull request #1471 from MichaelDvP/dev
Some new/fixed entities
2023-11-29 20:55:14 +01:00
MichaelDvP
2faa78bc32 version 3.6.5-dev.2, changelog 2023-11-29 13:12:22 +01:00
MichaelDvP
b5633cd579 add texts 2023-11-29 13:02:43 +01:00
MichaelDvP
4275d144ca add boiler pumpmode and HP heat meter 2023-11-29 12:32:42 +01:00
MichaelDvP
7f794f35a6 add thermostat heatdelays, instantstart and boost 2023-11-29 12:32:04 +01:00
MichaelDvP
8d778f902f add heatpump energy meters 2023-11-29 12:31:05 +01:00
MichaelDvP
f83f22a6fb send step as string to avoid js-rounding issue for 0.1 2023-11-29 12:06:56 +01:00
MichaelDvP
03b6ebd861 fix exhaust temperature #1467 2023-11-29 12:05:46 +01:00
MichaelDvP
0d4607a922 send "step" as string 2023-11-29 11:55:27 +01:00
MichaelDvP
067100d375 Merge branch 'dev' of https://github.com/emsesp/EMS-ESP32 into dev2 2023-11-29 07:12:41 +01:00
Proddy
306baee94d Merge pull request #1470 from proddy/dev
HA don't set entity_category to Diagnostic/Configuration for EMS entities
2023-11-28 20:54:20 +01:00
Proddy
cb1989b2ea HA don't set entity_category to Diagnostic/Configuration for EMS entities 2023-11-28 20:52:59 +01:00
Proddy
7ce99cb1fb 3.6.5-dev.1 2023-11-28 20:52:44 +01:00
Proddy
3a36663d94 package update 2023-11-28 20:52:27 +01:00
MichaelDvP
9118cd7c5b init for second exhaustTemp value (test.0c) 2023-11-28 17:54:47 +01:00
MichaelDvP
8b0cf599f4 Merge branch 'dev' of https://github.com/emsesp/EMS-ESP32 into dev2 2023-11-27 07:34:24 +01:00
Proddy
e00eb8e64f 3.6.4 2023-11-26 20:11:36 +01:00
Proddy
ba21293c42 Merge pull request #1465 from proddy/dev
fix router loops
2023-11-26 18:44:35 +01:00
Proddy
8574b44d4e react-router-dom 6.20.0 minimal 2023-11-26 18:44:15 +01:00
Proddy
76901d97d2 fix router 2023-11-26 15:56:46 +01:00
Proddy
1cbfc91912 remove tab from help page 2023-11-26 15:56:30 +01:00
MichaelDvP
7d6bb6b9c8 add meter heating 0x4AF, offset 24 2023-11-26 11:06:28 +01:00
Proddy
c81f579464 Merge pull request #1464 from MichaelDvP/dev
revert to react-router-dom 6.18.0 to bring blue tab line back
2023-11-26 09:58:35 +01:00
MichaelDvP
2a6fedc6b3 hetpump energy meters, sync with HP id 0x08 2023-11-26 09:11:46 +01:00
MichaelDvP
e3a7e9fe33 Merge branch 'dev' into dev2 2023-11-26 09:03:58 +01:00
MichaelDvP
8898ec9419 revert to react-router-dom 6.18.0 to bring blue tab line back 2023-11-26 08:59:32 +01:00
MichaelDvP
548fdd823b version 2023-11-25 15:50:42 +01:00
Proddy
b60127c3ba Merge pull request #1461 from MichaelDvP/dev
revert to react-router-dom 6.19.0 to fix tab-routing-issue
2023-11-25 10:08:17 +01:00
MichaelDvP
095255b9b7 revert to react-router-dom 6.19.0 to fix tab-routing-issue 2023-11-24 13:36:55 +01:00
MichaelDvP
2b486ffa36 revert package update 2023-11-24 13:23:33 +01:00
MichaelDvP
c3f9d9ddd6 Merge branch 'dev2' of https://github.com/MichaelDvP/EMS-ESP32 into dev2 2023-11-24 10:44:44 +01:00
MichaelDvP
740f3b4ef7 Merge branch 'dev' into dev2 2023-11-24 10:28:38 +01:00
MichaelDvP
932a496f47 revert to react-router-dom 6.19.0 to fix tab-routing-issue 2023-11-24 10:15:34 +01:00
Proddy
d36246d4d1 Merge pull request #1458 from proddy/dev
3.6.5-dev.0
2023-11-24 07:41:46 +01:00
Proddy
19094d47aa 3.6.5-dev.0 2023-11-24 07:41:23 +01:00
Proddy
f41bb3671c 3.6.4 2023-11-24 07:36:36 +01:00
Proddy
22c75e6df3 3.6.4 2023-11-24 07:36:29 +01:00
Proddy
24cca67625 Merge pull request #1457 from proddy/dev
update packages
2023-11-24 07:28:52 +01:00
Proddy
41443d4efe update packages 2023-11-24 07:28:29 +01:00
Proddy
6e08356ff7 Merge pull request #1455 from MichaelDvP/dev
fix boiler commands to ems telegrams
2023-11-23 19:07:13 +01:00
MichaelDvP
751410ca58 fix boiler commands to ems telegrams 2023-11-23 18:27:03 +01:00
MichaelDvP
60beeddb66 HIU heating/tapwater-active, always use EMSdevice:: for flags 2023-11-23 17:30:38 +01:00
MichaelDvP
c61c34f10e HIU heating/tapwater-active, always use EMSdevice:: for flags 2023-11-23 17:24:40 +01:00
MichaelDvP
96a04da1ff add settings for #1389 2023-11-23 15:27:38 +01:00
MichaelDvP
bd8472b34e fix settings for EMS boilers 2023-11-23 15:26:00 +01:00
MichaelDvP
09228e4637 update MqttClient 2023-11-23 09:23:04 +01:00
MichaelDvP
40a79c51ce add EMS_DEVICE_FLAG_BC400, sort wwmodes #1452 2023-11-22 19:45:06 +01:00
proddy
5ab10b7aa6 fixes #1450 2023-11-22 09:48:09 +01:00
Proddy
01a15a5c85 Merge pull request #1451 from MichaelDvP/dev
next fix RC300 mode
2023-11-22 08:24:25 +01:00
MichaelDvP
1e15f65b0d get mode for seltemp, fix #1450 2023-11-22 07:50:50 +01:00
MichaelDvP
0818728c25 update packages 2023-11-22 07:50:21 +01:00
MichaelDvP
2edfe0f42c add hpPumpMode #1449 2023-11-22 07:37:40 +01:00
MichaelDvP
a2eb8dfe83 update packages 2023-11-22 07:37:32 +01:00
MichaelDvP
4c60545057 Merge branch 'dev' into dev2 2023-11-22 07:10:31 +01:00
MichaelDvP
d06b3285bd Merge branch 'dev' of https://github.com/emsesp/EMS-ESP32 into dev 2023-11-21 21:58:59 +01:00
MichaelDvP
4dcfe8e0f6 get mode for seltemp, fix #1450 2023-11-21 21:58:10 +01:00
Proddy
ee5fd4d0eb 3.6.3 2023-11-21 14:40:47 +01:00
Proddy
46f35bc67c another patch on 3.6.3 2023-11-21 14:40:32 +01:00
MichaelDvP
42e679d5ba Merge branch 'dev2' of https://github.com/emsesp/EMS-ESP32 into dev 2023-11-21 11:32:31 +01:00
MichaelDvP
4db1c7dfca add boostmode/time #1446 2023-11-21 11:25:25 +01:00
MichaelDvP
64fb84dd54 Merge branch 'dev' into dev2 2023-11-21 11:24:04 +01:00
Proddy
5ad03facce Merge pull request #1445 from proddy/dev
patch for 3.6.3 with fixes #1440 #1442
2023-11-21 10:43:08 +01:00
Proddy
ad3bf294d8 Merge branch 'emsesp:dev' into dev 2023-11-21 10:42:39 +01:00
Proddy
6dba452aea patch for 3.6.3 with fixes #1440 #1442 2023-11-21 10:42:19 +01:00
Proddy
cff5b8c949 Merge pull request #1444 from MichaelDvP/dev
set/read thermostat mode for RC100-RC300, fix #1440 and fix #1442
2023-11-21 10:33:46 +01:00
MichaelDvP
aed45968db set/read thermostat mode for RC100-RC300, fix #1440 2023-11-20 07:47:01 +01:00
Proddy
ec85a7ec24 3.6.3 (refershed) 2023-11-19 21:24:01 +01:00
Proddy
2de855e044 Merge pull request #1439 from proddy/dev
prepare another 3.6.3 build with board profile fixed
2023-11-19 21:19:10 +01:00
Proddy
dfd9fe4d01 add EMSESP_DEFAULT_BOARD_PROFILE to CI builds 2023-11-19 21:18:15 +01:00
Proddy
049f956131 minor cleanup 2023-11-19 21:17:54 +01:00
Proddy
b503e2bb90 package update 2023-11-19 21:17:43 +01:00
Proddy
b300181d33 add hosted target 2023-11-19 21:17:36 +01:00
Proddy
02f2389587 add workflow_dispatch: 2023-11-18 18:51:12 +01:00
Proddy
7f140021aa quick fix - https://github.com/emsesp/EMS-ESP32/pull/1438 2023-11-18 18:47:28 +01:00
Proddy
905b52e39d Merge pull request #1438 from MichaelDvP/dev
fix crash on wrong thermostat mode command (if not using HA)
2023-11-18 14:05:54 +01:00
MichaelDvP
8fcfb3d8f7 fix crash on wrong thermostat mode command (if not using HA) 2023-11-18 13:55:28 +01:00
MichaelDvP
a17a9b71a2 Merge branch 'dev' of https://github.com/emsesp/EMS-ESP32 into dev2 2023-11-18 13:49:53 +01:00
Proddy
64d46fe8f7 Merge pull request #1437 from proddy/dev
update changelog
2023-11-18 13:43:27 +01:00
Proddy
7962af0872 update changelog 2023-11-18 13:42:50 +01:00
Proddy
873b75240c Merge pull request #1436 from proddy/dev
3.6.4-dev-0
2023-11-18 13:38:20 +01:00
Proddy
9e405c5a5a 3.6.4-dev-0 2023-11-18 13:37:55 +01:00
Proddy
6796962c1e 3.6.3 2023-11-18 13:35:20 +01:00
Proddy
df6de21cf4 Merge remote-tracking branch 'origin/dev' 2023-11-18 13:35:04 +01:00
Proddy
e20434da88 Merge pull request #1435 from proddy/dev
prepare for 3.6.3 release
2023-11-18 13:19:27 +01:00
Proddy
9c8677acb9 prepare for 3.6.3 release 2023-11-18 13:19:02 +01:00
Proddy
1c3bc98bbb Merge pull request #1434 from proddy/dev
fix web building with vite 5
2023-11-17 12:11:28 +01:00
Proddy
02616696dc move JS to ES module 2023-11-17 12:09:38 +01:00
Proddy
00d66c1c4e package update 2023-11-17 11:26:30 +01:00
Proddy
8cfc540670 Merge pull request #1432 from proddy/dev
fix building on osx, some package updates again
2023-11-16 22:44:23 +01:00
proddy
a4062f5d84 package update 2023-11-16 22:07:47 +01:00
proddy
edee463ade replace unstable_useBlocker 2023-11-16 22:07:42 +01:00
proddy
64471e4c0e dev.10 2023-11-16 22:07:00 +01:00
proddy
28a7ceb6aa fix build on osx - see https://docs.platformio.org/en/latest/projectconf/sections/env/options/build/build_flags.html#stringification 2023-11-16 22:06:43 +01:00
MichaelDvP
0a10e78bfd Merge branch 'dev' of https://github.com/emsesp/EMS-ESP32 into dev2 2023-11-16 09:14:25 +01:00
Proddy
e4a899912c Merge pull request #1430 from proddy/dev
fix for export_values and new command_allvalues()
2023-11-16 07:41:26 +01:00
proddy
cc9819b56b fix lint compile warnings 2023-11-15 21:40:49 +01:00
proddy
29f86c9ab9 make standalone work 2023-11-15 21:40:38 +01:00
proddy
722ca34a18 rollback and fix https://github.com/emsesp/EMS-ESP32/pull/1426 2023-11-15 21:40:23 +01:00
MichaelDvP
50777bd681 temporary fix for values/info command 2023-11-15 19:11:59 +01:00
Proddy
2f5558c311 Merge pull request #1429 from proddy/dev2
in sync with dev
2023-11-15 18:23:19 +01:00
Proddy
21c3fe5d8e in sync with dev 2023-11-15 18:22:12 +01:00
MichaelDvP
acb453bd4b fix water: retValve and circ time control 2023-11-15 18:13:43 +01:00
Proddy
bc39b738e2 auto formatting 2023-11-15 17:56:23 +01:00
Proddy
1ada18ec9a 3.6.3-dev.9 2023-11-15 17:56:15 +01:00
Proddy
6b9dadc0d9 Merge pull request #1428 from MichaelDvP/dev2x
latest changes
2023-11-15 12:08:18 +01:00
MichaelDvP
cf89a06437 do not remove fetches 2023-11-15 11:48:18 +01:00
MichaelDvP
4a1ea99ee7 Merge branch 'dev' of https://github.com/emsesp/EMS-ESP32 into dev2x 2023-11-15 11:31:58 +01:00
MichaelDvP
3dbf8a0fd1 fix crash on wrong input for switchtime 2023-11-15 11:31:51 +01:00
MichaelDvP
9c6b9a5359 Merge branch 'dev' of https://github.com/emsesp/EMS-ESP32 into dev2 2023-11-15 11:27:19 +01:00
MichaelDvP
0d07a9e50c add some water entities 2023-11-15 11:26:45 +01:00
Proddy
7b5a37a85d Merge pull request #1426 from proddy/dev
fix bug when traversing ems devices when using cmd allvalues
2023-11-15 09:50:40 +01:00
Proddy
0b5a7b9f2a fix bug when traversing ems devices when using cmd allvalues 2023-11-14 22:24:32 +01:00
Proddy
0f99415bbf add comments 2023-11-14 22:24:09 +01:00
Proddy
c9775c1edd Merge pull request #1425 from proddy/dev
only send command and value to backend write service
2023-11-14 21:41:59 +01:00
Proddy
1f1b571e91 update packages 2023-11-14 18:51:35 +01:00
Proddy
21e28e970c only send command and value to backend write service 2023-11-14 18:51:20 +01:00
MichaelDvP
f9e1940c7b fix crash on entering wrong day for switchtime 2023-11-14 18:11:32 +01:00
MichaelDvP
72c0625823 Merge branch 'dev2x' into dev2 2023-11-14 10:57:43 +01:00
MichaelDvP
4f1ef297c7 thermostat RC300 mode 2023-11-14 10:53:27 +01:00
MichaelDvP
3b30083e7c fix extension module 2023-11-14 10:52:39 +01:00
MichaelDvP
50590f4924 console api_data 2023-11-14 10:52:23 +01:00
MichaelDvP
fae876d7d2 Merge branch 'dev2' of https://github.com/emsesp/EMS-ESP32 into dev2x 2023-11-14 10:12:11 +01:00
MichaelDvP
c1dabddf21 Merge branch 'dev' of https://github.com/emsesp/EMS-ESP32 into dev2x 2023-11-14 10:12:02 +01:00
MichaelDvP
6926f6fd0b Merge branch 'dev2' of https://github.com/emsesp/EMS-ESP32 into dev2 2023-11-14 10:07:19 +01:00
MichaelDvP
e30c476e5c Merge branch 'dev' of https://github.com/emsesp/EMS-ESP32 into dev2 2023-11-13 19:52:50 +01:00
MichaelDvP
509122bf4b fix RC300 wwdisinfectTime 2023-11-13 19:29:03 +01:00
MichaelDvP
84fab951ba fix RC300 summertemp, mode 2023-11-13 18:01:14 +01:00
Proddy
a8ea6ef4a8 Merge pull request #1422 from ellepdesk/options-invert-pullup
Add options to invert RX and TX and to enable pullup on RX
2023-11-13 17:02:31 +01:00
Proddy
196e98b3bd Merge pull request #1418 from proddy/dev
show UOM in console when 'show values'. And added a new system command called 'values' which dumps the same to JSON
2023-11-13 17:00:33 +01:00
Proddy
a0f1f51cca rename system values -> allvalues 2023-11-13 16:58:32 +01:00
Proddy
d717b72a9e have its own show_values function 2023-11-13 16:58:20 +01:00
Proddy
eccece7207 minor code optimization 2023-11-13 16:57:35 +01:00
Proddy
499ff0d31e include (HS1) for standalone testing 2023-11-13 16:57:20 +01:00
Proddy
ae0599d13d optionally render with UOM attached 2023-11-13 16:56:48 +01:00
Proddy
1a9cf4ebdc added more space for longer names 2023-11-13 16:56:25 +01:00
Proddy
386082b747 update for vscode 2023-11-13 16:55:52 +01:00
Proddy
fc02721815 package update 2023-11-13 16:55:10 +01:00
Pelle van der Heide
529970fb19 remove option for RX_PULLUP, this is enabled by default in esp-idf 2023-11-13 14:30:42 +01:00
MichaelDvP
752ce333ec RC300/BC400 mode setting 2023-11-13 14:04:55 +01:00
MichaelDvP
f34be2a884 test for fixing #1420 2023-11-13 13:59:30 +01:00
MichaelDvP
bed1650350 Merge branch 'dev2x' into dev2 2023-11-13 13:57:05 +01:00
MichaelDvP
1f8a477939 RC300/BC400 mode setting 2023-11-13 13:54:13 +01:00
MichaelDvP
8e844550bf sort HIU entities 2023-11-13 13:53:35 +01:00
Pelle van der Heide
dfd2a017c2 Add options to invert RX and TX and to enable pullup on RX
These option can be individually enabled at compile time by the
following defines:

EMSUART_RX_INVERT
EMSUART_TX_INVERT
EMSUART_RX_PULLUP
2023-11-13 12:00:56 +01:00
Proddy
c40a11504c Merge pull request #1417 from MichaelDvP/dev2x
uptime, inputs, output EA0, HIU entities
2023-11-12 16:05:52 +01:00
Proddy
fd81299da1 3.6.3-dev.8 2023-11-12 16:00:52 +01:00
Proddy
9993a7c739 fix UOM not showing in console - and added new command 'system values' 2023-11-12 15:59:29 +01:00
Proddy
ea38011085 add text to remind people about su command 2023-11-12 15:59:02 +01:00
Proddy
2079b7e602 formatting 2023-11-12 15:58:35 +01:00
Proddy
101159b9f6 add sensors to generic test 2023-11-12 15:58:22 +01:00
Proddy
1442568790 uppercase ems 2023-11-12 15:58:06 +01:00
MichaelDvP
6699d9ad80 Merge branch 'dev2x' into dev2 2023-11-12 14:32:03 +01:00
MichaelDvP
1b27fae844 fix tag of hpEA0 2023-11-12 14:31:42 +01:00
MichaelDvP
253eb72dbf Merge branch 'dev2x' into dev2 2023-11-12 13:55:14 +01:00
MichaelDvP
4b6b89f1a0 add uptimetotal, #1416 2023-11-12 13:46:33 +01:00
MichaelDvP
fe772f85bf Merge branch 'dev2x' into dev2 2023-11-12 11:42:18 +01:00
MichaelDvP
a2422e1f6a add hpEA0, heatnigpump for all boilers/hps/hiu, remove input-state 2023-11-12 11:41:49 +01:00
Proddy
8ba40003e4 Merge pull request #1411 from proddy/dev
fix HA warnings - add a device name - #1393
2023-11-11 18:02:46 +01:00
Proddy
ac0fb52ce9 fix HA warnings - add a device name - #1393 2023-11-11 18:01:52 +01:00
Proddy
031c97a162 3.6.3-dev.7 2023-11-11 18:01:19 +01:00
Proddy
f7d3939c72 update packages 2023-11-11 18:01:09 +01:00
Proddy
20f32db8bc Merge pull request #1409 from MichaelDvP/dev2x
fix `retTemp`, #1334
2023-11-11 14:43:35 +01:00
MichaelDvP
0e55caf721 Merge branch 'dev2x' into dev2 2023-11-11 14:36:04 +01:00
MichaelDvP
4d5f8cc96a fix retTemp, #1334 2023-11-11 14:34:35 +01:00
MichaelDvP
434ef2b333 Merge branch 'dev2x' into dev2 2023-11-11 14:33:19 +01:00
MichaelDvP
e0ab208c52 fix retTemp, #1334 2023-11-11 14:10:49 +01:00
MichaelDvP
5b1f3d266e Merge branch 'dev2' of https://github.com/emsesp/EMS-ESP32 into dev2 2023-11-11 13:52:22 +01:00
MichaelDvP
4c83f5fe60 sort water entities 2023-11-11 13:47:32 +01:00
Proddy
981d62dc2c Merge pull request #1384 from WiktorBuczko/patch-1
Update and fix translation
2023-11-11 10:56:53 +01:00
Proddy
ffcf0bf2d7 Merge pull request #1408 from proddy/dev
update gh actions
2023-11-11 10:18:18 +01:00
Proddy
7997544fb8 update gh actions 2023-11-11 10:17:48 +01:00
Proddy
7e1f16c865 Merge pull request #1407 from proddy/dev
remove set command (with no args)
2023-11-11 09:43:14 +01:00
proddy
765e6bcd69 remove set command (with no args) 2023-11-11 09:41:50 +01:00
Proddy
81b654cc41 Merge pull request #1405 from proddy/dev2
fix standalone compiling
2023-11-10 11:55:26 +01:00
Proddy
3fc36b5e50 fix standalone compiling 2023-11-10 11:54:41 +01:00
Proddy
52077cbd07 Merge pull request #1402 from proddy/dev2
package sync with dev
2023-11-09 23:47:11 +01:00
proddy
a45f1badba package update 2023-11-09 23:41:45 +01:00
proddy
f38f4bc85a package sync with dev 2023-11-09 23:38:57 +01:00
Proddy
8c03592157 Merge pull request #1400 from MichaelDvP/dev2x
Small change from my Dev2
2023-11-09 23:30:36 +01:00
Proddy
e7254bc7f4 Merge pull request #1395 from proddy/dev
fix MQTT base with paths not working in HA [#1393]
2023-11-09 23:29:43 +01:00
MichaelDvP
5d0242b47c sync & cleanup 2023-11-08 15:27:17 +01:00
MichaelDvP
5997dd1491 fix double publish scheduler 2023-11-08 15:05:40 +01:00
MichaelDvP
31a5216ae8 Merge branch 'dev' of https://github.com/emsesp/EMS-ESP32 into dev2x 2023-11-08 15:02:20 +01:00
MichaelDvP
5c0c0675a2 boiler: sort entities, remove hpactivity-states, add 4-way-valve, input-states, eco+ 2023-11-08 14:53:56 +01:00
MichaelDvP
ba9f16da00 publish schedule 2023-11-08 14:51:37 +01:00
MichaelDvP
110ee59cd1 temperaturesensor -> F_(temperaturesensor), analog/temperature mqtt-base() 2023-11-08 14:51:07 +01:00
MichaelDvP
555bf8cb2f pl entity translations 2023-11-08 14:50:09 +01:00
MichaelDvP
5f1dddf7e4 enlarge uart-tx-queue, warn overflow 2023-11-08 14:49:45 +01:00
MichaelDvP
2f658a9a14 add boiler wwSelTempEcoplus 2023-11-08 14:18:28 +01:00
MichaelDvP
c3f487eced update packages 2023-11-07 12:49:46 +01:00
MichaelDvP
a8a12dd1f8 check second servicecode-char for nonascii 0xF0. 2023-11-07 11:44:37 +01:00
MichaelDvP
7f7e3c47ec Merge branch 'dev' of https://github.com/proddy/EMS-ESP32 into dev2 2023-11-07 07:20:08 +01:00
MichaelDvP
eafeb5c5d2 Merge branch 'dev2' of https://github.com/proddy/EMS-ESP32 into dev2 2023-11-07 07:15:43 +01:00
MichaelDvP
caca8bf802 fix 4-way-valve enum 2023-11-07 07:10:49 +01:00
MichaelDvP
338091578b wwEcoPlus, rename some water entities 2023-11-07 07:06:05 +01:00
Proddy
bf5b40ccf4 fix MQTT base with paths not working in HA [#1393] 2023-11-06 21:51:05 +01:00
Proddy
58cbfbc0df update packages 2023-11-06 21:50:49 +01:00
Proddy
06f5e1226f Merge pull request #1391 from proddy/dev2
sync with latest dev
2023-11-05 17:15:20 +01:00
Proddy
af57af46b0 Merge pull request #1390 from proddy/dev
update changelog and bump version
2023-11-05 17:13:33 +01:00
Proddy
3f91377751 added notes on MQTT changes 2023-11-05 17:12:43 +01:00
Proddy
c4c9ed739f 3.6.3-dev.6 2023-11-05 17:12:35 +01:00
Proddy
2a8d3b8cd6 package update 2023-11-05 17:12:21 +01:00
Proddy
af1292caa0 update with notes from dev branch 2023-11-05 17:10:47 +01:00
Proddy
44afa1a30f auto formatting 2023-11-05 17:09:36 +01:00
Proddy
fa184a8f94 sync latest MQTT changes from dev 2023-11-05 17:09:26 +01:00
Proddy
387c2eebcd package update 2023-11-05 17:09:10 +01:00
Proddy
cd6a0da9f0 change version to 3.6.3-test.6 so not mistaken with dev builds 2023-11-05 17:09:00 +01:00
MichaelDvP
188bfa4525 add hp 4-way valve 2023-11-05 15:57:02 +01:00
MichaelDvP
037a9848bc version 3.6.3-dev.6c 2023-11-05 14:24:39 +01:00
MichaelDvP
b6543169de boiler add input states, remove redundant activity states 2023-11-05 14:23:40 +01:00
MichaelDvP
14b3b058fe remove unused water values temp_2, temp_6 2023-11-05 14:22:37 +01:00
MichaelDvP
fa4763309d merge pl translations 2023-11-05 14:21:56 +01:00
MichaelDvP
adcc59642c cleanup publishing 2023-11-05 14:20:13 +01:00
MichaelDvP
d18fd4948c update packages 2023-11-05 14:19:46 +01:00
Wiktor
c10ecb097e Update and fix translation 2023-11-04 19:16:08 +01:00
MichaelDvP
4e4258f9dc enlarge tx queue to 100 2023-11-04 18:56:49 +01:00
MichaelDvP
ab6cf78822 warning in log on tx-queue overflow 2023-11-04 18:17:33 +01:00
MichaelDvP
d105c18bf7 fix typos, double entities, publish time water 2023-11-04 17:00:33 +01:00
MichaelDvP
6bbf4e4778 Merge branch 'dev2' of https://github.com/emsesp/EMS-ESP32 into dev2 2023-11-04 15:25:50 +01:00
MichaelDvP
3101f5e6ae move dhw entities from mixer/solar to new water device, add pool device 2023-11-04 15:24:43 +01:00
Proddy
207953e8d1 Merge pull request #1383 from proddy/dev
no commands for nrgheat & nrgww - #1382
2023-11-04 14:11:13 +01:00
Proddy
a449ebd0ea improvements to #1382 2023-11-04 13:13:52 +01:00
Proddy
2afe50fc9e Merge pull request #1381 from MichaelDvP/dev2
Dev2: relais, fix exhausttemp, fix RC20 remote
2023-11-04 11:53:46 +01:00
Proddy
cd564f0c54 no commands for nrgheat & nrgww - #1382 2023-11-04 11:46:42 +01:00
Proddy
8eba09fea6 package update 2023-11-04 11:46:16 +01:00
MichaelDvP
6c17d61baf set energy entities to HA-category diagnostic (metioned on discord) 2023-11-03 20:00:16 +01:00
MichaelDvP
6df1f2850f analog: store only if needed 2023-11-03 16:08:45 +01:00
MichaelDvP
288d9b70b7 fix relais command 2023-11-03 14:43:23 +01:00
MichaelDvP
8307b0920c digital_out, settings #1375, dev.5b 2023-11-02 19:14:10 +01:00
MichaelDvP
1097b519ae do not overwrite mqtt-json items 2023-11-02 07:34:57 +01:00
MichaelDvP
e7b7002883 check RC20 master/remote thermostat, #1378 2023-11-02 07:34:18 +01:00
MichaelDvP
c934b9e8d9 fix gh build 2023-11-01 19:37:18 +01:00
MichaelDvP
0838d06ec4 Test for fixing #1378 2023-11-01 18:20:32 +01:00
MichaelDvP
41666458d9 merge mqttClinet PR 115 from BertMelis 2023-11-01 18:18:56 +01:00
MichaelDvP
b02207a0d7 set EMSESP_DEFAULT_BOARD_PROFILE nd store to NVS 2023-11-01 18:17:05 +01:00
MichaelDvP
faafd51e40 add optional exhausttemp from telegram E5 2023-11-01 18:16:21 +01:00
MichaelDvP
94cf81c164 Merge branch 'dev2' of https://github.com/emsesp/EMS-ESP32 into dev2 2023-11-01 17:24:18 +01:00
MichaelDvP
1cd97cf1ee E32V2 button to 34, publish alert module 2023-11-01 17:23:45 +01:00
Proddy
6f097e4613 Merge pull request #1377 from proddy/dev
small updates
2023-10-31 22:09:04 +01:00
Proddy
90af88f36d Merge pull request #1376 from proddy/dev2
Dev2
2023-10-31 22:07:48 +01:00
proddy
862cc2545b group order of board profiles 2023-10-31 22:07:12 +01:00
proddy
74c6e54dc5 uppercase Value 2023-10-31 22:07:01 +01:00
proddy
33ac89e202 uppercase Value 2023-10-31 21:58:19 +01:00
proddy
89d591500c support HA writable text fields 2023-10-31 21:58:07 +01:00
proddy
9bf56b2e6d package update 2023-10-31 21:57:38 +01:00
proddy
7c3dac3da7 order board profiles in menu 2023-10-31 21:57:28 +01:00
Proddy
6853651c8b Merge pull request #1374 from proddy/dev2
Dev2
2023-10-31 18:09:45 +01:00
Proddy
16a9bc4fae package updates 2023-10-31 18:08:49 +01:00
Proddy
70d4bcf097 support String entities in Home Assistant #1373 2023-10-31 18:08:43 +01:00
Proddy
1991ca4128 Merge pull request #1372 from proddy/dev
shower duration in sec
2023-10-31 12:34:18 +01:00
Proddy
879df338e3 Merge pull request #1371 from proddy/dev2
small things
2023-10-31 12:33:53 +01:00
Proddy
29c1169b33 shower duration in sec 2023-10-31 12:32:57 +01:00
Proddy
362b6a1394 GNU++11 and not GNU++17 2023-10-31 12:32:12 +01:00
Proddy
f5f5901ad9 package update 2023-10-31 12:31:48 +01:00
Proddy
757bf58992 show duration in sec 2023-10-31 12:31:35 +01:00
Proddy
af8e77029e Merge pull request #1369 from MichaelDvP/dev2
Testbuild
2023-10-30 16:43:33 +01:00
Proddy
94519179df Merge pull request #1368 from proddy/dev
use DEBUG logging for commands with json output - #1364
2023-10-30 13:10:58 +01:00
Proddy
527dd870a2 change shower log message if using NTP 2023-10-30 13:10:03 +01:00
Proddy
b9e57414ce #1364 2023-10-30 13:01:43 +01:00
Proddy
e3a644182e switch back to C++11 2023-10-30 13:00:31 +01:00
MichaelDvP
caadb506d8 Merge branch 'dev' of https://github.com/emsesp/EMS-ESP32 into dev2 2023-10-29 17:57:10 +01:00
MichaelDvP
597f0b147d logging commands 2023-10-29 17:10:54 +01:00
MichaelDvP
0b9a2483b2 add HIU entities #1334, fix hp nrgheat/ww offsets #1349 2023-10-29 17:10:26 +01:00
Proddy
6a221e84cc Merge pull request #1365 from proddy/dev
3.6.3-dev.5
2023-10-29 13:44:42 +01:00
Proddy
7ea7a4b25a Merge branch 'emsesp:dev' into dev 2023-10-29 13:44:17 +01:00
Proddy
c494627867 package updates 2023-10-29 13:43:54 +01:00
Proddy
5032c37f63 added 3.6.3-dev.5 2023-10-29 13:43:45 +01:00
Proddy
f5cd92d567 added comments 2023-10-29 13:43:33 +01:00
Proddy
240b7dad32 API commands logged at log level INFO - #1364 2023-10-29 13:43:24 +01:00
MichaelDvP
2bac805ebf update packages 2023-10-27 17:19:08 +02:00
MichaelDvP
b1a3d6ea20 update alert module 2023-10-27 15:58:12 +02:00
MichaelDvP
77cfad9ff0 Merge branch 'dev' of https://github.com/emsesp/EMS-ESP32 into dev2 2023-10-27 13:04:11 +02:00
MichaelDvP
2dc1bd71ee changelog, dev.4g 2023-10-27 10:29:46 +02:00
MichaelDvP
fcdc4314e3 Wifi AP start after 10 sec, stay if not connected 2023-10-27 10:28:59 +02:00
MichaelDvP
900112a967 update packages 2023-10-27 10:27:22 +02:00
MichaelDvP
114a8af467 mqtt publish extension module 2023-10-27 10:27:08 +02:00
MichaelDvP
e2c2a12a2b Extension outPower UOM percent 2023-10-27 10:26:47 +02:00
Proddy
222f853616 Merge pull request #1362 from proddy/dev
messing with yarn again (bored)
2023-10-26 12:17:15 -07:00
proddy
450f5a465c messing with yarn again (bored) 2023-10-26 21:16:32 +02:00
MichaelDvP
ba106eecc0 AsyncTCP settings per DEFINE, prio 5 2023-10-26 16:54:05 +02:00
MichaelDvP
374bd7c5c2 extension module instead of pumpp module 2023-10-26 15:08:24 +02:00
MichaelDvP
31b2005320 Remove Wifi-all-channel-scan, it induces connect issues. dev.4f 2023-10-26 14:58:37 +02:00
MichaelDvP
8ae5570c70 NTP do not configure disconnect if already disconnected 2023-10-26 14:55:47 +02:00
MichaelDvP
96fe9aeb31 dont queue mqtt if not connected, dev.4e 2023-10-25 17:45:40 +02:00
MichaelDvP
4a7d69c797 add energy and meters #1359, #1350 2023-10-25 17:43:35 +02:00
MichaelDvP
7dca77450c Merge branch 'dev' of https://github.com/emsesp/EMS-ESP32 into dev2 2023-10-25 17:23:34 +02:00
Proddy
9bb157bbe6 yarn 4.0 2023-10-25 15:31:29 +02:00
Proddy
6c7787b2ae Merge pull request #1358 from owenvoke/feature/tls-typo
chore: fix typos of TLS
2023-10-25 06:22:16 -07:00
Owen Voke
ec5b5ef79d chore: fix typos of TLS 2023-10-25 11:19:15 +01:00
MichaelDvP
6abd56c7e2 update packages, add psram, dev.4d 2023-10-24 22:11:32 +02:00
MichaelDvP
1fdeaf8b24 Merge branch 'dev' of https://github.com/emsesp/EMS-ESP32 into dev2 2023-10-24 21:56:09 +02:00
MichaelDvP
ad51870d2c no wifi disconnect until reboot on ssid cleared 2023-10-24 21:54:57 +02:00
Proddy
8929e15e00 Merge pull request #1356 from proddy/dev
show options and range in export - #1342
2023-10-23 07:12:04 -07:00
Proddy
3f31e636ec show options and range in export - #1342 2023-10-23 16:10:08 +02:00
MichaelDvP
5e7e1c30ca show writable in web export, dev.4c 2023-10-23 14:53:43 +02:00
MichaelDvP
5cf0d8d204 board_profile name in NVS after autodetect 2023-10-23 14:53:12 +02:00
MichaelDvP
dbbd475934 do not set forceheatingoff if not in settings 2023-10-23 14:46:39 +02:00
MichaelDvP
bf9877b528 Merge branch 'dev' of https://github.com/emsesp/EMS-ESP32 into dev2 2023-10-22 18:25:40 +02:00
MichaelDvP
5e6b0f64bd add E32V2 board profile, fix autodetect and GPIOs 2023-10-22 17:40:38 +02:00
MichaelDvP
509d213536 add TA4/TW1, fix decimal, add EM100 values, update 2023-10-22 17:39:53 +02:00
Proddy
4c789a656b Merge pull request #1355 from proddy/dev
minor changes
2023-10-22 07:54:24 -07:00
Proddy
2f6edfd505 typo 2023-10-22 16:53:33 +02:00
Proddy
9c2d861b93 rename scan devices to just one scan command, and add more devices 2023-10-22 16:48:13 +02:00
Proddy
2c0d4fdcef suppress MQTT warnings on standalone 2023-10-22 16:47:52 +02:00
Proddy
be93627ec0 Merge pull request #1353 from proddy/dev
minor changes plus Michael's updated AsyncTCP library
2023-10-22 03:43:15 -07:00
Proddy
c6c7754735 added WSW196i to UI800 description 2023-10-22 12:41:39 +02:00
Proddy
07bdf28350 added Michael's AsyncTCP fixes for testing 2023-10-22 12:41:16 +02:00
Proddy
fd49f0372a add DIV10 for WS170 - #1334 2023-10-22 12:40:55 +02:00
Proddy
36ca7e09ca Merge pull request #1352 from proddy/dev
quick link from device entities to custom entities page (the list icon)
2023-10-21 07:15:47 -07:00
Proddy
7a36c5e8cb quick link from device entities to custom entities page (the list icon) 2023-10-21 16:14:25 +02:00
Proddy
15b97515bb replace useNavigate hook with redirect 2023-10-21 16:14:02 +02:00
Proddy
4048f58856 package update 2023-10-21 16:13:42 +02:00
Proddy
b0ea3184a4 fix custom entities endpoint 2023-10-21 16:13:31 +02:00
MichaelDvP
6ab2cc60e7 AsyncTCP reduce stack, include some PRs 2023-10-20 18:54:52 +02:00
MichaelDvP
237d631e2c remove double WiFi.disconnect 2023-10-20 17:08:38 +02:00
MichaelDvP
0ed46679e2 Merge branch 'dev' of https://github.com/emsesp/EMS-ESP32 into dev2 2023-10-20 16:51:45 +02:00
Proddy
1fded64f2e Merge pull request #1343 from proddy/dev
show entity count in device list, remove type
2023-10-20 07:42:02 -07:00
MichaelDvP
161f782904 fix flodding bus with forceHeatingOff messages, dev3b 2023-10-20 14:39:38 +02:00
MichaelDvP
3fe9296139 EM100 to Alert, add first telegrams 2023-10-20 14:32:30 +02:00
Proddy
9698e787b2 remove dialog from upload as C++ code does restart immediately 2023-10-19 21:37:46 +02:00
Proddy
eb274a94c3 move system info to download page, add a restart warning on upload 2023-10-18 23:15:42 +02:00
Proddy
18be921c1b package update 2023-10-18 23:15:13 +02:00
Proddy
fddfa47b51 layout changes 2023-10-18 15:40:55 +02:00
MichaelDvP
c533e91643 heatburnpower does not count similar with wwburnpow, #1335 2023-10-18 11:22:53 +02:00
MichaelDvP
de2792ffdd add back esp32-s3 SSL for mqtt 2023-10-18 10:34:21 +02:00
MichaelDvP
97de23f521 add WLW176i to boilers 2023-10-18 07:56:08 +02:00
MichaelDvP
c212520f4f remove double dhw texts 2023-10-18 07:55:48 +02:00
MichaelDvP
dc739b97ab forceHeatingOff in E5 check telegram length 2023-10-18 07:55:19 +02:00
MichaelDvP
2583da8714 platform asdev, revert mqtt client changes, uart-isr to flash to save ram 2023-10-18 07:54:36 +02:00
MichaelDvP
ddfc9f9dd0 mqtt use main task again 2023-10-18 07:12:44 +02:00
MichaelDvP
7d855326d0 Merge branch 'dev' of https://github.com/emsesp/EMS-ESP32 into dev2 2023-10-18 07:11:11 +02:00
Proddy
a1bb49359f show entity count in device list, remove type 2023-10-17 22:55:47 +02:00
Proddy
f9a176e09c Merge pull request #1341 from proddy/dev
fixes from previous checkin
2023-10-17 12:21:19 -07:00
Proddy
24d5ac7656 default test is general 2023-10-17 21:20:43 +02:00
Proddy
558fa20283 remove left over debug comments 2023-10-17 21:20:08 +02:00
Proddy
c42ead995e fix rollup mangle that prevented table clicks 2023-10-17 21:18:23 +02:00
Proddy
8584901229 Merge pull request #1340 from proddy/dev
add missing 'yarn webUI'
2023-10-17 11:29:14 -07:00
Proddy
a17f8db035 add missing 'yarn webUI' 2023-10-17 17:58:56 +02:00
Proddy
6783d5b3e8 fix typo in package 2023-10-17 16:57:56 +02:00
Proddy
9223a00270 Merge pull request #1339 from proddy/dev
update web building
2023-10-17 07:19:21 -07:00
Proddy
c150c578a6 update web building 2023-10-17 16:06:32 +02:00
proddy
5be1482c20 tidy up package builds 2023-10-17 13:35:25 +02:00
Proddy
20e301594c Update github-releases-to-discord.yml 2023-10-16 15:01:30 +02:00
Proddy
f90f4279d7 Create github-releases-to-discord.yml 2023-10-16 14:58:08 +02:00
Proddy
9962f16d62 Merge pull request #1336 from proddy/dev
fixed helper text in entity dialog for numeric values
2023-10-16 04:16:32 -07:00
proddy
cb10663735 updated 2023-10-16 13:15:30 +02:00
proddy
2ab247131f added WS170 - #1334 2023-10-16 13:13:13 +02:00
proddy
c0a3d03a09 fix formatting for ranges not showing 2023-10-16 12:17:00 +02:00
proddy
baa180cc79 added comments 2023-10-16 12:16:37 +02:00
proddy
dbc59b7c8c remove < and > from template texts 2023-10-16 12:16:25 +02:00
proddy
c4d1058133 add rootCA for testing 2023-10-16 12:16:04 +02:00
proddy
3a8495ca54 lowercase Optional 2023-10-16 12:15:42 +02:00
proddy
dad62613f6 update packages 2023-10-16 12:12:08 +02:00
Proddy
9641adce1c Merge pull request #1333 from proddy/dev
added timestamp to shower_data, add HA's ent_cat discovery to all sensors
2023-10-15 10:33:05 -07:00
Proddy
67693364cc Add entity category to HA Discovery topics - #1323 2023-10-15 17:03:59 +02:00
Proddy
d37a5c5713 bump 3.6.3-dev.2 2023-10-15 17:03:32 +02:00
Proddy
a881431010 auto formatting 2023-10-15 17:03:18 +02:00
Proddy
2866862730 add timestamp - #1329 2023-10-15 17:03:10 +02:00
Proddy
c234e70a87 use previous tasmota platform 2023-10-15 17:02:50 +02:00
Proddy
61296896bd update packages, use latest yarn 2023-10-15 17:02:37 +02:00
MichaelDvP
2acb45db47 send_info_mqtt called from main, not from ntp task 2023-10-15 14:55:42 +02:00
MichaelDvP
abe0d793d6 test mqtt with own task, dev.2i 2023-10-15 12:56:36 +02:00
MichaelDvP
654403ca3d shower time with timezone 2023-10-15 12:53:43 +02:00
MichaelDvP
b111e4762a remove SSL from S3 build 2023-10-15 10:25:32 +02:00
MichaelDvP
8bd796b772 add CS6800i boiler 2023-10-15 10:23:20 +02:00
MichaelDvP
84b6611ffd set ci builds without extends, S3 use arduino 2.0.13 2023-10-15 10:01:13 +02:00
MichaelDvP
58b3f309bd changelog, dev.2h 2023-10-14 18:31:53 +02:00
MichaelDvP
0bd4330881 shower time 2023-10-14 18:31:39 +02:00
MichaelDvP
68feb0fa30 exhausttemp only from E4/31, fetch 0x14 again 2023-10-14 18:31:24 +02:00
MichaelDvP
b4e266f128 mqtt secure only for S3 (avoid conflict with tasmota platform esp32) 2023-10-14 18:31:06 +02:00
MichaelDvP
855794dbe8 no command for remoteseltemp 2023-10-13 16:05:42 +02:00
MichaelDvP
2a38981c67 add some limits, ignore zero for exhausttemp, syspress, rettemp, errormessage check 2023-10-13 12:29:32 +02:00
MichaelDvP
63b4a62fac update packages 2023-10-13 12:25:58 +02:00
MichaelDvP
710fd1bc79 add control setting for RC300 2023-10-12 09:15:42 +02:00
MichaelDvP
f5ab7510b4 disable remote dew if temp or humidity are missing, v3.6.3-dev.2d 2023-10-11 10:36:59 +02:00
MichaelDvP
ecd37223e8 update packages 2023-10-11 10:35:07 +02:00
MichaelDvP
99992db9ac check more states for wifi reconnect 2023-10-10 13:24:59 +02:00
MichaelDvP
3ecea985ad check length for roomctrl response, dev.2c 2023-10-10 09:49:07 +02:00
MichaelDvP
ae1b6fc67b Weblog json dynamic 2023-10-10 09:48:11 +02:00
MichaelDvP
020bb628d6 no mqtt disconnect on GOT_IP if already connected 2023-10-10 09:47:27 +02:00
MichaelDvP
22a4338e7a fix buffer 2023-10-09 16:39:26 +02:00
MichaelDvP
1f089ec6f9 log commands as debug 2023-10-09 11:31:16 +02:00
MichaelDvP
0f78d4f34d fix remote humidity and calc dewpoint, dev.2b 2023-10-08 19:31:41 +02:00
Proddy
8395983106 Merge pull request #1319 from MichaelDvP/dev
add forceheatingoff #1262 and header/heatblock #1317
2023-10-08 12:19:22 +01:00
MichaelDvP
87ce1a6d9b add remotetemp to RC3xx 2023-10-08 12:06:06 +02:00
MichaelDvP
ac4eba5b72 add forceheatingoff 2023-10-07 15:19:04 +02:00
MichaelDvP
5e53689a81 add temperatures for low loss header and heatblock, add names BC400/GB192i, #1317 2023-10-05 18:00:06 +02:00
MichaelDvP
895eddd8d2 update packages 2023-10-05 17:50:49 +02:00
Proddy
a8c7b2bca4 Merge pull request #1318 from proddy/dev
fix shower duration
2023-10-03 22:08:55 +01:00
proddy
6f46382806 fix shower duration 2023-10-03 22:06:44 +01:00
proddy
b8af3e235f update packages 2023-10-03 22:06:34 +01:00
proddy
531c2e7b5d 3.6.3-dev.1 2023-10-03 22:06:23 +01:00
Proddy
f76e6b56b1 Merge pull request #1316 from MichaelDvP/dev
arduino 2.0.13 and 3.0.0 ready
2023-10-03 21:35:47 +01:00
MichaelDvP
c388b31b22 standalone compile 2023-10-03 16:13:36 +02:00
MichaelDvP
cbb6fa9fec update changelog 2023-10-03 15:34:00 +02:00
MichaelDvP
a3300e94a7 compiles for 2.0.13/idf4.4.6 and 3.0.0/idf5.1 (see pio_local.example) 2023-10-03 15:28:27 +02:00
MichaelDvP
3c8a00be09 merge and update changes from jason2866, tasmota platform 2.0.13 2023-10-03 15:26:34 +02:00
MichaelDvP
36ae55e543 update packages 2023-10-03 14:04:13 +02:00
MichaelDvP
8b5d893977 RC100H RF thermostat 2023-10-03 14:04:01 +02:00
MichaelDvP
bd851f9005 use nvs partition label 2023-10-03 10:59:27 +02:00
MichaelDvP
208be85304 lan only supported by esp32 2023-10-03 10:58:44 +02:00
MichaelDvP
9dd613394c add humidity to ventialtion 2023-10-03 10:57:41 +02:00
MichaelDvP
62eeca944b make NTP arduino3 ready 2023-10-03 10:57:20 +02:00
MichaelDvP
17d7487423 use arduino neopixel instead of adafruit lib 2023-10-03 10:54:17 +02:00
MichaelDvP
ae589c745b use onewire from tasmota, arduino3 ready 2023-10-03 10:53:04 +02:00
Proddy
4b41180785 Merge pull request #1312 from proddy/dev
preparing for 3.6.3
2023-10-01 17:50:27 +02:00
Proddy
7748f67b9a preparing for 3.6.3 2023-10-01 17:50:09 +02:00
Proddy
df9f75a5c9 updated yarn for 3.6.2 2023-10-01 17:42:54 +02:00
Proddy
7bd8710eb6 3.6.2 2023-10-01 17:40:09 +02:00
Proddy
32f2c6d341 Merge remote-tracking branch 'origin/dev' 2023-10-01 17:40:02 +02:00
Proddy
20d8b6400f Merge pull request #1311 from proddy/dev
minor changes
2023-10-01 17:32:50 +02:00
Proddy
d3b086a675 added more API tests 2023-10-01 17:32:16 +02:00
Proddy
e1ee83b907 update with 3.6.2 2023-10-01 17:31:43 +02:00
Proddy
763a2eaab1 bump version 2023-10-01 17:31:31 +02:00
Proddy
5d78f1c814 Reset command renamed to reset 2023-10-01 17:31:24 +02:00
Proddy
3f99806ddd sending dash/- to reset command doesn't error 2023-10-01 17:31:11 +02:00
Proddy
bc0a90ee41 update packages 2023-10-01 17:30:54 +02:00
Proddy
3900b8fc94 log API call 2023-10-01 17:30:47 +02:00
Proddy
f9a53cf320 Merge pull request #1309 from MichaelDvP/dev
Some small corrections
2023-09-29 11:18:24 +02:00
MichaelDvP
99467558b4 check each single nvs values before writing it 2023-09-29 10:21:20 +02:00
MichaelDvP
2e25e46f6f temperaturesensor commands only if enabled (gpio != 0) 2023-09-29 10:20:17 +02:00
MichaelDvP
3a1b7cae67 avoid possible div-zero 2023-09-29 10:19:34 +02:00
Proddy
5bc3bd23e2 Merge pull request #1306 from proddy/dev
small changes
2023-09-25 09:15:44 +02:00
Proddy
a04f4d784b fix standalone build and make - ignore warning when comparing signed/unsigned ints 2023-09-25 09:15:10 +02:00
Proddy
9c423dc886 remove comment 2023-09-25 09:14:40 +02:00
Proddy
1b0f840d18 update script 2023-09-25 09:14:29 +02:00
Proddy
21eaf70181 package update 2023-09-25 09:14:21 +02:00
Proddy
14f2cd4bee package update 2023-09-25 09:14:04 +02:00
Proddy
917e268ac9 add TODO on possible memory out-of-bounds error 2023-09-23 18:41:54 +02:00
Proddy
41228e894a lint warning work-around 2023-09-23 18:41:37 +02:00
Proddy
365c95991b revert default test to general 2023-09-23 18:41:11 +02:00
Proddy
ba4ebe221c make compile standalone on linux 2023-09-23 18:40:58 +02:00
Proddy
3ab5946e38 package updates 2023-09-23 18:40:37 +02:00
Proddy
f427288c06 minor changes to sonar checks 2023-09-23 18:40:29 +02:00
Proddy
398cbadb64 Merge pull request #1304 from MichaelDvP/dev
burner settings use min/max from telegram 4, fix max for values < 0
2023-09-21 20:31:06 +02:00
MichaelDvP
38a1c9e9d7 Merge branch 'emsesp:dev' into dev 2023-09-21 18:56:42 +02:00
MichaelDvP
5abfdf1177 burner settings use min/max from telegram 4, fix max for values < 0 2023-09-21 16:56:45 +02:00
Proddy
385d2377db Merge pull request #1303 from proddy/dev
disabled entity values shown in white text in web
2023-09-20 23:10:41 +02:00
proddy
6655035561 autoformatting 2023-09-20 23:09:29 +02:00
proddy
755408e6aa standalone build works 2023-09-20 23:09:21 +02:00
proddy
df70ed0062 remove comments 2023-09-20 23:09:10 +02:00
proddy
b893290b62 disabled entity values shown in white text 2023-09-20 23:09:02 +02:00
Proddy
96ff5ed123 Merge pull request #1302 from MichaelDvP/dev2
network connection and powerentities
2023-09-20 20:08:22 +02:00
MichaelDvP
dcdd8d9e44 cleanup, adapt comments, packages 2023-09-20 17:56:39 +02:00
MichaelDvP
5c484d58dc allow empty response in webAPI 2023-09-20 16:03:05 +02:00
MichaelDvP
96bf1a32ee v3.6.2-dev.2, changelog 2023-09-20 12:30:09 +02:00
MichaelDvP
ad81f84c02 tag more boiler dhw values 2023-09-20 12:25:49 +02:00
MichaelDvP
529b46d776 update packages needs changed svg handling 2023-09-20 12:18:32 +02:00
MichaelDvP
bbc5bc8585 sync mqtt client with origin 2023-09-20 12:17:24 +02:00
MichaelDvP
9c33b5cb8b limit mqtt queue to 300 2023-09-20 12:16:36 +02:00
MichaelDvP
ba7ceca798 Network, reconnect without waiting 2023-09-20 12:16:15 +02:00
MichaelDvP
4824152ae5 empty json instead of "no entries" 2023-09-19 19:46:46 +02:00
Proddy
af935d8124 Merge pull request #1298 from proddy/dev
some refactoring and change #1297
2023-09-19 16:47:30 +02:00
MichaelDvP
951e706fee add custom to "show devices" 2023-09-19 16:17:21 +02:00
MichaelDvP
9f1002df9a remove channel from networkSettings 2023-09-19 15:19:45 +02:00
MichaelDvP
6ab2135cea show commands always include internal devices. 2023-09-19 14:40:59 +02:00
MichaelDvP
e6bcdede73 Merge branch 'dev' of https://github.com/proddy/EMS-ESP32 into dev 2023-09-19 14:31:25 +02:00
MichaelDvP
8b136ddefe "no entries" is valid command execution 2023-09-19 14:22:38 +02:00
Proddy
ca9ac86fde package updates 2023-09-19 07:52:12 +02:00
MichaelDvP
42a4c792ad dont queue publish on change if not connected, keep flag 2023-09-18 16:24:24 +02:00
MichaelDvP
a6b0c74f5f add message "no entries" to analog/temperature/custom/sccheduler 2023-09-18 16:21:58 +02:00
MichaelDvP
09e2945c15 add BSSID and Channel to network settings, full_scan 2023-09-18 12:29:01 +02:00
Proddy
a3f05cb08b /api/custom show {} if no Custom Entities configured instead of an error #1297 2023-09-17 14:27:33 +02:00
Proddy
0ab573225d fix typos 2023-09-17 14:27:15 +02:00
Proddy
4c8fd45908 add test for custom entities 2023-09-17 14:27:04 +02:00
Proddy
8bb703fafe package update 2023-09-17 14:26:53 +02:00
Proddy
9cdeb7c07a refactor custom vs customizations 2023-09-17 14:26:24 +02:00
MichaelDvP
8d4b43e9f6 Merge branch 'dev' of https://github.com/emsesp/EMS-ESP32 into dev2 2023-09-17 09:35:44 +02:00
MichaelDvP
d8c298f6fe network init 2023-09-17 09:27:08 +02:00
MichaelDvP
8a16566f53 translations 2023-09-17 09:22:57 +02:00
MichaelDvP
9d3456cb3a show scheduler/custom always 2023-09-17 09:22:25 +02:00
MichaelDvP
7310db6426 update packages 2023-09-17 09:21:47 +02:00
Proddy
ac08bb6037 add +x to execute scripts 2023-09-16 09:40:09 +02:00
Proddy
776f72650f update dump_entities.csv 2023-09-16 09:39:57 +02:00
Proddy
0eb96e764c Merge pull request #1296 from proddy/dev
3.6.2-dev-0
2023-09-16 09:27:09 +02:00
Proddy
ec939dfc2e rename 3.6.2-dev-0 2023-09-16 09:26:36 +02:00
Proddy
809b6be79c update packages 2023-09-16 09:26:14 +02:00
Proddy
34f87a0a21 Merge pull request #1292 from proddy/dev
use espressif core 2.0.12 via Tasmota for 4MB build
2023-09-10 13:18:46 +02:00
Proddy
bc4418755e use espressif core 2.0.12 via Tasmota for 4MB build 2023-09-10 13:18:12 +02:00
Proddy
d24742facd package update 2023-09-10 13:17:53 +02:00
MichaelDvP
9c16e2008e revert 'topic' to 't' 2023-09-09 18:11:58 +02:00
MichaelDvP
6a7a9636ac set esp32s2, esp32c3 to tasmota platform 2023-09-09 16:49:42 +02:00
MichaelDvP
5e76bfa210 Merge branch 'dev' of https://github.com/emsesp/EMS-ESP32 into dev2 2023-09-09 16:46:53 +02:00
Proddy
4da45a7240 Merge pull request #1291 from proddy/dev
preparing 3.7.0
2023-09-09 15:02:12 +02:00
Proddy
3c84a1ced1 preparing 3.7.0 2023-09-09 15:00:09 +02:00
Proddy
86919c1684 Merge branch 'origin/dev' 2023-09-09 14:12:07 +02:00
Proddy
677f6c5a6e Merge pull request #1290 from proddy/dev
#1280 sample value is a string for enums
2023-09-09 13:43:09 +02:00
Proddy
3ce67b8e6e Merge branch 'dev' of https://github.com/proddy/EMS-ESP32 into dev 2023-09-09 13:42:29 +02:00
Proddy
aad9c12a7e fixes MQTT enum index option leads to error in HA #1280 2023-09-09 13:42:28 +02:00
Proddy
877d60f46f Merge pull request #1289 from MichaelDvP/dev
Fixes from testbuild
2023-09-09 12:32:57 +02:00
MichaelDvP
bf02b0ad1c Merge branch 'dev' of https://github.com/emsesp/EMS-ESP32 into dev 2023-09-09 12:29:01 +02:00
MichaelDvP
2f5b7cd0aa add back process dest, fixes #1275 2023-09-09 12:25:18 +02:00
MichaelDvP
4bec32ea56 HA register all values from custom and scheduler 2023-09-09 12:11:30 +02:00
Proddy
33ea1c6863 Merge pull request #1288 from proddy/dev
fix for MQTT enum index option leads to error in HA #1280
2023-09-09 10:26:25 +02:00
Proddy
09ff892b91 fix for MQTT enum index option leads to error in HA #1280 2023-09-09 10:25:14 +02:00
Proddy
f462afb547 update pacakges 2023-09-09 10:25:05 +02:00
Proddy
83211e0ef8 Merge pull request #1286 from MichaelDvP/dev
show color wifi-quality in network selector
2023-09-08 15:26:05 +02:00
MichaelDvP
b7b3cb177f show wifi-quality in network selector 2023-09-08 10:35:39 +02:00
MichaelDvP
10c8c2b4a7 Merge branch 'dev' of https://github.com/emsesp/EMS-ESP32 into dev2 2023-09-08 10:31:34 +02:00
MichaelDvP
c19345c345 color wifiicon in selector 2023-09-08 10:29:24 +02:00
Proddy
04fd04b2ab Merge pull request #1285 from proddy/dev
mqtt fix
2023-09-08 09:26:50 +02:00
Proddy
6e3c2b2ec9 update example for debug 2023-09-08 08:34:19 +02:00
Proddy
98e29516b0 fix mqtt enum in discovery #1280 2023-09-08 08:30:51 +02:00
Proddy
6db5058e3d updated to 3.6.1-dev.2 2023-09-08 08:30:24 +02:00
Proddy
b3ada4a01f 3.6.1-dev.2 2023-09-08 08:30:17 +02:00
Proddy
f38e0abf73 package updates 2023-09-08 08:30:05 +02:00
MichaelDvP
6376ed2361 platform: esp32 use tasmota w/o tsl, S3 use development 2023-09-06 13:18:49 +02:00
MichaelDvP
04e43d5d41 nomPower is always editable 2023-09-06 12:46:38 +02:00
MichaelDvP
0ba5d8e2bd update packages 2023-09-06 12:25:31 +02:00
MichaelDvP
95b8e79624 use tasmota modified platform, v3.6.1-dev.1a 2023-09-06 12:05:26 +02:00
MichaelDvP
e9c3f8c6da Merge branch 'dev' of https://github.com/emsesp/EMS-ESP32 into dev2 2023-09-06 12:04:39 +02:00
Proddy
27aa72eda1 Merge pull request #1284 from MichaelDvP/dev
fix for espressif@6.4.0
2023-09-06 10:59:49 +02:00
MichaelDvP
01f6024776 color network antenna icon for wifi quality 2023-09-06 10:33:58 +02:00
MichaelDvP
aa5730c683 stay on platform 6.3.2 for esp32 until heap issue is solved 2023-09-06 09:20:31 +02:00
MichaelDvP
fcc2a48192 Update to espressif32@6.4.0, v3.6.1-dev.1 2023-09-06 08:05:45 +02:00
MichaelDvP
1c4da53e75 publish energy in api/mqtt with 2 digits 2023-09-05 11:37:26 +02:00
MichaelDvP
09a15727c7 change ha-mqtt tto topic 2023-09-04 19:01:52 +02:00
MichaelDvP
f1034f4230 energy values as HA sensors with classes, v3.6.1-dev0e 2023-09-04 16:37:58 +02:00
MichaelDvP
06e9b8d303 round energy values to full kWh 2023-09-04 13:17:21 +02:00
MichaelDvP
b912779ef9 fix max for ULONG values, save counters every hour, 3.6.1-dev0c 2023-09-04 12:21:53 +02:00
MichaelDvP
ced63a6eb0 v3.6.1-dev0b, changelog 2023-09-03 17:54:39 +02:00
MichaelDvP
a5f5d36871 analogsensor counter store to nvs 2023-09-03 17:54:08 +02:00
MichaelDvP
bd92345793 boiler energy counter, stored in nvs 2023-09-03 17:53:48 +02:00
MichaelDvP
4c1b66279d update packages 2023-09-03 17:25:30 +02:00
MichaelDvP
fcf16eec4f HA register all entities for Custom and Scheduler 2023-09-03 17:25:14 +02:00
MichaelDvP
508f18c29b Merge branch 'dev' of https://github.com/emsesp/EMS-ESP32 into dev2 2023-09-03 16:07:30 +02:00
MichaelDvP
b165e1c20c fix read int from webpage 2023-09-03 16:07:21 +02:00
Proddy
9ebcfe38bc Merge pull request #1279 from proddy/dev
add missing translations and show value type in table
2023-09-02 13:41:58 +02:00
Proddy
57a585741d addd missing translations and show value type in table 2023-09-02 13:40:33 +02:00
MichaelDvP
6173e94cc0 add back process dest, fixes #1275, v3.6.1-dev0a 2023-09-02 12:29:26 +02:00
Proddy
243aec37fd Merge pull request #1277 from proddy/dev
minor changes
2023-09-02 11:14:30 +02:00
Proddy
fb44e020fc fix standalone build 2023-09-02 11:12:52 +02:00
Proddy
81842e544b auto formatting with clang 2023-09-02 11:10:32 +02:00
Proddy
6babdab8de change 3.7.0 to 3.6.1 as we need a critical patch soon 2023-09-02 11:10:16 +02:00
Proddy
93d50bbee1 update for 3.6.1 2023-09-02 11:09:55 +02:00
Proddy
e6f0ecce62 show green/red circles if active 2023-09-02 11:00:00 +02:00
Proddy
aba597aa6a searches both custom name and shortname, show writable 2023-09-02 10:54:13 +02:00
Proddy
7444fdceff package update 2023-09-02 10:53:31 +02:00
Proddy
f60197e9bf Merge pull request #1273 from MichaelDvP/dev
update Mqtt Client
2023-08-31 12:12:08 +02:00
MichaelDvP
4778206e3a changelog 2023-08-31 12:09:17 +02:00
MichaelDvP
005463c41f update espMqttClient 2023-08-31 11:50:31 +02:00
MichaelDvP
ae1bf1cbfb merge mqtt changes from bertmelis, dev2 2023-08-31 09:47:07 +02:00
MichaelDvP
bde06621bd add log message for mqtt low memory 2023-08-31 08:29:08 +02:00
MichaelDvP
647acf6a68 show rssi in networkstatus 2023-08-31 08:19:24 +02:00
MichaelDvP
120c0b5ca2 update espMqttClient, add own mqtt limit, fix queue display, 3.7.0-dev1d 2023-08-31 08:09:54 +02:00
MichaelDvP
7e45c89fcd add missing subscribes 2023-08-31 08:07:06 +02:00
MichaelDvP
b7611c67bb Merge branch 'dev' of https://github.com/emsesp/EMS-ESP32 into dev 2023-08-31 07:51:36 +02:00
Proddy
d6ae55218f Merge pull request #1272 from proddy/dev 2023-08-30 22:35:49 +02:00
MichaelDvP
d17582d697 mqtt check 60k free heap (not maxalloc), dev1c 2023-08-30 13:39:19 +02:00
MichaelDvP
c3227a6352 mqtt:min alloc to 45k, fix memcheck for PSRAM, dev1b 2023-08-30 12:38:29 +02:00
MichaelDvP
d0c368f6a0 dont allow not_connected_publish, fix mqtt success/fail counters, v3.7.0-dev1a 2023-08-30 12:19:55 +02:00
Proddy
9aa9cc46e9 bump version 3.7.0-dev1 2023-08-29 22:34:09 +02:00
Proddy
4ee045b84e formatting and adding a t command in debug/standalone 2023-08-29 22:33:50 +02:00
Proddy
2fe18c14c7 text changes and formatting 2023-08-29 22:33:26 +02:00
Proddy
f46b002c5a API call for shower coldshot - #1267 2023-08-29 22:32:36 +02:00
Proddy
65ea11b48b formatting only 2023-08-29 22:31:35 +02:00
Proddy
b2113add02 update API tests from VSC 2023-08-29 22:31:18 +02:00
Proddy
152e6ce1b9 don't spell check C files 2023-08-29 22:31:05 +02:00
Proddy
78a5166e48 update packages 2023-08-29 22:30:48 +02:00
MichaelDvP
f6a4da0584 mqtt free mem to 40k, v3.7.0-dev1 2023-08-29 12:40:10 +02:00
MichaelDvP
1818057c4c update packages 2023-08-29 12:39:14 +02:00
Proddy
9c946b9808 Merge branch 'dev' of https://github.com/proddy/EMS-ESP32 into dev 2023-08-20 16:55:15 +02:00
Proddy
c703106058 update packages 2023-08-20 16:55:14 +02:00
Proddy
1bc70f09c5 remove polling 2023-08-20 16:55:05 +02:00
Proddy
d049572239 Merge pull request #1266 from proddy/dev
update web packages
2023-08-19 10:07:50 +02:00
Proddy
0feaed8869 update web packages 2023-08-19 10:07:14 +02:00
Proddy
7496f482ab remove zipfs 2023-08-19 10:07:07 +02:00
Proddy
f6faad7255 Merge pull request #1263 from proddy/dev
build s3
2023-08-15 18:54:36 +02:00
Proddy
757757fa3f package update 2023-08-15 18:51:04 +02:00
Proddy
1fd3c11e12 build s3 2023-08-15 18:50:58 +02:00
Proddy
86e29515e7 build s3 2023-08-15 18:44:24 +02:00
Proddy
b1f2273bb5 Merge pull request #1261 from proddy/dev
prepare for 3.7.0
2023-08-13 14:40:29 +02:00
Proddy
e9cf3f5ab5 prepare for 3.7.0 2023-08-13 14:40:03 +02:00
Proddy
46eb4185d7 update with 3.6.0 2023-08-13 14:37:13 +02:00
Proddy
8da6761a48 Merge branch 'dev' 2023-08-13 14:32:41 +02:00
Proddy
f6c34ee2c9 Merge pull request #1258 from proddy/dev
minor updates
2023-08-11 21:19:31 +02:00
Proddy
b500076f32 bump version to v18 with Michael's upgrade fix 2023-08-11 21:19:00 +02:00
Proddy
e87ea67435 update packages 2023-08-11 21:18:23 +02:00
Proddy
86c965b94d move prettier - so "yarn run format" works 2023-08-11 21:18:16 +02:00
Proddy
faec42ac71 Merge pull request #1257 from MichaelDvP/dev 2023-08-11 20:43:49 +02:00
MichaelDvP
86737fb38a also Network 2023-08-11 19:33:06 +02:00
MichaelDvP
c8e64668e9 fix upload settings file #1256 2023-08-11 19:14:52 +02:00
MichaelDvP
89b7eaac1c fix MM10 pump command 2023-08-11 19:14:23 +02:00
Proddy
ac889d921f Merge pull request #1254 from MichaelDvP/dev
nl translations from BBQKees
2023-08-10 21:05:12 +02:00
MichaelDvP
a652a3a0c3 nl translations 2023-08-10 16:18:09 +02:00
Proddy
0f88b7cfbc Merge pull request #1253 from proddy/dev
update sonar scanner
2023-08-09 13:51:43 +02:00
Proddy
8bb2157cd9 update sonar scanner 2023-08-09 13:51:13 +02:00
Proddy
b96cede131 Merge pull request #1252 from proddy/dev
rename EMS-ESP Status to System Status so HA doesn't complain (fixes #1243)
2023-08-09 09:16:20 +02:00
Proddy
b2590fc9e0 Merge branch 'emsesp:dev' into dev 2023-08-09 09:15:15 +02:00
Proddy
8dfff29389 fixes #1243 2023-08-09 09:03:52 +02:00
Proddy
0ab081c135 package update 2023-08-09 09:03:44 +02:00
Proddy
7a3aca1220 Merge pull request #1251 from MichaelDvP/dev
Fix HM200 compressor speed
2023-08-08 17:09:56 +02:00
MichaelDvP
1360a5d35b Merge branch 'dev' of https://github.com/emsesp/EMS-ESP32 into dev 2023-08-08 16:28:13 +02:00
Proddy
9226e5b303 Merge pull request #1250 from proddy/dev
small changes
2023-08-08 15:53:52 +02:00
Proddy
4e4cc93092 Merge branch 'emsesp:dev' into dev 2023-08-08 15:49:24 +02:00
Proddy
faa3479f0a make progmem work again 2023-08-08 15:49:08 +02:00
Proddy
0924f441cb update packages 2023-08-08 15:48:54 +02:00
Proddy
f39deefbb4 add vscode extensions 2023-08-08 15:48:45 +02:00
MichaelDvP
461f1bb102 Merge branch 'dev' of https://github.com/proddy/EMS-ESP32 into dev 2023-08-08 12:28:54 +02:00
MichaelDvP
1d1aaef291 add back progmem generation 2023-08-08 12:06:24 +02:00
Proddy
3c51e80408 remove translation for Heatbeat 2023-08-08 10:36:14 +02:00
Proddy
ff68d23642 add style to Dialog boxes 2023-08-08 10:35:55 +02:00
Proddy
643b42469e hardcode colours 2023-08-08 10:34:45 +02:00
Proddy
a996d00f70 remove aria labels 2023-08-08 10:34:10 +02:00
MichaelDvP
6ccab21791 fix HM200 compressor speed, #1247 2023-08-08 09:07:09 +02:00
Proddy
b5b965e339 fix typo 2023-08-08 09:02:21 +02:00
Proddy
2b54db255e update prettier for windows 2023-08-08 09:02:14 +02:00
Proddy
45fc13f7a0 Merge pull request #1249 from proddy/dev
hardcode links to release notes
2023-08-08 07:59:04 +02:00
Proddy
94407e5192 Merge branch 'emsesp:dev' into dev 2023-08-08 07:58:13 +02:00
proddy
7e791e56ce hardcode links to release notes 2023-08-08 07:57:51 +02:00
Proddy
2698116c63 Merge pull request #1245 from proddy/dev
Enhance version check to differentiate between ESP32 and ESP32-S3 bin versions #1240
2023-08-08 07:51:20 +02:00
proddy
e17f709fe1 increase size of username/password fields 2023-08-08 07:50:03 +02:00
proddy
c4ec535a82 update packages 2023-08-08 07:49:50 +02:00
proddy
7efc7616f8 fix platform to espressif32@6.3.2 2023-08-08 07:49:37 +02:00
Proddy
9468248995 fix ci_s3 2023-08-06 22:57:29 +02:00
Proddy
a72cbe9c0c bump version 2023-08-06 22:57:25 +02:00
Proddy
171df2c5b7 hardcode "platform = espressif32@6.3.1" for all targets 2023-08-06 18:48:28 +02:00
proddy
ca2bb4ba6f language menu in login page 2023-08-06 18:33:01 +02:00
proddy
9b92bfa81c Enhance version check to differentiate between ESP32 and ESP32-S3 bin versions #1240 2023-08-04 16:42:37 +02:00
proddy
0cc14215e6 dev.15 2023-08-01 22:02:53 +02:00
proddy
2e1e294baf update packages 2023-08-01 22:02:30 +02:00
proddy
6cee81aeb0 README.md: Fix link to supported devices #1239 2023-08-01 21:54:33 +02:00
Proddy
6e653eea7e Merge pull request #1237 from MichaelDvP/dev
more tr translations #1076
2023-07-31 14:53:15 +02:00
MichaelDvP
f788be691f more tr translations 2023-07-31 08:17:27 +02:00
Proddy
c167aa90bc Merge pull request #1236 from proddy/dev
merge dev2
2023-07-30 22:38:25 +02:00
proddy
657056d774 bump version 2023-07-30 22:32:43 +02:00
proddy
1d979cc894 Merge remote-tracking branch 'origin/dev2' into dev 2023-07-30 22:26:15 +02:00
Proddy
dda2d6316d Merge pull request #1235 from MichaelDvP/dev2
tr translation (part), response api
2023-07-30 14:54:27 +02:00
MichaelDvP
cac7ddd6bb log_trace for response 2023-07-30 08:29:01 +02:00
MichaelDvP
f677616b22 notice telegram log only for read, not for response 2023-07-29 17:11:11 +02:00
MichaelDvP
26daf548ff update packages 2023-07-29 16:51:05 +02:00
MichaelDvP
d92974dd88 read all telegram parts in one poll 2023-07-29 16:40:39 +02:00
MichaelDvP
52de833b19 response error messages 2023-07-29 16:39:37 +02:00
MichaelDvP
bb39e8bd4c update tr translation 2023-07-29 11:43:38 +02:00
Proddy
4295b2d114 Merge pull request #1234 from MichaelDvP/dev2
add cooling state, make mqtt on_message more clear
2023-07-24 21:11:07 +01:00
MichaelDvP
01060574ab mqtt on_message: make char * conversion more clear 2023-07-24 19:56:07 +02:00
MichaelDvP
2e829b560d thermostat cooling state 2023-07-24 19:03:44 +02:00
MichaelDvP
a2f0cafc5c update packages 2023-07-24 19:02:16 +02:00
Proddy
6a675736eb Merge pull request #1232 from proddy/dev2
upgrade arduinojson 6.21.3 and other minor formatting
2023-07-24 08:37:58 +01:00
proddy
c8466df61d exclude arduinojson with Todo Tree 2023-07-24 08:31:49 +01:00
proddy
ded26feeb6 upgrade arduinojson 6.21.3 2023-07-24 08:16:37 +01:00
proddy
b2482b092c bump version 2023-07-24 08:16:08 +01:00
proddy
67397dc345 auto format 2023-07-24 08:15:56 +01:00
Proddy
4a11147467 Merge pull request #1231 from MichaelDvP/dev2
fix mqtt `on_message`
2023-07-24 08:03:39 +01:00
MichaelDvP
962131592f fix mqtt on_message 2023-07-23 13:51:40 +02:00
Proddy
168a31d331 Merge pull request #1230 from proddy/dev2
Dev2
2023-07-21 23:49:12 +02:00
proddy
00f08951db mention preact 2023-07-21 22:48:17 +01:00
proddy
96d7069e8d make standalone compile 2023-07-21 22:44:27 +01:00
proddy
a4ddacb29c package update 2023-07-21 22:44:16 +01:00
proddy
93bbf2570e terser package update 2023-07-21 22:44:08 +01:00
Proddy
ba409b808d Merge pull request #1229 from MichaelDvP/dev2
api/response, Gateway S3, small fixes
2023-07-21 23:33:47 +02:00
MichaelDvP
207d92be64 scheduler value info 2023-07-21 21:18:51 +02:00
MichaelDvP
e3c775d0dd Add BBQKees Gateway S3, update changelog 2023-07-21 12:02:13 +02:00
MichaelDvP
2bd7e04d18 update packages 2023-07-21 10:31:39 +02:00
MichaelDvP
8b58282bde Merge branch 'dev2' of https://github.com/emsesp/EMS-ESP32 into dev2 2023-07-21 09:16:51 +02:00
Proddy
ad6be2d5ef Merge pull request #1227 from proddy/dev2
standalone compiling and some formatting
2023-07-19 07:25:19 +02:00
MichaelDvP
c47414dad5 response show combined telegram 2023-07-17 09:53:40 +02:00
proddy
d84a555171 make standalone compile on osx 2023-07-15 12:42:54 +02:00
MichaelDvP
7a5f13bcad respond all telegram parts if request length >= 32 2023-07-15 12:27:48 +02:00
Proddy
1b6e3b89b6 formatting 2023-07-15 11:40:35 +02:00
Proddy
ed694f4ec5 formatting 2023-07-15 11:36:18 +02:00
Proddy
b659218d13 use original formatting 2023-07-15 11:34:57 +02:00
Proddy
cbecebd80a formatting 2023-07-15 11:34:46 +02:00
Proddy
7bb6427ec9 updated comments 2023-07-15 11:34:38 +02:00
Proddy
37724814be changes to compile standalone 2023-07-15 11:33:38 +02:00
Proddy
98dd25c5bb make EMS-ESP compile standalone on osx/darwin and linux 2023-07-15 11:00:04 +02:00
proddy
ccd69c2c3a compile on mac osx 2023-07-15 10:24:43 +02:00
MichaelDvP
6d0bd099e1 Merge branch 'dev2' of https://github.com/emsesp/EMS-ESP32 into dev2 2023-07-14 19:15:28 +02:00
MichaelDvP
660a715893 4M asym partitions for usb flash 2023-07-14 19:11:59 +02:00
Proddy
981cdaecf1 Merge pull request #1226 from proddy/dev2
dev2 - minor changes
2023-07-14 17:25:37 +02:00
Proddy
18e4c3aa88 fix odd spelling mistakes 2023-07-14 16:45:58 +02:00
Proddy
116c51443e dev.13d 2023-07-14 16:45:52 +02:00
Proddy
66799d0c6c update packages 2023-07-14 16:45:38 +02:00
Proddy
9ad9bc5536 default esp32_4M 2023-07-14 16:45:27 +02:00
Proddy
d1ebf378dc update example 2023-07-14 16:45:14 +02:00
Proddy
4730389668 remove log line 2023-07-14 16:45:01 +02:00
Proddy
7881abaca2 run make from vsc 2023-07-14 12:12:53 +02:00
Proddy
f3d3a386ee get standadlone working with espMqttClient 2023-07-14 12:11:48 +02:00
Proddy
1b623014c1 added log message 2023-07-14 12:11:22 +02:00
Proddy
af3ed871af text change 2023-07-14 12:10:29 +02:00
Proddy
2a9be94f6e package cleanup 2023-07-14 12:10:19 +02:00
MichaelDvP
08a5437210 packages, custom entiie small fixes 2023-07-14 08:52:06 +02:00
Proddy
9ff8d01e93 make standalone compile 2023-07-13 21:50:34 +02:00
Proddy
0afda87092 update packages 2023-07-13 21:50:26 +02:00
MichaelDvP
18d32de483 fix custom entity value info 2023-07-13 18:23:04 +02:00
MichaelDvP
d9ad835fbc Merge branch 'dev2' of https://github.com/emsesp/EMS-ESP32 into dev2 2023-07-13 12:42:30 +02:00
MichaelDvP
afad1d7b95 small updates 2023-07-13 12:42:07 +02:00
Proddy
e2f5124db9 Merge branch 'dev' of https://github.com/proddy/EMS-ESP32 into dev 2023-07-13 12:13:42 +02:00
Proddy
875507d7a9 Merge pull request #1225 from proddy/dev2
replace react with preact #1224
2023-07-13 12:10:48 +02:00
MichaelDvP
17b4964b01 test response and custom entity raw, #1212 2023-07-13 11:09:42 +02:00
Proddy
5af1f932bd Merge branch 'emsesp:dev2' into dev2 2023-07-13 08:28:22 +02:00
MichaelDvP
25ff2bd150 Merge branch 'dev2' of https://github.com/proddy/EMS-ESP32 into dev2 2023-07-12 19:17:16 +02:00
Proddy
3654003577 replace react with preact #1224 2023-07-12 13:26:47 +02:00
Proddy
ac96ea5308 Merge pull request #1223 from proddy/dev2
update changelog & version
2023-07-12 08:22:54 +02:00
Proddy
dde270a84c package update 2023-07-12 08:22:08 +02:00
Proddy
52c3153123 update changelog 2023-07-12 08:22:03 +02:00
Proddy
8557fec581 Merge pull request #1222 from MichaelDvP/dev2
MqttSecure, see #1178
2023-07-12 08:02:23 +02:00
MichaelDvP
b8e36eb13b Merge branch 'dev2' of https://github.com/emsesp/EMS-ESP32 into dev2 2023-07-12 07:11:10 +02:00
Proddy
39624dcfcc Merge pull request #1219 from proddy/dev2
Add endpoint to read firmware capabilities #1218
2023-07-11 21:33:08 +02:00
Proddy
156d5a02d3 update text - bea0922ee8 2023-07-11 21:30:50 +02:00
Proddy
eb7ed0c524 don't render until we have a GET value 2023-07-11 21:28:19 +02:00
Proddy
0415ade906 show version on signin 2023-07-11 21:14:19 +02:00
Proddy
bf6c522918 remove features 2023-07-11 21:14:05 +02:00
Proddy
5f8f13e1a5 update lint & packages 2023-07-11 21:13:52 +02:00
Proddy
d92cd4ea2c Add endpoint to read firmware capabilities #1218 2023-07-11 13:28:29 +02:00
MichaelDvP
2c19b9369a Change MqttClient without restart, use secureClient for port >8800 2023-07-11 11:35:54 +02:00
MichaelDvP
78403adeb4 mqtt tls only for esp32-S3, certificate input strips header/footer/CR/LF 2023-07-11 07:50:13 +02:00
MichaelDvP
5374127d56 show WPA3 in networkselector 2023-07-11 07:08:30 +02:00
MichaelDvP
87f28e7804 adapt limits #1215, #1190 2023-07-11 07:07:45 +02:00
MichaelDvP
1e8adfb34f activate setInsecure to make tsl work 2023-07-10 15:22:33 +02:00
MichaelDvP
d3175e3d64 update packages 2023-07-10 12:44:27 +02:00
MichaelDvP
1b832b541a Merge branch 'dev' of https://github.com/emsesp/EMS-ESP32 into dev2 2023-07-10 12:38:56 +02:00
MichaelDvP
29557d764a Merge branch 'dev2' of https://github.com/emsesp/EMS-ESP32 into dev2 2023-07-10 12:38:29 +02:00
MichaelDvP
ae46f40fce fix secure mqtt 2023-07-10 12:36:59 +02:00
Proddy
362d837baa Merge pull request #1211 from proddy/dev2
report on invalid extension - fixes #1210
2023-07-10 08:36:57 +02:00
MichaelDvP
2db7174068 fix cutting output of large numbers #1213 2023-07-10 07:57:24 +02:00
Proddy
1360ffaec0 remove bogus import 2023-07-09 20:08:03 +02:00
Proddy
91e0a29494 autoscroll in system log 2023-07-09 18:07:11 +02:00
Proddy
99b2da752f package update 2023-07-09 18:07:03 +02:00
Proddy
32884da60d Merge branch 'emsesp:dev2' into dev2 2023-07-09 17:43:38 +02:00
Proddy
d537247ead package updates 2023-07-09 10:55:30 +02:00
Proddy
d8364c5df2 close only on 406 2023-07-09 10:55:25 +02:00
MichaelDvP
f62b5548a3 add missing \n in certificate 2023-07-09 08:40:22 +02:00
MichaelDvP
443fe640b3 add optional secure mqtt 2023-07-08 16:24:44 +02:00
Proddy
365d246a89 fix prettier in vscode 2023-07-08 15:53:44 +02:00
Proddy
bea0922ee8 report on invalid extension - Validate file name extension on file upload #1210 2023-07-08 14:10:33 +02:00
Proddy
eb6e8d0c93 comments 2023-07-08 14:10:08 +02:00
Proddy
1b27ccf70e formatting 2023-07-08 14:08:25 +02:00
Proddy
3aa806ca65 formatting 2023-07-08 14:08:13 +02:00
Proddy
f99735921c package update, fixing lint 2023-07-08 14:07:58 +02:00
Proddy
c934e6617c some textual cleanup 2023-07-08 14:07:38 +02:00
Proddy
67ce23337f remove mention of scan devices 2023-07-08 14:07:25 +02:00
Proddy
b57bc11070 Merge pull request #1209 from proddy/dev2
add timeout so Wifi Scan works
2023-07-07 17:07:45 +02:00
Proddy
f3d1ed5596 add timeout so Wifi Scan works 2023-07-07 17:06:48 +02:00
Proddy
5112bf9e08 package update 2023-07-07 17:06:39 +02:00
Proddy
60594ff4b7 Merge pull request #1208 from proddy/dev2
refresh change log with all 3.6.0 updates
2023-07-07 14:43:14 +02:00
Proddy
dc3467e7fc package update 2023-07-06 20:37:37 +02:00
Proddy
bb87d064a5 formatting 2023-07-06 20:37:31 +02:00
Proddy
30388da021 refresh change log with all 3.6.0 updates 2023-07-06 20:37:25 +02:00
Proddy
1f7ddcec55 Merge pull request #1207 from MichaelDvP/dev2 2023-07-05 15:16:03 +02:00
MichaelDvP
942eba868a fix offsets for #1187 2023-07-05 15:13:30 +02:00
Proddy
d6e7b136a8 Merge pull request #1206 from proddy/dev2
order languages alphabetically
2023-07-05 09:39:38 +02:00
Proddy
55c33ef51f order languages alphabetically 2023-07-05 09:38:51 +02:00
Proddy
d33a554ab1 package update 2023-07-05 09:38:41 +02:00
Proddy
cbbe6ac589 Merge pull request #1205 from MichaelDvP/dev2
update it translations, etc
2023-07-03 21:32:42 +02:00
MichaelDvP
84b8fa8ff5 update it translations 2023-07-03 21:11:05 +02:00
MichaelDvP
3a7eb634de update packages 2023-07-03 21:10:20 +02:00
MichaelDvP
5977b0585d update mqtClient 2023-07-03 21:09:56 +02:00
Proddy
7b0d73e275 Merge pull request #1203 from MichaelDvP/dev2
reset dirty when saving
2023-07-03 13:15:38 +02:00
MichaelDvP
143ce8c80f Merge branch 'dev2' of https://github.com/emsesp/EMS-ESP32 into dev2 2023-07-03 12:43:57 +02:00
MichaelDvP
4e736a4ff1 reset dirty when saving 2023-07-03 12:38:31 +02:00
Proddy
d2523fc5d2 upgrade ArduinoJson to 6.21.2 2023-07-03 11:44:37 +02:00
Proddy
ab4f8d46ad fix standalone build 2023-07-03 11:44:23 +02:00
Proddy
75defd0858 always add dump_entities for reference 2023-07-03 11:44:13 +02:00
Proddy
e52f0954cd fix build standalone 2023-07-03 11:43:50 +02:00
Proddy
98e9b62c85 fix lint warning 2023-07-03 10:18:52 +02:00
Proddy
40737ea552 fix typo 2023-07-03 10:02:30 +02:00
Proddy
523f501bd0 added yarn 2023-07-03 10:00:34 +02:00
Proddy
905c496fa3 ignore uploaded files 2023-07-03 10:00:03 +02:00
Proddy
2ad375884f add back json body parsing 2023-07-03 09:59:52 +02:00
Proddy
50b8db0c96 remove divider after EN. All countries are equals! 2023-07-03 09:59:34 +02:00
Proddy
36f88c772f increase timeout to 3 seconds 2023-07-03 09:59:12 +02:00
Proddy
7086358ebc fix for alova multi-cancel 2023-07-03 09:58:58 +02:00
Proddy
51769011be autoformatting 2023-07-03 08:56:08 +02:00
Proddy
d15de88065 Merge pull request #1202 from MichaelDvP/dev2
github action
2023-07-03 08:48:24 +02:00
Proddy
f909b32db8 remove todo 2023-07-02 23:45:01 +02:00
Proddy
e8e3fc5fb6 remove todo 2023-07-02 23:44:51 +02:00
Proddy
90a1bdd5d9 add back signon endpoint 2023-07-02 23:44:38 +02:00
Proddy
0b6eba294e add dutch translations 2023-07-02 23:44:21 +02:00
MichaelDvP
98b2a3a6e1 Merge branch 'dev2' of https://github.com/emsesp/EMS-ESP32 into dev2 2023-07-02 22:10:45 +02:00
MichaelDvP
3bd21d4486 try to fix standalone 2023-07-02 22:10:34 +02:00
MichaelDvP
2094d42c3b readme 2023-07-02 22:09:52 +02:00
MichaelDvP
0156dd4956 test release 2023-07-02 22:02:43 +02:00
Proddy
da3e118444 fix restart monitor 2023-07-02 21:56:31 +02:00
Proddy
2663bc15f4 Merge pull request #1201 from MichaelDvP/dev2
Merge dev2
2023-07-02 15:43:16 +02:00
MichaelDvP
50939c1077 changelog 2023-07-02 13:57:34 +02:00
MichaelDvP
b0fc26b6eb remove unused async-mqtt-client-lib 2023-07-02 13:57:26 +02:00
MichaelDvP
476f84be77 Merge branch 'dev2' of https://github.com/emsesp/EMS-ESP32 into dev2 2023-07-02 13:56:47 +02:00
Proddy
449bb4055c Merge pull request #1200 from proddy/dev-alova
Dev alova - #1112
2023-07-02 13:09:01 +02:00
Proddy
86daa13426 fix for cancel upload 2023-07-02 12:38:05 +02:00
MichaelDvP
09aea280b5 add it-translations 2023-07-02 12:09:14 +02:00
Proddy
34113c3698 fix progress bar when uploading 2023-07-02 10:12:31 +02:00
Proddy
9b21607da5 show EMS-ESP welcome message first 2023-07-02 10:12:17 +02:00
Proddy
985da48947 fix upload, except cancel 2023-07-01 17:01:08 +02:00
MichaelDvP
32f3c646f8 fix translation cooling 2023-07-01 15:51:26 +02:00
MichaelDvP
d27ef2530d fix crash on min/max check 2023-07-01 09:08:27 +02:00
proddy
fb41606e43 alova upload experiments 2023-06-30 14:25:01 +02:00
MichaelDvP
cbb7d46ede add cooling #1198, fix min limit of noreducetemp 2023-06-30 10:00:04 +02:00
MichaelDvP
3efe16c840 fix min/max adaption 2023-06-30 09:58:24 +02:00
MichaelDvP
8b800ded21 update packages 2023-06-30 09:57:49 +02:00
MichaelDvP
31220b3fde fix webEntity commands 2023-06-25 08:54:11 +02:00
MichaelDvP
f4cae5027e update packages 2023-06-25 08:53:20 +02:00
MichaelDvP
d17705db6c thermostat hpmodes 2023-06-25 08:52:55 +02:00
proddy
d6c5c87412 fix Cancel 2023-06-24 16:51:04 +02:00
proddy
89f14f1dba add comments 2023-06-24 16:50:59 +02:00
proddy
5fddb08330 increase timeout to 3 secs 2023-06-24 16:50:49 +02:00
proddy
f61c447ea5 add duplicate name check 2023-06-24 16:50:38 +02:00
Proddy
8b8b023665 update with 1196 2023-06-24 14:51:58 +02:00
Proddy
158617f56b fixes #1196 - use basename as ids in HA to support multiple EMS-ESP's 2023-06-24 13:28:48 +02:00
Proddy
27b9aa6ddd fix timeout 2023-06-24 09:09:34 +02:00
proddy
e615274f83 package updates 2023-06-23 19:12:29 +02:00
proddy
2b24f2585f optimize restart using alova lib 2023-06-21 23:15:38 +02:00
Proddy
0e52deae7b package updates 2023-06-20 22:52:16 +02:00
Proddy
bc6b48bd07 fix signin 2023-06-18 17:12:43 +02:00
Proddy
ce1b9f22cb alova - add interceptor 2023-06-18 16:35:32 +02:00
Proddy
b1d666d7b9 alova - refactor wifi scan 2023-06-18 10:46:50 +02:00
Proddy
ed55a96b80 more alova ports 2023-06-17 13:06:31 +02:00
proddy
2ae45ecd6e merging to sync - still need to fix system.ts 2023-06-16 06:44:49 +02:00
proddy
f58dbf6ec1 alova - update comments 2023-06-15 16:08:25 +02:00
proddy
adc4760b5f alova - implementing UpdateState 2023-06-14 23:30:52 +02:00
proddy
c44903e1b0 update #6 2023-06-13 23:36:50 +02:00
proddy
8e081ce04f alova update #6 2023-06-11 20:31:23 +02:00
proddy
5c6d704a48 alova updates #4 2023-06-08 16:50:40 +02:00
proddy
e11d5bed9d fix truncate of long device names in data box 2023-06-08 16:50:29 +02:00
proddy
5784bf744e added blur 2023-06-08 16:50:04 +02:00
Proddy
85716bc6bc update #4 - more alova 2023-06-05 22:40:21 +02:00
MichaelDvP
81e5ee8364 fix typo ventMode 2023-06-05 19:16:43 +02:00
Proddy
52d4505410 updates #3 2023-06-05 18:09:02 +02:00
MichaelDvP
b28865a283 use only espMqttClient queue 2023-06-05 10:06:19 +02:00
MichaelDvP
d2ff44e1cf Merge branch 'dev' of https://github.com/emsesp/EMS-ESP32 into dev 2023-06-04 17:25:19 +02:00
MichaelDvP
9a34b2dd81 force mqtt disconnect on wifi disconnect 2023-06-04 17:24:03 +02:00
Proddy
43dc177a6d Merge pull request #1189 from emsesp/dev_fix 2023-06-04 16:41:39 +02:00
MichaelDvP
34046795b7 fix #1188 2023-06-04 16:40:42 +02:00
MichaelDvP
2c132a86b0 Merge branch 'dev' of https://github.com/emsesp/EMS-ESP32 into dev 2023-06-04 15:40:10 +02:00
MichaelDvP
759fe69909 fix prefix of customizations 2023-06-04 15:39:57 +02:00
MichaelDvP
181b672c1a add ventilation bypass 2023-06-04 15:32:43 +02:00
proddy
2e63d60273 alova implementation, testing 2023-06-04 15:22:09 +02:00
Proddy
46578dbe69 Update roboto.css - fix typo 2023-06-04 12:18:05 +02:00
MichaelDvP
cbc9607b26 apply changes/blocker for manage users 2023-06-03 17:46:26 +02:00
MichaelDvP
7865ddc51f use espMqttClient, qos2 fixed 2023-06-03 16:36:53 +02:00
Proddy
d9c2fe0fb9 Merge pull request #1186 from proddy/dev
suppress lint warning with make
2023-06-03 11:12:51 +04:00
proddy
02c386d76f supress lint warning wirh make 2023-06-03 09:11:43 +02:00
Proddy
ee0e6ed29f Merge pull request #1185 from proddy/dev
minor updates
2023-06-03 10:09:59 +04:00
Proddy
e858596658 package update 2023-06-03 08:09:23 +02:00
Proddy
b4519b40eb minor updates 2023-06-03 08:06:36 +02:00
Proddy
a0bc5fed35 update packages 2023-06-02 14:37:31 +02:00
Proddy
2a7bd7e963 remove DEBUG 2023-06-02 14:37:25 +02:00
Proddy
26b873da9e Merge pull request #1184 from emsesp/dev-fix
fix #1182
2023-05-31 23:18:48 +04:00
MichaelDvP
82a8f0481e fix #1182 2023-05-31 19:13:53 +02:00
Proddy
53c8d9372e Merge pull request #1180 from pswid/dev 2023-05-30 23:04:58 +04:00
Proddy
d314e1d050 Merge pull request #1181 from emsesp/dev-fix 2023-05-30 23:03:13 +04:00
MichaelDvP
e4a0799163 3 retrys on rejected tx, fixes #1179
please delete branch after merge. My dev branch contains the mqtt lib, so i edit on github directly.
2023-05-30 09:41:26 +02:00
pswid
685f987a8e automatic (some) columns expansion to avoid truncation 2023-05-29 12:54:58 +02:00
pswid
b57fff13eb Polish translation fixes 2023-05-29 12:43:55 +02:00
Proddy
4a3201f194 Merge pull request #1177 from proddy/dev
formatting
2023-05-27 09:43:41 +02:00
Proddy
8b948bc521 don't build web on pio clean target 2023-05-27 09:42:50 +02:00
Proddy
91f0da84d2 clang auto formatting 2023-05-27 09:42:33 +02:00
Proddy
551b2d900e package update 2023-05-27 09:42:21 +02:00
Proddy
06e3c0a41f Merge pull request #1176 from MichaelDvP/dev
AM20, HIU, Ventilation and other
2023-05-27 08:39:48 +02:00
MichaelDvP
ac3d16b2b4 version dev.12, update changelog 2023-05-26 10:48:30 +02:00
MichaelDvP
c8c4a3d450 build s3 bin 2023-05-26 10:26:25 +02:00
MichaelDvP
6aaccf4f90 Merge branch 'dev' of https://github.com/emsesp/EMS-ESP32 into dev 2023-05-26 09:46:16 +02:00
Proddy
2d70f637c9 Merge pull request #1175 from proddy/dev
Table sizes
2023-05-25 20:20:52 +02:00
Proddy
cf042271c3 Merge branch 'emsesp:dev' into dev 2023-05-25 20:20:26 +02:00
proddy
7330ca20f8 condensed table for entity data 2023-05-25 20:16:19 +02:00
MichaelDvP
b5ccf79f70 ventilation temperatures div10 2023-05-25 12:27:58 +02:00
MichaelDvP
9a2303ab73 Merge branch 'dev' of https://github.com/emsesp/EMS-ESP32 into dev 2023-05-25 10:17:41 +02:00
MichaelDvP
07102e0279 add ventilation air temperatures 2023-05-25 09:46:34 +02:00
Proddy
0c1042abc9 Merge pull request #1162 from proddy/dev
web render update - #1116
2023-05-24 20:42:36 +02:00
proddy
2571f5e5e6 package update 2023-05-24 20:41:01 +02:00
Proddy
c9a968c1a5 package update 2023-05-23 22:51:35 +02:00
Proddy
b74e56974e package update 2023-05-14 10:57:03 +02:00
Proddy
fabaa230de shorten greenstar 2023-05-14 10:56:58 +02:00
Proddy
c224abfc61 layout improvements 2023-05-13 16:55:49 +02:00
Proddy
26f5c9debf improvements to #1169 2023-05-13 10:51:18 +02:00
Proddy
ae9a86e796 remove comments 2023-05-13 10:51:06 +02:00
Proddy
c57a5c04d6 pacakge update 2023-05-12 08:26:08 +02:00
Proddy
d1df21cb8e add refresh to device data 2023-05-12 08:25:45 +02:00
Proddy
ff59276387 table formatting 2023-05-11 21:51:15 +02:00
Proddy
0e0ec7a7c7 improve layout 2023-05-11 21:37:24 +02:00
Proddy
3ecaeffec0 improve mobile layout 2023-05-11 21:26:41 +02:00
Proddy
4f8d3d27ba updates to data view 2023-05-11 18:19:47 +02:00
Proddy
6575e1d790 escape key closes data window 2023-05-11 00:23:35 +02:00
Proddy
b255b65dc4 experiment with a pop up device data table 2023-05-11 00:16:03 +02:00
Proddy
b1b15eef4c package update 2023-05-11 00:15:44 +02:00
MichaelDvP
2f5e5535c8 connect wifi or eth, only one 2023-05-10 18:48:36 +02:00
MichaelDvP
5abe9530d7 update packages 2023-05-10 18:48:00 +02:00
MichaelDvP
a5113eb90d add HIU 2023-05-10 18:47:39 +02:00
MichaelDvP
e6f839b554 Merge branch 'dev11' into dev 2023-05-10 18:47:07 +02:00
MichaelDvP
b2ad600de2 add ventilation device class 2023-05-10 16:55:03 +02:00
Proddy
ea71b43f78 package update 2023-05-08 17:59:49 +02:00
Proddy
d939795b8c fix pio for 6.1.7 2023-05-08 17:59:44 +02:00
Proddy
db9b9992d6 make menu pane less wide 2023-05-07 17:49:58 +02:00
Proddy
c8fd8c4928 replace msgpack with msgpackr - https://github.com/emsesp/EMS-ESP32/issues/1112 2023-05-07 17:34:13 +02:00
Proddy
a5fae64db6 fix typo 2023-05-07 17:28:10 +02:00
Proddy
5767d83c85 add notes about fonts 2023-05-07 14:26:34 +02:00
Proddy
7910893529 rename reset 2023-05-07 14:26:23 +02:00
proddy
3c003657b9 move device types to types.ts 2023-05-07 09:47:13 +02:00
proddy
348ffcd077 remove obsolete import 2023-05-07 09:46:52 +02:00
proddy
09ea35e340 add comment 2023-05-06 17:11:57 +02:00
proddy
fcac70a2ca update test data - Need fresh test data #1168 2023-05-06 17:11:48 +02:00
proddy
b5b890beaa package update 2023-05-06 17:11:26 +02:00
Proddy
ca964c13a7 fix row unselect 2023-05-05 20:37:48 +02:00
Proddy
979503256a package update 2023-05-05 20:25:59 +02:00
MichaelDvP
c9ab6b23ea fix #600, read telegram 486 2023-05-05 09:32:57 +02:00
Proddy
e84a3bc99a improve dv validation, add back ugly step 2023-05-03 08:54:57 +02:00
Proddy
310bb53985 package update 2023-05-03 08:54:36 +02:00
Proddy
5b87e74be8 update comment 2023-05-03 08:54:27 +02:00
Proddy
8aa7cd166b experiment showing only 1 device 2023-05-01 22:13:53 +02:00
Proddy
72f530b969 export setOrigData needed for systemlog 2023-05-01 22:13:39 +02:00
Proddy
b027ce0d91 remember old settings 2023-05-01 22:13:17 +02:00
Proddy
ff5247eaf5 update eslint 2023-05-01 22:13:00 +02:00
proddy
148e35ea53 improve device value helper text 2023-05-01 13:39:12 +02:00
Proddy
8a01a1e471 merge changes from Michael for #600 2023-04-30 20:35:29 +02:00
Proddy
c34208c3df fix logo on mobile devices 2023-04-30 20:25:04 +02:00
Proddy
bf5c11156a reduce margins so data fills plane 2023-04-30 20:24:50 +02:00
Proddy
6e3b36c070 update for 3.6.0-dev-11 2023-04-30 16:36:50 +02:00
Proddy
dc4bd64aff fixes PlatformIO 6.2.0 breaks compilation #1166 (thanks Michael) 2023-04-30 16:22:51 +02:00
proddy
0d9cd64619 rename upload finished to successful 2023-04-30 15:51:15 +02:00
proddy
cc10c494c6 version release text changes 2023-04-30 15:47:59 +02:00
Proddy
3ef3f561b9 text changes 2023-04-30 10:41:23 +02:00
Proddy
2d9627373c ignore internationl number settings when changing value 2023-04-30 10:41:01 +02:00
proddy
d618d09bdf min, max and step are sent as Numbers to the webUI 2023-04-30 09:57:25 +02:00
proddy
8a02f2a27a add check for min/max when sending device values 2023-04-30 09:53:10 +02:00
proddy
ceb63fa09f rename lint 2023-04-30 09:52:47 +02:00
proddy
a256d2573c remove unused lib 2023-04-30 09:52:35 +02:00
Proddy
5fe9049537 but device data in scrollable body 2023-04-29 16:26:20 +02:00
Proddy
6f681aa451 remove useWindowSize 2023-04-29 16:26:07 +02:00
Proddy
63d105437f comment change 2023-04-29 16:25:55 +02:00
Proddy
2254bf9c16 fix eslint warnings 2023-04-29 15:35:54 +02:00
Proddy
90a719561b remove comment 2023-04-29 15:35:33 +02:00
proddy
d06dc3e2cf fic dialog deviceentities 2023-04-29 14:34:56 +02:00
proddy
ff058b06a1 changed comment 2023-04-29 14:34:48 +02:00
proddy
26b0c67d13 update packages, but not router as it breaks 2023-04-29 14:34:34 +02:00
proddy
ab24695371 use blocker from main lib 2023-04-29 14:34:19 +02:00
Proddy
1861365124 removed SAVE 2023-04-28 21:03:29 +02:00
Proddy
321558c583 minor optimizations 2023-04-28 15:46:45 +02:00
Proddy
dd25900af4 make icon bigger 2023-04-28 15:46:37 +02:00
Proddy
28252b987b added missing analog_enabled 2023-04-28 15:46:24 +02:00
Proddy
b823366a82 fixed changing log settings - https://github.com/emsesp/EMS-ESP32/pull/1162#issuecomment-1525877550 2023-04-28 15:46:07 +02:00
MichaelDvP
90ce8bc8ce HP inputs #600, custom entity bool display 2023-04-28 14:36:35 +02:00
Proddy
1362976508 disable changing gpio 2023-04-28 14:13:09 +02:00
Proddy
cfe8c410ae Optimize WebUI rendering when using Dialog Boxes #1116 2023-04-28 12:46:59 +02:00
MichaelDvP
5f87718deb heatpump inputs, fix #600 2023-04-27 09:12:53 +02:00
MichaelDvP
f15fb9a5d1 custom entities: bool write, dashboard show and count 2023-04-27 09:07:38 +02:00
MichaelDvP
57cc39c087 Add Worcester Comfort RF Thermostat emsesp#1163 2023-04-25 18:17:32 +02:00
Proddy
b9402d3a01 remove unused libs 2023-04-24 21:56:40 +02:00
Proddy
b59c76df3b replace void with await 2023-04-24 21:39:30 +02:00
Proddy
7d526196a0 don't show uptime if disconnected 2023-04-24 21:39:16 +02:00
Proddy
f1b3cb9646 added test for bus disconnect 2023-04-24 21:38:52 +02:00
Proddy
67de1c6a47 add one more line to box so it fits 'patch' 2023-04-24 21:38:35 +02:00
Proddy
41b2a67f09 remove hidden spaces 2023-04-24 21:38:21 +02:00
Proddy
f2636d42a4 updated packages 2023-04-24 21:38:03 +02:00
Proddy
0c0ef80025 rename 'Tx issues - check Tx Mode' 2023-04-24 21:37:47 +02:00
Proddy
bcd0c5ac52 only show Update when changes made - https://github.com/emsesp/EMS-ESP32/pull/1162 2023-04-24 17:42:44 +02:00
Proddy
005485188f updates to https://github.com/emsesp/EMS-ESP32/pull/1162 2023-04-24 16:50:28 +02:00
Proddy
9553161b07 remove force from check_active() 2023-04-24 16:50:05 +02:00
Proddy
71e7887da3 replace MUI Slider, saves 5KB 2023-04-23 11:02:10 +02:00
Proddy
300fe721a1 tidy up files 2023-04-23 10:14:35 +02:00
Proddy
047eae2d40 package update 2023-04-23 09:45:12 +02:00
Proddy
c3e5e8d6d1 Merge branch 'dev' into dev 2023-04-23 01:05:36 +02:00
Proddy
466e9ec6fe rename endpoint to entities to be consistent 2023-04-22 21:20:00 +02:00
Proddy
74c88caa19 add empty entity test 2023-04-22 21:19:48 +02:00
Proddy
71d086a8db device_id and type_id as numbers 2023-04-22 21:04:54 +02:00
Proddy
728e15772f bump version 2023-04-22 21:04:37 +02:00
Proddy
e1ffd8860d optimize Settings Customization for rendering 2023-04-22 21:02:11 +02:00
Proddy
4b9bddd565 add comment 2023-04-22 21:01:39 +02:00
Proddy
f53921d068 device entity min/max as numbers 2023-04-22 21:01:19 +02:00
Proddy
445618d232 add min/max for entity customization 2023-04-22 21:01:04 +02:00
Proddy
b035e27bc8 device entity min/max sent as numbers 2023-04-22 21:00:43 +02:00
Proddy
cecbb25857 device_id and type_id sent as numbers 2023-04-22 21:00:29 +02:00
Proddy
c2823a5ed6 add SHOWING and SEARCH 2023-04-22 21:00:12 +02:00
MichaelDvP
3dba97239d AM200 with device-id 08 2023-04-22 16:49:03 +02:00
Proddy
209afc87bb fix lint warnings 2023-04-22 10:05:13 +02:00
Proddy
19e8e4a7a1 initial lint cleanup 2023-04-22 09:47:29 +02:00
Proddy
d8ff088231 formatting 2023-04-22 09:47:03 +02:00
Proddy
6f14fcb6e8 id no longer needed 2023-04-22 09:46:41 +02:00
Proddy
56e95d1d85 updated for custom entities 2023-04-22 09:46:11 +02:00
Proddy
e12083e3ba added more eslint rules 2023-04-22 09:45:54 +02:00
Proddy
fa263918ba updated packages 2023-04-22 09:45:37 +02:00
Proddy
e81b1b9277 rename entities_saved to updated 2023-04-22 09:45:12 +02:00
Proddy
84635ac889 autoformat 2023-04-22 09:44:39 +02:00
Proddy
f80764d72b refactor diallogs 2023-04-22 09:44:24 +02:00
Proddy
04dd9eef09 Polish translation update #1156 2023-04-22 08:46:13 +02:00
Proddy
6bd744f12e refactor dialog to prevent multiple parent renders 2023-04-18 22:04:00 +02:00
Proddy
6f155fab0b Merge pull request #1159 from MichaelDvP/dev
add writeable setting to custom entities
2023-04-15 18:32:50 +02:00
MichaelDvP
a54f3f7085 add writeable checkbox to custom entities 2023-04-15 10:45:41 +02:00
MichaelDvP
d86153a08e add custom entity with empty strings 2023-04-14 14:59:57 +02:00
Proddy
8eb7793cd0 update libs 2023-04-11 18:30:45 +02:00
Proddy
79bff902e1 Merge pull request #1154 from proddy/dev
standalone compile issues
2023-04-06 21:20:42 +02:00
proddy
825e33c3ea standalone compile issues 2023-04-06 21:19:24 +02:00
Proddy
0c8a7d51a8 Merge pull request #1151 from MichaelDvP/dev
Custom telegram handler #1079
2023-04-06 21:08:28 +02:00
Proddy
05e1bbf86b Merge branch 'dev' into dev 2023-04-06 21:08:18 +02:00
Proddy
004ec92d68 Merge pull request #1153 from proddy/dev
minor updates, can't remember what
2023-04-06 20:56:53 +02:00
proddy
f00502863f update packages 2023-04-06 20:55:18 +02:00
proddy
fe8aa8f727 don't use yarn pnp 2023-04-04 11:27:02 +02:00
Proddy
24eccf1e04 Merge branch 'emsesp:dev' into dev 2023-04-02 16:14:01 +02:00
proddy
5ef494b702 tsx config 2023-04-02 16:08:42 +02:00
Proddy
1673acd537 Merge pull request #1149 from pswid/dev
fixed PL and NO translation of "haclimate"
2023-04-02 10:57:48 +02:00
Proddy
d993b356f9 Merge pull request #1150 from minusdreidb/dev
Fix #1147 - Exhaust temperature always zero on GB125/MC110/RC310
2023-04-02 10:43:35 +02:00
marcel
e2fec03a21 Use exhaust temperature from 0xe4, remove from 0xe5 until verified, closes #1147. 2023-04-01 19:15:54 +02:00
MichaelDvP
5e2d97c0b9 Typo, fix string-compare standalone 2023-03-31 17:35:31 +02:00
MichaelDvP
594e79be5d update changelog, version dev.9 2023-03-31 16:52:23 +02:00
MichaelDvP
fa50846a05 add own entities read from ems-bus with free factor 2023-03-31 16:51:28 +02:00
MichaelDvP
36d5df65b8 env for asymetric partitions (loader) 2023-03-31 16:49:30 +02:00
MichaelDvP
486b365f9b update packages 2023-03-31 16:48:08 +02:00
marcel
5c59a20714 Accept exhaustTemp_ update from telegram 0xE5 if value is unequal zero. 2023-03-27 21:57:31 +02:00
pswid
1c10d8015c fixed PL and NO translation of "haclimate" 2023-03-27 09:55:30 +02:00
Proddy
d2d29afcbe update es build 2023-03-26 22:56:43 +02:00
marcel
982a43b8d4 Fix Exhaust Temperature for Logano plus GB125 with Logamatic MC110.
Exhaust Temperature was always zero prior to fix. On the setup

- Logano plus GB125 with Logamatic MM110 (SW-Version 02.10)
- Logamatic RC310 (SW-Version 74.03)
- MM100 (SW-Version 24.05)

the exhaust temperature ist found in telegram type 0xe4 at offset 31.
The original location in telegram 0xe5, offset 6 is always zero.
2023-03-26 17:49:01 +02:00
Proddy
17b108597e Merge pull request #1145 from MichaelDvP/dev
revert another wrong translation
2023-03-25 11:12:33 +01:00
MichaelDvP
28e42b7920 revert another wrong translation 2023-03-25 08:25:04 +01:00
Proddy
904403f8fa Merge pull request #1142 from MichaelDvP/dev
fixes
2023-03-24 20:32:16 +01:00
MichaelDvP
84e8eaf33c Merge branch 'dev' of https://github.com/emsesp/EMS-ESP32 into dev 2023-03-24 14:17:52 +01:00
MichaelDvP
959e09f6c1 add missing german translation, add back //TODO translate 2023-03-24 13:41:40 +01:00
MichaelDvP
c8c4b36ebd Merge branch 'dev' of https://github.com/emsesp/EMS-ESP32 into dev 2023-03-24 13:38:59 +01:00
Proddy
ddad1bbe09 Merge pull request #1141 from proddy/dev
minor fixes
2023-03-24 13:36:26 +01:00
Proddy
a2fc137ebe bump version with new NO translations 2023-03-24 13:35:11 +01:00
Proddy
936d887394 fix lint error 2023-03-24 13:34:47 +01:00
Proddy
a396d0335f formatting 2023-03-24 13:32:09 +01:00
Proddy
d575f3b3c2 package update 2023-03-24 13:32:03 +01:00
Proddy
0674426d29 Merge pull request #1139 from proddy/dev
use number as table id's - #1126
2023-03-24 12:14:17 +01:00
Proddy
80ec86361a Merge pull request #1138 from Vikingn/dev
Norwegian translations added again
2023-03-24 12:13:56 +01:00
Vikingn
1ebd38bf03 Norwegian Index.ts translated 2023-03-23 22:09:03 +01:00
Proddy
274855a19e Merge branch 'emsesp:dev' into dev 2023-03-23 20:40:15 +01:00
Proddy
d26d2ae556 Merge pull request #1137 from pswid/dev
improve view of settings pages (app and mqtt)
2023-03-23 20:37:06 +01:00
proddy
0a7e1f629e use number as table id's - #1126 2023-03-23 20:29:01 +01:00
MichaelDvP
a84e9e0923 update packages 2023-03-22 18:09:55 +01:00
MichaelDvP
aea2277e26 fix up/download scheduler files 2023-03-22 17:33:34 +01:00
MichaelDvP
a5d2beb3e7 missing translations 2023-03-22 17:31:55 +01:00
Vikingn
729832ae76 Norwegian fixed line 271-275 2023-03-22 17:22:53 +01:00
Vikingn
21f746d1fa Norwegian translation 2023-03-22 16:23:18 +01:00
Vikingn
d83de8bd15 Norwegian translations added again 2023-03-22 15:36:38 +01:00
pswid
12da8f9b67 improve view of app and mqtt settings pages
The appearance of the configuration pages has been unified. Additionally on very narrow screens (e.g. smartphones) only one parameter per row is displayed (on wider screens up to three per row).
2023-03-22 13:31:53 +01:00
MichaelDvP
70550a4866 enlarge uart stack to 2,5k, 2023-03-22 11:04:04 +01:00
MichaelDvP
789a4e1340 formatting 2023-03-22 11:03:18 +01:00
MichaelDvP
35c999e2fd fix fullname #1136 2023-03-22 07:19:55 +01:00
MichaelDvP
bfdffc14c5 package update 2023-03-20 15:05:12 +01:00
MichaelDvP
e74d3d4cd5 mqtt resend timeout from 10 min to 10 sec 2023-03-20 12:17:27 +01:00
MichaelDvP
514a96c8e4 merge "NO" translations from Vikingn 2023-03-20 09:34:25 +01:00
MichaelDvP
210181feef fix recreate HA config on language change (from discord) 2023-03-20 09:28:43 +01:00
MichaelDvP
942de63b83 fix heartbeat interval, #1131 2023-03-20 09:27:26 +01:00
Proddy
93d68996b4 Merge pull request #1128 from MichaelDvP/dev 2023-03-18 14:17:19 +01:00
MichaelDvP
369c7554f2 fix updating of board profile 2023-03-18 13:53:13 +01:00
MichaelDvP
c92d9123a0 fix enum order of nofrostmode 2023-03-18 10:18:48 +01:00
MichaelDvP
f0be8cf581 add boiler Greenstar HIU, #1127 2023-03-18 10:18:18 +01:00
MichaelDvP
bb85255ef1 add tr characters to css 2023-03-18 10:17:48 +01:00
Proddy
e46c5263d9 Merge pull request #1124 from MichaelDvP/dev
fix device icons in dashboard
2023-03-15 12:36:08 +01:00
MichaelDvP
e7372922d7 fix device icons in dashboard 2023-03-15 10:41:05 +01:00
Proddy
0c9c15f854 Merge pull request #1123 from MichaelDvP/dev
fix translations for EMSESP_EN_ONLY, EMSESP_DE_ONLY
2023-03-15 08:22:09 +01:00
MichaelDvP
216e7e5307 Merge branch 'dev' of https://github.com/emsesp/EMS-ESP32 into dev 2023-03-15 07:16:34 +01:00
MichaelDvP
a92474bf37 fix EMSESSP_EN_ONLY and EMSESP_DE_ONLY 2023-03-15 07:13:23 +01:00
Proddy
432220dc86 Merge pull request #1122 from proddy/dev
update ArduinoJson to 6.21.0
2023-03-14 22:06:17 +01:00
Proddy
a921b4c7b4 3.6.0-dev.7 2023-03-14 22:04:17 +01:00
Proddy
d1348f2be4 formatting 2023-03-14 22:03:28 +01:00
Proddy
f191f1c81d Merge branch 'dev' of https://github.com/proddy/EMS-ESP32 into dev 2023-03-14 21:59:41 +01:00
Proddy
3dfd34b7bf upgrade 6.21.0 2023-03-14 21:59:40 +01:00
Proddy
ada142ff29 add comment 2023-03-14 21:59:31 +01:00
Proddy
ec8b55c1e8 package updates 2023-03-14 21:59:25 +01:00
Proddy
70eb9e6b08 fix no web translations 2023-03-14 21:59:07 +01:00
Proddy
7eef95f57c lint warning fix 2023-03-14 21:58:54 +01:00
Proddy
bac266eadc Merge pull request #1121 from MichaelDvP/dev
some small fixes
2023-03-14 18:17:37 +01:00
MichaelDvP
4ba9f6f330 names for entityFormat and discoveryType 2023-03-14 15:17:16 +01:00
MichaelDvP
0b0ae2fbc2 fix update on S3 SOC 2023-03-14 15:16:16 +01:00
MichaelDvP
50bf7932a0 fix download settings and schedules 2023-03-14 15:05:23 +01:00
MichaelDvP
d3615d2961 fix stack overflow in lwip task 2023-03-14 15:04:48 +01:00
Proddy
2c572f8099 Merge pull request #1119 from pswid/dev
fix: tags in names in HA were not translated
2023-03-14 09:12:15 +01:00
pswid
944aa861f8 make 'eco+ switch_off' enity unique in v.3.4 format
HA ignores characters '+' in uniq_id/obj_id, so to make the entity 'eco+ switch_off' different from 'eco switch_off', it will be renamed to 'eco2 switch_off'.
2023-03-12 21:24:03 +01:00
pswid
62c3c91665 fixed entity id format v.3.4 2023-03-12 20:02:07 +01:00
pswid
ecafda86f1 fix: tags in names in HA were not translated 2023-03-12 19:14:28 +01:00
Proddy
354741a81d Merge pull request #1117 from proddy/dev
add EMSESP_EN_ONLY and EMSESP_DE_ONLY to be safe
2023-03-12 11:15:57 +01:00
proddy
63e6752bd1 add EMSESP_EN_ONLY and EMSESP_DE_ONLY to be safe 2023-03-12 11:14:03 +01:00
Proddy
1e1baa9781 Update sonar_check.yml 2023-03-12 10:59:22 +01:00
Proddy
94678a6726 Merge pull request #1114 from proddy/dev
#1112 - web optimizations
2023-03-12 08:49:45 +01:00
proddy
64b202225a rollback changes 2023-03-12 08:48:56 +01:00
Proddy
0d81dcde10 don't bold row selection 2023-03-11 17:42:02 +01:00
Proddy
d0ccbc2963 typo in table header height 2023-03-11 17:38:08 +01:00
Proddy
8b29c1973d DEMSESP_EN_ONLY 2023-03-11 17:31:33 +01:00
Proddy
c960db5180 added compile flag -DEMSESP_DE_ONLY 2023-03-11 17:23:41 +01:00
Proddy
9233f0dfcc v3.5.1 - merge with patch 2023-03-11 16:06:05 +01:00
Proddy
dc3c6cad05 success toast after upload 2023-03-11 15:41:46 +01:00
Proddy
77798085ce upgraded sonar 2023-03-11 15:32:14 +01:00
Proddy
3c03f4b18f test new sonar 2023-03-11 15:22:43 +01:00
Proddy
955c8b4346 remove minify 2023-03-11 13:45:05 +01:00
Proddy
a3759b1959 add minify and use terser 2023-03-11 11:31:33 +01:00
Proddy
00e87dc3b0 fix table not showing on edit 2023-03-11 11:09:27 +01:00
Proddy
13211249c9 toast styling 2023-03-11 11:09:14 +01:00
Proddy
c677fed916 cleanup 2023-03-11 11:08:56 +01:00
proddy
cc5a28ca14 remove bold font and replace notistack to save flash 2023-03-11 09:22:55 +01:00
Proddy
8cbae88dc3 replace notistack 2023-03-10 20:28:43 +01:00
Proddy
ae890dab37 Merge pull request #1113 from proddy/dev
rollback notistack to 2.0.8 so it fits flash
2023-03-10 17:25:57 +05:30
Proddy
45ec315252 3.6.0-dev.5 2023-03-10 12:54:55 +01:00
Proddy
d27cd392f6 rollback notistack to 2.0.8 so it fits flash 2023-03-10 12:54:29 +01:00
Proddy
751008dcf2 cleanup platforms 2023-03-10 12:54:05 +01:00
Proddy
c16b9968e1 Merge pull request #1108 from proddy/dev
fix standalone
2023-03-08 12:01:24 +05:30
proddy
ab798bee12 package updates, formatting 2023-03-08 11:59:47 +05:30
proddy
30561411e1 fix compile standalone 2023-03-08 11:58:46 +05:30
Proddy
e1e8c1064a Merge pull request #1107 from MichaelDvP/dev
add thermostat names, missing turk locale
2023-03-08 11:49:36 +05:30
Proddy
94ff01bf2c Merge pull request #1106 from pswid/dev
Polish translation update
2023-03-08 11:48:57 +05:30
MichaelDvP
4b1b0e74df add thermostat names, missing turk locale 2023-03-07 17:46:33 +01:00
pswid
78205d77f3 fix typo 2023-03-07 12:38:41 +01:00
pswid
53a0a41a02 Polish translation update 2023-03-07 12:37:30 +01:00
Proddy
8d437c31ce Merge pull request #1105 from MichaelDvP/dev
scheduler and fixes
2023-03-06 19:45:52 +01:00
MichaelDvP
6f396087d2 fix climate publish 2023-03-06 19:12:02 +01:00
MichaelDvP
a6cd5d2ddb Merge branch 'dev' of https://github.com/MichaelDvP/EMS-ESP32 into dev 2023-03-06 18:49:38 +01:00
MichaelDvP
261cfe3911 remove dallas/analo domoticz test 2023-03-06 18:48:57 +01:00
MichaelDvP
bafe23431e fix avty 2023-03-06 18:43:46 +01:00
MichaelDvP
5759012914 fix avty 2023-03-06 18:36:27 +01:00
MichaelDvP
c9dbf282f6 add scheduler api commands/info/value 2023-03-06 16:26:52 +01:00
MichaelDvP
db1a335509 Merge branch 'dev' of https://github.com/emsesp/EMS-ESP32 into dev 2023-03-06 16:15:28 +01:00
Proddy
cdb64a4c15 Merge pull request #1103 from proddy/dev
#701 scheduler web dialog updates
2023-03-05 18:28:33 +01:00
proddy
fd7cbdbdc4 green ticky circle thingy 2023-03-05 18:28:01 +01:00
proddy
bcbfc09bf4 yet another package update 2023-03-05 18:27:51 +01:00
MichaelDvP
5f3212afc4 fix domoticz setting (was ignored) 2023-03-05 18:17:57 +01:00
MichaelDvP
af7d072486 Test for domoticz discovery 2023-03-05 17:54:04 +01:00
MichaelDvP
a93fd314ec fix typo and text size 2023-03-05 15:32:45 +01:00
proddy
501f4a856a minor updates 2023-03-05 14:34:35 +01:00
proddy
55af79dfeb name message updated 2023-03-05 14:33:37 +01:00
proddy
607a725395 add type cast so compiles standalone 2023-03-05 14:33:01 +01:00
proddy
ef602ca70b remove TODO 2023-03-05 14:32:27 +01:00
proddy
50d489d3c1 use safer strcmp() instead of comparing pointers 2023-03-05 14:32:20 +01:00
proddy
3c10d750f0 add TODO for translations 2023-03-05 14:31:48 +01:00
proddy
cab93b16b6 id uses counter 2023-03-05 14:31:38 +01:00
proddy
d3d2270f80 typo 2023-03-05 14:31:27 +01:00
proddy
9b3b758be7 update TODOs 2023-03-05 14:31:14 +01:00
MichaelDvP
dfdaf596bc domoticz setting, analog boolformat, dallas discovery 2023-03-05 12:03:47 +01:00
proddy
8ee8998381 Scheduler #701 updates to dialog 2023-03-05 10:08:26 +01:00
proddy
de59434d95 vscode setup 2023-03-05 09:44:50 +01:00
Proddy
e6f9d9b3c8 scheduler dialog changes 2023-03-04 22:16:10 +01:00
Proddy
a41dc71965 test 2023-03-04 19:14:25 +01:00
Proddy
dd200f6d34 Merge pull request #1101 from MichaelDvP/dev
some case and nullptr checks
2023-03-04 18:43:08 +01:00
MichaelDvP
b1c42b8d8f some case and nullptr checks 2023-03-04 17:42:14 +01:00
Proddy
aba870f0ba Merge pull request #1099 from MichaelDvP/dev
mqtt/commands for scheduler
2023-03-04 16:03:34 +01:00
MichaelDvP
0380fe1fff mqtt/commands for scheduler 2023-03-04 14:10:32 +01:00
Proddy
78c4a646d2 Merge pull request #1097 from emsesp/fix_RC35Monitor
fix RC35Monitor active detection
2023-03-04 11:23:41 +01:00
MichaelDvP
44056318fd fix RC35Monitor active detection
editied direct on github, delete branch after merge.
2023-03-04 11:09:14 +01:00
Proddy
f1bb2c75a6 Merge pull request #1095 from proddy/dev
fix routing issue
2023-03-03 18:09:52 +01:00
Proddy
dd0489596e fix routing issue 2023-03-03 12:41:48 +01:00
Proddy
8389e06aae lint optimizations 2023-03-03 12:41:42 +01:00
Proddy
afbb670c78 package update 2023-03-03 12:41:21 +01:00
Proddy
666da8d4e3 Merge pull request #1094 from proddy/dev
edit name from dialog
2023-03-02 17:15:54 +01:00
Proddy
8bb42addc0 Merge branch 'dev' of https://github.com/proddy/EMS-ESP32 into dev 2023-03-02 17:14:44 +01:00
Proddy
0dfd32412e edit name from dialog 2023-03-02 17:13:29 +01:00
Proddy
54eee7ca9f package update 2023-03-02 17:13:04 +01:00
Proddy
ad936c7f6c Merge pull request #1093 from proddy/dev
add name as unique id - #701
2023-03-01 21:50:35 +01:00
Proddy
ee5ec1b7d1 add name as unique id - #701 2023-03-01 21:49:17 +01:00
Proddy
d2c5ae8aa9 Merge pull request #1090 from proddy/dev
remove project router, make everything from root
2023-02-28 18:52:01 +01:00
Proddy
9e3c4134e1 remove project router, make everything from root 2023-02-28 18:48:00 +01:00
Proddy
c8ea1d0c8a Merge pull request #1088 from proddy/dev
show name not number in device dialog info box
2023-02-28 17:52:32 +01:00
Proddy
bba5c5472c fix device type name in pop up info dialog 2023-02-28 17:51:39 +01:00
Proddy
29c3923a52 package update 2023-02-28 17:51:22 +01:00
Proddy
1c20929886 package updates 2023-02-28 09:16:29 +01:00
Proddy
0078a2ef8e formatting 2023-02-28 09:16:24 +01:00
Proddy
ee1c70f608 remove obsolete defaults 2023-02-28 08:47:07 +01:00
Proddy
e29bc4e56a Merge pull request #1085 from MichaelDvP/dev
add TR (some translations still missing) #907
2023-02-28 08:43:12 +01:00
MichaelDvP
e1595daeb9 Merge branch 'tech-upgrade' into dev 2023-02-28 07:17:22 +01:00
Proddy
77e85f02de Merge pull request #1084 from proddy/dev
merge with tech-upgrade
2023-02-27 16:44:50 +01:00
Proddy
557892bbc7 updates for 3.6.0-dev-0 2023-02-27 16:38:56 +01:00
Proddy
f3bfc6f126 Merge remote-tracking branch 'origin/tech-upgrade' into dev 2023-02-27 16:38:38 +01:00
MichaelDvP
5937a0e3b2 Merge branch 'tech-upgrade' of https://github.com/emsesp/EMS-ESP32 into tech-upgrade 2023-02-27 15:22:26 +01:00
MichaelDvP
94749e4615 Add TR language (some still missing) #907 2023-02-27 15:22:17 +01:00
Proddy
ea093844b4 minor update 2023-02-27 14:35:43 +01:00
Proddy
4d496de488 Merge pull request #1082 from MichaelDvP/tech-upgrade
schedule commands timing, retry
2023-02-27 13:53:49 +01:00
Proddy
31bfc5388c Merge branch 'tech-upgrade' into tech-upgrade 2023-02-27 13:49:02 +01:00
MichaelDvP
e9cc86e072 scheduler-command: use const char*, publish response for queries 2023-02-27 12:04:41 +01:00
proddy
9ed32307d3 fix lint warnings 2023-02-27 10:51:41 +01:00
proddy
23cfdb95f2 update package 2023-02-27 10:51:33 +01:00
proddy
71ff695290 update packages 2023-02-27 10:51:00 +01:00
MichaelDvP
f48aeb0917 schedule commands timing, retry 2023-02-27 09:16:41 +01:00
Proddy
84c90dd587 align timing with EMS-ESP 2023-02-26 20:59:03 +01:00
Proddy
4c186606bd hide MAC and IPs 2023-02-26 19:16:53 +01:00
Proddy
2ffa5fbe36 fix system log in standalone 2023-02-26 16:43:56 +01:00
Proddy
471d18f7fa add automatic id so table renders 2023-02-26 15:20:55 +01:00
Proddy
0985cea3d3 add writeback for scheduler 2023-02-26 15:20:28 +01:00
Proddy
f0509ae333 remove ntp message 2023-02-26 15:20:18 +01:00
Proddy
127a20b29c update eslint 2023-02-26 13:45:07 +01:00
Proddy
f179030d6c replace deprecated JS substr() 2023-02-26 13:44:51 +01:00
Proddy
76db7b3d21 back-end implementation 2023-02-26 12:58:49 +01:00
Proddy
00a3d67707 calling backend services 2023-02-26 12:58:37 +01:00
Proddy
a165dd51c4 remove ntp, dow starts on Sun to match tm_weekday in C's time library 2023-02-26 12:58:11 +01:00
Proddy
05eaa3ce54 fix schedule endpoints typo 2023-02-26 12:57:19 +01:00
Proddy
d652bca32d package update 2023-02-26 12:57:03 +01:00
Proddy
0464030544 schedule upload & download feature 2023-02-26 12:56:48 +01:00
Proddy
5927781a6b added stub for webSchedulerService 2023-02-25 22:24:11 +01:00
Proddy
763efaf4af bump 2023-02-25 22:23:50 +01:00
Proddy
d9f4ce7347 added string2minutes() 2023-02-25 22:23:41 +01:00
Proddy
218cab3935 updated 2023-02-25 22:23:22 +01:00
Proddy
81c6351c93 added tester for minutes conversion 2023-02-25 22:23:11 +01:00
Proddy
dce29857d3 added test to convert HH:MM to minutes for scheduler 2023-02-25 22:22:59 +01:00
Proddy
3b9da0ecfd GET and POST now same for scheduler 2023-02-25 22:22:41 +01:00
Proddy
a728a4d779 minor improvements to add dialog 2023-02-25 18:40:31 +01:00
Proddy
9bae82592f add ADD and put in a validator as cmd can't be empty 2023-02-25 18:11:37 +01:00
Proddy
50400459ee add NTP check to scheduler 2023-02-25 16:13:47 +01:00
Proddy
2ede730cfb Scheduler #701 2023-02-25 14:06:40 +01:00
proddy
45609e30ea fix axios include 2023-02-24 12:13:26 +01:00
Proddy
20f817410f default OTA disabled, saves 1.5KB heap 2023-02-23 21:38:44 +01:00
Proddy
e276025d60 change imports suggested by lint 2023-02-23 20:15:29 +01:00
Proddy
a89a7b5430 fix uniq_id for HA sensors 2023-02-23 19:57:35 +01:00
Proddy
044807accb bump version 2023-02-23 19:57:21 +01:00
Proddy
3e9f63a913 cleanup 2023-02-23 19:29:38 +01:00
Proddy
c80470d8f5 cleanup unused variables 2023-02-23 19:28:32 +01:00
Proddy
55d19bbc2d comment 2023-02-23 19:28:11 +01:00
Proddy
a3f4376d8f removed DV_HA_CONFIG_RECREATE 2023-02-23 19:27:59 +01:00
Proddy
2466df0c3d climate renamed to haclimate and given a shortname 2023-02-23 19:27:25 +01:00
Proddy
425cf33f74 added back MAX_MQTT_MESSAGES 2023-02-23 19:26:58 +01:00
Proddy
077a9937fe comment 2023-02-23 19:26:45 +01:00
Proddy
e6d41f6697 added Michael's changes 2023-02-23 19:26:25 +01:00
Proddy
59791cdaa5 added Michael's changes 2023-02-23 19:25:40 +01:00
Proddy
c7a76f90ea updated tests for mqtt 2023-02-23 19:25:28 +01:00
Proddy
605e3c26d7 formatting 2023-02-23 19:25:08 +01:00
Proddy
a59fc3f3e7 copied in Michael's change 2023-02-23 19:24:53 +01:00
Proddy
b5667c17d3 package update 2023-02-23 19:24:37 +01:00
Proddy
bc80aaea63 rename publish functions to queue_* because that is what they do 2023-02-22 20:54:38 +01:00
Proddy
6746c9a2d3 updated comments, remove DV_HA_CONFIG_RECREATE 2023-02-22 19:45:56 +01:00
Proddy
11ad4d8a0f merge with https://github.com/emsesp/EMS-ESP32/pull/1077 2023-02-22 19:01:58 +01:00
Proddy
752f0177cf make it compile standalone 2023-02-22 13:16:20 +01:00
Proddy
2078305ff4 use heap check instead of message queue - https://github.com/emsesp/EMS-ESP32/issues/1067 2023-02-22 13:08:53 +01:00
Proddy
924502113e functions don't need to return std::shared_ptr<const MqttMessage> 2023-02-22 13:08:07 +01:00
Proddy
c95e804733 add brands as flash strings 2023-02-22 13:07:24 +01:00
proddy
6a356d4a45 show how to override platform 2023-02-22 09:38:48 +01:00
proddy
2bfcbd8fb1 added comments 2023-02-22 09:36:59 +01:00
proddy
19bfcea412 EMSESP_TEST uses EN language only 2023-02-22 09:36:51 +01:00
proddy
0d7a013bba update elint 2023-02-22 09:36:34 +01:00
Proddy
931b153290 now I know why michael shortened the names ! 2023-02-21 22:21:30 +01:00
Proddy
9f91fffcab bump version 2023-02-21 21:55:04 +01:00
Proddy
6aea27e30f tidy up EMSESP_DEBUG and EMSESP_TEST 2023-02-21 21:49:21 +01:00
Proddy
134f2671fb compiling with EMSESP_DEBUG only sends to DEBUG log 2023-02-21 21:28:49 +01:00
Proddy
6438d1ee57 compile with EMSESP_TEST to run tests (not DEBUG) 2023-02-21 21:28:19 +01:00
Proddy
a6a1d44204 Merge pull request #1075 from MichaelDvP/tech-upgrade
HA config recreate #1067
2023-02-21 15:37:42 +01:00
MichaelDvP
cf97c7eb59 HA config recreate #1067 2023-02-21 14:00:43 +01:00
Proddy
e8713ff260 go back to espressif 5.2.0 2023-02-21 12:56:30 +01:00
Proddy
993724d945 use en only in debug 2023-02-21 12:53:31 +01:00
Proddy
8c89fdec95 package update 2023-02-21 12:53:31 +01:00
proddy
a49bfec7d9 fix write back on standalone 2023-02-21 09:27:14 +01:00
Proddy
050ecd9290 Merge pull request #1069 from MichaelDvP/tech-upgrade
fix for #1067 and ems-esp restarting
2023-02-20 19:03:43 +01:00
MichaelDvP
395bd604ce fix for #1067 and ems-esp restarting 2023-02-20 18:30:56 +01:00
Proddy
4f91c78b4f Merge pull request #1068 from MichaelDvP/tech-upgrade
fix for #1067
2023-02-20 18:10:20 +01:00
Proddy
20405ae9ab updated comment 2023-02-20 18:09:39 +01:00
Proddy
c18640eab0 brand_to_string to brand_to_char. use const char * where possible 2023-02-20 18:09:32 +01:00
Proddy
854584138b update memory test 2023-02-20 18:08:41 +01:00
MichaelDvP
2d129f6233 recreate instaed of remove/recreate HA config when mqtt reconnecs #1067 2023-02-20 17:30:12 +01:00
MichaelDvP
4aa3e27880 fix appfree display for asymmetric partitions. 2023-02-20 17:27:51 +01:00
Proddy
094387335d minor package updates again 2023-02-20 14:25:03 +01:00
Proddy
ff1cf12e0c Merge pull request #1038 from proddy/dev
3.5.1
2023-02-19 11:29:46 +01:00
Proddy
2f44beccc2 typesafe-i18@5.24.1 2023-02-19 11:29:03 +01:00
Proddy
558e48f671 update gh issue template 2023-02-19 11:28:08 +01:00
Proddy
e60048f5fb v3.5.1 2023-02-19 11:27:58 +01:00
Proddy
6ad1dd1a77 update packages 2023-02-19 11:27:49 +01:00
Proddy
4bfbdf31e4 gh issue template update 2023-02-19 11:23:42 +01:00
Proddy
71c2b4b7e8 package updates 2023-02-19 11:23:31 +01:00
Proddy
292f743b14 Update bug_report.md 2023-02-19 11:18:08 +01:00
Proddy
dd6dfffd57 Delete questions---troubleshooting.md 2023-02-19 10:49:52 +01:00
Proddy
ec705a5307 Delete feature_request.md 2023-02-19 10:49:45 +01:00
Proddy
f45f071710 Create config.yml 2023-02-19 10:49:32 +01:00
Proddy
4630e4f4a0 #911 2023-02-18 13:13:00 +01:00
Proddy
d872ce0ab6 fix apply updates after change #911 2023-02-18 10:49:18 +01:00
Proddy
c04b032abf update packages 2023-02-18 10:48:54 +01:00
proddy
b218bf1d2e hardcode espressif 6.0.1 2023-02-13 22:46:03 +01:00
proddy
18f787703a update packages 2023-02-13 22:45:52 +01:00
proddy
a3719b12e5 fix mqtt enabled check 2023-02-13 22:45:35 +01:00
Proddy
8c91311c1e use node v18 2023-02-12 16:27:46 +01:00
proddy
096336042e minor changes to yarn 2023-02-12 15:35:51 +01:00
Proddy
4ca25fcfc2 experiment with moving from npm to yarn 2023-02-12 14:14:08 +01:00
proddy
12b4bd3795 Workaround for better Domoticz MQTT intergration? #904 2023-02-11 23:26:15 +01:00
proddy
ba96d587ab update 2023-02-11 23:25:30 +01:00
proddy
411f3be3aa fix native compiling on OSX 2023-02-11 20:53:46 +01:00
Proddy
ffacefb792 update copyright year 2023-02-11 19:06:02 +01:00
Proddy
2d1689b79a make syslog work again 2023-02-11 19:05:43 +01:00
Proddy
78e0d30687 add publish command to mqtt code 2023-02-11 18:46:25 +01:00
Proddy
deb0952266 fix syslog 2023-02-11 18:46:10 +01:00
Proddy
9f77cfd0bf formatting 2023-02-11 18:45:41 +01:00
Proddy
767c6da325 move log command to main context 2023-02-11 18:45:20 +01:00
Proddy
f034d908b6 add comment 2023-02-11 18:45:05 +01:00
Proddy
bc391d014e update packages 2023-02-11 18:43:46 +01:00
Proddy
d42cd8ebf9 remove comment 2023-02-11 18:43:38 +01:00
Proddy
ac5635b671 F2 calls 'show values' 2023-02-11 12:23:56 +01:00
Proddy
c76b250c3b fix warning when building native on windows 2023-02-11 12:14:46 +01:00
Proddy
4630287924 fix warning when building native on windows 2023-02-11 12:14:28 +01:00
proddy
d3cae8ec52 update packages 2023-02-11 10:40:15 +01:00
proddy
149fa72566 remove extra brackets 2023-02-11 10:40:09 +01:00
Proddy
a0d13df033 fix react-virtualized-auto-sizer to "1.0.7" 2023-02-10 20:33:24 +01:00
Proddy
c9a3fad9eb updates 2023-02-10 20:30:35 +01:00
Proddy
eeb96199f9 6.20.1 2023-02-10 20:27:45 +01:00
Proddy
765b1a1b39 esp32s3 2023-02-10 20:27:23 +01:00
Proddy
78eef7cb9d cleanup 2023-02-10 20:27:13 +01:00
Proddy
1ad9f8d9cf use descriptive telegrams when watching 2023-02-10 20:27:05 +01:00
Proddy
36734a4768 change version 2023-02-09 22:41:53 +01:00
Proddy
d0f91c5f43 add hosted for online demo 2023-02-09 22:41:47 +01:00
Proddy
1cd980f46a use espressif 6.0.1 and c+17 for testing 2023-02-09 20:38:35 +01:00
Proddy
74162ab4e7 bump to tec-3 2023-02-09 20:38:21 +01:00
Proddy
0ef5579540 update package 2023-02-09 20:38:14 +01:00
Proddy
9501f02aa2 replace React bunder based on webpack with Vite #952 2023-02-09 20:23:31 +01:00
Proddy
ea8850f8bd update packages 2023-02-07 21:30:30 +01:00
Proddy
949842118b add BundleAnalyzerPlugin (optional) 2023-02-07 21:30:22 +01:00
Proddy
a4d31711a0 use lodash-es to save space 2023-02-07 21:29:50 +01:00
Proddy
94f0d040ea smaller icon.png to save space 2023-02-07 21:29:28 +01:00
Proddy
bb6e2b9336 Update CHANGELOG_LATEST.md 2023-02-06 22:34:08 +01:00
Proddy
d0166f7f12 Update CHANGELOG.md 2023-02-06 22:33:16 +01:00
Proddy
3cef6d7a65 merge PR 944 - https://github.com/emsesp/EMS-ESP32/pull/947/files 2023-02-06 22:27:55 +01:00
Proddy
6a1bc00f04 Merge pull request #949 from proddy/dev
3.6.0-dev.0
2023-02-06 22:17:12 +01:00
Proddy
bee4b3970d 3.6.0-dev.0 2023-02-06 22:16:45 +01:00
Proddy
f3858546de Merge branch 'origin/dev' 2023-02-06 21:58:27 +01:00
Proddy
de40cb8920 Merge pull request #948 from proddy/dev
prepare 3.5.0
2023-02-06 21:29:00 +01:00
Proddy
8ddf1315eb update packages 2023-02-06 21:28:05 +01:00
Proddy
00d5b16de7 update screenshots 2023-02-06 21:27:57 +01:00
Proddy
0b02bb417a Merge pull request #947 from MichaelDvP/dev
add boiler pump operating mode #944, dev.18
2023-02-06 21:09:13 +01:00
MichaelDvP
d68260411d version to dev.18, changelog 2023-02-06 14:22:41 +01:00
MichaelDvP
7227937660 add boiler pump operating mode #944 2023-02-06 14:19:58 +01:00
proddy
2ac3640760 fix package conflicts 2023-02-05 22:12:27 +01:00
proddy
71de48fd32 Warn user in WebUI of unsaved changes #911 2023-02-05 18:53:13 +01:00
Proddy
834eceab16 update packages 2023-02-05 11:13:55 +01:00
Proddy
20de1734d1 formatting 2023-02-05 10:58:48 +01:00
Proddy
63e734b0aa in EMSESP_DEBUG only use EN language to save space 2023-02-05 10:58:32 +01:00
Proddy
cf53c56ac7 add listDir to debug too 2023-02-05 10:58:01 +01:00
Proddy
e82433c530 formatting 2023-02-05 10:57:28 +01:00
Proddy
3a4e6aa852 only publish if MQTT is enabled 2023-02-05 10:57:20 +01:00
Proddy
6c46770330 merge PR 940 - https://github.com/emsesp/EMS-ESP32/pull/940 2023-02-04 14:25:29 +01:00
Proddy
e66e2c40a6 Merge pull request #941 from proddy/dev
minor cleanup
2023-02-04 14:09:20 +01:00
Proddy
39bc0d5fb2 update packages 2023-02-04 14:08:49 +01:00
Proddy
50e73e2a04 formatting 2023-02-04 14:08:41 +01:00
Proddy
efa9875744 fix bug with custom name 2023-02-04 14:08:25 +01:00
Proddy
8182b0e95a Merge pull request #940 from MichaelDvP/dev
Entitiy blacklist (remove from mem, #891) and RC20/30 modes/seltemps #932
2023-02-04 13:53:21 +01:00
MichaelDvP
6091621858 update pkg 2023-01-31 11:42:17 +01:00
MichaelDvP
ba568581ff Merge branch 'dev' of https://github.com/emsesp/EMS-ESP32 into dev 2023-01-31 11:40:04 +01:00
MichaelDvP
c78190c3a0 version b17, changelog 2023-01-31 09:24:22 +01:00
MichaelDvP
84c968e053 RC20/30 temperature for mode off, temp settings inline 2023-01-31 09:24:03 +01:00
Proddy
6b7da4068c Merge pull request #939 from pswid/dev
added hyperlink to the EMS-ESP web interface in Home Assistant (IPv4)
2023-01-30 20:21:32 +01:00
Proddy
6dc63907f1 merge PR https://github.com/emsesp/EMS-ESP32/pull/939 2023-01-30 20:21:28 +01:00
pswid
e3e14e7a66 fixed NTP status in HA (see #931)
I missed this one
2023-01-30 19:50:36 +01:00
pswid
997ced3938 system entities moved to "diagnostic" category in HA 2023-01-30 19:37:50 +01:00
proddy
e2f149caf9 package update 2023-01-30 19:01:50 +01:00
proddy
da94fc052d fix compile errors on OSX for standalone 2023-01-30 19:01:43 +01:00
pswid
b18da9064b fixed link to the EMS-ESP in HA
prefix "http:// " is needed though
2023-01-30 18:31:57 +01:00
Proddy
77a6304fc3 merge PR https://github.com/emsesp/EMS-ESP32/pull/936 2023-01-30 17:14:53 +01:00
Proddy
7c44f22c45 add comment 2023-01-30 17:04:44 +01:00
Proddy
d39d62c2f8 show mqtt disconnect error in log, on first connect only 2023-01-30 17:04:33 +01:00
Proddy
8f68163f90 fix exit not exiting in standalone mode 2023-01-30 17:04:10 +01:00
pswid
b3ee5f4d9a added link to the EMS-ESP web interface in HA (IPv4 only) 2023-01-30 12:05:16 +01:00
MichaelDvP
5398abb074 Merge branch 'dev' of https://github.com/emsesp/EMS-ESP32 into dev 2023-01-30 10:41:29 +01:00
MichaelDvP
65397d3e1e RC20/RC30 modes, #932 2023-01-30 10:41:00 +01:00
Proddy
887d53528b Merge pull request #937 from proddy/dev
fix dump_value_info()
2023-01-30 09:29:13 +01:00
Proddy
1603eafbb2 fix dump_value_info() 2023-01-30 09:22:03 +01:00
Proddy
33bcb54aaf Merge pull request #936 from pswid/dev
fixed 1/0 and true/false MQTT/API format options with HA enabled (#931)
2023-01-30 08:26:17 +01:00
pswid
d36f87707a removed "mode"+"step" in HA discovery for BOOL type entities 2023-01-29 19:08:17 +01:00
pswid
226c1fd6c5 fixed 1/0 and true/false MQTT/API format options with HA enabled (#931)
furthermore variable names in the HA discovery payload has been abbreviated according to: https://www.home-assistant.io/integrations/mqtt/#discovery-payload
2023-01-29 18:52:13 +01:00
Proddy
74b961ab29 Merge pull request #935 from proddy/dev
update packages, minor bug in
2023-01-29 12:17:53 +01:00
Proddy
e4358ba489 uptime in HA should be a string 2023-01-29 12:16:34 +01:00
Proddy
26522cb061 package update 2023-01-29 12:16:14 +01:00
Proddy
7a2038e124 uptime should be a string 2023-01-29 12:09:54 +01:00
Proddy
e98d84efdb update packages 2023-01-29 12:09:35 +01:00
Proddy
7faffafd8a remove duplicate cmdfunction_p 2023-01-29 12:09:27 +01:00
Proddy
bedfd3ee30 revert back to 5.2.0 2023-01-28 16:20:28 +01:00
Proddy
94473bdeaa merge PL translation update - https://github.com/emsesp/EMS-ESP32/pull/929 2023-01-28 16:20:16 +01:00
MichaelDvP
be128da9e0 Merge branch 'dev' of https://github.com/emsesp/EMS-ESP32 into dev 2023-01-28 15:53:31 +01:00
Proddy
381afcbb6d Merge pull request #929 from pswid/dev
PL translation update
2023-01-28 15:48:22 +01:00
MichaelDvP
1dc008855e Moduline 400 manual temp, #932 2023-01-28 15:48:16 +01:00
MichaelDvP
bbf4431b5f allow change customization device without reboot 2023-01-28 15:15:21 +01:00
MichaelDvP
c38ad8e382 allow upload of smaller loader bin 2023-01-28 15:13:18 +01:00
Proddy
59af1fd62a use espressif32 6.0.0 2023-01-28 12:19:28 +01:00
Proddy
55ae0bec93 Show MAC address without connecting to network #933 2023-01-28 12:19:13 +01:00
Proddy
64cb509d3b show MAC for ETH always 2023-01-27 18:00:52 +01:00
Proddy
9d67a56f29 ignore web build analysis files 2023-01-27 17:57:36 +01:00
Proddy
b5ee7100f4 remove showing MAC 2023-01-27 17:57:20 +01:00
Proddy
ee1515d787 testing brotlin compression 2023-01-27 17:57:05 +01:00
Proddy
6f0e98b1a1 testing brotlin compression 2023-01-27 17:56:50 +01:00
Proddy
b8e4430a14 testing with brotlin compression 2023-01-27 17:56:36 +01:00
Proddy
65e3187418 package updates 2023-01-27 17:56:19 +01:00
Proddy
ea48cf3722 show MAC address on startup, before connection 2023-01-25 21:37:29 +01:00
Proddy
2c0ad1a4cc minor changes to script 2023-01-25 21:28:07 +01:00
Proddy
7de8fd8b53 update packages 2023-01-25 21:22:18 +01:00
Proddy
7eddf4882c change help string 2023-01-25 21:22:07 +01:00
Proddy
58e95610e8 show MAC address if SSID is empty or ethernet present but not connected 2023-01-25 21:10:06 +01:00
pswid
1416bad9cc removed % from max log buffer size setting 2023-01-24 20:00:00 +01:00
MichaelDvP
0e0e9eccf1 Add blacklist/remove entities #891 2023-01-24 18:37:52 +01:00
Proddy
0dcc953100 add timing 2023-01-23 23:21:07 +01:00
Proddy
38fffd4932 add debug line to show we're using dummy entity values 2023-01-23 23:20:44 +01:00
Proddy
17c7ae7d7c fix syslog starting 2023-01-23 23:20:27 +01:00
Proddy
15760117ee add comment so we remember the reserve functions 2023-01-23 23:20:16 +01:00
Proddy
1cd5e0781d rename Saved to Updated 2023-01-23 18:52:10 +01:00
Proddy
f64fbd1040 added ping test 2023-01-23 15:59:54 +01:00
Proddy
ceb9246cf2 reset dirtyflags after successful save 2023-01-23 15:59:43 +01:00
pswid
032a631b61 capital first letter in the names of special EMS devices
should eventually be translated
2023-01-23 10:50:32 +01:00
pswid
5d0f6b665b SAVE instead of ADD in user edit box 2023-01-23 10:45:32 +01:00
pswid
4bbf096350 PL translation update (entities) 2023-01-23 10:43:26 +01:00
pswid
e1a950ec21 PL translation update 2023-01-23 10:40:47 +01:00
proddy
ff14fab492 add missing sv translations 2023-01-22 22:04:23 +01:00
Proddy
df66d0441c merge PR #926 - Additional SV translations#2 2023-01-22 21:20:20 +01:00
Proddy
ede8e7dfce Merge pull request #926 from mvjt/dev
Additional SV translations#2
2023-01-22 21:17:53 +01:00
proddy
4edfa4d244 HA - use box for numbers 2023-01-22 19:11:27 +01:00
Proddy
9d155d6a0e Merge pull request #927 from proddy/dev
HA use box for numbers now that HA supports this
2023-01-22 19:10:12 +01:00
proddy
1fa92eec57 HA use box for numbers now that HA supports this 2023-01-22 19:09:41 +01:00
Martin Hammarberg
7fc28fd1bb Additional SV translations#2 2023-01-22 17:33:12 +01:00
Proddy
bb24da92e4 merge PR #923 - fixes and the tested heatpump/heatsource entities by mvdp 2023-01-22 17:08:17 +01:00
Proddy
dd338f5f4b Merge pull request #925 from mvjt/dev
Additional SV translations
2023-01-22 17:03:33 +01:00
Martin Hammarberg
486bc5ac28 Additional SV translations 2023-01-22 16:59:08 +01:00
Proddy
68215f37f5 Merge pull request #924 from proddy/dev
preparing for 3.5.0 stable
2023-01-22 13:31:30 +01:00
Proddy
4449d3fce8 formatting 2023-01-22 13:30:19 +01:00
Proddy
cbb20439ed formatting 2023-01-22 13:29:05 +01:00
Proddy
ec357b71f1 formatting 2023-01-22 13:27:37 +01:00
Proddy
5acdb4dc31 default OTA is disabled (to save memory) 2023-01-22 13:27:30 +01:00
Proddy
dd959a7316 update packages 2023-01-22 13:27:20 +01:00
Proddy
0b6dbe8bfa default OTA is disabled (to save memory) 2023-01-22 13:27:03 +01:00
Proddy
78e6263a2e Merge pull request #923 from MichaelDvP/dev
fixes and the tested heatpump/heatsource entities
2023-01-22 13:06:23 +01:00
Proddy
7f5e3d3b4c merge PR #901 - added dhw alternating operation 2023-01-22 12:17:39 +01:00
Proddy
66d5d3db8c default back to c+11 2023-01-22 12:16:49 +01:00
MichaelDvP
3b2a4d1eb4 Merge branch 'dev' of https://github.com/emsesp/EMS-ESP32 into dev_ 2023-01-22 10:48:37 +01:00
Proddy
485195e035 Merge pull request #901 from pswid/dev
added dhw alternating operation
2023-01-22 10:12:47 +01:00
MichaelDvP
d735f397d8 fix crash with non-en language 2023-01-21 14:22:49 +01:00
pswid
5e41481e27 capitalize more special chcaracters 2023-01-21 12:09:17 +01:00
MichaelDvP
d52c54d6fb update changelog, v3.5.0-dev.16 2023-01-21 11:34:17 +01:00
MichaelDvP
36c85eed5e change heatingpump2Mod to absBurnPow, #908 2023-01-21 11:31:02 +01:00
MichaelDvP
b09deb1494 add EMS+ wwCurFlow #918 2023-01-20 09:18:05 +01:00
proddy
71d22f6768 default to arduino/espressif core 6.0.0 2023-01-19 16:24:43 +01:00
proddy
b68e9dfd4b formatting 2023-01-19 16:14:32 +01:00
Proddy
b4362a4539 Merge pull request #909 from MichaelDvP/tech-upgrade
weblog send queue one by one, no json buffer needed
2023-01-19 16:06:36 +01:00
proddy
4e783d414c merge PR #909 (weblog send queue one by one, no json buffer needed #909) 2023-01-19 16:05:43 +01:00
proddy
9fe6b9d0e5 fix customizations Warn user in WebUI of unsaved changes #911 2023-01-19 15:51:27 +01:00
MichaelDvP
cb4cce119b map device type of integrated devices #917 2023-01-19 09:32:36 +01:00
proddy
665c33d1a9 updated packages 2023-01-19 09:22:37 +01:00
proddy
0ed3bfff4a rename SAVE to APPLY, show number of updates - #911 2023-01-19 09:11:59 +01:00
proddy
9ba0c6df37 add missing items 2023-01-19 09:11:30 +01:00
proddy
312b0d4665 update package 2023-01-19 09:11:12 +01:00
proddy
7acbda4cda un-used, saving for later 2023-01-19 09:10:59 +01:00
proddy
247fc6be8e remove unused colormode 2023-01-19 09:10:40 +01:00
proddy
1407a61f7a remove unused functions 2023-01-19 09:10:03 +01:00
proddy
a3c302176b formatting 2023-01-19 09:09:46 +01:00
proddy
03130d3de2 formatting 2023-01-19 09:09:34 +01:00
proddy
80d42d92db show number of edits on screen 2023-01-19 09:09:10 +01:00
proddy
115a596c1e remove import React 2023-01-19 09:08:33 +01:00
proddy
ab5815a944 remove import react 2023-01-19 09:05:01 +01:00
pswid
7e174a1b7d Fix first letter not capitalized in Polish 2023-01-18 21:43:29 +01:00
MichaelDvP
1f08940e47 add thermostat Rego 3000, TR120RF, heatpump modules, #917 2023-01-18 08:59:58 +01:00
MichaelDvP
8db5724b77 fix rounding of web number-inputs 2023-01-18 08:52:38 +01:00
MichaelDvP
a21352ae4f Check size for sneding customizations 2023-01-18 08:50:56 +01:00
MichaelDvP
a38f4978fa analogsensor publish wth single gpio number fix #915 2023-01-18 07:56:40 +01:00
pswid
4f05ddab93 fix for d72d2b3 (Polish boolean option "wł./wył.")
Because of compiler error, in Polish translation,  we don't use uppercase boolean option "WŁĄCZONO/WYŁĄCZONO" but "wł./wył." instead.
2023-01-15 13:00:22 +01:00
pswid
bbbeb155f0 tags in entity IDs (long format) always in English
now in mqtt discovery topics you can see e.g:
"uniq_id": "thermostat_OG1_mode_type" (for Polish lang.)

but should be:
"uniq_id": "thermostat_hc1_mode_type",
2023-01-13 21:45:29 +01:00
Proddy
0946254764 adjustments to syslog (still not 100% working) 2023-01-13 18:17:54 +01:00
Proddy
316dfd02e4 fix telnet not starting 2023-01-13 18:17:31 +01:00
Proddy
c35833fab1 moved dummy entity values to consts 2023-01-13 18:17:19 +01:00
MichaelDvP
81cd6ed764 weblog send queue one by one, no json buffer needed 2023-01-13 13:44:16 +01:00
proddy
63ff517b30 show Not Enabled like in MQTT instead of 'disabled' 2023-01-12 23:09:02 +01:00
proddy
30a2a9aa2a updated test runner 2023-01-12 23:08:37 +01:00
Proddy
cfc8570dca formatting 2023-01-12 17:48:12 +01:00
Proddy
7841b44b43 formatting 2023-01-12 17:41:24 +01:00
Proddy
e3f51b34b5 added comments 2023-01-12 17:40:18 +01:00
Proddy
dcedced8fe rename "HA climate config creation" to describe the entity name 2023-01-12 17:40:07 +01:00
Proddy
e437597ef4 typo 2023-01-12 17:39:36 +01:00
Proddy
6d3f768e92 in debug, don't show empty payloads 2023-01-12 17:39:24 +01:00
Proddy
c114581400 formatting 2023-01-12 17:39:14 +01:00
Proddy
fbfd792416 add back TZ to syslog 2023-01-12 17:39:07 +01:00
Proddy
755f1d17d6 added FS libs 2023-01-12 17:38:57 +01:00
Proddy
3e4f7fdc17 error handling in tests 2023-01-12 17:38:50 +01:00
MichaelDvP
f6238cd6ab rename auxmaxtemp->auxmaxlimit, add auxlimitstart 2023-01-12 17:37:00 +01:00
Proddy
754f4e8244 add arguments for test runner 2023-01-12 11:33:51 +01:00
Proddy
a2925011ed update test runner 2023-01-12 11:04:24 +01:00
MichaelDvP
d658b67e93 add fluegastemp #906 2023-01-12 07:31:57 +01:00
Proddy
9b7b5ebfa8 exclude most of tests when not in standalone 2023-01-11 23:35:31 +01:00
Proddy
b54777bccb add debug comment 2023-01-11 23:34:52 +01:00
Proddy
17b9b8ec3a script to perform memory test 2023-01-11 23:34:41 +01:00
Proddy
3dc2ab54ac systematically fetch heap mem settings, before allocating buffers so console and web show same results 2023-01-11 23:34:27 +01:00
proddy
97451d2b7a enable API for test 2023-01-11 20:47:36 +01:00
MichaelDvP
e2c675d9a5 add back wwcircmode off (not writable) #905 2023-01-11 18:40:33 +01:00
MichaelDvP
3e3a600a60 remove/recreate HA config for dallas/analog on change #888 2023-01-11 18:38:07 +01:00
MichaelDvP
1f0d2b147b Add ESP32S3 (Liligo) as S3 Mini 2023-01-11 18:33:44 +01:00
Proddy
c99aaf1e7d add debug 2023-01-10 22:19:20 +01:00
Proddy
7e87dc9de6 add back climate 2023-01-10 22:19:13 +01:00
Proddy
f556fb61ca include shortname in console show values 2023-01-10 22:19:04 +01:00
Proddy
84dca5e794 add back climate config creation 2023-01-10 22:18:34 +01:00
Proddy
60d4997985 optimize tests for ESP32 2023-01-10 22:18:19 +01:00
Proddy
d2900c347a typo/text changes 2023-01-10 22:18:09 +01:00
MichaelDvP
285b0dc01d package update 2023-01-10 17:38:51 +01:00
MichaelDvP
172153b840 fix scaling of auxMaxTemp #902 2023-01-10 17:19:04 +01:00
MichaelDvP
ce71b8b5f6 Add back "HA climate config creation", #903 2023-01-10 17:18:15 +01:00
pswid
d72d2b33bd fix Polish boolean option "wł./wył." not working
Because of compiler error, in Polish translation,  we don't use uppercase boolean option "WŁĄCZONO/WYŁĄCZONO" but "wł./wył." instead.
2023-01-10 12:04:27 +01:00
pswid
d15fbe7801 added dhw alternating operation 2023-01-10 11:50:02 +01:00
proddy
3627f884c3 file updates 2023-01-09 22:03:07 +01:00
proddy
e89260b8b0 added 'set mqtt on|off' for easier debugging 2023-01-09 21:49:59 +01:00
proddy
ab6267e122 update packages 2023-01-09 21:49:40 +01:00
Proddy
731ec684f0 loads 1 boiler/160 entities, crash with MQTT (no Discovery) 2023-01-08 21:44:04 +01:00
Proddy
bbf43a0744 updates packages 2023-01-08 21:43:32 +01:00
Proddy
ae51189953 minor changes 2023-01-08 19:51:36 +01:00
Proddy
9b54c1aa04 minor changes 2023-01-08 19:51:30 +01:00
MichaelDvP
caab1cae39 update packages 2023-01-08 15:20:37 +01:00
Proddy
da04a0d161 remove logout and t command 2023-01-08 15:16:54 +01:00
Proddy
9351b6c44a remove logout 2023-01-08 15:16:34 +01:00
Proddy
5d6231f51c removed unused strings 2023-01-08 15:16:24 +01:00
Proddy
945697c538 add max alloc 2023-01-08 15:16:11 +01:00
MichaelDvP
dced355a29 Add silentmode from/to #896 2023-01-08 14:12:53 +01:00
MichaelDvP
f133fdfb1c Allow reboot to smaller OTA partition or factory partition 2023-01-08 14:12:12 +01:00
proddy
687c76703b standalone test for memory optimizations (200+ entities) 2023-01-08 09:42:48 +01:00
proddy
e5558f7fa9 remove Serial 2023-01-07 21:28:42 +01:00
proddy
60b424705d replace STANDALONE_DUMP with a parameter set during tests call test_test_set_all_active 2023-01-07 21:28:33 +01:00
proddy
6ed378086b remove Serial 2023-01-07 21:26:23 +01:00
proddy
66d7dde79e rename Customizaton to Customizations 2023-01-07 18:30:22 +01:00
MichaelDvP
80ea1e95ee Merge branch 'dev' of https://github.com/emsesp/EMS-ESP32 into dev_ 2023-01-07 15:33:18 +01:00
MichaelDvP
4098cef279 add 9 heatpump settings #892 (without translation) 2023-01-07 14:47:45 +01:00
proddy
c7628ac07f NUM_TAGS is used to check of overflow 2023-01-07 14:39:30 +01:00
proddy
8cd08fa765 comment 2023-01-07 14:38:58 +01:00
proddy
1f493b208c replace std::string with const char #869 2023-01-07 14:38:49 +01:00
proddy
3e8d175242 rename num_languages 2023-01-07 14:38:02 +01:00
proddy
360240ee58 fixes to num_entities 2023-01-07 14:37:46 +01:00
proddy
95c5fb7391 merge with MichaelDvP's PR 870 - https://github.com/emsesp/EMS-ESP32/pull/870 2023-01-06 21:51:17 +01:00
proddy
fcd221a9b0 ignore vscode 2023-01-06 19:38:24 +01:00
proddy
397522292c change default_envs 2023-01-06 19:38:17 +01:00
MichaelDvP
d0aac18b88 fix ignore entity, add weblog level OFF 2023-01-06 18:56:58 +01:00
Proddy
fbf799e4c4 use pio native to build standalone 2023-01-06 14:14:03 +01:00
MichaelDvP
7bb35812ff aloow flag entities not to register, test for #891 2023-01-06 13:44:02 +01:00
MichaelDvP
ad49267b29 add one entity #886 2023-01-06 09:29:13 +01:00
Proddy
88404bcb56 Merge pull request #887 from proddy/dev
README update and one change to api_data
2023-01-05 16:04:01 +01:00
Proddy
33af6ec57e update README 2023-01-05 15:56:40 +01:00
Proddy
4b3a0bf4e2 use const char * instead of arduino String 2023-01-05 15:56:26 +01:00
MichaelDvP
508dd399be add entities #886 2023-01-05 15:52:39 +01:00
Proddy
ad2dbd6fc5 formatting 2023-01-05 15:14:26 +01:00
Proddy
a51bc276b5 use new SIZES 2023-01-05 15:11:34 +01:00
Proddy
132acaf758 updated console based on latest uuid::console 2023-01-05 15:11:15 +01:00
Proddy
cd807cd035 move shell to main app, check for thread safe 2023-01-05 15:10:22 +01:00
Proddy
df547de5f6 adjusted comment 2023-01-05 15:09:55 +01:00
Proddy
e1ed362d7b optimize for uuid 2023-01-05 15:09:43 +01:00
Proddy
4cbf7e2a2d added max_alloc to heartbeat, use new SIZE names 2023-01-05 15:09:32 +01:00
Proddy
1ec00bceed use new SIZES and optimize for new uuid 2023-01-05 15:09:07 +01:00
Proddy
68ebe55ca4 remove console, remove syslog destination(host) 2023-01-05 15:08:24 +01:00
Proddy
be854ec14c 3.5.0-tec.0 2023-01-05 15:07:32 +01:00
Proddy
ca8647578b current version is 3.5.0-dev 2023-01-05 15:07:22 +01:00
Proddy
c90a1ca9ea add comment on translations 2023-01-05 15:07:10 +01:00
Proddy
45734d52af added word console 2023-01-05 15:06:49 +01:00
Proddy
da0850124c new console library handling multiple streams 2023-01-05 15:06:39 +01:00
Proddy
3eb86fd6c3 add C++17 and optional espressif 5.3.0 libs 2023-01-05 15:06:23 +01:00
Proddy
df2a0f6ec4 remove loop() from testing 2023-01-05 15:06:02 +01:00
Proddy
3b196fc90d updated uuid libs 2023-01-05 15:05:30 +01:00
Proddy
6370296c53 add comment for EMS-ESP testing 2023-01-05 15:05:12 +01:00
Proddy
6ffb0d9676 update package 2023-01-05 15:04:47 +01:00
Proddy
0e85b54cba remove PROGMEM 2023-01-05 15:04:27 +01:00
Proddy
d1b948aa56 typo 2023-01-05 15:04:18 +01:00
Proddy
5e85c4f8ec standalone optimization 2023-01-05 15:04:05 +01:00
MichaelDvP
8b2466dcde Merge pull request #870 from MichaelDvP/dev
Changes to heatsource, api, console
2023-01-05 14:48:12 +01:00
MichaelDvP
c754d19015 translate sensor device in web 2023-01-05 11:37:00 +01:00
MichaelDvP
ad680de897 Merge branch 'dev' of https://github.com/emsesp/EMS-ESP32 into dev 2023-01-05 11:19:26 +01:00
MichaelDvP
78ae4d7a7d typo, rename from #787, mark missing translations, add #883 2023-01-05 09:56:58 +01:00
Proddy
74acf2fe0f Merge pull request #885 from proddy/dev
#872
2023-01-05 09:45:55 +01:00
proddy
bab9fd8ec4 updates to Translate Device Name #872 2023-01-05 09:45:33 +01:00
Proddy
cfce36c212 small change 2023-01-03 15:00:04 +01:00
Proddy
5c6d6da4f9 update packages 2023-01-03 14:50:56 +01:00
Proddy
5005d06507 Translate Device Name #872 2023-01-03 14:50:50 +01:00
Proddy
9a09062a84 bump version 2023-01-03 14:48:57 +01:00
Proddy
6dc993a276 add note to investigate xTaskSuspend and static buffer size 2023-01-03 14:48:48 +01:00
Proddy
c45ceec33b remove comment 2023-01-03 14:48:20 +01:00
Proddy
c28de99907 remove comments 2023-01-03 14:48:08 +01:00
Proddy
b587c08768 tag missing translations 2023-01-03 14:47:57 +01:00
MichaelDvP
71043963e7 pvCooling, pvEnable, fix #878 2023-01-02 21:40:50 +01:00
MichaelDvP
04b17a15bb Register 0x68/0x69 as cascaded controller for testing! 2023-01-02 16:42:55 +01:00
MichaelDvP
4aa9d11574 calculate command ids from tag names 2023-01-02 15:29:33 +01:00
MichaelDvP
56b5739cfc add EMS1.0 Cascade (MC40?) 2023-01-02 15:07:44 +01:00
MichaelDvP
bb1704ed7a auxMaxTemp, pvRaise/Lower to Kelvin 2023-01-02 15:06:56 +01:00
MichaelDvP
9163fc74d4 fix reading maxHeat values 2023-01-02 12:16:46 +01:00
MichaelDvP
49113edeff add values/settings for #878, #879, #880 2023-01-02 10:45:00 +01:00
MichaelDvP
718ede8439 prevent writing empty settings 2023-01-02 10:08:00 +01:00
MichaelDvP
5ee49d8dad Merge branch 'dev' of https://github.com/emsesp/EMS-ESP32 into dev 2023-01-01 21:02:24 +01:00
MichaelDvP
c19885d730 weblog buffer size 2023-01-01 18:38:51 +01:00
Proddy
d2e64468d5 Merge pull request #876 from proddy/dev
Fix Swedish - #874 and #875
2023-01-01 17:46:46 +01:00
proddy
e3b6a3308f remove parse-ms 2023-01-01 16:49:00 +01:00
proddy
c3f88ae0c8 SE to SV - Plural of "days" under EMS Status not working for Swedish #874 2023-01-01 16:48:21 +01:00
proddy
31a5868864 remove parse-ms 2023-01-01 16:46:31 +01:00
proddy
4cb50a1dff fix #875 2023-01-01 16:46:15 +01:00
MichaelDvP
2062703565 fix #874 plural of days 2023-01-01 15:21:18 +01:00
MichaelDvP
5e00f07fd8 fix #875 typo 2023-01-01 15:20:35 +01:00
MichaelDvP
3bf2110df1 command prefix ahs1 2022-12-31 18:48:55 +01:00
MichaelDvP
c3ff60dced move hs1..hs16 to heatsource, AM200 as ahs1 2022-12-31 15:41:43 +01:00
MichaelDvP
7cf3b8f1a9 Merge branch 'dev' of https://github.com/emsesp/EMS-ESP32 into dev 2022-12-31 11:35:38 +01:00
MichaelDvP
4536d60e3e v3.5.0-dev.15 2022-12-31 11:35:25 +01:00
MichaelDvP
2f1ea4da67 output api_data to console 2022-12-31 11:25:29 +01:00
MichaelDvP
34f6b412f6 fix #841, call <device> hcx show info 2022-12-31 11:04:24 +01:00
MichaelDvP
b16a16d100 2. fix #865 2022-12-31 11:02:59 +01:00
MichaelDvP
55750844ea fix #865 2022-12-30 19:11:00 +01:00
Proddy
6c09134552 Merge pull request #866 from proddy/dev
add test for #865
2022-12-30 18:45:11 +01:00
proddy
8fa74c63c9 add test for #865 2022-12-30 18:43:51 +01:00
MichaelDvP
275ac351fe Merge branch 'dev' of https://github.com/emsesp/EMS-ESP32 into dev 2022-12-30 15:48:40 +01:00
MichaelDvP
b728827324 update packages 2022-12-30 15:46:55 +01:00
Proddy
2db99a3e32 Merge pull request #864 from proddy/dev
fix again for #828
2022-12-30 15:35:01 +01:00
Proddy
263c011a7b fix again for #828 2022-12-30 15:36:25 +01:00
Proddy
8eeebb0cef use espressif32 5.2.0 - #862 2022-12-30 11:50:52 +01:00
Proddy
f055e53987 Merge pull request #858 from proddy/dev
fix for #828 - show thermostat hc1 and mixer wwc
2022-12-30 11:48:01 +01:00
Proddy
6dce5f5931 more fixes for Create table of all EMS-ESP entities, by device, shortname/fullname and characteristics #828 2022-12-29 22:02:36 +01:00
Proddy
14cfbf78bd update package 2022-12-29 22:02:04 +01:00
Proddy
6de577839b update package 2022-12-29 22:01:48 +01:00
MichaelDvP
bfcdf3ef98 fix #860, wwactivated in offset 5 2022-12-29 18:43:35 +01:00
MichaelDvP
ffa7ddebb8 add icon, rename to AM200, show web log buffer filling, #857 2022-12-29 16:18:01 +01:00
MichaelDvP
29838a433a fix #857, add class heatsource 2022-12-29 12:16:47 +01:00
Proddy
1f1422bedd fix for #828 - show thermostat hc1 and mixer wwc 2022-12-28 22:18:43 +01:00
Proddy
d41e634611 Merge pull request #856 from MichaelDvP/dev
HA firstrun only delete config, create HA in next loop (mqtt queue)
2022-12-28 21:05:07 +01:00
MichaelDvP
22cc890cab HA firstrun only delete config, create HA in next loop (mqtt queue) 2022-12-28 18:52:18 +01:00
MichaelDvP
15e940bd2d Merge branch 'dev' of https://github.com/emsesp/EMS-ESP32 into dev 2022-12-28 18:46:37 +01:00
Proddy
c788f53bb9 Merge pull request #854 from mvjt/dev
Additional SE translations
2022-12-28 18:07:56 +01:00
mvjt
10f1c5781e Additional SE translation (corrections) 2022-12-28 16:48:58 +01:00
mvjt
75b0869a77 Additional SE translation 2022-12-28 16:37:46 +01:00
Proddy
c4c341922b Merge pull request #851 from proddy/dev
#828 dump all out entities (standalone only)
2022-12-28 15:41:07 +01:00
Proddy
43b4adc618 changes to #828 2022-12-28 15:39:34 +01:00
Proddy
bad982dbdd update ArduinoJson to latest v6.20.0 (saves 1600 bytes in flash. whoot!) 2022-12-28 13:11:57 +01:00
Proddy
5d45064c2d update ArduinoJson to latest v6.20.0 (saves 1600 bytes in flash. whoot!) 2022-12-27 21:48:03 +01:00
Proddy
6390f4aa48 update packages 2022-12-27 21:47:08 +01:00
Proddy
bb94d56bd0 Merge branch 'emsesp:dev' into dev 2022-12-27 21:19:11 +01:00
Proddy
14f3d9ab12 Merge pull request #849 from MichaelDvP/dev
fix #846, #848, remove double values hpsuctionGas/hpHotGas, stick to hpTr5/hpTr6
2022-12-27 21:16:58 +01:00
MichaelDvP
d9ecf0efb8 remove double values hpsuctionGas/hpHotGas, stick to hpTr5/hpTr6 2022-12-27 18:03:10 +01:00
Proddy
9b66b02e46 Merge branch 'emsesp:dev' into dev 2022-12-27 17:26:00 +01:00
proddy
feca878fdd Create table of all EMS-ESP entities, by device, shortname/fullname and characteristics #828 2022-12-27 16:27:57 +01:00
Proddy
f53fd74873 Merge pull request #845 from MichaelDvP/dev
fix copy/paste error
2022-12-27 11:49:23 +01:00
MichaelDvP
bbaf892523 add silentMode #831 2022-12-27 11:34:42 +01:00
MichaelDvP
451b3abddf fix copy/paste error 2022-12-27 10:46:19 +01:00
Proddy
ba03add3d3 Merge pull request #842 from MichaelDvP/dev
fix #841
2022-12-27 10:27:37 +01:00
MichaelDvP
a41de7ed1c Avoid 507, reduce buffer stepwise until it fits 2022-12-27 10:22:28 +01:00
MichaelDvP
28de5bb097 fix #841 2022-12-27 09:02:15 +01:00
Proddy
d08a1224e2 Merge pull request #840 from proddy/dev
added version upgrade/downgrade #832
2022-12-26 15:07:55 +01:00
proddy
327cf7ec75 rollback to c++11 to save on flash 2022-12-25 20:05:46 +01:00
Proddy
83438129a2 fixes #833 2022-12-25 16:50:19 +01:00
Proddy
9b3b7fc8ff Support upgrade/downgrade between versions #832 2022-12-25 16:47:17 +01:00
Proddy
8000497302 check for fresh install 2022-12-25 13:21:21 +01:00
Proddy
84589a4b40 add version to settings file 2022-12-25 13:08:59 +01:00
Proddy
067129f5a9 banner text changes 2022-12-25 13:08:17 +01:00
Proddy
ffcf98b06b move defines for board types 2022-12-25 13:08:01 +01:00
Proddy
b2f001e416 minor text change 2022-12-25 13:06:51 +01:00
Proddy
44c31c9c61 3.5.0-dev.14 2022-12-25 13:05:47 +01:00
Proddy
8aa659eee2 c++17 2022-12-25 13:05:31 +01:00
Proddy
51bf163149 change version name 2022-12-25 13:05:02 +01:00
Proddy
d5c02f6b94 added 2022-12-25 13:04:52 +01:00
Proddy
55fa968afb remove unneeded variables 2022-12-25 13:04:41 +01:00
Proddy
a9aac33a46 rename lib 2022-12-25 13:03:32 +01:00
Proddy
1f45506b37 add semver lib 2022-12-25 13:03:09 +01:00
Proddy
9d9d88b171 compile with limited set of tests (flash mem overload) 2022-12-25 13:02:54 +01:00
Proddy
291da3f7fe Merge pull request #836 from MichaelDvP/dev
fixes and enhancements #826, #835, #820
2022-12-24 17:03:01 +01:00
MichaelDvP
70cfbc3715 cleanup and formatting 2022-12-24 15:46:04 +01:00
MichaelDvP
9d80c2cea7 add generic controller without product id #835 2022-12-24 15:45:11 +01:00
MichaelDvP
a7f7959f91 typo 2022-12-24 12:21:23 +01:00
MichaelDvP
082268d9fc Merge branch 'dev' of https://github.com/emsesp/EMS-ESP32 into dev 2022-12-24 12:15:49 +01:00
MichaelDvP
945ef2f1b0 rename setting to "max buffer size", show used buffer in info 2022-12-24 12:06:27 +01:00
MichaelDvP
1f1feed3ae fix limit weblog buffer 2022-12-24 09:54:05 +01:00
Proddy
290890f6e7 Merge pull request #830 from proddy/dev
#822 and #829
2022-12-24 08:09:44 +01:00
proddy
b7bfd803eb kB back to KB, L back to l 2022-12-24 08:09:11 +01:00
Proddy
2151905d46 test upgrade 2022-12-23 18:28:09 +01:00
MichaelDvP
fdde118af1 buffer back to 20k 2022-12-23 15:24:23 +01:00
Proddy
5f9ba2e04b add TODO for missing translations 2022-12-23 14:58:15 +01:00
Proddy
ca871f654b Remove the test.mosquitto.org URL in the MQTT settings #829 2022-12-23 14:40:24 +01:00
Proddy
3c91ac27dc Set device_class to duration in HA sensor definitions #822 2022-12-23 13:42:59 +01:00
MichaelDvP
94b4cb0baf Merge branch 'dev' of https://github.com/emsesp/EMS-ESP32 into dev 2022-12-23 12:02:26 +01:00
MichaelDvP
1b956c6ad7 check log_buffer before expanding 2022-12-23 11:11:40 +01:00
MichaelDvP
b9b79bbd9a webbuffer 12k to reduce http:507 messages 2022-12-23 10:59:41 +01:00
Proddy
9802581301 Merge pull request #827 from pswid/dev
Polish translation update
2022-12-23 08:01:13 +01:00
MichaelDvP
c1f39fbf57 Dashboard/Customization Buffer 16k, measure and and log size. 2022-12-22 21:27:59 +01:00
MichaelDvP
f66e7712c3 fix crashes, clean up, update packages 2022-12-22 19:12:39 +01:00
pswid
2bb6d985cc Polish translation update 2022-12-22 14:59:53 +01:00
MichaelDvP
d300ed38ea readonly check with device_id 2022-12-22 14:25:20 +01:00
MichaelDvP
9cbb810fe4 add device_id to commands, fix #826 2022-12-22 14:01:55 +01:00
MichaelDvP
cfa486d8cc Add mixing module MM300, product-id 193 2022-12-22 09:48:52 +01:00
MichaelDvP
ab1924d266 fix #820, 4byte-values 2022-12-22 09:02:05 +01:00
Proddy
d6de0f6fa8 Merge pull request #825 from pswid/dev
added "compressor temp." for more hp types
2022-12-21 09:27:31 +01:00
pswid
d1afea104e added dhw eco+ switch off temp
tested on the Buderus WSW196iT
2022-12-21 09:19:33 +01:00
pswid
fae8cf83cd Merge branch 'emsesp:dev' into dev 2022-12-20 19:11:07 +01:00
pswid
5a69ac074f added "compressor temp." for more hp types
tested with Buderus WSW196iT
2022-12-20 12:01:41 +01:00
Proddy
15f0560005 Merge pull request #819 from MichaelDvP/dev
Some more entities and small fixes
2022-12-20 10:23:09 +01:00
MichaelDvP
6f7fa6abd9 fix #820, NOTSET check for 4 byte values. 2022-12-20 08:26:00 +01:00
MichaelDvP
cbd55b0366 uom "Kelvin" to HA temperature 2022-12-19 13:31:31 +01:00
MichaelDvP
f1dbd3018d dhw comf/eco switch off temps #803 2022-12-19 13:23:32 +01:00
MichaelDvP
502613b433 add uom K, heatpump difftemp #803 2022-12-19 09:14:24 +01:00
Proddy
2bdc0d59cf Merge pull request #818 from MichaelDvP/dev
add step to numeric command-values in HA discovery
2022-12-18 18:16:36 +01:00
MichaelDvP
ce0ee49ebf add step to numeric command-values in HA discovery 2022-12-18 16:22:18 +01:00
Proddy
bc3bdb1221 Merge pull request #817 from MichaelDvP/dev
Next fixes for #803
2022-12-18 15:20:04 +01:00
MichaelDvP
3bea7576b5 FR translations from manual #803 2022-12-18 11:49:55 +01:00
MichaelDvP
d70b5d7dc0 Merge branch 'dev' of https://github.com/emsesp/EMS-ESP32 into dev 2022-12-18 11:11:40 +01:00
MichaelDvP
eb30c1e5c7 fixes, nl translation #803 2022-12-18 11:11:21 +01:00
Proddy
17cbd2623f fix another silly mistake 2022-12-17 21:17:57 +01:00
Proddy
dc27a44c0c fix typo 2022-12-17 20:50:29 +01:00
Proddy
f72b02ab0b Merge pull request #815 from MichaelDvP/dev
Additions for #802, #803
2022-12-17 20:42:05 +01:00
Proddy
c0946f1e0c Merge branch 'dev' into dev 2022-12-17 20:41:56 +01:00
Proddy
575fdcb8cd Merge pull request #816 from proddy/dev
support 3 types of MQTT discovery entity id - #804
2022-12-17 19:21:36 +01:00
proddy
783ea7901c support 3 types of MQTT discovery entity id 2022-12-17 19:20:31 +01:00
MichaelDvP
44e6bb79a2 add auxHeaterStatus 2022-12-17 16:32:21 +01:00
MichaelDvP
ab3b9f13b5 Sort languages alphabetical 2022-12-17 13:01:50 +01:00
MichaelDvP
dc6e7f7b1b changelog 2022-12-17 12:05:29 +01:00
MichaelDvP
94b75dda24 Merge branch 'dev' of https://github.com/emsesp/EMS-ESP32 into dev 2022-12-17 11:14:53 +01:00
MichaelDvP
a529879889 some aux heater trnlations 2022-12-17 11:10:23 +01:00
Proddy
4b7bbb3d50 minor cleanup and testing 2022-12-17 11:05:20 +01:00
Proddy
88c98efd94 Merge pull request #808 from proddy/dev
add v3.4 entity id flag to MQTT settings
2022-12-17 11:04:42 +01:00
Proddy
147be12583 fixes for #804 2022-12-16 22:57:59 +01:00
MichaelDvP
137e047205 auxheaterdelay and hyst #803 2022-12-16 15:11:56 +01:00
MichaelDvP
4bd6db31c0 Merge branch 'dev' of https://github.com/proddy/EMS-ESP32 into dev 2022-12-16 11:10:58 +01:00
MichaelDvP
1350638fb3 rename auxheater 2022-12-16 11:10:37 +01:00
Proddy
b6de431a56 add French MQTT entity format strings (in EN) 2022-12-15 23:19:53 +01:00
Proddy
1aef27da33 Merge branch 'emsesp:dev' into dev 2022-12-15 23:14:20 +01:00
Proddy
1e78979ed0 default multiple_instances is enabled 2022-12-15 23:14:44 +01:00
Proddy
ba90ebda4c merge multiple_instances with entity_format 2022-12-15 21:51:11 +01:00
MichaelDvP
7c1bade54d add auxilliary heater setting #803 2022-12-15 13:22:54 +01:00
MichaelDvP
a46b394714 Merge branch 'dev' of https://github.com/emsesp/EMS-ESP32 into dev 2022-12-15 10:21:22 +01:00
Proddy
6dff1136c5 Merge pull request #807 from PopaSchKing/dev
Add FR language to EMS-ESP
2022-12-15 09:45:25 +01:00
Proddy
ccbb56d403 add v3.4 entity id flag to MQTT settings 2022-12-14 22:07:42 +01:00
PopaSchKing
4f3a7e5451 Fix missing elements from merge with off. dev branch 2022-12-14 19:06:02 +01:00
MichaelDvP
e4cda4087e Merge branch 'dev' of https://github.com/emsesp/EMS-ESP32 into dev 2022-12-14 18:52:37 +01:00
MichaelDvP
6eeb8de02c fix #806 2022-12-14 18:46:29 +01:00
PopaSchKing
29c4fec90a Update changelog 2022-12-14 17:48:59 +01:00
MichaelDvP
5c9ba8de43 fetch heatpump telegrams 2022-12-14 17:27:45 +01:00
PopaSchKing
2358f6a9c9 Merge branch 'emsesp:dev' into dev 2022-12-14 17:16:13 +01:00
PopaSchKing
7097279dca Fix wrong language name 2022-12-14 16:02:09 +01:00
MichaelDvP
c3eb553425 UOMs 2022-12-14 15:53:40 +01:00
PopaSchKing
24f64fac6b Update FR 2022-12-14 15:39:23 +01:00
MichaelDvP
4cdd5e9f20 add values/settings #803 2022-12-14 14:20:32 +01:00
MichaelDvP
de9e261807 Test for #802 2022-12-13 11:43:37 +01:00
Proddy
c26793c68d Merge pull request #801 from MichaelDvP/dev
delete empty response
2022-12-12 21:47:40 +01:00
MichaelDvP
11fd833cdb delete empty response 2022-12-11 11:13:56 +01:00
Proddy
2b21a0c31f Merge pull request #800 from MichaelDvP/dev
Avoid blank page (NULL) as response
2022-12-10 20:23:07 +01:00
MichaelDvP
7e888f6408 Avoid blank page (NULL) as response 2022-12-10 18:14:10 +01:00
Proddy
bba70ce852 replace HA ~ with hardcoded base name 2022-12-10 11:58:32 +01:00
Proddy
e96b5af0c8 HA ems_esp status to system_status to be uniform with the other naming conventions 2022-12-10 11:58:00 +01:00
Proddy
5f5e786c0e added comments 2022-12-10 11:57:17 +01:00
Proddy
8d66e43117 Merge pull request #798 from proddy/dev
minor updates and renaming system status entity in HA
2022-12-10 11:57:03 +01:00
Proddy
ccbc809ecf upgrade packages 2022-12-10 11:56:39 +01:00
Proddy
e67fde24f1 formatting 2022-12-10 11:56:28 +01:00
Proddy
923494fdce mention breaking change in HA entity names 2022-12-10 11:55:59 +01:00
MichaelDvP
73bff2cabe Merge pull request #797 from MichaelDvP/dev
Some actual additions/changes, see description
2022-12-09 10:11:40 +01:00
PopaSchKing
c20fc5a345 Update FR translations 2022-12-08 19:28:38 +01:00
MichaelDvP
f71c62f167 restart when changing CORS settings 2022-12-08 16:54:27 +01:00
SchKing
bdaf9e6dc6 Add FR language 2022-12-07 22:26:09 +01:00
MichaelDvP
a2730fb17c extra debug message for payload only ifdef EMSESP_DEBUG
Signed-off-by: MichaelDvP <github@mdvp.de>
2022-12-07 19:13:43 +01:00
MichaelDvP
5061ddf38e add CORS option to network 2022-12-07 13:51:53 +01:00
MichaelDvP
1735c036cc move multiple instances setting to HA section 2022-12-07 13:10:31 +01:00
MichaelDvP
fa703db41e heartbeat time in standalone 2022-12-07 12:53:35 +01:00
MichaelDvP
9665f4136a Merge branch 'dev' of https://github.com/emsesp/EMS-ESP32 into dev 2022-12-07 07:41:25 +01:00
Proddy
abeef2be4a Merge pull request #793 from proddy/dev
option to enable multiple instances using a flag
2022-12-06 17:36:37 +01:00
Proddy
995420354e remove breaking change note about MQTT discovery 2022-12-06 11:15:14 +01:00
proddy
1af1a1863a #759 add option to enable multiple instances to keep backward compatibllity with v3.4 2022-12-05 21:33:10 +01:00
proddy
fd04f8be5a add multiple_sessions 2022-12-05 20:37:39 +01:00
Proddy
ccc9e6dcfb Merge pull request #791 from MichaelDvP/dev
small changes for #759
2022-12-05 20:34:20 +01:00
MichaelDvP
9e23710c6d add heartbeat interval to mqtt settings 2022-12-05 19:27:56 +01:00
MichaelDvP
3878a3ee0b analogsensor float->double #789 2022-12-05 18:26:18 +01:00
MichaelDvP
0c9d0a4d15 show mqtt payload in debug log 2022-12-05 14:19:41 +01:00
MichaelDvP
739c007c95 sync sensors and status to same entitiy in path, uniq_id, objdect_id 2022-12-05 14:13:25 +01:00
MichaelDvP
6f27253441 log calling command in debug level 2022-12-05 14:10:05 +01:00
MichaelDvP
b900932574 hardcode maxTopicLength to settingfunction 2022-12-05 14:09:25 +01:00
Proddy
0903b31fcf highlight breaking changes 2022-12-05 10:06:50 +01:00
Proddy
d080f5db0f fix dutch NUM_MINUTES #787 2022-12-04 15:52:31 +01:00
Proddy
5029a1625e remove TODO 2022-12-04 15:51:56 +01:00
Proddy
2950f167aa Merge pull request #780 from MichaelDvP/dev
allow raw telegram sending with other src-id
2022-12-04 13:01:16 +01:00
Proddy
afdf9a3dfb Merge pull request #781 from proddy/dev
#751 and #759
2022-12-04 13:00:49 +01:00
Proddy
132ca9d106 fix mqtt topic length which broke PR #781 2022-12-04 12:45:23 +01:00
Proddy
990d75d42a debug comments 2022-12-04 12:44:57 +01:00
Proddy
1c48aa8444 fixes #787 2022-12-04 12:44:44 +01:00
Proddy
67e07813cb adding missing translations for Value (single/plural) 2022-12-04 10:33:13 +01:00
Proddy
7fbeed88a9 package updates 2022-12-04 10:32:50 +01:00
Proddy
9053e7ac88 minor renaming 2022-12-04 10:32:37 +01:00
Proddy
e3c94cc1f7 updates for #759 2022-11-30 21:21:32 +01:00
Proddy
e8d6c4d451 add new ReturnCmd error called INVALID 2022-11-30 21:21:19 +01:00
Proddy
ba1813c767 removed en_name 2022-11-30 21:21:03 +01:00
Proddy
bcd8992abc added INVALID command return err, so detects when incorrect hc given in a command 2022-11-30 21:20:47 +01:00
Proddy
557b532f74 added comment 2022-11-30 21:20:08 +01:00
Proddy
d450464a1a hardcode "response" topic 2022-11-30 21:19:57 +01:00
Proddy
5d10b28433 rename boot time, free mem, free app, add web buffer to info command output 2022-11-30 21:19:21 +01:00
Proddy
eafe358deb shower uses mqtt base - #759 2022-11-30 21:18:15 +01:00
Proddy
048bd877da fix tests for MQTT 2022-11-30 21:17:55 +01:00
Proddy
7f18dd942f add mqtt base to topic - #759 2022-11-30 21:17:41 +01:00
Proddy
424234ec48 default send_response is false for standalone testing 2022-11-30 21:16:57 +01:00
Proddy
4168a08276 #751 move ntp sending info topic back 2022-11-30 21:16:41 +01:00
MichaelDvP
996063d76d show received (ignored) handlers for devices without registered telegrams. 2022-11-30 16:06:06 +01:00
MichaelDvP
085f5ff22f change GH tagged_release to web language 'en' #754 2022-11-30 14:00:19 +01:00
Proddy
5b5dc6a8cc #759 use b ase in HA unique_id and object_id 2022-11-29 21:15:46 +01:00
Proddy
4103bad8de bump b11 2022-11-29 21:14:40 +01:00
Proddy
d6a8563cc7 fixes for #751 2022-11-29 21:14:31 +01:00
Proddy
c9ef0bcd7b remove max_topic_length, make base mandatory 2022-11-29 21:14:08 +01:00
Proddy
6b978759ca update 2022-11-29 21:13:26 +01:00
Proddy
bc31d54028 package update 2022-11-29 21:13:15 +01:00
MichaelDvP
7bad0e04b1 allow raw telegram sending with other src-id 2022-11-29 17:04:05 +01:00
Proddy
7144c746c6 Merge pull request #779 from proddy/dev
#751 boot time when NTP connected
2022-11-28 21:19:18 +01:00
proddy
d5592e5662 #751 boot time when NTP connected 2022-11-28 21:14:38 +01:00
Proddy
12b027110e Merge pull request #778 from MichaelDvP/dev
Basetranslation, HA-mode fix, analog inputs, etc.
2022-11-28 09:56:34 +01:00
MichaelDvP
644896faff Merge branch 'dev' of https://github.com/emsesp/EMS-ESP32 into dev 2022-11-28 09:37:55 +01:00
MichaelDvP
f41f7c0769 analog input fields, package update 2022-11-28 08:21:02 +01:00
Proddy
68f1a891ca Merge pull request #776 from proddy/dev
fix codacy complaining
2022-11-27 20:44:04 +01:00
proddy
b186311968 fix 2022-11-27 20:36:37 +01:00
Proddy
c21b594cf0 Merge pull request #775 from proddy/dev
minor standalone fixes
2022-11-27 20:22:56 +01:00
proddy
21ec46843a add comments 2022-11-27 20:22:25 +01:00
proddy
4da827501a update packages 2022-11-27 20:22:20 +01:00
proddy
5d0c7bfd32 fix standalone crash 2022-11-27 20:22:05 +01:00
MichaelDvP
d583409af4 set mode for ha climate, fix #772 2022-11-27 19:02:54 +01:00
MichaelDvP
559e607601 show eth parameters for eth connection (if eth/wifi connected) 2022-11-27 19:01:44 +01:00
MichaelDvP
276b27d8a6 add Boiler WLW196i, #767 2022-11-24 18:40:17 +01:00
MichaelDvP
2134f42cfd add phy-type to support info 2022-11-24 18:39:35 +01:00
MichaelDvP
88135d2750 workaround for default language en and basetranslation pl 2022-11-23 11:09:46 +01:00
MichaelDvP
1b1a4bcad4 mention boiler GC9800IW in device-library 2022-11-23 11:08:48 +01:00
Proddy
af8e82a860 Merge pull request #764 from MichaelDvP/dev
Command `values` for analog/dallas sensors, writeable for analog-out,…
2022-11-22 22:12:47 +01:00
MichaelDvP
c8d5e37b44 add thermostats UI800/RT800, #765 2022-11-22 18:32:38 +01:00
MichaelDvP
781fe03b5d Command values for analog/dallas sensors, writeable for analog-out, #758 2022-11-21 18:13:52 +01:00
proddy
702103aa66 formatting 2022-11-20 21:11:28 +01:00
proddy
d2503431c6 fix merge chaos 2022-11-20 21:11:24 +01:00
Proddy
dccdf18226 Merge pull request #761 from proddy/dev
use HA connectivity device class #751
2022-11-20 20:55:35 +01:00
Proddy
a92f287256 Merge branch 'dev' into dev 2022-11-20 20:55:24 +01:00
Proddy
a193d67f11 Merge pull request #755 from MichaelDvP/dev
add devices Alert/Pump, UOMs
2022-11-20 20:53:22 +01:00
proddy
6873e113bb Change EMS-ESP device sensor types in Home Assistant #751 2022-11-20 18:48:59 +01:00
proddy
77860d9d05 fix standalone compiling 2022-11-20 18:48:51 +01:00
proddy
de97010cfb package update 2022-11-20 18:48:36 +01:00
MichaelDvP
89245c7af7 translating UOMs hours/minutes/seconds 2022-11-20 10:44:17 +01:00
MichaelDvP
d51745774f add missing DeviceValueUOM_s 2022-11-19 14:55:04 +01:00
MichaelDvP
deda1daa04 add devices alert/Pump #575, #720, UOM:translate times? #752 2022-11-19 12:11:30 +01:00
MichaelDvP
8594c4a7eb restart animation on factory reset 2022-11-19 12:07:38 +01:00
MichaelDvP
d0d73aa5e2 boiler/thermostat alias commands inline 2022-11-19 12:06:38 +01:00
Proddy
1f43bb201c Merge pull request #753 from MichaelDvP/dev
fixes #747, #748
2022-11-18 10:19:57 +01:00
MichaelDvP
6e92d31f5d limit weblog buffer on low heap, use deque 2022-11-17 18:12:40 +01:00
MichaelDvP
ae4070b7f2 package update 2022-11-17 16:17:47 +01:00
MichaelDvP
ee2ac18b69 Merge branch 'dev' of https://github.com/emsesp/EMS-ESP32 into dev 2022-11-17 08:38:47 +01:00
MichaelDvP
85ce697dad hp defrost state 6, state 5 unknown 2022-11-17 08:37:55 +01:00
MichaelDvP
82eb79ce40 fix factory partition detection 2022-11-17 08:37:12 +01:00
Proddy
c76b4b9ede Merge pull request #746 from pswid/dev
completed translations of entities into Polish.
2022-11-16 16:47:35 +01:00
MichaelDvP
9c2e814e16 mention Greenstar ErP in database 2022-11-16 07:51:17 +01:00
MichaelDvP
2e9499ea90 typo 2022-11-15 19:25:41 +01:00
pswid
52296bfed1 redundant cwu removed (in Polish translation) 2022-11-15 13:52:34 +01:00
MichaelDvP
a53d54a1d6 don't use hpoperatingmode on boilers, fix #747 2022-11-15 09:32:39 +01:00
MichaelDvP
81cf08b723 add word heatpump mode "defrost" (instead of nofrost) 2022-11-15 09:31:45 +01:00
MichaelDvP
f192d7dffc add nofrost option to hpactivity, #748 2022-11-15 08:25:41 +01:00
pswid
5425896988 Merge branch 'dev' of https://github.com/pswid/EMS-ESP32 into dev 2022-11-14 15:14:51 +01:00
pswid
9e2be00b5c completed translations of entities into Polish.
this also fixes some Norwegian translations that were incorrectly displayed as Polish.
Missing translations (for other languages) have been entered as "", so default English names should be displayed
2022-11-14 15:06:13 +01:00
Proddy
06004ce478 Merge pull request #745 from MichaelDvP/dev
EN-Tags for HA-entities
2022-11-14 12:50:10 +01:00
MichaelDvP
5bda018d25 En-tag for HA-entity 2022-11-14 12:22:12 +01:00
MichaelDvP
b12729a874 HM200 temperatures, fix hybridStrategie #500 2022-11-14 10:03:12 +01:00
Proddy
d3a84e02e4 Merge pull request #743 from MichaelDvP/dev
Typos, selflowtemp check
2022-11-13 19:56:32 +01:00
MichaelDvP
9865c84df5 tag in ha object_id 2022-11-13 19:09:32 +01:00
MichaelDvP
33d2cb9a49 Typos 2022-11-13 18:43:36 +01:00
MichaelDvP
37c121e8de check selflowtemp change before write 2022-11-13 18:43:24 +01:00
Proddy
9dd0bf01e2 formatting 2022-11-13 14:35:04 +01:00
Proddy
92ac601072 Merge pull request #733 from pswid/dev
fix: cosmetic webUI improvements
2022-11-13 14:17:59 +01:00
pswid
dfd7647838 improved webUI display on narrow screens
- unified vertical spacing (settings page)
- auto switching from 3 to 2 boxes displayed in row on narrow screens
- displaying (at least a part off) names of entities names on dashboard
- fixes MQTT discovery field too small
2022-11-13 13:46:52 +01:00
pswid
058246e2ce Merge branch 'emsesp:dev' into dev 2022-11-13 13:00:41 +01:00
Proddy
8ed789892b Merge pull request #741 from proddy/dev
minor updates, also implements #707
2022-11-10 16:12:21 -05:00
Proddy
57775af24b lower case days, hours, minutes, seconds 2022-11-10 22:12:10 +01:00
Proddy
845681b6dc package update 2022-11-10 22:11:54 +01:00
pswid
ea2c9cbc9a Merge branch 'emsesp:dev' into dev 2022-11-10 15:03:57 +01:00
Proddy
96bb3013a3 Merge pull request #740 from MichaelDvP/dev
fix render_value float, leading zeros to decimals
2022-11-10 06:36:37 -05:00
MichaelDvP
aeee37fdae fix render_value float, leading zeros to decimals 2022-11-10 12:17:05 +01:00
Proddy
551497bfeb Merge pull request #739 from MichaelDvP/dev
fix #736
2022-11-09 14:04:21 -05:00
MichaelDvP
57057cac0e fix #736 2022-11-09 15:08:07 +01:00
pswid
dccd9f09e7 Merge branch 'emsesp:dev' into dev 2022-11-08 15:21:39 +01:00
Proddy
b91e474343 Merge pull request #734 from MichaelDvP/dev
fix #727 boiler wwcircmode
2022-11-07 16:47:15 +01:00
pswid
f25262c191 fix: cosmetic webUI improvements
mainly in custom board profile and analog sensors settings. Now it looks more consistent with other settings pages.
2022-11-07 10:41:57 +01:00
MichaelDvP
723662a6bc fix #727 boiler wwcircmode 2022-11-07 10:10:38 +01:00
Proddy
757fcd3ea4 Merge pull request #730 from proddy/dev
fix sensor writing
2022-11-06 18:04:08 +01:00
Proddy
ec3e28436d fix sensor writing 2022-11-06 18:04:30 +01:00
Proddy
6a291ef1e2 Merge pull request #726 from proddy/dev
add missing elint supression to fix build
2022-11-05 18:34:08 +01:00
proddy
1e529a9e19 add missing elint supression to fix build 2022-11-05 18:33:46 +01:00
Proddy
05d393e7fe Merge pull request #725 from proddy/dev
minor fixes for standalone
2022-11-05 18:27:32 +01:00
proddy
c757ace2b4 fix standalone compiling & sonar 2022-11-05 18:26:59 +01:00
proddy
5ab066de5f bump b9 2022-11-05 18:26:48 +01:00
Proddy
b0ae22d493 Merge pull request #724 from proddy/dev
build web i18n on github actions
2022-11-05 18:02:37 +01:00
proddy
03a6abcfc6 build web i18n on github actions 2022-11-05 17:59:31 +01:00
Proddy
e58491ed97 Merge pull request #722 from MichaelDvP/dev
Changes in discussion
2022-11-05 17:52:15 +01:00
MichaelDvP
1e92ae05c0 add GB135 second burner stage 2022-11-05 15:58:55 +01:00
MichaelDvP
513b6181a4 add norwegian entity translations from vikingn 2022-11-05 15:57:57 +01:00
MichaelDvP
05b54bc6f5 "No telegram handler" message only for broadcasted messages 2022-11-05 15:56:29 +01:00
MichaelDvP
1d4634a76c add restart to factory partition (if there is one) 2022-11-05 15:56:08 +01:00
MichaelDvP
342cf12ae7 boardprofile fallback to E32/S32 2022-11-05 15:55:03 +01:00
Proddy
6883dbbce1 Merge pull request #723 from proddy/dev
fix to base translations, auto generate i18n
2022-11-05 14:00:08 +01:00
Proddy
a3d3706b89 generate i18n on build 2022-11-05 12:54:28 +01:00
Proddy
da911e374a auto-formatting 2022-11-05 12:29:28 +01:00
Proddy
26904f4e0e default polish so translations don't break #695 2022-11-05 12:26:07 +01:00
Proddy
ec5601f3ca formatting, added Sensor, removed {{ }} for non Polish 2022-11-05 12:25:48 +01:00
Proddy
a2ee2a5e6b remove custom formatter 2022-11-05 12:25:14 +01:00
Proddy
78d5f8b76d ignore i18n generated files 2022-11-05 12:25:02 +01:00
Proddy
dd0cc00004 updated packages again 2022-11-05 12:24:49 +01:00
Proddy
825836c447 Merge pull request #721 from proddy/dev
formatting, updated packages, fix dialog focus on customization screen
2022-11-03 22:30:43 +01:00
Proddy
4996eb9e3c formatting, updated packages 2022-11-03 22:30:10 +01:00
Proddy
0bc3a3c34e Merge pull request #719 from pswid/dev
fix to the translation of the webUI in Polish.
2022-11-03 20:35:08 +01:00
pswid
ca5bc313ee fixes Polish chars not being displayed properly
The characters "Ę" and "ę" had wrong uni-codes in re.woff2. Now, the problem https://github.com/emsesp/EMS-ESP32/pull/702#issuecomment-1291720910 is finally solved.
2022-11-03 13:04:25 +01:00
pswid
069df92dbf fix to the translation of the webUI in Polish.
Everything visible should already be translated into Polish. However, I was not able to check how the translations of all errors are displayed (because how to display them if there is no error?), so I'm not sure that they are ok.
BTW, there are still many error messages hardcoded (e.g. "Local IP is required"). I think we should translate them as well.
2022-11-03 12:34:32 +01:00
Proddy
bdce4ee9f9 Merge pull request #718 from MichaelDvP/dev
fix #717, rounding error
2022-11-01 18:09:31 +01:00
MichaelDvP
756a136124 fix overflow rendering uint32 2022-11-01 17:38:33 +01:00
MichaelDvP
4809ef3537 fix #717, rounding error 2022-11-01 17:24:10 +01:00
Proddy
2c056d6807 Merge pull request #715 from proddy/dev
minor changes
2022-10-31 20:56:54 +01:00
Proddy
90af466a2f rename Status to Info for info command 2022-10-31 20:56:33 +01:00
Proddy
20cbbcd9f4 fix VALUE() where it needs single and plural translations 2022-10-31 20:26:49 +01:00
Proddy
036953044e auto-formatting 2022-10-31 20:26:30 +01:00
Proddy
499456fa77 add comment 2022-10-31 20:25:03 +01:00
Proddy
22d9705412 package update 2022-10-31 20:24:40 +01:00
Proddy
663c853aff add test for Junkers room sensor issue in HA 2022-10-31 20:24:28 +01:00
Proddy
103ffa4761 fix compiling standalone 2022-10-31 20:24:12 +01:00
Proddy
3baedf01d1 Merge pull request #713 from MichaelDvP/dev
min/max, bus-ids, MD5
2022-10-31 19:28:54 +01:00
MichaelDvP
bfad6d34b5 i18n baseLocale back to en, 18 pl-chars to font. 2022-10-31 14:21:13 +01:00
MichaelDvP
2aa2564078 version 3.5.0b8, Changelog, remove some F() 2022-10-31 11:11:50 +01:00
MichaelDvP
6561bb5a6c add min/max to customization table #686 2022-10-31 11:11:09 +01:00
MichaelDvP
ac75176292 i18n@5.15.0 2022-10-31 11:10:20 +01:00
MichaelDvP
1005079f71 activate restart monitor on button restart 2022-10-31 11:09:12 +01:00
MichaelDvP
e0e07a9deb md5 check for upload bin files #637 2022-10-31 11:08:05 +01:00
MichaelDvP
c65005e5a6 add more bus-ids #673 2022-10-31 11:04:44 +01:00
MichaelDvP
64f2f82e0c low frequency for C3 chip 2022-10-31 11:03:10 +01:00
MichaelDvP
98495c8114 show wifi disconnect reason as text 2022-10-31 11:02:43 +01:00
Proddy
d0ac0b7804 update with version on dev 2022-10-30 16:58:37 +01:00
Proddy
e45c31345e Merge pull request #712 from proddy/dev
auto-formatting web code
2022-10-30 16:56:48 +01:00
Proddy
23cd677133 Merge branch 'emsesp:dev' into dev 2022-10-30 16:56:13 +01:00
Proddy
805c1298fb fix lint formatting so GH action build doesn't break 2022-10-30 16:56:00 +01:00
Proddy
5199edff1e Merge pull request #711 from proddy/dev
minor updates
2022-10-30 16:47:08 +01:00
Proddy
f3adc13c6d auto-formatting 2022-10-30 16:44:31 +01:00
Proddy
40f5f7026d removed TODO 2022-10-30 16:44:23 +01:00
Proddy
b8b96763cf update packages 2022-10-30 16:44:14 +01:00
Proddy
80b94fcd00 update to latest GH actions 2022-10-30 16:44:06 +01:00
Proddy
8d09d3c654 use 2 threads 2022-10-30 16:43:55 +01:00
Proddy
03564b3a82 Merge pull request #708 from mvjt/dev
Translated new index.ts items to Swedish
2022-10-30 16:14:13 +01:00
mvjt
a7569256d0 Corrected error (SE) #2 2022-10-30 15:57:26 +01:00
mvjt
b0d4a094c1 Corrected error (SE) 2022-10-30 15:56:11 +01:00
mvjt
1b232adc72 Translated new items 2022-10-30 15:48:06 +01:00
Proddy
ed81e095ee Merge pull request #702 from pswid/dev
The translation of the web interface into Polish has been corrected and completed (e.g. the word order has been fixed).
2022-10-29 11:03:24 +02:00
Proddy
76734b77f1 Merge pull request #706 from MichaelDvP/dev
fixes #704 and #698
2022-10-29 10:56:13 +02:00
Proddy
d8284ec09f Merge pull request #705 from MichaelDvP/main
v3.4.4 Fix for new installations with filesystem not initializing
2022-10-29 10:46:41 +02:00
MichaelDvP
6e982acde8 v3.4.4 Fix for new installations with filesystem not initializing 2022-10-28 10:50:51 +02:00
MichaelDvP
db6f8eaba1 add boiler heatStarts 2022-10-27 18:50:38 +02:00
MichaelDvP
eb7ad7163f fix #698, add RC30 internal sensors 2022-10-27 18:40:51 +02:00
MichaelDvP
6a478eec5e fix #704 round div100 temperatures to one decimal 2022-10-27 18:37:08 +02:00
pswid
1dc08d6399 The translation of the web interface into Polish has been corrected and completed (e.g. the word order has been fixed).
Newly added words should be translated from English into other languages in index.ts files
2022-10-25 20:57:51 +02:00
Proddy
c3cfed5ac3 Merge pull request #700 from proddy/dev
package update
2022-10-24 13:30:57 -07:00
Proddy
aba1dc93d9 package update 2022-10-24 22:30:54 +02:00
Proddy
d9bbf35afc Merge pull request #693 from pswid/dev
Polish translation improvements
2022-10-24 13:29:11 -07:00
pswid
dec3abfab9 Merge branch 'emsesp:dev' into dev 2022-10-24 11:22:24 +02:00
pswid
bb98f13b19 alternative word translations implementation idea
just for demonstration!
2022-10-18 13:47:10 +02:00
Proddy
8b10970e03 Merge pull request #696 from MichaelDvP/dev 2022-10-18 10:09:48 +02:00
MichaelDvP
b859ab9d78 fix switch commands #692 2022-10-18 09:17:45 +02:00
Proddy
26208103fc Merge pull request #694 from MichaelDvP/dev
DIV10 for solarTemp
2022-10-17 19:07:25 +02:00
MichaelDvP
d150b017e3 DIV10 for solarTemp 2022-10-17 18:56:54 +02:00
pswid
49414adfd2 Polish translation improvements
Strange, but if i use capital letters in Polish translation for "ON' and "OFF" (local_translations.h), I'm getting compile error. So instead of whole words in capital letters I used abbreviations in lower case (more useful, IMHO)
2022-10-17 18:21:57 +02:00
Proddy
5c675c7ce7 Merge pull request #690 from MichaelDvP/dev
solar temperature sensor and some fixes
2022-10-17 15:00:47 +02:00
MichaelDvP
f16aaf7874 ignore mqtt echos if publish_single2command is set. 2022-10-17 10:14:06 +02:00
MichaelDvP
d80831e708 fix possible endless tx repeats on write rejected 2022-10-17 10:12:34 +02:00
MichaelDvP
3e3e7156ec fix setting custom min value 2022-10-17 10:11:18 +02:00
MichaelDvP
dbb2a365cb solar temperature #687 2022-10-17 10:10:42 +02:00
Proddy
52a8c7288d Merge pull request #685 from MichaelDvP/dev
small fixes
2022-10-14 16:52:37 +02:00
MichaelDvP
42f6bf6182 fix rx quality calculation 2022-10-14 14:28:08 +02:00
MichaelDvP
9d4d3738ff fix memory leak 2022-10-14 14:27:50 +02:00
MichaelDvP
1647a6d0a7 Typo 2022-10-14 14:27:26 +02:00
Proddy
e5e058672d Merge pull request #683 from pswid/dev
Added Polish names of the entities
2022-10-14 12:08:13 +02:00
pswid
f5cd8e2523 Merge branch 'dev' into dev 2022-10-14 11:02:31 +02:00
Proddy
fd2cc8aff1 Merge pull request #684 from proddy/dev
update standalone build
2022-10-13 22:07:49 +02:00
proddy
f244fb837b update system test data 2022-10-13 22:07:01 +02:00
proddy
b4848ab7f9 make standalone compile 2022-10-13 21:56:04 +02:00
proddy
0fa60f0502 package updates 2022-10-13 21:55:49 +02:00
Proddy
8d290317d7 Merge pull request #677 from MichaelDvP/dev_
C3/S2 support, tags translated
2022-10-13 21:40:14 +02:00
pswid
cb5c8f3a85 Merge branch 'dev' into dev 2022-10-13 20:02:28 +02:00
pswid
5a0f4c1462 The names of the entities have been translated into Polish
not 100% complete
2022-10-13 19:43:03 +02:00
MichaelDvP
e4445413fd fix console show values #682 2022-10-13 14:08:53 +02:00
MichaelDvP
9be13eb0b9 Lolin C3 mini v1.0 has standard led. 2022-10-13 14:07:52 +02:00
MichaelDvP
2c7eeeca7b C3 led color, red blinking error, green permanent ok 2022-10-11 18:43:32 +02:00
Proddy
b59a552288 Merge pull request #680 from pswid/dev
Polish translation improvements
2022-10-11 18:41:15 +02:00
Proddy
def67899ed Merge pull request #679 from tefracky/tefracky-german-translation
Updated German translation
2022-10-11 18:40:41 +02:00
MichaelDvP
ea0870c180 Check upload bin-header for esp-chip version 2022-10-11 18:32:33 +02:00
pswid
379d57ca8e Merge branch 'dev' into dev 2022-10-11 14:10:30 +02:00
MichaelDvP
761df2b4cc esp32C3 wifi initializaton: set power after starting wifi 2022-10-11 14:05:29 +02:00
tefracky
56e1f02f69 Update locale_translations.h
Reverted to "Solltemperatur Einmalladung"
2022-10-11 13:59:54 +02:00
pswid
f921ef4708 Polish translation improvements 2022-10-11 13:56:19 +02:00
MichaelDvP
f11dc9bc25 links to lolin C3 mini V1, pio-ini 2022-10-11 10:11:21 +02:00
MichaelDvP
0ebfcd7238 api json charset 2022-10-11 09:35:56 +02:00
MichaelDvP
5fb9cd142f thermostat switchtime sday as char * 2022-10-11 09:35:36 +02:00
MichaelDvP
7d5e112efb Merge branch 'dev' of https://github.com/emsesp/EMS-ESP32 into dev_ 2022-10-11 09:34:56 +02:00
tefracky
e82dd816de Updated German translation
Fixed some typos and language clearificaiton
2022-10-11 09:19:10 +02:00
Proddy
887a245d82 Merge pull request #676 from proddy/dev
NO and Commands translations
2022-10-11 08:28:12 +02:00
proddy
2f706b33fa add test for modes 2022-10-10 20:12:35 +02:00
proddy
dcbdb04009 typo 2022-10-10 20:12:25 +02:00
proddy
008903cbbd optimize set_mode command 2022-10-10 20:12:16 +02:00
proddy
b67113fc1f use const char * where possible 2022-10-10 20:11:23 +02:00
proddy
3afbe832cc don't use translations for commands in console 2022-10-10 20:10:20 +02:00
proddy
9adfa0ecfc use const char * where possible 2022-10-10 20:10:01 +02:00
proddy
f081d7fd3c remove TODO 2022-10-10 20:09:29 +02:00
MichaelDvP
394a3253aa v3.5.0b7, update changelog 2022-10-10 17:28:17 +02:00
MichaelDvP
13890d2835 translated tags 2022-10-10 16:55:00 +02:00
MichaelDvP
6fd3e567cd ESP32-C3 and ESP32-S2, LED for C3-Mini 2022-10-10 14:13:43 +02:00
MichaelDvP
b6d8e55b00 heatpump values, german translations 2022-10-10 14:12:52 +02:00
MichaelDvP
e6d3d347ab remove unused brackets and inits 2022-10-10 14:10:29 +02:00
proddy
c159ce7eb9 added NO 2022-10-09 22:31:34 +02:00
proddy
65c9bf22dc refactor commands to take dynamic translation descriptions #674 2022-10-09 22:19:29 +02:00
Proddy
87dfffeddb Merge pull request #672 from proddy/dev
fix REST-API - strange characters in description
2022-10-09 19:41:46 +02:00
Proddy
8d6c676fed fix REST-API - strange characters in http://<hostname>/api/<device>/commands output #671 2022-10-09 14:18:29 +02:00
Proddy
324d27896b Merge remote-tracking branch 'origin/flash_optimization' into dev #646 2022-10-08 10:02:48 +02:00
Proddy
fd5fcf356f Merge pull request #667 from ajvdw/dev
Added support for ESP32-S2
2022-10-07 21:11:36 +02:00
Proddy
0dde5a9d2b merge PR #667 and PR #668 2022-10-07 21:11:18 +02:00
Proddy
73f7603c1d Merge pull request #668 from MichaelDvP/dev
Float rendering and Junkers FW500
2022-10-07 21:05:58 +02:00
Proddy
5faffc3886 upgrade axios 2022-10-07 20:26:17 +02:00
MichaelDvP
d09d5a7dbe Junkers settime, dst always zero, no check against NTP 2022-10-07 17:31:21 +02:00
ajvdw
b906fecdff Update platformio.ini 2022-10-07 13:03:55 +02:00
MichaelDvP
a6e4122e44 fix Junkers roomsensor enum 2022-10-07 12:58:10 +02:00
ajvdw
e663ecb458 added esp32-s2 support 2022-10-07 12:38:18 +02:00
MichaelDvP
95876e28bf Junkers Clock not writable 2022-10-07 12:06:46 +02:00
MichaelDvP
348932d929 rollback web output, don't use serialized for webpack 2022-10-07 11:53:18 +02:00
MichaelDvP
bd28516324 render analog value 2022-10-07 11:21:57 +02:00
MichaelDvP
d1fc050bed flags on signin page 2022-10-07 11:14:19 +02:00
MichaelDvP
bace01e4f7 show trailing zero for float values, #663 2022-10-07 10:56:52 +02:00
MichaelDvP
0a56ee7dbb add FW500 thermostat #666 2022-10-07 08:09:07 +02:00
Proddy
c90be99216 fix ha min/max 2022-10-06 17:09:09 +02:00
Proddy
a0a431e0e2 merge https://github.com/emsesp/EMS-ESP32/pull/664 2022-10-06 17:08:57 +02:00
Proddy
4489e7149c Merge pull request #664 from MichaelDvP/dev
add controller BC30, #663
2022-10-05 18:20:21 +02:00
MichaelDvP
ec81420894 add controller BC30, #663 2022-10-05 18:10:50 +02:00
Proddy
619dd0c99d merge https://github.com/emsesp/EMS-ESP32/pull/662 2022-10-05 12:24:31 +02:00
Proddy
9f5a5108fb Merge pull request #662 from MichaelDvP/dev
fix #659, mqtt bool values
2022-10-05 12:09:33 +02:00
MichaelDvP
974510b2c7 fix #659, mqtt bool values 2022-10-05 11:26:15 +02:00
Proddy
f2f10f0c79 Merge pull request #661 from pswid/dev
Polish translation improvements
2022-10-04 21:04:17 +02:00
Proddy
39cbcd4d6f Polish translation improvements #661 2022-10-04 21:04:04 +02:00
Proddy
1accdfcafb Merge pull request #660 from MichaelDvP/dev
Climate min/max #647, RC300 CalIntTemp #657
2022-10-04 21:01:59 +02:00
Proddy
e37bbe420c manual merge of PR 660 - https://github.com/emsesp/EMS-ESP32/pull/660/ 2022-10-04 21:01:23 +02:00
pswid
58c4455076 Update index.ts
Polish translation improvements
2022-10-04 15:01:44 +02:00
MichaelDvP
a413ffb9d2 avoid strange, long decimals in input field 2022-10-04 10:44:19 +02:00
MichaelDvP
1f96622e74 count tx-queue overflows as tx-errors 2022-10-03 15:03:35 +02:00
MichaelDvP
9527cf6abf RC300 calinttemp and fix some other thermostat values 2022-10-03 12:53:37 +02:00
MichaelDvP
13f0bc3296 mqtt status shows queue and reconnects 2022-10-03 08:08:51 +02:00
Proddy
58a0ec9cca move the set_custom_minmax into the class initiator 2022-10-02 15:54:12 +02:00
Proddy
fe385de342 no fullname translation is allowed 2022-10-02 15:53:50 +02:00
Proddy
ae5fb26387 add check fto translated_word for empty arrays, to be crash safe 2022-10-02 15:53:26 +02:00
Proddy
cd67ab03ff fullname array is allowed to be null 2022-10-02 15:52:54 +02:00
Proddy
94f134f3fe formatting to fit on one line 2022-10-02 15:52:34 +02:00
Proddy
ca95e44a81 climate doesn't need a translation 2022-10-02 15:52:17 +02:00
Proddy
ecc045b2a8 add test for min/max 2022-10-02 15:51:54 +02:00
Proddy
9c205a07c5 add test data for min/max 2022-10-02 15:51:43 +02:00
MichaelDvP
c414354708 climate min/max values 2022-10-02 09:52:04 +02:00
Proddy
ddacd2d9d7 min/max example 2022-10-01 16:49:01 +02:00
Proddy
987fcb4a5a Merge remote-tracking branch 'origin/dev' into flash_optimization 2022-10-01 16:48:50 +02:00
Proddy
4c70da28e6 better fix for ha climate Optimize flash with ESP32 #646 2022-10-01 16:03:04 +02:00
Proddy
246684f28c Merge pull request #651 from MichaelDvP/dev
add missing fahrenheits on customization screen
2022-10-01 11:59:48 +02:00
MichaelDvP
e450a0e096 fix bool command for hp input #600 2022-10-01 11:21:15 +02:00
proddy
90d2144588 fix for lists that don't have translations, like climate 2022-09-30 20:48:21 +02:00
proddy
4302d314cf generic test 2022-09-30 20:47:55 +02:00
proddy
22322a55ed update 2022-09-30 20:47:47 +02:00
MichaelDvP
d09c0436e0 missing fahrenheits on customization screen 2022-09-29 15:26:00 +02:00
Proddy
9b619216cb formatting brackets 2022-09-28 21:46:12 +02:00
Proddy
fe0a855618 formatting 2022-09-28 21:41:19 +02:00
Proddy
3bca7c9a13 Merge pull request #650 from MichaelDvP/dev
custom min/max
2022-09-28 21:20:08 +02:00
Proddy
87887494a5 fix endless loop! 2022-09-28 21:19:14 +02:00
Proddy
614a8cb14b add comment 2022-09-28 21:19:03 +02:00
Proddy
da6e64e89f optimize toLower() 2022-09-28 21:18:52 +02:00
Proddy
87d0db0b5c auto formatting 2022-09-28 20:27:48 +02:00
MichaelDvP
c756df90fc update packages 2022-09-28 17:47:27 +02:00
MichaelDvP
d3053d8ce2 check min/max before activating 2022-09-28 17:26:49 +02:00
MichaelDvP
4c728cf777 update changelog, version b4 2022-09-28 16:52:05 +02:00
MichaelDvP
17b90af972 RC35 default min/max values added 2022-09-28 16:16:42 +02:00
MichaelDvP
a0339f5ae2 custom min/max values 2022-09-28 16:08:08 +02:00
MichaelDvP
732aaffbb6 boiler HP-inputConfig, HeaterConfig, thermostat roomsensor 2022-09-28 16:07:38 +02:00
MichaelDvP
d50606ce13 german web translation 2022-09-28 16:05:44 +02:00
proddy
777c9db0f6 remove flash 2022-09-28 15:47:27 +02:00
proddy
815397dba6 move device_library name to const char * 2022-09-25 14:36:45 +02:00
Proddy
01f361e7cd Merge pull request #643 from mvjt/dev
Polishing Swedish Translations
2022-09-25 11:46:26 +02:00
Proddy
1278776297 Merge pull request #642 from proddy/dev
update to commands in web
2022-09-25 11:46:01 +02:00
mvjt
a3a8e515bf Polishing Swedish Translations 2022-09-25 11:14:28 +02:00
Proddy
96af9afc83 commands like reset can't be renamed. use translated name for commands like these. 2022-09-25 10:45:08 +02:00
Proddy
c841c8c284 lighter grey colour 2022-09-25 10:44:23 +02:00
Proddy
d6ee8ccb2d fix reset translation 2022-09-25 10:44:04 +02:00
proddy
a7930d8403 auto formatting using 'npm run format' 2022-09-24 18:52:19 +02:00
proddy
eeeb889ba7 show options when editing Entity 2022-09-24 18:49:35 +02:00
proddy
f1f4147628 bump 2022-09-24 18:49:08 +02:00
proddy
42118e0169 update packages (again!) 2022-09-24 18:49:01 +02:00
proddy
b67d69a5c8 add translation for Entity 2022-09-24 18:48:48 +02:00
Proddy
d8144c901d Merge pull request #640 from MichaelDvP/dev
mqtt ha settings, show memory in KB, etc.
2022-09-24 17:40:07 +02:00
MichaelDvP
e9d9cf7e48 fix console show system 2022-09-24 17:17:16 +02:00
MichaelDvP
0867d7fe0e Merge branch 'dev' of https://github.com/emsesp/EMS-ESP32 into dev 2022-09-24 16:31:27 +02:00
MichaelDvP
b646331adc dallas, analog HA object_id also without basename (commented out) 2022-09-24 16:17:33 +02:00
Proddy
30109a54ce Merge pull request #639 from proddy/dev
fix missing NL translations
2022-09-24 16:09:05 +02:00
Proddy
e85ca7dcd3 use translation of Restart 2022-09-24 16:08:40 +02:00
Proddy
faf05ceb72 cleanup text formatting 2022-09-24 16:08:29 +02:00
Proddy
049e37ba82 changes to NL 2022-09-24 16:08:15 +02:00
Proddy
d187ee23ea update packages 2022-09-24 16:07:50 +02:00
MichaelDvP
20b0c9653d kb -> KB 2022-09-24 14:22:49 +02:00
MichaelDvP
022b667858 use old HA object_id, #636, HA (un)subscribes with wildcard 2022-09-24 12:00:41 +02:00
MichaelDvP
1b4af09185 typos application used/free 2022-09-23 22:31:39 +02:00
MichaelDvP
58ca4efd42 Merge branch 'dev' of https://github.com/emsesp/EMS-ESP32 into dev_ 2022-09-23 21:58:41 +02:00
MichaelDvP
f1bb183017 ha config to basename, analog/dallas allow single/nested with ha 2022-09-23 21:54:13 +02:00
MichaelDvP
081c11c503 add Greenstar 30Ri boiler #635 2022-09-23 21:36:56 +02:00
MichaelDvP
d54843635a add application info, all memory info in kb 2022-09-23 21:36:01 +02:00
Proddy
12638275fa Merge pull request #633 from tefracky/pull-request-german-translation
Fixed German translation typos
2022-09-22 19:03:36 +05:30
Proddy
25c50435ca Merge pull request #632 from MichaelDvP/dev
fix #631, negative multiplicator
2022-09-22 19:03:04 +05:30
tefracky
e1c61cfadb Fixed German translation typos 2022-09-22 12:44:25 +02:00
tefracky
06fd860964 Fixed German translation typos 2022-09-22 12:13:48 +02:00
MichaelDvP
ab4e1f63c5 fix #631, negative multiplicator 2022-09-22 10:33:38 +02:00
Proddy
fb998a7e6a Merge pull request #630 from MichaelDvP/dev 2022-09-20 22:23:01 +05:30
MichaelDvP
dbbbfc1170 update translations 2022-09-20 17:34:44 +02:00
proddy
eb432d9acb auto formatting 2022-09-20 19:05:11 +05:30
proddy
23f65b9eb2 fixes does Factory Reset from the webUI work? #628 2022-09-20 19:05:02 +05:30
proddy
c11ea4fe0d update 2022-09-20 19:04:49 +05:30
proddy
6b1cfffb6f package updates 2022-09-20 19:04:43 +05:30
Proddy
918c0315eb Merge pull request #627 from MichaelDvP/dev
Fallback to en on empty entity string
2022-09-19 22:41:18 +05:30
MichaelDvP
106517fc8b Fallback to en on empty entity string 2022-09-19 16:28:27 +02:00
Proddy
96070d6b42 Merge pull request #626 from MichaelDvP/dev
Translations, move rf sensor #624
2022-09-19 19:32:40 +05:30
MichaelDvP
b22473d0d0 move rf sensor to thermostat #624 2022-09-19 15:45:00 +02:00
MichaelDvP
ef842b6c52 web polish translations (some with fallback) 2022-09-19 15:38:08 +02:00
MichaelDvP
e9415c1708 add german translations from tp1de 2022-09-19 15:37:24 +02:00
MichaelDvP
0114efc66f add Junkers thermostat wwCharge 2022-09-19 15:34:13 +02:00
Proddy
84e7847c16 Merge pull request #620 from CheeseE/dev
Add support for Lolin C3 mini
2022-09-19 16:18:34 +05:30
CheeseE
3f935942ea update ini file. 2022-09-19 12:32:44 +02:00
CheeseE
8f45322b7b disable board selection. 2022-09-19 12:05:25 +02:00
CheeseE
6e095c1085 fix compile issues. 2022-09-19 12:05:25 +02:00
CheeseE
acaceefc89 Add support for wemos c3 mini 2022-09-19 12:03:14 +02:00
proddy
21c3a4bee8 remove PIOENV for CI GH Actions calling 2022-09-18 17:04:25 +02:00
proddy
a959af80b5 remove duplicate 1/0 boolean code 2022-09-18 17:04:06 +02:00
proddy
e0d7e7698e 3.5.0 2022-09-18 15:43:38 +02:00
proddy
dbf9912c5a Merge remote-tracking branch 'origin/v3.5.0' into dev 2022-09-18 15:43:02 +02:00
proddy
f9038b9180 package updates 2022-09-17 10:52:11 -07:00
Proddy
506aacbd83 Merge pull request #623 from MichaelDvP/v3.5.0
disable uncomplete translations
2022-09-17 10:50:12 -07:00
MichaelDvP
63e31d672b add no-translation setting, disable uncomplete translations 2022-09-17 19:10:58 +02:00
MichaelDvP
0d5d353e99 read LittleFS.totalBytes only once on start 2022-09-17 17:10:23 +02:00
Proddy
766ec6a6e4 Merge pull request #622 from MichaelDvP/v3.5.0
add operation sign to log and some other small changes
2022-09-17 08:09:54 -07:00
MichaelDvP
872effb297 update packages 2022-09-17 16:59:45 +02:00
MichaelDvP
fb13b79a76 console always allow watch on/off in all languages 2022-09-17 16:42:16 +02:00
MichaelDvP
706daeb678 remove unused uart setting 2022-09-17 16:40:26 +02:00
MichaelDvP
9d6af82f9c remove double comment 2022-09-17 09:09:10 +02:00
MichaelDvP
2bc37027dd remove unused/obsolet command_pin 2022-09-13 07:56:07 +02:00
MichaelDvP
e70b6b210e check command send for valid data 2022-09-13 07:54:36 +02:00
MichaelDvP
df8a36c695 calculate length of telegram next part 2022-09-13 07:27:41 +02:00
MichaelDvP
702af4b1c8 add operation to log messages #594 2022-09-13 07:17:42 +02:00
MichaelDvP
cd15e11ce3 prepare for polish translation 2022-09-12 19:22:05 +02:00
MichaelDvP
ca8b236ccb add se, fix typos, formatting 2022-09-12 08:08:39 +02:00
MichaelDvP
06b057f4a2 Merge pull request #618 from mvjt/v3.5.0
Add Swedish language
2022-09-12 07:57:10 +02:00
mvjt
0158c9b434 Henriks changes again 2022-09-11 20:16:46 +02:00
mvjt
368728d12b Henriks changes 2022-09-11 20:10:22 +02:00
mvjt
c1cab103aa Removed WS 2022-09-11 14:02:33 +02:00
mvjt
d9da85638c Both files translated 2022-09-11 13:01:55 +02:00
mvjt
a25989d213 Both files translated 2022-09-11 13:00:37 +02:00
mvjt
6bfe4fe258 Both files translated 2022-09-11 12:52:40 +02:00
Proddy
e7cbb8cc77 Merge pull request #617 from MichaelDvP/v3.5.0
V3.5.0 small updates
2022-09-11 11:10:19 +01:00
MichaelDvP
06354efa76 update packages 2022-09-11 11:20:44 +02:00
MichaelDvP
345f05b23f don't render custom devices while editing 2022-09-11 11:20:29 +02:00
MichaelDvP
f0489cb918 fix custom name saving 2022-09-11 11:19:51 +02:00
MichaelDvP
d0b265985b update de/index 2022-09-11 11:18:03 +02:00
MichaelDvP
82f0902fa4 network/mqtt init fix #42 2022-09-11 11:17:34 +02:00
mvjt
1dcb44f81a Continue with translation 2022-09-10 22:14:58 +02:00
Proddy
9bbc421407 fix bug in masks 2022-09-10 21:39:29 +02:00
mvjt
54f335946e Started with second translation file 2022-09-10 21:08:10 +02:00
mvjt
d95d8278de Changed retry 2022-09-10 19:51:00 +02:00
mvjt
c813339945 Translated first file to SE 2022-09-10 19:43:03 +02:00
Proddy
cc44bc9d7f Command uses flash fullname instead of custom, to save on heap 2022-09-10 17:18:43 +02:00
Proddy
4cd655fb36 added Swedish/SE - Multi-language/I18n support #22 2022-09-09 21:09:51 +02:00
Proddy
5845c37672 Change name of entity within WebUI #612 2022-09-09 17:04:31 +02:00
proddy
9ae81779ff Change name of entity within WebUI #612 2022-09-09 12:35:21 +02:00
proddy
df4aa64883 Change name of entity within WebUI #612 2022-09-09 12:33:15 +02:00
MichaelDvP
70f94322ee csv-header and online time translation 2022-09-06 19:43:42 +02:00
MichaelDvP
c2ccb4edda Help page DE 2022-09-06 19:42:41 +02:00
MichaelDvP
f42fafb25f unused solar values 2022-09-06 19:42:08 +02:00
proddy
0bccf9d358 text changes again 2022-09-06 18:10:53 +02:00
proddy
d3f105d9b9 minor updates to text 2022-09-06 18:08:14 +02:00
proddy
5c240316ee use GB flag instead of US 2022-09-06 17:45:12 +02:00
Proddy
2fde0c6d8c add flag to menubar - #22 2022-09-06 16:43:32 +02:00
proddy
76d78f34ee updates #22 2022-09-06 15:04:25 +02:00
MichaelDvP
3efb3a99e9 Merge pull request #611 from bbqkees/bbqkees-dutch-translations
Bbqkees dutch translations web and entities
2022-09-05 18:28:39 +02:00
Kees
65dfc3b878 Update locale_translations.h 2022-09-05 15:30:05 +02:00
Kees
b820aad3fc Update index.ts 2022-09-05 15:28:39 +02:00
MichaelDvP
09d4cae6f4 allow enum commands to use en or translation 2022-09-02 16:00:15 +02:00
MichaelDvP
85308e52a7 formatting, add missing text 2022-09-02 15:33:42 +02:00
MichaelDvP
4f42ae7efc console show handle enum/bool like web 2022-09-02 14:16:24 +02:00
MichaelDvP
7cc2eac79d add nl to entity translation 2022-09-02 14:15:49 +02:00
MichaelDvP
e3487b4845 add nl language to web, add more translations 2022-09-02 14:15:13 +02:00
MichaelDvP
354b2facf7 update packages 2022-09-02 14:04:39 +02:00
MichaelDvP
0d381fd5e9 more german translations 2022-08-30 18:23:19 +02:00
MichaelDvP
65b7d64e92 Thermostat: mode, RC30/35 timers, telegram 13, 2022-08-30 17:38:40 +02:00
MichaelDvP
e79115d719 offset to new dallas, remove sensors if disabled 2022-08-30 17:36:03 +02:00
MichaelDvP
be4f49e96d name known device_ids 2022-08-30 17:34:50 +02:00
MichaelDvP
6b24a71ad7 set NTP sync interval 1 hour 2022-08-30 17:29:41 +02:00
Proddy
1ccacdc600 translate network 2022-08-28 16:36:04 +02:00
Proddy
3ea71e1dfb translate NTP, AP, MQTT and User 2022-08-28 15:06:20 +02:00
proddy
d8e324a005 translate system menu 2022-08-28 10:44:22 +02:00
proddy
7122e878a5 upload translations 2022-08-27 13:02:04 +02:00
proddy
c8848a9e76 #596 2022-08-27 13:01:52 +02:00
Proddy
84499dab35 DE translations for Settings, Customizations and Help 2022-08-26 16:14:28 +02:00
proddy
e9c695f76a add back HA mqtt subscribe 2022-08-26 09:21:24 +02:00
proddy
029ade8dd6 update packages latest typescript 2022-08-26 08:25:21 +02:00
proddy
0ebb509205 restart after rx/tx gpio change 2022-08-26 08:25:07 +02:00
proddy
9fa59310d2 fix translating times 2022-08-25 23:04:41 +02:00
Proddy
1f8e6cc82b translate dashboard status 2022-08-25 15:50:23 +02:00
Proddy
1a4ce643fc Multi-language/I18n support #22 2022-08-24 21:50:19 +02:00
842 changed files with 102682 additions and 82372 deletions

View File

@@ -1,35 +1,50 @@
---
name: Bug report
about: Create a report to help us improve
title: ''
labels: bug
assignees: ''
name: Problem Report/Change Request
about: Create a Report to help us improve
---
*Before creating a new issue please check that you have:*
<!-- Thanks for reporting an issue for this project. READ THIS FIRST:
* *searched the existing [issues](https://github.com/emsesp/EMS-ESP32/issues) (both open and closed)*
* *searched the [documentation help section](https://emsesp.github.io/docs)*
Please DO NOT OPEN AN ISSUE if your EMS-ESP version is not the latest from the dev branch, please update your device before submitting your issue. Your issue might already be solved. The latest precompiled binaries of EMS-ESP can be downloaded from https://github.com/emsesp/EMS-ESP32/releases/tag/latest
*Completing this template will help developers and contributors to address the issue. Try to be as specific and extensive as possible. If the information provided is not enough the issue will likely be closed.*
Please take a few minutes to complete the requested information below.
*You can now remove this line and the above ones. Text in italic is meant to be replaced by your own words. If any of the sections below are not relevant to the issue (for instance, the screenshots) then you can delete them.*
-->
**Bug description**
*A clear and concise description of what the bug is. Mention which EMS-ESP version you're using.*
### DESCRIPTION
**Steps to reproduce**
*Steps to reproduce the behavior.*
_A clear and concise description of what the problem is or the change requested._
**Expected behavior**
*A clear and concise description of what you expected to happen.*
### REQUESTED INFORMATION
**Screenshots**
*If applicable, add screenshots to help explain your problem.*
_Make sure your have performed every step and checked the applicable boxes before submitting your issue. Thank you!_
**Device information**
*Copy-paste here the information as it is outputted by the device. You can get this information by from http://ems-esp.local/api/system*
- [ ] Searched the issue in [issues](https://github.com/emsesp/EMS-ESP32/issues)
- [ ] Searched the issue in [discussions](https://github.com/emsesp/EMS-ESP32/discussions)
- [ ] Searched the issue in the [docs](https://emsesp.org/Troubleshooting/)
- [ ] Searched the issue in the [chat](https://discord.gg/3J3GgnzpyT)
- [ ] Provide the System information in the area below, taken from `http://<IP>/api/system`
**Additional context**
*Add any other context about the problem here.*
```json
Paste System information here....
```
### TO REPRODUCE
_Steps to reproduce the behavior:_
### EXPECTED BEHAVIOUR
_A clear and concise description of what you expected to happen._
### SCREENSHOTS
_If applicable, add screenshots to help explain your issue._
### ADDITIONAL CONTEXT
_Add any other context about the issue here._
**(Please remember to close the issue when it has been addressed)**

11
.github/ISSUE_TEMPLATE/config.yml vendored Normal file
View File

@@ -0,0 +1,11 @@
blank_issues_enabled: false
contact_links:
- name: EMS-ESP Docs
url: https://emsesp.org
about: All the information related to EMS-ESP.
- name: EMS-ESP Discussions and Support
url: https://github.com/emsesp/EMS-ESP32/discussions
about: EMS-ESP usage Questions, Feature Requests and Projects.
- name: EMS-ESP Users Chat
url: https://discord.gg/3J3GgnzpyT
about: Chat for feedback, questions and troubleshooting.

View File

@@ -1,26 +0,0 @@
---
name: Feature request
about: Suggest an idea for this project
title: ''
labels: enhancement
assignees: ''
---
*Before creating a new feature request please check that you have searched the existing [issues](https://github.com/emsesp/EMS-ESP32/issues) (both open and closed)*
*Completing this template will help developers and contributors evaluating the feature. If the information provided is not enough the issue will likely be closed.*
*You can now remove this line and the above ones. Text in italic is meant to be replaced by your own words. If any of the sections below are not relevant to the request then you can delete them.*
**Is your feature request related to a problem? Please describe.**
*A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]*
**Describe the solution you'd like**
*A clear and concise description of what you want to happen.*
**Describe alternatives you've considered**
*A clear and concise description of any alternative solutions or features you've considered.*
**Additional context**
*Add any other context or screenshots about the feature request here.*

View File

@@ -1,29 +0,0 @@
---
name: Questions & Troubleshooting
about: Anything not a bug or feature request
title: ''
labels: question
assignees: ''
---
*Before creating a new issue please check that you have:*
* *searched the existing [issues](https://github.com/emsesp/EMS-ESP32/issues) (both open and closed)*
* *searched the [documentation help section](https://emsesp.github.io/docs)*
*Completing this template will help developers and contributors help you. Try to be as specific and extensive as possible. If the information provided is not enough the issue will likely be closed.*
*You can now remove this line and the above ones. Text in italic is meant to be replaced by your own words. If any of the sections below are not relevant to the issue (for instance, the screenshots) then you can delete them.*
**Question**
*A clear and concise description of what the problem/doubt is.*
**Screenshots**
*If applicable, add screenshots to help explain your problem.*
**Device information**
*Copy-paste here the information as it is outputted by the device. You can get this information from http://ems-esp.local/api/system*
**Additional context**
*Add any other context about the problem here.*

View File

@@ -0,0 +1,25 @@
name: 'github-releases-to-discord'
on:
workflow_dispatch:
release:
types: [published]
jobs:
github-releases-to-discord:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: GitHub Releases To Discord
uses: SethCohen/github-releases-to-discord@v1.13.1
with:
webhook_url: ${{ secrets.WEBHOOK_URL }}
color: '2105893'
username: 'Release Changelog'
avatar_url: 'https://cdn.discordapp.com/icons/816637840644505620/0b14718532d855c452903851b4f0c9a2.png'
content: '||@everyone||'
footer_title: 'Changelog'
footer_icon_url: 'https://cdn.discordapp.com/icons/816637840644505620/0b14718532d855c452903851b4f0c9a2.png'
footer_timestamp: true

View File

@@ -1,57 +1,64 @@
name: "pre-release"
name: 'pre-release'
on:
workflow_dispatch:
push:
branches:
- "dev"
- 'dev'
jobs:
pre-release:
name: "Automatic pre-release build"
name: 'Automatic pre-release build'
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4
- uses: actions/checkout@v2
- uses: actions/setup-python@v2
- uses: actions/setup-node@v2
- name: Enable Corepack
run: corepack enable
- name: Install python 3.11
uses: actions/setup-python@v5
with:
node-version: '16'
python-version: '3.11'
- name: Get EMS-ESP source code and version
- name: Install Node.js 20
uses: actions/setup-node@v4
with:
node-version: '20.x'
- name: Get EMS-ESP version
id: build_info
run: |
version=`grep -E '^#define EMSESP_APP_VERSION' ./src/version.h | awk -F'"' '{print $2}'`
echo "::set-output name=version::$version"
echo "VERSION=$version" >> $GITHUB_OUTPUT
- name: Install PlatformIO
run: |
python -m pip install --upgrade pip
pip install -U platformio
platformio upgrade
platformio update
- name: Build WebUI
run: |
cd interface
npm ci
npm run build
yarn install
yarn typesafe-i18n --no-watch
sed -i "s/= 'pl'/= 'en'/" ./src/i18n/i18n-util.ts
yarn build
yarn webUI
- name: Build firmware
- name: Build all PIO target environments from default_envs
run: |
platformio run -e ci
platformio run
- name: Create a GH Release
id: "automatic_releases"
uses: "marvinpinto/action-automatic-releases@latest"
- name: Create GitHub Release
id: 'automatic_releases'
uses: emsesp/action-automatic-releases@v1.0.0
with:
repo_token: "${{ secrets.GITHUB_TOKEN }}"
title: Development Build v${{steps.build_info.outputs.version}}
automatic_release_tag: "latest"
repo_token: '${{ secrets.GITHUB_TOKEN }}'
title: Development Build v${{steps.build_info.outputs.VERSION}}
automatic_release_tag: 'latest'
prerelease: true
files: |
CHANGELOG_LATEST.md
./build/firmware/*.*

View File

@@ -1,57 +1,34 @@
# see https://github.com/marketplace/actions/sonarcloud-scan-for-c-and-c#usage
name: Sonar Check
on:
push:
branches:
- dev
pull_request:
types: [opened, synchronize, reopened]
# pull_request:
# types: [opened, synchronize, reopened]
jobs:
build:
name: Build
name: Build and analyze
if: github.repository == 'emsesp/EMS-ESP32'
runs-on: ubuntu-latest
if: github.repository_owner == 'emsesp'
# if: github.repository == 'emsesp/EMS-ESP32'
env:
# https://binaries.sonarsource.com/?prefix=Distribution/sonar-scanner-cli/
SONAR_SCANNER_VERSION: 4.7.0.2747
SONAR_SERVER_URL: "https://sonarcloud.io"
BUILD_WRAPPER_OUT_DIR: build_wrapper_output_directory
BUILD_WRAPPER_OUT_DIR: bw-output
steps:
- uses: actions/checkout@v2
- name: Checkout repository
uses: actions/checkout@v4
with:
fetch-depth: 0 # Shallow clones should be disabled for a better relevancy of analysis
- name: Set up JDK 11
uses: actions/setup-java@v1
with:
java-version: 11
- name: Cache SonarCloud packages
uses: actions/cache@v1
with:
path: ~/.sonar/cache
key: ${{ runner.os }}-sonar
restore-keys: ${{ runner.os }}-sonar
- name: Download and set up sonar-scanner
env:
SONAR_SCANNER_DOWNLOAD_URL: https://binaries.sonarsource.com/Distribution/sonar-scanner-cli/sonar-scanner-cli-${{ env.SONAR_SCANNER_VERSION }}-linux.zip
run: |
mkdir -p $HOME/.sonar
curl -sSLo $HOME/.sonar/sonar-scanner.zip ${{ env.SONAR_SCANNER_DOWNLOAD_URL }}
unzip -o $HOME/.sonar/sonar-scanner.zip -d $HOME/.sonar/
echo "$HOME/.sonar/sonar-scanner-${{ env.SONAR_SCANNER_VERSION }}-linux/bin" >> $GITHUB_PATH
- name: Download and set up build-wrapper
env:
BUILD_WRAPPER_DOWNLOAD_URL: ${{ env.SONAR_SERVER_URL }}/static/cpp/build-wrapper-linux-x86.zip
run: |
curl -sSLo $HOME/.sonar/build-wrapper-linux-x86.zip ${{ env.BUILD_WRAPPER_DOWNLOAD_URL }}
unzip -o $HOME/.sonar/build-wrapper-linux-x86.zip -d $HOME/.sonar/
echo "$HOME/.sonar/build-wrapper-linux-x86" >> $GITHUB_PATH
fetch-depth: 0
- name: Install sonar-scanner and build-wrapper
uses: SonarSource/sonarcloud-github-c-cpp@v2
- name: Run build-wrapper
run: |
make clean
build-wrapper-linux-x86-64 --out-dir ${{ env.BUILD_WRAPPER_OUT_DIR }} make clean all
run: build-wrapper-linux-x86-64 --out-dir ${{ env.BUILD_WRAPPER_OUT_DIR }} make all
- name: Run sonar-scanner
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
run: |
sonar-scanner
run: sonar-scanner --define sonar.cfamily.compile-commands="${{ env.BUILD_WRAPPER_OUT_DIR }}/compile_commands.json"

View File

@@ -1,45 +1,54 @@
name: "tagged-release"
name: 'tagged-release'
on:
workflow_dispatch:
push:
tags:
- "v*"
- 'v*'
jobs:
tagged-release:
name: "Tagged Release"
name: 'Tagged Release'
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4
- uses: actions/checkout@v2
- uses: actions/setup-python@v2
- uses: actions/setup-node@v2
- name: Enable Corepack
run: corepack enable
- name: Install python 3.11
uses: actions/setup-python@v5
with:
node-version: '16'
python-version: '3.11'
- name: Install Node.js 20
uses: actions/setup-node@v4
with:
node-version: '20.x'
- name: Install PlatformIO
run: |
python -m pip install --upgrade pip
pip install -U platformio
platformio upgrade
platformio update
- name: Build WebUI
run: |
cd interface
npm ci
npm run build
yarn install
yarn typesafe-i18n --no-watch
sed -i "s/= 'pl'/= 'en'/" ./src/i18n/i18n-util.ts
yarn build
yarn webUI
- name: Build firmware
- name: Build all PIO target environments from default_envs
run: |
platformio run -e ci
platformio run
- name: Release
uses: "marvinpinto/action-automatic-releases@latest"
- name: Create GitHub Release
uses: emsesp/action-automatic-releases@v1.0.0
with:
repo_token: "${{ secrets.GITHUB_TOKEN }}"
repo_token: '${{ secrets.GITHUB_TOKEN }}'
prerelease: false
files: |
CHANGELOG.md

54
.github/workflows/test_release.yml vendored Normal file
View File

@@ -0,0 +1,54 @@
name: 'test-release'
on:
workflow_dispatch:
push:
branches:
- 'dev2'
jobs:
pre-release:
name: 'Automatic test-release build'
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Enable Corepack
run: corepack enable
- uses: actions/setup-python@v5
with:
python-version: '3.11'
- name: Use Node.js 20.x
uses: actions/setup-node@v4
with:
node-version: '20.x'
- name: Get EMS-ESP source code and version
id: build_info
run: |
version=`grep -E '^#define EMSESP_APP_VERSION' ./src/version.h | awk -F'"' '{print $2}'`
echo "VERSION=$version" >> $GITHUB_OUTPUT
- name: Install PlatformIO
run: |
python -m pip install --upgrade pip
pip install -U platformio
- name: Build WebUI
run: |
cd interface
yarn install
yarn typesafe-i18n --no-watch
sed -i "s/= 'pl'/= 'en'/" ./src/i18n/i18n-util.ts
yarn build
yarn webUI
- name: Build all target environments from default_envs
run: |
platformio run
- name: Create GitHub Release
id: 'automatic_releases'
uses: emsesp/action-automatic-releases@v1.0.0
with:
repo_token: '${{ secrets.GITHUB_TOKEN }}'
title: Test Build v${{steps.build_info.outputs.VERSION}}
automatic_release_tag: 'test'
prerelease: true
files: |
CHANGELOG_LATEST.md
./build/firmware/*.*

61
.gitignore vendored
View File

@@ -1,37 +1,74 @@
# vscode
.vscode
.directory
workspace.code-workspace
.vscode/c_cpp_properties.json
.vscode/extensions.json
.vscode/launch.json
.vscode/settings.json
# build
build/
# c++ compiling
.clang_complete
.gcc-flags.json
cppcheck.out.xml
debug.log
# platformio
.pio
pio_local.ini
/.VSCodeCounter
*_old
# OS specific
.DS_Store
*Thumbs.db
# project specfic
/scripts/stackdmp.txt
emsesp
# web specfic
build/
dist/
/data/www
/lib/framework/WWWData.h
/interface/build
node_modules
/interface/.eslintcache
stats.html
*.sln
*.sw?
.pnp.*
*/.yarn/*
!.yarn/patches
!.yarn/plugins
!.yarn/releases
!.yarn/sdks
!.yarn/versions
yarn.lock
analyse.html
interface/vite.config.ts.timestamp*
*.local
# i18n generated files
interface/src/i18n/i18n-react.tsx
interface/src/i18n/i18n-types.ts
interface/src/i18n/i18n-util.ts
interface/src/i18n/i18n-util.sync.ts
interface/src/i18n/i18n-util.async.ts
# scripts
test.sh
scripts/run.sh
scripts/__pycache__
.temp
scripts/stackdmp.txt
# sonar
.scannerwork/
sonar/
build_wrapper_output_directory/
bw-output/
# standalone executable for testing
emsesp
interface/tsconfig.tsbuildinfo
# python virtual environment
venv/
# cspell
words-found-verbose.txt
# sonarlint
compile_commands.json
package.json

6
.prettierignore Normal file
View File

@@ -0,0 +1,6 @@
*/node_modules/
build/
dist/*
interface/src/i18n/*
.typesafe-i18n.json

13
.prettierrc Normal file
View File

@@ -0,0 +1,13 @@
{
"plugins": ["@trivago/prettier-plugin-sort-imports"],
"trailingComma": "none",
"tabWidth": 2,
"semi": true,
"singleQuote": true,
"printWidth": 85,
"bracketSpacing": true,
"importOrder": ["^react", "^@mui/(.*)$", "^api*/(.*)$", "<THIRD_PARTY_MODULES>", "^[./]"],
"importOrderSeparation": true,
"importOrderSortSpecifiers": true,
"importOrderGroupNamespaceSpecifiers": true
}

View File

@@ -0,0 +1,4 @@
{
"sonarCloudOrganization": "emsesp",
"projectKey": "emsesp_EMS-ESP32"
}

101
.vscode/settings.json vendored Normal file
View File

@@ -0,0 +1,101 @@
{
"search.exclude": {
"**/.yarn": true,
"**/.pnp.*": true
},
"editor.codeActionsOnSave": {
"source.fixAll": "explicit"
},
"eslint.validate": [
"typescript"
],
"eslint.codeActionsOnSave.rules": null,
"eslint.nodePath": "interface/.yarn/sdks",
"eslint.workingDirectories": ["interface"],
"prettier.prettierPath": "",
"typescript.enablePromptUseWorkspaceTsdk": true,
"files.associations": {
"*.tsx": "typescriptreact",
"*.tcc": "cpp",
"optional": "cpp",
"istream": "cpp",
"ostream": "cpp",
"ratio": "cpp",
"system_error": "cpp",
"array": "cpp",
"functional": "cpp",
"regex": "cpp",
"tuple": "cpp",
"type_traits": "cpp",
"utility": "cpp",
"string": "cpp",
"string_view": "cpp",
"atomic": "cpp",
"bitset": "cpp",
"cctype": "cpp",
"chrono": "cpp",
"clocale": "cpp",
"cmath": "cpp",
"condition_variable": "cpp",
"cstdarg": "cpp",
"cstddef": "cpp",
"cstdint": "cpp",
"cstdio": "cpp",
"cstdlib": "cpp",
"cstring": "cpp",
"ctime": "cpp",
"cwchar": "cpp",
"cwctype": "cpp",
"deque": "cpp",
"list": "cpp",
"unordered_map": "cpp",
"unordered_set": "cpp",
"vector": "cpp",
"exception": "cpp",
"algorithm": "cpp",
"iterator": "cpp",
"map": "cpp",
"memory": "cpp",
"memory_resource": "cpp",
"numeric": "cpp",
"random": "cpp",
"set": "cpp",
"fstream": "cpp",
"initializer_list": "cpp",
"iomanip": "cpp",
"iosfwd": "cpp",
"iostream": "cpp",
"limits": "cpp",
"mutex": "cpp",
"new": "cpp",
"sstream": "cpp",
"stdexcept": "cpp",
"streambuf": "cpp",
"thread": "cpp",
"cinttypes": "cpp",
"typeinfo": "cpp"
},
"todo-tree.filtering.excludeGlobs": [
"**/vendor/**",
"**/node_modules/**",
"**/dist/**",
"**/bower_components/**",
"**/build/**",
"**/.vscode/**",
"**/.github/**",
"**/_output/**",
"**/*.min.*",
"**/*.map",
"**/ArduinoJson/**"
],
"cSpell.enableFiletypes": [
"ini",
"makefile"
],
"typescript.preferences.preferTypeOnlyAutoImports": true,
"sonarlint.pathToCompileCommands": "${workspaceFolder}/compile_commands.json",
"sonarlint.connectedMode.project": {
"connectionId": "emsesp",
"projectKey": "emsesp_EMS-ESP32"
}
}

View File

@@ -5,13 +5,356 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
# [3.4.3]
## [3.7.0] October 27 2024
## **IMPORTANT! BREAKING CHANGES with 3.6.5**
- "ww" and "wwc" has been renamed to "dhw". It is nested JSON object in both the MQTT and API outputs. The old prefix has also been removed from MQTT topics ([#1634](https://github.com/emsesp/EMS-ESP32/issues/1634)). This will impact historical data in home automation systems like Home Assistant and IOBroker. To preserve the current value of dhw energy (was previously nrgww) refer to this issue [#1938](https://github.com/emsesp/EMS-ESP32/issues/1938).
- dhw entities from the MM100/SM100 have been moved under a new Device called 'water'.
- The automatically generated temperature sensor ID has replaced dashes (`-`) with underscores (`_`) to be compatible with Home Assistant.
- `api/system/info` has it's JSON key names changed to camelCase syntax.
For more details go to [www.emsesp.org](https://www.emsesp.org/).
## Added
- some more entities for dhw with SM100 module
- thermostat second dhw circuit [#1634](https://github.com/emsesp/EMS-ESP32/issues/1634)
- remote thermostat emulation for RC100H, RC200 and FB10 [#1287](https://github.com/emsesp/EMS-ESP32/discussions/1287), [#1602](https://github.com/emsesp/EMS-ESP32/discussions/1602), [#1551](https://github.com/emsesp/EMS-ESP32/discussions/1551)
- heatpump dhw stop temperatures [#1624](https://github.com/emsesp/EMS-ESP32/issues/1624)
- reset history [#1695](https://github.com/emsesp/EMS-ESP32/issues/1695)
- heatpump entities `fan` and `shutdown` [#1690](https://github.com/emsesp/EMS-ESP32/discussions/1690)
- mqtt HA-mode 3 for v3.6 compatible HA entities, set on update v3.6->v3.7
- HP input states [#1723](https://github.com/emsesp/EMS-ESP32/discussions/1723)
- holiday settings for rego 3000 [#1735](https://github.com/emsesp/EMS-ESP32/issues/1735)
- Added scripts for OTA (scripts/upload.py and upload_cli.py) [#1738](https://github.com/emsesp/EMS-ESP32/issues/1738)
- timeout for remote thermostat emulation [#1680](https://github.com/emsesp/EMS-ESP32/discussions/1680), [#1774](https://github.com/emsesp/EMS-ESP32/issues/1774)
- CR120 thermostat as own model() [#1779](https://github.com/emsesp/EMS-ESP32/discussions/1779)
- modules - external linkable module library [#1778](https://github.com/emsesp/EMS-ESP32/issues/1778)
- scheduler onChange and Conditions [#1806](https://github.com/emsesp/EMS-ESP32/issues/1806)
- make remote control timeout editable [#1774](https://github.com/emsesp/EMS-ESP32/issues/1774)
- added extra pump characteristics (mode and pressure for EMS+) by @SLTKA [#1802](https://github.com/emsesp/EMS-ESP32/pull/1802)
- allow device name to be customized [#1174](https://github.com/emsesp/EMS-ESP32/issues/1174)
- Modbus support by @mheyse [#1744](https://github.com/emsesp/EMS-ESP32/issues/1744)
- System Message command [#1854](https://github.com/emsesp/EMS-ESP32/issues/1854)
- scheduler can use web get/post for values and commands [#1806](https://github.com/emsesp/EMS-ESP32/issues/1806)
- RT800 remote emulation [#1867](https://github.com/emsesp/EMS-ESP32/issues/1867)
- RC310 cooling parameters [#1857](https://github.com/emsesp/EMS-ESP32/issues/1857)
- command `api/device/entities` [#1897](https://github.com/emsesp/EMS-ESP32/issues/1897)
- switchprogmode [#1903](https://github.com/emsesp/EMS-ESP32/discussions/1903)
- autodetect and download firmware upgrades via the WebUI
- command 'show log' that lists out the current weblog buffer, showing last messages.
- default web log buffer to 25 lines for ESP32s with no PSRAM
- try and determine correct board profile if none is set during boot
- auto Scroll in WebLog UI - reduced delay so incoming logs are faster
- uploading custom support info, shown to Guest users in Help page [#2054](https://github.com/emsesp/EMS-ESP32/issues/2054)
- feature: Dashboard showing all data (favorites, sensors, custom) [#1958](https://github.com/emsesp/EMS-ESP32/issues/1958)
- entity for low-temperature boilers pump start temp (pumpOnTemp) #2088 [#2088](https://github.com/emsesp/EMS-ESP32/issues/2088)
- internal ESP32 temperature sensor on the S3 [#2077](https://github.com/emsesp/EMS-ESP32/issues/2077)
- MQTT status topic (used in connect and last will) set to Retain [#2086](https://github.com/emsesp/EMS-ESP32/discussions/2086)
- Czech language [2096](https://github.com/emsesp/EMS-ESP32/issues/2096)
- Developer Mode and send EMS Read Commands from WebUI [#2116](https://github.com/emsesp/EMS-ESP32/issues/2116)
- Scheduler functions [#2115](https://github.com/emsesp/EMS-ESP32/issues/2115)
- Set device custom name from telegram 0x01 [#2073](https://github.com/emsesp/EMS-ESP32/issues/2073)
## Fixed
- Fix for new installations with filesystem not initializing
- remote thermostat emulation for RC200 on Rego2000/3000 thermostats [#1691](https://github.com/emsesp/EMS-ESP32/discussions/1691)
- log shows data for F7/F9 requests
- Detection of LittleFS for factory setting wasn't working
- Check for bad GPIOs with Ethernet before the ethernet is initialized
- Show values with factor 50 on webUI [#2064](https://github.com/emsesp/EMS-ESP32/issues/2064)
- Rendering of values between -1 and 0
- Value for 32bit times not-set [#2109](https://github.com/emsesp/EMS-ESP32/issues/2109)
# [3.4.2]
## Changed
- use flag for BC400 compatible thermostats, manage different mode settings
- use factory partition for 16M flash
- store digital out states to nvs
- Refresh UI - moving settings to one location [#1665](https://github.com/emsesp/EMS-ESP32/issues/1665)
- rename DeviceValueTypes, add UINT32 for custom entities
- dynamic register dhw circuits for thermostat
- removed OTA feature [#1738](https://github.com/emsesp/EMS-ESP32/issues/1738)
- added shower min duration [#1801](https://github.com/emsesp/EMS-ESP32/issues/1801)
- Include TXT file along with the generated CSV for Device Data export/download
- thermostat/remotetemp as command [#1835](https://github.com/emsesp/EMS-ESP32/discussions/1835)
- temperaturesensor id notation with underscore [#1794](https://github.com/emsesp/EMS-ESP32/discussions/1794)
- Change key-names in JSON to be compliant and consistent [#1860](https://github.com/emsesp/EMS-ESP32/issues/1860)
- Updates to webUI [#1920](https://github.com/emsesp/EMS-ESP32/issues/1920)
- Correct firmware naming #1933 [#1933](https://github.com/emsesp/EMS-ESP32/issues/1933)
- Don't start Serial console if not connected to a Serial port. Will initiate manually after a CTRL-C/CTRL-S
- WebLog UI matches color schema of the terminal console correctly
- Updated Web libraries, ArduinoJson
- Help page doesn't show detailed tech info if the user is not 'admin' role [#2054](https://github.com/emsesp/EMS-ESP32/issues/2054)
- removed system command `allvalues` and moved to an action called `export`
- Show ems-esp internal devices in device list of system/info
- Scheduler and mqtt run async on systems with psram
- Show IPv6 address type (local/global/ula) in log
## [3.6.5] March 23 2024
## **IMPORTANT! BREAKING CHANGES**
- The Wifi Tx Power setting in Network Settings will be reset to Auto
## Added
- thermostat boost mode and boost time [#1446](https://github.com/emsesp/EMS-ESP32/issues/1446)
- heatpump energy meters [#1463](https://github.com/emsesp/EMS-ESP32/issues/1463)
- heatpump max power [#1475](https://github.com/emsesp/EMS-ESP32/issues/1475)
- checkbox for MQTT-TLS enable [#1474](https://github.com/emsesp/EMS-ESP32/issues/1474)
- added SK (Slovak) language. Thanks @misa1515
- CPU info [#1497](https://github.com/emsesp/EMS-ESP32/pull/1497)
- Show network hostname in Web UI under Network Status
- Improved HA Discovery so each section (EMS device, Scheduler, Analog, Temperature, Custom, Shower) have their own section
- boiler Bosch C1200W, id 12, [#1536](https://github.com/emsesp/EMS-ESP32/issues/1536)
- mixer MM100 telegram 0x2CC [#1554](https://github.com/emsesp/EMS-ESP32/issues/1554)
- boiler hpSetDiffPressure [#1563](https://github.com/emsesp/EMS-ESP32/issues/1563)
- custom variables [#1423](https://github.com/emsesp/EMS-ESP32/issues/1423)
- weather compensation [#1642](https://github.com/emsesp/EMS-ESP32/issues/1642)
- env and partitions for DevKitC-1-N32R8 [#1635](https://github.com/emsesp/EMS-ESP32/discussions/1635)
- command `restart partitionname` and button long press to start with other partition [#1657](https://github.com/emsesp/EMS-ESP32/issues/1657)
- command `set service <mqtt|ota|ntp|ap> <enable|disable>` [#1663](https://github.com/emsesp/EMS-ESP32/issues/1663)
## Fixed
- exhaust temperature for some boilers
- add back boil2hyst [#1477](https://github.com/emsesp/EMS-ESP32/issues/1477)
- subscribed MQTT topics not detecting changes by EMS-ESP [#1494](https://github.com/emsesp/EMS-ESP32/issues/1494)
- changed HA name and grouping to be consistent [#1528](https://github.com/emsesp/EMS-ESP32/issues/1528)
- MQTT autodiscovery in Domoticz not working [#1360](https://github.com/emsesp/EMS-ESP32/issues/1528)
- dhw comfort for new ems+, [#1495](https://github.com/emsesp/EMS-ESP32/issues/1495)
- added writeable icon to Web's Custom Entity page for each entity shown in the table
- Wifi Tx Power not adjusted [#1614](https://github.com/emsesp/EMS-ESP32/issues/1614)
- MQTT discovery of custom entity doesn't consider type of data [#1587](https://github.com/emsesp/EMS-ESP32/issues/1587)
- WiFi TxPower wasn't correctly used. Added an 'Auto' setting, which is the default.
- dns w/wo IPv6 [#1644](https://github.com/emsesp/EMS-ESP32/issues/1644)
## Changed
- HA don't set entity_category to Diagnostic/Configuration for EMS entities [#1459](https://github.com/emsesp/EMS-ESP32/discussions/1459)
- upgraded ArduinoJson to 7.0.0 #1538 and then 7.0.2
- small changes to the API for analog and temperature sensors
- Length of mqtt Broker adress [#1619](https://github.com/emsesp/EMS-ESP32/issues/1619)
- C++ optimizations - see <https://github.com/emsesp/EMS-ESP32/pull/1615>
- Send MQTT heartbeat immediately after connection [#1628](https://github.com/emsesp/EMS-ESP32/issues/1628)
- 16MB partitions with second nvs, larger FS, Coredump, optional factory partition
- stop fetching empty telegrams after 5 min
## [3.6.4] November 24 2023
## **IMPORTANT! BREAKING CHANGES**
Writeable Text entities have moved from type `sensor` to `text` in Home Assistant to make them also editable within an HA dashboard. Examples are `datetime`, `holidays`, `switchtime`, `vacations`, `maintenancedate`. You will need to manually remove any old discovery topics from your MQTT broker using an application like MQTT Explorer.
## Added
- humidity for ventilation devices
- telegrams for RC100H, hc2, etc. (seen on discord, not tested)
- names for BC400, GB192i.2, read temperatures for low loss header and heatblock [#1317](https://github.com/emsesp/EMS-ESP32/discussions/1317)
- option for `forceheatingoff` [#1262](https://github.com/emsesp/EMS-ESP32/issues/1262)
- remote thermostat emulation RC100H for RC3xx [#1278](https://github.com/emsesp/EMS-ESP32/discussions/1278)
- shower_data MQTT payload contains the timestamp [#1329](https://github.com/emsesp/EMS-ESP32/issues/1329)
- HA discovery for writeable text entities [#1337](https://github.com/emsesp/EMS-ESP32/pull/1377)
- autodetect board_profile, store in nvs, add telnet command option, add E32V2
- heat pump high res energy counters [#1348, #1349. #1350](https://github.com/emsesp/EMS-ESP32/issues/1348)
- optional bssid in network settings
- extension module EM100 [#1315](https://github.com/emsesp/EMS-ESP32/discussions/1315)
- digital_out with new options for polarity and startup state
- added 'system allvalues' command that dumps all the EMS device values, plus sensors and any custom entities
## Fixed
- remove command `remoteseltemp`, thermostat accept it only from remote thermostat
- shower_data MQTT payload contains the timestamp [#1329](https://github.com/emsesp/EMS-ESP32/issues/1329)
- fixed helper text in Web Device Entity dialog box for numerical ranges
- MQTT base with paths not working in HA [#1393](https://github.com/emsesp/EMS-ESP32/issues/1393)
- set/read thermostat mode for RC100-RC300, [#1440](https://github.com/emsesp/EMS-ESP32/issues/1440) [#1442](https://github.com/emsesp/EMS-ESP32/issues/1442)
- some setting commands for ems-boiler have used wrong ems+ telegram in 3.6.3
## Changed
- update to platform 6.4.0, arduino 2.0.14 / idf 4.4.6
- small changes for arduino 3.0.0 / idf 5.1 compatibility (not backward compatible to platform 6.3.2 and before)
- AP start after 10 sec, stay until station/eth connected
- tested wifi-all-channel-scan (3.6.3-dev4 a-e), removed again because of connect issues
- mqtt disconnect stops queue
## [3.6.2] October 1 2023
## **IMPORTANT! BREAKING CHANGES**
## Added
- Power entities
- Optional input of BSSID for AP connection
- Return empty json if no entries in scheduler/custom/analogsensor/temperaturesensor
## Fixed
- Wifi full scan to get strongest AP
- Add missing dhw tags
- Sending a dash/- to the Reset command doesn't return an error [#1308](https://github.com/emsesp/EMS-ESP32/discussions/1308)
## Changed
- MQTT queue max 300 messages, check heap and maxAlloc
- API call commands are logged as WARN in the log
- Reset Command renamed to 'reset' in lowercase in EN
## [3.6.1] September 9 2023
## **IMPORTANT! BREAKING CHANGES**
- `shower_data` MQTT topic shows duration is seconds (was previously a full english sentence)
## Added
- Show WiFi rssi in Network Status Page, show quality as color
## Fixed
- Issue in espMqttClient causing a memory leak when MQTT broker is disconnected due to network unavailability [#1264](https://github.com/emsesp/EMS-ESP32/issues/1264)
- Using MQTT enum values correctly formatted in MQTT Discovery [#1280](https://github.com/emsesp/EMS-ESP32/issues/1280)
## Changed
- MQTT free mem check set to 60 kb
- Small cosmetic changes to Searching in Customization web page
- Updated to espressif32@6.4.0
# [3.6.0] August 13 2023
## **IMPORTANT! BREAKING CHANGES**
There are breaking changes between 3.5.x and earlier versions of 3.6.0. Please read carefully before applying the update.
- The sensors have been renamed. `dallassensor` is now `temperaturesensor` in the MQTT topic and named `ts` in the Customizations file. Likewise `analogs` is now `analogsensor` in MQTT and called `as` in the Customizations file. If you have previous customizations you will need to manually update by downloading, changing the JSON file and uploading. It's also recommended cleaning up any old MQTT topics from your broker using an application like MQTTExplorer.
## Added
- Workaround for better Domoticz MQTT integration? [#904](https://github.com/emsesp/EMS-ESP32/issues/904)
- Show MAC address without connecting to network enhancement [#933](https://github.com/emsesp/EMS-ESP32/issues/933)
- Warn user in WebUI of unsaved changes [#911](https://github.com/emsesp/EMS-ESP32/issues/911)
- Detect old Tado thermostat, device-id 0x19, no entities
- Some more HM200 entities [#500](https://github.com/emsesp/EMS-ESP32/issues/500)
- Added Scheduler [#701](https://github.com/emsesp/EMS-ESP32/issues/701)
- Added Custom Entities read/write from EMS bus
- Build S3 binary with github actions
- Greenstar HIU [#1158](https://github.com/emsesp/EMS-ESP32/issues/1158)
- AM200 code 10 [#1161](https://github.com/emsesp/EMS-ESP32/issues/1161)
- Ventilation device (Logavent HRV176) [#1172](https://github.com/emsesp/EMS-ESP32/issues/1172)
- Turn ETH off on wifi connect [#1167](https://github.com/emsesp/EMS-ESP32/issues/1167)
- Support for multiple EMS-ESPs with HA [#1196](https://github.com/emsesp/EMS-ESP32/issues/1196)
- Italian translation [#1199](https://github.com/emsesp/EMS-ESP32/issues/1199)
- Turkish language support [#1076](https://github.com/emsesp/EMS-ESP32/issues/1076)
- Buderus GB182 - HC1 mode change not work bug [#1193](https://github.com/emsesp/EMS-ESP32/issues/1193)
- Minimal flow temperature enhancement [#1192](https://github.com/emsesp/EMS-ESP32/issues/1192)
- Roomtemperature Switching Difference enhancement [#1191](https://github.com/emsesp/EMS-ESP32/issues/1191)
- Dew Point Temperature Difference enhancement [#1190](https://github.com/emsesp/EMS-ESP32/issues/1190)
- Control of heating circuit mode enhancement [#1187](https://github.com/emsesp/EMS-ESP32/issues/1187)
- Warn user in WebUI of unsaved changes enhancement [#911](https://github.com/emsesp/EMS-ESP32/issues/911)
- Create safebuild app to fit into factory partition to give ESP32 more flash memory enhancement [#608](https://github.com/emsesp/EMS-ESP32/issues/608)
- Support ESP32 S2, C3 mini and S3 [#605](https://github.com/emsesp/EMS-ESP32/issues/605)
- Support Buderus AM200 [#1161](https://github.com/emsesp/EMS-ESP32/issues/1161)
- Custom telegram handler [#1155](https://github.com/emsesp/EMS-ESP32/issues/1155)
- Added support for TLS in MQTT (ESP32-S3 only) [#1178](https://github.com/emsesp/EMS-ESP32/issues/1178)
- Boardprofile BBQKees Gateway S3
- Custom entity type RAW [#1212](https://github.com/emsesp/EMS-ESP32/discussions/1212)
- API command response [#1212](https://github.com/emsesp/EMS-ESP32/discussions/1212)
## Fixed
- HA-discovery for analog sensor commands [#1035](https://github.com/emsesp/EMS-ESP32/issues/1035)
- Enum order of RC3x nofrost mode
- Heartbeat interval
- Exhaust temperature always zero on GB125/MC110/RC310 bug [#1147](https://github.com/emsesp/EMS-ESP32/issues/1147)
- thermostat modetype is not changing when mode changes (e.g. to night) bugSomething isn't working [#1098](https://github.com/emsesp/EMS-ESP32/issues/1098)
- NTP: cant apply changed timezone [#1182](https://github.com/emsesp/EMS-ESP32/issues/1182)
- Missing Status of VS1 for Buderus SM200 enhancement [#1034](https://github.com/emsesp/EMS-ESP32/issues/1034)
- Allowed gpios for S3
## Changed
- Optional upgrade to platform-espressif32 6.3.0 (after 5.3.0) [#862](https://github.com/emsesp/EMS-ESP32/issues/862)
- Use byte 3 for detection RC30 active heatingcircuit [#786](https://github.com/emsesp/EMS-ESP32/issues/786)
- Write repeated selflowtemp if tx-queue is empty without verify [#954](https://github.com/emsesp/EMS-ESP32/issues/954)
- HA discovery recreate after disconnect by device [#1067](https://github.com/emsesp/EMS-ESP32/issues/1067)
- File upload: check flash size (overflow) instead of filesize
- Improved HA Discovery so previous configs no longer need to be removed when starting [#1077](https://github.com/emsesp/EMS-ESP32/pull/1077) (thanks @pswid)
- Enlarge UART-Stack to 2,5k
- Retry timeout for Mqtt-QOS1/2 10seconds
- Optimize WebUI rendering when using Dialog Boxes [#1116](https://github.com/emsesp/EMS-ESP32/issues/1116)
- Optimize Web libraries to reduce bundle size (3.6.x) [#1112](https://github.com/emsesp/EMS-ESP32/issues/1112)
- Use [espMqttClient](https://github.com/bertmelis/espMqttClient) with integrated queue [#1178](https://github.com/emsesp/EMS-ESP32/issues/1178)
- Move Sensors from Web dashboard to it's own tab enhancement [#1170](https://github.com/emsesp/EMS-ESP32/issues/1170)
- Optimize WebUI dashboard data [#1169](https://github.com/emsesp/EMS-ESP32/issues/1169)
- Replace React core library with Preact to save on memory footprint
- Response to `system/send` raw reads gives combined data for telegrams with more parts
# [3.5.0] February 6 2023
## **IMPORTANT! BREAKING CHANGES**
- When upgrading to v3.5 for the first time from v3.4 on a BBQKees Gateway board you will need to use the [EMS-EPS Flasher](https://github.com/emsesp/EMS-ESP-Flasher/releases) to correctly re-partition the flash. Make sure you backup the settings and customizations from the WebUI (System->Upload/Download) and restore after the upgrade.
## Added
- Translations in Web UI and all device entity names (DE, NL, SV, PL, NO, FR) [#22](https://github.com/emsesp/EMS-ESP32/issues/22)
- Add support for Lolin C3 mini [#620](https://github.com/emsesp/EMS-ESP32/pull/620)
- Add support for ESP32-S2 [#667](https://github.com/emsesp/EMS-ESP32/pull/667)
- Add devices: Greenstar 30Ri boiler, Junkers FW500 thermostat, Buderus BC30 controller
- Add program memory info
- Add mqtt queue and connection infos
- Adapt min/max if ems-value is not in this range
- Add heat pump settings for inputs and limits [#600](https://github.com/emsesp/EMS-ESP32/issues/600)
- Add hybrid heatpump [#500](https://github.com/emsesp/EMS-ESP32/issues/500)
- Add translated tags
- Add min/max to customization table [#686](https://github.com/emsesp/EMS-ESP32/issues/686)
- Add MD5 check [#637](https://github.com/emsesp/EMS-ESP32/issues/637)
- Add more bus-ids [#673](https://github.com/emsesp/EMS-ESP32/issues/673)
- Use HA connectivity device class for Status, added boot time [#751](https://github.com/emsesp/EMS-ESP32/issues/751)
- Add commands for analog sensors outputs
- Support for multiple EMS-ESPs with MQTT and HA [[#759](https://github.com/emsesp/EMS-ESP32/issues/759)]
- Settings for heatpump silent mode and additional heater [[#802](https://github.com/emsesp/EMS-ESP32/issues/802)] [[#803](https://github.com/emsesp/EMS-ESP32/issues/803)]
- Zone module MZ100 [#826](https://github.com/emsesp/EMS-ESP32/issues/826)
- Default MQTT hostname is blank [#829](https://github.com/emsesp/EMS-ESP32/issues/829)
- wwCurFlow for ems+ devices [#829](https://github.com/emsesp/EMS-ESP32/issues/829)
- Add Rego 3000, TR120RF thermostats [#917](https://github.com/emsesp/EMS-ESP32/issues/917)
- Add config for ESP32-S3
- Add heatpump silent mode and other entities [#896](https://github.com/emsesp/EMS-ESP32/issues/896)
- Allow reboot to other partition (factory or asymetric OTA)
- Blacklist entities to remove from memory [#891](https://github.com/emsesp/EMS-ESP32/issues/891)
- Add boiler pump operating mode [#944](https://github.com/emsesp/EMS-ESP32/issues/944)
## Fixed
- Factory Reset not working [#628](https://github.com/emsesp/EMS-ESP32/issues/628)
- Valid 4 byte values [#820](https://github.com/emsesp/EMS-ESP32/issues/820)
- Commands for multiple thermostats [#826](https://github.com/emsesp/EMS-ESP32/issues/826)
- API queries for multiple devices [#865](https://github.com/emsesp/EMS-ESP32/issues/865)
- Console crash when using call with command `hcx` only. [#841](https://github.com/emsesp/EMS-ESP32/issues/841)
- `heatingPump2Mod` was wrong, changed to absBurnPow [[#908](https://github.com/emsesp/EMS-ESP32/issues/908)
- Rounding of web input values
- Analog sensor with single gpio number [#915](https://github.com/emsesp/EMS-ESP32/issues/915)
- HA dallas and analog configs: remove/rebuild on change [#888](https://github.com/emsesp/EMS-ESP32/issues/888)
- Modes and set seltemp for RC30 and RC20 [#932](https://github.com/emsesp/EMS-ESP32/issues/932)
## Changed
- Discovery in HomeAssistant don't work with custom base topic. [#596](https://github.com/emsesp/EMS-ESP32/issues/596) Base topic containing `/` are changed to `_`
- RF room temperature sensor are shown as thermostat
- Render mqtt float json values with trailing zero
- Removed flash strings, to increase available heap memory
- Reload page after restart button is pressed
- Analog/dallas values command as list like ems-devices
- Analog/dallas HA-entities based on id
- MQTT Base is a mandatory field. Removed MQTT topic length from settings
- HA duration class for time entities [[#822](https://github.com/emsesp/EMS-ESP32/issues/822)
- AM200 alternative heatsource as class heatsource [[#857](https://github.com/emsesp/EMS-ESP32/issues/857)
# [3.4.2] September 18 2022
## Added
@@ -30,12 +373,11 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
- fix Table resizing in WebUI [#519](https://github.com/emsesp/EMS-ESP32/issues/519)
- allow larger customization files [#570](https://github.com/emsesp/EMS-ESP32/issues/570)
- losing entitiy wwcomfort [#581](https://github.com/emsesp/EMS-ESP32/issues/581)
- losing entity wwcomfort [#581](https://github.com/emsesp/EMS-ESP32/issues/581)
## Changed
- Shorten "friendly names" in Home Assistant [#555](https://github.com/emsesp/EMS-ESP32/issues/555)
- platformio 2.3.0 (IDF 4, Arduino 2)
- remove master-thermostat, support multiple thermostats
- merge up- and download in webui [#577](https://github.com/emsesp/EMS-ESP32/issues/577)
@@ -48,13 +390,17 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
## Changed
- Controller data in web-ui only for IVT [#522](https://github.com/emsesp/EMS-ESP32/issues/522)
- Rename hidden `climate` to a more explaining name [#523](https://github.com/emsesp/EMS-ESP32/issues/523)
- Minor changes to the Customizations web page [#527](https://github.com/emsesp/EMS-ESP32/pull/527)
# [3.4.0] May 23 2022
## Added
- WebUI optimizations, updated look&feel and better performance [#124](https://github.com/emsesp/EMS-ESP32/issues/124)
- Auto refresh of WebUI after successful firmware upload [#178](https://github.com/emsesp/EMS-ESP32/issues/178)
- New Customization Service in WebUI. First feature is the ability to enable/disabled Enitites (device values) from EMS devices [#206](https://github.com/emsesp/EMS-ESP32/issues/206)
- New Customization Service in WebUI. First feature is the ability to enable/disabled Entities (device values) from EMS devices [#206](https://github.com/emsesp/EMS-ESP32/issues/206)
- Option to disable Telnet Console [#209](https://github.com/emsesp/EMS-ESP32/issues/209)
- Added Hide SSID, Max Clients and Preferred Channel to Access Point
- Merged in MichaelDvP's changes like Fahrenheit conversion, publish single (for IOBroker) and a few other critical optimizations
@@ -154,7 +500,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
- Added pool data to telegrams 0x494 & 0x495 [#102](https://github.com/emsesp/EMS-ESP32/issues/102)
- Add RC300 second summermode telegram [#108](https://github.com/emsesp/EMS-ESP32/issues/108)
- Add support for the RC25 thermostat [#106](https://github.com/emsesp/EMS-ESP32/issues/106)
- Add new command 'entities' for a device, e.g. http://ems-esp/api/boiler/entities to show the shortname, description and HA Entity name (if HA enabled) [#116](https://github.com/emsesp/EMS-ESP32/issues/116)
- Add new command 'entities' for a device, e.g. <http://ems-esp/api/boiler/entities> to show the shortname, description and HA Entity name (if HA enabled) [#116](https://github.com/emsesp/EMS-ESP32/issues/116)
- Support for Junkers program and remote (fb10/fb110) temperature
- Home Assistant `state_class` attribute for Wh, kWh, W and KW [#129](https://github.com/emsesp/EMS-ESP32/issues/129)
- Add current room influence for RC300 [#136](https://github.com/emsesp/EMS-ESP32/issues/136)
@@ -376,4 +722,4 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
- some names of mqtt-tags like in v2.2.1
- new ESP32 partition side to allow for smoother OTA and fallback
- Network Gateway IP is optional (#682)emsesp/EMS-ESP
- moved to a new GitHub repo https://github.com/emsesp/EMS-ESP32
- moved to a new GitHub repo <https://github.com/emsesp/EMS-ESP32>

View File

@@ -0,0 +1 @@
# Changelog

View File

@@ -6,7 +6,7 @@ Everybody is welcome and invited to contribute to the EMS-ESP Project by:
- providing Pull Requests (Features, Fixes, suggestions)
- testing new released features and report issues on your EMS equipment
- contributing to missing [documentation](https://emsesp.github.io/docs)
- contributing to missing [documentation](https://emsesp.org)
This document describes rules that are in effect for this repository, meant for handling issues by contributors in the issue tracker and PRs.

View File

@@ -1,9 +1,11 @@
#
# GNUMakefile for EMS-ESP
# (c) 2020 Paul Derbyshire
# This is mainly used to generate the .o files for SonarQube analysis
#
NUMJOBS=${NUMJOBS:-" -j4 "}
MAKEFLAGS+="j "
# NUMJOBS=${NUMJOBS:-" -j10 "}
# MAKEFLAGS+="j "
#----------------------------------------------------------------------
# Project Structure
#----------------------------------------------------------------------
@@ -17,23 +19,31 @@ MAKEFLAGS+="j "
#TARGET := $(notdir $(CURDIR))
TARGET := emsesp
BUILD := build
SOURCES := src src/* lib_standalone lib/uuid-common/src lib/uuid-console/src lib/uuid-log/src src/devices lib/ArduinoJson/src lib/PButton
INCLUDES := src lib_standalone lib/ArduinoJson/src lib/uuid-common/src lib/uuid-console/src lib/uuid-log/src lib/uuid-telnet/src lib/uuid-syslog/src lib/* src/devices
SOURCES := src src/* lib_standalone lib/uuid-common/src lib/uuid-console/src lib/uuid-log/src src/devices lib/ArduinoJson/src lib/PButton lib/semver lib/espMqttClient/src lib/espMqttClient/src/*
INCLUDES := src lib_standalone lib/espMqttClient/src lib/espMqttClient/src/Transport lib/ArduinoJson/src lib/uuid-common/src lib/uuid-console/src lib/uuid-log/src lib/uuid-telnet/src lib/uuid-syslog/src lib/semver lib/* src/devices
LIBRARIES :=
CPPCHECK = cppcheck
# CHECKFLAGS = -q --force --std=c++17
CHECKFLAGS = -q --force --std=c++11
#----------------------------------------------------------------------
# Languages Standard
#----------------------------------------------------------------------
C_STANDARD := -std=c11
CXX_STANDARD := -std=c++11
C_STANDARD := -std=c17
CXX_STANDARD := -std=gnu++14
# C_STANDARD := -std=c11
# CXX_STANDARD := -std=c++11
#----------------------------------------------------------------------
# Defined Symbols
#----------------------------------------------------------------------
DEFINES += -DFACTORY_WIFI_HOSTNAME=\"ems-esp\" -DARDUINOJSON_ENABLE_STD_STRING=1 -DARDUINOJSON_ENABLE_PROGMEM=1 -DARDUINOJSON_ENABLE_ARDUINO_STRING -DARDUINOJSON_USE_DOUBLE=0 -DEMSESP_DEBUG -DEMSESP_STANDALONE -DEMSESP_USE_SERIAL -DEMSESP_DEFAULT_BOARD_PROFILE=\"LOLIN\"
DEFINES += -DARDUINOJSON_ENABLE -DARDUINOJSON_ENABLE_ARDUINO_STRING -DARDUINOJSON_USE_DOUBLE=0
DEFINES += -DEMSESP_STANDALONE -DEMSESP_TEST -DEMSESP_DEBUG -DEMC_RX_BUFFER_SIZE=1500
DEFINES += $(ARGS)
DEFAULTS = -DEMSESP_DEFAULT_LOCALE=\"en\" -DEMSESP_DEFAULT_TX_MODE=8 -DEMSESP_DEFAULT_VERSION=\"3.7.0-dev\" -DEMSESP_DEFAULT_BOARD_PROFILE=\"S32\"
#----------------------------------------------------------------------
# Sources & Files
@@ -66,16 +76,14 @@ CXX := /usr/bin/g++
# CXXFLAGS C++ Compiler Flags
# LDFLAGS Linker Flags
#----------------------------------------------------------------------
CPPFLAGS += $(DEFINES) $(INCLUDE)
CPPFLAGS += $(DEFINES) $(DEFAULTS) $(INCLUDE)
CPPFLAGS += -ggdb
CPPFLAGS += -g3
CPPFLAGS += -Os
CFLAGS += $(CPPFLAGS)
CFLAGS += -Wall
CFLAGS += -Wextra
CFLAGS += -Wno-unused-parameter
CFLAGS += -Wall -Wextra -Werror -Wswitch-enum
CFLAGS += -Wno-tautological-constant-out-of-range-compare -Wno-unused-parameter -Wno-inconsistent-missing-override -Wno-missing-braces -Wno-unused-lambda-capture -Wno-sign-compare
CXXFLAGS += $(CFLAGS) -MMD
#----------------------------------------------------------------------
@@ -114,6 +122,8 @@ COMPILE.cpp = $(CXX) $(CXX_STANDARD) $(CXXFLAGS) $(DEPFLAGS) -c $< -o $@
# Targets
#----------------------------------------------------------------------
.PHONY: all
.SILENT: $(OUTPUT)
all: $(OUTPUT)
$(OUTPUT): $(OBJS)

164
README.md
View File

@@ -1,129 +1,91 @@
# ![logo](media/EMS-ESP_logo_dark.png)
**EMS-ESP** is an open-source firmware for the Espressif ESP8266 and ESP32 microcontroller that communicates with **EMS** (Energy Management System) based equipment from manufacturers like Bosch, Buderus, Nefit, Junkers, Worcester and Sieger.
This project is the specifically for the ESP32. Compared with the previous ESP8266 (version 2) release it has the following enhancements:
- Ethernet Support
- Pre-configured circuit board layouts
- Supports writing EMS values directly from within Web UI
- Mock API server for faster offline development and testing
- Improved API and MQTT commands
- Improvements to Dallas temperature sensors
- Embedded log tracing in the Web UI
[![version](https://img.shields.io/github/release/emsesp/EMS-ESP32.svg?label=Latest%20Release)](https://github.com/emsesp/EMS-ESP32/blob/main/CHANGELOG.md)
[![release-date](https://img.shields.io/github/release-date/emsesp/EMS-ESP32.svg?label=Released)](https://github.com/emsesp/EMS-ESP32/commits/main)
[![license](https://img.shields.io/github/license/emsesp/EMS-ESP32.svg)](LICENSE)
[![Quality Gate Status](https://sonarcloud.io/api/project_badges/measure?project=emsesp_EMS-ESP32&metric=alert_status)](https://sonarcloud.io/summary/new_code?id=emsesp_EMS-ESP32)
[![Codacy Badge](https://app.codacy.com/project/badge/Grade/9441142f49424ef891e8f5251866ee6b)](https://www.codacy.com/gh/emsesp/EMS-ESP32/dashboard?utm_source=github.com&utm_medium=referral&utm_content=emsesp/EMS-ESP32&utm_campaign=Badge_Grade)
[![Codacy Badge](https://app.codacy.com/project/badge/Grade/9441142f49424ef891e8f5251866ee6b)](https://app.codacy.com/gh/emsesp/EMS-ESP32/dashboard?utm_source=gh&utm_medium=referral&utm_content=&utm_campaign=Badge_grade)
[![downloads](https://img.shields.io/github/downloads/emsesp/EMS-ESP32/total.svg)](https://github.com/emsesp/EMS-ESP32/releases)
[![chat](https://img.shields.io/discord/816637840644505620.svg?style=flat-square&color=blueviolet)](https://discord.gg/3J3GgnzpyT)
If you like **EMS-ESP**, please give it a star, or fork it and contribute!
[![GitHub stars](https://img.shields.io/github/stars/emsesp/EMS-ESP32.svg?style=social&label=Star)](https://github.com/emsesp/EMS-ESP32/stargazers)
[![GitHub forks](https://img.shields.io/github/forks/emsesp/EMS-ESP32.svg?style=social&label=Fork)](https://github.com/emsesp/EMS-ES32P/network)
[![donate](https://img.shields.io/badge/donate-PayPal-blue.svg)](https://www.paypal.com/paypalme/prderbyshire/2)
Note, EMS-ESP requires a small hardware circuit that can convert the EMS bus data to be read by the microcontroller. These can be ordered at <https://bbqkees-electronics.nl> or contact the contributors that can provide the schematic and designs.
**EMS-ESP** is an open-source firmware for the Espressif ESP32 microcontroller to communicate with **EMS** (Energy Management System) compatible equipment from manufacturers such as Bosch, Buderus, Nefit, Junkers, Worcester, Sieger, elm.leblanc and iVT.
<img src="media/gateway-integration.jpg" width=40%>
It requires a small circuit to interface with the EMS bus which can be purchased from <https://bbqkees-electronics.nl> or custom built.
---
## **Key Features**
# **Features**
- Compatible with EMS, EMS+, EMS2, EMS Plus, Logamatic EMS, Junkers 2-wire, Heatronic 3 and 4
- Supporting over 120 different EMS compatible devices such as thermostats, boilers, heat pumps, mixing units, solar modules, connect modules, ventilation units, switches and more
- Easy to add external Temperature and Analog sensors that are attached to GPIO pins on the ESP32 board
- A multi-user, multi-language web interface to change settings and monitor incoming data
- A simple to use console, accessible via Serial/USB or Telnet for advanced operations and detailed monitoring
- Native integration with Home Assistant, Domoticz, openHAB and Modbus
- Easy setup and install with automatic updates
- Simulation of remote thermostats
- Localized in 11 languages, and customizable to rename any device or sensor
- Extendable by adding own custom EMS entities
- Expandable via adding user-built external modules
- A powerful Scheduler to automate tasks and trigger events based data changes
- A Notification service to alert you of important events
- A multi-user secure web interface to change settings and monitor incoming data
- A console, accessible via Serial and Telnet for more advanced monitoring
- Native support for Home Assistant and Domoticz via [MQTT Discovery](https://www.home-assistant.io/docs/mqtt/discovery/)
- Can run standalone as an independent WiFi Access Point or join an existing WiFi network
- Easy first-time configuration via a web Captive Portal
- Support for more than [100 EMS devices](https://emsesp.github.io/docs/#/Supported-EMS-Devices) (boilers, thermostats, solar modules, mixer modules, heat pumps, gateways)
## **Installing**
## **Demo**
For a quick install of the latest stable release go to [https://install.emsesp.org](https://install.emsesp.org). For other methods of installing and upgrading, and switching over to the development version go to [this section](https://emsesp.org/Getting-Started/#first-time-install) in the documentation.
See a demo [here](https://ems-esp.derbyshire.nl). Log in with any username/password.
If you're upgrading a BBQKees Electronics EMS Gateway and unsure which firmware to use, please refer to the [this overview](https://emsesp.org/Getting-Started/#bbqkees-electronics-ems-gateway).
# **Screenshots**
## **Documentation**
## Web Interface
Visit [emsesp.org](https://emsesp.org) for more details on how to install and configure EMS-ESP. There is also a collection of Frequently Asked Questions and Troubleshooting tips with example customizations from the community.
## **Getting Support**
To chat with the community reach out on our [Discord Server](https://discord.gg/3J3GgnzpyT).
If you find an issue or have a request, see [here](https://emsesp.org/Support/) on how to submit a bug report or feature request.
## **Live Demo**
For a live demo go to [demo.emsesp.org](https://demo.emsesp.org). Pick a language from the sign on page and log in with any username or password. Note not all features are operational as it's based on static data.
## **Contributors**
EMS-ESP is a project created by [proddy](https://github.com/proddy) and owned and maintained by both [proddy](https://github.com/proddy) and [MichaelDvP](https://github.com/MichaelDvP) with support from [BBQKees Electronics](https://bbqkees-electronics.nl).
You can contact us using [this form](https://emsesp.org/Contact/).
If you like **EMS-ESP**, please give it a ✨ on GitHub, or even better fork it and contribute. You can also offer a small donation. This is an open-source project maintained by volunteers, and your support is greatly appreciated.
## **Libraries used**
- [esp8266-react](https://github.com/rjwats/esp8266-react) by @rjwats for the core framework that provides the Web UI, which has been heavily modified
- [uuid-\*](https://github.com/nomis/mcu-uuid-console) from @nomis. The console, syslog, telnet and logging are based off these awesome open source libraries
- [ArduinoJson](https://github.com/bblanchon/ArduinoJson) for all the JSON processing
- [espMqttClient](https://github.com/bertmelis/espMqttClient) for the MQTT client
- ESPAsyncWebServer and AsyncTCP for the Web server and TCP backends, with custom modifications for performance
## **License**
This program is licensed under GPL-3.0
## **Screenshots**
### Web Interface
| | |
| ---------------------------------- | -------------------------------- |
| <img src="media/web_settings.png"> | <img src="media/web_status.png"> |
| <img src="media/web_devices.png"> | <img src="media/web_mqtt.png"> |
| <img src="media/web_edit.png"> | <img src="media/web_log.png"> |
| ![Web Settings](media/web_settings.png) | ![Web Status](media/web_status.png) |
| ![Web Devices](media/web_devices.png) | ![Web MQTT](media/web_mqtt.png) |
| ![Web Edit](media/web_edit.png) | ![Web Log](media/web_log.png) |
## Telnet Console
### Telnet Console
<img src="media/console.png" width=80% height=80%>
![Console](media/console0.png)
## In Home Assistant
### Home Assistant
<img src="media/ha_lovelace.png" width=80% height=80%>
# **Installing**
Refer to the [official documentation](https://emsesp.github.io/docs) to how to install the firmware and configure it. The documentation is being constantly updated as new features and settings are added.
You can choose to use an pre-built firmware image or compile the code yourself:
- [Uploading a pre-built firmware build](https://emsesp.github.io/docs/#/Uploading-firmware)
- [Building the firmware from source code and flashing manually](https://emsesp.github.io/docs/#/Building-firmware)
# **Support Information**
If you're looking for support on **EMS-ESP** there are some options available:
## Documentation
- [Official EMS-ESP Documentation](https://emsesp.github.io/docs): For information on how to build and upload the firmware
- [FAQ and Troubleshooting](https://emsesp.github.io/docs/#/Troubleshooting): For information on common problems and solutions. See also [BBQKees's wiki](https://bbqkees-electronics.nl/wiki/gateway/troubleshooting.html)
## Support Community
- [Discord Server](https://discord.gg/3J3GgnzpyT): For support, troubleshooting and general questions. You have better chances to get fast answers from members of the community
- [Search in Issues](https://github.com/emsesp/EMS-ESP32/issues): You might find an answer to your question by searching current or closed issues
## Developer's Community
- [Bug Report](https://github.com/emsesp/EMS-ESP32/issues/new?template=bug_report.md): For reporting Bugs
- [Feature Request](https://github.com/emsesp/EMS-ESP32/issues/new?template=feature_request.md): For requesting features/functions
- [Troubleshooting](https://github.com/emsesp/EMS-ESP32/issues/new?template=questions---troubleshooting.md): As a last resort, you can open new _Troubleshooting & Question_ issue on GitHub if the solution could not be found using the other channels. Just remember: the more info you provide the more chances you'll have to get an accurate answer
# **Contributors ✨**
EMS-ESP is a project originally created and owned by [proddy](https://github.com/proddy). Key contributors are:
<!-- prettier-ignore-start -->
<!-- markdownlint-disable -->
<table>
<tr>
<td align="center">
<a href="https://github.com/MichaelDvP"><img src="https://avatars.githubusercontent.com/u/59284019?v=3?s=100" width="100px;" alt=""/><br /><sub><b>MichaelDvP</b></sub></a><br /></a> <a href="https://github.com/emsesp/EMS-ESP/commits?author=MichaelDvP" title="v2 Commits">v2</a>
<a href="https://github.com/emsesp/EMS-ESP32/commits?author=MichaelDvP" title="v3 Commits">v3</a>
</td>
</tr>
</table>
<!-- markdownlint-restore -->
<!-- prettier-ignore-end -->
You can also contribute to EMS-ESP by
- providing Pull Requests (Features, Fixes, suggestions)
- testing new released features and report issues on your EMS equipment
- contributing to missing [Documentation](https://emsesp.github.io/docs)
# **Libraries used**
- [esp8266-react](https://github.com/rjwats/esp8266-react) by @rjwats for the framework that provides the core of the Web UI
- [uuid-\*](https://github.com/nomis/mcu-uuid-console) from @nomis. The console, syslog, telnet and logging are based off these open source libraries
- [ArduinoJson](https://github.com/bblanchon/ArduinoJson) for JSON
- [AsyncMqttClient](https://github.com/marvinroger/async-mqtt-client) for the MQTT client, with custom modifications from @bertmelis and @proddy
- ESPAsyncWebServer and AsyncTCP for the Web server and TCP backends, with custom modifications for performance
# **License**
This program is licensed under GPL-3.0
![Home Assistant](media/ha_lovelace.png)

View File

@@ -1,5 +0,0 @@
# ![logo](https://github.com/emsesp/EMS-ESP32/blob/main/media/EMS-ESP_logo_dark.png)
# Firmware Installation
Follow the instructions in the [documentation](https://emsesp.github.io/docs) on how to install the firmware binaries in the Assets below.

View File

@@ -1,7 +0,0 @@
# ![logo](https://github.com/emsesp/EMS-ESP32/blob/main/media/EMS-ESP_logo_dark.png)
This is a snapshot of the current "beta" development code and firmware binaries for the ESP32. It has all the latest features and fixes but please be aware that this is still experimental firmware used for testing and thus may contain the odd bug. Use at your own risk and remember to report an issue if you find something unusual.
# Firmware Installation
Follow the instructions in the [documentation](https://emsesp.github.io/docs) on how to install the firmware binaries in the Assets below.

13
cspell.json Normal file
View File

@@ -0,0 +1,13 @@
{
"$schema": "https://raw.githubusercontent.com/streetsidesoftware/cspell/main/cspell.schema.json",
"version": "0.2",
"dictionaryDefinitions": [
{
"name": "project-words",
"path": "./project-words.txt",
"addWords": true
}
],
"dictionaries": ["project-words"],
"ignorePaths": ["node_modules", "compile_commands.json", "WWWData.h", "**/venv/**", "lib/eModbus", "lib/ESPAsyncWebServer", "lib/espMqttClient", "analyse.html", "dist", "**/*.csv", "locale_translations.h", "TZ.tsx", "**/*.txt","build/**", "**/i18n/**", "/project-words.txt"]
}

File diff suppressed because it is too large Load Diff

5102
dump_entities.csv Normal file

File diff suppressed because it is too large Load Diff

212
dump_telegrams.csv Normal file
View File

@@ -0,0 +1,212 @@
telegram_type_id,name,is_fetched
0x04,UBAFactory,fetched
0x06,RCTime,
0x0A,EasyMonitor,fetched
0x10,UBAErrorMessage1,
0x11,UBAErrorMessage2,
0x12,RCErrorMessage,
0x13,RCErrorMessage2,
0x14,UBATotalUptime,fetched
0x15,UBAMaintenanceData,
0x16,UBAParameters,fetched
0x18,UBAMonitorFast,
0x19,UBAMonitorSlow,
0x1A,UBASetPoints,
0x1C,UBAMaintenanceStatus,
0x1E,WM10TempMessage,
0x23,JunkersSetMixer,fetched
0x26,UBASettingsWW,fetched
0x28,WeatherComp,fetched
0x2A,MC110Status,
0x2E,Meters,
0x33,UBAParameterWW,fetched
0x34,UBAMonitorWW,
0x35,UBAFlags,
0x37,WWSettings,fetched
0x38,WWTimer,fetched
0x39,WWCircTimer,fetched
0x3A,RC30WWSettings,fetched
0x3B,Energy,
0x3D,RC35Set,
0x3E,RC35Monitor,
0x3F,RC35Timer,
0x40,RC30Temp,
0x41,RC30Monitor,
0x42,RC35Timer2,
0x47,RC35Set,
0x48,RC35Monitor,
0x49,RC35Timer,
0x4C,RC35Timer2,
0x51,RC35Set,
0x52,RC35Monitor,
0x53,RC35Timer,
0x56,RC35Timer2,
0x5B,RC35Set,
0x5C,RC35Monitor,
0x5D,RC35Timer,
0x60,RC35Timer2,
0x96,SM10Config,fetched
0x97,SM10Monitor,
0x9C,WM10MonitorMessage,
0x9D,WM10SetMessage,
0xA2,RCError,
0xA3,RCOutdoorTemp,
0xA5,IBASettings,fetched
0xA7,RC30Set,
0xA9,RC30Vacation,fetched
0xAA,MMConfigMessage,fetched
0xAB,MMStatusMessage,
0xAC,MMSetMessage,
0xAF,RC20Remote,
0xB0,RC10Set,
0xB1,RC10Monitor,
0xBB,HybridSettings,fetched
0xBF,ErrorMessage,
0xC2,UBAErrorMessage3,
0xD1,UBAOutdoorTemp,
0xE3,UBAMonitorSlowPlus2,
0xE4,UBAMonitorFastPlus,
0xE5,UBAMonitorSlowPlus,
0xE6,UBAParametersPlus,fetched
0xE9,UBAMonitorWWPlus,
0xEA,UBAParameterWWPlus,fetched
0x0101,ISM1Set,fetched
0x0103,ISM1StatusMessage,fetched
0x0104,ISM2StatusMessage,
0x010C,IPMStatusMessage,
0x011E,IPMTempMessage,
0x0165,JunkersSet,
0x0166,JunkersSet,
0x0167,JunkersSet,
0x0168,JunkersSet,
0x016F,JunkersMonitor,
0x0170,JunkersMonitor,
0x0171,JunkersMonitor,
0x0172,JunkersMonitor,
0x0179,JunkersSet,
0x017A,JunkersSet,
0x017B,JunkersSet,
0x017C,JunkersSet,
0x01D3,JunkersDhw,fetched
0x023A,RC300OutdoorTemp,fetched
0x023E,PVSettings,fetched
0x0240,RC300Settings,fetched
0x0267,RC300Floordry,
0x0269,RC300Holiday1,fetched
0x0291,HPMode,fetched
0x0292,HPMode,fetched
0x0293,HPMode,fetched
0x0294,HPMode,fetched
0x029B,RC300Curves,
0x029C,RC300Curves,
0x029D,RC300Curves,
0x029E,RC300Curves,
0x029F,RC300Curves,
0x02A0,RC300Curves,
0x02A1,RC300Curves,
0x02A2,RC300Curves,
0x02A5,RC300Monitor,
0x02A6,RC300Monitor,
0x02A7,RC300Monitor,
0x02A8,RC300Monitor,
0x02A9,RC300Monitor,
0x02AA,RC300Monitor,
0x02AB,RC300Monitor,
0x02AC,RC300Monitor,
0x02AF,RC300Summer,
0x02B0,RC300Summer,
0x02B1,RC300Summer,
0x02B2,RC300Summer,
0x02B3,RC300Summer,
0x02B4,RC300Summer,
0x02B5,RC300Summer,
0x02B6,RC300Summer,
0x02B9,RC300Set,
0x02BA,RC300Set,
0x02BB,RC300Set,
0x02BC,RC300Set,
0x02BD,RC300Set,
0x02BE,RC300Set,
0x02BF,RC300Set,
0x02C0,RC300Set,
0x02CC,RC300Set2,
0x02CD,MMPLUSConfigMessage,fetched
0x02CE,RC300Set2,
0x02D0,RC300Set2,
0x02D2,RC300Set2,
0x02D5,MMPLUSConfigMessage,fetched
0x02D6,HPPump2,fetched
0x02D7,MMPLUSStatusMessage,
0x02DF,MMPLUSStatusMessage,
0x02F5,RC300WWmode,fetched
0x02F6,RC300WW2mode,fetched
0x031B,RC300WWtemp,fetched
0x031D,RC300WWmode2,
0x031E,RC300WWmode2,
0x0358,SM100SystemConfig,fetched
0x035A,SM100CircuitConfig,fetched
0x035C,SM100HeatAssist,fetched
0x035D,SM100Circuit2Config,fetched
0x035F,SM100Config1,fetched
0x0361,SM100Differential,fetched
0x0362,SM100Monitor,
0x0363,SM100Monitor2,
0x0364,SM100Status,
0x0366,SM100Config,
0x036A,SM100Status2,
0x0380,SM100CollectorConfig,fetched
0x038E,SM100Energy,fetched
0x0391,SM100Time,fetched
0x0467,HPSet,
0x0468,HPSet,
0x0469,HPSet,
0x046A,HPSet,
0x0471,RC300Summer2,
0x0472,RC300Summer2,
0x0473,RC300Summer2,
0x0474,RC300Summer2,
0x0475,RC300Summer2,
0x0476,RC300Summer2,
0x0477,RC300Summer2,
0x0478,RC300Summer2,
0x047B,HP2,
0x0484,HPSilentMode,fetched
0x0485,HpCooling,fetched
0x0486,HpInConfig,fetched
0x0488,HPValve,fetched
0x048A,HpPool,fetched
0x048B,HPPumps,fetched
0x048D,HpPower,fetched
0x048F,HpTemperatures,
0x0491,HPAdditionalHeater,fetched
0x0492,HpHeaterConfig,fetched
0x0494,UBAEnergySupplied,
0x0495,UBAInformation,
0x0499,HPDhwSettings,fetched
0x049C,HPSettings2,fetched
0x049D,HPSettings3,fetched
0x04A2,HpInput,fetched
0x04A5,HPFan,fetched
0x04A7,HPPowerLimit,fetched
0x04AA,HPPower2,fetched
0x04AE,HPEnergy,fetched
0x04AF,HPMeters,fetched
0x056B,VentilationMode,fetched
0x0583,VentilationMonitor,
0x0585,Blowerspeed,
0x0587,Bypass,
0x05BA,HpPoolStatus,fetched
0x05D9,Airquality,
0x0772,HIUSettings,
0x0779,HIUMonitor,
0x0935,EM100SetMessage,fetched
0x0936,EM100OutMessage,
0x0937,EM100TempMessage,
0x0938,EM100InputMessage,
0x0939,EM100MonitorMessage,
0x093A,EM100ConfigMessage,
0x0998,HPSettings,fetched
0x0999,HPFunctionTest,fetched
0x099B,HPFlowTemp,
0x099C,HPComp,
0x09A0,HPTemperature,
1 telegram_type_id name is_fetched
2 0x04 UBAFactory fetched
3 0x06 RCTime
4 0x0A EasyMonitor fetched
5 0x10 UBAErrorMessage1
6 0x11 UBAErrorMessage2
7 0x12 RCErrorMessage
8 0x13 RCErrorMessage2
9 0x14 UBATotalUptime fetched
10 0x15 UBAMaintenanceData
11 0x16 UBAParameters fetched
12 0x18 UBAMonitorFast
13 0x19 UBAMonitorSlow
14 0x1A UBASetPoints
15 0x1C UBAMaintenanceStatus
16 0x1E WM10TempMessage
17 0x23 JunkersSetMixer fetched
18 0x26 UBASettingsWW fetched
19 0x28 WeatherComp fetched
20 0x2A MC110Status
21 0x2E Meters
22 0x33 UBAParameterWW fetched
23 0x34 UBAMonitorWW
24 0x35 UBAFlags
25 0x37 WWSettings fetched
26 0x38 WWTimer fetched
27 0x39 WWCircTimer fetched
28 0x3A RC30WWSettings fetched
29 0x3B Energy
30 0x3D RC35Set
31 0x3E RC35Monitor
32 0x3F RC35Timer
33 0x40 RC30Temp
34 0x41 RC30Monitor
35 0x42 RC35Timer2
36 0x47 RC35Set
37 0x48 RC35Monitor
38 0x49 RC35Timer
39 0x4C RC35Timer2
40 0x51 RC35Set
41 0x52 RC35Monitor
42 0x53 RC35Timer
43 0x56 RC35Timer2
44 0x5B RC35Set
45 0x5C RC35Monitor
46 0x5D RC35Timer
47 0x60 RC35Timer2
48 0x96 SM10Config fetched
49 0x97 SM10Monitor
50 0x9C WM10MonitorMessage
51 0x9D WM10SetMessage
52 0xA2 RCError
53 0xA3 RCOutdoorTemp
54 0xA5 IBASettings fetched
55 0xA7 RC30Set
56 0xA9 RC30Vacation fetched
57 0xAA MMConfigMessage fetched
58 0xAB MMStatusMessage
59 0xAC MMSetMessage
60 0xAF RC20Remote
61 0xB0 RC10Set
62 0xB1 RC10Monitor
63 0xBB HybridSettings fetched
64 0xBF ErrorMessage
65 0xC2 UBAErrorMessage3
66 0xD1 UBAOutdoorTemp
67 0xE3 UBAMonitorSlowPlus2
68 0xE4 UBAMonitorFastPlus
69 0xE5 UBAMonitorSlowPlus
70 0xE6 UBAParametersPlus fetched
71 0xE9 UBAMonitorWWPlus
72 0xEA UBAParameterWWPlus fetched
73 0x0101 ISM1Set fetched
74 0x0103 ISM1StatusMessage fetched
75 0x0104 ISM2StatusMessage
76 0x010C IPMStatusMessage
77 0x011E IPMTempMessage
78 0x0165 JunkersSet
79 0x0166 JunkersSet
80 0x0167 JunkersSet
81 0x0168 JunkersSet
82 0x016F JunkersMonitor
83 0x0170 JunkersMonitor
84 0x0171 JunkersMonitor
85 0x0172 JunkersMonitor
86 0x0179 JunkersSet
87 0x017A JunkersSet
88 0x017B JunkersSet
89 0x017C JunkersSet
90 0x01D3 JunkersDhw fetched
91 0x023A RC300OutdoorTemp fetched
92 0x023E PVSettings fetched
93 0x0240 RC300Settings fetched
94 0x0267 RC300Floordry
95 0x0269 RC300Holiday1 fetched
96 0x0291 HPMode fetched
97 0x0292 HPMode fetched
98 0x0293 HPMode fetched
99 0x0294 HPMode fetched
100 0x029B RC300Curves
101 0x029C RC300Curves
102 0x029D RC300Curves
103 0x029E RC300Curves
104 0x029F RC300Curves
105 0x02A0 RC300Curves
106 0x02A1 RC300Curves
107 0x02A2 RC300Curves
108 0x02A5 RC300Monitor
109 0x02A6 RC300Monitor
110 0x02A7 RC300Monitor
111 0x02A8 RC300Monitor
112 0x02A9 RC300Monitor
113 0x02AA RC300Monitor
114 0x02AB RC300Monitor
115 0x02AC RC300Monitor
116 0x02AF RC300Summer
117 0x02B0 RC300Summer
118 0x02B1 RC300Summer
119 0x02B2 RC300Summer
120 0x02B3 RC300Summer
121 0x02B4 RC300Summer
122 0x02B5 RC300Summer
123 0x02B6 RC300Summer
124 0x02B9 RC300Set
125 0x02BA RC300Set
126 0x02BB RC300Set
127 0x02BC RC300Set
128 0x02BD RC300Set
129 0x02BE RC300Set
130 0x02BF RC300Set
131 0x02C0 RC300Set
132 0x02CC RC300Set2
133 0x02CD MMPLUSConfigMessage fetched
134 0x02CE RC300Set2
135 0x02D0 RC300Set2
136 0x02D2 RC300Set2
137 0x02D5 MMPLUSConfigMessage fetched
138 0x02D6 HPPump2 fetched
139 0x02D7 MMPLUSStatusMessage
140 0x02DF MMPLUSStatusMessage
141 0x02F5 RC300WWmode fetched
142 0x02F6 RC300WW2mode fetched
143 0x031B RC300WWtemp fetched
144 0x031D RC300WWmode2
145 0x031E RC300WWmode2
146 0x0358 SM100SystemConfig fetched
147 0x035A SM100CircuitConfig fetched
148 0x035C SM100HeatAssist fetched
149 0x035D SM100Circuit2Config fetched
150 0x035F SM100Config1 fetched
151 0x0361 SM100Differential fetched
152 0x0362 SM100Monitor
153 0x0363 SM100Monitor2
154 0x0364 SM100Status
155 0x0366 SM100Config
156 0x036A SM100Status2
157 0x0380 SM100CollectorConfig fetched
158 0x038E SM100Energy fetched
159 0x0391 SM100Time fetched
160 0x0467 HPSet
161 0x0468 HPSet
162 0x0469 HPSet
163 0x046A HPSet
164 0x0471 RC300Summer2
165 0x0472 RC300Summer2
166 0x0473 RC300Summer2
167 0x0474 RC300Summer2
168 0x0475 RC300Summer2
169 0x0476 RC300Summer2
170 0x0477 RC300Summer2
171 0x0478 RC300Summer2
172 0x047B HP2
173 0x0484 HPSilentMode fetched
174 0x0485 HpCooling fetched
175 0x0486 HpInConfig fetched
176 0x0488 HPValve fetched
177 0x048A HpPool fetched
178 0x048B HPPumps fetched
179 0x048D HpPower fetched
180 0x048F HpTemperatures
181 0x0491 HPAdditionalHeater fetched
182 0x0492 HpHeaterConfig fetched
183 0x0494 UBAEnergySupplied
184 0x0495 UBAInformation
185 0x0499 HPDhwSettings fetched
186 0x049C HPSettings2 fetched
187 0x049D HPSettings3 fetched
188 0x04A2 HpInput fetched
189 0x04A5 HPFan fetched
190 0x04A7 HPPowerLimit fetched
191 0x04AA HPPower2 fetched
192 0x04AE HPEnergy fetched
193 0x04AF HPMeters fetched
194 0x056B VentilationMode fetched
195 0x0583 VentilationMonitor
196 0x0585 Blowerspeed
197 0x0587 Bypass
198 0x05BA HpPoolStatus fetched
199 0x05D9 Airquality
200 0x0772 HIUSettings
201 0x0779 HIUMonitor
202 0x0935 EM100SetMessage fetched
203 0x0936 EM100OutMessage
204 0x0937 EM100TempMessage
205 0x0938 EM100InputMessage
206 0x0939 EM100MonitorMessage
207 0x093A EM100ConfigMessage
208 0x0998 HPSettings fetched
209 0x0999 HPFunctionTest fetched
210 0x099B HPFlowTemp
211 0x099C HPComp
212 0x09A0 HPTemperature

View File

@@ -0,0 +1,6 @@
# Name, Type, SubType, Offset, Size, Flags
nvs, data, nvs, 0x9000, 0x5000,
otadata, data, ota, , 0x2000,
app0, app, ota_0, , 0x2A0000,
app1, app, ota_1, , 0x140000,
spiffs, data, spiffs, , 64K,
1 # Name Type SubType Offset Size Flags
2 nvs data nvs 0x9000 0x5000
3 otadata data ota 0x2000
4 app0 app ota_0 0x2A0000
5 app1 app ota_1 0x140000
6 spiffs data spiffs 64K

9
esp32_partition_16M.csv Normal file
View File

@@ -0,0 +1,9 @@
# Name, Type, SubType, Offset, Size, Flags
nvs, data, nvs, 0x9000, 0x005000,
otadata, data, ota, , 0x002000,
boot, app, factory, , 0x480000,
app0, app, ota_0, , 0x490000,
app1, app, ota_1, , 0x490000,
nvs1, data, nvs, , 0x040000,
spiffs, data, spiffs, , 0x200000,
coredump, data, coredump,, 0x010000,
1 # Name Type SubType Offset Size Flags
2 nvs data nvs 0x9000 0x005000
3 otadata data ota 0x002000
4 boot app factory 0x480000
5 app0 app ota_0 0x490000
6 app1 app ota_1 0x490000
7 nvs1 data nvs 0x040000
8 spiffs data spiffs 0x200000
9 coredump data coredump 0x010000

8
esp32_partition_32M.csv Normal file
View File

@@ -0,0 +1,8 @@
# Name, Type, SubType, Offset, Size, Flags
nvs, data, nvs, 0x9000, 0x005000,
otadata, data, ota, , 0x002000,
app0, app, ota_0, , 0xDD0000,
app1, app, ota_1, , 0xDD0000,
nvs1, data, nvs, , 0x040000,
spiffs, data, spiffs, , 0x400000,
coredump, data, coredump,, 0x010000,
1 # Name Type SubType Offset Size Flags
2 nvs data nvs 0x9000 0x005000
3 otadata data ota 0x002000
4 app0 app ota_0 0xDD0000
5 app1 app ota_1 0xDD0000
6 nvs1 data nvs 0x040000
7 spiffs data spiffs 0x400000
8 coredump data coredump 0x010000

6
esp32_partition_4M.csv Normal file
View File

@@ -0,0 +1,6 @@
# Name, Type, SubType, Offset, Size, Flags
nvs, data, nvs, 0x9000, 0x5000,
otadata, data, ota, , 0x2000,
app0, app, ota_0, , 0x1F0000,
app1, app, ota_1, , 0x1F0000,
spiffs, data, spiffs, , 64K,
1 # Name Type SubType Offset Size Flags
2 nvs data nvs 0x9000 0x5000
3 otadata data ota 0x2000
4 app0 app ota_0 0x1F0000
5 app1 app ota_1 0x1F0000
6 spiffs data spiffs 64K

View File

@@ -1,6 +0,0 @@
# Name, Type, SubType, Offset, Size, Flags
nvs, data, nvs, 0x9000, 0x5000,
otadata, data, ota, 0xE000, 0x2000,
app0, app, ota_0, 0x10000, 0x1F0000,
app1, app, ota_1, 0x200000, 0x1F0000,
spiffs, data, spiffs, 0x3F0000, 0x10000,
1 # Name Type SubType Offset Size Flags
2 nvs data nvs 0x9000 0x5000
3 otadata data ota 0xE000 0x2000
4 app0 app ota_0 0x10000 0x1F0000
5 app1 app ota_1 0x200000 0x1F0000
6 spiffs data spiffs 0x3F0000 0x10000

View File

@@ -7,8 +7,8 @@ build_flags =
; Access point settings
-D FACTORY_AP_PROVISION_MODE=AP_MODE_DISCONNECTED
-D FACTORY_AP_SSID=\"ems-esp\" ; 1-64 characters
-D FACTORY_AP_PASSWORD=\"ems-esp-neo\" ; 8-64 characters
-D FACTORY_AP_SSID=\"ems-esp\"
-D FACTORY_AP_PASSWORD=\"ems-esp-neo\"
-D FACTORY_AP_LOCAL_IP=\"192.168.4.1\"
-D FACTORY_AP_GATEWAY_IP=\"192.168.4.1\"
-D FACTORY_AP_SUBNET_MASK=\"255.255.255.0\"
@@ -25,18 +25,12 @@ build_flags =
-D FACTORY_NTP_TIME_ZONE_FORMAT=\"CET-1CEST,M3.5.0,M10.5.0/3\"
-D FACTORY_NTP_SERVER=\"time.google.com\"
; OTA settings
-D FACTORY_OTA_PORT=8266
-D FACTORY_OTA_PASSWORD=\"ems-esp-neo\"
-D FACTORY_OTA_ENABLED=true
; MQTT settings
-D FACTORY_MQTT_ENABLED=false
-D FACTORY_MQTT_HOST=\"test.mosquitto.org\"
-D FACTORY_MQTT_HOST=\"\"
-D FACTORY_MQTT_PORT=1883
-D FACTORY_MQTT_USERNAME=\"\"
-D FACTORY_MQTT_PASSWORD=\"\"
-D FACTORY_MQTT_CLIENT_ID=\"ems-esp\"
-D FACTORY_MQTT_KEEP_ALIVE=60
-D FACTORY_MQTT_CLEAN_SESSION=false
-D FACTORY_MQTT_MAX_TOPIC_LENGTH=128

View File

@@ -1,8 +0,0 @@
# This enables lint extensions
EXTEND_ESLINT=true
# This is the name of your project. It appears on the sign-in page and in the menu bar.
REACT_APP_PROJECT_NAME=EMS-ESP
# This is the url path your project will be exposed under.
REACT_APP_PROJECT_PATH=ems-esp

View File

@@ -0,0 +1,2 @@
VITE_ALOVA_TIPS=0
REACT_APP_ALOVA_TIPS=0

View File

@@ -1,3 +0,0 @@
GENERATE_SOURCEMAP=false
REACT_APP_HOSTED=true

View File

@@ -1 +0,0 @@
GENERATE_SOURCEMAP=false

4
interface/.gitattributes vendored Normal file
View File

@@ -0,0 +1,4 @@
/.yarn/** linguist-vendored
/.yarn/releases/* binary
/.yarn/plugins/**/* binary
/.pnp.* binary linguist-generated

View File

@@ -0,0 +1,8 @@
node_modules/
build/
dist/
src/i18n/*
.prettierrc
.yarn/
.typesafe-i18n.json

View File

@@ -1,6 +0,0 @@
{
"singleQuote": true,
"semi": true,
"trailingComma": "none",
"printWidth": 120
}

View File

@@ -0,0 +1,5 @@
{
"adapter": "react",
"baseLocale": "pl",
"$schema": "https://unpkg.com/typesafe-i18n@5.26.2/schema/typesafe-i18n.json"
}

1
interface/.yarnrc.yml Normal file
View File

@@ -0,0 +1 @@
nodeLinker: node-modules

View File

@@ -1,30 +0,0 @@
const { WebpackManifestPlugin } = require('webpack-manifest-plugin');
const MiniCssExtractPlugin = require('mini-css-extract-plugin');
const ProgmemGenerator = require('./progmem-generator.js');
const TerserPlugin = require('terser-webpack-plugin');
module.exports = function override(config, env) {
const hosted = process.env.REACT_APP_HOSTED;
if (env === 'production' && !hosted) {
// rename the ouput file, we need it's path to be short, for embedded FS
config.output.filename = 'js/[id].[chunkhash:4].js';
config.output.chunkFilename = 'js/[id].[chunkhash:4].js';
// take out the manifest plugin
config.plugins = config.plugins.filter((plugin) => !(plugin instanceof WebpackManifestPlugin));
// shorten css filenames
const miniCssExtractPlugin = config.plugins.find((plugin) => plugin instanceof MiniCssExtractPlugin);
miniCssExtractPlugin.options.filename = 'css/[id].[contenthash:4].css';
miniCssExtractPlugin.options.chunkFilename = 'css/[id].[contenthash:4].c.css';
// don't emit license file
const terserPlugin = config.optimization.minimizer.find((plugin) => plugin instanceof TerserPlugin);
terserPlugin.options.extractComments = false;
// build progmem data files
config.plugins.push(new ProgmemGenerator({ outputPath: '../lib/framework/WWWData.h', bytesPerLine: 20 }));
}
return config;
};

View File

@@ -0,0 +1,44 @@
// @ts-check
import eslint from '@eslint/js';
import prettierConfig from 'eslint-config-prettier';
import tseslint from 'typescript-eslint';
export default tseslint.config(
eslint.configs.recommended,
...tseslint.configs.recommendedTypeChecked,
prettierConfig,
{
languageOptions: {
parserOptions: {
project: true,
tsconfigRootDir: import.meta.dirname
}
}
},
{
ignores: [
'dist/*',
'*.mjs',
'build/*',
'*.js',
'**/*.cjs',
'**/unpack.ts',
'i18n*.*'
]
},
{
rules: {
'@typescript-eslint/no-unsafe-enum-comparison': 'off',
'@typescript-eslint/no-unused-expressions': 'off',
'@typescript-eslint/no-unsafe-assignment': 'off',
'@typescript-eslint/no-unsafe-member-access': 'off',
'@typescript-eslint/no-unsafe-call': 'off',
'@typescript-eslint/no-misused-promises': [
'error',
{
checksVoidReturn: false
}
]
}
}
);

14
interface/index.html Normal file
View File

@@ -0,0 +1,14 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width" />
<link rel="stylesheet" href="/css/roboto.css" />
<link rel="manifest" href="/app/manifest.json" />
<title>EMS-ESP</title>
</head>
<body>
<div id="root"></div>
<script type="module" src="/src/index.tsx"></script>
</body>
</html>

29916
interface/package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -1,103 +1,67 @@
{
"name": "EMS-ESP",
"version": "3.4.0",
"version": "3.7.0",
"description": "EMS-ESP WebUI",
"homepage": "https://emsesp.org",
"author": "proddy, emsesp.org",
"license": "MIT",
"private": true,
"proxy": "http://localhost:3080",
"dependencies": {
"@emotion/react": "^11.10.4",
"@emotion/styled": "^11.10.4",
"@msgpack/msgpack": "^2.8.0",
"@mui/icons-material": "^5.10.3",
"@mui/material": "^5.10.5",
"@table-library/react-table-library": "4.0.18",
"@types/lodash": "^4.14.185",
"@types/node": "^18.7.18",
"@types/react": "^18.0.20",
"@types/react-dom": "^18.0.6",
"@types/react-router-dom": "^5.3.3",
"async-validator": "^4.2.5",
"axios": "^0.27.2",
"http-proxy-middleware": "^2.0.6",
"jwt-decode": "^3.1.2",
"lodash": "^4.17.21",
"notistack": "^2.0.5",
"parse-ms": "^3.0.0",
"react": "^18.2.0",
"react-app-rewired": "^2.2.1",
"react-dom": "^18.2.0",
"react-dropzone": "^14.2.2",
"react-icons": "^4.4.0",
"react-router-dom": "^6.4.0",
"react-scripts": "5.0.1",
"sockette": "^2.0.6",
"typescript": "^4.8.3"
},
"type": "module",
"scripts": {
"start": "react-app-rewired start",
"build": "react-app-rewired build",
"test": "react-app-rewired test",
"eject": "react-scripts eject",
"format": "prettier --write '**/*.{ts,tsx,js,css,json,md}'",
"build-hosted": "env-cmd -f .env.hosted npm run build",
"build-localhost": "PUBLIC_URL=/ react-app-rewired build",
"mock-api": "nodemon --watch ../mock-api ../mock-api/server.js",
"standalone": "npm-run-all -p start mock-api",
"lint": "eslint . --ext .ts,.tsx"
"dev": "vite dev",
"build": "vite build",
"preview": "vite preview",
"build-hosted": "typesafe-i18n --no-watch && vite build --mode hosted",
"preview-standalone": "typesafe-i18n --no-watch && vite build && concurrently -c \"auto\" \"npm:mock-rest\" \"vite preview\"",
"mock-rest": "bun --watch ../mock-api/rest_server.ts",
"standalone": "concurrently -c \"auto\" \"typesafe-i18n\" \"npm:mock-rest\" \"vite\"",
"typesafe-i18n": "typesafe-i18n --no-watch",
"webUI": "node progmem-generator.js",
"format": "prettier -l -w '**/*.{ts,tsx,js,css,json,md}'",
"lint": "eslint . --fix"
},
"eslintConfig": {
"extends": [
"react-app",
"react-app/jest"
],
"rules": {
"eol-last": 1,
"react/jsx-closing-bracket-location": 1,
"react/jsx-closing-tag-location": 1,
"react/jsx-wrap-multilines": 1,
"react/jsx-curly-newline": 1,
"no-multiple-empty-lines": [
1,
{
"max": 1
}
],
"no-trailing-spaces": 1,
"semi": 1,
"no-extra-semi": 1,
"react/jsx-max-props-per-line": [
1,
{
"when": "multiline"
}
],
"react/jsx-first-prop-new-line": [
1,
"multiline"
],
"@typescript-eslint/no-shadow": 1,
"max-len": [
1,
{
"code": 200
}
],
"arrow-parens": 1
}
},
"browserslist": {
"production": [
">0.2%",
"not dead",
"not op_mini all"
],
"development": [
"last 1 chrome version",
"last 1 firefox version",
"last 1 safari version"
]
"dependencies": {
"@alova/adapter-xhr": "2.0.9",
"@emotion/react": "^11.13.3",
"@emotion/styled": "^11.13.0",
"@mui/icons-material": "^6.1.5",
"@mui/material": "^6.1.5",
"@table-library/react-table-library": "4.1.7",
"alova": "3.1.1",
"async-validator": "^4.2.5",
"jwt-decode": "^4.0.0",
"mime-types": "^2.1.35",
"preact": "^10.24.3",
"react": "^18.3.1",
"react-dom": "^18.3.1",
"react-icons": "^5.3.0",
"react-router-dom": "^6.27.0",
"react-toastify": "^10.0.6",
"typesafe-i18n": "^5.26.2",
"typescript": "^5.6.3"
},
"devDependencies": {
"nodemon": "^2.0.20",
"npm-run-all": "^4.1.5"
}
"@babel/core": "^7.26.0",
"@eslint/js": "^9.13.0",
"@preact/compat": "^18.3.1",
"@preact/preset-vite": "^2.9.1",
"@trivago/prettier-plugin-sort-imports": "^4.3.0",
"@types/formidable": "^3",
"@types/node": "^22.8.1",
"@types/react": "^18.3.12",
"@types/react-dom": "^18.3.1",
"@types/react-router-dom": "^5.3.3",
"concurrently": "^9.0.1",
"eslint": "^9.13.0",
"eslint-config-prettier": "^9.1.0",
"formidable": "^3.5.2",
"prettier": "^3.3.3",
"rollup-plugin-visualizer": "^5.12.0",
"terser": "^5.36.0",
"typescript-eslint": "8.11.0",
"vite": "^5.4.10",
"vite-plugin-imagemin": "^0.6.1",
"vite-tsconfig-paths": "^5.0.1"
},
"packageManager": "yarn@4.5.1"
}

View File

@@ -1,9 +1,33 @@
const { resolve, relative, sep } = require('path');
const { readdirSync, existsSync, unlinkSync, readFileSync, createWriteStream } = require('fs');
var zlib = require('zlib');
var mime = require('mime-types');
import crypto from 'crypto';
import {
createWriteStream,
existsSync,
readFileSync,
readdirSync,
unlinkSync
} from 'fs';
import mime from 'mime-types';
import { relative, resolve, sep } from 'path';
import zlib from 'zlib';
const ARDUINO_INCLUDES = '#include <Arduino.h>\n\n';
const INDENT = ' ';
const outputPath = '../lib/framework/WWWData.h';
const sourcePath = './dist';
const bytesPerLine = 20;
var totalSize = 0;
const generateWWWClass = () =>
`typedef std::function<void(const char * uri, const String & contentType, const uint8_t * content, size_t len, const String & hash)> RouteRegistrationHandler;
// Total size is ${totalSize} bytes
class WWWData {
${indent}public:
${indent.repeat(2)}static void registerRoutes(RouteRegistrationHandler handler) {
${fileInfo.map((file) => `${indent.repeat(3)}handler("${file.uri}", "${file.mimeType}", ${file.variable}, ${file.size}, "${file.hash}");`).join('\n')}
${indent.repeat(2)}}
};
`;
function getFilesSync(dir, files = []) {
readdirSync(dir, { withFileTypes: true }).forEach((entry) => {
@@ -17,10 +41,6 @@ function getFilesSync(dir, files = []) {
return files;
}
function coherseToBuffer(input) {
return Buffer.isBuffer(input) ? input : Buffer.from(input);
}
function cleanAndOpen(path) {
if (existsSync(path)) {
unlinkSync(path);
@@ -28,94 +48,68 @@ function cleanAndOpen(path) {
return createWriteStream(path, { flags: 'w+' });
}
class ProgmemGenerator {
constructor(options = {}) {
const { outputPath, bytesPerLine = 20, indent = ' ', includes = ARDUINO_INCLUDES } = options;
this.options = { outputPath, bytesPerLine, indent, includes };
}
apply(compiler) {
compiler.hooks.emit.tapAsync({ name: 'ProgmemGenerator' }, (compilation, callback) => {
const { outputPath, bytesPerLine, indent, includes } = this.options;
const fileInfo = [];
const writeStream = cleanAndOpen(resolve(compilation.options.context, outputPath));
try {
const writeIncludes = () => {
writeStream.write(includes);
};
const writeFile = (relativeFilePath, buffer) => {
const writeFile = (relativeFilePath, buffer) => {
const variable = 'ESP_REACT_DATA_' + fileInfo.length;
const mimeType = mime.lookup(relativeFilePath);
var size = 0;
writeStream.write('const uint8_t ' + variable + '[] PROGMEM = {');
const zipBuffer = zlib.gzipSync(buffer);
writeStream.write('const uint8_t ' + variable + '[] = {');
// const zipBuffer = zlib.brotliCompressSync(buffer, { quality: 1 });
const zipBuffer = zlib.gzipSync(buffer, { level: 9 });
// create sha
const hashSum = crypto.createHash('sha256');
hashSum.update(zipBuffer);
const hash = hashSum.digest('hex');
zipBuffer.forEach((b) => {
if (!(size % bytesPerLine)) {
writeStream.write('\n');
writeStream.write(indent);
}
writeStream.write('0x' + ('00' + b.toString(16).toUpperCase()).substr(-2) + ',');
writeStream.write('0x' + ('00' + b.toString(16).toUpperCase()).slice(-2) + ',');
size++;
});
if (size % bytesPerLine) {
writeStream.write('\n');
}
writeStream.write('};\n\n');
fileInfo.push({
uri: '/' + relativeFilePath.replace(sep, '/'),
mimeType,
variable,
size
size,
hash
});
};
const writeFiles = () => {
// process static files
const buildPath = compilation.options.output.path;
for (const filePath of getFilesSync(buildPath)) {
// console.log(relativeFilePath + ' (size ' + size + ' bytes)');
totalSize += size;
};
// start
console.log('Generating ' + outputPath + ' from ' + sourcePath);
const includes = ARDUINO_INCLUDES;
const indent = INDENT;
const fileInfo = [];
const writeStream = cleanAndOpen(resolve(outputPath));
// includes
writeStream.write(includes);
// process static files
const buildPath = resolve(sourcePath);
for (const filePath of getFilesSync(buildPath)) {
const readStream = readFileSync(filePath);
const relativeFilePath = relative(buildPath, filePath);
writeFile(relativeFilePath, readStream);
}
// process assets
const { assets } = compilation;
Object.keys(assets).forEach((relativeFilePath) => {
writeFile(relativeFilePath, coherseToBuffer(assets[relativeFilePath].source()));
});
};
const generateWWWClass = () => {
// eslint-disable-next-line max-len
return `typedef std::function<void(const String& uri, const String& contentType, const uint8_t * content, size_t len)> RouteRegistrationHandler;
class WWWData {
${indent}public:
${indent.repeat(2)}static void registerRoutes(RouteRegistrationHandler handler) {
${fileInfo
.map((file) => `${indent.repeat(3)}handler("${file.uri}", "${file.mimeType}", ${file.variable}, ${file.size});`)
.join('\n')}
${indent.repeat(2)}}
};
`;
};
const writeWWWClass = () => {
writeStream.write(generateWWWClass());
};
writeIncludes();
writeFiles();
writeWWWClass();
writeStream.on('finish', () => {
callback();
});
} finally {
writeStream.end();
}
});
}
}
module.exports = ProgmemGenerator;
// add class
writeStream.write(generateWWWClass());
// end
writeStream.end();
console.log('Total size: ' + totalSize / 1000 + ' KB');

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.4 KiB

After

Width:  |  Height:  |  Size: 5.6 KiB

View File

@@ -1,24 +1,20 @@
/*
* Just supporting latin due to size constrains on the esp chip
*
* The framework only makes use of 400 (regular) + 500 (medium) weight fonts.
*
* If using light or strong typography variants you will need to add additional fonts.
* Uses font-weight 400 (normal) only, no bold, and Latin with a few extra unicode chars.
* This is to keep flash memory to a minimum
* View fonts on https://fonts.google.com/
* Download woff2 using e.g. https://fonts.googleapis.com/css2?family=Lato or https://fonts.googleapis.com/css2?family=Roboto
*/
@font-face {
font-family: 'Roboto';
font-style: normal;
font-weight: 400;
src: local('Roboto'), local('Roboto-Regular'), url(../fonts/re.woff2) format('woff2');
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC,
U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
font-family: 'Roboto';
font-style: normal;
font-weight: 500;
src: local('Roboto Medium'), local('Roboto-Medium'), url(../fonts/md.woff2) format('woff2');
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC,
U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
/* src: url(https://fonts.gstatic.com/s/roboto/v30/KFOmCnqEu92Fr1Mu4mxK.woff2) format('woff2'); */
src:
local('Roboto'),
local('Roboto-Regular'),
url(../fonts/re.woff2) format('woff2');
unicode-range: U+0000-00FF, U+0104-0107, U+0118-0119, U+011E-011F, U+0130-0131,
U+0141-0144, U+0152-0153, U+015A-015B, U+015E-015F, U+0179-017C, U+02BB-02BC,
U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193,
U+2212, U+2215, U+FEFF, U+FFFD;
}

Binary file not shown.

Binary file not shown.

View File

@@ -1,17 +0,0 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta
name="viewport"
content="width=device-width, initial-scale=1, user-scalable=0, maximum-scale=1, minimum-scale=1"
/>
<link rel="stylesheet" href="%PUBLIC_URL%/css/roboto.css" />
<link rel="manifest" href="%PUBLIC_URL%/app/manifest.json" />
<title>EMS-ESP</title>
</head>
<body>
<noscript> You need to enable JavaScript to run this app. </noscript>
<div id="root"></div>
</body>
</html>

View File

@@ -1,44 +1,45 @@
import { FC, createRef, createContext, useContext, RefObject } from 'react';
import { SnackbarProvider } from 'notistack';
import { useEffect, useState } from 'react';
import { Slide, ToastContainer } from 'react-toastify';
import 'react-toastify/dist/ReactToastify.min.css';
import { IconButton } from '@mui/material';
import CloseIcon from '@mui/icons-material/Close';
import AppRouting from 'AppRouting';
import CustomTheme from 'CustomTheme';
import TypesafeI18n from 'i18n/i18n-react';
import { detectLocale } from 'i18n/i18n-util';
import { loadLocaleAsync } from 'i18n/i18n-util.async';
import { localStorageDetector } from 'typesafe-i18n/detectors';
import { FeaturesLoader } from './contexts/features';
const detectedLocale = detectLocale(localStorageDetector);
import CustomTheme from './CustomTheme';
import AppRouting from './AppRouting';
const App = () => {
const [wasLoaded, setWasLoaded] = useState(false);
const App: FC = () => {
const notistackRef: RefObject<any> = createRef();
useEffect(() => {
void loadLocaleAsync(detectedLocale).then(() => setWasLoaded(true));
}, []);
const onClickDismiss = (key: string | number | undefined) => () => {
notistackRef.current.closeSnackbar(key);
};
const ColorModeContext = createContext({ toggleColorMode: () => {} });
const colorMode = useContext(ColorModeContext);
if (!wasLoaded) return null;
return (
<ColorModeContext.Provider value={colorMode}>
<TypesafeI18n locale={detectedLocale}>
<CustomTheme>
<SnackbarProvider
maxSnack={3}
anchorOrigin={{ vertical: 'bottom', horizontal: 'left' }}
ref={notistackRef}
action={(key) => (
<IconButton onClick={onClickDismiss(key)} size="small">
<CloseIcon />
</IconButton>
)}
>
<FeaturesLoader>
<AppRouting />
</FeaturesLoader>
</SnackbarProvider>
<ToastContainer
position="bottom-left"
autoClose={3000}
hideProgressBar={false}
newestOnTop={false}
closeOnClick={true}
rtl={false}
pauseOnFocusLoss={false}
draggable={false}
pauseOnHover={false}
transition={Slide}
closeButton={false}
theme="light"
/>
</CustomTheme>
</ColorModeContext.Provider>
</TypesafeI18n>
);
};

View File

@@ -1,54 +1,41 @@
import { FC, useContext, useEffect } from 'react';
import { Navigate, Routes, Route, useLocation } from 'react-router-dom';
import { useSnackbar, VariantType } from 'notistack';
import { useContext, useEffect } from 'react';
import { Navigate, Route, Routes } from 'react-router-dom';
import { toast } from 'react-toastify';
import { Authentication, AuthenticationContext } from './contexts/authentication';
import { FeaturesContext } from './contexts/features';
import { RequireAuthenticated, RequireUnauthenticated } from './components';
import SignIn from './SignIn';
import AuthenticatedRouting from './AuthenticatedRouting';
import AuthenticatedRouting from 'AuthenticatedRouting';
import SignIn from 'SignIn';
import { RequireAuthenticated, RequireUnauthenticated } from 'components';
import { Authentication, AuthenticationContext } from 'contexts/authentication';
import { useI18nContext } from 'i18n/i18n-react';
interface SecurityRedirectProps {
message: string;
variant?: VariantType;
signOut?: boolean;
}
const RootRedirect: FC<SecurityRedirectProps> = ({ message, variant, signOut }) => {
const RootRedirect = ({ message, signOut }: SecurityRedirectProps) => {
const authenticationContext = useContext(AuthenticationContext);
const { enqueueSnackbar } = useSnackbar();
useEffect(() => {
signOut && authenticationContext.signOut(false);
enqueueSnackbar(message, { variant });
}, [message, variant, signOut, authenticationContext, enqueueSnackbar]);
toast.success(message);
}, [message, signOut, authenticationContext]);
return <Navigate to="/" />;
};
export const RemoveTrailingSlashes = () => {
const location = useLocation();
return (
location.pathname.match('/.*/$') && (
<Navigate
to={{
pathname: location.pathname.replace(/\/+$/, ''),
search: location.search
}}
/>
)
);
};
const AppRouting: FC = () => {
const { features } = useContext(FeaturesContext);
const AppRouting = () => {
const { LL } = useI18nContext();
return (
<Authentication>
<RemoveTrailingSlashes />
<Routes>
<Route path="/unauthorized" element={<RootRedirect message="Please sign in to continue" signOut />} />
<Route path="/fileUpdated" element={<RootRedirect message="Upload successful" variant="success" />} />
{features.security && (
<Route
path="/unauthorized"
element={<RootRedirect message={LL.PLEASE_SIGNIN()} signOut />}
/>
<Route
path="/fileUpdated"
element={<RootRedirect message={LL.UPLOAD_SUCCESSFUL()} />}
/>
<Route
path="/"
element={
@@ -57,7 +44,6 @@ const AppRouting: FC = () => {
</RequireUnauthenticated>
}
/>
)}
<Route
path="/*"
element={

View File

@@ -1,63 +1,73 @@
import { FC, useCallback, useContext, useEffect } from 'react';
import { Navigate, Routes, Route, useNavigate, useLocation } from 'react-router-dom';
import { AxiosError } from 'axios';
import { useContext } from 'react';
import { Navigate, Route, Routes } from 'react-router-dom';
import { FeaturesContext } from './contexts/features';
import * as AuthenticationApi from './api/authentication';
import { PROJECT_PATH } from './api/env';
import { AXIOS } from './api/endpoints';
import { Layout, RequireAdmin } from './components';
import ProjectRouting from './project/ProjectRouting';
import NetworkConnection from './framework/network/NetworkConnection';
import AccessPoint from './framework/ap/AccessPoint';
import NetworkTime from './framework/ntp/NetworkTime';
import Mqtt from './framework/mqtt/Mqtt';
import System from './framework/system/System';
import Security from './framework/security/Security';
const AuthenticatedRouting: FC = () => {
const { features } = useContext(FeaturesContext);
const location = useLocation();
const navigate = useNavigate();
const handleApiResponseError = useCallback(
(error: AxiosError) => {
if (error.response && error.response.status === 401) {
AuthenticationApi.storeLoginRedirect(location);
navigate('/unauthorized');
}
return Promise.reject(error);
},
[location, navigate]
);
useEffect(() => {
const axiosHandlerId = AXIOS.interceptors.response.use((response) => response, handleApiResponseError);
return () => AXIOS.interceptors.response.eject(axiosHandlerId);
}, [handleApiResponseError]);
import CustomEntities from 'app/main/CustomEntities';
import Customizations from 'app/main/Customizations';
import Dashboard from 'app/main/Dashboard';
import Devices from 'app/main/Devices';
import Help from 'app/main/Help';
import Modules from 'app/main/Modules';
import Scheduler from 'app/main/Scheduler';
import Sensors from 'app/main/Sensors';
import APSettings from 'app/settings/APSettings';
import ApplicationSettings from 'app/settings/ApplicationSettings';
import DownloadUpload from 'app/settings/DownloadUpload';
import MqttSettings from 'app/settings/MqttSettings';
import NTPSettings from 'app/settings/NTPSettings';
import Settings from 'app/settings/Settings';
import Version from 'app/settings/Version';
import Network from 'app/settings/network/Network';
import Security from 'app/settings/security/Security';
import APStatus from 'app/status/APStatus';
import Activity from 'app/status/Activity';
import HardwareStatus from 'app/status/HardwareStatus';
import MqttStatus from 'app/status/MqttStatus';
import NTPStatus from 'app/status/NTPStatus';
import NetworkStatus from 'app/status/NetworkStatus';
import Status from 'app/status/Status';
import SystemLog from 'app/status/SystemLog';
import { Layout } from 'components';
import { AuthenticatedContext } from 'contexts/authentication';
const AuthenticatedRouting = () => {
const { me } = useContext(AuthenticatedContext);
return (
<Layout>
<Routes>
{features.project && <Route path={`/${PROJECT_PATH}/*`} element={<ProjectRouting />} />}
<Route path="/network/*" element={<NetworkConnection />} />
<Route path="/ap/*" element={<AccessPoint />} />
{features.ntp && <Route path="/ntp/*" element={<NetworkTime />} />}
{features.mqtt && <Route path="/mqtt/*" element={<Mqtt />} />}
{features.security && (
<Route
path="/security/*"
element={
<RequireAdmin>
<Security />
</RequireAdmin>
}
/>
<Route path="/dashboard/*" element={<Dashboard />} />
<Route path="/devices/*" element={<Devices />} />
<Route path="/sensors/*" element={<Sensors />} />
<Route path="/status/*" element={<Status />} />
<Route path="/help/*" element={<Help />} />
<Route path="/*" element={<Navigate to="/" />} />
<Route path="/status/hardwarestatus/*" element={<HardwareStatus />} />
<Route path="/status/activity" element={<Activity />} />
<Route path="/status/log" element={<SystemLog />} />
<Route path="/status/mqtt" element={<MqttStatus />} />
<Route path="/status/ntp" element={<NTPStatus />} />
<Route path="/status/ap" element={<APStatus />} />
<Route path="/status/network" element={<NetworkStatus />} />
{me.admin && (
<>
<Route path="/settings" element={<Settings />} />
<Route path="/settings/version" element={<Version />} />
<Route path="/settings/application" element={<ApplicationSettings />} />
<Route path="/settings/mqtt" element={<MqttSettings />} />
<Route path="/settings/ntp" element={<NTPSettings />} />
<Route path="/settings/ap" element={<APSettings />} />
<Route path="/settings/modules" element={<Modules />} />
<Route path="/settings/upload" element={<DownloadUpload />} />
<Route path="/settings/network/*" element={<Network />} />
<Route path="/settings/security/*" element={<Security />} />
<Route path="/customizations" element={<Customizations />} />
<Route path="/scheduler" element={<Scheduler />} />
<Route path="/customentities" element={<CustomEntities />} />
</>
)}
<Route path="/system/*" element={<System />} />
<Route path="/*" element={<Navigate to={AuthenticationApi.getDefaultRoute(features)} />} />
</Routes>
</Layout>
);

View File

@@ -1,10 +1,22 @@
import { FC } from 'react';
import type { FC } from 'react';
import { CssBaseline } from '@mui/material';
import { createTheme, responsiveFontSizes, ThemeProvider } from '@mui/material/styles';
import { blueGrey, blue } from '@mui/material/colors';
import {
ThemeProvider,
createTheme,
responsiveFontSizes
} from '@mui/material/styles';
import { RequiredChildrenProps } from './utils';
import type { RequiredChildrenProps } from 'utils';
export const dialogStyle = {
'& .MuiDialog-paper': {
borderRadius: '8px',
borderColor: '#565656',
borderStyle: 'solid',
borderWidth: '1px'
}
};
const theme = responsiveFontSizes(
createTheme({
@@ -14,10 +26,13 @@ const theme = responsiveFontSizes(
palette: {
mode: 'dark',
secondary: {
main: blue[500]
main: '#2196f3' // blue[500]
},
info: {
main: blueGrey[500]
main: '#607d8b' // blueGrey[500]
},
text: {
disabled: '#eee' // white
}
}
})

View File

@@ -1,24 +1,28 @@
import { FC, useContext, useState } from 'react';
import { ValidateFieldsError } from 'async-validator';
import { useSnackbar } from 'notistack';
import { useContext, useState } from 'react';
import { toast } from 'react-toastify';
import { Box, Fab, Paper, Typography } from '@mui/material';
import ForwardIcon from '@mui/icons-material/Forward';
import { Box, Button, Paper, Typography } from '@mui/material';
import * as AuthenticationApi from './api/authentication';
import { PROJECT_NAME } from './api/env';
import { AuthenticationContext } from './contexts/authentication';
import * as AuthenticationApi from 'components/routing/authentication';
import { useRequest } from 'alova/client';
import type { ValidateFieldsError } from 'async-validator';
import {
LanguageSelector,
ValidatedPasswordField,
ValidatedTextField
} from 'components';
import { AuthenticationContext } from 'contexts/authentication';
import { PROJECT_NAME } from 'env';
import { useI18nContext } from 'i18n/i18n-react';
import type { SignInRequest } from 'types';
import { onEnterCallback, updateValue } from 'utils';
import { SIGN_IN_REQUEST_VALIDATOR, validate } from 'validators';
import { AxiosError } from 'axios';
import { extractErrorMessage, onEnterCallback, updateValue } from './utils';
import { SignInRequest } from './types';
import { ValidatedTextField } from './components';
import { SIGN_IN_REQUEST_VALIDATOR, validate } from './validators';
const SignIn: FC = () => {
const SignIn = () => {
const authenticationContext = useContext(AuthenticationContext);
const { enqueueSnackbar } = useSnackbar();
const { LL } = useI18nContext();
const [signInRequest, setSignInRequest] = useState<SignInRequest>({
username: '',
@@ -27,31 +31,40 @@ const SignIn: FC = () => {
const [processing, setProcessing] = useState<boolean>(false);
const [fieldErrors, setFieldErrors] = useState<ValidateFieldsError>();
const { send: callSignIn } = useRequest(
(request: SignInRequest) => AuthenticationApi.signIn(request),
{
immediate: false
}
).onSuccess((response) => {
if (response.data) {
authenticationContext.signIn(response.data.access_token);
}
});
const updateLoginRequestValue = updateValue(setSignInRequest);
const signIn = async () => {
await callSignIn(signInRequest).catch((event: Error) => {
if (event.message === 'Unauthorized') {
toast.warning(LL.INVALID_LOGIN());
} else {
toast.error(LL.ERROR() + ' ' + event.message);
}
setProcessing(false);
});
};
const validateAndSignIn = async () => {
setProcessing(true);
SIGN_IN_REQUEST_VALIDATOR.messages({
required: LL.IS_REQUIRED('%s')
});
try {
await validate(SIGN_IN_REQUEST_VALIDATOR, signInRequest);
signIn();
} catch (errors: any) {
setFieldErrors(errors);
setProcessing(false);
}
};
const signIn = async () => {
try {
const { data: loginResponse } = await AuthenticationApi.signIn(signInRequest);
authenticationContext.signIn(loginResponse.access_token);
} catch (error: unknown) {
if (error instanceof AxiosError) {
if (error.response?.status === 401) {
enqueueSnackbar('Invalid login details', { variant: 'warning' });
}
} else {
enqueueSnackbar(extractErrorMessage(error, 'Unexpected error, please try again'), { variant: 'error' });
}
await signIn();
} catch (error) {
setFieldErrors(error as ValidateFieldsError);
setProcessing(false);
}
};
@@ -72,43 +85,62 @@ const SignIn: FC = () => {
sx={(theme) => ({
textAlign: 'center',
padding: theme.spacing(2),
paddingTop: '200px',
paddingTop: '172px',
backgroundImage: 'url("/app/icon.png")',
backgroundRepeat: 'no-repeat',
backgroundPosition: '50% ' + theme.spacing(2),
backgroundSize: 'auto 150px',
width: '100%'
})}
>
<Typography variant="h4">{PROJECT_NAME}</Typography>
<LanguageSelector />
<Box display="flex" flexDirection="column" alignItems="center">
<ValidatedTextField
fieldErrors={fieldErrors}
disabled={processing}
sx={{
width: 240
}}
name="username"
label="Username"
label={LL.USERNAME(0)}
value={signInRequest.username}
onChange={updateLoginRequestValue}
margin="normal"
variant="outlined"
fullWidth
slotProps={{
input: {
autoCapitalize: 'none',
autoCorrect: 'off'
}
}}
/>
<ValidatedTextField
<ValidatedPasswordField
fieldErrors={fieldErrors}
disabled={processing}
type="password"
sx={{
width: 240
}}
name="password"
label="Password"
label={LL.PASSWORD()}
value={signInRequest.password}
onChange={updateLoginRequestValue}
onKeyDown={submitOnEnter}
margin="normal"
variant="outlined"
fullWidth
/>
<Fab variant="extended" color="primary" sx={{ mt: 2 }} onClick={validateAndSignIn} disabled={processing}>
</Box>
<Button
variant="contained"
color="primary"
sx={{ mt: 2 }}
onClick={validateAndSignIn}
disabled={processing}
>
<ForwardIcon sx={{ mr: 1 }} />
Sign In
</Fab>
{LL.SIGN_IN()}
</Button>
</Paper>
</Box>
);

View File

@@ -1,16 +1,9 @@
import { AxiosPromise } from 'axios';
import type { APSettingsType, APStatusType } from 'types';
import { APSettings, APStatus } from '../types';
import { AXIOS } from './endpoints';
import { alovaInstance } from './endpoints';
export function readAPStatus(): AxiosPromise<APStatus> {
return AXIOS.get('/apStatus');
}
export function readAPSettings(): AxiosPromise<APSettings> {
return AXIOS.get('/apSettings');
}
export function updateAPSettings(apSettings: APSettings): AxiosPromise<APSettings> {
return AXIOS.post('/apSettings', apSettings);
}
export const readAPStatus = () => alovaInstance.Get<APStatusType>('/rest/apStatus');
export const readAPSettings = () =>
alovaInstance.Get<APSettingsType>('/rest/apSettings');
export const updateAPSettings = (data: APSettingsType) =>
alovaInstance.Post<APSettingsType>('/rest/apSettings', data);

151
interface/src/api/app.ts Normal file
View File

@@ -0,0 +1,151 @@
import { alovaInstance } from 'api/endpoints';
import type {
APIcall,
Action,
Activity,
CoreData,
DashboardItem,
DeviceData,
DeviceEntity,
Entities,
EntityItem,
ModuleItem,
Modules,
Schedule,
ScheduleItem,
SensorData,
Settings,
WriteAnalogSensor,
WriteTemperatureSensor
} from '../app/main/types';
// Dashboard
export const readDashboard = () =>
alovaInstance.Get<DashboardItem[]>('/rest/dashboardData', {
responseType: 'arraybuffer' // uses msgpack
});
// Devices
export const readCoreData = () => alovaInstance.Get<CoreData>(`/rest/coreData`);
export const readDeviceData = (id: number) =>
alovaInstance.Get<DeviceData>('/rest/deviceData', {
// alovaInstance.Get<DeviceData>(`/rest/deviceData/${id}`, {
params: { id },
responseType: 'arraybuffer' // uses msgpack
});
export const writeDeviceValue = (data: { id: number; c: string; v: unknown }) =>
alovaInstance.Post('/rest/writeDeviceValue', data);
// Application Settings
export const readSettings = () => alovaInstance.Get<Settings>('/rest/settings');
export const writeSettings = (data: Settings) =>
alovaInstance.Post('/rest/settings', data);
export const getBoardProfile = (boardProfile: string) =>
alovaInstance.Get('/rest/boardProfile', {
params: { boardProfile }
});
// Sensors
export const readSensorData = () =>
alovaInstance.Get<SensorData>('/rest/sensorData');
export const writeTemperatureSensor = (ts: WriteTemperatureSensor) =>
alovaInstance.Post('/rest/writeTemperatureSensor', ts);
export const writeAnalogSensor = (as: WriteAnalogSensor) =>
alovaInstance.Post('/rest/writeAnalogSensor', as);
// Activity
export const readActivity = () => alovaInstance.Get<Activity>('/rest/activity');
// API
export const API = (apiCall: APIcall) => alovaInstance.Post('/api', apiCall);
// Generic action
export const callAction = (action: Action) =>
alovaInstance.Post('/rest/action', action);
// SettingsCustomization
export const readDeviceEntities = (id: number) =>
// alovaInstance.Get<DeviceEntity[]>(`/rest/deviceEntities/${id}`, {
alovaInstance.Get<DeviceEntity[]>(`/rest/deviceEntities`, {
params: { id },
responseType: 'arraybuffer',
transform(data) {
return (data as DeviceEntity[]).map((de: DeviceEntity) => ({
...de,
o_m: de.m,
o_cn: de.cn,
o_mi: de.mi,
o_ma: de.ma
}));
}
});
export const resetCustomizations = () =>
alovaInstance.Post('/rest/resetCustomizations');
export const writeCustomizationEntities = (data: {
id: number;
entity_ids: string[];
}) => alovaInstance.Post('/rest/customizationEntities', data);
export const writeDeviceName = (data: { id: number; name: string }) =>
alovaInstance.Post('/rest/writeDeviceName', data);
// SettingsScheduler
export const readSchedule = () =>
alovaInstance.Get<ScheduleItem[]>('/rest/schedule', {
transform(data) {
return (data as Schedule).schedule.map((si: ScheduleItem) => ({
...si,
o_id: si.id,
o_active: si.active,
o_deleted: si.deleted,
o_flags: si.flags,
o_time: si.time,
o_cmd: si.cmd,
o_value: si.value,
o_name: si.name
}));
}
});
export const writeSchedule = (data: Schedule) =>
alovaInstance.Post('/rest/schedule', data);
// Modules
export const readModules = () =>
alovaInstance.Get<ModuleItem[]>('/rest/modules', {
transform(data) {
return (data as Modules).modules.map((mi: ModuleItem) => ({
...mi,
o_enabled: mi.enabled,
o_license: mi.license
}));
}
});
export const writeModules = (data: {
key: string;
enabled: boolean;
license: string;
}) => alovaInstance.Post('/rest/modules', data);
// CustomEntities
export const readCustomEntities = () =>
alovaInstance.Get<EntityItem[]>('/rest/customEntities', {
transform(data) {
return (data as Entities).entities.map((ei: EntityItem) => ({
...ei,
o_id: ei.id,
o_ram: ei.ram,
o_device_id: ei.device_id,
o_type_id: ei.type_id,
o_offset: ei.offset,
o_factor: ei.factor,
o_uom: ei.uom,
o_value_type: ei.value_type,
o_name: ei.name,
o_writeable: ei.writeable,
o_value: ei.value,
o_deleted: ei.deleted
}));
}
});
export const writeCustomEntities = (data: Entities) =>
alovaInstance.Post('/rest/customEntities', data);

View File

@@ -1,105 +1,63 @@
import axios, { AxiosPromise, CancelToken } from 'axios';
import { type AlovaXHRResponse, xhrRequestAdapter } from '@alova/adapter-xhr';
import { createAlova } from 'alova';
import ReactHook from 'alova/react';
import { decode } from '@msgpack/msgpack';
import { unpack } from './unpack';
export const WS_BASE_URL = '/ws/';
export const API_BASE_URL = '/rest/';
export const ES_BASE_URL = '/es/';
export const EMSESP_API_BASE_URL = '/api/';
export const ACCESS_TOKEN = 'access_token';
export const WEB_SOCKET_ROOT = calculateWebSocketRoot(WS_BASE_URL);
export const EVENT_SOURCE_ROOT = calculateEventSourceRoot(ES_BASE_URL);
export const AXIOS = axios.create({
baseURL: API_BASE_URL,
headers: {
'Content-Type': 'application/json'
},
transformRequest: [
(data, headers) => {
if (headers) {
export const alovaInstance = createAlova({
statesHook: ReactHook,
// timeout: 3000, // 3 seconds before throwing a timeout error, default is 0 = none
cacheFor: null, // disable cache
// cacheFor: {
// GET: {
// mode: 'memory',
// expire: 60 * 10 * 1000 // 60 seconds in cache
// }
// },
requestAdapter: xhrRequestAdapter(),
beforeRequest(method) {
if (localStorage.getItem(ACCESS_TOKEN)) {
headers.Authorization = 'Bearer ' + localStorage.getItem(ACCESS_TOKEN);
method.config.headers.Authorization =
'Bearer ' + localStorage.getItem(ACCESS_TOKEN);
}
// for simulating vrey slow networks
// return new Promise((resolve) => {
// const random = 3000 + Math.random() * 2000;
// setTimeout(resolve, Math.floor(random));
// });
},
responded: {
onSuccess: async (response: AlovaXHRResponse) => {
// if (response.status === 202) {
// throw new Error('Wait'); // wifi scan in progress
// } else
if (response.status === 205) {
throw new Error('Reboot required');
} else if (response.status === 400) {
throw new Error('Request Failed');
} else if (response.status >= 400) {
throw new Error(response.statusText);
}
const data: ArrayBuffer = (await response.data) as ArrayBuffer;
if (response.data instanceof ArrayBuffer) {
return unpack(data) as ArrayBuffer;
}
if (headers['Content-Type'] !== 'application/json') {
return data;
}
// Interceptor for request failure. This interceptor will be entered when the request is wrong.
// http errors like 401 (unauthorized) are handled either in the methods or AuthenticatedRouting()
// onError: (error, method) => {
// alert(error.message);
// }
}
return JSON.stringify(data);
}
]
});
export const AXIOS_API = axios.create({
baseURL: EMSESP_API_BASE_URL,
headers: {
'Content-Type': 'application/json'
},
transformRequest: [
(data, headers) => {
if (headers) {
if (localStorage.getItem(ACCESS_TOKEN)) {
headers.Authorization = 'Bearer ' + localStorage.getItem(ACCESS_TOKEN);
}
if (headers['Content-Type'] !== 'application/json') {
return data;
}
}
return JSON.stringify(data);
}
]
export const alovaInstanceGH = createAlova({
baseURL: 'https://api.github.com/repos/emsesp/EMS-ESP32/releases',
statesHook: ReactHook,
requestAdapter: xhrRequestAdapter()
});
export const AXIOS_BIN = axios.create({
baseURL: API_BASE_URL,
headers: {
'Content-Type': 'application/json'
},
responseType: 'arraybuffer',
transformRequest: [
(data, headers) => {
if (headers) {
if (localStorage.getItem(ACCESS_TOKEN)) {
headers.Authorization = 'Bearer ' + localStorage.getItem(ACCESS_TOKEN);
}
if (headers['Content-Type'] !== 'application/json') {
return data;
}
}
return JSON.stringify(data);
}
],
transformResponse: [
(data) => {
return decode(data);
}
]
});
function calculateWebSocketRoot(webSocketPath: string) {
const location = window.location;
const webProtocol = location.protocol === 'https:' ? 'wss:' : 'ws:';
return webProtocol + '//' + location.host + webSocketPath;
}
function calculateEventSourceRoot(endpointPath: string) {
const location = window.location;
return location.protocol + '//' + location.host + endpointPath;
}
export interface FileUploadConfig {
cancelToken?: CancelToken;
onUploadProgress?: (progressEvent: ProgressEvent) => void;
}
export const startUploadFile = (url: string, file: File, config?: FileUploadConfig): AxiosPromise<void> => {
const formData = new FormData();
formData.append('file', file);
return AXIOS.post(url, formData, {
headers: {
'Content-Type': 'multipart/form-data'
},
...(config || {})
});
};

View File

@@ -1,2 +0,0 @@
export const PROJECT_NAME = process.env.REACT_APP_PROJECT_NAME || 'EMS-ESP';
export const PROJECT_PATH = process.env.REACT_APP_PROJECT_PATH || 'project';

View File

@@ -1,9 +0,0 @@
import { AxiosPromise } from 'axios';
import { Features } from '../types';
import { AXIOS } from './endpoints';
export function readFeatures(): AxiosPromise<Features> {
return AXIOS.get('/features');
}

View File

@@ -1,16 +1,10 @@
import { AxiosPromise } from 'axios';
import { MqttSettings, MqttStatus } from '../types';
import type { MqttSettingsType, MqttStatusType } from 'types';
import { AXIOS } from './endpoints';
import { alovaInstance } from './endpoints';
export function readMqttStatus(): AxiosPromise<MqttStatus> {
return AXIOS.get('/mqttStatus');
}
export function readMqttSettings(): AxiosPromise<MqttSettings> {
return AXIOS.get('/mqttSettings');
}
export function updateMqttSettings(ntpSettings: MqttSettings): AxiosPromise<MqttSettings> {
return AXIOS.post('/mqttSettings', ntpSettings);
}
export const readMqttStatus = () =>
alovaInstance.Get<MqttStatusType>('/rest/mqttStatus');
export const readMqttSettings = () =>
alovaInstance.Get<MqttSettingsType>('/rest/mqttSettings');
export const updateMqttSettings = (data: MqttSettingsType) =>
alovaInstance.Post<MqttSettingsType>('/rest/mqttSettings', data);

View File

@@ -1,25 +1,15 @@
import { AxiosPromise } from 'axios';
import type { NetworkSettingsType, NetworkStatusType, WiFiNetworkList } from 'types';
import { WiFiNetworkList, NetworkSettings, NetworkStatus } from '../types';
import { alovaInstance } from './endpoints';
import { AXIOS } from './endpoints';
export function readNetworkStatus(): AxiosPromise<NetworkStatus> {
return AXIOS.get('/networkStatus');
}
export function scanNetworks(): AxiosPromise<void> {
return AXIOS.get('/scanNetworks');
}
export function listNetworks(): AxiosPromise<WiFiNetworkList> {
return AXIOS.get('/listNetworks');
}
export function readNetworkSettings(): AxiosPromise<NetworkSettings> {
return AXIOS.get('/networkSettings');
}
export function updateNetworkSettings(wifiSettings: NetworkSettings): AxiosPromise<NetworkSettings> {
return AXIOS.post('/networkSettings', wifiSettings);
}
export const readNetworkStatus = () =>
alovaInstance.Get<NetworkStatusType>('/rest/networkStatus');
export const scanNetworks = () => alovaInstance.Get('/rest/scanNetworks');
export const listNetworks = () =>
alovaInstance.Get<WiFiNetworkList>('/rest/listNetworks', {
timeout: 20000 // 20 seconds
});
export const readNetworkSettings = () =>
alovaInstance.Get<NetworkSettingsType>('/rest/networkSettings');
export const updateNetworkSettings = (wifiSettings: NetworkSettingsType) =>
alovaInstance.Post<NetworkSettingsType>('/rest/networkSettings', wifiSettings);

View File

@@ -1,20 +1,14 @@
import { AxiosPromise } from 'axios';
import { NTPSettings, NTPStatus, Time } from '../types';
import type { NTPSettingsType, NTPStatusType, Time } from 'types';
import { AXIOS } from './endpoints';
import { alovaInstance } from './endpoints';
export function readNTPStatus(): AxiosPromise<NTPStatus> {
return AXIOS.get('/ntpStatus');
}
export const readNTPStatus = () =>
alovaInstance.Get<NTPStatusType>('/rest/ntpStatus');
export function readNTPSettings(): AxiosPromise<NTPSettings> {
return AXIOS.get('/ntpSettings');
}
export const readNTPSettings = () =>
alovaInstance.Get<NTPSettingsType>('/rest/ntpSettings', {});
export const updateNTPSettings = (data: NTPSettingsType) =>
alovaInstance.Post<NTPSettingsType>('/rest/ntpSettings', data);
export function updateNTPSettings(ntpSettings: NTPSettings): AxiosPromise<NTPSettings> {
return AXIOS.post('/ntpSettings', ntpSettings);
}
export function updateTime(time: Time): AxiosPromise<Time> {
return AXIOS.post('/time', time);
}
export const updateTime = (data: Time) =>
alovaInstance.Post<Time>('/rest/time', data);

View File

@@ -1,17 +1,14 @@
import { AxiosPromise } from 'axios';
import type { SecuritySettingsType, Token } from 'types';
import { SecuritySettings, Token } from '../types';
import { alovaInstance } from './endpoints';
import { AXIOS } from './endpoints';
export const readSecuritySettings = () =>
alovaInstance.Get<SecuritySettingsType>('/rest/securitySettings');
export function readSecuritySettings(): AxiosPromise<SecuritySettings> {
return AXIOS.get('/securitySettings');
}
export const updateSecuritySettings = (securitySettings: SecuritySettingsType) =>
alovaInstance.Post('/rest/securitySettings', securitySettings);
export function updateSecuritySettings(securitySettings: SecuritySettings): AxiosPromise<SecuritySettings> {
return AXIOS.post('/securitySettings', securitySettings);
}
export function generateToken(username?: string): AxiosPromise<Token> {
return AXIOS.get('/generateToken', { params: { username } });
}
export const generateToken = (username?: string) =>
alovaInstance.Get<Token>('/rest/generateToken', {
params: { username }
});

View File

@@ -1,41 +1,36 @@
import { AxiosPromise } from 'axios';
import type { LogSettings, SystemStatus } from 'types';
import { OTASettings, SystemStatus, LogSettings, LogEntries } from '../types';
import { alovaInstance, alovaInstanceGH } from './endpoints';
import { AXIOS, AXIOS_BIN, FileUploadConfig, startUploadFile } from './endpoints';
// systemStatus - also used to ping in Restart monitor for pinging
export const readSystemStatus = () =>
alovaInstance.Get<SystemStatus>('/rest/systemStatus');
export function readSystemStatus(timeout?: number): AxiosPromise<SystemStatus> {
return AXIOS.get('/systemStatus', { timeout });
}
// SystemLog
export const readLogSettings = () =>
alovaInstance.Get<LogSettings>(`/rest/logSettings`);
export const updateLogSettings = (data: LogSettings) =>
alovaInstance.Post('/rest/logSettings', data);
export const fetchLogES = () => alovaInstance.Get('/es/log');
export function restart(): AxiosPromise<void> {
return AXIOS.post('/restart');
}
export function factoryReset(): AxiosPromise<void> {
return AXIOS.post('/factoryReset');
}
export function readOTASettings(): AxiosPromise<OTASettings> {
return AXIOS.get('/otaSettings');
}
export function updateOTASettings(otaSettings: OTASettings): AxiosPromise<OTASettings> {
return AXIOS.post('/otaSettings', otaSettings);
}
export const uploadFile = (file: File, config?: FileUploadConfig): AxiosPromise<void> =>
startUploadFile('/uploadFile', file, config);
export function readLogSettings(): AxiosPromise<LogSettings> {
return AXIOS.get('/logSettings');
}
export function updateLogSettings(logSettings: LogSettings): AxiosPromise<LogSettings> {
return AXIOS.post('/logSettings', logSettings);
}
export function readLogEntries(): AxiosPromise<LogEntries> {
return AXIOS_BIN.get('/fetchLog');
}
// Get versions from GitHub
export const getStableVersion = () =>
alovaInstanceGH.Get('latest', {
transform(response: { data: { name: string } }) {
return response.data.name.substring(1);
}
});
export const getDevVersion = () =>
alovaInstanceGH.Get('tags/latest', {
transform(response: { data: { name: string } }) {
return response.data.name.split(/\s+/).splice(-1)[0].substring(1);
}
});
export const uploadFile = (file: File) => {
const formData = new FormData();
formData.append('file', file);
return alovaInstance.Post('/rest/uploadFile', formData, {
timeout: 60000 // override timeout for uploading firmware - 1 minute
});
};

1220
interface/src/api/unpack.ts Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,342 @@
import { useCallback, useState } from 'react';
import { useBlocker } from 'react-router-dom';
import { toast } from 'react-toastify';
import AddIcon from '@mui/icons-material/Add';
import CancelIcon from '@mui/icons-material/Cancel';
import EditOutlinedIcon from '@mui/icons-material/EditOutlined';
import WarningIcon from '@mui/icons-material/Warning';
import { Box, Button, Typography } from '@mui/material';
import {
Body,
Cell,
Header,
HeaderCell,
HeaderRow,
Row,
Table
} from '@table-library/react-table-library/table';
import { useTheme } from '@table-library/react-table-library/theme';
import { updateState, useRequest } from 'alova/client';
import {
BlockNavigation,
ButtonRow,
FormLoader,
SectionContent,
useLayoutTitle
} from 'components';
import { useI18nContext } from 'i18n/i18n-react';
import { useInterval } from 'utils';
import { readCustomEntities, writeCustomEntities } from '../../api/app';
import SettingsCustomEntitiesDialog from './CustomEntitiesDialog';
import { DeviceValueTypeNames, DeviceValueUOM_s } from './types';
import type { Entities, EntityItem } from './types';
import { entityItemValidation } from './validators';
const CustomEntities = () => {
const { LL } = useI18nContext();
const [numChanges, setNumChanges] = useState<number>(0);
const blocker = useBlocker(numChanges !== 0);
const [selectedEntityItem, setSelectedEntityItem] = useState<EntityItem>();
const [creating, setCreating] = useState<boolean>(false);
const [dialogOpen, setDialogOpen] = useState<boolean>(false);
useLayoutTitle(LL.CUSTOM_ENTITIES(0));
const {
data: entities,
send: fetchEntities,
error
} = useRequest(readCustomEntities, {
initialData: []
});
useInterval(() => {
if (!dialogOpen && !numChanges) {
void fetchEntities();
}
}, 3000);
const { send: writeEntities } = useRequest(
(data: Entities) => writeCustomEntities(data),
{ immediate: false }
);
function hasEntityChanged(ei: EntityItem) {
return (
ei.id !== ei.o_id ||
ei.ram !== ei.o_ram ||
(ei?.name || '') !== (ei?.o_name || '') ||
ei.device_id !== ei.o_device_id ||
ei.type_id !== ei.o_type_id ||
ei.offset !== ei.o_offset ||
ei.uom !== ei.o_uom ||
ei.factor !== ei.o_factor ||
ei.value_type !== ei.o_value_type ||
ei.writeable !== ei.o_writeable ||
ei.deleted !== ei.o_deleted ||
(ei.value || '') !== (ei.o_value || '')
);
}
const entity_theme = useTheme({
Table: `
--data-table-library_grid-template-columns: repeat(1, minmax(60px, 1fr)) minmax(80px, auto) 80px 80px 80px 90px;
`,
BaseRow: `
font-size: 14px;
.td {
height: 32px;
}
`,
BaseCell: `
&:nth-of-type(1) {
padding: 8px;
}
&:nth-of-type(2) {
text-align: center;
}
&:nth-of-type(3) {
text-align: center;
}
&:nth-of-type(4) {
text-align: center;
}
&:nth-of-type(5) {
text-align: center;
}
&:nth-of-type(6) {
text-align: center;
}
`,
HeaderRow: `
text-transform: uppercase;
background-color: black;
color: #90CAF9;
.th {
border-bottom: 1px solid #565656;
height: 36px;
}
`,
Row: `
background-color: #1e1e1e;
position: relative;
cursor: pointer;
.td {
border-bottom: 1px solid #565656;
}
&:hover .td {
background-color: #177ac9;
}
`
});
const saveEntities = async () => {
await writeEntities({
entities: entities
.filter((ei) => !ei.deleted)
.map((condensed_ei) => ({
id: condensed_ei.id,
ram: condensed_ei.ram,
name: condensed_ei.name,
device_id: condensed_ei.device_id,
type_id: condensed_ei.type_id,
offset: condensed_ei.offset,
factor: condensed_ei.factor,
uom: condensed_ei.uom,
writeable: condensed_ei.writeable,
value_type: condensed_ei.value_type,
value: condensed_ei.value
}))
})
.then(() => {
toast.success(LL.ENTITIES_UPDATED());
})
.catch((error: Error) => {
toast.error(error.message);
})
.finally(async () => {
await fetchEntities();
setNumChanges(0);
});
};
const editEntityItem = useCallback((ei: EntityItem) => {
setCreating(false);
setSelectedEntityItem(ei);
setDialogOpen(true);
}, []);
const onDialogClose = () => {
setDialogOpen(false);
};
const onDialogCancel = async () => {
await fetchEntities().then(() => {
setNumChanges(0);
});
};
const onDialogSave = (updatedItem: EntityItem) => {
setDialogOpen(false);
void updateState(readCustomEntities(), (data: EntityItem[]) => {
const new_data = creating
? [
...data.filter((ei) => creating || ei.o_id !== updatedItem.o_id),
updatedItem
]
: data.map((ei) =>
ei.id === updatedItem.id ? { ...ei, ...updatedItem } : ei
);
setNumChanges(new_data.filter((ei) => hasEntityChanged(ei)).length);
return new_data;
});
};
const addEntityItem = () => {
setCreating(true);
setSelectedEntityItem({
id: Math.floor(Math.random() * (Math.floor(200) - 100) + 100),
name: '',
ram: 0,
device_id: '0',
type_id: '0',
offset: 0,
factor: 1,
uom: 0,
value_type: 0,
writeable: false,
deleted: false,
value: ''
});
setDialogOpen(true);
};
function formatValue(value: unknown, uom: number) {
return value === undefined
? ''
: typeof value === 'number'
? new Intl.NumberFormat().format(value) +
(uom === 0 ? '' : ' ' + DeviceValueUOM_s[uom])
: (value as string);
}
function showHex(value: number, digit: number) {
return '0x' + value.toString(16).toUpperCase().padStart(digit, '0');
}
const renderEntity = () => {
if (!entities) {
return <FormLoader onRetry={fetchEntities} errorMessage={error?.message} />;
}
return (
<Table
data={{
nodes: entities
.filter((ei) => !ei.deleted)
.sort((a, b) => a.name.localeCompare(b.name))
}}
theme={entity_theme}
layout={{ custom: true }}
>
{(tableList: EntityItem[]) => (
<>
<Header>
<HeaderRow>
<HeaderCell>{LL.NAME(0)}</HeaderCell>
<HeaderCell stiff>{LL.ID_OF(LL.DEVICE())}</HeaderCell>
<HeaderCell stiff>{LL.ID_OF(LL.TYPE(1))}</HeaderCell>
<HeaderCell stiff>{LL.OFFSET()}</HeaderCell>
<HeaderCell stiff>{LL.TYPE(0)}</HeaderCell>
<HeaderCell stiff>{LL.VALUE(0)}</HeaderCell>
</HeaderRow>
</Header>
<Body>
{tableList.map((ei: EntityItem) => (
<Row key={ei.name} item={ei} onClick={() => editEntityItem(ei)}>
<Cell>
{ei.name}&nbsp;
{ei.writeable && (
<EditOutlinedIcon color="primary" sx={{ fontSize: 12 }} />
)}
</Cell>
<Cell>
{ei.ram === 1 ? '' : showHex(ei.device_id as number, 2)}
</Cell>
<Cell>{ei.ram === 1 ? '' : showHex(ei.type_id as number, 3)}</Cell>
<Cell>{ei.ram === 1 ? '' : ei.offset}</Cell>
<Cell>
{ei.ram === 1 ? 'RAM' : DeviceValueTypeNames[ei.value_type]}
</Cell>
<Cell>{formatValue(ei.value, ei.uom)}</Cell>
</Row>
))}
</Body>
</>
)}
</Table>
);
};
return (
<SectionContent>
{blocker ? <BlockNavigation blocker={blocker} /> : null}
<Box mb={2} color="warning.main">
<Typography variant="body1">{LL.ENTITIES_HELP_1()}.</Typography>
</Box>
{renderEntity()}
{selectedEntityItem && (
<SettingsCustomEntitiesDialog
open={dialogOpen}
creating={creating}
onClose={onDialogClose}
onSave={onDialogSave}
selectedItem={selectedEntityItem}
validator={entityItemValidation(entities, selectedEntityItem)}
/>
)}
<Box mt={1} display="flex" flexWrap="wrap">
<Box flexGrow={1}>
{numChanges > 0 && (
<ButtonRow>
<Button
startIcon={<CancelIcon />}
variant="outlined"
onClick={onDialogCancel}
color="secondary"
>
{LL.CANCEL()}
</Button>
<Button
startIcon={<WarningIcon color="warning" />}
variant="contained"
color="info"
onClick={saveEntities}
>
{LL.APPLY_CHANGES(numChanges)}
</Button>
</ButtonRow>
)}
</Box>
<Box flexWrap="nowrap" whiteSpace="nowrap">
<Button
startIcon={<AddIcon />}
variant="outlined"
color="primary"
onClick={addEntityItem}
>
{LL.ADD(0)}
</Button>
</Box>
</Box>
</SectionContent>
);
};
export default CustomEntities;

View File

@@ -0,0 +1,342 @@
import { useEffect, useState } from 'react';
import AddIcon from '@mui/icons-material/Add';
import CancelIcon from '@mui/icons-material/Cancel';
import DoneIcon from '@mui/icons-material/Done';
import RemoveIcon from '@mui/icons-material/RemoveCircleOutline';
import {
Box,
Button,
Checkbox,
Dialog,
DialogActions,
DialogContent,
DialogTitle,
InputAdornment,
MenuItem,
TextField
} from '@mui/material';
import Grid from '@mui/material/Grid2';
import { dialogStyle } from 'CustomTheme';
import type Schema from 'async-validator';
import type { ValidateFieldsError } from 'async-validator';
import { BlockFormControlLabel, ValidatedTextField } from 'components';
import { useI18nContext } from 'i18n/i18n-react';
import { numberValue, updateValue } from 'utils';
import { validate } from 'validators';
import { DeviceValueType, DeviceValueTypeNames, DeviceValueUOM_s } from './types';
import type { EntityItem } from './types';
interface CustomEntitiesDialogProps {
open: boolean;
creating: boolean;
onClose: () => void;
onSave: (ei: EntityItem) => void;
selectedItem: EntityItem;
validator: Schema;
}
const CustomEntitiesDialog = ({
open,
creating,
onClose,
onSave,
selectedItem,
validator
}: CustomEntitiesDialogProps) => {
const { LL } = useI18nContext();
const [editItem, setEditItem] = useState<EntityItem>(selectedItem);
const [fieldErrors, setFieldErrors] = useState<ValidateFieldsError>();
const updateFormValue = updateValue(setEditItem);
useEffect(() => {
if (open) {
setFieldErrors(undefined);
setEditItem(selectedItem);
// convert to hex strings straight away
setEditItem({
...selectedItem,
device_id: selectedItem.device_id.toString(16).toUpperCase(),
type_id: selectedItem.type_id.toString(16).toUpperCase()
});
}
}, [open, selectedItem]);
const handleClose = (_event, reason: 'backdropClick' | 'escapeKeyDown') => {
if (reason !== 'backdropClick') {
onClose();
}
};
const save = async () => {
try {
setFieldErrors(undefined);
await validate(validator, editItem);
if (typeof editItem.device_id === 'string') {
editItem.device_id = parseInt(editItem.device_id, 16);
}
if (typeof editItem.type_id === 'string') {
editItem.type_id = parseInt(editItem.type_id, 16);
}
onSave(editItem);
} catch (error) {
setFieldErrors(error as ValidateFieldsError);
}
};
const remove = () => {
editItem.deleted = true;
onSave(editItem);
};
return (
<Dialog sx={dialogStyle} open={open} onClose={handleClose}>
<DialogTitle>
{creating ? LL.ADD(1) + ' ' + LL.NEW(1) : LL.EDIT()}&nbsp;{LL.ENTITY()}
</DialogTitle>
<DialogContent dividers>
<Box display="flex" flexWrap="wrap" mb={1}>
<Box flexWrap="nowrap" whiteSpace="nowrap" />
</Box>
<Grid container spacing={2} rowSpacing={0}>
<Grid size={12}>
<ValidatedTextField
fieldErrors={fieldErrors}
name="name"
label={LL.NAME(0)}
value={editItem.name}
margin="normal"
fullWidth
onChange={updateFormValue}
/>
</Grid>
<Grid>
<TextField
name="ram"
label={LL.VALUE(0) + ' ' + LL.TYPE(1)}
value={editItem.ram}
variant="outlined"
onChange={updateFormValue}
margin="normal"
fullWidth
select
>
<MenuItem value={0}>EMS-{LL.VALUE(1)}</MenuItem>
<MenuItem value={1}>RAM-{LL.VALUE(1)}</MenuItem>
</TextField>
</Grid>
{editItem.ram === 1 && (
<Grid>
<TextField
name="value"
label={LL.DEFAULT(0) + ' ' + LL.VALUE(0)}
type="string"
value={editItem.value as string}
variant="outlined"
onChange={updateFormValue}
fullWidth
margin="normal"
/>
</Grid>
)}
{editItem.ram === 0 && (
<>
<Grid mt={3} size={9}>
<BlockFormControlLabel
control={
<Checkbox
checked={editItem.writeable}
onChange={updateFormValue}
name="writeable"
/>
}
label={LL.WRITEABLE()}
/>
</Grid>
<Grid>
<ValidatedTextField
fieldErrors={fieldErrors}
name="device_id"
label={LL.ID_OF(LL.DEVICE())}
margin="normal"
sx={{ width: '11ch' }}
type="string"
value={editItem.device_id as string}
onChange={updateFormValue}
slotProps={{
input: {
startAdornment: (
<InputAdornment position="start">0x</InputAdornment>
)
},
htmlInput: { style: { textTransform: 'uppercase' } }
}}
/>
</Grid>
<Grid>
<ValidatedTextField
fieldErrors={fieldErrors}
name="type_id"
label={LL.ID_OF(LL.TYPE(1))}
margin="normal"
sx={{ width: '11ch' }}
type="string"
value={editItem.type_id as string}
onChange={updateFormValue}
slotProps={{
input: {
startAdornment: (
<InputAdornment position="start">0x</InputAdornment>
)
},
htmlInput: { style: { textTransform: 'uppercase' } }
}}
/>
</Grid>
<Grid>
<ValidatedTextField
fieldErrors={fieldErrors}
name="offset"
label={LL.OFFSET()}
margin="normal"
sx={{ width: '11ch' }}
type="number"
value={numberValue(editItem.offset)}
onChange={updateFormValue}
/>
</Grid>
<Grid>
<TextField
name="value_type"
label={LL.VALUE(0) + ' ' + LL.TYPE(1)}
value={editItem.value_type}
variant="outlined"
sx={{ width: '11ch' }}
onChange={updateFormValue}
margin="normal"
select
>
<MenuItem value={DeviceValueType.BOOL}>
{DeviceValueTypeNames[DeviceValueType.BOOL]}
</MenuItem>
<MenuItem value={DeviceValueType.INT8}>
{DeviceValueTypeNames[DeviceValueType.INT8]}
</MenuItem>
<MenuItem value={DeviceValueType.UINT8}>
{DeviceValueTypeNames[DeviceValueType.UINT8]}
</MenuItem>
<MenuItem value={DeviceValueType.INT16}>
{DeviceValueTypeNames[DeviceValueType.INT16]}
</MenuItem>
<MenuItem value={DeviceValueType.UINT16}>
{DeviceValueTypeNames[DeviceValueType.UINT16]}
</MenuItem>
<MenuItem value={DeviceValueType.UINT24}>
{DeviceValueTypeNames[DeviceValueType.UINT24]}
</MenuItem>
<MenuItem value={DeviceValueType.TIME}>
{DeviceValueTypeNames[DeviceValueType.TIME]}
</MenuItem>
<MenuItem value={DeviceValueType.UINT32}>
{DeviceValueTypeNames[DeviceValueType.UINT32]}
</MenuItem>
<MenuItem value={DeviceValueType.STRING}>
{DeviceValueTypeNames[DeviceValueType.STRING]}
</MenuItem>
</TextField>
</Grid>
{editItem.value_type !== DeviceValueType.BOOL &&
editItem.value_type !== DeviceValueType.STRING && (
<>
<Grid>
<TextField
name="factor"
label={LL.FACTOR()}
value={numberValue(editItem.factor)}
variant="outlined"
onChange={updateFormValue}
sx={{ width: '11ch' }}
margin="normal"
type="number"
slotProps={{
htmlInput: { step: '0.001' }
}}
/>
</Grid>
<Grid>
<TextField
name="uom"
label={LL.UNIT()}
value={editItem.uom}
margin="normal"
sx={{ width: '11ch' }}
onChange={updateFormValue}
select
>
{DeviceValueUOM_s.map((val, i) => (
<MenuItem key={val} value={i}>
{val}
</MenuItem>
))}
</TextField>
</Grid>
</>
)}
{editItem.value_type === DeviceValueType.STRING &&
editItem.device_id !== '0' && (
<Grid>
<ValidatedTextField
fieldErrors={fieldErrors}
name="factor"
label="Bytes"
value={numberValue(editItem.factor)}
sx={{ width: '11ch' }}
variant="outlined"
onChange={updateFormValue}
margin="normal"
type="number"
/>
</Grid>
)}
</>
)}
</Grid>
</DialogContent>
<DialogActions>
{!creating && (
<Box flexGrow={1}>
<Button
startIcon={<RemoveIcon />}
variant="outlined"
color="warning"
onClick={remove}
>
{LL.REMOVE()}
</Button>
</Box>
)}
<Button
startIcon={<CancelIcon />}
variant="outlined"
onClick={onClose}
color="secondary"
>
{LL.CANCEL()}
</Button>
<Button
startIcon={creating ? <AddIcon /> : <DoneIcon />}
variant="outlined"
onClick={save}
color="primary"
>
{creating ? LL.ADD(0) : LL.UPDATE()}
</Button>
</DialogActions>
</Dialog>
);
};
export default CustomEntitiesDialog;

View File

@@ -0,0 +1,753 @@
import { useCallback, useEffect, useState } from 'react';
import { useBlocker, useLocation } from 'react-router-dom';
import { toast } from 'react-toastify';
import CancelIcon from '@mui/icons-material/Cancel';
import EditIcon from '@mui/icons-material/Edit';
import PowerSettingsNewIcon from '@mui/icons-material/PowerSettingsNew';
import SaveIcon from '@mui/icons-material/Save';
import SearchIcon from '@mui/icons-material/Search';
import SettingsBackupRestoreIcon from '@mui/icons-material/SettingsBackupRestore';
import WarningIcon from '@mui/icons-material/Warning';
import {
Box,
Button,
Dialog,
DialogActions,
DialogContent,
DialogTitle,
InputAdornment,
Link,
MenuItem,
TextField,
ToggleButton,
ToggleButtonGroup,
Typography
} from '@mui/material';
import Grid from '@mui/material/Grid2';
import {
Body,
Cell,
Header,
HeaderCell,
HeaderRow,
Row,
Table
} from '@table-library/react-table-library/table';
import { useTheme } from '@table-library/react-table-library/theme';
import { dialogStyle } from 'CustomTheme';
import { useRequest } from 'alova/client';
import RestartMonitor from 'app/status/RestartMonitor';
import {
BlockNavigation,
ButtonRow,
MessageBox,
SectionContent,
useLayoutTitle
} from 'components';
import { useI18nContext } from 'i18n/i18n-react';
import {
API,
readCoreData,
readDeviceEntities,
resetCustomizations,
writeCustomizationEntities,
writeDeviceName
} from '../../api/app';
import SettingsCustomizationsDialog from './CustomizationsDialog';
import EntityMaskToggle from './EntityMaskToggle';
import OptionIcon from './OptionIcon';
import { DeviceEntityMask } from './types';
import type { APIcall, Device, DeviceEntity } from './types';
export const APIURL = window.location.origin + '/api/';
const Customizations = () => {
const { LL } = useI18nContext();
const [numChanges, setNumChanges] = useState<number>(0);
const blocker = useBlocker(numChanges !== 0);
const [restarting, setRestarting] = useState<boolean>(false);
const [restartNeeded, setRestartNeeded] = useState<boolean>(false);
const [deviceEntities, setDeviceEntities] = useState<DeviceEntity[]>([]);
const [confirmReset, setConfirmReset] = useState<boolean>(false);
const [selectedFilters, setSelectedFilters] = useState<number>(0);
const [search, setSearch] = useState('');
const [selectedDeviceEntity, setSelectedDeviceEntity] = useState<DeviceEntity>();
const [dialogOpen, setDialogOpen] = useState<boolean>(false);
const [rename, setRename] = useState<boolean>(false);
useLayoutTitle(LL.CUSTOMIZATIONS());
// fetch devices first from coreData
const { data: devices, send: fetchCoreData } = useRequest(readCoreData);
const { send: sendAPI } = useRequest((data: APIcall) => API(data), {
immediate: false
});
const [selectedDevice, setSelectedDevice] = useState<number>(
Number(useLocation().state) || -1
);
const [selectedDeviceTypeNameURL, setSelectedDeviceTypeNameURL] =
useState<string>(''); // needed for API URL
const [selectedDeviceName, setSelectedDeviceName] = useState<string>('');
const { send: sendResetCustomizations } = useRequest(resetCustomizations(), {
immediate: false
});
const { send: sendDeviceName } = useRequest(
(data: { id: number; name: string }) => writeDeviceName(data),
{
immediate: false
}
);
const { send: sendCustomizationEntities } = useRequest(
(data: { id: number; entity_ids: string[] }) => writeCustomizationEntities(data),
{
immediate: false
}
);
const { send: sendDeviceEntities } = useRequest(
(data: number) => readDeviceEntities(data),
{
initialData: [],
immediate: false
}
).onSuccess((event) => {
setOriginalSettings(event.data);
});
const setOriginalSettings = (data: DeviceEntity[]) => {
setDeviceEntities(
data.map((de) => ({
...de,
o_m: de.m,
o_cn: de.cn,
o_mi: de.mi,
o_ma: de.ma
}))
);
};
const doRestart = async () => {
setRestarting(true);
await sendAPI({ device: 'system', cmd: 'restart', id: 0 }).catch(
(error: Error) => {
toast.error(error.message);
}
);
};
const entities_theme = useTheme({
Table: `
--data-table-library_grid-template-columns: 156px repeat(1, minmax(80px, 1fr)) 45px minmax(45px, auto) minmax(120px, auto);
`,
BaseRow: `
font-size: 14px;
.td {
height: 32px;
}
`,
BaseCell: `
&:nth-of-type(3) {
text-align: right;
}
&:nth-of-type(4) {
text-align: right;
}
&:last-of-type {
text-align: right;
}
`,
HeaderRow: `
text-transform: uppercase;
background-color: black;
color: #90CAF9;
.th {
border-bottom: 1px solid #565656;
height: 36px;
}
&:nth-of-type(1) .th {
text-align: center;
}
`,
Row: `
background-color: #1e1e1e;
position: relative;
cursor: pointer;
.td {
border-top: 1px solid #565656;
border-bottom: 1px solid #565656;
}
&.tr.tr-body.row-select.row-select-single-selected {
background-color: #3d4752;
}
&:hover .td {
border-top: 1px solid #177ac9;
background-color: #177ac9;
}
`,
Cell: `
&:nth-of-type(2) {
padding: 8px;
}
&:nth-of-type(3) {
padding-right: 4px;
}
&:nth-of-type(4) {
padding-right: 4px;
}
&:last-of-type {
padding-right: 8px;
}
`
});
function hasEntityChanged(de: DeviceEntity) {
return (
(de?.cn || '') !== (de?.o_cn || '') ||
de.m !== de.o_m ||
de.ma !== de.o_ma ||
de.mi !== de.o_mi
);
}
useEffect(() => {
if (deviceEntities.length) {
setNumChanges(
deviceEntities
.filter((de) => hasEntityChanged(de))
.map(
(new_de) =>
new_de.m.toString(16).padStart(2, '0') +
new_de.id +
(new_de.cn || new_de.mi || new_de.ma ? '|' : '') +
(new_de.cn ? new_de.cn : '') +
(new_de.mi ? '>' + new_de.mi : '') +
(new_de.ma ? '<' + new_de.ma : '')
).length
);
}
}, [deviceEntities]);
useEffect(() => {
if (devices && selectedDevice !== -1) {
void sendDeviceEntities(selectedDevice);
const index = devices.devices.findIndex((d) => d.id === selectedDevice);
if (index === -1) {
setSelectedDevice(-1);
setSelectedDeviceTypeNameURL('');
} else {
setSelectedDeviceTypeNameURL(devices.devices[index].url || '');
setSelectedDeviceName(devices.devices[index].n);
setNumChanges(0);
setRestartNeeded(false);
}
}
}, [devices, selectedDevice]);
function formatValue(value: unknown) {
if (typeof value === 'number') {
return new Intl.NumberFormat().format(value);
} else if (value === undefined) {
return '';
} else if (typeof value === 'boolean') {
return value ? 'true' : 'false';
}
return value as string;
}
const formatName = (de: DeviceEntity, withShortname: boolean) =>
(de.n && de.n[0] === '!'
? de.t
? LL.COMMAND(1) + ': ' + de.t + ' ' + de.n.slice(1)
: LL.COMMAND(1) + ': ' + de.n.slice(1)
: de.cn && de.cn !== ''
? de.t
? de.t + ' ' + de.cn
: de.cn
: de.t
? de.t + ' ' + de.n
: de.n) + (withShortname ? ' ' + de.id : '');
const getMaskNumber = (newMask: string[]) => {
let new_mask = 0;
for (const entry of newMask) {
new_mask |= Number(entry);
}
return new_mask;
};
const getMaskString = (m: number) => {
const new_masks: string[] = [];
if ((m & 1) === 1) {
new_masks.push('1');
}
if ((m & 2) === 2) {
new_masks.push('2');
}
if ((m & 4) === 4) {
new_masks.push('4');
}
if ((m & 8) === 8) {
new_masks.push('8');
}
if ((m & 128) === 128) {
new_masks.push('128');
}
return new_masks;
};
const filter_entity = (de: DeviceEntity) =>
(de.m & selectedFilters || !selectedFilters) &&
formatName(de, true).includes(search);
const maskDisabled = (set: boolean) => {
setDeviceEntities(
deviceEntities.map(function (de) {
if (filter_entity(de)) {
return {
...de,
m: set
? de.m |
(DeviceEntityMask.DV_API_MQTT_EXCLUDE |
DeviceEntityMask.DV_WEB_EXCLUDE)
: de.m &
~(
DeviceEntityMask.DV_API_MQTT_EXCLUDE |
DeviceEntityMask.DV_WEB_EXCLUDE
)
};
} else {
return de;
}
})
);
};
const resetCustomization = async () => {
try {
await sendResetCustomizations();
toast.info(LL.CUSTOMIZATIONS_RESTART());
} catch (error) {
toast.error((error as Error).message);
} finally {
setConfirmReset(false);
}
};
const onDialogClose = () => {
setDialogOpen(false);
};
const updateDeviceEntity = (updatedItem: DeviceEntity) => {
setDeviceEntities(
deviceEntities?.map((de) =>
de.id === updatedItem.id ? { ...de, ...updatedItem } : de
)
);
};
const onDialogSave = (updatedItem: DeviceEntity) => {
setDialogOpen(false);
updateDeviceEntity(updatedItem);
};
const editDeviceEntity = useCallback((de: DeviceEntity) => {
if (de.n === undefined || (de.n && de.n[0] === '!')) {
return;
}
if (de.cn === undefined) {
de.cn = '';
}
setSelectedDeviceEntity(de);
setDialogOpen(true);
}, []);
const saveCustomization = async () => {
if (devices && deviceEntities && selectedDevice !== -1) {
const masked_entities = deviceEntities
.filter((de: DeviceEntity) => hasEntityChanged(de))
.map(
(new_de) =>
new_de.m.toString(16).padStart(2, '0') +
new_de.id +
(new_de.cn || new_de.mi || new_de.ma ? '|' : '') +
(new_de.cn ? new_de.cn : '') +
(new_de.mi ? '>' + new_de.mi : '') +
(new_de.ma ? '<' + new_de.ma : '')
);
// check size in bytes to match buffer in CPP, which is 2048
const bytes = new TextEncoder().encode(JSON.stringify(masked_entities)).length;
if (bytes > 2000) {
toast.warning(LL.CUSTOMIZATIONS_FULL());
return;
}
await sendCustomizationEntities({
id: selectedDevice,
entity_ids: masked_entities
}).catch((error: Error) => {
if (error.message === 'Reboot required') {
setRestartNeeded(true);
} else {
toast.error(error.message);
}
});
setOriginalSettings(deviceEntities);
}
};
const renameDevice = async () => {
await sendDeviceName({ id: selectedDevice, name: selectedDeviceName })
.then(() => {
toast.success(LL.UPDATED_OF(LL.NAME(1)));
})
.catch(() => {
toast.error(LL.UPDATE_OF(LL.NAME(1)) + ' ' + LL.FAILED(1));
})
.finally(async () => {
setRename(false);
await fetchCoreData();
});
};
const renderDeviceList = () => (
<>
<Box mb={1} color="warning.main">
<Typography variant="body1">{LL.CUSTOMIZATIONS_HELP_1()}.</Typography>
</Box>
<Box display="flex" flexWrap="wrap" alignItems="center" gap={2}>
{rename ? (
<TextField
name="device"
label={LL.EMS_DEVICE()}
fullWidth
variant="outlined"
value={selectedDeviceName}
onChange={(e) => setSelectedDeviceName(e.target.value)}
margin="normal"
/>
) : (
<TextField
name="device"
label={LL.EMS_DEVICE()}
variant="outlined"
value={selectedDevice}
disabled={numChanges !== 0}
onChange={(e) => setSelectedDevice(parseInt(e.target.value))}
margin="normal"
style={{ minWidth: '50%' }}
select
>
<MenuItem disabled key={-1} value={-1}>
{LL.SELECT_DEVICE()}...
</MenuItem>
{devices.devices.map(
(device: Device) =>
device.id < 90 && (
<MenuItem key={device.id} value={device.id}>
{device.n}&nbsp;({device.tn})
</MenuItem>
)
)}
</TextField>
)}
{selectedDevice !== -1 &&
(rename ? (
<>
<Button
startIcon={<CancelIcon />}
variant="outlined"
color="secondary"
onClick={() => setRename(false)}
>
{LL.CANCEL()}
</Button>
<Button
startIcon={<SaveIcon />}
variant="outlined"
onClick={() => renameDevice()}
>
{LL.RENAME()}
</Button>
</>
) : (
<Button
startIcon={<EditIcon />}
variant="outlined"
onClick={() => setRename(true)}
>
{LL.RENAME()}
</Button>
))}
</Box>
</>
);
const renderDeviceData = () => {
const shown_data = deviceEntities.filter((de) => filter_entity(de));
return (
<>
<Box color="warning.main">
<Typography variant="body2" mt={1}>
<OptionIcon type="favorite" isSet={true} />={LL.CUSTOMIZATIONS_HELP_2()}
&nbsp;&nbsp;
<OptionIcon type="readonly" isSet={true} />={LL.CUSTOMIZATIONS_HELP_3()}
&nbsp;&nbsp;
<OptionIcon type="api_mqtt_exclude" isSet={true} />=
{LL.CUSTOMIZATIONS_HELP_4()}&nbsp;&nbsp;
<OptionIcon type="web_exclude" isSet={true} />=
{LL.CUSTOMIZATIONS_HELP_5()}&nbsp;&nbsp;
<OptionIcon type="deleted" isSet={true} />={LL.CUSTOMIZATIONS_HELP_6()}
</Typography>
</Box>
<Grid
container
mb={1}
mt={0}
spacing={2}
direction="row"
justifyContent="flex-start"
alignItems="center"
>
<Grid>
<TextField
size="small"
variant="outlined"
placeholder={LL.SEARCH()}
onChange={(event) => {
setSearch(event.target.value);
}}
slotProps={{
input: {
startAdornment: (
<InputAdornment position="start">
<SearchIcon color="primary" sx={{ fontSize: 16 }} />
</InputAdornment>
)
}
}}
/>
</Grid>
<Grid>
<ToggleButtonGroup
size="small"
color="secondary"
value={getMaskString(selectedFilters)}
onChange={(event, mask: string[]) => {
setSelectedFilters(getMaskNumber(mask));
}}
>
<ToggleButton value="8">
<OptionIcon type="favorite" isSet={true} />
</ToggleButton>
<ToggleButton value="4">
<OptionIcon type="readonly" isSet={true} />
</ToggleButton>
<ToggleButton value="2">
<OptionIcon type="api_mqtt_exclude" isSet={true} />
</ToggleButton>
<ToggleButton value="1">
<OptionIcon type="web_exclude" isSet={true} />
</ToggleButton>
<ToggleButton value="128">
<OptionIcon type="deleted" isSet={true} />
</ToggleButton>
</ToggleButtonGroup>
</Grid>
<Grid>
<Button
size="small"
sx={{ fontSize: 10 }}
variant="outlined"
color="inherit"
onClick={() => maskDisabled(false)}
>
{LL.SET_ALL()}&nbsp;
<OptionIcon type="api_mqtt_exclude" isSet={false} />
<OptionIcon type="web_exclude" isSet={false} />
</Button>
</Grid>
<Grid>
<Button
size="small"
sx={{ fontSize: 10 }}
variant="outlined"
color="inherit"
onClick={() => maskDisabled(true)}
>
{LL.SET_ALL()}&nbsp;
<OptionIcon type="api_mqtt_exclude" isSet={true} />
<OptionIcon type="web_exclude" isSet={true} />
</Button>
</Grid>
<Grid>
<Typography variant="subtitle2" color="primary">
{LL.SHOWING()}&nbsp;{shown_data.length}/{deviceEntities.length}
&nbsp;{LL.ENTITIES(deviceEntities.length)}
</Typography>
</Grid>
</Grid>
<Table
data={{ nodes: shown_data }}
theme={entities_theme}
layout={{ custom: true }}
>
{(tableList: DeviceEntity[]) => (
<>
<Header>
<HeaderRow>
<HeaderCell stiff>{LL.OPTIONS()}</HeaderCell>
<HeaderCell resize>{LL.NAME(1)}</HeaderCell>
<HeaderCell stiff>{LL.MIN()}</HeaderCell>
<HeaderCell stiff>{LL.MAX()}</HeaderCell>
<HeaderCell resize>{LL.VALUE(0)}</HeaderCell>
</HeaderRow>
</Header>
<Body>
{tableList.map((de: DeviceEntity) => (
<Row key={de.id} item={de} onClick={() => editDeviceEntity(de)}>
<Cell stiff>
<EntityMaskToggle onUpdate={updateDeviceEntity} de={de} />
</Cell>
<Cell>
{formatName(de, false)}&nbsp;(
<Link
target="_blank"
href={APIURL + selectedDeviceTypeNameURL + '/' + de.id}
>
{de.id}
</Link>
)
</Cell>
<Cell>
{!(de.m & DeviceEntityMask.DV_READONLY) && formatValue(de.mi)}
</Cell>
<Cell>
{!(de.m & DeviceEntityMask.DV_READONLY) && formatValue(de.ma)}
</Cell>
<Cell>{formatValue(de.v)}</Cell>
</Row>
))}
</Body>
</>
)}
</Table>
</>
);
};
const renderResetDialog = () => (
<Dialog
sx={dialogStyle}
open={confirmReset}
onClose={() => setConfirmReset(false)}
>
<DialogTitle>{LL.RESET(1)}</DialogTitle>
<DialogContent dividers>{LL.CUSTOMIZATIONS_RESET()}</DialogContent>
<DialogActions>
<Button
startIcon={<CancelIcon />}
variant="outlined"
onClick={() => setConfirmReset(false)}
color="secondary"
>
{LL.CANCEL()}
</Button>
<Button
startIcon={<SettingsBackupRestoreIcon />}
variant="outlined"
onClick={resetCustomization}
color="error"
>
{LL.RESET(0)}
</Button>
</DialogActions>
</Dialog>
);
const renderContent = () => (
<>
{devices && renderDeviceList()}
{selectedDevice !== -1 && !rename && renderDeviceData()}
{restartNeeded ? (
<MessageBox my={2} level="warning" message={LL.RESTART_TEXT(0)}>
<Button
startIcon={<PowerSettingsNewIcon />}
variant="contained"
color="error"
onClick={doRestart}
>
{LL.RESTART()}
</Button>
</MessageBox>
) : (
<Box display="flex" flexWrap="wrap">
<Box flexGrow={1}>
{numChanges !== 0 && (
<ButtonRow>
<Button
startIcon={<CancelIcon />}
variant="outlined"
color="secondary"
onClick={() => devices && sendDeviceEntities(selectedDevice)}
>
{LL.CANCEL()}
</Button>
<Button
startIcon={<WarningIcon color="warning" />}
variant="contained"
color="info"
onClick={saveCustomization}
>
{LL.APPLY_CHANGES(numChanges)}
</Button>
</ButtonRow>
)}
</Box>
{!rename && (
<ButtonRow mt={1}>
<Button
startIcon={<SettingsBackupRestoreIcon />}
variant="outlined"
color="error"
onClick={() => setConfirmReset(true)}
>
{LL.RESET(0)}
</Button>
</ButtonRow>
)}
</Box>
)}
{renderResetDialog()}
</>
);
return (
<SectionContent>
{blocker ? <BlockNavigation blocker={blocker} /> : null}
{restarting ? <RestartMonitor /> : renderContent()}
{selectedDeviceEntity && (
<SettingsCustomizationsDialog
open={dialogOpen}
onClose={onDialogClose}
onSave={onDialogSave}
selectedItem={selectedDeviceEntity}
/>
)}
</SectionContent>
);
};
export default Customizations;

View File

@@ -0,0 +1,177 @@
import { useEffect, useState } from 'react';
import CancelIcon from '@mui/icons-material/Cancel';
import CloseIcon from '@mui/icons-material/Close';
import DoneIcon from '@mui/icons-material/Done';
import {
Box,
Button,
Dialog,
DialogActions,
DialogContent,
DialogTitle,
TextField,
Typography
} from '@mui/material';
import Grid from '@mui/material/Grid2';
import { dialogStyle } from 'CustomTheme';
import { useI18nContext } from 'i18n/i18n-react';
import { numberValue, updateValue } from 'utils';
import EntityMaskToggle from './EntityMaskToggle';
import { DeviceEntityMask } from './types';
import type { DeviceEntity } from './types';
interface SettingsCustomizationsDialogProps {
open: boolean;
onClose: () => void;
onSave: (di: DeviceEntity) => void;
selectedItem: DeviceEntity;
}
const CustomizationsDialog = ({
open,
onClose,
onSave,
selectedItem
}: SettingsCustomizationsDialogProps) => {
const { LL } = useI18nContext();
const [editItem, setEditItem] = useState<DeviceEntity>(selectedItem);
const [error, setError] = useState<boolean>(false);
const updateFormValue = updateValue(setEditItem);
const isWriteableNumber =
typeof editItem.v === 'number' &&
editItem.w &&
!(editItem.m & DeviceEntityMask.DV_READONLY);
useEffect(() => {
if (open) {
setError(false);
setEditItem(selectedItem);
}
}, [open, selectedItem]);
const handleClose = (_event, reason: 'backdropClick' | 'escapeKeyDown') => {
if (reason !== 'backdropClick') {
onClose();
}
};
const save = () => {
if (
isWriteableNumber &&
editItem.mi &&
editItem.ma &&
editItem.mi > editItem?.ma
) {
setError(true);
} else {
onSave(editItem);
}
};
const updateDeviceEntity = (updatedItem: DeviceEntity) => {
setEditItem({ ...editItem, m: updatedItem.m });
};
return (
<Dialog sx={dialogStyle} open={open} onClose={handleClose}>
<DialogTitle>{LL.EDIT() + ' ' + LL.ENTITY()}</DialogTitle>
<DialogContent dividers>
<Grid container>
<Typography variant="body2" color="warning.main">
{LL.ID_OF(LL.ENTITY())}:&nbsp;
</Typography>
<Typography variant="body2">{editItem.id}</Typography>
</Grid>
<Grid container direction="row">
<Typography variant="body2" color="warning.main">
{LL.DEFAULT(1) + ' ' + LL.ENTITY_NAME(1)}:&nbsp;
</Typography>
<Typography variant="body2">{editItem.n}</Typography>
</Grid>
<Grid container direction="row">
<Typography variant="body2" color="warning.main">
{LL.WRITEABLE()}:&nbsp;
</Typography>
<Typography variant="body2">
{editItem.w ? (
<DoneIcon color="success" sx={{ fontSize: 16 }} />
) : (
<CloseIcon color="error" sx={{ fontSize: 16 }} />
)}
</Typography>
</Grid>
<Box mt={1} mb={2}>
<EntityMaskToggle onUpdate={updateDeviceEntity} de={editItem} />
</Box>
<Grid container spacing={2}>
<Grid>
<TextField
name="cn"
label={LL.NEW_NAME_OF(LL.ENTITY())}
value={editItem.cn}
sx={{ width: '30ch' }}
onChange={updateFormValue}
/>
</Grid>
{isWriteableNumber && (
<>
<Grid>
<TextField
name="mi"
label={LL.MIN()}
value={numberValue(editItem.mi)}
sx={{ width: '11ch' }}
type="number"
onChange={updateFormValue}
/>
</Grid>
<Grid>
<TextField
name="ma"
label={LL.MAX()}
value={numberValue(editItem.ma)}
sx={{ width: '11ch' }}
type="number"
onChange={updateFormValue}
/>
</Grid>
</>
)}
</Grid>
{error && (
<Typography variant="body2" color="error" mt={2}>
Error: Check min and max values
</Typography>
)}
</DialogContent>
<DialogActions>
<Button
startIcon={<CancelIcon />}
variant="outlined"
onClick={onClose}
color="secondary"
>
{LL.CANCEL()}
</Button>
<Button
startIcon={<DoneIcon />}
variant="outlined"
onClick={save}
color="primary"
>
{LL.UPDATE()}
</Button>
</DialogActions>
</Dialog>
);
};
export default CustomizationsDialog;

View File

@@ -0,0 +1,366 @@
import { useContext, useEffect, useState } from 'react';
import { IconContext } from 'react-icons/lib';
import { toast } from 'react-toastify';
import ChevronRightIcon from '@mui/icons-material/ChevronRight';
import EditIcon from '@mui/icons-material/Edit';
import ExpandMoreIcon from '@mui/icons-material/ExpandMore';
import UnfoldLessIcon from '@mui/icons-material/UnfoldLess';
import UnfoldMoreIcon from '@mui/icons-material/UnfoldMore';
import {
Box,
IconButton,
ToggleButton,
ToggleButtonGroup,
Tooltip,
Typography
} from '@mui/material';
import Grid from '@mui/material/Grid2';
import { Body, Cell, Row, Table } from '@table-library/react-table-library/table';
import { useTheme } from '@table-library/react-table-library/theme';
import { CellTree, useTree } from '@table-library/react-table-library/tree';
import { useRequest } from 'alova/client';
import { FormLoader, SectionContent, useLayoutTitle } from 'components';
import { AuthenticatedContext } from 'contexts/authentication';
import { useI18nContext } from 'i18n/i18n-react';
import { useInterval, usePersistState } from 'utils';
import { readDashboard, writeDeviceValue } from '../../api/app';
import DeviceIcon from './DeviceIcon';
import DevicesDialog from './DevicesDialog';
import { formatValue } from './deviceValue';
import {
type DashboardItem,
DeviceEntityMask,
DeviceType,
type DeviceValue
} from './types';
import { deviceValueItemValidation } from './validators';
const Dashboard = () => {
const { LL } = useI18nContext();
const { me } = useContext(AuthenticatedContext);
useLayoutTitle(LL.DASHBOARD());
const [showAll, setShowAll] = usePersistState(true, 'showAll');
const [deviceValueDialogOpen, setDeviceValueDialogOpen] = useState<boolean>(false);
const [parentNodes, setParentNodes] = useState<number>(0);
const [selectedDashboardItem, setSelectedDashboardItem] =
useState<DashboardItem>();
const {
data,
send: fetchDashboard,
error,
loading
} = useRequest(readDashboard, {
initialData: []
}).onSuccess((event) => {
if (event.data.length !== parentNodes) {
setParentNodes(event.data.length); // count number of parents/devices
}
});
const { loading: submitting, send: sendDeviceValue } = useRequest(
(data: { id: number; c: string; v: unknown }) => writeDeviceValue(data),
{
immediate: false
}
);
const deviceValueDialogSave = async (devicevalue: DeviceValue) => {
if (!selectedDashboardItem) {
return;
}
const id = selectedDashboardItem.parentNode.id; // this is the parent ID
await sendDeviceValue({ id, c: devicevalue.c ?? '', v: devicevalue.v })
.then(() => {
toast.success(LL.WRITE_CMD_SENT());
})
.catch((error: Error) => {
toast.error(error.message);
})
.finally(() => {
setDeviceValueDialogOpen(false);
setSelectedDashboardItem(undefined);
});
};
const dashboard_theme = useTheme({
Table: `
--data-table-library_grid-template-columns: minmax(80px, auto) 120px 32px;
`,
BaseRow: `
font-size: 14px;
.td {
height: 28px;
}
`,
Row: `
cursor: pointer;
background-color: #1e1e1e;
&:nth-of-type(odd) .td {
background-color: #303030;
},
&:hover .td {
background-color: #177ac9;
}
`,
BaseCell: `
&:nth-of-type(2) {
text-align: right;
}
&:nth-of-type(3) {
text-align: right;
}
`
});
const tree = useTree(
{ nodes: data },
{
onChange: undefined // not used but needed
},
{
treeIcon: {
margin: '4px',
iconDefault: null,
iconRight: (
<ChevronRightIcon
sx={{ fontSize: 16, verticalAlign: 'middle' }}
color="info"
/>
),
iconDown: (
<ExpandMoreIcon
sx={{ fontSize: 16, verticalAlign: 'middle' }}
color="info"
/>
)
},
indentation: 45
}
);
useInterval(() => {
if (!deviceValueDialogOpen) {
void fetchDashboard();
}
}, 3000);
useEffect(() => {
showAll
? tree.fns.onAddAll(data.map((item: DashboardItem) => item.id)) // expand tree
: tree.fns.onRemoveAll(); // collapse tree
}, [parentNodes]);
const showType = (n?: string, t?: number) => {
// if we have a name show it
if (n) {
return n;
}
if (t) {
// otherwise pick translation based on type
switch (t) {
case DeviceType.CUSTOM:
return LL.CUSTOM_ENTITIES(0);
case DeviceType.ANALOGSENSOR:
return LL.ANALOG_SENSORS();
case DeviceType.TEMPERATURESENSOR:
return LL.TEMP_SENSORS();
case DeviceType.SCHEDULER:
return LL.SCHEDULER();
default:
break;
}
}
return '';
};
const showName = (di: DashboardItem) => {
if (di.id < 100) {
// if its a device (parent node) and has entities
if (di.nodes?.length) {
return (
<>
<span style="font-size: 14px">
<DeviceIcon type_id={di.t ?? 0} />
&nbsp;&nbsp;{showType(di.n, di.t)}
</span>
<span style={{ color: 'lightblue' }}>&nbsp;({di.nodes?.length})</span>
</>
);
}
}
if (di.dv) {
return <span style="color:lightgrey">{di.dv.id.slice(2)}</span>;
}
};
const hasMask = (id: string, mask: number) =>
(parseInt(id.slice(0, 2), 16) & mask) === mask;
const editDashboardValue = (di: DashboardItem) => {
if (me.admin && di.dv?.c) {
setSelectedDashboardItem(di);
setDeviceValueDialogOpen(true);
}
};
const handleShowAll = (
event: React.MouseEvent<HTMLElement>,
toggle: boolean | null
) => {
if (toggle !== null) {
tree.fns.onToggleAll({});
setShowAll(toggle);
}
};
const renderContent = () => {
if (!data) {
return <FormLoader onRetry={fetchDashboard} errorMessage={error?.message} />;
}
return (
<>
<Box
sx={{
backgroundColor: 'black',
pt: 1,
pl: 2
}}
>
<Grid container spacing={0} justifyContent="flex-start">
<Grid size={11}>
<Typography mb={2} variant="body1" color="warning">
{LL.DASHBOARD_1()}.
</Typography>
</Grid>
<Grid size={1} alignItems="end">
<ToggleButtonGroup
color="primary"
size="small"
value={showAll}
exclusive
onChange={handleShowAll}
>
<ToggleButton value={true}>
<UnfoldMoreIcon sx={{ fontSize: 14 }} />
</ToggleButton>
<ToggleButton value={false}>
<UnfoldLessIcon sx={{ fontSize: 14 }} />
</ToggleButton>
</ToggleButtonGroup>
</Grid>
</Grid>
</Box>
<Box
padding={1}
justifyContent="center"
flexDirection="column"
sx={{
borderRadius: 1,
border: '1px solid grey'
}}
>
<IconContext.Provider
value={{
color: 'lightblue',
size: '16',
style: { verticalAlign: 'middle' }
}}
>
{!loading && data.length === 0 ? (
<Typography variant="subtitle2" color="secondary">
{LL.NO_DATA()}
</Typography>
) : (
<Table
data={{ nodes: data }}
theme={dashboard_theme}
layout={{ custom: true }}
tree={tree}
>
{(tableList: DashboardItem[]) => (
<Body>
{tableList.map((di: DashboardItem) => (
<Row
key={di.id}
item={di}
onClick={() => editDashboardValue(di)}
>
{di.id > 99 ? (
<>
<Cell>{showName(di)}</Cell>
<Cell>
<Tooltip
placement="left"
title={formatValue(LL, di.dv?.v, di.dv?.u)}
arrow
>
<span style={{ color: 'lightgrey' }}>
{formatValue(LL, di.dv?.v, di.dv?.u)}
</span>
</Tooltip>
</Cell>
<Cell>
{me.admin &&
di.dv?.c &&
!hasMask(di.dv.id, DeviceEntityMask.DV_READONLY) && (
<IconButton
size="small"
onClick={() => editDashboardValue(di)}
>
<EditIcon
color="primary"
sx={{ fontSize: 16 }}
/>
</IconButton>
)}
</Cell>
</>
) : (
<>
<CellTree item={di}>{showName(di)}</CellTree>
<Cell />
<Cell />
</>
)}
</Row>
))}
</Body>
)}
</Table>
)}
</IconContext.Provider>
</Box>
</>
);
};
return (
<SectionContent>
{renderContent()}
{selectedDashboardItem && selectedDashboardItem.dv && (
<DevicesDialog
open={deviceValueDialogOpen}
onClose={() => setDeviceValueDialogOpen(false)}
onSave={deviceValueDialogSave}
selectedItem={selectedDashboardItem.dv}
writeable={true}
validator={deviceValueItemValidation(selectedDashboardItem.dv)}
progress={submitting}
/>
)}
</SectionContent>
);
};
export default Dashboard;

View File

@@ -0,0 +1,53 @@
import { AiOutlineAlert, AiOutlineControl, AiOutlineGateway } from 'react-icons/ai';
import { CgSmartHomeBoiler } from 'react-icons/cg';
import { FaSolarPanel } from 'react-icons/fa';
import { GiHeatHaze, GiTap } from 'react-icons/gi';
import { MdPlaylistAdd } from 'react-icons/md';
import { MdMoreTime } from 'react-icons/md';
import {
MdOutlineDevices,
MdOutlinePool,
MdOutlineSensors,
MdThermostatAuto
} from 'react-icons/md';
import { PiFan, PiGauge } from 'react-icons/pi';
import { TiFlowSwitch, TiThermometer } from 'react-icons/ti';
import { VscVmConnect } from 'react-icons/vsc';
import type { SvgIconProps } from '@mui/material';
import { DeviceType } from './types';
const deviceIconLookup: {
[key in DeviceType]: React.ComponentType<SvgIconProps> | undefined;
} = {
[DeviceType.TEMPERATURESENSOR]: TiThermometer,
[DeviceType.ANALOGSENSOR]: PiGauge,
[DeviceType.BOILER]: CgSmartHomeBoiler,
[DeviceType.HEATSOURCE]: CgSmartHomeBoiler,
[DeviceType.THERMOSTAT]: MdThermostatAuto,
[DeviceType.MIXER]: AiOutlineControl,
[DeviceType.SOLAR]: FaSolarPanel,
[DeviceType.HEATPUMP]: GiHeatHaze,
[DeviceType.GATEWAY]: AiOutlineGateway,
[DeviceType.SWITCH]: TiFlowSwitch,
[DeviceType.CONTROLLER]: VscVmConnect,
[DeviceType.CONNECT]: VscVmConnect,
[DeviceType.ALERT]: AiOutlineAlert,
[DeviceType.EXTENSION]: MdOutlineDevices,
[DeviceType.WATER]: GiTap,
[DeviceType.POOL]: MdOutlinePool,
[DeviceType.CUSTOM]: MdPlaylistAdd,
[DeviceType.UNKNOWN]: MdOutlineSensors,
[DeviceType.SYSTEM]: undefined,
[DeviceType.SCHEDULER]: MdMoreTime,
[DeviceType.GENERIC]: MdOutlineSensors,
[DeviceType.VENTILATION]: PiFan
};
const DeviceIcon = ({ type_id }: { type_id: DeviceType }) => {
const Icon = deviceIconLookup[type_id];
return Icon ? <Icon /> : null;
};
export default DeviceIcon;

View File

@@ -0,0 +1,769 @@
import {
useCallback,
useContext,
useEffect,
useLayoutEffect,
useState
} from 'react';
import { IconContext } from 'react-icons';
import { useNavigate } from 'react-router-dom';
import { toast } from 'react-toastify';
import CommentsDisabledOutlinedIcon from '@mui/icons-material/CommentsDisabledOutlined';
import EditIcon from '@mui/icons-material/Edit';
import EditOffOutlinedIcon from '@mui/icons-material/EditOffOutlined';
import FormatListNumberedIcon from '@mui/icons-material/FormatListNumbered';
import DownloadIcon from '@mui/icons-material/GetApp';
import HighlightOffIcon from '@mui/icons-material/HighlightOff';
import InfoOutlinedIcon from '@mui/icons-material/InfoOutlined';
import KeyboardArrowDownOutlinedIcon from '@mui/icons-material/KeyboardArrowDownOutlined';
import KeyboardArrowUpOutlinedIcon from '@mui/icons-material/KeyboardArrowUpOutlined';
import PlayArrowIcon from '@mui/icons-material/PlayArrow';
import StarIcon from '@mui/icons-material/Star';
import StarBorderOutlinedIcon from '@mui/icons-material/StarBorderOutlined';
import UnfoldMoreOutlinedIcon from '@mui/icons-material/UnfoldMoreOutlined';
import {
Box,
Button,
CircularProgress,
Dialog,
DialogActions,
DialogContent,
DialogTitle,
IconButton,
List,
ListItem,
ListItemText,
Tooltip,
type TooltipProps,
Typography,
styled,
tooltipClasses
} from '@mui/material';
import Grid from '@mui/material/Grid2';
import { useRowSelect } from '@table-library/react-table-library/select';
import { SortToggleType, useSort } from '@table-library/react-table-library/sort';
import {
Body,
Cell,
Header,
HeaderCell,
HeaderRow,
Row,
Table
} from '@table-library/react-table-library/table';
import { useTheme } from '@table-library/react-table-library/theme';
import type { Action, State } from '@table-library/react-table-library/types/common';
import { dialogStyle } from 'CustomTheme';
import { useRequest } from 'alova/client';
import { MessageBox, SectionContent, useLayoutTitle } from 'components';
import { AuthenticatedContext } from 'contexts/authentication';
import { useI18nContext } from 'i18n/i18n-react';
import { useInterval } from 'utils';
import { readCoreData, readDeviceData, writeDeviceValue } from '../../api/app';
import DeviceIcon from './DeviceIcon';
import DevicesDialog from './DevicesDialog';
import { formatValue } from './deviceValue';
import { DeviceEntityMask, DeviceType, DeviceValueUOM_s } from './types';
import type { Device, DeviceValue } from './types';
import { deviceValueItemValidation } from './validators';
const Devices = () => {
const { LL } = useI18nContext();
const { me } = useContext(AuthenticatedContext);
const [size, setSize] = useState([0, 0]);
const [selectedDeviceValue, setSelectedDeviceValue] = useState<DeviceValue>();
const [onlyFav, setOnlyFav] = useState(false);
const [deviceValueDialogOpen, setDeviceValueDialogOpen] = useState(false);
const [showDeviceInfo, setShowDeviceInfo] = useState(false);
const [selectedDevice, setSelectedDevice] = useState<number>();
const navigate = useNavigate();
useLayoutTitle(LL.DEVICES());
const { data: coreData, send: sendCoreData } = useRequest(() => readCoreData(), {
initialData: {
connected: true,
devices: []
}
});
const { data: deviceData, send: sendDeviceData } = useRequest(
(id: number) => readDeviceData(id),
{
initialData: {
nodes: []
},
immediate: false
}
);
const { loading: submitting, send: sendDeviceValue } = useRequest(
(data: { id: number; c: string; v: unknown }) => writeDeviceValue(data),
{
immediate: false
}
);
useLayoutEffect(() => {
function updateSize() {
setSize([window.innerWidth, window.innerHeight]);
}
window.addEventListener('resize', updateSize);
updateSize();
return () => window.removeEventListener('resize', updateSize);
}, []);
const leftOffset = () => {
const devicesWindow = document.getElementById('devices-window');
if (!devicesWindow) {
return 0;
}
const clientRect = devicesWindow.getBoundingClientRect();
const left = clientRect.left;
const right = clientRect.right;
if (!left || !right) {
return 0;
}
return left + (right - left < 400 ? 0 : 200);
};
const common_theme = useTheme({
BaseRow: `
font-size: 14px;
`,
HeaderRow: `
text-transform: uppercase;
background-color: black;
color: #90CAF9;
.th {
border-bottom: 1px solid #565656;
}
`,
Row: `
cursor: pointer;
background-color: #1E1E1E;
.td {
padding: 8px;
}
&.tr.tr-body.row-select.row-select-single-selected {
background-color: #177ac9;
font-weight: normal;
}
`
});
const device_theme = useTheme([
common_theme,
{
Table: `
--data-table-library_grid-template-columns: repeat(1, minmax(0, 1fr)) 130px;
`,
HeaderRow: `
.th {
padding: 8px;
height: 36px;
`,
Row: `
&:hover .td {
background-color: #177ac9;
`
}
]);
const data_theme = useTheme([
common_theme,
{
Table: `
--data-table-library_grid-template-columns: minmax(200px, auto) minmax(150px, auto) 40px;
height: auto;
max-height: 100%;
overflow-y: scroll;
::-webkit-scrollbar {
display:none;
}
`,
BaseRow: `
.td {
height: 32px;
}
`,
BaseCell: `
&:nth-of-type(1) {
border-left: 1px solid #177ac9;
},
&:nth-of-type(2) {
text-align: right;
},
&:nth-of-type(3) {
border-right: 1px solid #177ac9;
}
`,
HeaderRow: `
.th {
border-top: 1px solid #565656;
}
`,
Row: `
&:nth-of-type(odd) .td {
background-color: #303030;
},
&:hover .td {
background-color: #177ac9;
}
`
}
]);
const ButtonTooltip = styled(({ className, ...props }: TooltipProps) => (
<Tooltip {...props} arrow classes={{ popper: className }} />
))(({ theme }) => ({
[`& .${tooltipClasses.arrow}`]: {
color: theme.palette.success.main
},
[`& .${tooltipClasses.tooltip}`]: {
backgroundColor: theme.palette.success.main,
color: 'rgba(0, 0, 0, 0.87)',
boxShadow: theme.shadows[1],
fontSize: 10
}
}));
const getSortIcon = (state: State, sortKey: unknown) => {
if (state.sortKey === sortKey && state.reverse) {
return <KeyboardArrowDownOutlinedIcon />;
}
if (state.sortKey === sortKey && !state.reverse) {
return <KeyboardArrowUpOutlinedIcon />;
}
return <UnfoldMoreOutlinedIcon />;
};
const dv_sort = useSort(
{ nodes: deviceData.nodes },
{},
{
sortIcon: {
iconDefault: <UnfoldMoreOutlinedIcon />,
iconUp: <KeyboardArrowUpOutlinedIcon />,
iconDown: <KeyboardArrowDownOutlinedIcon />
},
sortToggleType: SortToggleType.AlternateWithReset,
sortFns: {
NAME: (array) =>
array.sort((a, b) =>
a.id.toString().slice(2).localeCompare(b.id.toString().slice(2))
),
VALUE: (array) =>
// eslint-disable-next-line @typescript-eslint/no-unsafe-return
array.sort((a, b) => a.v.toString().localeCompare(b.v.toString()))
}
}
);
async function onSelectChange(action: Action, state: State) {
setSelectedDevice(state.id as number);
if (action.type === 'ADD_BY_ID_EXCLUSIVELY') {
await sendDeviceData(state.id as number);
}
}
const device_select = useRowSelect(
{ nodes: coreData.devices },
{
onChange: onSelectChange
}
);
const resetDeviceSelect = () => {
device_select.fns.onRemoveAll();
};
const escFunction = useCallback(
(event: KeyboardEvent) => {
if (event.key === 'Escape') {
if (device_select) {
device_select.fns.onRemoveAll();
}
}
},
[device_select]
);
useEffect(() => {
document.addEventListener('keydown', escFunction);
return () => {
document.removeEventListener('keydown', escFunction);
};
}, [escFunction]);
const customize = () => {
if (selectedDevice === 99) {
navigate('/customentities');
} else {
navigate('/customizations', { state: selectedDevice });
}
};
const escapeCsvCell = (cell: string) => {
if (cell == null) {
return '';
}
const sc = cell.toString().trim();
if (sc === '' || sc === '""') {
return sc;
}
if (
sc.includes('"') ||
sc.includes(';') ||
sc.includes('\n') ||
sc.includes('\r')
) {
return '"' + sc.replace(/"/g, '""') + '"';
}
return sc;
};
const hasMask = (id: string, mask: number) =>
(parseInt(id.slice(0, 2), 16) & mask) === mask;
const handleDownloadCsv = () => {
const deviceIndex = coreData.devices.findIndex(
(d) => d.id === device_select.state.id
);
if (deviceIndex === -1) {
return;
}
const filename =
coreData.devices[deviceIndex].tn + '_' + coreData.devices[deviceIndex].n;
const columns = [
{
accessor: (dv: DeviceValue) => dv.id.slice(2),
name: LL.ENTITY_NAME(0)
},
{
accessor: (dv: DeviceValue) =>
typeof dv.v === 'number' ? new Intl.NumberFormat().format(dv.v) : dv.v,
name: LL.VALUE(0)
},
{
accessor: (dv: DeviceValue) =>
dv.u !== undefined && DeviceValueUOM_s[dv.u]
? DeviceValueUOM_s[dv.u].replace(/[^a-zA-Z0-9]/g, '')
: '',
name: 'UoM'
},
{
accessor: (dv: DeviceValue) =>
dv.c && !hasMask(dv.id, DeviceEntityMask.DV_READONLY) ? 'yes' : 'no',
name: LL.WRITEABLE()
},
{
accessor: (dv: DeviceValue) =>
dv.h
? dv.h
: dv.l
? dv.l.join(' | ')
: dv.m !== undefined && dv.x !== undefined
? dv.m + ', ' + dv.x
: '',
name: 'Range'
}
];
const data = onlyFav
? deviceData.nodes.filter((dv) => hasMask(dv.id, DeviceEntityMask.DV_FAVORITE))
: deviceData.nodes;
const csvData = data.reduce(
(csvString: string, rowItem: DeviceValue) =>
csvString +
columns
.map(({ accessor }: { accessor: (dv: DeviceValue) => unknown }) =>
escapeCsvCell(accessor(rowItem) as string)
)
.join(';') +
'\r\n',
columns.map(({ name }: { name: string }) => escapeCsvCell(name)).join(';') +
'\r\n'
);
const downloadBlob = (blob: Blob) => {
const downloadLink = document.createElement('a');
downloadLink.download = filename;
downloadLink.href = window.URL.createObjectURL(blob);
document.body.appendChild(downloadLink);
downloadLink.click();
document.body.removeChild(downloadLink);
};
const device = { ...{ device: coreData.devices[deviceIndex] }, ...deviceData };
downloadBlob(
new Blob([JSON.stringify(device, null, 2)], {
type: 'text;charset:utf-8'
})
);
downloadBlob(new Blob([csvData], { type: 'text/csv;charset:utf-8' }));
};
useInterval(() => {
if (!deviceValueDialogOpen) {
selectedDevice ? void sendDeviceData(selectedDevice) : void sendCoreData();
}
}, 3000);
const deviceValueDialogSave = async (devicevalue: DeviceValue) => {
const id = Number(device_select.state.id);
await sendDeviceValue({ id, c: devicevalue.c ?? '', v: devicevalue.v })
.then(() => {
toast.success(LL.WRITE_CMD_SENT());
})
.catch((error: Error) => {
toast.error(error.message);
})
.finally(async () => {
setDeviceValueDialogOpen(false);
await sendDeviceData(id);
setSelectedDeviceValue(undefined);
});
};
const renderDeviceDetails = () => {
if (showDeviceInfo) {
const deviceIndex = coreData.devices.findIndex(
(d) => d.id === device_select.state.id
);
if (deviceIndex === -1) {
return;
}
return (
<Dialog
sx={dialogStyle}
open={showDeviceInfo}
onClose={() => setShowDeviceInfo(false)}
>
<DialogTitle>{LL.DEVICE_DETAILS()}</DialogTitle>
<DialogContent dividers>
<List dense={true}>
<ListItem>
<ListItemText
primary={LL.TYPE(0)}
secondary={coreData.devices[deviceIndex].tn}
/>
</ListItem>
<ListItem>
<ListItemText
primary={LL.NAME(0)}
secondary={coreData.devices[deviceIndex].n}
/>
</ListItem>
{coreData.devices[deviceIndex].t !== DeviceType.CUSTOM && (
<>
<ListItem>
<ListItemText
primary={LL.BRAND()}
secondary={coreData.devices[deviceIndex].b}
/>
</ListItem>
<ListItem>
<ListItemText
primary={LL.ID_OF(LL.DEVICE())}
secondary={
'0x' +
(
'00' +
coreData.devices[deviceIndex].d.toString(16).toUpperCase()
).slice(-2)
}
/>
</ListItem>
<ListItem>
<ListItemText
primary={LL.ID_OF(LL.PRODUCT())}
secondary={coreData.devices[deviceIndex].p}
/>
</ListItem>
<ListItem>
<ListItemText
primary={LL.VERSION()}
secondary={coreData.devices[deviceIndex].v}
/>
</ListItem>
</>
)}
</List>
</DialogContent>
<DialogActions>
<Button
variant="outlined"
onClick={() => setShowDeviceInfo(false)}
color="secondary"
>
{LL.CLOSE()}
</Button>
</DialogActions>
</Dialog>
);
}
};
const renderCoreData = () => (
<>
<IconContext.Provider
value={{
color: 'lightblue',
size: '18',
style: { verticalAlign: 'middle' }
}}
>
{!coreData.connected && (
<MessageBox my={2} level="error" message={LL.EMS_BUS_WARNING()} />
)}
{coreData.connected && (
<Table
data={{ nodes: coreData.devices }}
select={device_select}
theme={device_theme}
layout={{ custom: true }}
>
{(tableList: Device[]) => (
<>
<Header>
<HeaderRow>
<HeaderCell resize>{LL.DESCRIPTION()}</HeaderCell>
<HeaderCell stiff>{LL.TYPE(0)}</HeaderCell>
</HeaderRow>
</Header>
<Body>
{tableList.length === 0 && (
<CircularProgress sx={{ margin: 1 }} size={18} />
)}
{tableList.map((device: Device) => (
<Row key={device.id} item={device}>
<Cell>
<DeviceIcon type_id={device.t} />
&nbsp;&nbsp;
{device.n}
<span style={{ color: 'lightblue' }}>
&nbsp;&nbsp;({device.e})
</span>
</Cell>
<Cell stiff>{device.tn}</Cell>
</Row>
))}
</Body>
</>
)}
</Table>
)}
</IconContext.Provider>
</>
);
const deviceValueDialogClose = () => {
setDeviceValueDialogOpen(false);
void sendDeviceData(selectedDevice);
};
const renderDeviceData = () => {
if (!selectedDevice) {
return;
}
const showDeviceValue = (dv: DeviceValue) => {
setSelectedDeviceValue(dv);
setDeviceValueDialogOpen(true);
};
const renderNameCell = (dv: DeviceValue) => (
<>
{dv.id.slice(2)}&nbsp;
{hasMask(dv.id, DeviceEntityMask.DV_FAVORITE) && (
<StarIcon color="primary" sx={{ fontSize: 12 }} />
)}
{hasMask(dv.id, DeviceEntityMask.DV_READONLY) && (
<EditOffOutlinedIcon color="primary" sx={{ fontSize: 12 }} />
)}
{hasMask(dv.id, DeviceEntityMask.DV_API_MQTT_EXCLUDE) && (
<CommentsDisabledOutlinedIcon color="primary" sx={{ fontSize: 12 }} />
)}
</>
);
const shown_data = onlyFav
? deviceData.nodes.filter((dv) => hasMask(dv.id, DeviceEntityMask.DV_FAVORITE))
: deviceData.nodes;
const deviceIndex = coreData.devices.findIndex(
(d) => d.id === device_select.state.id
);
if (deviceIndex === -1) {
return;
}
return (
<Box
sx={{
backgroundColor: 'black',
position: 'absolute',
left: () => leftOffset(),
right: 0,
bottom: 0,
top: 64,
zIndex: 'modal',
maxHeight: () => size[1] - 126,
border: '1px solid #177ac9'
}}
>
<Box sx={{ border: '1px solid #177ac9' }}>
<Typography noWrap variant="subtitle1" color="warning.main" sx={{ ml: 1 }}>
{coreData.devices[deviceIndex].n}&nbsp;(
{coreData.devices[deviceIndex].tn})
</Typography>
<Grid container justifyContent="space-between">
<Typography sx={{ ml: 1 }} variant="subtitle2" color="grey">
{LL.SHOWING() +
' ' +
shown_data.length +
'/' +
coreData.devices[deviceIndex].e +
' ' +
LL.ENTITIES(shown_data.length)}
<ButtonTooltip title="Info">
<IconButton onClick={() => setShowDeviceInfo(true)}>
<InfoOutlinedIcon color="primary" sx={{ fontSize: 18 }} />
</IconButton>
</ButtonTooltip>
{me.admin && (
<ButtonTooltip title={LL.CUSTOMIZATIONS()}>
<IconButton onClick={customize}>
<FormatListNumberedIcon color="primary" sx={{ fontSize: 18 }} />
</IconButton>
</ButtonTooltip>
)}
<ButtonTooltip title={LL.EXPORT()}>
<IconButton onClick={handleDownloadCsv}>
<DownloadIcon color="primary" sx={{ fontSize: 18 }} />
</IconButton>
</ButtonTooltip>
<ButtonTooltip title={LL.FAVORITES()}>
<IconButton onClick={() => setOnlyFav(!onlyFav)}>
{onlyFav ? (
<StarIcon color="primary" sx={{ fontSize: 18 }} />
) : (
<StarBorderOutlinedIcon color="primary" sx={{ fontSize: 18 }} />
)}
</IconButton>
</ButtonTooltip>
</Typography>
<Grid justifyContent="flex-end">
<ButtonTooltip title={LL.CANCEL()}>
<IconButton onClick={resetDeviceSelect}>
<HighlightOffIcon color="primary" sx={{ fontSize: 18 }} />
</IconButton>
</ButtonTooltip>
</Grid>
</Grid>
</Box>
<Table
data={{ nodes: shown_data }}
theme={data_theme}
sort={dv_sort}
layout={{ custom: true, fixedHeader: true }}
>
{(tableList: DeviceValue[]) => (
<>
<Header>
<HeaderRow>
<HeaderCell resize>
<Button
fullWidth
style={{ fontSize: '14px', justifyContent: 'flex-start' }}
endIcon={getSortIcon(dv_sort.state, 'NAME')}
onClick={() => dv_sort.fns.onToggleSort({ sortKey: 'NAME' })}
>
{LL.ENTITY_NAME(0)}
</Button>
</HeaderCell>
<HeaderCell resize>
<Button
fullWidth
style={{ fontSize: '14px', justifyContent: 'flex-end' }}
endIcon={getSortIcon(dv_sort.state, 'VALUE')}
onClick={() => dv_sort.fns.onToggleSort({ sortKey: 'VALUE' })}
>
{LL.VALUE(0)}
</Button>
</HeaderCell>
<HeaderCell stiff />
</HeaderRow>
</Header>
<Body>
{tableList.map((dv: DeviceValue) => (
<Row key={dv.id} item={dv} onClick={() => showDeviceValue(dv)}>
<Cell>{renderNameCell(dv)}</Cell>
<Cell>{formatValue(LL, dv.v, dv.u)}</Cell>
<Cell stiff>
{me.admin &&
dv.c &&
!hasMask(dv.id, DeviceEntityMask.DV_READONLY) && (
<IconButton
size="small"
onClick={() => showDeviceValue(dv)}
>
{dv.v === '' ? (
<PlayArrowIcon color="primary" sx={{ fontSize: 16 }} />
) : (
<EditIcon color="primary" sx={{ fontSize: 16 }} />
)}
</IconButton>
)}
</Cell>
</Row>
))}
</Body>
</>
)}
</Table>
</Box>
);
};
return (
<SectionContent id="devices-window">
{renderCoreData()}
{renderDeviceData()}
{renderDeviceDetails()}
{selectedDeviceValue && (
<DevicesDialog
open={deviceValueDialogOpen}
onClose={deviceValueDialogClose}
onSave={deviceValueDialogSave}
selectedItem={selectedDeviceValue}
writeable={
selectedDeviceValue.c !== undefined &&
!hasMask(selectedDeviceValue.id, DeviceEntityMask.DV_READONLY)
}
validator={deviceValueItemValidation(selectedDeviceValue)}
progress={submitting}
/>
)}
</SectionContent>
);
};
export default Devices;

View File

@@ -0,0 +1,229 @@
import { useEffect, useState } from 'react';
import CancelIcon from '@mui/icons-material/Cancel';
import WarningIcon from '@mui/icons-material/Warning';
import {
Box,
Button,
CircularProgress,
Dialog,
DialogActions,
DialogContent,
DialogTitle,
FormHelperText,
InputAdornment,
MenuItem,
TextField,
Typography
} from '@mui/material';
import Grid from '@mui/material/Grid2';
import { dialogStyle } from 'CustomTheme';
import type Schema from 'async-validator';
import type { ValidateFieldsError } from 'async-validator';
import { ValidatedTextField } from 'components';
import { useI18nContext } from 'i18n/i18n-react';
import { numberValue, updateValue } from 'utils';
import { validate } from 'validators';
import { DeviceValueUOM, DeviceValueUOM_s } from './types';
import type { DeviceValue } from './types';
interface DevicesDialogProps {
open: boolean;
onClose: () => void;
onSave: (as: DeviceValue) => void;
selectedItem: DeviceValue;
writeable: boolean;
validator: Schema;
progress: boolean;
}
const DevicesDialog = ({
open,
onClose,
onSave,
selectedItem,
writeable,
validator,
progress
}: DevicesDialogProps) => {
const { LL } = useI18nContext();
const [editItem, setEditItem] = useState<DeviceValue>(selectedItem);
const [fieldErrors, setFieldErrors] = useState<ValidateFieldsError>();
const updateFormValue = updateValue(setEditItem);
useEffect(() => {
if (open) {
setFieldErrors(undefined);
setEditItem(selectedItem);
}
}, [open, selectedItem]);
const close = () => {
onClose();
};
const save = async () => {
try {
setFieldErrors(undefined);
await validate(validator, editItem);
onSave(editItem);
} catch (error) {
setFieldErrors(error as ValidateFieldsError);
}
};
const setUom = (uom?: DeviceValueUOM) => {
if (uom === undefined) {
return;
}
switch (uom) {
case DeviceValueUOM.HOURS:
return LL.HOURS();
case DeviceValueUOM.MINUTES:
return LL.MINUTES();
case DeviceValueUOM.SECONDS:
return LL.SECONDS();
default:
return DeviceValueUOM_s[uom];
}
};
const showHelperText = (dv: DeviceValue) =>
dv.h ? (
dv.h
) : dv.l ? (
dv.l.join(' | ')
) : dv.m !== undefined && dv.x !== undefined ? (
<>
{dv.m}&nbsp;&rarr;&nbsp;{dv.x}
</>
) : undefined;
return (
<Dialog sx={dialogStyle} open={open} onClose={close}>
<DialogTitle>
{selectedItem.v === '' && selectedItem.c
? LL.RUN_COMMAND()
: writeable
? LL.CHANGE_VALUE()
: LL.VALUE(0)}
</DialogTitle>
<DialogContent dividers>
<Box color="warning.main" p={0} pl={0} pr={0} mt={0} mb={2}>
<Typography variant="body2">{editItem.id.slice(2)}</Typography>
</Box>
<Grid container>
<Grid size={12}>
{editItem.l ? (
<TextField
name="v"
label={LL.VALUE(0)}
value={editItem.v}
disabled={!writeable}
sx={{ width: '30ch' }}
select
onChange={updateFormValue}
>
{editItem.l.map((val) => (
<MenuItem value={val} key={val}>
{val}
</MenuItem>
))}
</TextField>
) : editItem.s || editItem.u !== DeviceValueUOM.NONE ? (
<ValidatedTextField
fieldErrors={fieldErrors}
name="v"
label={LL.VALUE(0)}
value={numberValue(Math.round((editItem.v as number) * 10) / 10)}
autoFocus
disabled={!writeable}
type="number"
sx={{ width: '30ch' }}
onChange={updateFormValue}
slotProps={{
htmlInput: editItem.s
? { min: editItem.m, max: editItem.x, step: editItem.s }
: {},
input: {
startAdornment: (
<InputAdornment position="start">
{setUom(editItem.u)}
</InputAdornment>
)
}
}}
/>
) : (
<ValidatedTextField
fieldErrors={fieldErrors}
name="v"
label={LL.VALUE(0)}
value={editItem.v}
disabled={!writeable}
sx={{ width: '30ch' }}
multiline={!editItem.u}
onChange={updateFormValue}
/>
)}
</Grid>
{writeable && (
<Grid>
<FormHelperText>{showHelperText(editItem)}</FormHelperText>
</Grid>
)}
</Grid>
</DialogContent>
<DialogActions>
{writeable ? (
<Box
sx={{
'& button, & a, & .MuiCard-root': {
mx: 0.6
},
position: 'relative'
}}
>
<Button
startIcon={<CancelIcon />}
variant="outlined"
onClick={close}
color="secondary"
>
{LL.CANCEL()}
</Button>
<Button
startIcon={<WarningIcon color="warning" />}
variant="outlined"
onClick={save}
color="primary"
>
{selectedItem.v === '' && selectedItem.c ? LL.EXECUTE() : LL.UPDATE()}
</Button>
{progress && (
<CircularProgress
size={24}
sx={{
color: '#4caf50',
position: 'absolute',
right: '20%',
marginTop: '6px'
}}
/>
)}
</Box>
) : (
<Button variant="outlined" onClick={close} color="secondary">
{LL.CLOSE()}
</Button>
)}
</DialogActions>
</Dialog>
);
};
export default DevicesDialog;

View File

@@ -0,0 +1,103 @@
import { ToggleButton, ToggleButtonGroup } from '@mui/material';
import OptionIcon from './OptionIcon';
import { DeviceEntityMask } from './types';
import type { DeviceEntity } from './types';
interface EntityMaskToggleProps {
onUpdate: (de: DeviceEntity) => void;
de: DeviceEntity;
}
const EntityMaskToggle = ({ onUpdate, de }: EntityMaskToggleProps) => {
const getMaskNumber = (newMask: string[]) => {
let new_mask = 0;
for (const entry of newMask) {
new_mask |= Number(entry);
}
return new_mask;
};
const getMaskString = (m: number) => {
const new_masks: string[] = [];
if ((m & 1) === 1) {
new_masks.push('1');
}
if ((m & 2) === 2) {
new_masks.push('2');
}
if ((m & 4) === 4) {
new_masks.push('4');
}
if ((m & 8) === 8) {
new_masks.push('8');
}
if ((m & 128) === 128) {
new_masks.push('128');
}
return new_masks;
};
return (
<ToggleButtonGroup
size="small"
color="secondary"
value={getMaskString(de.m)}
onChange={(event, mask: string[]) => {
de.m = getMaskNumber(mask);
if (de.n === '' && de.m & DeviceEntityMask.DV_READONLY) {
de.m = de.m | DeviceEntityMask.DV_WEB_EXCLUDE;
}
if (de.m & DeviceEntityMask.DV_WEB_EXCLUDE) {
de.m = de.m & ~DeviceEntityMask.DV_FAVORITE;
}
onUpdate(de);
}}
>
<ToggleButton value="8" disabled={(de.m & 0x81) !== 0 || de.n === undefined}>
<OptionIcon
type="favorite"
isSet={
(de.m & DeviceEntityMask.DV_FAVORITE) === DeviceEntityMask.DV_FAVORITE
}
/>
</ToggleButton>
<ToggleButton value="4" disabled={!de.w || (de.m & 0x83) >= 3}>
<OptionIcon
type="readonly"
isSet={
(de.m & DeviceEntityMask.DV_READONLY) === DeviceEntityMask.DV_READONLY
}
/>
</ToggleButton>
<ToggleButton value="2" disabled={de.n === '' || (de.m & 0x80) !== 0}>
<OptionIcon
type="api_mqtt_exclude"
isSet={
(de.m & DeviceEntityMask.DV_API_MQTT_EXCLUDE) ===
DeviceEntityMask.DV_API_MQTT_EXCLUDE
}
/>
</ToggleButton>
<ToggleButton value="1" disabled={de.n === undefined || (de.m & 0x80) !== 0}>
<OptionIcon
type="web_exclude"
isSet={
(de.m & DeviceEntityMask.DV_WEB_EXCLUDE) ===
DeviceEntityMask.DV_WEB_EXCLUDE
}
/>
</ToggleButton>
<ToggleButton value="128">
<OptionIcon
type="deleted"
isSet={
(de.m & DeviceEntityMask.DV_DELETED) === DeviceEntityMask.DV_DELETED
}
/>
</ToggleButton>
</ToggleButtonGroup>
);
};
export default EntityMaskToggle;

View File

@@ -0,0 +1,191 @@
import { useContext, useState } from 'react';
import { toast } from 'react-toastify';
import CommentIcon from '@mui/icons-material/CommentTwoTone';
import DownloadIcon from '@mui/icons-material/GetApp';
import GitHubIcon from '@mui/icons-material/GitHub';
import MenuBookIcon from '@mui/icons-material/MenuBookTwoTone';
import {
Avatar,
Box,
Button,
Divider,
Link,
List,
ListItem,
ListItemAvatar,
ListItemButton,
ListItemText,
Stack,
Typography
} from '@mui/material';
import { useRequest } from 'alova/client';
import { SectionContent, useLayoutTitle } from 'components';
import { AuthenticatedContext } from 'contexts/authentication';
import { useI18nContext } from 'i18n/i18n-react';
import { saveFile } from 'utils';
import { API, callAction } from '../../api/app';
import type { APIcall } from './types';
const Help = () => {
const { LL } = useI18nContext();
useLayoutTitle(LL.HELP());
const { me } = useContext(AuthenticatedContext);
const [customSupportIMG, setCustomSupportIMG] = useState<string | null>(null);
const [customSupportHTML, setCustomSupportHTML] = useState<string | null>(null);
const [notFound, setNotFound] = useState<boolean>(false);
useRequest(() => callAction({ action: 'customSupport' })).onSuccess((event) => {
if (event && event.data && Object.keys(event.data).length !== 0) {
const data = event.data.Support;
if (data.img_url) {
setCustomSupportIMG(data.img_url);
}
if (data.html) {
setCustomSupportHTML(data.html.join('<br/>'));
}
}
});
// const { send: sendExportAllValues } = useRequest(
// () => callAction({ action: 'export', param: 'allvalues' }),
// {
// immediate: false
// }
// )
// .onSuccess((event) => {
// saveFile(event.data, 'allvalues', '.txt');
// toast.info(LL.DOWNLOAD_SUCCESSFUL());
// })
// .onError((error) => {
// toast.error(error.message);
// });
const { send: sendAPI } = useRequest((data: APIcall) => API(data), {
immediate: false
})
.onSuccess((event) => {
saveFile(event.data, 'system_info', '.json');
toast.info(LL.DOWNLOAD_SUCCESSFUL());
})
.onError((error) => {
toast.error(error.message);
});
return (
<SectionContent>
<Stack
padding={1}
mb={2}
direction="row"
divider={<Divider orientation="vertical" flexItem />}
sx={{
borderRadius: 3,
border: '2px solid grey',
justifyContent: 'space-evenly',
alignItems: 'center'
}}
>
<Typography variant="subtitle1">
{customSupportHTML ? (
<div dangerouslySetInnerHTML={{ __html: customSupportHTML }} />
) : (
LL.HELP_INFORMATION_5()
)}
</Typography>
<Box
component="img"
referrerPolicy="no-referrer"
sx={{
maxHeight: { xs: 100, md: 250 }
}}
onError={() => setNotFound(true)}
src={
notFound
? ''
: customSupportIMG || 'https://emsesp.org/_media/images/installer.jpeg'
}
/>
</Stack>
{me.admin && (
<List sx={{ borderRadius: 3, border: '2px solid grey' }}>
<ListItem>
<ListItemButton component="a" href="https://emsesp.org">
<ListItemAvatar>
<Avatar sx={{ bgcolor: '#72caf9' }}>
<MenuBookIcon />
</Avatar>
</ListItemAvatar>
<ListItemText primary={LL.HELP_INFORMATION_1()} />
</ListItemButton>
</ListItem>
<ListItem>
<ListItemButton component="a" href="https://discord.gg/3J3GgnzpyT">
<ListItemAvatar>
<Avatar sx={{ bgcolor: '#72caf9' }}>
<CommentIcon />
</Avatar>
</ListItemAvatar>
<ListItemText primary={LL.HELP_INFORMATION_2()} />
</ListItemButton>
</ListItem>
<ListItem>
<ListItemButton
component="a"
href="https://github.com/emsesp/EMS-ESP32/issues/new/choose"
>
<ListItemAvatar>
<Avatar sx={{ bgcolor: '#72caf9' }}>
<GitHubIcon />
</Avatar>
</ListItemAvatar>
<ListItemText primary={LL.HELP_INFORMATION_3()} />
</ListItemButton>
</ListItem>
</List>
)}
<Box p={2} color="warning.main">
<Typography mb={1} variant="body1">
{LL.HELP_INFORMATION_4()}.
</Typography>
<Button
startIcon={<DownloadIcon />}
variant="outlined"
color="primary"
onClick={() => sendAPI({ device: 'system', cmd: 'info', id: 0 })}
>
{LL.SUPPORT_INFORMATION(0)}
</Button>
</Box>
{/* <Button
sx={{ ml: 2 }}
startIcon={<DownloadIcon />}
variant="outlined"
color="primary"
onClick={() => sendExportAllValues()}
>
{LL.DOWNLOAD(1)}&nbsp;{LL.ALLVALUES()}
</Button> */}
<Divider sx={{ mt: 4 }} />
<Typography color="white" variant="subtitle1" align="center" mt={1}>
&copy;&nbsp;
<Link target="_blank" href="https://emsesp.org" color="primary">
{'emsesp.org'}
</Link>
</Typography>
</SectionContent>
);
};
export default Help;

View File

@@ -0,0 +1,269 @@
import { useCallback, useState } from 'react';
import { useBlocker } from 'react-router-dom';
import { toast } from 'react-toastify';
import CancelIcon from '@mui/icons-material/Cancel';
import CircleIcon from '@mui/icons-material/Circle';
import WarningIcon from '@mui/icons-material/Warning';
import { Box, Button, Typography } from '@mui/material';
import {
Body,
Cell,
Header,
HeaderCell,
HeaderRow,
Row,
Table
} from '@table-library/react-table-library/table';
import { useTheme } from '@table-library/react-table-library/theme';
import { updateState, useRequest } from 'alova/client';
import {
BlockNavigation,
ButtonRow,
FormLoader,
SectionContent,
useLayoutTitle
} from 'components';
import { useI18nContext } from 'i18n/i18n-react';
import { readModules, writeModules } from '../../api/app';
import ModulesDialog from './ModulesDialog';
import type { ModuleItem } from './types';
const Modules = () => {
const { LL } = useI18nContext();
const [numChanges, setNumChanges] = useState<number>(0);
const blocker = useBlocker(numChanges !== 0);
const [selectedModuleItem, setSelectedModuleItem] = useState<ModuleItem>();
const [dialogOpen, setDialogOpen] = useState<boolean>(false);
useLayoutTitle(LL.MODULES());
const {
data: modules,
send: fetchModules,
error
} = useRequest(readModules, {
initialData: []
});
const { send: updateModules } = useRequest(
(data: { key: string; enabled: boolean; license: string }) => writeModules(data),
{
immediate: false
}
);
const modules_theme = useTheme({
Table: `
--data-table-library_grid-template-columns: 48px 180px 120px 100px repeat(1, minmax(160px, 1fr)) 180px;
`,
BaseRow: `
font-size: 14px;
.td {
height: 32px;
}
`,
BaseCell: `
&:nth-of-type(1) {
text-align: center;
}
`,
HeaderRow: `
text-transform: uppercase;
background-color: black;
color: #90CAF9;
.th {
border-bottom: 1px solid #565656;
height: 36px;
}
`,
Row: `
background-color: #1e1e1e;
position: relative;
cursor: pointer;
.td {
border-top: 1px solid #565656;
border-bottom: 1px solid #565656;
}
&:hover .td {
border-top: 1px solid #177ac9;
border-bottom: 1px solid #177ac9;
}
&:nth-of-type(odd) .td {
background-color: #303030;
}
`
});
const onDialogClose = () => {
setDialogOpen(false);
};
const onDialogSave = (updatedItem: ModuleItem) => {
setDialogOpen(false);
updateModuleItem(updatedItem);
};
const editModuleItem = useCallback((mi: ModuleItem) => {
setSelectedModuleItem(mi);
setDialogOpen(true);
}, []);
const onCancel = async () => {
await fetchModules().then(() => {
setNumChanges(0);
});
};
function hasModulesChanged(mi: ModuleItem) {
return mi.enabled !== mi.o_enabled || mi.license !== mi.o_license;
}
const updateModuleItem = (updatedItem: ModuleItem) => {
void updateState(readModules(), (data: ModuleItem[]) => {
const new_data = data.map((mi) =>
mi.id === updatedItem.id ? { ...mi, ...updatedItem } : mi
);
setNumChanges(new_data.filter((mi) => hasModulesChanged(mi)).length);
return new_data;
});
};
const saveModules = async () => {
await updateModules({
modules: modules.map((condensed_mi) => ({
key: condensed_mi.key,
enabled: condensed_mi.enabled,
license: condensed_mi.license
}))
})
.then(() => {
toast.success(LL.MODULES_UPDATED());
})
.catch((error: Error) => {
toast.error(error.message);
})
.finally(async () => {
await fetchModules();
setNumChanges(0);
});
};
const renderContent = () => {
if (!modules) {
return <FormLoader onRetry={fetchModules} errorMessage={error?.message} />;
}
if (modules.length === 0) {
return (
<Typography variant="body2" color="error">
{LL.MODULES_NONE()}
</Typography>
);
}
const colorStatus = (status: number) => {
if (status === 1) {
return <div style={{ color: 'red' }}>Pending Activation</div>;
}
return <div style={{ color: '#00FF7F' }}>Activated</div>;
};
return (
<>
<Box mb={2} color="warning.main">
<Typography variant="body1">{LL.MODULES_DESCRIPTION()}.</Typography>
</Box>
<Table
data={{ nodes: modules }}
theme={modules_theme}
layout={{ custom: true }}
>
{(tableList: ModuleItem[]) => (
<>
<Header>
<HeaderRow>
<HeaderCell />
<HeaderCell>{LL.NAME(0)}</HeaderCell>
<HeaderCell>Author</HeaderCell>
<HeaderCell>{LL.VERSION()}</HeaderCell>
<HeaderCell>Message</HeaderCell>
<HeaderCell>{LL.STATUS_OF('')}</HeaderCell>
</HeaderRow>
</Header>
<Body>
{tableList.map((mi: ModuleItem) => (
<Row key={mi.id} item={mi} onClick={() => editModuleItem(mi)}>
<Cell stiff>
{mi.enabled ? (
<CircleIcon
color="success"
sx={{ fontSize: 16, verticalAlign: 'middle' }}
/>
) : (
<CircleIcon
color="error"
sx={{ fontSize: 16, verticalAlign: 'middle' }}
/>
)}
</Cell>
<Cell>{mi.name}</Cell>
<Cell>{mi.author}</Cell>
<Cell>{mi.version}</Cell>
<Cell>{mi.message}</Cell>
<Cell>{colorStatus(mi.status)}</Cell>
</Row>
))}
</Body>
</>
)}
</Table>
<Box mt={1} display="flex" flexWrap="wrap">
<Box flexGrow={1}>
{numChanges !== 0 && (
<ButtonRow>
<Button
startIcon={<CancelIcon />}
variant="outlined"
onClick={onCancel}
color="secondary"
>
{LL.CANCEL()}
</Button>
<Button
startIcon={<WarningIcon color="warning" />}
variant="contained"
color="info"
onClick={saveModules}
>
{LL.APPLY_CHANGES(numChanges)}
</Button>
</ButtonRow>
)}
</Box>
</Box>
</>
);
};
return (
<SectionContent>
{blocker ? <BlockNavigation blocker={blocker} /> : null}
{renderContent()}
{selectedModuleItem && (
<ModulesDialog
open={dialogOpen}
onClose={onDialogClose}
onSave={onDialogSave}
selectedItem={selectedModuleItem}
/>
)}
</SectionContent>
);
};
export default Modules;

View File

@@ -0,0 +1,106 @@
import { useEffect, useState } from 'react';
import CancelIcon from '@mui/icons-material/Cancel';
import DoneIcon from '@mui/icons-material/Done';
import {
Box,
Button,
Checkbox,
Dialog,
DialogActions,
DialogContent,
DialogTitle,
TextField
} from '@mui/material';
import Grid from '@mui/material/Grid2';
import { dialogStyle } from 'CustomTheme';
import { BlockFormControlLabel } from 'components';
import { useI18nContext } from 'i18n/i18n-react';
import { updateValue } from 'utils';
import type { ModuleItem } from './types';
interface ModulesDialogProps {
open: boolean;
onClose: () => void;
onSave: (mi: ModuleItem) => void;
selectedItem: ModuleItem;
}
const ModulesDialog = ({
open,
onClose,
onSave,
selectedItem
}: ModulesDialogProps) => {
const { LL } = useI18nContext();
const [editItem, setEditItem] = useState<ModuleItem>(selectedItem);
const updateFormValue = updateValue(setEditItem);
useEffect(() => {
if (open) {
setEditItem(selectedItem);
}
}, [open, selectedItem]);
const close = () => {
onClose();
};
const save = () => {
onSave(editItem);
};
return (
<Dialog sx={dialogStyle} fullWidth maxWidth="xs" open={open} onClose={onClose}>
<DialogTitle>{LL.EDIT() + ' ' + editItem.key}</DialogTitle>
<DialogContent dividers>
<Grid container>
<BlockFormControlLabel
control={
<Checkbox
checked={editItem.enabled}
onChange={updateFormValue}
name="enabled"
/>
}
label="Enabled"
/>
</Grid>
<Box mt={2} mb={1}>
<TextField
name="license"
label="License Key"
multiline
rows={6}
fullWidth
value={editItem.license}
onChange={updateFormValue}
/>
</Box>
</DialogContent>
<DialogActions>
<Button
startIcon={<CancelIcon />}
variant="outlined"
onClick={close}
color="secondary"
>
{LL.CANCEL()}
</Button>
<Button
startIcon={<DoneIcon />}
variant="outlined"
onClick={save}
color="primary"
>
{LL.UPDATE()}
</Button>
</DialogActions>
</Dialog>
);
};
export default ModulesDialog;

View File

@@ -1,38 +1,41 @@
import { FC } from 'react';
import { SvgIconProps } from '@mui/material';
import EditOutlinedIcon from '@mui/icons-material/EditOutlined';
import CommentsDisabledOutlinedIcon from '@mui/icons-material/CommentsDisabledOutlined';
import DeleteForeverIcon from '@mui/icons-material/DeleteForever';
import DeleteOutlineIcon from '@mui/icons-material/DeleteOutline';
import EditOffOutlinedIcon from '@mui/icons-material/EditOffOutlined';
import EditOutlinedIcon from '@mui/icons-material/EditOutlined';
import InsertCommentOutlinedIcon from '@mui/icons-material/InsertCommentOutlined';
import StarIcon from '@mui/icons-material/Star';
import StarOutlineIcon from '@mui/icons-material/StarOutline';
import VisibilityOffOutlinedIcon from '@mui/icons-material/VisibilityOffOutlined';
import VisibilityOutlinedIcon from '@mui/icons-material/VisibilityOutlined';
import type { SvgIconProps } from '@mui/material';
import CommentsDisabledOutlinedIcon from '@mui/icons-material/CommentsDisabledOutlined';
import InsertCommentOutlinedIcon from '@mui/icons-material/InsertCommentOutlined';
type OptionType =
| 'deleted'
| 'readonly'
| 'web_exclude'
| 'api_mqtt_exclude'
| 'favorite';
type OptionType = 'readonly' | 'web_exclude' | 'api_mqtt_exclude' | 'favorite';
const OPTION_ICONS: { [type in OptionType]: [React.ComponentType<SvgIconProps>, React.ComponentType<SvgIconProps>] } = {
const OPTION_ICONS: {
[type in OptionType]: [
React.ComponentType<SvgIconProps>,
React.ComponentType<SvgIconProps>
];
} = {
deleted: [DeleteForeverIcon, DeleteOutlineIcon],
readonly: [EditOffOutlinedIcon, EditOutlinedIcon],
web_exclude: [VisibilityOffOutlinedIcon, VisibilityOutlinedIcon],
api_mqtt_exclude: [CommentsDisabledOutlinedIcon, InsertCommentOutlinedIcon],
favorite: [StarIcon, StarOutlineIcon]
};
interface OptionIconProps {
type: OptionType;
isSet: boolean;
}
const OptionIcon: FC<OptionIconProps> = ({ type, isSet }) => {
const OptionIcon = ({ type, isSet }: { type: OptionType; isSet: boolean }) => {
const Icon = OPTION_ICONS[type][isSet ? 0 : 1];
return isSet ? (
<Icon color="primary" sx={{ fontSize: 14, verticalAlign: 'middle' }} />
<Icon color="primary" sx={{ fontSize: 16, verticalAlign: 'middle' }} />
) : (
<Icon sx={{ fontSize: 14, verticalAlign: 'middle' }} />
<Icon sx={{ fontSize: 16, verticalAlign: 'middle' }} />
);
};

View File

@@ -0,0 +1,372 @@
import { useCallback, useEffect, useState } from 'react';
import { useBlocker } from 'react-router-dom';
import { toast } from 'react-toastify';
import AddIcon from '@mui/icons-material/Add';
import CancelIcon from '@mui/icons-material/Cancel';
import CircleIcon from '@mui/icons-material/Circle';
import WarningIcon from '@mui/icons-material/Warning';
import { Box, Button, Divider, Stack, Typography } from '@mui/material';
import {
Body,
Cell,
Header,
HeaderCell,
HeaderRow,
Row,
Table
} from '@table-library/react-table-library/table';
import { useTheme } from '@table-library/react-table-library/theme';
import { updateState, useRequest } from 'alova/client';
import {
BlockNavigation,
ButtonRow,
FormLoader,
SectionContent,
useLayoutTitle
} from 'components';
import { useI18nContext } from 'i18n/i18n-react';
import { readSchedule, writeSchedule } from '../../api/app';
import SettingsSchedulerDialog from './SchedulerDialog';
import { ScheduleFlag } from './types';
import type { Schedule, ScheduleItem } from './types';
import { schedulerItemValidation } from './validators';
const Scheduler = () => {
const { LL, locale } = useI18nContext();
const [numChanges, setNumChanges] = useState<number>(0);
const blocker = useBlocker(numChanges !== 0);
const [selectedScheduleItem, setSelectedScheduleItem] = useState<ScheduleItem>();
const [dow, setDow] = useState<string[]>([]);
const [creating, setCreating] = useState<boolean>(false);
const [dialogOpen, setDialogOpen] = useState<boolean>(false);
useLayoutTitle(LL.SCHEDULER());
const {
data: schedule,
send: fetchSchedule,
error
} = useRequest(readSchedule, {
initialData: []
});
const { send: updateSchedule } = useRequest(
(data: Schedule) => writeSchedule(data),
{
immediate: false
}
);
function hasScheduleChanged(si: ScheduleItem) {
return (
si.id !== si.o_id ||
(si.name || '') !== (si.o_name || '') ||
si.active !== si.o_active ||
si.deleted !== si.o_deleted ||
si.flags !== si.o_flags ||
si.time !== si.o_time ||
si.cmd !== si.o_cmd ||
si.value !== si.o_value
);
}
useEffect(() => {
const formatter = new Intl.DateTimeFormat(locale, {
weekday: 'short',
timeZone: 'UTC'
});
const days = [1, 2, 3, 4, 5, 6, 7].map((day) => {
const dd = day < 10 ? `0${day}` : day;
return new Date(`2017-01-${dd}T00:00:00+00:00`);
});
setDow(days.map((date) => formatter.format(date)));
}, [locale]);
const schedule_theme = useTheme({
Table: `
--data-table-library_grid-template-columns: 36px 210px 100px 192px repeat(1, minmax(100px, 1fr)) 160px;
`,
BaseRow: `
font-size: 14px;
.td {
height: 32px;
}
`,
BaseCell: `
&:nth-of-type(2) {
text-align: center;
}
&:nth-of-type(1) {
text-align: center;
}
`,
HeaderRow: `
text-transform: uppercase;
background-color: black;
color: #90CAF9;
.th {
border-bottom: 1px solid #565656;
height: 36px;
}
`,
Row: `
background-color: #1e1e1e;
position: relative;
cursor: pointer;
.td {
border-bottom: 1px solid #565656;
}
&:hover .td {
background-color: #177ac9;
}
`
});
const saveSchedule = async () => {
await updateSchedule({
schedule: schedule
.filter((si) => !si.deleted)
.map((condensed_si) => ({
id: condensed_si.id,
active: condensed_si.active,
flags: condensed_si.flags,
time: condensed_si.time,
cmd: condensed_si.cmd,
value: condensed_si.value,
name: condensed_si.name
}))
})
.then(() => {
toast.success(LL.SCHEDULE_UPDATED());
})
.catch((error: Error) => {
toast.error(error.message);
})
.finally(async () => {
await fetchSchedule();
setNumChanges(0);
});
};
const editScheduleItem = useCallback((si: ScheduleItem) => {
setCreating(false);
setSelectedScheduleItem(si);
setDialogOpen(true);
if (si.o_name === undefined) {
si.o_name = si.name;
}
}, []);
const onDialogClose = () => {
setDialogOpen(false);
};
const onDialogCancel = async () => {
await fetchSchedule().then(() => {
setNumChanges(0);
});
};
const onDialogSave = (updatedItem: ScheduleItem) => {
setDialogOpen(false);
void updateState(readSchedule(), (data: ScheduleItem[]) => {
const new_data = creating
? [
...data.filter((si) => creating || si.o_id !== updatedItem.o_id),
updatedItem
]
: data.map((si) =>
si.id === updatedItem.id ? { ...si, ...updatedItem } : si
);
setNumChanges(new_data.filter((si) => hasScheduleChanged(si)).length);
return new_data;
});
};
const addScheduleItem = () => {
setCreating(true);
setSelectedScheduleItem({
id: Math.floor(Math.random() * (Math.floor(200) - 100) + 100),
active: false,
deleted: false,
flags: ScheduleFlag.SCHEDULE_DAY,
time: '',
cmd: '',
value: '',
name: ''
});
setDialogOpen(true);
};
const renderSchedule = () => {
if (!schedule) {
return <FormLoader onRetry={fetchSchedule} errorMessage={error?.message} />;
}
const dayBox = (si: ScheduleItem, flag: number) => (
<>
<Box>
<Typography
sx={{ fontSize: 11 }}
color={(si.flags & flag) === flag ? 'primary' : 'grey'}
>
{dow[Math.log(flag) / Math.log(2)]}
</Typography>
</Box>
<Divider orientation="vertical" flexItem />
</>
);
const scheduleType = (si: ScheduleItem) => (
<Box>
<Typography sx={{ fontSize: 11 }} color="primary">
{si.flags === ScheduleFlag.SCHEDULE_IMMEDIATE ? (
<>Immediate</>
) : si.flags === ScheduleFlag.SCHEDULE_TIMER ? (
<>Timer</>
) : si.flags === ScheduleFlag.SCHEDULE_CONDITION ? (
<>Condition</>
) : si.flags === ScheduleFlag.SCHEDULE_ONCHANGE ? (
<>On Change</>
) : (
<></>
)}
</Typography>
</Box>
);
return (
<Table
data={{
nodes: schedule
.filter((si) => !si.deleted)
.sort((a, b) => a.flags - b.flags)
}}
theme={schedule_theme}
layout={{ custom: true }}
>
{(tableList: ScheduleItem[]) => (
<>
<Header>
<HeaderRow>
<HeaderCell />
<HeaderCell stiff>{LL.SCHEDULE(0)}</HeaderCell>
<HeaderCell stiff>{LL.TIME(0)}/Cond.</HeaderCell>
<HeaderCell stiff>{LL.COMMAND(0)}</HeaderCell>
<HeaderCell stiff>{LL.VALUE(0)}</HeaderCell>
<HeaderCell stiff>{LL.NAME(0)}</HeaderCell>
</HeaderRow>
</Header>
<Body>
{tableList.map((si: ScheduleItem) => (
<Row key={si.id} item={si} onClick={() => editScheduleItem(si)}>
<Cell stiff>
{si.active ? (
<CircleIcon
color="success"
sx={{ fontSize: 16, verticalAlign: 'middle' }}
/>
) : (
<CircleIcon
color="error"
sx={{ fontSize: 16, verticalAlign: 'middle' }}
/>
)}
</Cell>
<Cell stiff>
<Stack spacing={0.5} direction="row">
<Divider orientation="vertical" flexItem />
{si.flags > 127 ? (
scheduleType(si)
) : (
<>
{dayBox(si, ScheduleFlag.SCHEDULE_MON)}
{dayBox(si, ScheduleFlag.SCHEDULE_TUE)}
{dayBox(si, ScheduleFlag.SCHEDULE_WED)}
{dayBox(si, ScheduleFlag.SCHEDULE_THU)}
{dayBox(si, ScheduleFlag.SCHEDULE_FRI)}
{dayBox(si, ScheduleFlag.SCHEDULE_SAT)}
{dayBox(si, ScheduleFlag.SCHEDULE_SUN)}
</>
)}
</Stack>
</Cell>
<Cell>{si.time}</Cell>
<Cell>{si.cmd}</Cell>
<Cell>{si.value}</Cell>
<Cell>{si.name}</Cell>
</Row>
))}
</Body>
</>
)}
</Table>
);
};
return (
<SectionContent>
{blocker ? <BlockNavigation blocker={blocker} /> : null}
<Box mb={2} color="warning.main">
<Typography variant="body1">{LL.SCHEDULER_HELP_1()}.</Typography>
</Box>
{renderSchedule()}
{selectedScheduleItem && (
<SettingsSchedulerDialog
open={dialogOpen}
creating={creating}
onClose={onDialogClose}
onSave={onDialogSave}
selectedItem={selectedScheduleItem}
validator={schedulerItemValidation(schedule, selectedScheduleItem)}
dow={dow}
/>
)}
<Box mt={1} display="flex" flexWrap="wrap">
<Box flexGrow={1}>
{numChanges !== 0 && (
<ButtonRow>
<Button
startIcon={<CancelIcon />}
variant="outlined"
onClick={onDialogCancel}
color="secondary"
>
{LL.CANCEL()}
</Button>
<Button
startIcon={<WarningIcon color="warning" />}
variant="contained"
color="info"
onClick={saveSchedule}
>
{LL.APPLY_CHANGES(numChanges)}
</Button>
</ButtonRow>
)}
</Box>
<Box flexWrap="nowrap" whiteSpace="nowrap">
<ButtonRow>
<Button
startIcon={<AddIcon />}
variant="outlined"
color="primary"
onClick={addScheduleItem}
>
{LL.ADD(0)}
</Button>
</ButtonRow>
</Box>
</Box>
</SectionContent>
);
};
export default Scheduler;

View File

@@ -0,0 +1,401 @@
import { useEffect, useState } from 'react';
import AddIcon from '@mui/icons-material/Add';
import CancelIcon from '@mui/icons-material/Cancel';
import DoneIcon from '@mui/icons-material/Done';
import PlayArrowIcon from '@mui/icons-material/PlayArrow';
import RemoveIcon from '@mui/icons-material/RemoveCircleOutline';
import {
Box,
Button,
Checkbox,
Dialog,
DialogActions,
DialogContent,
DialogTitle,
TextField,
ToggleButton,
ToggleButtonGroup,
Typography
} from '@mui/material';
import Grid from '@mui/material/Grid2';
import { dialogStyle } from 'CustomTheme';
import type Schema from 'async-validator';
import type { ValidateFieldsError } from 'async-validator';
import { BlockFormControlLabel, ValidatedTextField } from 'components';
import { useI18nContext } from 'i18n/i18n-react';
import { updateValue } from 'utils';
import { validate } from 'validators';
import { ScheduleFlag } from './types';
import type { ScheduleItem } from './types';
interface SchedulerDialogProps {
open: boolean;
creating: boolean;
onClose: () => void;
onSave: (ei: ScheduleItem) => void;
selectedItem: ScheduleItem;
validator: Schema;
dow: string[];
}
const SchedulerDialog = ({
open,
creating,
onClose,
onSave,
selectedItem,
validator,
dow
}: SchedulerDialogProps) => {
const { LL } = useI18nContext();
const [editItem, setEditItem] = useState<ScheduleItem>(selectedItem);
const [fieldErrors, setFieldErrors] = useState<ValidateFieldsError>();
const [scheduleType, setScheduleType] = useState<ScheduleFlag>();
const updateFormValue = updateValue(setEditItem);
useEffect(() => {
if (open) {
setFieldErrors(undefined);
setEditItem(selectedItem);
// set the flags based on type when page is loaded...
// 0-127 is day schedule
// 128 is timer
// 129 is on change
// 130 is on condition
// 132 is immediate
setScheduleType(
selectedItem.flags < 128 ? ScheduleFlag.SCHEDULE_DAY : selectedItem.flags
);
}
}, [open, selectedItem]);
const save = async () => {
try {
setFieldErrors(undefined);
await validate(validator, editItem);
onSave(editItem);
} catch (error) {
setFieldErrors(error as ValidateFieldsError);
}
};
const saveandactivate = async () => {
editItem.active = true;
try {
setFieldErrors(undefined);
await validate(validator, editItem);
onSave(editItem);
} catch (error) {
setFieldErrors(error as ValidateFieldsError);
}
};
const remove = () => {
editItem.deleted = true;
onSave(editItem);
};
const getFlagDOWnumber = (newFlag: string[]) => {
let new_flag = 0;
for (const entry of newFlag) {
new_flag |= Number(entry);
}
return new_flag & 127;
};
const getFlagDOWstring = (f: number) => {
const new_flags: string[] = [];
if ((f & 129) === 1) {
new_flags.push('1');
}
if ((f & 130) === 2) {
new_flags.push('2');
}
if ((f & 4) === 4) {
new_flags.push('4');
}
if ((f & 8) === 8) {
new_flags.push('8');
}
if ((f & 16) === 16) {
new_flags.push('16');
}
if ((f & 32) === 32) {
new_flags.push('32');
}
if ((f & 64) === 64) {
new_flags.push('64');
}
return new_flags;
};
const showDOW = (si: ScheduleItem, flag: number) => (
<Typography
sx={{ fontSize: 10 }}
color={(si.flags & flag) === flag ? 'primary' : 'grey'}
>
{dow[Math.log(flag) / Math.log(2)]}
</Typography>
);
const handleClose = (_event, reason: 'backdropClick' | 'escapeKeyDown') => {
if (reason !== 'backdropClick') {
onClose();
}
};
return (
<Dialog sx={dialogStyle} open={open} onClose={handleClose}>
<DialogTitle>
{creating ? LL.ADD(1) + ' ' + LL.NEW(0) : LL.EDIT()}&nbsp;
{LL.SCHEDULE(1)}
</DialogTitle>
<DialogContent dividers>
<ToggleButtonGroup
size="small"
color="secondary"
value={scheduleType}
exclusive
disabled={!creating}
onChange={(_event, flag: ScheduleFlag) => {
if (flag !== null) {
setFieldErrors(undefined); // clear any validation errors
setScheduleType(flag);
// wipe the time field when changing the schedule type
setEditItem({ ...editItem, time: '' });
// set the flags based on type
// 0-127 is day schedule
// 128 is timer
// 129 is on change
// 130 is on condition
// 132 is immediate
setEditItem(
flag === ScheduleFlag.SCHEDULE_DAY
? { ...editItem, flags: 0 }
: { ...editItem, flags: flag }
);
}
}}
>
<ToggleButton value={ScheduleFlag.SCHEDULE_DAY}>
<Typography
sx={{ fontSize: 10 }}
color={scheduleType === ScheduleFlag.SCHEDULE_DAY ? 'primary' : 'grey'}
>
{LL.SCHEDULE(0)}
</Typography>
</ToggleButton>
<ToggleButton value={ScheduleFlag.SCHEDULE_TIMER}>
<Typography
sx={{ fontSize: 10 }}
color={
scheduleType === ScheduleFlag.SCHEDULE_TIMER ? 'primary' : 'grey'
}
>
{LL.TIMER(0)}
</Typography>
</ToggleButton>
<ToggleButton value={ScheduleFlag.SCHEDULE_ONCHANGE}>
<Typography
sx={{ fontSize: 10 }}
color={
scheduleType === ScheduleFlag.SCHEDULE_ONCHANGE ? 'primary' : 'grey'
}
>
{LL.ONCHANGE()}
</Typography>
</ToggleButton>
<ToggleButton value={ScheduleFlag.SCHEDULE_CONDITION}>
<Typography
sx={{ fontSize: 10 }}
color={
scheduleType === ScheduleFlag.SCHEDULE_CONDITION ? 'primary' : 'grey'
}
>
{LL.CONDITION()}
</Typography>
</ToggleButton>
<ToggleButton value={ScheduleFlag.SCHEDULE_IMMEDIATE}>
<Typography
sx={{ fontSize: 10 }}
color={
scheduleType === ScheduleFlag.SCHEDULE_IMMEDIATE ? 'primary' : 'grey'
}
>
{LL.IMMEDIATE()}
</Typography>
</ToggleButton>
</ToggleButtonGroup>
{scheduleType === ScheduleFlag.SCHEDULE_DAY && (
<ToggleButtonGroup
size="small"
color="secondary"
value={getFlagDOWstring(editItem.flags)}
onChange={(_event, flag: string[]) => {
setEditItem({ ...editItem, flags: getFlagDOWnumber(flag) });
}}
>
<ToggleButton value="2">
{showDOW(editItem, ScheduleFlag.SCHEDULE_MON)}
</ToggleButton>
<ToggleButton value="4">
{showDOW(editItem, ScheduleFlag.SCHEDULE_TUE)}
</ToggleButton>
<ToggleButton value="8">
{showDOW(editItem, ScheduleFlag.SCHEDULE_WED)}
</ToggleButton>
<ToggleButton value="16">
{showDOW(editItem, ScheduleFlag.SCHEDULE_THU)}
</ToggleButton>
<ToggleButton value="32">
{showDOW(editItem, ScheduleFlag.SCHEDULE_FRI)}
</ToggleButton>
<ToggleButton value="64">
{showDOW(editItem, ScheduleFlag.SCHEDULE_SAT)}
</ToggleButton>
<ToggleButton value="1">
{showDOW(editItem, ScheduleFlag.SCHEDULE_SUN)}
</ToggleButton>
</ToggleButtonGroup>
)}
{scheduleType !== ScheduleFlag.SCHEDULE_IMMEDIATE && (
<>
<Grid container>
<BlockFormControlLabel
control={
<Checkbox
checked={editItem.active}
onChange={updateFormValue}
name="active"
/>
}
label={LL.ACTIVE()}
/>
</Grid>
<Grid container>
{scheduleType === ScheduleFlag.SCHEDULE_DAY ||
scheduleType === ScheduleFlag.SCHEDULE_TIMER ? (
<>
<TextField
name="time"
type="time"
label={
scheduleType === ScheduleFlag.SCHEDULE_TIMER
? LL.TIMER(1)
: LL.TIME(1)
}
value={editItem.time === '' ? '00:00' : editItem.time}
margin="normal"
onChange={updateFormValue}
/>
{scheduleType === ScheduleFlag.SCHEDULE_TIMER && (
<Box color="warning.main" ml={2} mt={4}>
<Typography variant="body2">
{LL.SCHEDULER_HELP_2()}
</Typography>
</Box>
)}
</>
) : (
<TextField
name="time"
label={
scheduleType === ScheduleFlag.SCHEDULE_CONDITION
? LL.CONDITION()
: scheduleType === ScheduleFlag.SCHEDULE_ONCHANGE
? LL.ONCHANGE()
: LL.IMMEDIATE()
}
multiline
fullWidth
value={editItem.time === '00:00' ? '' : editItem.time}
margin="normal"
onChange={updateFormValue}
/>
)}
</Grid>
</>
)}
<ValidatedTextField
fieldErrors={fieldErrors}
name="cmd"
label={LL.COMMAND(0)}
multiline
fullWidth
value={editItem.cmd}
margin="normal"
onChange={updateFormValue}
/>
<TextField
name="value"
label={LL.VALUE(0)}
multiline
margin="normal"
fullWidth
value={editItem.value}
onChange={updateFormValue}
/>
<ValidatedTextField
fieldErrors={fieldErrors}
name="name"
label={LL.NAME(0) + ' (' + LL.OPTIONAL() + ')'}
value={editItem.name}
fullWidth
margin="normal"
onChange={updateFormValue}
/>
</DialogContent>
<DialogActions>
{!creating && (
<Box flexGrow={1}>
<Button
startIcon={<RemoveIcon />}
variant="outlined"
color="warning"
onClick={remove}
>
{LL.REMOVE()}
</Button>
</Box>
)}
<Button
startIcon={<CancelIcon />}
variant="outlined"
onClick={onClose}
color="secondary"
>
{LL.CANCEL()}
</Button>
<Button
startIcon={creating ? <AddIcon /> : <DoneIcon />}
variant="outlined"
onClick={save}
color="primary"
>
{creating ? LL.ADD(0) : LL.UPDATE()}
</Button>
{scheduleType === ScheduleFlag.SCHEDULE_IMMEDIATE && editItem.cmd !== '' && (
<Button
startIcon={<PlayArrowIcon />}
variant="outlined"
onClick={saveandactivate}
color="success"
>
{LL.EXECUTE()}
</Button>
)}
</DialogActions>
</Dialog>
);
};
export default SchedulerDialog;

View File

@@ -0,0 +1,507 @@
import { useContext, useState } from 'react';
import { toast } from 'react-toastify';
import AddCircleOutlineOutlinedIcon from '@mui/icons-material/AddCircleOutlineOutlined';
import KeyboardArrowDownOutlinedIcon from '@mui/icons-material/KeyboardArrowDownOutlined';
import KeyboardArrowUpOutlinedIcon from '@mui/icons-material/KeyboardArrowUpOutlined';
import UnfoldMoreOutlinedIcon from '@mui/icons-material/UnfoldMoreOutlined';
import { Box, Button, Typography } from '@mui/material';
import { SortToggleType, useSort } from '@table-library/react-table-library/sort';
import {
Body,
Cell,
Header,
HeaderCell,
HeaderRow,
Row,
Table
} from '@table-library/react-table-library/table';
import { useTheme } from '@table-library/react-table-library/theme';
import type { State } from '@table-library/react-table-library/types/common';
import { useRequest } from 'alova/client';
import { SectionContent, useLayoutTitle } from 'components';
import { AuthenticatedContext } from 'contexts/authentication';
import { useI18nContext } from 'i18n/i18n-react';
import { useInterval } from 'utils';
import {
readSensorData,
writeAnalogSensor,
writeTemperatureSensor
} from '../../api/app';
import DashboardSensorsAnalogDialog from './SensorsAnalogDialog';
import DashboardSensorsTemperatureDialog from './SensorsTemperatureDialog';
import {
AnalogType,
AnalogTypeNames,
DeviceValueUOM,
DeviceValueUOM_s
} from './types';
import type {
AnalogSensor,
TemperatureSensor,
WriteAnalogSensor,
WriteTemperatureSensor
} from './types';
import {
analogSensorItemValidation,
temperatureSensorItemValidation
} from './validators';
const Sensors = () => {
const { LL } = useI18nContext();
const { me } = useContext(AuthenticatedContext);
const [selectedTemperatureSensor, setSelectedTemperatureSensor] =
useState<TemperatureSensor>();
const [selectedAnalogSensor, setSelectedAnalogSensor] = useState<AnalogSensor>();
const [temperatureDialogOpen, setTemperatureDialogOpen] = useState<boolean>(false);
const [analogDialogOpen, setAnalogDialogOpen] = useState<boolean>(false);
const [creating, setCreating] = useState<boolean>(false);
const { data: sensorData, send: fetchSensorData } = useRequest(
() => readSensorData(),
{
initialData: {
ts: [],
as: [],
analog_enabled: false,
platform: 'ESP32'
}
}
);
const { send: sendTemperatureSensor } = useRequest(
(data: WriteTemperatureSensor) => writeTemperatureSensor(data),
{
immediate: false
}
);
const { send: sendAnalogSensor } = useRequest(
(data: WriteAnalogSensor) => writeAnalogSensor(data),
{
immediate: false
}
);
useInterval(() => {
if (!temperatureDialogOpen && !analogDialogOpen) {
void fetchSensorData();
}
}, 3000);
const common_theme = useTheme({
BaseRow: `
font-size: 14px;
.td {
height: 32px;
}
`,
HeaderRow: `
text-transform: uppercase;
background-color: black;
color: #90CAF9;
.th {
border-bottom: 1px solid #565656;
}
.th {
height: 36px;
}
`,
Row: `
background-color: #1e1e1e;
position: relative;
cursor: pointer;
.td {
padding: 8px;
border-bottom: 1px solid #565656;
}
&:hover .td {
background-color: #177ac9;
}
`,
Cell: `
&:last-of-type {
text-align: right;
},
`
});
const temperature_theme = useTheme([
common_theme,
{
Table: `
--data-table-library_grid-template-columns: minmax(0, 1fr) 35%;
`
}
]);
const analog_theme = useTheme([
common_theme,
{
Table: `
--data-table-library_grid-template-columns: 80px repeat(1, minmax(0, 1fr)) 120px 110px;
`
}
]);
const RenderTemperatureSensors = () => (
<Table
data={{ nodes: sensorData.ts }}
theme={temperature_theme}
sort={temperature_sort}
layout={{ custom: true }}
>
{(tableList: TemperatureSensor[]) => (
<>
<Header>
<HeaderRow>
<HeaderCell resize>
<Button
fullWidth
style={{ fontSize: '14px', justifyContent: 'flex-start' }}
endIcon={getSortIcon(temperature_sort.state, 'NAME')}
onClick={() =>
temperature_sort.fns.onToggleSort({ sortKey: 'NAME' })
}
>
{LL.NAME(0)}
</Button>
</HeaderCell>
<HeaderCell stiff>
<Button
fullWidth
style={{ fontSize: '14px', justifyContent: 'flex-end' }}
endIcon={getSortIcon(temperature_sort.state, 'VALUE')}
onClick={() =>
temperature_sort.fns.onToggleSort({ sortKey: 'VALUE' })
}
>
{LL.VALUE(0)}
</Button>
</HeaderCell>
</HeaderRow>
</Header>
<Body>
{tableList.map((ts: TemperatureSensor) => (
<Row key={ts.id} item={ts} onClick={() => updateTemperatureSensor(ts)}>
<Cell>{ts.n}</Cell>
<Cell>{formatValue(ts.t, ts.u)}</Cell>
</Row>
))}
</Body>
</>
)}
</Table>
);
const getSortIcon = (state: State, sortKey: unknown) => {
if (state.sortKey === sortKey && state.reverse) {
return <KeyboardArrowDownOutlinedIcon />;
}
if (state.sortKey === sortKey && !state.reverse) {
return <KeyboardArrowUpOutlinedIcon />;
}
return <UnfoldMoreOutlinedIcon />;
};
const analog_sort = useSort(
{ nodes: sensorData.as },
{},
{
sortIcon: {
iconDefault: <UnfoldMoreOutlinedIcon />,
iconUp: <KeyboardArrowUpOutlinedIcon />,
iconDown: <KeyboardArrowDownOutlinedIcon />
},
sortToggleType: SortToggleType.AlternateWithReset,
sortFns: {
GPIO: (array) => array.sort((a, b) => a.g - b.g),
// eslint-disable-next-line @typescript-eslint/no-unsafe-return
NAME: (array) => array.sort((a, b) => a.n.localeCompare(b.n)),
TYPE: (array) => array.sort((a, b) => a.t - b.t),
VALUE: (array) => array.sort((a, b) => a.v - b.v)
}
}
);
const temperature_sort = useSort(
{ nodes: sensorData.ts },
{},
{
sortIcon: {
iconDefault: <UnfoldMoreOutlinedIcon />,
iconUp: <KeyboardArrowUpOutlinedIcon />,
iconDown: <KeyboardArrowDownOutlinedIcon />
},
sortToggleType: SortToggleType.AlternateWithReset,
sortFns: {
// eslint-disable-next-line @typescript-eslint/no-unsafe-return
NAME: (array) => array.sort((a, b) => a.n.localeCompare(b.n)),
VALUE: (array) => array.sort((a, b) => a.t - b.t)
}
}
);
useLayoutTitle(LL.SENSORS());
const formatDurationMin = (duration_min: number) => {
const days = Math.trunc((duration_min * 60000) / 86400000);
const hours = Math.trunc((duration_min * 60000) / 3600000) % 24;
const minutes = Math.trunc((duration_min * 60000) / 60000) % 60;
let formatted = '';
if (days) {
formatted += LL.NUM_DAYS({ num: days }) + ' ';
}
if (hours) {
formatted += LL.NUM_HOURS({ num: hours }) + ' ';
}
if (minutes) {
formatted += LL.NUM_MINUTES({ num: minutes });
}
return formatted;
};
function formatValue(value: unknown, uom: DeviceValueUOM) {
if (value === undefined) {
return '';
}
if (typeof value !== 'number') {
return value as string;
}
switch (uom) {
case DeviceValueUOM.HOURS:
return value ? formatDurationMin(value * 60) : LL.NUM_HOURS({ num: 0 });
case DeviceValueUOM.MINUTES:
return value ? formatDurationMin(value) : LL.NUM_MINUTES({ num: 0 });
case DeviceValueUOM.SECONDS:
return LL.NUM_SECONDS({ num: value });
case DeviceValueUOM.NONE:
return new Intl.NumberFormat().format(value);
case DeviceValueUOM.DEGREES:
case DeviceValueUOM.DEGREES_R:
case DeviceValueUOM.FAHRENHEIT:
return (
new Intl.NumberFormat(undefined, {
minimumFractionDigits: 1
}).format(value) +
' ' +
DeviceValueUOM_s[uom]
);
default:
return new Intl.NumberFormat().format(value) + ' ' + DeviceValueUOM_s[uom];
}
}
const updateTemperatureSensor = (ts: TemperatureSensor) => {
if (me.admin) {
ts.o_n = ts.n;
setSelectedTemperatureSensor(ts);
setTemperatureDialogOpen(true);
}
};
const onTemperatureDialogClose = () => {
setTemperatureDialogOpen(false);
void fetchSensorData();
};
const onTemperatureDialogSave = async (ts: TemperatureSensor) => {
await sendTemperatureSensor({ id: ts.id, name: ts.n, offset: ts.o })
.then(() => {
toast.success(LL.UPDATED_OF(LL.SENSOR(1)));
})
.catch(() => {
toast.error(LL.UPDATE_OF(LL.SENSOR(2)) + ' ' + LL.FAILED(1));
})
.finally(() => {
setTemperatureDialogOpen(false);
setSelectedTemperatureSensor(undefined);
void fetchSensorData();
});
};
const updateAnalogSensor = (as: AnalogSensor) => {
if (me.admin) {
setCreating(false);
as.o_n = as.n;
setSelectedAnalogSensor(as);
setAnalogDialogOpen(true);
}
};
const onAnalogDialogClose = () => {
setAnalogDialogOpen(false);
void fetchSensorData();
};
const addAnalogSensor = () => {
setCreating(true);
setSelectedAnalogSensor({
id: Math.floor(Math.random() * (Math.floor(200) - 100) + 100),
n: '',
g: 21, // default GPIO 21 which is safe for all platforms
u: 0,
v: 0,
o: 0,
t: 0,
f: 1,
d: false,
o_n: ''
});
setAnalogDialogOpen(true);
};
const onAnalogDialogSave = async (as: AnalogSensor) => {
await sendAnalogSensor({
id: as.id,
gpio: as.g,
name: as.n,
offset: as.o,
factor: as.f,
uom: as.u,
type: as.t,
deleted: as.d
})
.then(() => {
toast.success(LL.UPDATED_OF(LL.ANALOG_SENSOR(2)));
})
.catch(() => {
toast.error(LL.UPDATE_OF(LL.ANALOG_SENSOR(5)) + ' ' + LL.FAILED(1));
})
.finally(() => {
setAnalogDialogOpen(false);
setSelectedAnalogSensor(undefined);
void fetchSensorData();
});
};
const RenderAnalogSensors = () => (
<Table
data={{ nodes: sensorData.as }}
theme={analog_theme}
sort={analog_sort}
layout={{ custom: true }}
>
{(tableList: AnalogSensor[]) => (
<>
<Header>
<HeaderRow>
<HeaderCell stiff>
<Button
fullWidth
style={{ fontSize: '14px', justifyContent: 'flex-start' }}
endIcon={getSortIcon(analog_sort.state, 'GPIO')}
onClick={() => analog_sort.fns.onToggleSort({ sortKey: 'GPIO' })}
>
GPIO
</Button>
</HeaderCell>
<HeaderCell resize>
<Button
fullWidth
style={{ fontSize: '14px', justifyContent: 'flex-start' }}
endIcon={getSortIcon(analog_sort.state, 'NAME')}
onClick={() => analog_sort.fns.onToggleSort({ sortKey: 'NAME' })}
>
{LL.NAME(0)}
</Button>
</HeaderCell>
<HeaderCell stiff>
<Button
fullWidth
style={{ fontSize: '14px', justifyContent: 'flex-start' }}
endIcon={getSortIcon(analog_sort.state, 'TYPE')}
onClick={() => analog_sort.fns.onToggleSort({ sortKey: 'TYPE' })}
>
{LL.TYPE(0)}
</Button>
</HeaderCell>
<HeaderCell stiff>
<Button
fullWidth
style={{ fontSize: '14px', justifyContent: 'flex-end' }}
endIcon={getSortIcon(analog_sort.state, 'VALUE')}
onClick={() => analog_sort.fns.onToggleSort({ sortKey: 'VALUE' })}
>
{LL.VALUE(0)}
</Button>
</HeaderCell>
</HeaderRow>
</Header>
<Body>
{tableList.map((a: AnalogSensor) => (
<Row key={a.id} item={a} onClick={() => updateAnalogSensor(a)}>
<Cell stiff>{a.g}</Cell>
<Cell>{a.n}</Cell>
<Cell stiff>{AnalogTypeNames[a.t]} </Cell>
{a.t === AnalogType.DIGITAL_OUT || a.t === AnalogType.DIGITAL_IN ? (
<Cell stiff>{a.v ? LL.ON() : LL.OFF()}</Cell>
) : (
<Cell stiff>{a.t ? formatValue(a.v, a.u) : ''}</Cell>
)}
</Row>
))}
</Body>
</>
)}
</Table>
);
return (
<SectionContent>
<Typography sx={{ pb: 1 }} variant="h6" color="secondary">
{LL.TEMP_SENSORS()}
</Typography>
<RenderTemperatureSensors />
{selectedTemperatureSensor && (
<DashboardSensorsTemperatureDialog
open={temperatureDialogOpen}
onClose={onTemperatureDialogClose}
onSave={onTemperatureDialogSave}
selectedItem={selectedTemperatureSensor}
validator={temperatureSensorItemValidation(
sensorData.ts,
selectedTemperatureSensor
)}
/>
)}
<Typography sx={{ pt: 4, pb: 1 }} variant="h6" color="secondary">
{LL.ANALOG_SENSORS()}
</Typography>
<RenderAnalogSensors />
{selectedAnalogSensor && (
<DashboardSensorsAnalogDialog
open={analogDialogOpen}
onClose={onAnalogDialogClose}
onSave={onAnalogDialogSave}
creating={creating}
selectedItem={selectedAnalogSensor}
validator={analogSensorItemValidation(
sensorData.as,
selectedAnalogSensor,
creating,
sensorData.platform
)}
/>
)}
{sensorData?.analog_enabled === true && me.admin && (
<Box mt={1} display="flex" flexWrap="wrap" justifyContent="flex-end">
<Button
variant="outlined"
color="primary"
startIcon={<AddCircleOutlineOutlinedIcon />}
onClick={addAnalogSensor}
>
{LL.ADD(0)}
</Button>
</Box>
)}
</SectionContent>
);
};
export default Sensors;

View File

@@ -0,0 +1,353 @@
import { useEffect, useState } from 'react';
import CancelIcon from '@mui/icons-material/Cancel';
import RemoveIcon from '@mui/icons-material/RemoveCircleOutline';
import WarningIcon from '@mui/icons-material/Warning';
import {
Box,
Button,
Dialog,
DialogActions,
DialogContent,
DialogTitle,
InputAdornment,
MenuItem,
TextField,
Typography
} from '@mui/material';
import Grid from '@mui/material/Grid2';
import { dialogStyle } from 'CustomTheme';
import type Schema from 'async-validator';
import type { ValidateFieldsError } from 'async-validator';
import { ValidatedTextField } from 'components';
import { useI18nContext } from 'i18n/i18n-react';
import { numberValue, updateValue } from 'utils';
import { validate } from 'validators';
import { AnalogType, AnalogTypeNames, DeviceValueUOM_s } from './types';
import type { AnalogSensor } from './types';
interface DashboardSensorsAnalogDialogProps {
open: boolean;
onClose: () => void;
onSave: (as: AnalogSensor) => void;
creating: boolean;
selectedItem: AnalogSensor;
validator: Schema;
}
const SensorsAnalogDialog = ({
open,
onClose,
onSave,
creating,
selectedItem,
validator
}: DashboardSensorsAnalogDialogProps) => {
const { LL } = useI18nContext();
const [fieldErrors, setFieldErrors] = useState<ValidateFieldsError>();
const [editItem, setEditItem] = useState<AnalogSensor>(selectedItem);
const updateFormValue = updateValue(setEditItem);
useEffect(() => {
if (open) {
setFieldErrors(undefined);
setEditItem(selectedItem);
}
}, [open, selectedItem]);
const handleClose = (_event, reason: 'backdropClick' | 'escapeKeyDown') => {
if (reason !== 'backdropClick') {
onClose();
}
};
const save = async () => {
try {
setFieldErrors(undefined);
await validate(validator, editItem);
onSave(editItem);
} catch (error) {
setFieldErrors(error as ValidateFieldsError);
}
};
const remove = () => {
editItem.d = true;
onSave(editItem);
};
return (
<Dialog sx={dialogStyle} open={open} onClose={handleClose}>
<DialogTitle>
{creating ? LL.ADD(1) + ' ' + LL.NEW(0) : LL.EDIT()}&nbsp;
{LL.ANALOG_SENSOR(0)}
</DialogTitle>
<DialogContent dividers>
<Grid container spacing={2}>
<Grid>
<ValidatedTextField
fieldErrors={fieldErrors}
name="g"
label="GPIO"
sx={{ width: '11ch' }}
value={numberValue(editItem.g)}
type="number"
variant="outlined"
onChange={updateFormValue}
/>
</Grid>
{creating && (
<Grid>
<Box color="warning.main" mt={2}>
<Typography variant="body2">{LL.WARN_GPIO()}</Typography>
</Box>
</Grid>
)}
<Grid>
<ValidatedTextField
fieldErrors={fieldErrors}
name="n"
label={LL.NAME(0)}
value={editItem.n}
fullWidth
variant="outlined"
onChange={updateFormValue}
/>
</Grid>
<Grid>
<TextField
name="t"
label={LL.TYPE(0)}
value={editItem.t}
fullWidth
select
onChange={updateFormValue}
>
{AnalogTypeNames.map((val, i) => (
<MenuItem key={val} value={i}>
{val}
</MenuItem>
))}
</TextField>
</Grid>
{editItem.t >= AnalogType.COUNTER && editItem.t <= AnalogType.RATE && (
<Grid>
<TextField
name="u"
label={LL.UNIT()}
value={editItem.u}
sx={{ width: '15ch' }}
select
onChange={updateFormValue}
>
{DeviceValueUOM_s.map((val, i) => (
<MenuItem key={val} value={i}>
{val}
</MenuItem>
))}
</TextField>
</Grid>
)}
{editItem.t === AnalogType.ADC && (
<Grid>
<TextField
name="o"
label={LL.OFFSET()}
value={numberValue(editItem.o)}
type="number"
sx={{ width: '11ch' }}
variant="outlined"
onChange={updateFormValue}
slotProps={{
input: {
startAdornment: (
<InputAdornment position="start">mV</InputAdornment>
)
},
htmlInput: { min: '0', max: '3300', step: '1' }
}}
/>
</Grid>
)}
{editItem.t === AnalogType.COUNTER && (
<Grid>
<TextField
name="o"
label={LL.STARTVALUE()}
value={numberValue(editItem.o)}
type="number"
sx={{ width: '11ch' }}
variant="outlined"
onChange={updateFormValue}
slotProps={{
htmlInput: { step: '0.001' }
}}
/>
</Grid>
)}
{editItem.t >= AnalogType.COUNTER && editItem.t <= AnalogType.RATE && (
<Grid>
<TextField
name="f"
label={LL.FACTOR()}
value={numberValue(editItem.f)}
sx={{ width: '11ch' }}
type="number"
variant="outlined"
onChange={updateFormValue}
slotProps={{
htmlInput: { step: '0.001' }
}}
/>
</Grid>
)}
{editItem.t === AnalogType.DIGITAL_OUT &&
(editItem.g === 25 || editItem.g === 26) && (
<Grid>
<TextField
name="o"
label={LL.VALUE(0)}
value={numberValue(editItem.o)}
sx={{ width: '11ch' }}
type="number"
variant="outlined"
onChange={updateFormValue}
slotProps={{
htmlInput: { min: '0', max: '255', step: '1' }
}}
/>
</Grid>
)}
{editItem.t === AnalogType.DIGITAL_OUT &&
editItem.g !== 25 &&
editItem.g !== 26 && (
<>
<Grid>
<TextField
name="o"
label={LL.VALUE(0)}
value={numberValue(editItem.o)}
select
variant="outlined"
onChange={updateFormValue}
>
<MenuItem value={0}>{LL.OFF()}</MenuItem>
<MenuItem value={1}>{LL.ON()}</MenuItem>
</TextField>
</Grid>
<Grid>
<TextField
name="f"
label={LL.POLARITY()}
value={editItem.f}
sx={{ width: '15ch' }}
select
onChange={updateFormValue}
>
<MenuItem value={1}>{LL.ACTIVEHIGH()}</MenuItem>
<MenuItem value={-1}>{LL.ACTIVELOW()}</MenuItem>
</TextField>
</Grid>
<Grid>
<TextField
name="u"
label={LL.STARTVALUE()}
sx={{ width: '15ch' }}
value={editItem.u}
select
onChange={updateFormValue}
>
<MenuItem value={0}>{LL.UNCHANGED()}</MenuItem>
<MenuItem value={1}>
{LL.ALWAYS()}&nbsp;{LL.OFF()}
</MenuItem>
<MenuItem value={2}>
{LL.ALWAYS()}&nbsp;{LL.ON()}
</MenuItem>
</TextField>
</Grid>
</>
)}
{(editItem.t === AnalogType.PWM_0 ||
editItem.t === AnalogType.PWM_1 ||
editItem.t === AnalogType.PWM_2) && (
<>
<Grid>
<TextField
name="f"
label={LL.FREQ()}
value={numberValue(editItem.f)}
type="number"
variant="outlined"
sx={{ width: '11ch' }}
onChange={updateFormValue}
slotProps={{
input: {
startAdornment: (
<InputAdornment position="start">Hz</InputAdornment>
)
},
htmlInput: { min: '1', max: '5000', step: '1' }
}}
/>
</Grid>
<Grid>
<TextField
name="o"
label={LL.DUTY_CYCLE()}
value={numberValue(editItem.o)}
type="number"
sx={{ width: '11ch' }}
variant="outlined"
onChange={updateFormValue}
slotProps={{
input: {
startAdornment: (
<InputAdornment position="start">%</InputAdornment>
)
},
htmlInput: { min: '0', max: '100', step: '0.1' }
}}
/>
</Grid>
</>
)}
</Grid>
</DialogContent>
<DialogActions>
{!creating && (
<Box flexGrow={1} sx={{ '& button': { mt: 0 } }}>
<Button
startIcon={<RemoveIcon />}
variant="outlined"
color="warning"
onClick={remove}
>
{LL.REMOVE()}
</Button>
</Box>
)}
<Button
startIcon={<CancelIcon />}
variant="outlined"
onClick={onClose}
color="secondary"
>
{LL.CANCEL()}
</Button>
<Button
startIcon={<WarningIcon color="warning" />}
variant="outlined"
onClick={save}
color="primary"
>
{creating ? LL.ADD(0) : LL.UPDATE()}
</Button>
</DialogActions>
</Dialog>
);
};
export default SensorsAnalogDialog;

View File

@@ -0,0 +1,136 @@
import { useEffect, useState } from 'react';
import CancelIcon from '@mui/icons-material/Cancel';
import WarningIcon from '@mui/icons-material/Warning';
import {
Box,
Button,
Dialog,
DialogActions,
DialogContent,
DialogTitle,
InputAdornment,
TextField,
Typography
} from '@mui/material';
import Grid from '@mui/material/Grid2';
import { dialogStyle } from 'CustomTheme';
import type Schema from 'async-validator';
import type { ValidateFieldsError } from 'async-validator';
import { ValidatedTextField } from 'components';
import { useI18nContext } from 'i18n/i18n-react';
import { numberValue, updateValue } from 'utils';
import { validate } from 'validators';
import type { TemperatureSensor } from './types';
interface SensorsTemperatureDialogProps {
open: boolean;
onClose: () => void;
onSave: (ts: TemperatureSensor) => void;
selectedItem: TemperatureSensor;
validator: Schema;
}
const SensorsTemperatureDialog = ({
open,
onClose,
onSave,
selectedItem,
validator
}: SensorsTemperatureDialogProps) => {
const { LL } = useI18nContext();
const [fieldErrors, setFieldErrors] = useState<ValidateFieldsError>();
const [editItem, setEditItem] = useState<TemperatureSensor>(selectedItem);
const updateFormValue = updateValue(setEditItem);
useEffect(() => {
if (open) {
setFieldErrors(undefined);
setEditItem(selectedItem);
}
}, [open, selectedItem]);
const handleClose = (_event, reason: 'backdropClick' | 'escapeKeyDown') => {
if (reason !== 'backdropClick') {
onClose();
}
};
const save = async () => {
try {
setFieldErrors(undefined);
await validate(validator, editItem);
onSave(editItem);
} catch (error) {
setFieldErrors(error as ValidateFieldsError);
}
};
return (
<Dialog sx={dialogStyle} open={open} onClose={handleClose}>
<DialogTitle>
{LL.EDIT()}&nbsp;{LL.TEMP_SENSOR()}
</DialogTitle>
<DialogContent dividers>
<Box color="warning.main" p={0} pl={0} pr={0} mt={0} mb={2}>
<Typography variant="body2">
{LL.ID_OF(LL.SENSOR(0))}: {editItem.id}
</Typography>
</Box>
<Grid container spacing={2}>
<Grid>
<ValidatedTextField
fieldErrors={fieldErrors}
name="n"
label={LL.NAME(0)}
value={editItem.n}
sx={{ width: '30ch' }}
onChange={updateFormValue}
/>
</Grid>
<Grid>
<TextField
name="o"
label={LL.OFFSET()}
value={numberValue(editItem.o)}
sx={{ width: '11ch' }}
type="number"
variant="outlined"
onChange={updateFormValue}
slotProps={{
input: {
startAdornment: (
<InputAdornment position="start">°C</InputAdornment>
)
},
htmlInput: { min: '-5', max: '5', step: '0.1' }
}}
/>
</Grid>
</Grid>
</DialogContent>
<DialogActions>
<Button
startIcon={<CancelIcon />}
variant="outlined"
onClick={onClose}
color="secondary"
>
{LL.CANCEL()}
</Button>
<Button
startIcon={<WarningIcon color="warning" />}
variant="outlined"
onClick={save}
color="primary"
>
{LL.UPDATE()}
</Button>
</DialogActions>
</Dialog>
);
};
export default SensorsTemperatureDialog;

View File

@@ -0,0 +1,62 @@
import type { TranslationFunctions } from 'i18n/i18n-types';
import { DeviceValueUOM, DeviceValueUOM_s } from './types';
const formatDurationMin = (LL: TranslationFunctions, duration_min: number) => {
const days = Math.trunc((duration_min * 60000) / 86400000);
const hours = Math.trunc((duration_min * 60000) / 3600000) % 24;
const minutes = Math.trunc((duration_min * 60000) / 60000) % 60;
let formatted = '';
if (days) {
formatted += LL.NUM_DAYS({ num: days });
}
if (hours) {
if (formatted) formatted += ' ';
formatted += LL.NUM_HOURS({ num: hours });
}
if (minutes) {
if (formatted) formatted += ' ';
formatted += LL.NUM_MINUTES({ num: minutes });
}
return formatted;
};
export function formatValue(
LL: TranslationFunctions,
value?: unknown,
uom?: DeviceValueUOM
) {
if (typeof value !== 'number' || uom === undefined || value === undefined) {
if (value === undefined || typeof value === 'boolean') {
return '';
}
return value as string;
}
switch (uom) {
case DeviceValueUOM.HOURS:
return value ? formatDurationMin(LL, value * 60) : LL.NUM_HOURS({ num: 0 });
case DeviceValueUOM.MINUTES:
return value ? formatDurationMin(LL, value) : LL.NUM_MINUTES({ num: 0 });
case DeviceValueUOM.SECONDS:
return LL.NUM_SECONDS({ num: value });
case DeviceValueUOM.NONE:
return new Intl.NumberFormat().format(value);
case DeviceValueUOM.DEGREES:
case DeviceValueUOM.DEGREES_R:
case DeviceValueUOM.FAHRENHEIT:
return (
new Intl.NumberFormat(undefined, {
minimumFractionDigits: 1
}).format(value) +
' ' +
DeviceValueUOM_s[uom]
);
default:
return new Intl.NumberFormat().format(value) + ' ' + DeviceValueUOM_s[uom];
}
}

View File

@@ -0,0 +1,446 @@
export interface Settings {
locale: string;
tx_mode: number;
ems_bus_id: number;
syslog_enabled: boolean;
syslog_level: number;
syslog_mark_interval: number;
syslog_host: string;
syslog_port: number;
boiler_heatingoff: boolean;
remote_timeout_en: boolean;
remote_timeout: number;
shower_timer: boolean;
shower_alert: boolean;
shower_alert_coldshot: number;
shower_alert_trigger: number;
shower_min_duration: number;
rx_gpio: number;
tx_gpio: number;
telnet_enabled: boolean;
dallas_gpio: number;
dallas_parasite: boolean;
led_gpio: number;
hide_led: boolean;
low_clock: boolean;
notoken_api: boolean;
readonly_mode: boolean;
analog_enabled: boolean;
pbutton_gpio: number;
trace_raw: boolean;
board_profile: string;
bool_format: number;
bool_dashboard: number;
enum_format: number;
fahrenheit: boolean;
phy_type: number;
eth_power: number;
eth_phy_addr: number;
eth_clock_mode: number;
platform: string;
modbus_enabled: boolean;
modbus_port: number;
modbus_max_clients: number;
modbus_timeout: number;
developer_mode: boolean;
}
export enum busConnectionStatus {
BUS_STATUS_CONNECTED = 0,
BUS_STATUS_TX_ERRORS = 1,
BUS_STATUS_OFFLINE = 2
}
export interface Stat {
id: number; // id
s: number; // success
f: number; // fail
q: number; // quality
}
export interface Activity {
stats: Stat[];
}
export interface Device {
id: number; // id index
tn: string; // device type translated name
t: number; // device type id
b: string; // brand
n: string; // name
d: number; // deviceid
p: number; // productid
v: string; // version
e: number; // entities
url?: string; // lowercase type name used in API URL
}
export interface TemperatureSensor {
id: string; // id string
n: string; // name/alias
t?: number; // temp, optional
o: number; // offset
u: number; // uom
o_n?: string;
}
export interface AnalogSensor {
id: number;
g: number; // GPIO
n: string;
v: number;
u: number;
o: number;
f: number;
t: number;
d: boolean; // deleted flag
o_n?: string;
}
export interface WriteTemperatureSensor {
id: string;
name: string;
offset: number;
}
export interface SensorData {
ts: TemperatureSensor[];
as: AnalogSensor[];
analog_enabled: boolean;
platform: string;
}
export interface CoreData {
connected: boolean;
devices: Device[];
}
export interface DashboardItem {
id: number; // unique index
t?: number; // type from DeviceType
n?: string; // name, optional
dv?: DeviceValue; // device value, optional
nodes?: DashboardItem[]; // children nodes, optional
}
export interface DeviceValue {
id: string; // index, contains mask+name
v?: unknown; // value, Number, String or Boolean - can be undefined
u?: number; // uom, optional
c?: string; // command, optional
l?: string[]; // list, optional
h?: string; // help text, optional
s?: string; // steps for up/down, optional
m?: number; // min, optional
x?: number; // max, optional
}
export interface DeviceData {
nodes: DeviceValue[];
}
export interface DeviceEntity {
id: string; // shortname
v?: unknown; // value, in any format, optional
n?: string; // fullname, optional
cn?: string; // custom fullname, optional
t?: string; // tag for name
m: DeviceEntityMask; // mask
w: boolean; // writeable
mi?: number; // min value
ma?: number; // max value
o_m?: number; // original mask before edits
o_cn?: string; // original cn before edits
o_mi?: number; // original min value
o_ma?: number; // original max value
}
export enum DeviceValueUOM {
NONE = 0,
DEGREES,
DEGREES_R,
PERCENT,
LMIN,
KWH,
WH,
HOURS,
MINUTES,
UA,
BAR,
KW,
W,
KB,
SECONDS,
DBM,
FAHRENHEIT,
MV,
SQM,
M3,
L,
KMIN,
K,
VOLTS,
MBAR,
LH
}
export const DeviceValueUOM_s = [
'',
'°C',
'°C',
'%',
'l/min',
'kWh',
'Wh',
'hours',
'minutes',
'µA',
'bar',
'kW',
'W',
'KB',
'seconds',
'dBm',
'°F',
'mV',
'm²',
'm³',
'l',
'K*min',
'K',
'V',
'mbar',
'l/h'
];
export enum AnalogType {
REMOVED = -1,
NOTUSED = 0,
DIGITAL_IN = 1,
COUNTER = 2,
ADC = 3,
TIMER = 4,
RATE = 5,
DIGITAL_OUT = 6,
PWM_0 = 7,
PWM_1 = 8,
PWM_2 = 9
}
export const AnalogTypeNames = [
'(disabled)',
'Digital In',
'Counter',
'ADC',
'Timer',
'Rate',
'Digital Out',
'PWM 0',
'PWM 1',
'PWM 2'
];
type BoardProfiles = Record<string, string>;
export const BOARD_PROFILES: BoardProfiles = {
S32: 'BBQKees Gateway S32',
S32S3: 'BBQKees Gateway S3',
E32: 'BBQKees Gateway E32',
E32V2: 'BBQKees Gateway E32 V2',
NODEMCU: 'NodeMCU 32S',
'MH-ET': 'MH-ET Live D1 Mini',
LOLIN: 'Lolin D32',
OLIMEX: 'Olimex ESP32-EVB',
OLIMEXPOE: 'Olimex ESP32-POE',
C3MINI: 'Wemos C3 Mini',
S2MINI: 'Wemos S2 Mini',
S3MINI: 'Liligo S3'
};
export interface BoardProfile {
board_profile: string;
led_gpio: number;
dallas_gpio: number;
rx_gpio: number;
tx_gpio: number;
pbutton_gpio: number;
phy_type: number;
eth_power: number;
eth_phy_addr: number;
eth_clock_mode: number;
}
export interface APIcall {
device: string;
cmd: string;
id: number;
data?: string; // optional
}
export interface Action {
action: string;
param?: string; // optional
}
export interface WriteAnalogSensor {
id: number;
gpio: number;
name: string;
factor: number;
offset: number;
uom: number;
type: number;
deleted: boolean;
}
export enum DeviceEntityMask {
DV_DEFAULT = 0,
DV_WEB_EXCLUDE = 1,
DV_API_MQTT_EXCLUDE = 2,
DV_READONLY = 4,
DV_FAVORITE = 8,
DV_DELETED = 128
}
export interface ScheduleItem {
id: number; // unique index
active: boolean;
deleted?: boolean;
flags: number;
time: string; // also used for Condition and On Change
cmd: string;
value: string;
name: string; // can be empty
o_id?: number;
o_active?: boolean;
o_deleted?: boolean;
o_flags?: number;
o_time?: string;
o_cmd?: string;
o_value?: string;
o_name?: string;
}
export interface Schedule {
schedule: ScheduleItem[];
}
export interface ModuleItem {
id: number; // unique index
key: string;
name: string;
author: string;
version: string;
status: number;
message: string;
enabled: boolean;
license: string;
o_enabled?: boolean;
o_license?: string;
}
export interface Modules {
modules: ModuleItem[];
}
export enum ScheduleFlag {
SCHEDULE_SUN = 1,
SCHEDULE_MON = 2,
SCHEDULE_TUE = 4,
SCHEDULE_WED = 8,
SCHEDULE_THU = 16,
SCHEDULE_FRI = 32,
SCHEDULE_SAT = 64,
// types...
SCHEDULE_DAY = 0, // no bits set
SCHEDULE_TIMER = 128, // bit 8
SCHEDULE_ONCHANGE = 129, // bit 1
SCHEDULE_CONDITION = 130, // bit 2
SCHEDULE_IMMEDIATE = 132 // bit 3
}
export interface EntityItem {
id: number; // unique number
ram: number;
name: string;
device_id: number | string;
type_id: number | string;
offset: number;
factor: number;
uom: number;
value_type: number;
value?: unknown;
writeable: boolean;
deleted?: boolean;
o_id?: number;
o_ram?: number;
o_name?: string;
o_device_id?: number | string;
o_type_id?: number | string;
o_offset?: number;
o_factor?: number;
o_uom?: number;
o_value_type?: number;
o_deleted?: boolean;
o_writeable?: boolean;
o_value?: unknown;
}
export interface Entities {
entities: EntityItem[];
}
// matches emsdevice.h DeviceType
export const enum DeviceType {
SYSTEM = 0,
TEMPERATURESENSOR = 1,
ANALOGSENSOR = 2,
SCHEDULER = 3,
CUSTOM = 4,
BOILER,
THERMOSTAT,
MIXER,
SOLAR,
HEATPUMP,
GATEWAY,
SWITCH,
CONTROLLER,
CONNECT,
ALERT,
EXTENSION,
GENERIC,
HEATSOURCE,
VENTILATION,
WATER,
POOL,
UNKNOWN
}
// matches emsdevicevalue.h
export const enum DeviceValueType {
BOOL,
INT8,
UINT8,
INT16,
UINT16,
UINT24,
TIME, // same as UINT24
UINT32,
ENUM,
STRING, // RAW
CMD
}
export const DeviceValueTypeNames = [
'BOOL',
'INT8',
'UINT8',
'INT16',
'UINT16',
'UINT24',
'TIME',
'UINT32',
'ENUM',
'RAW',
'CMD'
];

View File

@@ -0,0 +1,504 @@
import Schema from 'async-validator';
import type { InternalRuleItem } from 'async-validator';
import { IP_OR_HOSTNAME_VALIDATOR } from 'validators/shared';
import type {
AnalogSensor,
DeviceValue,
EntityItem,
ScheduleItem,
Settings,
TemperatureSensor
} from './types';
export const GPIO_VALIDATOR = {
validator(
rule: InternalRuleItem,
value: number,
callback: (error?: string) => void
) {
if (
value &&
(value === 1 ||
(value >= 6 && value <= 11) ||
value === 20 ||
value === 24 ||
(value >= 28 && value <= 31) ||
value > 40 ||
value < 0)
) {
callback('Must be an valid GPIO port');
} else {
callback();
}
}
};
export const GPIO_VALIDATORR = {
validator(
rule: InternalRuleItem,
value: number,
callback: (error?: string) => void
) {
if (
value &&
(value === 1 ||
(value >= 6 && value <= 11) ||
(value >= 16 && value <= 17) ||
value === 20 ||
value === 24 ||
(value >= 28 && value <= 31) ||
value > 40 ||
value < 0)
) {
callback('Must be an valid GPIO port');
} else {
callback();
}
}
};
export const GPIO_VALIDATORC3 = {
validator(
rule: InternalRuleItem,
value: number,
callback: (error?: string) => void
) {
if (value && ((value >= 11 && value <= 19) || value > 21 || value < 0)) {
callback('Must be an valid GPIO port');
} else {
callback();
}
}
};
export const GPIO_VALIDATORS2 = {
validator(
rule: InternalRuleItem,
value: number,
callback: (error?: string) => void
) {
if (
value &&
((value >= 19 && value <= 20) ||
(value >= 22 && value <= 32) ||
value > 40 ||
value < 0)
) {
callback('Must be an valid GPIO port');
} else {
callback();
}
}
};
export const GPIO_VALIDATORS3 = {
validator(
rule: InternalRuleItem,
value: number,
callback: (error?: string) => void
) {
if (
value &&
((value >= 19 && value <= 20) ||
(value >= 22 && value <= 37) ||
(value >= 39 && value <= 42) ||
value > 48 ||
value < 0)
) {
callback('Must be an valid GPIO port');
} else {
callback();
}
}
};
export const createSettingsValidator = (settings: Settings) =>
new Schema({
...(settings.board_profile === 'CUSTOM' &&
settings.platform === 'ESP32' && {
led_gpio: [
{ required: true, message: 'LED GPIO is required' },
GPIO_VALIDATOR
],
dallas_gpio: [
{ required: true, message: 'GPIO is required' },
GPIO_VALIDATOR
],
pbutton_gpio: [
{ required: true, message: 'Button GPIO is required' },
GPIO_VALIDATOR
],
tx_gpio: [
{ required: true, message: 'Tx GPIO is required' },
GPIO_VALIDATOR
],
rx_gpio: [{ required: true, message: 'Rx GPIO is required' }, GPIO_VALIDATOR]
}),
...(settings.board_profile === 'CUSTOM' &&
settings.platform === 'ESP32C3' && {
led_gpio: [
{ required: true, message: 'LED GPIO is required' },
GPIO_VALIDATORC3
],
dallas_gpio: [
{ required: true, message: 'GPIO is required' },
GPIO_VALIDATORC3
],
pbutton_gpio: [
{ required: true, message: 'Button GPIO is required' },
GPIO_VALIDATORC3
],
tx_gpio: [
{ required: true, message: 'Tx GPIO is required' },
GPIO_VALIDATORC3
],
rx_gpio: [
{ required: true, message: 'Rx GPIO is required' },
GPIO_VALIDATORC3
]
}),
...(settings.board_profile === 'CUSTOM' &&
settings.platform === 'ESP32S2' && {
led_gpio: [
{ required: true, message: 'LED GPIO is required' },
GPIO_VALIDATORS2
],
dallas_gpio: [
{ required: true, message: 'GPIO is required' },
GPIO_VALIDATORS2
],
pbutton_gpio: [
{ required: true, message: 'Button GPIO is required' },
GPIO_VALIDATORS2
],
tx_gpio: [
{ required: true, message: 'Tx GPIO is required' },
GPIO_VALIDATORS2
],
rx_gpio: [
{ required: true, message: 'Rx GPIO is required' },
GPIO_VALIDATORS2
]
}),
...(settings.board_profile === 'CUSTOM' &&
settings.platform === 'ESP32S3' && {
led_gpio: [
{ required: true, message: 'LED GPIO is required' },
GPIO_VALIDATORS3
],
dallas_gpio: [
{ required: true, message: 'GPIO is required' },
GPIO_VALIDATORS3
],
pbutton_gpio: [
{ required: true, message: 'Button GPIO is required' },
GPIO_VALIDATORS3
],
tx_gpio: [
{ required: true, message: 'Tx GPIO is required' },
GPIO_VALIDATORS3
],
rx_gpio: [
{ required: true, message: 'Rx GPIO is required' },
GPIO_VALIDATORS3
]
}),
...(settings.syslog_enabled && {
syslog_host: [
{ required: true, message: 'Host is required' },
IP_OR_HOSTNAME_VALIDATOR
],
syslog_port: [
{ required: true, message: 'Port is required' },
{ type: 'number', min: 0, max: 65535, message: 'Invalid Port' }
],
syslog_mark_interval: [
{ required: true, message: 'Mark interval is required' },
{ type: 'number', min: 0, max: 10, message: 'Must be between 0 and 10' }
]
}),
...(settings.modbus_enabled && {
modbus_max_clients: [
{ required: true, message: 'Max clients is required' },
{ type: 'number', min: 0, max: 50, message: 'Invalid number' }
],
modbus_port: [
{ required: true, message: 'Port is required' },
{ type: 'number', min: 0, max: 65535, message: 'Invalid Port' }
],
modbus_timeout: [
{ required: true, message: 'Timeout is required' },
{
type: 'number',
min: 100,
max: 20000,
message: 'Must be between 100 and 20000'
}
]
}),
...(settings.shower_timer && {
shower_min_duration: [
{
type: 'number',
min: 10,
max: 360,
message: 'Time must be between 10 and 360 seconds'
}
]
}),
...(settings.shower_alert && {
shower_alert_trigger: [
{
type: 'number',
min: 1,
max: 20,
message: 'Time must be between 1 and 20 minutes'
}
],
shower_alert_coldshot: [
{
type: 'number',
min: 1,
max: 10,
message: 'Time must be between 1 and 10 seconds'
}
]
}),
...(settings.remote_timeout_en && {
remote_timeout: [
{
type: 'number',
min: 1,
max: 240,
message: 'Timeout must be between 1 and 240 hours'
}
]
})
});
export const uniqueNameValidator = (schedule: ScheduleItem[], o_name?: string) => ({
validator(
rule: InternalRuleItem,
name: string,
callback: (error?: string) => void
) {
if (
name !== '' &&
(o_name === undefined || o_name.toLowerCase() !== name.toLowerCase()) &&
schedule.find((si) => si.name.toLowerCase() === name.toLowerCase())
) {
callback('Name already in use');
} else {
callback();
}
}
});
export const schedulerItemValidation = (
schedule: ScheduleItem[],
scheduleItem: ScheduleItem
) =>
new Schema({
name: [
{
type: 'string',
pattern: /^[a-zA-Z0-9_]{0,19}$/,
message: "Must be <20 characters: alphanumeric or '_'"
},
...[uniqueNameValidator(schedule, scheduleItem.o_name)]
],
cmd: [
{ required: true, message: 'Command is required' },
{
type: 'string',
min: 1,
max: 300,
message: 'Command must be 1-300 characters'
}
]
});
export const uniqueCustomNameValidator = (
entity: EntityItem[],
o_name?: string
) => ({
validator(
rule: InternalRuleItem,
name: string,
callback: (error?: string) => void
) {
if (
(o_name === undefined || o_name.toLowerCase() !== name.toLowerCase()) &&
entity.find((ei) => ei.name.toLowerCase() === name.toLowerCase())
) {
callback('Name already in use');
} else {
callback();
}
}
});
export const entityItemValidation = (entity: EntityItem[], entityItem: EntityItem) =>
new Schema({
name: [
{ required: true, message: 'Name is required' },
{
type: 'string',
pattern: /^[a-zA-Z0-9_]{1,19}$/,
message: "Must be <20 characters: alphanumeric or '_'"
},
...[uniqueCustomNameValidator(entity, entityItem.o_name)]
],
device_id: [
{
validator(
rule: InternalRuleItem,
value: string,
callback: (error?: string) => void
) {
if (isNaN(parseInt(value, 16))) {
callback('Is required and must be in hex format');
}
callback();
}
}
],
type_id: [
{
validator(
rule: InternalRuleItem,
value: string,
callback: (error?: string) => void
) {
if (isNaN(parseInt(value, 16))) {
callback('Is required and must be in hex format');
}
callback();
}
}
],
offset: [
{ required: true, message: 'Offset is required' },
{ type: 'number', min: 0, max: 255, message: 'Must be between 0 and 255' }
],
factor: [
{ required: true, message: 'Bytes is required' },
{ type: 'number', min: 1, max: 255, message: 'Must be between 1 and 255' }
]
});
export const uniqueTemperatureNameValidator = (
sensors: TemperatureSensor[],
o_name?: string
) => ({
validator(rule: InternalRuleItem, n: string, callback: (error?: string) => void) {
if (
(o_name === undefined || o_name.toLowerCase() !== n.toLowerCase()) &&
n !== '' &&
sensors.find((ts) => ts.n.toLowerCase() === n.toLowerCase())
) {
callback('Name already in use');
} else {
callback();
}
}
});
export const temperatureSensorItemValidation = (
sensors: TemperatureSensor[],
sensor: TemperatureSensor
) =>
new Schema({
n: [
{
type: 'string',
pattern: /^[a-zA-Z0-9_]{0,19}$/,
message: "Must be <20 characters: alphanumeric or '_'"
},
...[uniqueTemperatureNameValidator(sensors, sensor.o_n)]
]
});
export const isGPIOUniqueValidator = (sensors: AnalogSensor[]) => ({
validator(
rule: InternalRuleItem,
gpio: number,
callback: (error?: string) => void
) {
if (sensors.find((as) => as.g === gpio)) {
callback('GPIO already in use');
} else {
callback();
}
}
});
export const uniqueAnalogNameValidator = (
sensors: AnalogSensor[],
o_name?: string
) => ({
validator(rule: InternalRuleItem, n: string, callback: (error?: string) => void) {
if (
(o_name === undefined || o_name.toLowerCase() !== n.toLowerCase()) &&
n !== '' &&
sensors.find((as) => as.n.toLowerCase() === n.toLowerCase())
) {
callback('Name already in use');
} else {
callback();
}
}
});
export const analogSensorItemValidation = (
sensors: AnalogSensor[],
sensor: AnalogSensor,
creating: boolean,
platform: string
) =>
new Schema({
n: [
{
type: 'string',
pattern: /^[a-zA-Z0-9_]{0,19}$/,
message: "Must be <20 characters: alphanumeric or '_'"
},
...[uniqueAnalogNameValidator(sensors, sensor.o_n)]
],
g: [
{ required: true, message: 'GPIO is required' },
platform === 'ESP32S3'
? GPIO_VALIDATORS3
: platform === 'ESP32S2'
? GPIO_VALIDATORS2
: platform === 'ESP32C3'
? GPIO_VALIDATORC3
: GPIO_VALIDATOR,
...(creating ? [isGPIOUniqueValidator(sensors)] : [])
]
});
export const deviceValueItemValidation = (dv: DeviceValue) =>
new Schema({
v: [
{ required: true, message: 'Value is required' },
{
validator(
rule: InternalRuleItem,
value: unknown,
callback: (error?: string) => void
) {
if (
typeof value === 'number' &&
dv.m &&
dv.x &&
(value < dv.m || value > dv.x)
) {
callback('Value out of range');
}
callback();
}
}
]
});

View File

@@ -1,37 +1,61 @@
import { FC, useState } from 'react';
import { ValidateFieldsError } from 'async-validator';
import { range } from 'lodash';
import { useState } from 'react';
import CancelIcon from '@mui/icons-material/Cancel';
import WarningIcon from '@mui/icons-material/Warning';
import { Button, Checkbox, MenuItem } from '@mui/material';
import SaveIcon from '@mui/icons-material/Save';
import { createAPSettingsValidator, validate } from '../../validators';
import * as APApi from 'api/ap';
import type { ValidateFieldsError } from 'async-validator';
import {
BlockFormControlLabel,
BlockNavigation,
ButtonRow,
FormLoader,
SectionContent,
ValidatedPasswordField,
ValidatedTextField
} from '../../components';
ValidatedTextField,
useLayoutTitle
} from 'components';
import { useI18nContext } from 'i18n/i18n-react';
import type { APSettingsType } from 'types';
import { APProvisionMode } from 'types';
import { numberValue, updateValueDirty, useRest } from 'utils';
import { createAPSettingsValidator, validate } from 'validators';
import { APProvisionMode, APSettings } from '../../types';
import { numberValue, updateValue, useRest } from '../../utils';
import * as APApi from '../../api/ap';
export const isAPEnabled = ({ provision_mode }: APSettingsType) =>
provision_mode === APProvisionMode.AP_MODE_ALWAYS ||
provision_mode === APProvisionMode.AP_MODE_DISCONNECTED;
export const isAPEnabled = ({ provision_mode }: APSettings) => {
return provision_mode === APProvisionMode.AP_MODE_ALWAYS || provision_mode === APProvisionMode.AP_MODE_DISCONNECTED;
};
const APSettingsForm: FC = () => {
const { loadData, saving, data, setData, saveData, errorMessage } = useRest<APSettings>({
const APSettings = () => {
const {
loadData,
saving,
data,
updateDataValue,
origData,
dirtyFlags,
setDirtyFlags,
blocker,
saveData,
errorMessage
} = useRest<APSettingsType>({
read: APApi.readAPSettings,
update: APApi.updateAPSettings
});
const { LL } = useI18nContext();
useLayoutTitle(LL.SETTINGS_OF(LL.ACCESS_POINT(0)));
const [fieldErrors, setFieldErrors] = useState<ValidateFieldsError>();
const updateFormValue = updateValue(setData);
const updateFormValue = updateValueDirty(
origData,
dirtyFlags,
setDirtyFlags,
updateDataValue
);
const content = () => {
if (!data) {
@@ -42,18 +66,23 @@ const APSettingsForm: FC = () => {
try {
setFieldErrors(undefined);
await validate(createAPSettingsValidator(data), data);
saveData();
} catch (errors: any) {
setFieldErrors(errors);
await saveData();
} catch (error) {
setFieldErrors(error as ValidateFieldsError);
}
};
// no lodash - https://asleepace.com/blog/typescript-range-without-a-loop/
function range(a: number, b: number): number[] {
return a < b ? [a, ...range(a + 1, b)] : [b];
}
return (
<>
<ValidatedTextField
fieldErrors={fieldErrors}
name="provision_mode"
label="Provide Access Point&hellip;"
label={LL.AP_PROVIDE() + '...'}
value={data.provision_mode}
fullWidth
select
@@ -61,16 +90,22 @@ const APSettingsForm: FC = () => {
onChange={updateFormValue}
margin="normal"
>
<MenuItem value={APProvisionMode.AP_MODE_ALWAYS}>Always</MenuItem>
<MenuItem value={APProvisionMode.AP_MODE_DISCONNECTED}>When WiFi Disconnected</MenuItem>
<MenuItem value={APProvisionMode.AP_NEVER}>Never</MenuItem>
<MenuItem value={APProvisionMode.AP_MODE_ALWAYS}>
{LL.AP_PROVIDE_TEXT_1()}
</MenuItem>
<MenuItem value={APProvisionMode.AP_MODE_DISCONNECTED}>
{LL.AP_PROVIDE_TEXT_2()}
</MenuItem>
<MenuItem value={APProvisionMode.AP_NEVER}>
{LL.AP_PROVIDE_TEXT_3()}
</MenuItem>
</ValidatedTextField>
{isAPEnabled(data) && (
<>
<ValidatedTextField
fieldErrors={fieldErrors}
name="ssid"
label="Access Point SSID"
label={LL.ACCESS_POINT(2) + ' SSID'}
fullWidth
variant="outlined"
value={data.ssid}
@@ -80,7 +115,7 @@ const APSettingsForm: FC = () => {
<ValidatedPasswordField
fieldErrors={fieldErrors}
name="password"
label="Access Point Password"
label={LL.ACCESS_POINT(2) + ' ' + LL.PASSWORD()}
fullWidth
variant="outlined"
value={data.password}
@@ -90,7 +125,7 @@ const APSettingsForm: FC = () => {
<ValidatedTextField
fieldErrors={fieldErrors}
name="channel"
label="Preferred Channel"
label={LL.AP_PREFERRED_CHANNEL()}
value={numberValue(data.channel)}
fullWidth
select
@@ -106,13 +141,19 @@ const APSettingsForm: FC = () => {
))}
</ValidatedTextField>
<BlockFormControlLabel
control={<Checkbox name="ssid_hidden" checked={data.ssid_hidden} onChange={updateFormValue} />}
label="Hide SSID"
control={
<Checkbox
name="ssid_hidden"
checked={data.ssid_hidden}
onChange={updateFormValue}
/>
}
label={LL.AP_HIDE_SSID()}
/>
<ValidatedTextField
fieldErrors={fieldErrors}
name="max_clients"
label="Max Clients"
label={LL.AP_MAX_CLIENTS()}
value={numberValue(data.max_clients)}
fullWidth
select
@@ -130,7 +171,7 @@ const APSettingsForm: FC = () => {
<ValidatedTextField
fieldErrors={fieldErrors}
name="local_ip"
label="Local IP"
label={LL.AP_LOCAL_IP()}
fullWidth
variant="outlined"
value={data.local_ip}
@@ -140,7 +181,7 @@ const APSettingsForm: FC = () => {
<ValidatedTextField
fieldErrors={fieldErrors}
name="gateway_ip"
label="Gateway"
label={LL.NETWORK_GATEWAY()}
fullWidth
variant="outlined"
value={data.gateway_ip}
@@ -150,7 +191,7 @@ const APSettingsForm: FC = () => {
<ValidatedTextField
fieldErrors={fieldErrors}
name="subnet_mask"
label="Subnet"
label={LL.NETWORK_SUBNET()}
fullWidth
variant="outlined"
value={data.subnet_mask}
@@ -159,27 +200,40 @@ const APSettingsForm: FC = () => {
/>
</>
)}
{dirtyFlags && dirtyFlags.length !== 0 && (
<ButtonRow>
<Button
startIcon={<SaveIcon />}
startIcon={<CancelIcon />}
disabled={saving}
variant="outlined"
color="primary"
color="secondary"
type="submit"
onClick={loadData}
>
{LL.CANCEL()}
</Button>
<Button
startIcon={<WarningIcon color="warning" />}
disabled={saving}
variant="contained"
color="info"
type="submit"
onClick={validateAndSubmit}
>
Save
{LL.APPLY_CHANGES(dirtyFlags.length)}
</Button>
</ButtonRow>
)}
</>
);
};
return (
<SectionContent title="Access Point Settings" titleGutter>
<SectionContent>
{blocker ? <BlockNavigation blocker={blocker} /> : null}
{content()}
</SectionContent>
);
};
export default APSettingsForm;
export default APSettings;

View File

@@ -0,0 +1,861 @@
import { useState } from 'react';
import { toast } from 'react-toastify';
import CancelIcon from '@mui/icons-material/Cancel';
import PowerSettingsNewIcon from '@mui/icons-material/PowerSettingsNew';
import WarningIcon from '@mui/icons-material/Warning';
import {
Box,
Button,
Checkbox,
Divider,
InputAdornment,
MenuItem,
TextField,
Typography
} from '@mui/material';
import Grid from '@mui/material/Grid2';
import { readSystemStatus } from 'api/system';
import { useRequest } from 'alova/client';
import RestartMonitor from 'app/status/RestartMonitor';
import type { ValidateFieldsError } from 'async-validator';
import {
BlockFormControlLabel,
BlockNavigation,
ButtonRow,
FormLoader,
MessageBox,
SectionContent,
ValidatedTextField,
useLayoutTitle
} from 'components';
import { useI18nContext } from 'i18n/i18n-react';
import { numberValue, updateValueDirty, useRest } from 'utils';
import { validate } from 'validators';
import { API, getBoardProfile, readSettings, writeSettings } from '../../api/app';
import { BOARD_PROFILES } from '../main/types';
import type { APIcall, Settings } from '../main/types';
import { createSettingsValidator } from '../main/validators';
export function boardProfileSelectItems() {
return Object.keys(BOARD_PROFILES).map((code) => (
<MenuItem key={code} value={code}>
{BOARD_PROFILES[code]}
</MenuItem>
));
}
const ApplicationSettings = () => {
const { data: hardwareData } = useRequest(readSystemStatus);
const {
loadData,
saveData,
updateDataValue,
data,
origData,
dirtyFlags,
setDirtyFlags,
blocker,
errorMessage,
restartNeeded
} = useRest<Settings>({
read: readSettings,
update: writeSettings
});
const [restarting, setRestarting] = useState<boolean>();
const { LL } = useI18nContext();
const updateFormValue = updateValueDirty(
origData,
dirtyFlags,
setDirtyFlags,
updateDataValue
);
const [fieldErrors, setFieldErrors] = useState<ValidateFieldsError>();
const { send: sendAPI } = useRequest((data: APIcall) => API(data), {
immediate: false
});
const { loading: processingBoard, send: readBoardProfile } = useRequest(
(boardProfile: string) => getBoardProfile(boardProfile),
{
immediate: false
}
).onSuccess((event) => {
const response = event.data as Settings;
updateDataValue({
...data,
board_profile: response.board_profile,
led_gpio: response.led_gpio,
dallas_gpio: response.dallas_gpio,
rx_gpio: response.rx_gpio,
tx_gpio: response.tx_gpio,
pbutton_gpio: response.pbutton_gpio,
phy_type: response.phy_type,
eth_power: response.eth_power,
eth_phy_addr: response.eth_phy_addr,
eth_clock_mode: response.eth_clock_mode
});
});
const doRestart = async () => {
setRestarting(true);
await sendAPI({ device: 'system', cmd: 'restart', id: 0 }).catch(
(error: Error) => {
toast.error(error.message);
}
);
};
const updateBoardProfile = async (board_profile: string) => {
await readBoardProfile(board_profile).catch((error: Error) => {
toast.error(error.message);
});
};
useLayoutTitle(LL.SETTINGS_OF(LL.APPLICATION()));
const SecondsInputProps = {
endAdornment: <InputAdornment position="end">{LL.SECONDS()}</InputAdornment>
};
const MilliSecondsInputProps = {
endAdornment: <InputAdornment position="end">ms</InputAdornment>
};
const MinutesInputProps = {
endAdornment: <InputAdornment position="end">{LL.MINUTES()}</InputAdornment>
};
const HoursInputProps = {
endAdornment: <InputAdornment position="end">{LL.HOURS()}</InputAdornment>
};
const content = () => {
if (!data || !hardwareData) {
return <FormLoader onRetry={loadData} errorMessage={errorMessage} />;
}
const validateAndSubmit = async () => {
try {
setFieldErrors(undefined);
await validate(createSettingsValidator(data), data);
} catch (error) {
setFieldErrors(error as ValidateFieldsError);
} finally {
await saveData();
}
};
const changeBoardProfile = (event: React.ChangeEvent<HTMLInputElement>) => {
const boardProfile = event.target.value;
updateFormValue(event);
if (boardProfile === 'CUSTOM') {
updateDataValue({
...data,
board_profile: boardProfile
});
} else {
void updateBoardProfile(boardProfile);
}
};
const restart = async () => {
await validateAndSubmit();
await doRestart();
};
return (
<>
<Typography sx={{ pb: 1 }} variant="h6" color="primary">
{LL.SERVICES()}
</Typography>
<Typography color="secondary">API</Typography>
<BlockFormControlLabel
control={
<Checkbox
checked={data.notoken_api}
onChange={updateFormValue}
name="notoken_api"
/>
}
label={LL.BYPASS_TOKEN()}
/>
<Typography color="secondary">Console</Typography>
<BlockFormControlLabel
control={
<Checkbox
checked={data.telnet_enabled}
onChange={updateFormValue}
name="telnet_enabled"
/>
}
label={LL.ENABLE_TELNET()}
/>
<Typography color="secondary">Modbus</Typography>
<BlockFormControlLabel
control={
<Checkbox
checked={data.modbus_enabled}
onChange={updateFormValue}
name="modbus_enabled"
disabled={!hardwareData.psram}
/>
}
label={LL.ENABLE_MODBUS()}
/>
{data.modbus_enabled && (
<Grid container spacing={2} rowSpacing={0}>
<Grid>
<ValidatedTextField
fieldErrors={fieldErrors}
name="modbus_max_clients"
label={LL.AP_MAX_CLIENTS()}
variant="outlined"
value={numberValue(data.modbus_max_clients)}
type="number"
onChange={updateFormValue}
margin="normal"
/>
</Grid>
<Grid>
<ValidatedTextField
fieldErrors={fieldErrors}
name="modbus_port"
label="Port"
variant="outlined"
value={numberValue(data.modbus_port)}
type="number"
onChange={updateFormValue}
margin="normal"
/>
</Grid>
<Grid>
<ValidatedTextField
fieldErrors={fieldErrors}
name="modbus_timeout"
label="Timeout"
slotProps={{
input: MilliSecondsInputProps
}}
variant="outlined"
value={numberValue(data.modbus_timeout)}
type="number"
onChange={updateFormValue}
margin="normal"
/>
</Grid>
</Grid>
)}
<Typography color="secondary">Syslog</Typography>
<BlockFormControlLabel
control={
<Checkbox
checked={data.syslog_enabled}
onChange={updateFormValue}
name="syslog_enabled"
/>
}
label={LL.ENABLE_SYSLOG()}
/>
{data.syslog_enabled && (
<Grid container spacing={2} rowSpacing={0}>
<Grid>
<ValidatedTextField
fieldErrors={fieldErrors}
name="syslog_host"
label="Host"
variant="outlined"
value={data.syslog_host}
onChange={updateFormValue}
margin="normal"
/>
</Grid>
<Grid>
<ValidatedTextField
fieldErrors={fieldErrors}
name="syslog_port"
label="Port"
variant="outlined"
value={numberValue(data.syslog_port)}
type="number"
onChange={updateFormValue}
margin="normal"
/>
</Grid>
<Grid>
<TextField
name="syslog_level"
label={LL.LOG_LEVEL()}
value={data.syslog_level}
fullWidth
variant="outlined"
onChange={updateFormValue}
margin="normal"
select
>
<MenuItem value={-1}>OFF</MenuItem>
<MenuItem value={3}>ERR</MenuItem>
<MenuItem value={5}>NOTICE</MenuItem>
<MenuItem value={6}>INFO</MenuItem>
<MenuItem value={7}>DEBUG</MenuItem>
<MenuItem value={9}>ALL</MenuItem>
</TextField>
</Grid>
<Grid>
<ValidatedTextField
fieldErrors={fieldErrors}
name="syslog_mark_interval"
label={LL.MARK_INTERVAL()}
slotProps={{
input: SecondsInputProps
}}
variant="outlined"
value={numberValue(data.syslog_mark_interval)}
type="number"
onChange={updateFormValue}
margin="normal"
/>
</Grid>
</Grid>
)}
<Typography sx={{ pb: 1, pt: 2 }} variant="h6" color="primary">
{LL.SENSORS()}
</Typography>
<Typography color="secondary">Analog</Typography>
<BlockFormControlLabel
control={
<Checkbox
checked={data.analog_enabled}
onChange={updateFormValue}
name="analog_enabled"
/>
}
label={LL.ENABLE_ANALOG()}
/>
{data.dallas_gpio !== 0 && (
<>
<Typography color="secondary">{LL.TEMPERATURE()}</Typography>
<BlockFormControlLabel
control={
<Checkbox
checked={data.dallas_parasite}
onChange={updateFormValue}
name="dallas_parasite"
/>
}
label={LL.ENABLE_PARASITE()}
/>
</>
)}
<Typography sx={{ pb: 1, pt: 2 }} variant="h6" color="primary">
{LL.FORMATTING_OPTIONS()}
</Typography>
<Grid container spacing={2}>
<Grid size={3}>
<TextField
name="locale"
label={LL.LANGUAGE_ENTITIES()}
value={data.locale}
fullWidth
variant="outlined"
onChange={updateFormValue}
margin="normal"
select
>
<MenuItem value="cz">Česky (CZ)</MenuItem>
<MenuItem value="de">Deutsch (DE)</MenuItem>
<MenuItem value="en">English (EN)</MenuItem>
<MenuItem value="fr">Français (FR)</MenuItem>
<MenuItem value="it">Italiano (IT)</MenuItem>
<MenuItem value="nl">Nederlands (NL)</MenuItem>
<MenuItem value="no">Norsk (NO)</MenuItem>
<MenuItem value="pl">Polski (PL)</MenuItem>
<MenuItem value="sk">Slovenčina (SK)</MenuItem>
<MenuItem value="sv">Svenska (SV)</MenuItem>
<MenuItem value="tr">Türk (TR)</MenuItem>
</TextField>
</Grid>
<Grid size={3}>
<TextField
name="bool_dashboard"
label={LL.BOOLEAN_FORMAT_DASHBOARD()}
value={data.bool_dashboard}
variant="outlined"
fullWidth
onChange={updateFormValue}
margin="normal"
select
>
<MenuItem value={1}>{LL.ONOFF()}</MenuItem>
<MenuItem value={2}>{LL.ONOFF_CAP()}</MenuItem>
<MenuItem value={3}>true/false</MenuItem>
<MenuItem value={5}>1/0</MenuItem>
</TextField>
</Grid>
<Grid size={3}>
<TextField
name="bool_format"
label={LL.BOOLEAN_FORMAT_API()}
value={data.bool_format}
variant="outlined"
fullWidth
onChange={updateFormValue}
margin="normal"
select
>
<MenuItem value={1}>{LL.ONOFF()}</MenuItem>
<MenuItem value={2}>{LL.ONOFF_CAP()}</MenuItem>
<MenuItem value={3}>&quot;true&quot;/&quot;false&quot;</MenuItem>
<MenuItem value={4}>true/false</MenuItem>
<MenuItem value={5}>&quot;1&quot;/&quot;0&quot;</MenuItem>
<MenuItem value={6}>1/0</MenuItem>
</TextField>
</Grid>
<Grid size={3}>
<TextField
name="enum_format"
label={LL.ENUM_FORMAT()}
value={data.enum_format}
variant="outlined"
fullWidth
onChange={updateFormValue}
margin="normal"
select
>
<MenuItem value={1}>{LL.VALUE(5)}</MenuItem>
<MenuItem value={2}>{LL.INDEX()}</MenuItem>
</TextField>
</Grid>
</Grid>
<BlockFormControlLabel
control={
<Checkbox
checked={data.fahrenheit}
onChange={updateFormValue}
name="fahrenheit"
/>
}
label={LL.CONVERT_FAHRENHEIT()}
/>
<BlockFormControlLabel
control={
<Checkbox
checked={data.trace_raw}
onChange={updateFormValue}
name="trace_raw"
/>
}
label={LL.LOG_HEX()}
/>
<Typography sx={{ pb: 1, pt: 2 }} variant="h6" color="primary">
{LL.SETTINGS_OF(LL.HARDWARE())}
</Typography>
<TextField
name="board_profile"
label={LL.BOARD_PROFILE()}
value={data.board_profile}
disabled={processingBoard || hardwareData.model.startsWith('BBQKees')}
variant="outlined"
onChange={changeBoardProfile}
margin="normal"
select
>
{boardProfileSelectItems()}
<Divider />
<MenuItem key={'CUSTOM'} value={'CUSTOM'}>
{LL.CUSTOM()}&hellip;
</MenuItem>
</TextField>
{data.board_profile === 'CUSTOM' && (
<>
<Grid container spacing={2} rowSpacing={0}>
<Grid>
<ValidatedTextField
fieldErrors={fieldErrors}
name="rx_gpio"
label={LL.GPIO_OF('Rx')}
fullWidth
variant="outlined"
value={numberValue(data.rx_gpio)}
type="number"
onChange={updateFormValue}
margin="normal"
/>
</Grid>
<Grid>
<ValidatedTextField
fieldErrors={fieldErrors}
name="tx_gpio"
label={LL.GPIO_OF('Tx')}
fullWidth
variant="outlined"
value={numberValue(data.tx_gpio)}
type="number"
onChange={updateFormValue}
margin="normal"
/>
</Grid>
<Grid>
<ValidatedTextField
fieldErrors={fieldErrors}
name="pbutton_gpio"
label={LL.GPIO_OF(LL.BUTTON())}
fullWidth
variant="outlined"
value={numberValue(data.pbutton_gpio)}
type="number"
onChange={updateFormValue}
margin="normal"
/>
</Grid>
<Grid>
<ValidatedTextField
fieldErrors={fieldErrors}
name="dallas_gpio"
label={
LL.GPIO_OF(LL.TEMPERATURE()) + ' (0=' + LL.DISABLED(1) + ')'
}
fullWidth
variant="outlined"
value={numberValue(data.dallas_gpio)}
type="number"
onChange={updateFormValue}
margin="normal"
/>
</Grid>
<Grid>
<ValidatedTextField
fieldErrors={fieldErrors}
name="led_gpio"
label={LL.GPIO_OF('LED') + ' (0=' + LL.DISABLED(1) + ')'}
fullWidth
variant="outlined"
value={numberValue(data.led_gpio)}
type="number"
onChange={updateFormValue}
margin="normal"
/>
</Grid>
<Grid>
<TextField
name="phy_type"
label={LL.PHY_TYPE()}
value={data.phy_type}
fullWidth
variant="outlined"
onChange={updateFormValue}
margin="normal"
select
>
<MenuItem value={0}>{LL.DISABLED(1)}</MenuItem>
<MenuItem value={1}>LAN8720</MenuItem>
<MenuItem value={2}>TLK110</MenuItem>
</TextField>
</Grid>
</Grid>
{data.phy_type !== 0 && (
<Grid container spacing={2} rowSpacing={0}>
<Grid>
<TextField
name="eth_power"
label={LL.GPIO_OF('PHY Power') + ' (-1=' + LL.DISABLED(1) + ')'}
fullWidth
variant="outlined"
value={numberValue(data.eth_power)}
type="number"
onChange={updateFormValue}
margin="normal"
/>
</Grid>
<Grid>
<TextField
name="eth_phy_addr"
label={LL.ADDRESS_OF('PHY I²C')}
fullWidth
variant="outlined"
value={numberValue(data.eth_phy_addr)}
type="number"
onChange={updateFormValue}
margin="normal"
/>
</Grid>
<Grid>
<TextField
name="eth_clock_mode"
label="PHY Clk"
value={data.eth_clock_mode}
fullWidth
variant="outlined"
onChange={updateFormValue}
margin="normal"
select
>
<MenuItem value={0}>GPIO0_IN</MenuItem>
<MenuItem value={1}>GPIO0_OUT</MenuItem>
<MenuItem value={2}>GPIO16_OUT</MenuItem>
<MenuItem value={3}>GPIO17_OUT</MenuItem>
</TextField>
</Grid>
</Grid>
)}
</>
)}
<Grid container spacing={2} rowSpacing={0}>
<Grid>
<TextField
name="tx_mode"
label={LL.TX_MODE()}
value={data.tx_mode}
variant="outlined"
onChange={updateFormValue}
margin="normal"
sx={{ width: '15ch' }}
select
>
<MenuItem value={1}>EMS</MenuItem>
<MenuItem value={2}>EMS+</MenuItem>
<MenuItem value={3}>HT3</MenuItem>
<MenuItem value={4}>{LL.HARDWARE()}</MenuItem>
</TextField>
</Grid>
<Grid>
<TextField
name="ems_bus_id"
label={LL.ID_OF(LL.EMS_BUS(0))}
value={data.ems_bus_id}
fullWidth
variant="outlined"
onChange={updateFormValue}
margin="normal"
select
>
<MenuItem value={0x0a}>Terminal (0x0A)</MenuItem>
<MenuItem value={0x0b}>Service Key (0x0B)</MenuItem>
<MenuItem value={0x0d}>Modem (0x0D)</MenuItem>
<MenuItem value={0x0e}>Converter (0x0E)</MenuItem>
<MenuItem value={0x0f}>Time Module (0x0F)</MenuItem>
<MenuItem value={0x48}>Gateway 1 (0x48)</MenuItem>
<MenuItem value={0x49}>Gateway 2 (0x49)</MenuItem>
<MenuItem value={0x4a}>Gateway 3 (0x4A)</MenuItem>
<MenuItem value={0x4b}>Gateway 4 (0x4B)</MenuItem>
<MenuItem value={0x4c}>Gateway 5 (0x4C)</MenuItem>
<MenuItem value={0x4d}>Gateway 7 (0x4D)</MenuItem>
</TextField>
</Grid>
</Grid>
<BlockFormControlLabel
control={
<Checkbox
checked={data.readonly_mode}
onChange={updateFormValue}
name="readonly_mode"
/>
}
label={LL.READONLY()}
/>
{data.led_gpio !== 0 && (
<BlockFormControlLabel
control={
<Checkbox
checked={data.hide_led}
onChange={updateFormValue}
name="hide_led"
/>
}
label={LL.HIDE_LED()}
/>
)}
<BlockFormControlLabel
control={
<Checkbox
checked={data.low_clock}
onChange={updateFormValue}
name="low_clock"
/>
}
label={LL.UNDERCLOCK_CPU()}
/>
<Typography sx={{ pb: 1, pt: 2 }} variant="h6" color="primary">
{LL.SPECIAL_FUNCTIONS()}
</Typography>
<BlockFormControlLabel
control={
<Checkbox
checked={data.developer_mode}
onChange={updateFormValue}
name="developer_mode"
/>
}
label={LL.DEVELOPER_MODE()}
/>
<BlockFormControlLabel
control={
<Checkbox
checked={data.boiler_heatingoff}
onChange={updateFormValue}
name="boiler_heatingoff"
/>
}
label={LL.HEATINGOFF()}
/>
<BlockFormControlLabel
control={
<Checkbox
checked={data.remote_timeout_en}
onChange={updateFormValue}
name="remote_timeout_en"
/>
}
label={LL.REMOTE_TIMEOUT_EN()}
/>
{data.remote_timeout_en && (
<Box mt={2}>
<ValidatedTextField
fieldErrors={fieldErrors}
name="remote_timeout"
label={LL.REMOTE_TIMEOUT()}
slotProps={{
input: HoursInputProps
}}
variant="outlined"
value={numberValue(data.remote_timeout)}
type="number"
onChange={updateFormValue}
/>
</Box>
)}
<Grid container spacing={2} rowSpacing={0}>
<BlockFormControlLabel
control={
<Checkbox
checked={data.shower_timer}
onChange={updateFormValue}
name="shower_timer"
/>
}
label={LL.ENABLE_SHOWER_TIMER()}
/>
<BlockFormControlLabel
control={
<Checkbox
checked={data.shower_alert}
onChange={updateFormValue}
name="shower_alert"
/>
}
label={LL.ENABLE_SHOWER_ALERT()}
disabled={!data.shower_timer}
/>
</Grid>
<Grid container spacing={2} sx={{ pt: 2 }}>
{data.shower_timer && (
<Grid>
<ValidatedTextField
fieldErrors={fieldErrors}
name="shower_min_duration"
label={LL.MIN_DURATION()}
slotProps={{
input: SecondsInputProps
}}
variant="outlined"
value={numberValue(data.shower_min_duration)}
fullWidth
type="number"
onChange={updateFormValue}
/>
</Grid>
)}
{data.shower_alert && (
<>
<Grid>
<ValidatedTextField
fieldErrors={fieldErrors}
name="shower_alert_trigger"
label={LL.TRIGGER_TIME()}
slotProps={{
input: MinutesInputProps
}}
variant="outlined"
value={numberValue(data.shower_alert_trigger)}
fullWidth
type="number"
onChange={updateFormValue}
disabled={!data.shower_timer}
/>
</Grid>
<Grid>
<ValidatedTextField
fieldErrors={fieldErrors}
name="shower_alert_coldshot"
label={LL.COLD_SHOT_DURATION()}
slotProps={{
input: SecondsInputProps
}}
variant="outlined"
value={numberValue(data.shower_alert_coldshot)}
fullWidth
type="number"
onChange={updateFormValue}
disabled={!data.shower_timer}
/>
</Grid>
</>
)}
</Grid>
{restartNeeded && (
<MessageBox my={2} level="warning" message={LL.RESTART_TEXT(0)}>
<Button
startIcon={<PowerSettingsNewIcon />}
variant="contained"
color="error"
onClick={restart}
>
{LL.RESTART()}
</Button>
</MessageBox>
)}
{!restartNeeded && dirtyFlags && dirtyFlags.length !== 0 && (
<ButtonRow>
<Button
startIcon={<CancelIcon />}
variant="outlined"
color="secondary"
type="submit"
onClick={loadData}
>
{LL.CANCEL()}
</Button>
<Button
startIcon={<WarningIcon color="warning" />}
variant="contained"
color="info"
type="submit"
onClick={validateAndSubmit}
>
{LL.APPLY_CHANGES(dirtyFlags.length)}
</Button>
</ButtonRow>
)}
</>
);
};
return (
<SectionContent>
{blocker ? <BlockNavigation blocker={blocker} /> : null}
{restarting ? <RestartMonitor /> : content()}
</SectionContent>
);
};
export default ApplicationSettings;

View File

@@ -0,0 +1,131 @@
import { useState } from 'react';
import { toast } from 'react-toastify';
import DownloadIcon from '@mui/icons-material/GetApp';
import { Box, Button, Typography } from '@mui/material';
import Grid from '@mui/material/Grid2';
import * as SystemApi from 'api/system';
import { API, callAction } from 'api/app';
import { useRequest } from 'alova/client';
import type { APIcall } from 'app/main/types';
import RestartMonitor from 'app/status/RestartMonitor';
import {
FormLoader,
SectionContent,
SingleUpload,
useLayoutTitle
} from 'components';
import { useI18nContext } from 'i18n/i18n-react';
import { saveFile } from 'utils';
const DownloadUpload = () => {
const { LL } = useI18nContext();
const [restarting, setRestarting] = useState<boolean>(false);
const { send: sendExportData } = useRequest(
(type: string) => callAction({ action: 'export', param: type }),
{
immediate: false
}
)
.onSuccess((event) => {
saveFile(event.data, event.args[0], '.json');
toast.info(LL.DOWNLOAD_SUCCESSFUL());
})
.onError((error) => {
toast.error(error.message);
});
const { send: sendAPI } = useRequest((data: APIcall) => API(data), {
immediate: false
});
const { data, send: loadData, error } = useRequest(SystemApi.readSystemStatus);
const doRestart = async () => {
setRestarting(true);
await sendAPI({ device: 'system', cmd: 'restart', id: 0 }).catch(
(error: Error) => {
toast.error(error.message);
}
);
};
useLayoutTitle(LL.DOWNLOAD_UPLOAD());
const content = () => {
if (!data) {
return <FormLoader onRetry={loadData} errorMessage={error?.message} />;
}
return (
<>
<Typography sx={{ pb: 2 }} variant="h6" color="primary">
{LL.DOWNLOAD(0)}
</Typography>
<Typography mb={1} variant="body1" color="warning">
{LL.DOWNLOAD_SETTINGS_TEXT()}.
</Typography>
<Grid container spacing={1}>
<Button
sx={{ ml: 2 }}
startIcon={<DownloadIcon />}
variant="outlined"
color="primary"
onClick={() => sendExportData('settings')}
>
{LL.SETTINGS_OF(LL.APPLICATION())}
</Button>
<Button
sx={{ ml: 2 }}
startIcon={<DownloadIcon />}
variant="outlined"
color="primary"
onClick={() => sendExportData('customizations')}
>
{LL.CUSTOMIZATIONS()}
</Button>
<Button
sx={{ ml: 2 }}
startIcon={<DownloadIcon />}
variant="outlined"
color="primary"
onClick={() => sendExportData('entities')}
>
{LL.CUSTOM_ENTITIES(0)}
</Button>
<Button
sx={{ ml: 2 }}
startIcon={<DownloadIcon />}
variant="outlined"
color="primary"
onClick={() => sendExportData('schedule')}
>
{LL.SCHEDULE(0)}
</Button>
</Grid>
<Typography sx={{ pt: 2, pb: 2 }} variant="h6" color="primary">
{LL.UPLOAD()}
</Typography>
<Box color="warning.main" sx={{ pb: 2 }}>
<Typography variant="body1">{LL.UPLOAD_TEXT()}.</Typography>
</Box>
<SingleUpload doRestart={doRestart} />
</>
);
};
return (
<SectionContent>{restarting ? <RestartMonitor /> : content()}</SectionContent>
);
};
export default DownloadUpload;

View File

@@ -0,0 +1,507 @@
import { useState } from 'react';
import CancelIcon from '@mui/icons-material/Cancel';
import WarningIcon from '@mui/icons-material/Warning';
import {
Button,
Checkbox,
InputAdornment,
MenuItem,
TextField,
Typography
} from '@mui/material';
import Grid from '@mui/material/Grid2';
import * as MqttApi from 'api/mqtt';
import type { ValidateFieldsError } from 'async-validator';
import {
BlockFormControlLabel,
BlockNavigation,
ButtonRow,
FormLoader,
SectionContent,
ValidatedPasswordField,
ValidatedTextField,
useLayoutTitle
} from 'components';
import { useI18nContext } from 'i18n/i18n-react';
import type { MqttSettingsType } from 'types';
import { numberValue, updateValueDirty, useRest } from 'utils';
import { createMqttSettingsValidator, validate } from 'validators';
const MqttSettings = () => {
const {
loadData,
saving,
data,
updateDataValue,
origData,
dirtyFlags,
setDirtyFlags,
blocker,
saveData,
errorMessage
} = useRest<MqttSettingsType>({
read: MqttApi.readMqttSettings,
update: MqttApi.updateMqttSettings
});
const { LL } = useI18nContext();
useLayoutTitle(LL.SETTINGS_OF('MQTT'));
const [fieldErrors, setFieldErrors] = useState<ValidateFieldsError>();
const updateFormValue = updateValueDirty(
origData,
dirtyFlags,
setDirtyFlags,
updateDataValue
);
const SecondsInputProps = {
endAdornment: <InputAdornment position="end">{LL.SECONDS()}</InputAdornment>
};
const content = () => {
if (!data) {
return <FormLoader onRetry={loadData} errorMessage={errorMessage} />;
}
const validateAndSubmit = async () => {
try {
setFieldErrors(undefined);
await validate(createMqttSettingsValidator(data), data);
await saveData();
} catch (error) {
setFieldErrors(error as ValidateFieldsError);
}
};
return (
<>
<BlockFormControlLabel
control={
<Checkbox
name="enabled"
checked={data.enabled}
onChange={updateFormValue}
/>
}
label={LL.ENABLE_MQTT()}
/>
<Grid container spacing={2} rowSpacing={0}>
<Grid>
<ValidatedTextField
fieldErrors={fieldErrors}
name="host"
label={LL.ADDRESS_OF(LL.BROKER())}
multiline
variant="outlined"
value={data.host}
onChange={updateFormValue}
margin="normal"
/>
</Grid>
<Grid>
<ValidatedTextField
fieldErrors={fieldErrors}
name="port"
label="Port"
variant="outlined"
value={numberValue(data.port)}
type="number"
onChange={updateFormValue}
margin="normal"
/>
</Grid>
<Grid>
<ValidatedTextField
fieldErrors={fieldErrors}
name="base"
label={LL.BASE_TOPIC()}
variant="outlined"
value={data.base}
onChange={updateFormValue}
margin="normal"
/>
</Grid>
<Grid>
<TextField
name="client_id"
label={LL.ID_OF(LL.CLIENT()) + ' (' + LL.OPTIONAL() + ')'}
variant="outlined"
value={data.client_id}
onChange={updateFormValue}
margin="normal"
/>
</Grid>
<Grid>
<TextField
name="username"
label={LL.USERNAME(0)}
variant="outlined"
value={data.username}
onChange={updateFormValue}
margin="normal"
/>
</Grid>
<Grid>
<ValidatedPasswordField
name="password"
label={LL.PASSWORD()}
variant="outlined"
value={data.password}
onChange={updateFormValue}
margin="normal"
/>
</Grid>
<Grid>
<ValidatedTextField
fieldErrors={fieldErrors}
name="keep_alive"
label="Keep Alive"
slotProps={{
input: SecondsInputProps
}}
variant="outlined"
value={numberValue(data.keep_alive)}
type="number"
onChange={updateFormValue}
margin="normal"
/>
</Grid>
<Grid>
<TextField
name="mqtt_qos"
label="QoS"
value={data.mqtt_qos}
variant="outlined"
onChange={updateFormValue}
margin="normal"
select
>
<MenuItem value={0}>0</MenuItem>
<MenuItem value={1}>1</MenuItem>
<MenuItem value={2}>2</MenuItem>
</TextField>
</Grid>
</Grid>
{data.enableTLS !== undefined && (
<BlockFormControlLabel
control={
<Checkbox
name="enableTLS"
checked={data.enableTLS}
onChange={updateFormValue}
/>
}
label={LL.ENABLE_TLS()}
/>
)}
{data.enableTLS === true && (
<ValidatedPasswordField
name="rootCA"
label={LL.CERT()}
variant="outlined"
value={data.rootCA}
onChange={updateFormValue}
margin="normal"
/>
)}
<BlockFormControlLabel
control={
<Checkbox
name="clean_session"
checked={data.clean_session}
onChange={updateFormValue}
/>
}
label={LL.MQTT_CLEAN_SESSION()}
/>
<BlockFormControlLabel
control={
<Checkbox
name="mqtt_retain"
checked={data.mqtt_retain}
onChange={updateFormValue}
/>
}
label={LL.MQTT_RETAIN_FLAG()}
/>
<Typography sx={{ pt: 2 }} variant="h6" color="primary">
{LL.FORMATTING()}
</Typography>
<TextField
name="nested_format"
label={LL.MQTT_FORMAT()}
value={data.nested_format}
variant="outlined"
onChange={updateFormValue}
margin="normal"
select
>
<MenuItem value={1}>{LL.MQTT_NEST_1()}</MenuItem>
<MenuItem value={2}>{LL.MQTT_NEST_2()}</MenuItem>
</TextField>
<BlockFormControlLabel
control={
<Checkbox
name="send_response"
checked={data.send_response}
onChange={updateFormValue}
/>
}
label={LL.MQTT_RESPONSE()}
/>
{!data.ha_enabled && (
<Grid container spacing={2} rowSpacing={0}>
<Grid>
<BlockFormControlLabel
control={
<Checkbox
name="publish_single"
checked={data.publish_single}
onChange={updateFormValue}
/>
}
label={LL.MQTT_PUBLISH_TEXT_1()}
/>
</Grid>
{data.publish_single && (
<Grid>
<BlockFormControlLabel
control={
<Checkbox
name="publish_single2cmd"
checked={data.publish_single2cmd}
onChange={updateFormValue}
/>
}
label={LL.MQTT_PUBLISH_TEXT_2()}
/>
</Grid>
)}
</Grid>
)}
{!data.publish_single && (
<Grid container spacing={2} rowSpacing={0}>
<Grid>
<BlockFormControlLabel
control={
<Checkbox
name="ha_enabled"
checked={data.ha_enabled}
onChange={updateFormValue}
/>
}
label={LL.MQTT_PUBLISH_TEXT_3()}
/>
</Grid>
{data.ha_enabled && (
<Grid container spacing={2} rowSpacing={0}>
<Grid>
<TextField
name="discovery_type"
label={LL.MQTT_PUBLISH_TEXT_5()}
value={data.discovery_type}
variant="outlined"
onChange={updateFormValue}
margin="normal"
select
>
<MenuItem value={0}>Home Assistant</MenuItem>
<MenuItem value={1}>Domoticz</MenuItem>
<MenuItem value={2}>Domoticz (latest)</MenuItem>
</TextField>
</Grid>
<Grid>
<TextField
name="discovery_prefix"
label={LL.MQTT_PUBLISH_TEXT_4()}
variant="outlined"
value={data.discovery_prefix}
onChange={updateFormValue}
margin="normal"
/>
</Grid>
<Grid>
<TextField
name="entity_format"
label={LL.MQTT_ENTITY_FORMAT()}
value={data.entity_format}
variant="outlined"
onChange={updateFormValue}
margin="normal"
select
>
<MenuItem value={0}>{LL.MQTT_ENTITY_FORMAT_0()}</MenuItem>
<MenuItem value={3}>
{LL.MQTT_ENTITY_FORMAT_1()}&nbsp;(v3.6)
</MenuItem>
<MenuItem value={4}>
{LL.MQTT_ENTITY_FORMAT_2()}&nbsp;(v3.6)
</MenuItem>
<MenuItem value={1}>{LL.MQTT_ENTITY_FORMAT_1()}</MenuItem>
<MenuItem value={2}>{LL.MQTT_ENTITY_FORMAT_2()}</MenuItem>
</TextField>
</Grid>
</Grid>
)}
</Grid>
)}
<Typography sx={{ pt: 2 }} variant="h6" color="primary">
{LL.MQTT_PUBLISH_INTERVALS()}&nbsp;(0=auto)
</Typography>
<Grid container spacing={2} rowSpacing={0}>
<Grid>
<ValidatedTextField
fieldErrors={fieldErrors}
name="publish_time_heartbeat"
label="Heartbeat"
slotProps={{
input: SecondsInputProps
}}
variant="outlined"
value={numberValue(data.publish_time_heartbeat)}
type="number"
onChange={updateFormValue}
margin="normal"
/>
</Grid>
<Grid>
<TextField
name="publish_time_boiler"
label={LL.MQTT_INT_BOILER()}
variant="outlined"
value={numberValue(data.publish_time_boiler)}
type="number"
onChange={updateFormValue}
margin="normal"
slotProps={{
input: SecondsInputProps
}}
/>
</Grid>
<Grid>
<TextField
name="publish_time_thermostat"
label={LL.MQTT_INT_THERMOSTATS()}
variant="outlined"
value={numberValue(data.publish_time_thermostat)}
type="number"
onChange={updateFormValue}
margin="normal"
slotProps={{
input: SecondsInputProps
}}
/>
</Grid>
<Grid>
<TextField
name="publish_time_solar"
label={LL.MQTT_INT_SOLAR()}
variant="outlined"
value={numberValue(data.publish_time_solar)}
type="number"
onChange={updateFormValue}
margin="normal"
slotProps={{
input: SecondsInputProps
}}
/>
</Grid>
<Grid>
<TextField
name="publish_time_mixer"
label={LL.MQTT_INT_MIXER()}
variant="outlined"
value={numberValue(data.publish_time_mixer)}
type="number"
onChange={updateFormValue}
margin="normal"
slotProps={{
input: SecondsInputProps
}}
/>
</Grid>
<Grid>
<TextField
name="publish_time_water"
label={LL.MQTT_INT_WATER()}
variant="outlined"
value={numberValue(data.publish_time_water)}
type="number"
onChange={updateFormValue}
margin="normal"
slotProps={{
input: SecondsInputProps
}}
/>
</Grid>
<Grid>
<TextField
name="publish_time_sensor"
label={LL.TEMP_SENSORS()}
variant="outlined"
value={numberValue(data.publish_time_sensor)}
type="number"
onChange={updateFormValue}
margin="normal"
slotProps={{
input: SecondsInputProps
}}
/>
</Grid>
<Grid>
<TextField
name="publish_time_other"
label={LL.DEFAULT(0)}
variant="outlined"
value={numberValue(data.publish_time_other)}
type="number"
onChange={updateFormValue}
margin="normal"
slotProps={{
input: SecondsInputProps
}}
/>
</Grid>
</Grid>
{dirtyFlags && dirtyFlags.length !== 0 && (
<ButtonRow>
<Button
startIcon={<CancelIcon />}
disabled={saving}
variant="outlined"
color="secondary"
type="submit"
onClick={loadData}
>
{LL.CANCEL()}
</Button>
<Button
startIcon={<WarningIcon color="warning" />}
disabled={saving}
variant="contained"
color="info"
type="submit"
onClick={validateAndSubmit}
>
{LL.APPLY_CHANGES(dirtyFlags.length)}
</Button>
</ButtonRow>
)}
</>
);
};
return (
<SectionContent>
{blocker ? <BlockNavigation blocker={blocker} /> : null}
{content()}
</SectionContent>
);
};
export default MqttSettings;

View File

@@ -0,0 +1,154 @@
import { useState } from 'react';
import CancelIcon from '@mui/icons-material/Cancel';
import WarningIcon from '@mui/icons-material/Warning';
import { Button, Checkbox, MenuItem } from '@mui/material';
import * as NTPApi from 'api/ntp';
import { readNTPSettings } from 'api/ntp';
import { updateState } from 'alova/client';
import type { ValidateFieldsError } from 'async-validator';
import {
BlockFormControlLabel,
BlockNavigation,
ButtonRow,
FormLoader,
SectionContent,
ValidatedTextField,
useLayoutTitle
} from 'components';
import { useI18nContext } from 'i18n/i18n-react';
import type { NTPSettingsType } from 'types';
import { updateValueDirty, useRest } from 'utils';
import { validate } from 'validators';
import { NTP_SETTINGS_VALIDATOR } from 'validators/ntp';
import { TIME_ZONES, selectedTimeZone, timeZoneSelectItems } from './TZ';
const NTPSettings = () => {
const {
loadData,
saving,
data,
updateDataValue,
origData,
dirtyFlags,
setDirtyFlags,
blocker,
saveData,
errorMessage
} = useRest<NTPSettingsType>({
read: NTPApi.readNTPSettings,
update: NTPApi.updateNTPSettings
});
const { LL } = useI18nContext();
useLayoutTitle(LL.SETTINGS_OF('NTP'));
const updateFormValue = updateValueDirty(
origData,
dirtyFlags,
setDirtyFlags,
updateDataValue
);
const [fieldErrors, setFieldErrors] = useState<ValidateFieldsError>();
const content = () => {
if (!data) {
return <FormLoader onRetry={loadData} errorMessage={errorMessage} />;
}
const validateAndSubmit = async () => {
try {
setFieldErrors(undefined);
await validate(NTP_SETTINGS_VALIDATOR, data);
await saveData();
} catch (error) {
setFieldErrors(error as ValidateFieldsError);
}
};
const changeTimeZone = (event: React.ChangeEvent<HTMLInputElement>) => {
updateFormValue(event);
void updateState(readNTPSettings(), (settings: NTPSettingsType) => ({
...settings,
tz_label: event.target.value,
tz_format: TIME_ZONES[event.target.value]
}));
};
return (
<>
<BlockFormControlLabel
control={
<Checkbox
name="enabled"
checked={data.enabled}
onChange={updateFormValue}
/>
}
label={LL.ENABLE_NTP()}
/>
<ValidatedTextField
fieldErrors={fieldErrors}
name="server"
label={LL.NTP_SERVER()}
fullWidth
variant="outlined"
value={data.server}
onChange={updateFormValue}
margin="normal"
/>
<ValidatedTextField
fieldErrors={fieldErrors}
name="tz_label"
label={LL.TIME_ZONE()}
fullWidth
variant="outlined"
value={selectedTimeZone(data.tz_label, data.tz_format)}
onChange={changeTimeZone}
margin="normal"
select
>
<MenuItem disabled>{LL.TIME_ZONE()}...</MenuItem>
{timeZoneSelectItems()}
</ValidatedTextField>
{dirtyFlags && dirtyFlags.length !== 0 && (
<ButtonRow>
<Button
startIcon={<CancelIcon />}
disabled={saving}
variant="outlined"
color="secondary"
type="submit"
onClick={loadData}
>
{LL.CANCEL()}
</Button>
<Button
startIcon={<WarningIcon color="warning" />}
disabled={saving}
variant="contained"
color="info"
type="submit"
onClick={validateAndSubmit}
>
{LL.APPLY_CHANGES(dirtyFlags.length)}
</Button>
</ButtonRow>
)}
</>
);
};
return (
<SectionContent>
{blocker ? <BlockNavigation blocker={blocker} /> : null}
{content()}
</SectionContent>
);
};
export default NTPSettings;

View File

@@ -0,0 +1,176 @@
import { useState } from 'react';
import AccessTimeIcon from '@mui/icons-material/AccessTime';
import BuildIcon from '@mui/icons-material/Build';
import CancelIcon from '@mui/icons-material/Cancel';
import DeviceHubIcon from '@mui/icons-material/DeviceHub';
import ImportExportIcon from '@mui/icons-material/ImportExport';
import LockIcon from '@mui/icons-material/Lock';
import SettingsBackupRestoreIcon from '@mui/icons-material/SettingsBackupRestore';
import SettingsEthernetIcon from '@mui/icons-material/SettingsEthernet';
import SettingsInputAntennaIcon from '@mui/icons-material/SettingsInputAntenna';
import TuneIcon from '@mui/icons-material/Tune';
import ViewModuleIcon from '@mui/icons-material/ViewModule';
import {
Box,
Button,
Dialog,
DialogActions,
DialogContent,
DialogTitle,
List
} from '@mui/material';
import { API, callAction } from 'api/app';
import { dialogStyle } from 'CustomTheme';
import { useRequest } from 'alova/client';
import type { APIcall } from 'app/main/types';
import { SectionContent, useLayoutTitle } from 'components';
import ListMenuItem from 'components/layout/ListMenuItem';
import { useI18nContext } from 'i18n/i18n-react';
const Settings = () => {
const { LL } = useI18nContext();
useLayoutTitle(LL.SETTINGS(0));
const [confirmFactoryReset, setConfirmFactoryReset] = useState<boolean>(false);
const { send: sendAPI } = useRequest((data: APIcall) => API(data), {
immediate: false
});
// call checkUpgrade with no param to fetch EMS-ESP version
const { data } = useRequest(() => callAction({ action: 'checkUpgrade' }), {
initialData: { emsesp_version: '...' }
});
const doFormat = async () => {
await sendAPI({ device: 'system', cmd: 'format', id: 0 }).then(() => {
setConfirmFactoryReset(false);
});
};
const renderFactoryResetDialog = () => (
<Dialog
sx={dialogStyle}
open={confirmFactoryReset}
onClose={() => setConfirmFactoryReset(false)}
>
<DialogTitle>{LL.FACTORY_RESET()}</DialogTitle>
<DialogContent dividers>{LL.SYSTEM_FACTORY_TEXT_DIALOG()}</DialogContent>
<DialogActions>
<Button
startIcon={<CancelIcon />}
variant="outlined"
onClick={() => setConfirmFactoryReset(false)}
color="secondary"
>
{LL.CANCEL()}
</Button>
<Button
startIcon={<SettingsBackupRestoreIcon />}
variant="outlined"
onClick={doFormat}
color="error"
>
{LL.FACTORY_RESET()}
</Button>
</DialogActions>
</Dialog>
);
const content = () => (
<>
<List sx={{ borderRadius: 3, border: '2px solid grey' }}>
<ListMenuItem
icon={BuildIcon}
bgcolor="#72caf9"
label={LL.EMS_ESP_VER()}
text={data.emsesp_version}
to="version"
/>
<ListMenuItem
icon={TuneIcon}
bgcolor="#134ba2"
label={LL.APPLICATION()}
text={LL.APPLICATION_SETTINGS_1()}
to="application"
/>
<ListMenuItem
icon={SettingsEthernetIcon}
bgcolor="#40828f"
label={LL.NETWORK(0)}
text={LL.CONFIGURE(LL.SETTINGS_OF(LL.NETWORK(1)))}
to="network"
/>
<ListMenuItem
icon={SettingsInputAntennaIcon}
bgcolor="#5f9a5f"
label={LL.ACCESS_POINT(0)}
text={LL.CONFIGURE(LL.ACCESS_POINT(1))}
to="ap"
/>
<ListMenuItem
icon={AccessTimeIcon}
bgcolor="#c5572c"
label="NTP"
text={LL.CONFIGURE(LL.LOCAL_TIME(1))}
to="ntp"
/>
<ListMenuItem
icon={DeviceHubIcon}
bgcolor="#68374d"
label="MQTT"
text={LL.CONFIGURE('MQTT')}
to="mqtt"
/>
<ListMenuItem
icon={LockIcon}
label={LL.SECURITY(0)}
text={LL.SECURITY_1()}
to="security"
/>
<ListMenuItem
icon={ViewModuleIcon}
bgcolor="#efc34b"
label={LL.MODULES()}
text={LL.MODULES_1()}
to="modules"
/>
<ListMenuItem
icon={ImportExportIcon}
bgcolor="#5d89f7"
label={LL.DOWNLOAD_UPLOAD()}
text={LL.DOWNLOAD_UPLOAD_1()}
to="upload"
/>
</List>
{renderFactoryResetDialog()}
<Box mt={2} display="flex" flexWrap="wrap">
<Button
startIcon={<SettingsBackupRestoreIcon />}
variant="outlined"
onClick={() => setConfirmFactoryReset(true)}
color="error"
>
{LL.FACTORY_RESET()}
</Button>
</Box>
</>
);
return <SectionContent>{content()}</SectionContent>;
};
export default Settings;

View File

@@ -1,8 +1,6 @@
import { MenuItem } from '@mui/material';
type TimeZones = {
[name: string]: string;
};
type TimeZones = Record<string, string>;
export const TIME_ZONES: TimeZones = {
'Africa/Abidjan': 'GMT0',

View File

@@ -0,0 +1,277 @@
import { useState } from 'react';
import { toast } from 'react-toastify';
import CancelIcon from '@mui/icons-material/Cancel';
import InfoOutlinedIcon from '@mui/icons-material/InfoOutlined';
import WarningIcon from '@mui/icons-material/Warning';
import {
Box,
Button,
Dialog,
DialogActions,
DialogContent,
DialogTitle,
Divider,
Link,
Typography
} from '@mui/material';
import Grid from '@mui/material/Grid2';
import * as SystemApi from 'api/system';
import { callAction } from 'api/app';
import { getDevVersion, getStableVersion } from 'api/system';
import { dialogStyle } from 'CustomTheme';
import { useRequest } from 'alova/client';
import RestartMonitor from 'app/status/RestartMonitor';
import { FormLoader, SectionContent, useLayoutTitle } from 'components';
import { useI18nContext } from 'i18n/i18n-react';
const Version = () => {
const { LL } = useI18nContext();
const [restarting, setRestarting] = useState<boolean>(false);
const [openDialog, setOpenDialog] = useState<boolean>(false);
const [useDev, setUseDev] = useState<boolean>(false);
const [upgradeAvailable, setUpgradeAvailable] = useState<boolean>(false);
const { send: sendCheckUpgrade } = useRequest(
(version: string) => callAction({ action: 'checkUpgrade', param: version }),
{
immediate: false
}
).onSuccess((event) => {
const data = event.data as { emsesp_version: string; upgradeable: boolean };
setUpgradeAvailable(data.upgradeable);
});
const { data, send: loadData, error } = useRequest(SystemApi.readSystemStatus);
const { send: sendUploadURL } = useRequest(
(url: string) => callAction({ action: 'uploadURL', param: url }),
{
immediate: false
}
);
// called immediately to get the latest version, on page load
const { data: latestVersion } = useRequest(getStableVersion, {
// uncomment next 2 lines for testing, uses https://github.com/emsesp/EMS-ESP32/releases/download/v3.6.5/EMS-ESP-3_6_5-ESP32-16MB+.bin
// immediate: false,
// initialData: '3.6.5'
});
// called immediately to get the latest version, on page load, then check for upgrade (works for both dev and stable)
const { data: latestDevVersion } = useRequest(getDevVersion, {
// uncomment next 2 lines for testing, uses https://github.com/emsesp/EMS-ESP32/releases/download/latest/EMS-ESP-3_7_0-dev_31-ESP32-16MB+.bin
// immediate: false,
// initialData: '3.7.0-dev.32'
}).onSuccess((event) => {
void sendCheckUpgrade(event.data);
});
const STABLE_URL = 'https://github.com/emsesp/EMS-ESP32/releases/download/';
const STABLE_RELNOTES_URL =
'https://github.com/emsesp/EMS-ESP32/blob/main/CHANGELOG.md';
const DEV_URL = 'https://github.com/emsesp/EMS-ESP32/releases/download/latest/';
const DEV_RELNOTES_URL =
'https://github.com/emsesp/EMS-ESP32/blob/dev/CHANGELOG_LATEST.md';
const getBinURL = (useDevVersion: boolean) => {
if (!latestVersion || !latestDevVersion) {
return '';
}
const filename =
'EMS-ESP-' +
(useDevVersion ? latestDevVersion : latestVersion).replaceAll('.', '_') +
'-' +
getPlatform() +
'.bin';
return useDevVersion
? DEV_URL + filename
: STABLE_URL + 'v' + latestVersion + '/' + filename;
};
const getPlatform = () => {
return (
[data.esp_platform, data.flash_chip_size >= 16384 ? '16MB' : '4MB'].join('-') +
(data.psram ? '+' : '')
);
};
const installFirmwareURL = async (url: string) => {
await sendUploadURL(url).catch((error: Error) => {
toast.error(error.message);
});
setRestarting(true);
};
useLayoutTitle(LL.EMS_ESP_VER());
const internet_live =
latestDevVersion !== undefined && latestVersion !== undefined;
const renderUploadDialog = () => {
if (!internet_live) {
return null;
}
return (
<Dialog
sx={dialogStyle}
open={openDialog}
onClose={() => setOpenDialog(false)}
>
<DialogTitle>
{LL.INSTALL('') +
' ' +
(useDev ? LL.DEVELOPMENT() : LL.STABLE()) +
' Firmware'}
</DialogTitle>
<DialogContent dividers>
<Typography mb={2}>
{LL.INSTALL_VERSION(useDev ? latestDevVersion : latestVersion)}
</Typography>
<Link
target="_blank"
href={useDev ? DEV_RELNOTES_URL : STABLE_RELNOTES_URL}
color="primary"
>
changelog
</Link>
&nbsp;|&nbsp;
<Link target="_blank" href={getBinURL(useDev)} color="primary">
{LL.DOWNLOAD(1)}
</Link>
</DialogContent>
<DialogActions>
<Button
startIcon={<CancelIcon />}
variant="outlined"
onClick={() => setOpenDialog(false)}
color="secondary"
>
{LL.CANCEL()}
</Button>
<Button
startIcon={<WarningIcon color="warning" />}
variant="outlined"
onClick={() => installFirmwareURL(getBinURL(useDev))}
color="primary"
>
{LL.INSTALL('')}
</Button>
</DialogActions>
</Dialog>
);
};
// useDevVersion = true to force using the dev version
const showFirmwareDialog = (useDevVersion: boolean) => {
if (useDevVersion || data.emsesp_version.includes('dev')) {
setUseDev(true);
}
setOpenDialog(true);
};
const content = () => {
if (!data) {
return <FormLoader onRetry={loadData} errorMessage={error?.message} />;
}
const isDev = data.emsesp_version.includes('dev');
return (
<>
<Box p={2} border="1px solid grey" borderRadius={2}>
<Grid container spacing={3}>
<Grid mb={1}>
<Typography mb={1} fontWeight={'fontWeightBold'}>
{LL.VERSION()}
</Typography>
<Typography mb={1} fontWeight={'fontWeightBold'}>
Platform
</Typography>
<Typography mb={1} fontWeight={'fontWeightBold'}>
Release
</Typography>
</Grid>
<Grid>
<Typography mb={1}>
{data.emsesp_version}
{data.build_flags && (
<Typography variant="caption">
&nbsp; &#40;{data.build_flags}&#41;
</Typography>
)}
</Typography>
<Typography mb={1}>{getPlatform()}</Typography>
<Typography>
{isDev ? LL.DEVELOPMENT() : LL.STABLE()}&nbsp;
<Link
target="_blank"
href={useDev ? DEV_RELNOTES_URL : STABLE_RELNOTES_URL}
color="primary"
>
(changelog)
</Link>
</Typography>
</Grid>
</Grid>
<Divider />
{!isDev && (
<Button
sx={{ mt: 2 }}
variant="outlined"
color="primary"
size="small"
onClick={() => showFirmwareDialog(true)}
>
{LL.SWITCH_DEV()}
</Button>
)}
<Typography mt={2} color="warning">
<InfoOutlinedIcon color="warning" sx={{ verticalAlign: 'middle' }} />
&nbsp;&nbsp;
{upgradeAvailable ? LL.UPGRADE_AVAILABLE() : LL.LATEST_VERSION()}
{upgradeAvailable &&
internet_live &&
(data.psram ? (
<Button
sx={{ ml: 2, textTransform: 'none' }}
variant="outlined"
color="primary"
size="small"
onClick={() => showFirmwareDialog(false)}
>
{isDev
? LL.INSTALL('v' + latestDevVersion)
: LL.INSTALL('v' + latestVersion)}
</Button>
) : (
<>
&nbsp;&nbsp;
<Link target="_blank" href={getBinURL(isDev)} color="primary">
{LL.DOWNLOAD(1)}&nbsp;v
{isDev ? latestDevVersion : latestVersion}
</Link>
</>
))}
</Typography>
{renderUploadDialog()}
</Box>
</>
);
};
return (
<SectionContent>{restarting ? <RestartMonitor /> : content()}</SectionContent>
);
};
export default Version;

View File

@@ -0,0 +1,57 @@
import { useCallback, useState } from 'react';
import { Navigate, Route, Routes, useNavigate } from 'react-router-dom';
import { Tab } from '@mui/material';
import { RouterTabs, useLayoutTitle, useRouterTab } from 'components';
import { useI18nContext } from 'i18n/i18n-react';
import type { WiFiNetwork } from 'types';
import NetworkSettings from './NetworkSettings';
import { WiFiConnectionContext } from './WiFiConnectionContext';
import WiFiNetworkScanner from './WiFiNetworkScanner';
const Network = () => {
const { LL } = useI18nContext();
useLayoutTitle(LL.SETTINGS_OF(LL.NETWORK(0)));
const { routerTab } = useRouterTab();
const navigate = useNavigate();
const [selectedNetwork, setSelectedNetwork] = useState<WiFiNetwork>();
const selectNetwork = useCallback(
(network: WiFiNetwork) => {
setSelectedNetwork(network);
navigate('settings');
},
[navigate]
);
const deselectNetwork = useCallback(() => {
setSelectedNetwork(undefined);
}, []);
return (
<WiFiConnectionContext.Provider
value={{
selectedNetwork,
selectNetwork,
deselectNetwork
}}
>
<RouterTabs value={routerTab}>
<Tab value="settings" label={LL.SETTINGS_OF(LL.NETWORK(1))} />
<Tab value="scan" label={LL.NETWORK_SCAN()} />
</RouterTabs>
<Routes>
<Route path="scan" element={<WiFiNetworkScanner />} />
<Route path="settings" element={<NetworkSettings />} />
<Route path="*" element={<Navigate replace to="settings" />} />
</Routes>
</WiFiConnectionContext.Provider>
);
};
export default Network;

View File

@@ -0,0 +1,408 @@
import { useContext, useEffect, useState } from 'react';
import { toast } from 'react-toastify';
import CancelIcon from '@mui/icons-material/Cancel';
import DeleteIcon from '@mui/icons-material/Delete';
import LockIcon from '@mui/icons-material/Lock';
import LockOpenIcon from '@mui/icons-material/LockOpen';
import PowerSettingsNewIcon from '@mui/icons-material/PowerSettingsNew';
import WarningIcon from '@mui/icons-material/Warning';
import {
Avatar,
Button,
Checkbox,
IconButton,
List,
ListItem,
ListItemAvatar,
ListItemText,
MenuItem,
TextField,
Typography
} from '@mui/material';
import * as NetworkApi from 'api/network';
import { API } from 'api/app';
import { updateState, useRequest } from 'alova/client';
import type { APIcall } from 'app/main/types';
import type { ValidateFieldsError } from 'async-validator';
import {
BlockFormControlLabel,
BlockNavigation,
ButtonRow,
FormLoader,
MessageBox,
SectionContent,
ValidatedPasswordField,
ValidatedTextField
} from 'components';
import { useI18nContext } from 'i18n/i18n-react';
import type { NetworkSettingsType } from 'types';
import { updateValueDirty, useRest } from 'utils';
import { validate } from 'validators';
import { createNetworkSettingsValidator } from 'validators/network';
import RestartMonitor from '../../status/RestartMonitor';
import { WiFiConnectionContext } from './WiFiConnectionContext';
import { isNetworkOpen, networkSecurityMode } from './WiFiNetworkSelector';
const NetworkSettings = () => {
const { LL } = useI18nContext();
const { selectedNetwork, deselectNetwork } = useContext(WiFiConnectionContext);
const [initialized, setInitialized] = useState(false);
const [restarting, setRestarting] = useState(false);
const {
loadData,
saving,
data,
updateDataValue,
origData,
dirtyFlags,
setDirtyFlags,
blocker,
saveData,
errorMessage,
restartNeeded
} = useRest<NetworkSettingsType>({
read: NetworkApi.readNetworkSettings,
update: NetworkApi.updateNetworkSettings
});
const { send: sendAPI } = useRequest((data: APIcall) => API(data), {
immediate: false
});
useEffect(() => {
if (!initialized && data) {
if (selectedNetwork) {
void updateState(
NetworkApi.readNetworkSettings(),
(current_data: NetworkSettingsType) => ({
ssid: selectedNetwork.ssid,
bssid: selectedNetwork.bssid,
password: current_data ? current_data.password : '',
hostname: current_data?.hostname,
static_ip_config: false,
bandwidth20: false,
tx_power: 0,
nosleep: false,
enableMDNS: true,
enableCORS: false,
CORSOrigin: '*'
})
);
}
setInitialized(true);
}
}, [initialized, setInitialized, data, selectedNetwork]);
const updateFormValue = updateValueDirty(
origData,
dirtyFlags,
setDirtyFlags,
updateDataValue
);
const [fieldErrors, setFieldErrors] = useState<ValidateFieldsError>();
useEffect(() => deselectNetwork, [deselectNetwork]);
const content = () => {
if (!data) {
return <FormLoader onRetry={loadData} errorMessage={errorMessage} />;
}
const validateAndSubmit = async () => {
try {
setFieldErrors(undefined);
await validate(createNetworkSettingsValidator(data), data);
await saveData();
} catch (error) {
setFieldErrors(error as ValidateFieldsError);
}
deselectNetwork();
};
const setCancel = async () => {
deselectNetwork();
await loadData();
};
const doRestart = async () => {
setRestarting(true);
await sendAPI({ device: 'system', cmd: 'restart', id: 0 }).catch(
(error: Error) => {
toast.error(error.message);
}
);
};
return (
<>
<Typography variant="h6" color="primary">
WiFi
</Typography>
{selectedNetwork ? (
<List>
<ListItem>
<ListItemAvatar>
<Avatar>
{isNetworkOpen(selectedNetwork) ? <LockOpenIcon /> : <LockIcon />}
</Avatar>
</ListItemAvatar>
<ListItemText
primary={selectedNetwork.ssid}
secondary={
'Security: ' +
networkSecurityMode(selectedNetwork) +
', Ch: ' +
selectedNetwork.channel +
', bssid: ' +
selectedNetwork.bssid
}
/>
<IconButton onClick={setCancel}>
<DeleteIcon />
</IconButton>
</ListItem>
</List>
) : (
<ValidatedTextField
fieldErrors={fieldErrors}
name="ssid"
label={'SSID (' + LL.NETWORK_BLANK_SSID() + ')'}
fullWidth
variant="outlined"
value={data.ssid}
onChange={updateFormValue}
margin="normal"
/>
)}
<ValidatedTextField
fieldErrors={fieldErrors}
name="bssid"
label={'BSSID (' + LL.NETWORK_BLANK_BSSID() + ')'}
fullWidth
variant="outlined"
value={data.bssid}
onChange={updateFormValue}
margin="normal"
/>
{(!selectedNetwork || !isNetworkOpen(selectedNetwork)) && (
<ValidatedPasswordField
fieldErrors={fieldErrors}
name="password"
label={LL.PASSWORD()}
fullWidth
variant="outlined"
value={data.password}
onChange={updateFormValue}
margin="normal"
/>
)}
<TextField
name="tx_power"
label={LL.TX_POWER()}
fullWidth
variant="outlined"
value={data.tx_power}
onChange={updateFormValue}
margin="normal"
select
>
<MenuItem value={0}>Auto</MenuItem>
<MenuItem value={78}>19.5 dBm</MenuItem>
<MenuItem value={76}>19 dBm</MenuItem>
<MenuItem value={74}>18.5 dBm</MenuItem>
<MenuItem value={68}>17 dBm</MenuItem>
<MenuItem value={60}>15 dBm</MenuItem>
<MenuItem value={52}>13 dBm</MenuItem>
<MenuItem value={44}>11 dBm</MenuItem>
<MenuItem value={34}>8.5 dBm</MenuItem>
<MenuItem value={28}>7 dBm</MenuItem>
<MenuItem value={20}>5 dBm</MenuItem>
<MenuItem value={8}>2 dBm</MenuItem>
</TextField>
<BlockFormControlLabel
control={
<Checkbox
name="nosleep"
checked={data.nosleep}
onChange={updateFormValue}
/>
}
label={LL.NETWORK_DISABLE_SLEEP()}
/>
<BlockFormControlLabel
control={
<Checkbox
name="bandwidth20"
checked={data.bandwidth20}
onChange={updateFormValue}
/>
}
label={LL.NETWORK_LOW_BAND()}
/>
<Typography sx={{ pt: 2 }} variant="h6" color="primary">
{LL.GENERAL_OPTIONS()}
</Typography>
<ValidatedTextField
fieldErrors={fieldErrors}
name="hostname"
label={LL.HOSTNAME()}
fullWidth
variant="outlined"
value={data.hostname}
onChange={updateFormValue}
margin="normal"
/>
<BlockFormControlLabel
control={
<Checkbox
name="enableMDNS"
checked={data.enableMDNS}
onChange={updateFormValue}
/>
}
label={LL.NETWORK_USE_DNS()}
/>
<BlockFormControlLabel
control={
<Checkbox
name="enableCORS"
checked={data.enableCORS}
onChange={updateFormValue}
/>
}
label={LL.NETWORK_ENABLE_CORS()}
/>
{data.enableCORS && (
<TextField
name="CORSOrigin"
label={LL.NETWORK_CORS_ORIGIN()}
fullWidth
variant="outlined"
value={data.CORSOrigin}
onChange={updateFormValue}
margin="normal"
/>
)}
<BlockFormControlLabel
control={
<Checkbox
name="static_ip_config"
checked={data.static_ip_config}
onChange={updateFormValue}
/>
}
label={LL.NETWORK_FIXED_IP()}
/>
{data.static_ip_config && (
<>
<ValidatedTextField
fieldErrors={fieldErrors}
name="local_ip"
label={LL.AP_LOCAL_IP()}
fullWidth
variant="outlined"
value={data.local_ip}
onChange={updateFormValue}
margin="normal"
/>
<ValidatedTextField
fieldErrors={fieldErrors}
name="gateway_ip"
label={LL.NETWORK_GATEWAY()}
fullWidth
variant="outlined"
value={data.gateway_ip}
onChange={updateFormValue}
margin="normal"
/>
<ValidatedTextField
fieldErrors={fieldErrors}
name="subnet_mask"
label={LL.NETWORK_SUBNET()}
fullWidth
variant="outlined"
value={data.subnet_mask}
onChange={updateFormValue}
margin="normal"
/>
<ValidatedTextField
fieldErrors={fieldErrors}
name="dns_ip_1"
label="DNS #1"
fullWidth
variant="outlined"
value={data.dns_ip_1}
onChange={updateFormValue}
margin="normal"
/>
<ValidatedTextField
fieldErrors={fieldErrors}
name="dns_ip_2"
label="DNS #2"
fullWidth
variant="outlined"
value={data.dns_ip_2}
onChange={updateFormValue}
margin="normal"
/>
</>
)}
{restartNeeded && (
<MessageBox my={2} level="warning" message={LL.RESTART_TEXT(0)}>
<Button
startIcon={<PowerSettingsNewIcon />}
variant="contained"
color="error"
onClick={doRestart}
>
{LL.RESTART()}
</Button>
</MessageBox>
)}
{!restartNeeded &&
(selectedNetwork || (dirtyFlags && dirtyFlags.length !== 0)) && (
<ButtonRow>
<Button
startIcon={<CancelIcon />}
disabled={saving}
variant="outlined"
color="secondary"
type="submit"
onClick={loadData}
>
{LL.CANCEL()}
</Button>
<Button
startIcon={<WarningIcon color="warning" />}
disabled={saving}
variant="contained"
color="info"
type="submit"
onClick={validateAndSubmit}
>
{LL.APPLY_CHANGES(dirtyFlags.length)}
</Button>
</ButtonRow>
)}
</>
);
};
return (
<SectionContent>
{blocker ? <BlockNavigation blocker={blocker} /> : null}
{restarting ? <RestartMonitor /> : content()}
</SectionContent>
);
};
export default NetworkSettings;

View File

@@ -1,5 +1,6 @@
import { createContext } from 'react';
import { WiFiNetwork } from '../../types';
import type { WiFiNetwork } from 'types';
export interface WiFiConnectionContextValue {
selectedNetwork?: WiFiNetwork;
@@ -8,4 +9,6 @@ export interface WiFiConnectionContextValue {
}
const WiFiConnectionContextDefaultValue = {} as WiFiConnectionContextValue;
export const WiFiConnectionContext = createContext(WiFiConnectionContextDefaultValue);
export const WiFiConnectionContext = createContext(
WiFiConnectionContextDefaultValue
);

View File

@@ -0,0 +1,78 @@
import { useRef, useState } from 'react';
import PermScanWifiIcon from '@mui/icons-material/PermScanWifi';
import { Button } from '@mui/material';
import * as NetworkApi from 'api/network';
import { updateState, useRequest } from 'alova/client';
import { ButtonRow, FormLoader, SectionContent } from 'components';
import { useI18nContext } from 'i18n/i18n-react';
import WiFiNetworkSelector from './WiFiNetworkSelector';
const NUM_POLLS = 10;
const POLLING_FREQUENCY = 1000;
const WiFiNetworkScanner = () => {
const pollCount = useRef(0);
const { LL } = useI18nContext();
const [errorMessage, setErrorMessage] = useState<string>();
// is called on page load to start network scan
const { send: scanNetworks } = useRequest(NetworkApi.scanNetworks).onComplete(
() => {
pollCount.current = 0;
setErrorMessage(undefined);
void updateState(NetworkApi.listNetworks(), () => undefined);
void getNetworkList();
}
);
const { data: networkList, send: getNetworkList } = useRequest(
NetworkApi.listNetworks,
{
immediate: false
}
).onSuccess((event) => {
// is called when network scan is completed
if (!event.data) {
const completedPollCount = pollCount.current + 1;
if (completedPollCount < NUM_POLLS) {
pollCount.current = completedPollCount;
setTimeout(getNetworkList, POLLING_FREQUENCY);
} else {
setErrorMessage(LL.PROBLEM_LOADING());
pollCount.current = 0;
}
}
});
const renderNetworkScanner = () => {
if (!networkList) {
return (
<FormLoader message={LL.SCANNING() + '...'} errorMessage={errorMessage} />
);
}
return <WiFiNetworkSelector networkList={networkList} />;
};
return (
<SectionContent>
{renderNetworkScanner()}
<ButtonRow>
<Button
startIcon={<PermScanWifiIcon />}
variant="outlined"
color="secondary"
onClick={scanNetworks}
disabled={!errorMessage && !networkList}
>
{LL.SCAN_AGAIN()}&hellip;
</Button>
</ButtonRow>
</SectionContent>
);
};
export default WiFiNetworkScanner;

Some files were not shown because too many files have changed in this diff Show More