MichaluxPL / Sofar_LSW3

Get MODBUS data from Sofar (K-TLX) inverter through LSW-3 or LSE module
GNU General Public License v3.0
99 stars 47 forks source link

Domoticz-aktualizacja danymi z inwertera #27

Closed ozogp closed 2 years ago

ozogp commented 2 years ago

Witam, szukam przyczyny conajmniej dziwnego zachowywania pozyskanych danych lub ich braku w Domoticz. Instancja Domoticz 2021.1 (build 13949) (Synology-Docker) - chcę pozyskać 12 danych z inwertera (Moc PV1,Moc PV2, Napięcie PV1, Napięcie PV2, Prąd PV, Prąd PV2, Dzienna produkcja, Całkowita produkcja, Moc czynna, Napięcie L1, Napięcie L2, Napięcie L3, Temperatura falownika, Temperatura modułu. Wszystkie potrzebne virtualne urządzenia w Domoticz utworzone, skrypty poprawnie odpowiadają i wyświetlają się kompletne wyniki na terminalu - wszystko wygląda ok. Jednak raz tylko część danych pojawia się w Domoticz (np. 3 lub 2) , raz pojawiają się wszystkie które zostały skonfigurowane (12). Nie jest to regularne - zazwyczaj zawsze jest Napięcie PV1. Skrypt działa przez crone co 2 min. zmiana na inny czas np 10 min. też nie dała rezultatu. Może jakiś pomysł?

MichaluxPL commented 2 years ago

Zacząłbym od podejrzenia na poziomie serwera MQTT, co do niego przychodzi - czy za każdym razem wpadają informacje o wszytskich parametrach ? Jeśli nie, to będę musiał się temu przyjrzeć :)

ozogp commented 2 years ago

Dzień dobry, za radą ustawiłem klienta MQTT do nasłuchiwania komunikacji z Inwertera do Domoticza. Komunikacja jak najbardziej odbywa się co 2 minuty.
mqtt: https://ibb.co/5rN2r5C log: https://ibb.co/CvvdBWK Genaralnie jak widać w ramach jednej sesji wysyła np. 1 lub 2 komunikaty o stanie. Patrząc od strony samego Domoticza z terminala: https://ibb.co/6DBRW4z wszystko wygląda OK, dane pobierają się i wyświetlają prawidłowo. Generalnie nie ma się czego czepić. Tu widok Domoticza: https://ibb.co/Xb35rVr wyraźnie widać kiedy był pełny odczyt 7:48 na wszystkich Device a kiedy tylko na 2 (8:20) lub 3 (8:18). Oczywiście konfiguracja jest identyczna przez cały czas :)

MichaluxPL commented 2 years ago

OK, dzięki za info. Postaram się zajrzeć do tego w niedzielę :)

ozogp commented 2 years ago

Dziekuję, widok Domoticza z dzisiaj: https://ibb.co/LvXyG6c

MichaluxPL commented 2 years ago

Przeprowadziłem dzisiaj szybkie testy integracji z Domoticzem via MQTT i u mnie zachowuje się to poprawnie. Wszystkie komunikaty wysyłane przez skrypt docierają do MQTT, a co za tym idzie do Domoticza. Ja korzystam z Mosquitto. Włącz verbose=1 w configu i podeślij zrzut ekranu z output'u skryptu - tam powinna być informacja co dokładnie skrypt próbuje wysłać do MQTT. Podeślij też zrzut z tego, co dociera do MQTT (tak, aby było widać dokładnie wszystkie komunikaty - wraz z ich zawartością - np. jakiś zrzut z konsoli, a nie GUI).

ozogp commented 2 years ago

Witam, również mam Mosquitto LOG MQTT: https://ibb.co/RYRGmY7 , https://ibb.co/RYM85yc TERMINAL DOMOTICZA: https://ibb.co/vYDFJkZ , https://ibb.co/fQ57CSj , https://ibb.co/LvPM5P1 DOMOTICZ WWW: https://ibb.co/8z8fQt8 Niestety nie wiem jaką funkcję włączyć aby było eweidentnie widać jakie są wartości pobierane przez Mosquitto.

MichaluxPL commented 2 years ago

Z outputu skryptu wynika, że wysyła wszystkie komunikaty do MQTT. Podeślij listę komunikatów MQTT, ale nie z logu MQTT tylko np. z polecenia (podstaw swoje wartości pod IP, usera i hasło :) ): mosquitto_sub -v -h MOSQUITTO_IP -p 1883 -u USER -P 'HASŁO' -t 'domoticz/in/#' Najpierw odpal powyższą komendę, potem w innym terminalu skrypt monitorujący. Podeślij to, co się pojawi jako output z powyższej komendy po zakończeniu pracy skryptu.

