B+G E-Tech Smartmeter per Modbus + ESPHome

Moin,

es gibt hier ja schon den ein oder anderen Schnipsel für die EASTRON SDM Smartmeter um diese dann auch per Modbus auszulesen.

Wir bauen gerade unser Haus um und ich dachte mir, hey cool, gibt ja von B+G auch Smartmeter, sogar günstiger als von EASTRON. Leider musste ich nur feststellen, dass ich gefühlt der erste bin der die Kisten versucht in Homeassistant einzubinden. Ich hab heute mal meinen ersten ESPHome Code für ein Smartmeter fertiggestellt, es könnte noch sein das an der ein oder anderen Stelle etwas nicht zu 100% richtig ist. Ich wollte aber mein Ergebnis schon mal teilen.

Aufgebaut habe das ich das ganze mit einem Wemos D1 Mini (Chinaverschnitt) und einem MAX485. Genutzt wird die Serielle Console direkt vom ESP8266. Als Smartmeter nutze ich das B+G E-Tech DS100-00B.

esphome:
  name: wemosd1-bgetech-smartmeter01
  friendly_name: wemosd1-bgetech-smartmeter01

esp8266:
  board: d1_mini_lite

# Enable logging
# WICHTIG, hier Baud_rate auf 0
logger:
  baud_rate: 0

# Enable Home Assistant API
api:
  encryption:
    key: "hierkönntedeinencryptionpasswordstehen"

ota:
  password: "hierkönntedeinotapasswordstehen"

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password


captive_portal:


# Hier werden die TXD01 und RXD01 genutzt, damit läuft das ganze wohl stabiler. Oben drauf achten das die Baud auf 0 ist.    
uart:
  id: mod_bus
  tx_pin: GPIO1
  rx_pin: GPIO3
  baud_rate: 9600
  stop_bits: 1

modbus:
  flow_control_pin: D1
  id: modbus1

modbus_controller:
  - id: ds100_mb10
    address: 0xA   ## Adresse des Modbus-Geräts (im Slave-Mode) hier ist es Decimal 10
    modbus_id: modbus1
    setup_priority: -10
    update_interval: 30s  ## Für's Testen sehr häufig, später kann man den Wert runterstellen.

sensor:

# Wirk-Leistung MB10
  - platform: modbus_controller
    modbus_controller_id: ds100_mb10
    name: "MB10 L1 Active Power"
    id: "mb10_l1_active_power"
    register_type: read
    address: 0x041A
    value_type: S_DWORD
    accuracy_decimals: 0
    unit_of_measurement: "W"
    state_class: measurement
    device_class: power
    filters:
     - multiply: 1

  - platform: modbus_controller
    modbus_controller_id: ds100_mb10
    name: "MB10 L2 Active Power"
    id: "mb10_l2_active_power"
    register_type: read
    address: 0x041C
    value_type: S_DWORD
    accuracy_decimals: 0
    unit_of_measurement: "W"
    state_class: measurement
    device_class: power
    filters:
     - multiply: 1

  - platform: modbus_controller
    modbus_controller_id: ds100_mb10
    name: "MB10 L3 Active Power"
    id: "mb10_l3_active_power"
    register_type: read
    address: 0x041E
    value_type: S_DWORD
    accuracy_decimals: 0
    unit_of_measurement: "W"
    state_class: measurement
    device_class: power
    filters:
     - multiply: 1

  - platform: modbus_controller
    modbus_controller_id: ds100_mb10
    name: "MB10 Combined Active Power"
    id: "mb10_combined_active_power"
    register_type: read
    address: 0x0420
    value_type: S_DWORD
    accuracy_decimals: 0
    unit_of_measurement: "W"
    state_class: measurement
    device_class: power
    filters:
     - multiply: 1

