libsupla

Masz pomysł na funkcjonalność lub koncepcję na rozwój projektu. Opisz wszystko tutaj.
QBA-dev
Posts: 14
Joined: Sat Mar 03, 2018 5:48 pm

Post

Dzień dobry

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);
}

...
}

API nie jest jeszcze stabilne, ale mimo to zapraszam do korzystania, rozwijania, zadawania pytań, krytyki itd.

A no i Suplowych Świąt życzę
User avatar
klew
Posts: 8647
Joined: Thu Jun 27, 2019 12:16 pm
Location: Wrocław

Post

Ciekawy projekt :)

Masz już jakieś plany wdrożenia tego na jakimś swoim urządzeniu?
Widzimy się na Supla Offline Party vol. 2 :!:
QBA-dev
Posts: 14
Joined: Sat Mar 03, 2018 5:48 pm

Post

Niestety w firmie nie mamy urządzeń typowo do domu i pod indywidualnego klienta, ale jeśli się pojawią, to z pewnością będę uderzał z tym do Was.

Robię powoli w wolnym czasie swój firmware na ESP8266. Do czujników korzystam z tego repo:
https://github.com/UncleRus/esp-idf-lib
Od kilku tygodni mam na tej mojej bibliotece zrobiony termometr na DHT22 i działa poprawnie.

Robię ten firmware przede wszystkim aby sprawdzić czego jeszcze bibliotece brakuje i co poprawić aby była jak najbardziej użyteczna w projektach.

Wszelkie uwagi dotyczące biblioteki mile widziane. Jeśli ktoś posiada inne platformy potrafiące się łączyć z internetem, a nie ma na nich jeszcze SUPLi, to zapraszam do portowania
QBA-dev
Posts: 14
Joined: Sat Mar 03, 2018 5:48 pm

Post

Cześć
Powoli coś się dzieje w temacie tej mojej biblioteki. Nie będę zakładał nowego wątku.

Mam pytanie o dodawanie urządzeń z poziomu aplikacji. Jakie są wymagania aby urządzenie pozwoliło się dodać przez kreator?
Z tego co zauważyłem:
1. Trzeba być podpiętym i zalogownym do domowego WiFi
stąd aplikacja będzie miała:
- adres email i serwera dla zalogowanego konta
- dane dostępowe do sieci domowej

2. Urządzenie musi stworzyć sieć WiFi z SSID zaczynającym się od "SUPLA-"

3. Na adresie 192.168.4.1 na endpoincie "/" powinno obsługiwać zapytanie http typu POST
i przyjmować zserializowaną(URLencoded) listę parametrów jak tu SUPLA /supla-espressif-esp

Z tego co widzę to aplikacja przyśle POSTem to co z formularza HTML:
  • sid : nazwa sieci WiFi
  • wpw: hasło WiFi
  • svr: adres serwera
  • eml: email
  • rbt: żądanie restartu
Czy wystarczy odpowiedzieć status kodem 200 obrobić te dane i zrestartować urządzenie?
Być może coś pominąłem?

@klew @pzygmunt
User avatar
klew
Posts: 8647
Joined: Thu Jun 27, 2019 12:16 pm
Location: Wrocław

Post

Apka najpierw robi GET na http://192.168.4.1 i szuka niektórych pól (np. LAST STATE) a także odczytuje sobie formularz.
Następnie uzupełnia formularz o dane dostępowe i wysyła go POSTem.
Parsuje też odpoweidź i szuka "data saved". Nie pamiętam też kiedy, ale wysyła pole rbt z jakąś wartością, aby urządzenie się zresetowało.

Dokładnie nie pamiętam szczegółów. Najłatwiej byłoby to po prostu odpalić sobie z logami na supla device (przykład WebInterface) i zobaczyć w logach co pokolei robi apka.
Ewentualnie tu masz kod z androida do tej procedury: https://github.com/SUPLA/supla-android/ ... eTask.java
Widzimy się na Supla Offline Party vol. 2 :!:
QBA-dev
Posts: 14
Joined: Sat Mar 03, 2018 5:48 pm

Post

klew wrote: Wed Apr 24, 2024 11:31 am Apka najpierw robi GET na http://192.168.4.1 i szuka niektórych pól (np. LAST STATE) a także odczytuje sobie formularz.
Następnie uzupełnia formularz o dane dostępowe i wysyła go POSTem.
Parsuje też odpoweidź i szuka "data saved". Nie pamiętam też kiedy, ale wysyła pole rbt z jakąś wartością, aby urządzenie się zresetowało.

Dokładnie nie pamiętam szczegółów. Najłatwiej byłoby to po prostu odpalić sobie z logami na supla device (przykład WebInterface) i zobaczyć w logach co pokolei robi apka.
Ewentualnie tu masz kod z androida do tej procedury: https://github.com/SUPLA/supla-android/ ... eTask.java
Dzięki wielkie
Korzystałem z przykładu od Ciebie w supla-device i zatrzymałem się właśnie na kroku gdzie aplikacja jakoś gada z urządzeniem i przy próbie zrobienia identycznie u mnie zwracało mi że urządzenie nie jest kompatybilne... niedługo będzie 8-)

Return to “Pomysły i koncepcje”