A, B mam mam dokładnie w taki sposób (oprócz uziemienia którego w poprzednim konwerterze nie było ale mimo to, SDM630 w miarę poprawnie przekazywał dane).
Poprawię swoje połączenia, dam konkretne zaciski a jak to nie pomoże to serwer przestawię 2 kondygnacje niżej. Od czasu do czasu HA wyświetla mi wartości z niektórych encji więc ze wszystkich czynności które wykonałem, zostało mi poprawienie okablowania. Dodatkowo podłączę też GND (nowy konwerter Waweshare na szczęście oprócz A i B ma też GND). Zrobię to jutro. Dziś mam inwerter Growatt spięty bezpośrednio z EASTRON SDM630. Chcę mieć jedną pełną dobę danych w chmurze by później w HA zrobić to ładniej i lepiej
Edit:
SUKCES!
Sytuacja wygląda następująco:
- topologia RS485 jest ogólnie ok. Czekam tylko na rezystor 120 ohm 1% ale i bez niego komunikacja z urządzeniami jest prawidłowa.
- podłączyłem dodatkowo parę skrętki do GND w konwerterze oraz w liczniku (nie mam pewności czy port nr. 13 w inwerterze to GND więc w nim mam podłączone tylko A oraz B - porty 3 i 4)
- HA przez konwerter Waveshare jest podłączony do licznika Eastron SDM630 oraz inwetera Growatt MOD 10KTLX-3
Problem w HA polegał na typie danych. Inwerter zwraca go jako uint32
ale ciąg dotyczący napięcia międzyfazowego dawał mi wartość 272 437 297.0
zamiast ok 4196
(czyli 419,6 V)
Zdebugowałem komunikację i komunikacja w logach wyglądała następująco:
2022-01-19 09:34:46 DEBUG (SyncWorker_1) [pymodbus.transaction] Running transaction 84
2022-01-19 09:34:46 DEBUG (SyncWorker_1) [pymodbus.transaction] SEND: 0x1 0x4 0x0 0x33 0x0 0x2 0x81 0xc4
2022-01-19 09:34:46 DEBUG (SyncWorker_1) [pymodbus.framer.rtu_framer] Changing state to IDLE - Last Frame End - 1642581286.469352, Current Time stamp - 1642581286.502001
2022-01-19 09:34:46 DEBUG (MainThread) [homeassistant.components.websocket_api.http.connection] [139832151300608] Sending {"id": 2, "type": "event", "event": {"event_type": "state_changed", "data": {"entity_id": "sensor.g10ktl3x_vac_rs", "old_state": {"entity_id": "sensor.g10ktl3x_vac_rs", "state": "273027146.0", "attributes": {"unit_of_measurement": "V", "device_class": "voltage", "friendly_name": "G10KTL3X Vac RS"}, "last_changed": "2022-01-19T08:34:41.063418+00:00", "last_updated": "2022-01-19T08:34:41.063418+00:00", "context": {"id": "a4257b05f6e6ef6a32df403bf594403d", "parent_id": null, "user_id": null}}, "new_state": {"entity_id": "sensor.g10ktl3x_vac_rs", "state": "272961611.0", "attributes": {"unit_of_measurement": "V", "device_class": "voltage", "friendly_name": "G10KTL3X Vac RS"}, "last_changed": "2022-01-19T08:34:46.500895+00:00", "last_updated": "2022-01-19T08:34:46.500895+00:00", "context": {"id": "342a03fe2e8c6026846386f38d27937c", "parent_id": null, "user_id": null}}}, "origin": "LOCAL", "time_fired": "2022-01-19T08:34:46.500895+00:00", "context": {"id": "342a03fe2e8c6026846386f38d27937c", "parent_id": null, "user_id": null}}}
2022-01-19 09:34:46 DEBUG (MainThread) [homeassistant.components.websocket_api.http.connection] [139832151300608] Sending {"id": 7, "type": "event", "event": {"event_type": "state_changed", "data": {"entity_id": "sensor.g10ktl3x_vac_rs", "old_state": {"entity_id": "sensor.g10ktl3x_vac_rs", "state": "273027146.0", "attributes": {"unit_of_measurement": "V", "device_class": "voltage", "friendly_name": "G10KTL3X Vac RS"}, "last_changed": "2022-01-19T08:34:41.063418+00:00", "last_updated": "2022-01-19T08:34:41.063418+00:00", "context": {"id": "a4257b05f6e6ef6a32df403bf594403d", "parent_id": null, "user_id": null}}, "new_state": {"entity_id": "sensor.g10ktl3x_vac_rs", "state": "272961611.0", "attributes": {"unit_of_measurement": "V", "device_class": "voltage", "friendly_name": "G10KTL3X Vac RS"}, "last_changed": "2022-01-19T08:34:46.500895+00:00", "last_updated": "2022-01-19T08:34:46.500895+00:00", "context": {"id": "342a03fe2e8c6026846386f38d27937c", "parent_id": null, "user_id": null}}}, "origin": "LOCAL", "time_fired": "2022-01-19T08:34:46.500895+00:00", "context": {"id": "342a03fe2e8c6026846386f38d27937c", "parent_id": null, "user_id": null}}}
2022-01-19 09:34:46 DEBUG (SyncWorker_1) [pymodbus.transaction] Changing transaction state from 'SENDING' to 'WAITING FOR REPLY'
2022-01-19 09:34:46 DEBUG (MainThread) [homeassistant.components.http.view] Serving /api/hassio_ingress/mvUUMqehXyHUNvbeqSY3cykWLqt5fwAltKntBPzYhgQ/ to 10.10.10.100 (auth: False)
2022-01-19 09:34:46 DEBUG (SyncWorker_1) [pymodbus.transaction] Changing transaction state from 'WAITING FOR REPLY' to 'PROCESSING REPLY'
2022-01-19 09:34:46 DEBUG (SyncWorker_1) [pymodbus.transaction] RECV: 0x1 0x4 0x4 0x10 0x4b 0x10 0x49 0x43 0x64
2022-01-19 09:34:46 DEBUG (SyncWorker_1) [pymodbus.framer.rtu_framer] Getting Frame - 0x4 0x4 0x10 0x4b 0x10 0x49
2022-01-19 09:34:46 DEBUG (SyncWorker_1) [pymodbus.factory] Factory Response[ReadInputRegistersResponse: 4]
2022-01-19 09:34:46 DEBUG (SyncWorker_1) [pymodbus.framer.rtu_framer] Frame advanced, resetting header!!
2022-01-19 09:34:46 DEBUG (SyncWorker_1) [pymodbus.transaction] Adding transaction 1
2022-01-19 09:34:46 DEBUG (SyncWorker_1) [pymodbus.transaction] Getting transaction 1
2022-01-19 09:34:46 DEBUG (SyncWorker_1) [pymodbus.transaction] Changing transaction state from 'PROCESSING REPLY' to 'TRANSACTION_COMPLETE'
2022-01-19 09:34:46 DEBUG (MainThread) [homeassistant.core] Bus:Handling <Event state_changed[L]: entity_id=sensor.g10ktl3x_vac_st, old_state=<state sensor.g10ktl3x_vac_st=273289293.0; unit_of_measurement=V, device_class=voltage, friendly_name=G10KTL3X Vac ST @ 2022-01-19T09:34:41.142362+01:00>, new_state=<state sensor.g10ktl3x_vac_st=273354825.0; unit_of_measurement=V, device_class=voltage, friendly_name=G10KTL3X Vac ST @ 2022-01-19T09:34:46.582445+01:00>>
2022-01-19 09:34:46 DEBUG (MainThread) [homeassistant.components.websocket_api.http.connection] [139832423143696] Sending {"id": 2, "type": "event", "event": {"event_type": "state_changed", "data": {"entity_id": "sensor.g10ktl3x_vac_st", "old_state": {"entity_id": "sensor.g10ktl3x_vac_st", "state": "273289293.0", "attributes": {"unit_of_measurement": "V", "device_class": "voltage", "friendly_name": "G10KTL3X Vac ST"}, "last_changed": "2022-01-19T08:34:41.142362+00:00", "last_updated": "2022-01-19T08:34:41.142362+00:00", "context": {"id": "c22d699746a0425da2f3b8ad205049c1", "parent_id": null, "user_id": null}}, "new_state": {"entity_id": "sensor.g10ktl3x_vac_st", "state": "273354825.0", "attributes": {"unit_of_measurement": "V", "device_class": "voltage", "friendly_name": "G10KTL3X Vac ST"}, "last_changed": "2022-01-19T08:34:46.582445+00:00", "last_updated": "2022-01-19T08:34:46.582445+00:00", "context": {"id": "e92a1eab66bb6a355b577bc67b005285", "parent_id": null, "user_id": null}}}, "origin": "LOCAL", "time_fired": "2022-01-19T08:34:46.582445+00:00", "context": {"id": "e92a1eab66bb6a355b577bc67b005285", "parent_id": null, "user_id": null}}}
2022-01-19 09:34:46 DEBUG (SyncWorker_4) [pymodbus.transaction] Current transaction state - TRANSACTION_COMPLETE
Skupiłem się na odpowiedzi jaką HA otrzymywał:
RECV: 0x1 0x4 0x4 0x10 0x4b 0x10 0x49 0x43 0x64
W odpowiedzi w polu danych mam informajcę o przesłanych 4 bajtach zatem HA odczytywał mi 0x10 0x4b 0x10 0x49
). Przeliczając to z systemu 16 na dziesiętny otrzymałem wartość 273 354 825
. Natomiast biorąc tylko 2 bajty, czyli 0x10 0x4b
i przeliczajac hex na dec mamy 4171
(czyli 417,1 V).
Mając taki trop doszedłem do tego, że należy w HA zmienić typ danych na “własny” czyli data_type: custom
.
Oprócz tego ustawiłem count: 1
po to by był pobrany jeden rejestr oraz w typie danych określiłem strukturę na >1h
. To znaczy, że miał być brany pod uwagę tylko jeden bajt.
Aby dane poprawnie się wyświetlały należało w pozostałych encjach dostosować tylko parametry precision
oraz scale
.
Przykładowa konfiguracja w HA:
# PV2 Energy total (low)
- name: G10KTL3X PV2 Energy total L
unit_of_measurement: kWh
slave: 1
address: 66
input_type: input
count: 1
data_type: uint16
# Zmiana typu danych na poniższe również działa
# data_type: custom
# structure: ">1h"
precision: 1
scale: 0.1
scan_interval: 60
device_class: energy
# Three phase grid voltage 0.1V Line voltage
- name: G10KTL3X Vac ST
unit_of_measurement: V
slave: 1
# address: 30052
address: 51
input_type: input
count: 1
data_type: uint16
# Zmiana typu danych na poniższe również działa
# data_type: custom
# structure: ">1h"
precision: 1
scale: 0.1
scan_interval: 15
device_class: voltage
Dzięki wszystkim za zaangażowanie w temat i podesłanie (@macek) linku do konkretnego artykułu o modbusie.
Jeżeli gdzieś się pomyliłem w nazewnictwie to proszę poprawcie mnie. Uczyłem się tego dość dawno temu więc mogły zagnieździć się w moim poście jakieś bugi
edit: poprawiłem konfigurację zgodnie z wnioskami z postów poniżej