# Schein-Leistung MB10
  - platform: modbus_controller
    modbus_controller_id: ds100_mb10
    name: "MB10 L1 Apparent Power"
    id: "mb10_l1_apparent_power"
    register_type: read
    address: 0x0422
    value_type: S_DWORD
    accuracy_decimals: 0
    unit_of_measurement: "VA"
    state_class: measurement
    device_class: apparent_power
    filters:
     - multiply: 1

  - platform: modbus_controller
    modbus_controller_id: ds100_mb10
    name: "MB10 L2 Apparent Power"
    id: "mb10_l2_apparent_power"
    register_type: read
    address: 0x0424
    value_type: S_DWORD
    accuracy_decimals: 0
    unit_of_measurement: "VA"
    state_class: measurement
    device_class: apparent_power
    filters:
     - multiply: 1

  - platform: modbus_controller
    modbus_controller_id: ds100_mb10
    name: "MB10 L3 Apparent Power"
    id: "mb10_l3_apparent_power"
    register_type: read
    address: 0x0426
    value_type: S_DWORD
    accuracy_decimals: 0
    unit_of_measurement: "VA"
    state_class: measurement
    device_class: apparent_power
    filters:
     - multiply: 1

  - platform: modbus_controller
    modbus_controller_id: ds100_mb10
    name: "MB10 Combined Apparent Power"
    id: "mb10_combined_apparent_power"
    register_type: read
    address: 0x0428
    value_type: S_DWORD
    accuracy_decimals: 0
    unit_of_measurement: "VA"
    state_class: measurement
    device_class: apparent_power
    filters:
     - multiply: 1

# Blind-Leistung MB10
  - platform: modbus_controller
    modbus_controller_id: ds100_mb10
    name: "MB10 L1 Reactive Power"
    id: "mb10_l1_reactive_power"
    register_type: read
    address: 0x042A
    value_type: S_DWORD
    accuracy_decimals: 0
    unit_of_measurement: "var"
    state_class: measurement
    device_class: reactive_power
    filters:
     - multiply: 1

  - platform: modbus_controller
    modbus_controller_id: ds100_mb10
    name: "MB10 L2 Reactive Power"
    id: "mb10_l2_reactive_power"
    register_type: read
    address: 0x042C
    value_type: S_DWORD
    accuracy_decimals: 0
    unit_of_measurement: "var"
    state_class: measurement
    device_class: reactive_power
    filters:
     - multiply: 1

  - platform: modbus_controller
    modbus_controller_id: ds100_mb10
    name: "MB10 L3 Reactive Power"
    id: "mb10_l3_reactive_power"
    register_type: read
    address: 0x042E
    value_type: S_DWORD
    accuracy_decimals: 0
    unit_of_measurement: "var"
    state_class: measurement
    device_class: reactive_power
    filters:
     - multiply: 1

  - platform: modbus_controller
    modbus_controller_id: ds100_mb10
    name: "MB10 Combined Reactive Power"
    id: "mb10_combined_reactive_power"
    register_type: read
    address: 0x0430
    value_type: S_DWORD
    accuracy_decimals: 0
    unit_of_measurement: "var"
    state_class: measurement
    device_class: reactive_power
    filters:
     - multiply: 1

