Smart Meter per Modbus in HA

Hi,

ich muss das Thema Modbus hier noch mal auf den Tisch bringen. Es ist gibt schon einige Threads damit, nur eine gute Anleitung für einen Laien ist nicht dabei. :slight_smile:

Wir haben ein Haus, mit 2 Wohnungen und einer (noch) kleinen PV-Anlage. Beide Wohnung hatten getrennte Zähler, da die Tochter jetzt einzieht, möchte ich natürlich den Strom der PV-Anlage für beiden Wohnungen nutzen. Für die eine Wohnung habe ich ein SDM72D-M-2 Smart Meter gekauft und eingebaut. Zähler fliegt raus.

Jetzt möchte ich den Smart Meter per HA auslesen und später dann vielleicht auch berechnen, wieviel Solar-Energie mit der zweiten Wohnung verbraucht wurde. Ich würde das am liebsten mit einem RS485-Ethernet-Adapter machen. Ich weiß, das es die Modbus Integration gibt und auch einiges an Infos u.a. im HA-Forum. Nur ist da vieles halb oder sogar nur ansatzweise erklärt.

Hat jemand das so schon mal umgesetzt und kann mir die eine oder andere Info-Quelle, vielleicht sogar auf Deutsch nennen? Oder ist das Thema doch zu komplex, um es mit einem Tutorial zu erschlagen :see_no_evil:

Gruß
Ede

Hallo Ede,
ich habe drei SDM72D im Einsatz. Zwei davon sitzen im selben Schrank. Beide sind über den MOD-BUS (RS485) an einem ESP8266 angeschlossen, der über einen RS485 zu TTL Adapter verfügt. Als Firmware setze ich Tasmota ein. Das ganze Liefert alle Daten per WLAN an HA. Funktioniert zuverlässig. Ich weiss allerdings nicht wie weit es bei dir mit Elektronik basteln aussieht.
Schönen Abend.

