Popieram to rozwiązanie w całej rozciągłości. Bardzo dobra decyzja robić coś jako ogólne a nie szczególne.
Trochę spędziłem z rozkminianiem kodu supla-core i jest tam kilka rzeczy które powinny być zaimplementowane inaczej lata temu, a teraz się ciągną ale nie chcę tego jakoś bardzo krytykować bo kto lata temu wiedział co będzie w przyszłości?
Naprawdę doceniam dbałość o kompatybilność wsteczną i to że nawet dziś można wgrać buildy Przemka sprzed 10 lat z tego repo:
https://github.com/SUPLA/ESP8266 i wciąż działają z najnowszym serwerem
Co do tych naleciałości(szczególne zamiast ogólne) to mam na myśli na przykład te typy kanałów(widzę oznaczenie depractated i słusznie):
Code: Select all
#define SUPLA_CHANNELTYPE_RELAYHFD4 2000 // DEPRECATED
#define SUPLA_CHANNELTYPE_RELAYG5LA1A 2010 // DEPRECATED
#define SUPLA_CHANNELTYPE_2XRELAYG5LA1A 2020 // DEPRECATED
#define SUPLA_CHANNELTYPE_THERMOMETERDS18B20 3000 // DEPRECATED
#define SUPLA_CHANNELTYPE_DHT11 3010 // ver. >= 4 DEPRECATED
#define SUPLA_CHANNELTYPE_DHT22 3020 // ver. >= 4 DEPRECATED
#define SUPLA_CHANNELTYPE_DHT21 3022 // ver. >= 5 DEPRECATED
#define SUPLA_CHANNELTYPE_AM2302 3030 // ver. >= 4 DEPRECATED
#define SUPLA_CHANNELTYPE_AM2301 3032 // ver. >= 5 DEPRECATED
Wiem że wiszą w kodzie tylko dla zachowania kompatybilności wstecz
Odchodzę od meritum czyli alarmów, ale dokończę myśl:
Nie zbyt podoba mi się też to że w proto jest za dużo szczególnych detali związanych z GKW-01, podobnie z grzałkami HEATPOL
W sensie te definicje i powiązane struktury:
Code: Select all
#define SUPLA_DEVCFG_HOME_SCREEN_CONTENT_NONE (1ULL << 0)
#define SUPLA_DEVCFG_HOME_SCREEN_CONTENT_TEMPERATURE (1ULL << 1)
#define SUPLA_DEVCFG_HOME_SCREEN_CONTENT_TEMPERATURE_AND_HUMIDITY (1ULL << 2)
#define SUPLA_DEVCFG_HOME_SCREEN_CONTENT_TIME (1ULL << 3)
#define SUPLA_DEVCFG_HOME_SCREEN_CONTENT_TIME_DATE (1ULL << 4)
#define SUPLA_DEVCFG_HOME_SCREEN_CONTENT_TEMPERATURE_TIME (1ULL << 5)
#define SUPLA_DEVCFG_HOME_SCREEN_CONTENT_MAIN_AND_AUX_TEMPERATURE (1ULL << 6)
#define SUPLA_DEVCFG_HOME_SCREEN_CONTENT_MODE_OR_TEMPERATURE (1ULL << 7)
Do przemyślenia byłoby coś w stylu zaproponowania jakiegoś ogólnego formatu przesyłania konfiguracji urządzenia aplikacja/serwer/urządzenie w taki sposób żeby mieć zestaw opcji w stylu:
label:nazwa opcji
type: bool/num/oneof/text/color/player(PLAY/STOP/NEXT/PREV)
range: zakres dla danego parametru
I taki GKW-01 by mógł rejestrować się z czymś w stylu:
Code: Select all
"{
{"label":"TEMP_DISPLAY","type":"oneof","range":"NONE/TEMPERATURE/TEMPERATURE_AND_HUMIDITY"},
itd...
}"
Urządzenie zgłaszałoby serwerowi ten zestaw nastaw i zakresów przy rejestracji, a serwer zwracałby te nastawy aplikacji która by to renderowała i zwrotnie wysyłała do urządzenia. Serwer nie musiałby nawet znać zawartości takiej paczki danych tylko przerzucać je od urządzenia do aplikacji i odwrotnie.
Takie rozwiązanie byłoby podobne do propozycji z alarmami gdzie urządzenie będzie mieć zestaw swoich alarmów z ogólnego zbioru wszystkich możliwych alarmów