# Strom MB10
  - platform: modbus_controller
    modbus_controller_id: ds100_mb10
    name: "MB10 L1 Current"
    id: "mb10_l1_current"
    register_type: read
    address: 0x0410
    value_type: S_DWORD
    accuracy_decimals: 2
    unit_of_measurement: "A"
    state_class: measurement
    device_class: current
    filters:
     - multiply: 0.001

  - platform: modbus_controller
    modbus_controller_id: ds100_mb10
    name: "MB10 L2 Current"
    id: "mb10_l2_current"
    register_type: read
    address: 0x0412
    value_type: S_DWORD
    accuracy_decimals: 2
    unit_of_measurement: "A"
    state_class: measurement
    device_class: current
    filters:
     - multiply: 0.001

  - platform: modbus_controller
    modbus_controller_id: ds100_mb10
    name: "MB10 L3 Current"
    id: "mb10_l3_current"
    register_type: read
    address: 0x0414
    value_type: S_DWORD
    accuracy_decimals: 2
    unit_of_measurement: "A"
    state_class: measurement
    device_class: current
    filters:
     - multiply: 0.001

  - platform: modbus_controller
    modbus_controller_id: ds100_mb10
    name: "MB10 N Current"
    id: "mb10_n_current"
    register_type: read
    address: 0x0416
    value_type: S_DWORD
    accuracy_decimals: 2
    unit_of_measurement: "A"
    state_class: measurement
    device_class: current
    filters:
     - multiply: 0.001

  - platform: modbus_controller
    modbus_controller_id: ds100_mb10
    name: "MB10 Combined Current"
    id: "mb10_combined_current"
    register_type: read
    address: 0x0418
    value_type: S_DWORD
    accuracy_decimals: 2
    unit_of_measurement: "A"
    state_class: measurement
    device_class: current
    filters:
     - multiply: 0.001

# Spannung MB10
  - platform: modbus_controller
    modbus_controller_id: ds100_mb10
    name: "MB10 L1-N Voltage"
    id: "mb10_l1_voltage"
    register_type: read
    address: 0x0400
    value_type: S_DWORD
    accuracy_decimals: 3
    unit_of_measurement: "V"
    state_class: measurement
    device_class: voltage
    filters:
     - multiply: 1

  - platform: modbus_controller
    modbus_controller_id: ds100_mb10
    name: "MB10 L2-N Voltage"
    id: "mb10_l2_voltage"
    register_type: read
    address: 0x0402
    value_type: S_DWORD
    accuracy_decimals: 3
    unit_of_measurement: "V"
    state_class: measurement
    device_class: voltage
    filters:
     - multiply: 1

  - platform: modbus_controller
    modbus_controller_id: ds100_mb10
    name: "MB10 L3-N Voltage"
    id: "mb10_l3_voltage"
    register_type: read
    address: 0x0404
    value_type: S_DWORD
    accuracy_decimals: 3
    unit_of_measurement: "V"
    state_class: measurement
    device_class: voltage
    filters:
     - multiply: 1

  - platform: modbus_controller
    modbus_controller_id: ds100_mb10
    name: "MB10 L-N Average Voltage"
    id: "mb10_n_voltage"
    register_type: read
    address: 0x040C
    value_type: S_DWORD
    accuracy_decimals: 3
    unit_of_measurement: "V"
    state_class: measurement
    device_class: voltage
    filters:
     - multiply: 1

  - platform: modbus_controller
    modbus_controller_id: ds100_mb10
    name: "MB10 L-L Average Voltage"
    id: "mb10_l_voltage"
    register_type: read
    address: 0x040E
    value_type: S_DWORD
    accuracy_decimals: 3
    unit_of_measurement: "V"
    state_class: measurement
    device_class: voltage
    filters:
     - multiply: 1

# Powerfaktor MB10
  - platform: modbus_controller
    modbus_controller_id: ds100_mb10
    name: "MB10 L1 Power Factor"
    id: "mb10_l1_power_factor"
    register_type: read
    address: 0x0436
    value_type: S_WORD
    accuracy_decimals: 2
    unit_of_measurement: "/"
    state_class: measurement
    device_class: power_factor
    filters:
     - multiply: 0.01

  - platform: modbus_controller
    modbus_controller_id: ds100_mb10
    name: "MB10 L2 Power Factor"
    id: "mb10_l2_power_factor"
    register_type: read
    address: 0x0437
    value_type: S_WORD
    accuracy_decimals: 2
    unit_of_measurement: "/"
    state_class: measurement
    device_class: power_factor
    filters:
     - multiply: 0.01

  - platform: modbus_controller
    modbus_controller_id: ds100_mb10
    name: "MB10 L3 Power Factor"
    id: "mb10_l3_power_factor"
    register_type: read
    address: 0x0438
    value_type: S_WORD
    accuracy_decimals: 2
    unit_of_measurement: "/"
    state_class: measurement
    device_class: power_factor
    filters:
     - multiply: 0.01

  - platform: modbus_controller
    modbus_controller_id: ds100_mb10
    name: "MB10 Combined Power Factor"
    id: "mb10_combined_power_factor"
    register_type: read
    address: 0x0439
    value_type: S_WORD
    accuracy_decimals: 2
    unit_of_measurement: "/"
    state_class: measurement
    device_class: power_factor
    filters:
     - multiply: 0.01