ozogp commented 2 years ago

1 wykonanie skryptu https://ibb.co/rcf83dV

wynik 1 od strony Domoticza https://ibb.co/6WCvTLm

2 wykonanie skryptu https://ibb.co/njWVJZz

Takie mam przypisanie IDX do nazw https://ibb.co/hKmZ6wv

Zastanawiający jest komuniakt z logów MQTT: Client inverter closed its connection po odczytaniu kilku wartości - tu losowo.

Może jakiś time out ?

MichaluxPL commented 2 years ago

Ok, już coś więcej widać, ale nie przesłałeś zrzutów z output samego skryptu, aby skorelować jedno z drugim. Odpal jeszcze raz (albo kilka razy) i wrzuć zrzuty ze skryptu i MQTT (ze skryptu tylko wycinki z info o przesłani do MQTT).

ozogp commented 2 years ago

Pierwsza iteracja skryptu: TERMINAL DOMOTICZA: https://ibb.co/3vLY1YT , https://ibb.co/vjbymd8 , https://ibb.co/jTFNgB3 , https://ibb.co/YhdXXMW MQTT: https://ibb.co/xfHwwSF DOMOTICZ: https://ibb.co/VL1fCsj Przesłał 7 wartości do Domoticz

Druga iteracja skryptu - 12:52 TERMINAL DOMOTICZA: https://ibb.co/fnTrtGq , https://ibb.co/NjWNxnd , https://ibb.co/VHwC0Mg , https://ibb.co/Bzk3nzf MQTT: https://ibb.co/jrHZjTF DOMOTICZ: https://ibb.co/sqdFWrx Przesłał 2 wartości do Domoticz

MichaluxPL commented 2 years ago

W drugim przypadku do MQTT dotarło 9 wiadomości - tak gwoli szczegółu. Co nie zmienia faktu, iż nie docierają wszystkie wysyłane, a tych jak widać powinno obyć, jeśli dobrze liczę, 17. Rzeczywiście wygląda jakby było zrywane połączenie. Zastanawiam się czy w grę tu nie wchodzi fakt, iż Mosquitto jest w kontenerze. Ja mam postawione normalnie na OSie i nie obserwuję takich objawów. Ale jeszcze popatrzę.

MichaluxPL commented 2 years ago

Dobra, już chyba wiem w czym problem :) Postaram się wrzucić poprawkę niebawem.

ozogp commented 2 years ago

W drugim przypadku do MQTT dotarło 9 wiadomości - tak gwoli szczegółu.

  • To jest screen MQTT łączny z 1 i 2 iteracji, "idx": 636 - jest tu wyznacznikiem, został on odczytany 2 krotnie podczas 2 iteracji.
ozogp commented 2 years ago

Dobra, już chyba wiem w czym problem :) Postaram się wrzucić poprawkę niebawem.

Byłoby świetnie, na podstawie stabilnych i powtarzalnych odczytów z Invertera chciałbym wykonać automatykę w kontekście: jeżeli napięcie na fazie L1,L2,L3 jest za wysokie to włącz grzałkę na zasobniku wody, klimę itd.

MichaluxPL commented 2 years ago

Poprawka do skryptu wpadła do GITa :) Zassaj, przetestuj i daj znać.

ozogp commented 2 years ago

Poprawka do skryptu wpadła do GITa :) Zassaj, przetestuj i daj znać.

Czy mogę przegrać stare pliki config.cfg, SOFARMap.xml, SOFARHWMap.xml?

MichaluxPL commented 2 years ago

Tak, do podmiany jest tylko sam skrypt.

ozogp commented 2 years ago

Trzy iteracje skryptu MQTT: https://ibb.co/jHrVMXf

niestety nie czyta wszystkich wartości, ale w mojej ocenie jest poprawa, czyta więcej niż poprzednio, może zwiększyć jakiś parametr jeszcze.

Patrząc od strony terminala Domoticza wykonywanie samego skryptu się zwolniło ale przechodzi dokładnie jak te wcześniejsze więc nie pisałem.

MichaluxPL commented 2 years ago

A jak to wygląda w logu MQTT ? Nadal jest info o zerwaniu połączenia przed publikacją wszystkich komunikatów ?

ozogp commented 2 years ago

LOG MQTT: https://ibb.co/KN161yf

