Jeszcze trochę i będziesz pomagał innym w temacie integracji Modbus, Brawo TY!
Na fali szczęścia popełniłem też wpis na moim nowym blogu. Starałem się dokładnie opisać co i jak. Szczegóły tutaj:
https://ogarniaminternety.pl/growatt-modbus-rtu-rs-485-home-assistant/
Mam nadzieję, że nie jest to wbrew regulaminowi.
Po mimo, że wątek został oznaczony jako solved wymaga drobnego doprecyzowania.
Udało Ci się usunąć objawy lecz wnioski są błędne.
To było kluczowe i każdy z nas to przeoczył
Rzeczywiście logicznym jest count=1, ponieważ dla modbusa najmniejszą porcją jest jeden rejestr czyli 2bajty.
Inverter zwraca 4bajty (beztypowo), bo tak było ustawione cont=2, czyli 2 rejestry od adresu np.51
To jakiego typy używasz do jego interpretacji to już twoja wola.
Zobacz jak to robił ten skaner
Prawidłowe wartości są dla dwóch typów: int16 i unit16.
Do momentu gdy nie przekroczymy 32767 bez względu na typ będą sobie równe.
W tym miejscu należy przyczepić się dokumentacji, że nie jest to dokładnie określone.
Dla tego akurat rejestru nie ma to znaczenia, ponieważ wartość nigdy nie przekroczy 32000
… no tak nie do końca to znaczy.
Czy mógłby dla mnie (ponieważ masz warsztat) dla jednego rejestru sprawdzić to samo co zrobiłeś na początku tylko z właściwym count
- name: G10KTL3X Vac RS
unit_of_measurement: V
slave: 1
address: 51
input_type: input
count: 1
data_type: uint16 #drugi raz dla int16
precision: 1
scale: 0.01
scan_interval: 60
device_class: voltage
# ewentualnie gdy otrzymasz niewłaściwe wartości właczyć
# swap: byte
Gratulacje za progres
edit. co do typu danych jeszcze taki przyład
Rejestr 54 dla int16 i uint16 =0, a dla 32bitów =4180, ponieważ brakujące bajty “dokupił” z rejestru 53
@RobinI30 również mega dzięki za pomoc
Sprawdziłem kilka opcji.
Dla takiego zapisu:
data_type: uint16 #drugi raz dla int16
precision: 1
scale: 1
Encja daje taki wynik:
G10KTL3X forum arturhome 4138,0 V
Dla scale: 0.1
G10KTL3X forum arturhome 413,1 V
Dla scale: 0.01
G10KTL3X forum arturhome 41,3 V
Natomiast zmieniając typ danych:
data_type: int16
precision: 1
scale: 0.1
wynik jest poprawny:
G10KTL3X forum arturhome 413,5 V
Przy wszystkich sensorach zmieniłem typ danych na uint16
ze względu na zapis w instrukcji
It is 16bits (two bytes) unsigned integer for each holding and input register
Całą akcję mogę podsumować następująco:
- przeoczona została wartość
count
. Zamiast2
powinno być1
. - przeniosłem serwer w inne miejsce (zmniejszyła się ilość skrętki z ok 25 metrów do 5 m.)
- zmieniłem konwerter z CH340 na FT232RL (wyeliminowało to część błędów z logów)
- poprawiłem połączenie przewodów skrętki na rozgałęzieniu (jedna para poszła do licznika Eastron SDM630 druga do inwertera Growatt MOD)
- @arnie280 dzięki za tipa z wykresem w Growacie. Szkoda że nie można mieć ciastka i zjeść ciastka (mieć licznika podłączonego zarówno do portów 3,4 do RS485 w HA oraz 7,8 do statystyk Growatta w serwisie online)
- nieoceniony wkład w sukces mieli @macek @RobinI30 za co im mega dziekuję!
Jak możesz, to wyjaśnij co dokładnie znaczy ten zapis >1h
. Przyda się nie tylko mi ale innym którzy będą chcieli zrozumieć działanie tego customowego typu danych.
swap: byte
wraz z uint16
dało wynik 2356,8 V
Co robi ten zapis?
Jest jeszcze jedna zagadka do rozwiązania w tym falowniku. Czy ktoś wie co mogą oznaczać te rejestry?
customowa_nazwa_sensora_encji H
customowa_nazwa_sensora_encji L
Chodzi mi o H
oraz L
. Wszystkie wyniki z falownika pochodzą z sensorów z literką L
. Te pod literką H
są puste (zerowe). Nie będę drążył tego tematu ale jak ktoś wie to niech śmiało pisze. Dane odczytuję poprawnie więc te zerowe po prostu wyłączę.
Nie ma co się rozpisywać link wiele wyjaśnia
Zamienia kolejność bajtów w słowie ByteHi<>ByteLo - czasami tak trzeba, jeśli bajty wysyłane są w odwrotnej kolejności.
Można, tylko trzeba pomyśleć nieszablonowo
Witaj mam pytanie odnośnie licznika sdm630 czy kupowałeś licznik od growatta czy np. z hurtowni ?
pytam bo kupiłem z hurtowni i nie łączy się z moim mod6000tl3x tz. nie ma na tym liczniku żadnej słuchawki. pan z growatt polska poinformował mnie ze taki licznik nie od growat nie działa
Kupowałem na Allegro. Model dokładnie taki jak na zdjęciu.
Do których pinów w falowniku masz podłączone kabelki?
Falownik mam podpięty do pine 3 i 4 pan od growatt powiedział żeby podpiąć go pod 7,8 też nie działało.
brak komunikacji, mój licznik jest identyczny jak twój . Może programują te liczniki żeby tylko ich działy nie wiem, masz jakiś pomysł kolego?
Zastosowałeś skręconą parę przewodów?
Próbowałeś zamienić miejscami A i B?
SDM630 masz podłączony tylko do Growatta czy też do innego urządzenia?
Pytanie podstawowe - czy ustawiłeś adres licznika na 002 a inwertera na 001?
Adres licznika i falownika musi być ten sam. Np 001
Panowie działa trzeba było zadzwonić do nich powiedzieć żeby zmienili ustawienie inwertera na on Grid z licznikiem Mod6000tl3x, wcześniej było system wyspowy, podłącza się licznik pod porty 7 i 8 w inwerterze każdy inverter inne porty
Edit:
@RobinI30 tak właśnie jest ustawione
Support Growatta działa dość sprawnie. U mnie Modbus poszedł bez dzwonienia i zmian w ustawieniach. Mam podłączony pod HA gdyż integracja taka działa lokalnie a nie przez chmurę Growatta.
Witam, mam ciekawy temat z Growatt MOD 10KTL3-X, podłączony do HA po Mobdus ponad rok temu. W zeszłym tygodniu dołożyłem drugi obwód PV i z ok 6kW mam teraz ponad 10kW. Mam problem z odczytem sensor.g10ktl3x_output_power, do wartości 6kW pokazuje normalnie. Powyżej wartości z jakiegoś nieznanego powodu pokazuje wartość pomniejszana o 6kW. Widać to najlepiej na wykresie:
Chciałem zrobić dodatkową encję “template” która tymczasowo poprawiła by problem do czasu kontaktu z serwisem.
state_class: total_increasing
unit_of_measurement: 'W'
state: >
{% if (states('sensor.g10ktl3x_output_power') | float(0) < 6000 ) }
{% else % }
{{ ((states('sensor.g10ktl3x_output_power') | float(0) > 6000 ) |
states('sensor.g10ktl3x_output_power') | float(0) + 6000 ) | round(2) }}
{% endif %}
Ale mam błędy
Opiszę to tak:
if warunek
spelniony-to-wartosc-taka
else
w przeciwnym-wypadku-to-wartosc-taka
Ale to i tak nie zadziała, bo jest błąd w rozumowaniu - skoro powyżej 6000 sensor już nie przyjmuje wartości i ponieważ nie sposób rozpoznać które wartości poniżej 6000 są OK, a które nie, to tych brakujących wartości nie “urodzimy”.
Tzn. może i dałoby się rozpoznać kiedy dodawać jakąś stałą wartość, ale nie na podstawie wartości wadliwej encji. (można pokombinować z porównywaniem z sumą pozostałych 2 encji)
Witam, chciałem dołączyć do tematu, jestem początkującą osobą w przygodzie z HA. Napotkałem pewien problem przy próbie połączenia falownika growatt TL3-S do HA za pomocą RS485. Generalnie sama “próba” połączenia udała się, korzystając z tego poradnika
Ale niestety podana przykładowa konfiguracja nie pasuję (chyba) do mojego falownika, dane albo się nie wyświetlają, albo nie mogę znaleźć konkretnego parametru. Głównie chodzi mi o odczytywanie produkcji AC. Metodą prób i błędów doszedłem do adresu który pokrywa się z aktualną produkcją, ale niestety po przekroczeniu wartości 6535 W, odczyt zaczyna być błędny tzn. spada do wartości ± 200 - 300 W. Moja gorąca prośba do znawców tematu o pomoc.
Typy danych : odczytywanych przez integracją a udostępnianych przez falownik są różne (16bit vs. 32)… tyle da się powiedzieć z tego co napisałeś.
Dziękuje za odpowiedź. Mam rozumieć że mój falownik udostępnia dane tylko 16bit? I większych wartości nie będę mógł odczytać? Czy udostępnia również 32 bit tylko konfiguracja połączenia musi być inna? Z góry dzięki za odpowiedzi
Właśnie nie wiem co i jak udostępnia… Ty masz dokumentację.
Nie podałeś, również jak to odczytujesz ale 65535 sugeruje, że wynik przewija się wokół 16 bit… szukałbym błędu w typach danych.