# Gesamtbetrachtung MB10

  - platform: modbus_controller
    modbus_controller_id: ds100_mb10
    name: "Combined Frequency"
    id: "mb10_combined_freq"
    register_type: read
    address: 0x0432
    value_type: S_WORD
    accuracy_decimals: 1
    unit_of_measurement: "Hz"
    state_class: measurement
    device_class: frequency
    filters:
     - multiply: 0.1

  - platform: modbus_controller
    modbus_controller_id: ds100_mb10
    name: "MB10 Forward Active Demand"
    id: "mb10_forward_active_demand"
    register_type: read
    address: 0x0440
    value_type: S_DWORD
    accuracy_decimals: 1
    unit_of_measurement: "W"
    state_class: measurement
    device_class: power
    filters:
     - multiply: 1

  - platform: modbus_controller
    modbus_controller_id: ds100_mb10
    name: "MB10 Active Demand"
    id: "mb10_active_demand"
    register_type: read
    address: 0x0450
    value_type: S_DWORD
    accuracy_decimals: 1
    unit_of_measurement: "W"
    state_class: measurement
    device_class: power
    filters:
     - multiply: 1

# Ertrag/Verbrauchszähler MB10

  - platform: modbus_controller
    modbus_controller_id: ds100_mb10
    name: "MB10 Reverse Total Active Energy"
    id: "mb10_reverse_total_active_energy"
    register_type: read
    address: 0x0118
    value_type: S_DWORD
    accuracy_decimals: 2
    unit_of_measurement: "kWh"
    state_class: measurement
    device_class: energy
    filters:
     - multiply: 1

  - platform: modbus_controller
    modbus_controller_id: ds100_mb10
    name: "MB10 Active Total Energy"
    id: "mb10_active_total_energy"
    register_type: read
    address: 0x0122
    value_type: S_DWORD
    accuracy_decimals: 2
    unit_of_measurement: "kWh"
    state_class: measurement
    device_class: energy
    filters:
     - multiply: 1

  - platform: modbus_controller
    modbus_controller_id: ds100_mb10
    name: "MB10 Forward Total Reactive Energy"
    id: "mb10_forward_total_reactive_energy"
    register_type: read
    address: 0x012C
    value_type: S_DWORD
    accuracy_decimals: 2
    unit_of_measurement: "kWh"
    state_class: measurement
    device_class: energy
    filters:
     - multiply: 1

  - platform: modbus_controller
    modbus_controller_id: ds100_mb10
    name: "MB10 Reverse Total Reactive Energy"
    id: "mb10_reverse_total_reactive_energy"
    register_type: read
    address: 0x0136
    value_type: S_DWORD
    accuracy_decimals: 2
    unit_of_measurement: "kWh"
    state_class: measurement
    device_class: energy
    filters:
     - multiply: 1

  - platform: modbus_controller
    modbus_controller_id: ds100_mb10
    name: "MB10 Reactive Total Energy"
    id: "mb10_reactive_total_energy"
    register_type: read
    address: 0x0140
    value_type: S_DWORD
    accuracy_decimals: 2
    unit_of_measurement: "kWh"
    state_class: measurement
    device_class: energy
    filters:
     - multiply: 1


web_server:
  port: 80

Falls noch jemand Ideen hat oder Fehler entdeckt, gerne her damit.

Grüße aus der Steinhuder-Meer-Region. :slight_smile:

3 „Gefällt mir“

