Archiwizacja i wizualizacja danych

ZnowuJa
Posts: 11
Joined: Sat Dec 24, 2022 10:41 am

Post

Cześć,

Mam prośbę o pomoc w ułożeniu wykonalnego planu konfiguracji aplikacji Supla i całego ekosystemu.

Moim celem jest aby, przechowywać dane historyczne mierników temperatury i prądu w zewnętrznym repozytorum w celach archiwizacyjnych i reprezentacji graficznej. Na przykład przechowywanie w plikach CSV czy w bazie SQLowej (Postgress, MSSQL lub innej), natomiast wizualizacja w PowerBI czy Grafana.

I przyznam szczerze, że im więcej czytam tym bardziej głupieje.
Czy któryś z tych scenariuszy jest realizowalny I ewentualnie jak?
1) Lokalnie Supla Docker "zintegrowana" jakoś z Supla Cloud i wtedy dobrać się do bazy instancji dockerowej (MariaDB, tak?),
2) Ściągać dane historyczne (np. 2 razy dziennie) za pomocą API z instancji chmurowej?
3) Postawić Mosquitto lokalnie i skonfigurować w urządzeniach jako drugi MQTT i czytać tego brokera do bazy danych?

Dysponuję komputerem z Debianem, Windowsem, lutownicą :) i umiejętnościami (skrypty, python, c#, js).

Będę wdzięczny za pomoc.
User avatar
pzygmunt
Posts: 20302
Joined: Tue Jan 19, 2016 9:26 am
Location: Paczków
Been thanked: 59 times

Post

Osobiście sugeruję podłączyć się do chmurowego MQTT i zbierać dane na bieżąco. Inna droga to pobieranie danych przez API.
SUPLA.... Nareszcie w domu.
ZnowuJa
Posts: 11
Joined: Sat Dec 24, 2022 10:41 am

Post

Rozpoznałem temat z brokerem MQTT. To rozwiązanie wymaga jednak działania usługi klienckiej (tej po mojej stronie) non-stop. To może powodować pewne problemy, a poza tym nie bardzo mi potrzebne.

Podpytam zatem jeszcze o API. Przeglądałem dokumentację w apidocsach i na Githubie i raczej jednak skorzystam z tego endpointa 'channels_files'.
Zgodnie ze zwyczajem chciałem zobaczyć jak to działa, w sensie co można pociągnąć i jak sobie zbudować obiekt pod serializację, ale nie byłem w stanie przejść przez autoryzację w swaggerze. Wprowadziłem tam swoje id i secret (wygenerowane na Account>Integrations>MyOauthApps) i przeniosło mnie na xxx.supla.org/oauth/v2/auth i dostałem błąd {"error":"redirect_uri_mismatch","error_description":"The redirect URI provided does not match registered URI(s)."}. Albo zwraca 500kę.

Coś pewnie przegapiłem, ale nie mogę znaleźć co.

Mogę prosić o jakąś podpowiedź?

Pozdrawiam

////EDIT:
Oczywiście jak idziesz do dentysty to nie boli :). Znalazłem swój błąd: nie podałem redirecta.
Jednocześnie w opisie 'channels_files' jest chyba błąd. Przy logsType jest opis: "Type of the logs to delete. Some devices may gather multiple log types." To delete jest niepokojące :).

////EDIT 2. :
Czy jest gdzieś dostępna lista parametrów do określania jaki zakres chcemy ściągnąć?
Np. GET /api/v2.4.0/channels/XXXX/measurement-logs-download?from=20231101&to20231115.. Bo plik będzie ZIP bez hasła, tak?
ZnowuJa
Posts: 11
Joined: Sat Dec 24, 2022 10:41 am

Post

Chciałbym podbić swoje pytanie.
User avatar
fracz
Posts: 2342
Joined: Fri Oct 28, 2016 10:56 pm
Location: Kraków
Has thanked: 4 times
Been thanked: 6 times

Post

Listę dostępnych parametrów znajdziesz w dokumentacji API wybierając wskazany endpoint:

https://svr1.supla.org/api-docs/docs.html

Filtrowanie dostępne jest jedynie w endpoincie zwracającym dane. Przy pobieraniu pliku zawsze pobiera wszystkie dostępne dane.

---

Innym rozwiązaniem dla Ciebie może być wygenerowanie linku bezpośredniego z możliwością odczytu stanu i cykliczne odpytywanie tego linku, po czym zrzucanie jego odpowiedzi np. do CSV. Ktoś już prosił mnie o takie rozwiązanie i chciał np. zapisywać co minutę odczyty z MEW-a do pliku CSV i interesowało go napięcie, którego historii nie ma w "oficjalnych" logach. Skończłem z takim czymś:

Code: Select all

(A=$(curl -s 'https://svr9.supla.org/direct/AAA/XXX/read?format=json') && (echo -n `date --iso-8601=seconds` && echo -n ',' && echo -n $A | jq -j '.phases[0].voltage' && echo -n , && echo -n $A | jq -j '.phases[0].current' && echo -n ',' && echo -n $A | jq -j '.phases[1].voltage' && echo -n , && echo -n $A | jq -j '.phases[1].current' && echo -n ',' && echo -n $A | jq -j '.phases[2].voltage' && echo -n , && echo -n $A | jq '.phases[2].current')) >> dane.csv
Przy każdym wywołaniu powyższy skrypt zapisuje np. taką linię:

Code: Select all

2023-11-22T16:24:01+01:00,226.66,3.474,224.69,2.244,224.99,5.886
I potem można sobie z tym robić co się chce.

Powyższa komenda używa narzędzia jq: https://jqlang.github.io/jq/
ZnowuJa
Posts: 11
Joined: Sat Dec 24, 2022 10:41 am

Post

Dziękuje za wyczerpującą odpowiedź.

Lubię Restowe API i uważam, że wszystko powinno mieć swoje API. Powoli zresztą już się tak dzieje :D ...
Zbieranie napięcia jest super, ale na szczęście ogarnia mi to API SolarEdga.

Nie zostanę zbanowany jak co godzinę pobiorę całą historię?

Pozdrawiam

Return to “Pomoc”