Kilka miesięcy temu na forum SUPLA pod tym tematem:
viewtopic.php?p=123537#p123537
Napisałem że przydałaby się taka minimalna biblioteka do łączenia z SUPLA Cloud.
I w sumie wtedy pomyślałem że łatwo gadać, trudniej coś zrobić.
Od jakiegoś czasu w wolnych chwilach dłubałem sobie swoją bibliotekę libsupla - opiera się na plikach z repo SUPLA-core, kompiluje do biblioteki dynamicznej i statycznej, i starałem się ja napisać tak, aby była łatwa do portowania.
Zrobiłem działające porty na ESP8266 i ESP32, a właściwie na ESP-IDF/RTOS SDK jako component, wspiera też CMake
Udostępniam ich kod na githubie:
https://github.com/QB4-dev/libsupla
https://github.com/QB4-dev/esp-libsupla
Wiem że @klew robi supla-device, szanuję jego pracę, uruchamiałem przykłady na ESP8266 RTOS SDK i fajnie to działa i rozumiem ideę - jeden firmware przeportowany na kilka platform.
Wydaje mi się jednak że trochę kobyła się z tego robi bo oprócz takiej core-owej funkcjonalności supla-device zawiera też rzeczy ściśle powiązane ze sprzętem - sterowniki do układów, sterowanie gpio itd. Moim zdaniem tak być nie powinno. Mogą być klasy typu sensor temperatury, przekaźnik, ale nie konkretny sprzęt.
Przykładowo taki Google robi tylko core do łączenia się z ich platformą:
https://github.com/GoogleCloudPlatform/ ... embedded-c
Nie ma tam ds18b20, DHT11, DHT22 itd.
Gdy już jest supla-device, gui-generic, wielu użytkowników zapyta pewnie:
https://www.youtube.com/watch?v=LL7k5ohMgYk
Otóż przyda się:
- ludziom którzy mają już jakiś produkt z Linuksem na pokładzie, albo na ESP i ciężko byłoby im dodać całą supla-device.
- ludziom którzy chcą zrobić urządzenie z SUPLą na jakiejś innej platformie: raspberry pi pico, tych układach od Bekena z WiFi itd.
Zawodowo zajmuję się Linuksem embedded i Yocto. Jak biblioteka będzie w miarę stabilnym stanie to zrobię jeszcze meta-warstwę do Yocto
Tak w skrócie pokażę jak z tego korzystać:
Na githubie jest opis instalacji, my zajmiemy się samym programowaniem:
Code: Select all
#include <libsupla/device.h> //dokładamy nagłówek naszej biblioteki
int main(void){
...
// Tworzymy strukturę z konfiguracją
struct supla_config supla_config = {
.email = "user@example.com",
.auth_key = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
.guid = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
.server = "svr.supla.org",
.ssl = 1
};
//Tworzymy i konfigurujemy nasze urządzenie
supla_dev_t *dev = supla_dev_create("Test Device",NULL);
supla_dev_set_config(dev,&supla_config);
// Tworzymy nowy kanał i dodajemy go do urzdzenia:
supla_channel_config_t temp_channel_config = {
.type = SUPLA_CHANNELTYPE_THERMOMETER ,
.supported_functions = SUPLA_CHANNELFNC_THERMOMETER,
.default_function = SUPLA_CHANNELFNC_THERMOMETER,
};
supla_channel_t *temp_channel = supla_channel_create(&temp_channel_config);
supla_dev_add_channel(dev,temp_channel);
//W nieskończonej pętli wykonujemy iterowanie
while(!app_quit){
supla_dev_iterate(dev);
usleep(10000);
}
...
}
A no i Suplowych Świąt życzę