Hi,
ich habe gerade dein Projekt gesehen, um den DS100-00B über Modbus RTU für Homeassistent auszulesen.
Ich bin gerade dabei das Gleiche für iobroker zu realisieren. Wobei morgen erst die beiden DS100 eingebaut werden.
Bist du an der Stelle schon weiter? Funktioniert es schon für HA?
Beste Grüße
Heiko

Hallo networkluk,

ich versuche gerade das ganze einzurichten und bekomme es aber leider nicht hin.
Ich habe den D1 mini Lite auch mit einem MAX485. Ich habe DE und RE zusammen an den D1, RO and and RX (GPIO3) und DI an TX (GPIO1) angeschlossen und dann dementsprechen an A und B von dem DS-100. Zudem wird der Max485 mit 3,3V versorgt.

Musstest du noch irgendwie Modbus aktivieren? Oder ging das einfach so.

Viele Grüße
Kevin

Hallo, ich bin neu hier und habe mich wegen genau diesem Thema angemeldet.
Ich habe einen B+G DS100-00B Zähler und einen Waveshare RS485 to ETH (B) Modbus Konverter.
Die Modbus Register kann ich auslesen mit einer Software namens Gineers Modbus Tester, mit den ausgelesenen Werten kann ich aber nichts anfangen.
Z.B das Register 31025 für die Spannung L1 gegen N gibt Werte im Bereich von ca. 28500 aus und die anderen Register ähnlich. Was fange ich mit diesen Werten an?
Hat schon jemand eine modbus.yaml für Homeassistant zusammengebracht, mit der der Zähler richtig auslesbar ist?

Danke schön.

Welche Werte liefern denn die anderen Register? Komisch, das werden doch keine 285Volt sein…
Steht in de Doku was zu “Int32(3+3)” ? Sind das 3 Nachkommastellen?
Das Gute, die Kommunikation scheint ja gut zu klappen…

Das Ganze ist für mich als Neuling noch ziemlich undurchsichtig.
Das Modbusregister in der Tabelle ist hex 0400, also dez 1024. Dann steht in der Spalte Adress(register) 3x der Wert 31025. Wenn ich mit dem Modbus Tester das Register 31025 auslese bekomme ich den Wert 0. Lösche ich die 3 und lese nur 1025 aus, bekomme ich einen Wert um momentan 25000.
Tatsächlich ist die Spannung zwischen L1 und N bei knapp 230V.
In der Doku steht leider nicht, was Int32(3+3) bedeutet.

In einer ZIP Datei habe ich zwei csv-Dateien mit den ausgelesenen Werten und die Modbus-Registertabelle des Zählers. Hier: Deleted

Meine modbus.yaml für die Spannung L1-N schaut so aus:

- name: "B+G" 
  type: tcp
  host: 192.168.1.200
  port: 502
  
  sensors:
    - name: Modbus_Voltage
      slave: 1
      address: 1025
      input_type: input
      unit_of_measurement: V
      device_class: voltage
      state_class: measurement
      scale: 0.01
      offset: 0
      precision: 1
      data_type: int32

Wäre schön, wenn mich hier wer weiterbringen könnte.
Danke.

:crayon:by HarryP: Codezeilen formatiert betonter Text

Hallo zusammen,
der Beitrag ist genau das was ich gesucht habe. Ich brauche 5x Zähler da macht sich der Preisunterschied vom DSM100 zum SDM630 schon bemerkbar.

Also heute werde ich mal so ein Teil bestellen und testen. Evtl. kann ich hier ja dann auch mit meiner Erfahrung helfen.

wo ist der Mehrwert zwischen 00B und 30B?
Hat zusätzl. Signaleingang Ja (Status per RS485) aber wofür braucht man das?

Vielleicht kann mir jemand das beantworten bevor ich den falschen bestelle

