Closed pablolite closed 2 years ago
Funkcjonalność Home Assistant jest przetestowana - używam jej od kilku miesięcy. Jedyne co pozostaje jeszcze zrobić to obsługę wysyłania statusu "offline" inwertera. Aktualnie jak inwerter jest offline to komunikat MQTT nie jest w ogóle wysyłany.
Mechanizm Last will and testament w MQTT zadziała tylko w momencie, gdy nawiązana zostanie komunikacja i zostanie nieprawidłowo zakończona.
Wrzuciłem kod do rozwiązania, przy czym nie przez pull requesta'a bo trochę go zoptymalizowałem :) Jak możesz to przetestuj i daj znać czy wsio śmiga.
Przetestowałem. Wygląda na to, że działa :)
Możesz jeszcze dodać to o czym pisałem wcześniej:
if mqtt==1 and invstatus==0:
if HomeAssistantSupport=="1":
result=client.publish("Sofar/Logger/"+str(inverter_sn)+"/state/connected","false")
result.wait_for_publish()
client.loop_stop()
client.disconnect()
Dzięki temu, Home Assistant będzie wiedział, że inwerter i jego sensory są nieaktywne, ale sam skrypt działa i aktualizuje stan.
Dodane:) Przy czym przerobiłem cały wsparcie dla MQTT aby oddzielić wysyłanie komunikatów w podstawowym formacie od integracji z Domoticzem i HA. Do tego dodałem możliwość ustawienia topic'a dla wszystkich trzech opcji wsparcia MQTT. Jak możesz to przetestuj dla HA (nowy skrypt wymaga dodania nowych opcji w config.cfg i ustawienia ich stosownie do potrzeb).
Jak na razie działa ok. Przetestuję jeszcze jak zajdzie słońce.
Nie do końca rozumiem w jakim celu można ustawiać temat do MQTT.
Jeżeli chciałeś osiągnąć możliwość podpięcia dwóch różnych inwerterów to musisz dodać obsługę tematu jeszcze w szablonie urządzenia i sensorów
homeassistant/sensor/
Aktualnie można zmienić temat dla odczytów sensora, ale samo urządzenie "SofarLogger" będzie jedno zawsze to samo. Dlatego sugeruję małą zmianę:
result=client.publish("homeassistant/sensor/SofarLogger/"+str(inverter_sn)+"_"+str(HAcount)+"/config","{\"(...)
zmienić na:
result=client.publish("homeassistant/sensor/SofarLogger_"+str(inverter_sn)+"/"+str(inverter_sn)+"_"+str(HAcount)+"/config","{\"(...)
Wtedy jeżeli skrypt będzie uruchamiany dla dwóch różnych urządzeń (inny SN) to Home Assistant pojawią się dwa urządzenia.
Skrypt nie wysyła danych gdy inwenter się wyłączył: pk@nas:~/Sofar_Logger2$ python InverterData.py *** Chunk no: 0 Sent data: bytearray(b'\xa5\x17\x00\x10E\x00\x00\xa0\x1fjf\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x03\x00\x00\x00(E\xd4\x00\x15') Could not open socket - inverter/logger turned off
Wygląda na to, że w zmiennej invstatus odczytujesz stan z inwentera, a tej jest wyłączony. Chyba musisz dodać zmianę zmiennej invstatus=0 w przypadku błędu połączenia.
Skrypt nie wysyła danych gdy inwenter się wyłączył: pk@nas:~/Sofar_Logger2$ python InverterData.py *** Chunk no: 0 Sent data: bytearray(b'\xa5\x17\x00\x10E\x00\x00\xa0\x1fjf\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x03\x00\x00\x00(E\xd4\x00\x15') Could not open socket - inverter/logger turned off
Wygląda na to, że w zmiennej invstatus odczytujesz stan z inwentera, a tej jest wyłączony. Chyba musisz dodać zmianę zmiennej invstatus=0 w przypadku błędu połączenia.
True. Niestety, aby to zadziałało tak na prawdę poprawnie, to będzie wymagało grubszej przeróbki skryptu. Powalczę z tym w wolnej chwili.
A co do topic'a MQTT, to niestety nie znam HA, ale dla większość narzędzi można w nich ustawić dowolnych topic, stąd założyłem możliwość swobodnego definiowania :)
Wysyłanie statusu offline powinno już działać poprawnie. Możesz testować :) (ver 1.82)
Działa online i offline :) Zamykam w takim razie ten wątek.
The functionality allows the device (logger) to be automatically detected in HomeAssistant in MQTT integration. Data from daily or total production can be used in the ENERGY tab
![ha_3](https://user-images.githubusercontent.com/57967133/155280750-25461cea-77e0-48c1-b300-2fda0ba2416c.jpg)