In unserem Haus habe ich mich für eine fast komplett drahtgebundene Installation entschieden. Bis auf Zigbee für einige Lampen ist der Rest komplett über KNX, Stromkabel oder RS485 angebunden. Heute möchte ich kurz darauf eingehen, wie die Stromzähler am Home Assistant [HASS] angebunden sind.
Bei den Stromzählern handelt es sich um DZG Zähler, die per ModBus ausgelesen werden können. Da ich keine RS485 Leitung durchs komplette Haus gezogen habe, bediene ich mich einem Adapter, der mir ModBus RTU auf Ethernet umsetzt. Dabei handelt es sich um das Gerät RS485 TO ETH (B) von Waveshare (LINK), welcher RTUoverTCP im Zusammenspiel Home Assistant sauber abbildet.
Die IP-Adressen wichtiger Komponenten sind bei mir im Netzwerk statisch, da ich das System auch beim Ausfall des DHCP Servers weiter betreiben möchte. Über die Firewall wird das Nach-Hause-Telefonieren des Modbus Hubs direkt blockiert, das IP-Gateway ist gesetzt, da ich daheim einige VLANs habe und der Home Assistant auf den Modbus Hub zugreifen können muss.
Die Konfiguration für die DZG Zähler ist etwas speziell, da diese nicht die gängige Einstellung 9600 8N1 sondern 9600 8E1 verwenden. Das macht das Mischen mit anderen Modbus Komponenten leider sehr schwierig. Die korrekte Parametrisierung für den Modbus Hub sieht damit wie folgt aus:

Da ich zwei solche Hubs einsetze ergibt sich daraus die folgende Home Assistant Konfiguration
modbus:
- name: "modbus1"
type: rtuovertcp
host: 10.1.5.171
close_comm_on_error: true
port: 4196
sensors: !include_dir_merge_list modbus/hub1/
- name: "modbus2"
type: rtuovertcp
host: 10.1.5.172
close_comm_on_error: true
port: 4196
sensors: !include_dir_merge_list modbus/hub2/
Man sieht, dass ich die eigentlichen Zähler nicht in der configuration.yaml angelegt habe, sondern diese dynamisch aus den Unterverzeichnissen lese. Dies hat für mich den Vorteil, dass ich weitere Komponenten direkt im Verzeichnis des passenden Hubs ablegen kann.
Bei den DZG Zählern wird die ModBus ID über einen – eher eigensinnigen – Weg gebildet. Man nimmt die letzten zwei Ziffern der Zählernummer, addiert 1 auf, nimmt nun diese Zahl als hexadezimale Kennung des Gerätes. Home Assistant arbeitet allerdings rein mit dezimalen Werten.
Am Beispiel meines Zählers, dieser hat die Zählernummer 33XXXX28, nun nimmt man die 28 und addiert 1. Das Ergebnis ist nun als 0x29 zu lesen, in der Dezimalschreibweise ist es die 41. Genau diese Kennziffer benötigen wir für die Konfiguration im Home Assistant.
Die Datei modbus/hub1/dzg_33XXXX28.yaml sieht damit wie folgt aus (in diesem Fall unsere Wärmepume):
# Import active energy (obis 1.7.0)
- name: waermepumpe_postive_power
slave: 41
address: 0
input_type: holding
count: 2
data_type: int32
unit_of_measurement: W
device_class: power
scan_interval: 30
scale: 0.1
# Export active energy (obis 2.7.0)
- name: waermepumpe_negative_power
slave: 41
address: 2
input_type: holding
count: 2
data_type: int32
unit_of_measurement: W
device_class: power
scan_interval: 30
scale: 0.1
# Voltage on L1
- name: waermepumpe_voltage_l1
slave: 41
input_type: holding
address: 4
count: 2
data_type: int32
unit_of_measurement: V
device_class: voltage
scan_interval: 30
scale: 0.01
# Voltage on L2
- name: waermepumpe_voltage_l2
slave: 41
input_type: holding
address: 6
count: 2
data_type: int32
unit_of_measurement: V
device_class: voltage
scan_interval: 30
scale: 0.01
# Voltage on L3
- name: waermepumpe_voltage_l3
slave: 41
input_type: holding
address: 8
count: 2
data_type: int32
unit_of_measurement: V
device_class: voltage
scan_interval: 30
scale: 0.01
# Total positive energy (1.8.0)
- name: waermepumpe_positive_energy
slave: 41
input_type: holding
address: 16384
count: 2
data_type: int32
unit_of_measurement: Wh
device_class: energy
state_class: total_increasing
scan_interval: 30
# Total negative energy (2.8.0)
- name: waermepumpe_negative_energy
slave: 41
input_type: holding
address: 16640
count: 2
data_type: int32
unit_of_measurement: Wh
device_class: energy
state_class: total_increasing
scan_interval: 30
Bei großen Verbrauchern einer Wärmepumpe oder einem BEV, würde ich immer über einen Zähler mit entsprechender MID-Zulassung verwenden. Durch die MID Zulassung wird es auch möglich den Ladestrom des Autos gegenüber dem Arbeitgeber abzurechnen.
Nach einem Neustart von Home Assistant steht dem Anzeigen einzelner Verbraucher in der Energy Übersicht nichts mehr im Wege. Wie das ganze dann aussieht sehr ihr hier:

1 Gedanke zu “[HASS] Modbus Stromzähler”