Moin! Starte gerade das exakt gleiche Projekt.
ESP32 wroom, “diymore TTL zu RS485 485 Modul zu seriellem UART”
DS100-00B.
INT32(3+3) aus Registerlänge 2 klingt tatsächlich etwas merkwürdig, aber es handelt sich ja auch um eine “dada” description :crazy_face:
Man muss wahrscheinlich auf Bitebene mit dem Ergebnis arbeiten (signed/unsigned, LSW, MSW, etc.).
Ich melde mich, wenn ich etwas herausgefunden habe.
Ciao, Andreas

30B hat 4 verschiedene Tarife zur Verwendung

Moin,

ich bin auch gerade am DS100 und nem esp32 und komme da auf keinen grünen Zweig :frowning: .
Kann mir bitte jemand die Software des Herstellers und die Modbus Register Dolu zukommen lassen? Eventuell hilft mir das weiter.

Viele Grüße
Rico

die bekommst du im download beim Hersteller (stromzähler.eu)
Ja, mit Umlaut :wink:

@networkluk besten Dank für den Code. Habe meine (o.g.) Hardware damit gefüttert und es funktioniert auf Anhieb. Habe für ESP32 den flow control pin auf GPIO4 und die Adresse des Zählers auf default 0x1 geändert. Da sind noch ein paar schräge Werte dabei (multiply 0.001 für Spannung?) aber die Leistung ist korrekt und die ist mir am wichtigsten.
Gruß, Andreas

:crayon:by HeikoBauer: Zusammenführung Doppelpost.

@Andi.D Danke für die Info - war ungeduldig und hatte schon mal den 30B bestellt. Dafür ist er heute rechtzeitig zum WE angekommen.

Hab nun mal alles auf einen ESP8266 geflasht. RX TX und D1 entsprechend angeschlossen.
Hab den MAX485 to TTL mit den Anschlüßen DI an TX, RO an RX und DE+RE an D1

Da ich nur L3 und N angeschlossen hab, bekomme ich nur dort Werte L3-N 231.210,000 Volt. Plausibel bis auf die Kommaverschiebung.

Ich hab allerdings immer wieder einen Modbus CRC Check failed!

Fehlt hier ein Abschußwiderstand? Lese hier und da im I-net von 120R

Den MAX mit 5V betrieben führt zu sehr vielen CRC Check failed, bei 3v3 hab ich wenigstens Werte und nur wenige CRD failed.

Update:
Die Dupont-Kabel gegen ein “1,5m gscheites” ersetzt. Nun gibts nur noch einen CRC Fehler beim Start der Kommunikation (bei mir aktuell jede 45s)
Damit kann ich leben. Evtl. später bei produktiv wird sowieso ein Ethernet STP genommen. Dann isses evtl. ganz weg.

Frage nun, wie kann ich ein Register schreiben?
zum Beispiel die Modbus-Adresse? Sollen ja noch 4 weitere in den Bus.

LG

Ja, der Bus muss am Anfang und Ende jeweils mit 120Ohm terminiert werden. Habe ich aber auch noch nicht gemacht und es läuft trotzdem (wo siehst Du CRC check fail?).
ChatGPT sagt, bei mehreren slaves “für jeden Slave eine separate modbus_controller -Instanz erstellen”. Klingt logisch. Die Register bleiben dann immer die gleichen.

Zum einen kann man das per Webserver sehen (IP aufrufen) ist ja im obigen Script als letzter Punkt drin.

web_server:
  port: 80

Oder so wie ich das immer mach, ich hab Esphome über Integration in HomeAssistant und dort dann auf das Gerät / Logs / wirelessly
damit kann dann auf den Webserver verzichtet werden. (spart etwas Speicher und Rechenzeit)

image

Folgende Parameter hab ich noch ergänzt bzw. spiel ich noch damit rum:

uart:
  parity: NONE

modbus:
  send_wait_time: 370ms

modbus_controller:
  command_throttle: 2ms