Hi
Das Gute an dem Thema ist, dass schon viele sich damit auseinandergesetzt haben :smiley:
Persönlich hab ich es mit diesem Wlan Adapter gelöst:
[Amazon.de](https://Amazon Link)

Ich wohne aber auch zur Miete, eine LAN Verbindung ist natürlich immer besser.

Zu meiner Config:

In der Homeassistant config:

modbus
modbus: !include modbus.yaml

In der modbus.yaml:

  - type: tcp
    name: "SDM630" <- Kannst du nennen wie du willst
    host: 192.168.188.65 <- Die IP Adresse deines RS485 Ethernet Adapters
    port: 502
    close_comm_on_error: true
    timeout: 9
    retry_on_empty: true

Danach musst du aus dem Handbuch die Adressen raussuchen, die für dich interessant sind.

Hier mal meine Kopie von meinem SDM630, evtl sind ja ähnlich
Ansonsten einfach danach googlen, da findest du sicehr was

    sensors:
      - name: Phase_1_line_to_neutral_volts
        unique_id: l1_neutral_volts
        count: 2
        data_type: float32
        precision: 2
        address: 0
        input_type: input
        slave: 1
        unit_of_measurement: V
        state_class: measurement
        device_class: voltage
        
      - name: Phase_2_line_to_neutral_volts
        unique_id: l2_neutral_volts
        count: 2
        data_type: float32
        precision: 2
        address: 2
        input_type: input
        slave: 1
        unit_of_measurement: V
        state_class: measurement
        device_class: voltage
        
      - name: Phase_3_line_to_neutral_volts
        unique_id: l3_neutral_volts
        count: 2
        data_type: float32
        precision: 2
        address: 4
        input_type: input
        slave: 1
        unit_of_measurement: V
        state_class: measurement
        device_class: voltage

      - name: Phase_1_current
        unique_id: l1_current
        count: 2
        data_type: float32
        precision: 2
        address: 6
        input_type: input
        slave: 1
        unit_of_measurement: A
        state_class: measurement
        device_class: current
        
      - name: Phase_2_current
        unique_id: l2_current
        count: 2
        data_type: float32
        precision: 2
        address: 8
        input_type: input
        slave: 1
        unit_of_measurement: A
        state_class: measurement
        device_class: current
        
      - name: Phase_3_current
        unique_id: l3_current
        count: 2
        data_type: float32
        precision: 2
        address: 10
        input_type: input
        slave: 1
        unit_of_measurement: A
        state_class: measurement
        device_class: current
        
      - name: Total_system_power
        unique_id: total_system_power
        scan_interval: 5
        count: 2
        data_type: float32
        precision: 2
        address: 52
        input_type: input
        slave: 1
        unit_of_measurement: W
        state_class: measurement
        device_class: power
        
      - name: import_wh_since_last_reset
        address: 72
        input_type: input
        count: 2
        slave: 1
        precision: 2
        data_type: float32
        unit_of_measurement: kWh
        device_class: energy

  
      - name: export_wh_since_last_reset
        address: 74
        input_type: input
        count: 2
        slave: 1
        precision: 2
        data_type: float32
        unit_of_measurement: kWh
        device_class: energy
1 „Gefällt mir“

Ihr seid Schätze :heart_eyes:

@jossera Elektronik basteln ist überhaupt kein Problem. Habe ich mal gelernt.

Nur wenn ich das mit einem “einfachen” LAN/RS485 Adapter schaffen, ist mir der Weg lieber, als mit ESP-Dingens die auch noch richtig geflasht werden müssen.

@Luben

Danke für den Code-Schnipsel. Werde mir morgen mal einen LAN Adapter raus suchen, weil noch ein Leerrohr zum Sicherungskasten führt und eventuell mit meinem POE Switch sogar noch das Netzteil sparen könnte.

Cool cool :slight_smile:

Man muss natürlich dazu sagen, das es so bei mir funktioniert. Was den Port etc angeht musst du ggf nochmal Google befragen. Aber wie bereits erwähnt, zu den SDM Smart Metern findet man wirklich schnell was man an Informationen braucht

Anleitung mit den Register-Adressen habe ich:

Adapter wird wohl dieser NA111-A werden. Funktioniert mit 230V.

So, der RS485-Ethnert Adapter ist gekommen und eingebaut. Nur meine config will nicht laufen.

In meiner configuratuion.yaml steht nur der Include Befehl.

automation: !include automations.yaml
script: !include scripts.yaml
scene: !include scenes.yaml
modbus: !include modbus.yaml

und die modus.yaml sieht so aus:

- type: tcp
  name: "SDM72D" 
  host: 192.168.178.209
  port: 8887
  close_comm_on_error: true
  timeout: 9
  retry_on_empty: true
    
- sensors:
  - name: Total_System_Power
    unique_id: total_power
    count: 2
    data_type: float32
    precision: 2
    address: 30053
    input_type: input
    slave: 1
    unit_of_measurement: W
    state_class: measurement
    device_class: power
        
  - name: Total_Energy
    unique_id: total_energy
    count: 2
    data_type: float32
    precision: 2
    address: 30343
    input_type: input
    slave: 1
    unit_of_measurement: kwh
    state_class: measurement
    device_class: energy

Wenn ich die Konfig prüfe, bekomme ich nur den blauen Kreis zu sehen, ohne Ende. Wenn ich HA neu starte kommt die Meldungen Neustart nicht möglich. Fehler “type”.

In den Protokoll ist auch eine Meldung. Am Ende steht:

File "/usr/src/homeassistant/homeassistant/components/modbus/validators.py", line 232, in duplicate_modbus_validator
    if hub[CONF_TYPE] == SERIAL:
KeyError: 'type'

Was zur Hölle habe ich falsch gemacht :dizzy_face:

Alles funktioniert :slight_smile:

Ich habe ja einen sehr günstigen RS485toETH Adapter verwendet

Dieser hat den Vorteil, Hutschiene, LAN-Anschluss und 230V. Leider passt er nicht in den normalen Ausschnitt wie die Sicherungen im Sicherungskasten. Trotzdem lies sich bei mir die Abdeckung und der Deckel des Sicherungskasten ganz normal schließen.

In der Konfig muss man nicht viel ändern. Das meiste ist selbsterklärend. Wichtig sind die beiden rot markierten. Wobei der Modbus mode Simple oder Multi funktionieren.

Mein Modbus.yaml sieht dann aus die von @Luben nur das ich aktuell 2 Werte auslese.

- name: "SDM72D" 
  type: tcp
  host: 192.168.178.209
  port: 8887
  close_comm_on_error: true
  timeout: 9
  retry_on_empty: true
    
  sensors:
    - name: EG_Total_power
      unique_id: eg_total_power
      scan_interval: 5
      count: 2
      data_type: float32
      precision: 2
      address: 52
      input_type: input
      slave: 1
      unit_of_measurement: W
      state_class: measurement
      device_class: power
      
    - name: EG_Verbrauch
      address: 72
      input_type: input
      count: 2
      slave: 1
      precision: 2
      data_type: float32
      unit_of_measurement: kWh
      device_class: energy

Wer Probleme mit seinem Modbus, bzw die Kommunikation zum Adapter hat, dafür habe ich das Tool von GINEERS gefunden. Damit lässt sich unter Windows schnell testen ob sich was auslesen lässt.

1 „Gefällt mir“

Hi Ede,
ich hab den ganzen Nachmittag an dieser Geschichte gesessen. Ich habs einfach nicht hinbekommen. Erst als ich Deine Config stumpf kopiert hatte…siehe da!!! Es hat geklappt. Besten Dank dafür!!! Was ich aber nicht verstehe, wie bist du auf die 52 bzw. 72 gekommen. In der Beschreibung steht schließlich 30053 bzw 3043. Das ist das letzte Puzzleteil um damit abschließen zu können :wink:

Ich glaube, die Adressliste weiter oben war nicht die richtige. Ich muss morgen mal auf meinen Arbeitslaptop schauen, da sollte noch die richtigen PDFs liegen.

1 „Gefällt mir“

Hallo,

Ich hab ein Wavshare RS232 RS485 TO POE ETH (B) modbus server und den einfachen Eastron SDM72D aber ich bekomme leider keine Daten in Home Assistanten.

Kann es sein das der SDM72D kein Modbus unterstützt?

@jossera hat sie ja eingebunden bekommen oder hat er die SDM72DM gehabt?

Hi,

Den SDM72D gibt es in verschiedenen Versionen

https://www.eastroneurope.com/products/view/sdm72modbus

„We have a range of options from a pulsed output version for cost savings and Modbus RTU combined with a pulsed output.“

Vielleicht mal die genau Bezeibhnung vergleichen?

  • SDM72DR - 100A Input fixed Energy(kWh) and resettable Energy(kWh), Fixed pulsed output
  • SDM72BI – 100A Input Import and export Energy, Fixed pulsed output
  • SDM72M - 100A Input Modbus RS485 (RTU) & fixed Pulsed Output

Ich hab den gepulsten/S0 an einer cFos- Wallbox.

Hi,

Das ist mein Zähler:

Laut deiner beschreibung soll nur der SDM72M MOdbus können was ich schon vermutet habe.

Dann verstehe ich nicht warum die Anschlüsse da sind.

Das sind s0-Anschlüsse (pro Watt/h Verbrauch wird ein Impuls geschickt; also 1000 Impulse = 1kWh Verbrauch)
Modbus hat 3(4) Kontakte

IMG_2337
So sieht der Modbus aus

:crayon:by HarryP: Zusammenführung Doppelpost

Danke für deine Hilfe.

Weist du zufällig ob man den über s0 in Home Assitenten einbinden kann?

Das weiß ich leider nicht.
Wie gesagt hat meine cFos Wallbox neben Modbus- auch S0-Schnittstellen. Die Informationen des Zählers stellt die cFos-Wallbox über Modbus-IP dann auch „extern“ ( ggf. für NodeRed, evcc usw.) zur Verfügung.

Hallo zusammen, wenn ich in meiner Config.yaml

modbus: !include modbus.yaml

einfüge bekomme ich beim yaml check folgende Warnung

Konfigurationswarnungen

Invalid config for ‘modbus’ at configuration.yaml, line 33: required key ‘baudrate’ not provided Invalid config for ‘modbus’ at configuration.yaml, line 33: required key ‘bytesize’ not provided Invalid config for ‘modbus’ at configuration.yaml, line 33: required key ‘method’ not provided Invalid config for ‘modbus’ at configuration.yaml, line 33: required key ‘parity’ not provided Invalid config for ‘modbus’ at configuration.yaml, line 33: required key ‘port’ not provided Invalid config for ‘modbus’ at configuration.yaml, line 33: required key ‘stopbits’ not provided Invalid config for ‘modbus’ at configuration.yaml, line 33: required key ‘type’ not provided

Kennt das jemand von euch ? alle anderen include gehen problemlos.

Danke

anscheinend passt der Aufbau der modbus.yaml nicht. Hast du darin vielleicht aus versehen nochmal modbus: an den Anfang geschrieben?

sorry hat sich erledigt.
Hatte noch eine leere modbus.yaml

Nachdem ich Sie ausgefüllt habe ist die Fehlermeldung weg.

Danke für den HInweiß

1 „Gefällt mir“

Funktioniert das bei euch noch? Ich hab heute mein HA geupdatet und bekomme Fehler bei der Version von @DerEde aber auch bei meiner eigenen (logisch)
Hat HA die Abfrage von Modbus geändert?