(15:59) po 2 godz, wykonałem skrypt ponownie, efekt, wszystkie wartości pojawiły się w Domoticz. Przywróciłem crone ze skryptem, zwiększyłem tylko wartość z 2 min do 10 min. Czekam na efekty :)

MichaluxPL commented 2 years ago

Wrzuciłem kolejny fix - tym razem wszystkie komunikaty są wysyłane jako jedna komenda, więc nie powinno mieć miejsca przerwanie publikacji w trakcie. Poprzednia wersja jednak chyba nie będzie działać poprawnie w niektórych przypadkach, ale już też chyba wiem jak to ogarnąć. Także w razie czego dwa rozwiązania są do przetestowania :) Do podmiany tylko sam skrypt.

ozogp commented 2 years ago

[1.61] - działa - z różnym skutkiem końcowym, ale działa [1.62] - nie działa - nie ma żadnych informacji w Domoticz i MQTT nie otrzymuje żadnych informacji, w terminalu skrypt pokazuje infomacje które uzyskał z Invertera.

Oczywiście podmieniłem tylko plik skryptu InverterData.py

MichaluxPL commented 2 years ago

Wrzuciłeś skrypt, który dzisiaj zacommitowałem ? (1.63)

ozogp commented 2 years ago

Przepraszam, widzę tylko wersję ostatnią 1.62 https://ibb.co/wKYDKpN Może patrzę nie w to miejsce co trzeba.

MichaluxPL commented 2 years ago

Głównej wersji nie zmieniałem na razie. Zrób normalne pull'a i zobacz jaką wersję masz w skrypcie wpisaną. Albo porównaj to, co masz lokalnie z tym co widać w GIT (w www możesz sobie otworzyć plik klikając w niego)

ozogp commented 2 years ago

Mea culpa. czy możesz wstawić wersję skryptu 1.62, cały czas korzystałem 1.61 - przepraszam.

MichaluxPL commented 2 years ago

Zaciągnij to, co jest w GIT (najnowszą wersję - w pliku powinna być widoczna jako 1.63)

MichaluxPL commented 2 years ago

Dobra, zrobiłem Ci wersję 1.64.

ozogp commented 2 years ago

Dzień dobry, przepraszam, że dopiero teraz ale ferie :) Podegrałem wersję 1.64 skryptu, zweryfikowałem aby mieć pewność. Skrypt się wykonyje na terminalu jest OK, ale nic nie wpada do Domoticza, ani nic nie ma w logach MQTT. Czy możemy wrócić do wersji 1.62 - obecnie mi działa wersja skryptu 1.61. Przepraszam za zamieszanie

MichaluxPL commented 2 years ago

Wrzuciłem wersję 1.65 - przetestuj to (do podmiany sam skrypt)

ozogp commented 2 years ago

Pobrałem skrypt, wgrałem go na PRD. Wykonałem ręcznie 9:48 - pobrał wszystkie wartości i wpisał do Domoticz. o 9:50 wykonał się skrypt z crone - pobrał i wpisał wszystkie wartości do Domoticza. o 9:54 ręcznie - pobrał wszystkie wartości i wpisał do Domoticz.

Poczekam do 10:00 - będzie kolejne wykonanie skryptu z crone . Napisze jaki wynik. W tytule jest # Version: 1.64 ale jego zmiana jest z 9:30.

[edit] o 10:00 wykonał się skrypt z crone - pobrał i wpisał wszystkie wartości do Domoticza.

Chyba jest gitara :) dobrze zaczął się ten tydzień :)

MichaluxPL commented 2 years ago

Na zdrowie :)

ozogp commented 2 years ago

o 10:10 wykonał się skrypt z crone - pobrał i wpisał wszystkie wartości do Domoticza. o 10:20 wykonał się skrypt z crone - pobrał i wpisał wszystkie wartości do Domoticza.

Bardzo dziekuję, atakuję teraz automatyzację. Napięcia na inverterze zbliżają się pod 250 V muszę w takich przypadkach pozałączać grzałkę na bojlerze, klimę, bo się wyłączy

Tak tylko z ciekawości chciałem dopytać w czym tkwił problem ?

ozogp commented 2 years ago

Jest stabilnie, można zamykać :) i udostępniać jako nowy realase.

Moja konfiguracje na której to działa to: NAS Synology, Docker z Domoticz oraz Mosquitto

MichaluxPL commented 2 years ago

Problem polegał na tym, iż połączenie do MQTT było zamykane szybciej niż schodziły komunikaty. Wymagane było zastosowanie dodatkowej procedury loop i kilku innych patentów. Co do wersji w skrypcie, to zostanie poprawiona :)