Auf dem selben Bus, selbe MAX485 und ESP8266? wäre das dann nicht Multi-Master? Aktuell hab ich nur einen modbus-Slave, aber das könnte funktionieren. ist auf jedenfall ein Versuch wert. Das schreiben wäre zwar nur einmalig die Adresse ändern, aber sieht im esphome-Code seite etwas kompliziert aus. Und wer will schon ausversehen die falschen Coils beschreiben :slight_smile:

Mir geht ein weiterer DS100 zum Ausprobieren auch noch ab, aber so habe ich den Modbus verstanden: 1 Master (bis zu) 247 slaves, 1km Kabellänge, 120 Ohm am Anfang (Master) und am letzten Client und ab geht’s…

modbus_controller:
  - id: ds100_mb10
    address: 0x1
    modbus_id: modbus1
    setup_priority: -10
    update_interval: 20s

  - id: ds100_mb11
    address: 0x2
    modbus_id: modbus1
    setup_priority: -10
    update_interval: 20s

sollte dann doch eigentlich funktionieren.

Ja genau, aber in deinem Beispiel die address: 0x2 ist ja die nächste Adresse für einen Slave. Wenn du z.B. deinen jetzigen slave mit der 0x1 abfragen kannst, wird dir das nicht mehr gelingen wenn du mal das gegen z. B. 0x5 ersetzt.
Die muss man dem Slave aber erst sagen/schreiben, dann musst du wenigstens einmal dem zweiten ds100_mb11 eine 2 zuweisen. Ähnlich wie statische IP’s im LAN.

Unsere Zähler haben im Auslieferzustand die 1.
Wenn du z.B. deinen jetzigen slave mit der 0x1 abfragen kannst, wird dir das nicht mehr gelingen wenn du mal das gegen z. B. 0x5 ersetzt.

[20:09:48][C][modbus_controller:298]: ModbusController:
[20:09:48][C][modbus_controller:299]:   Address: 0x05
[20:09:48][W][modbus_controller:030]: Modbus device=5 set offline
[20:09:48][D][modbus_controller:040]: Modbus command to device=5 register=0x118 countdown=0 no response received - removed from send queue
[20:09:49][D][modbus_controller:040]: Modbus command to device=5 register=0x122 countdown=0 no response received - removed from send queue

Also spätestens beim nächsten Slave im Bus muss dieser eine andere Adresse als die 1 haben.

Ich hatte das mit der zweiten Instanz eher so verstanden: einfach mehrere uart defnieren und mehrere modbus usw.
Das läßt esphome nicht zu: Fehler = duplicate key

uart:
  id: mod_bus_1

uart:
  id: mod_bus_2

modbus:

modbus_controller:

Nächste Möglichkeit wäre pro Slave einen eigenen 8266 + MAX485, aber das wäre aber Sinn eines Busses total vorbei. (wäre ja dann eigentlich auch kein Bus sondern sowas wie ein konverter oder was auch immer)

Also zurück zum ursprünglichen Plan, eben doch die Adresse des zweiten Slave auf 2 usw. setzen.
Aktuell hab ich da keine Zeit mich einzuarbeiten (hab da noch andere Projekte) und bis Frühling scheints wohl noch ne Weile zu dauern. :slight_smile:

Aber vielleicht hast du ja Lust da was zu probieren, denke ein guter Einstieg wäre:
ESPHome Modbus Output
und die Adresse des Coil den es zu beschreiben gilt:

Adresse: 44097
Modbus register 1000
6Byte
Payload: 2 (oder eben andere Nummer als neue Slave-Adresse)
zu finden auf dem Download DS100 Series Beschreibung auf Seite 35

Ein einmaliger Aufruf um die Adresse zu ändern reicht. Die Frage ist nur wie muss der genau aussehen???

Moin,

da ich rein mit dem ESP32 nicht weiter komme habe ich mich entschieden eine Home assistant Instanz aufzusetzen auf einem raspi, Da bin ich absoluter Neuling. Mit dem Code des Thread Openers bringt mir HA folgende Meldung:

INFO ESPHome 2023.12.5
INFO Reading configuration /config/esphome/ds100.yaml...
Failed config

captive_portal: [source <unicode string>:28]
  
  Component captive_portal requires component wifi.
  {}
modbus: [source <unicode string>:39]
  - 
    Cannot resolve pin name 'D1' for board esp32dev.
    flow_control_pin: D1
    id: modbus1
web_server_base: None
  {}
Component web_server_base requires component network

Was muss ich wo für die fehlenden Componenten installieren?

Viele Grüße
Rico

Also HA läuft bei dir erstmal sauber, oder?
Hast du dann Esphome als Add-On installiert?
Kannst du dort einen ESP flashen?

mach mal

esphome:
  name: meinModbus
  platform: ESP32
  board: wemos_d1_mini32   # richtiges ESP32-Board angeben

wifi:
  ssid: "meinWLANname"
  password: "meingeheimesPasswort"

api:

ota:

!secret ist ein Verweis auf die secret.yaml im config Ordner, wo auch die configuration.yaml liegt. Kannste fürs erste mal ignorieren und einfach die wifi Werte von deinem WLAN eintragen.

Und
api:
ota:
ohne encryption und ohne password

Grad noch gesehen, für den ESP32 kannste keine Dx verwenden. nimm GPIOxx
und lass das 8266: weg

Wenn nix geht, dann poste mal den oberen Teil bis zum uart: von deinem Script hier rein. Dann kann gezielter nach Fehler gesucht werden.

Das HA läuft sauber imho,
ESPHome ist als addon installiert. Wie kann ich testen, ob ich von da aus flashen kann?

Dein Code bringt folgende Fehlermeldung:

esphome: [source <unicode string>:2]


  'M' is an invalid character for names. Valid characters are: abcdefghijklmnopqrstuvwxyz0123456789-_ (lowercase, no spaces).
  name: meinModbus
  platform: ESP32
  board: wemos_d1_mini32

der obere teil incl UART:

esphome:
  name: ds100
  friendly_name: DS100

esp32:
  board: esp32dev
  framework:
    type: arduino

# Enable logging
# WICHTIG, hier Baud_rate auf 0
logger:
  baud_rate: 0

# Enable Home Assistant API
#api:
#  encryption:
#    key: ""

#ota:
#  password: ""

#wifi:
#  ssid: !secret wifi_ssid
#  password: !secret wifi_password


captive_portal:


# Hier werden die TXD01 und RXD01 genutzt, damit läuft das ganze wohl stabiler. Oben drauf achten das die Baud auf 0 ist.    
uart:
  id: mod_bus
  tx_pin: GPIO1
  rx_pin: GPIO3
  baud_rate: 9600
  stop_bits: 1

Also WLAN musst du schon drin lassen, sonst kann das Ding ja nicht mit HA kommunizieren und OTA updates gehen auch nicht.
API:
OTA:
nicht auskommentieren. Hab deinen Code hier angepasst:

esphome:
  name: ds100
  friendly_name: DS100

esp32:
  board: esp32dev
  framework:
    type: arduino

# Enable logging
# WICHTIG, hier Baud_rate auf 0
logger:
  baud_rate: 0

# Enable Home Assistant API
api:
#  encryption:
#    key: ""

ota:
#  password: ""

wifi:
  ssid: "wifi_ssid"  # hier deine SSID verwenden (WLANname)
  password: "password"  # hier dein WLANpassword verwenden

captive_portal:


# Hier werden die TXD01 und RXD01 genutzt, damit läuft das ganze wohl stabiler. Oben drauf achten das die Baud auf 0 ist.    
uart:
  id: mod_bus
  tx_pin: GPIO1
  rx_pin: GPIO3
  baud_rate: 9600

Als Einstieg in ESPHome empfehle ich Youtube z.B. vom Simon :wink:
https://www.youtube.com/watch?v=9YkICApObvo&pp=ygUPc2ltb240MiBlc3Bob21l