Prinzipiell kannst du sicher den Zähler auch an den Waveshare hängen und auslesen, ist nur die Frage, ob man sich durch das alles durchwühlen will und Lust hat die Modulregistertabelle der Zähler zu lesen. Kann auch sein, dass da was drin ist, was man neu flashen kann, ich weiß es nicht. Ich kenne die Dinger nicht und hatte auch nie das Bedürfnis das zu ändern. ESPHome war mal ein Addon von HA, ist vor einigen Jahren aber irgendwo verschoben worden, ich glaube, es wird jetzt unter Geräten hinzugefügt. https://www.home-assistant.io/integrations/esphome/ Die Konfiguration zur Anbindung der SDMs ist hier beschrieben: https://esphome.io/components/sensor/sdm_meter.html?highlight=sdm Es ist ne Yaml Datei aus der beim Kompilieren eine Firmware erzeugt, die man auf einen esp oder pico flashen kann. Ähnlich wie Tasmota nur viele flexibler nutzbar als tasmota. Es gibt allerdings einen Designfehler in esphome. Wenn man mehrere Modulbusgeräte am Bus hat kommt es vor das sie zu gleichen Zeit gelesen werden sollen. Das lässt sich lösen, wenn man sich selbst um die Reihenfolgen kümmert, mit der die Teile gelesen werden. Hier ist mal ein Beispiel aus meiner yaml mit der ich 3 sdm72 und einen sdm120 gelesen habe, Der interessante Teil ist unter Time: + update_interval zu finden. Mqtt ist nur drin, da es zuverlässiger ist als api (bzw. damals war), geht aber auch über api ohne mqtt. substitutions: update_interval: never bus1: modbus1 # bus2: modbus2 name: esp8266-modbus esphome: name: ${name} on_boot: priority: 250 then: - light.turn_on: id: neopix - light.addressable_set: id: neopix color_brightness: 100% red: 10% green: 0% blue: 70% - lambda: !lambda >- id(ha_lastupdatemqtt).state -= 100000; esp8266: board: esp01_1m wifi: ssid: !secret wifi_ssid password: !secret wifi_key fast_connect: true manual_ip: static_ip: 192.168.66.30 gateway: 192.168.66.1 subnet: 255.255.255.0 captive_portal: api: password: !secret api_key reboot_timeout: 5min ota: password: !secret ota_key #debug: logger: baud_rate: 0 hardware_uart: UART1 level: info web_server: port: 80 version: 2 include_internal: true mqtt: broker: !secret mqtt_host username: !secret mqtt_username password: !secret mqtt_password id: mqtt_client # discovery: false topic_prefix: 'powermeter' reboot_timeout: 3min script: - id: venus_update then: - logger.log: format: "publish ${name} update" level: DEBUG - mqtt.publish_json: topic: venus/powermeter/values payload: |- root["Reverse"] = 132; root["Forward"] = 142; root["Power"] = 12; root["L1Voltage"] = 12; root["L2Voltage"] = 12; root["L3Voltage"] = id(L3Voltage).state; root["L1Current"] = 12; root["L2Current"] = 12; root["L3Current"] = id(L3Current).state; root["L1Power"] = 12; root["L2Power"] = 12; root["L3Power"] = id(SDM72_3_p3).state; root["L1EnergyForward"] = 12; root["L1EnergyReverse"] = 12; root["L2EnergyForward"] = 12; root["L2EnergyReverse"] = 12; root["L3EnergyForward"] = 12; root["L3EnergyReverse"] = 12; root["timestamp"] = id(sntp_time).now().timestamp; time: - platform: sntp id: sntp_time servers: 192.168.66.1 on_time: - seconds: /2 then: - logger.log: format: "start modbus update()" level: INFO - lambda: !lambda |- id(sdm_meter_3).update(); - delay: 333ms - lambda: !lambda |- id(sdm_meter_4).update(); - delay: 333ms - lambda: !lambda |- id(sdm_meter_5).update(); - delay: 333ms - script.execute: venus_update - lambda: !lambda |- id(sdm_meter_11).update(); - delay: 333ms - logger.log: format: "end modbus update()" level: INFO uart: - tx_pin: 1 rx_pin: 3 baud_rate: 9600 stop_bits: 1 id: _uart1 # debug: # direction: RX # dummy_receiver: false # after: # delimiter: "\n" # sequence: # - lambda: UARTDebug::log_string(direction, bytes); # - rx_pin: GPIO14 # tx_pin: GPIO12 # baud_rate: 9600 # stop_bits: 1 # parity: none # id: uart2 button: - platform: safe_mode name: "Restart (Safe Mode)" - platform: restart name: "Restart" light: - platform: neopixelbus id: neopix type: RGB variant: WS2812 pin: GPIO12 num_leds: 1 name: "NeoPixel" method: type: bit_bang default_transition_length: 0s restore_mode: ALWAYS_OFF modbus: - id: modbus1 uart_id: _uart1 # - id: modbus2 # uart_id: uart2 sensor: - platform: wifi_signal name: "WiFi Signal Sensor" update_interval: 60s internal: true # - platform: homeassistant # id: ha_lastupdate # entity_id: sensor.powermeter_lastupdates # internal: true - platform: mqtt_subscribe id: ha_lastupdatemqtt topic: powermeter_lastupdates - platform: template name: "ha_lastupdatediff" internal: true lambda: |- if (isnan(id(ha_lastupdatemqtt).state)) { return id(sntp_time).now().timestamp; } else { return id(sntp_time).now().timestamp - id(ha_lastupdatemqtt).state; } update_interval: 5s on_value_range: - below: 10 then: - light.turn_on: id: neopix - light.addressable_set: id: neopix color_brightness: 50% red: 0% green: 30% blue: 0% - below: 89 above: 30 then: - light.turn_on: id: neopix - light.addressable_set: id: neopix color_brightness: 100% red: 50% green: 40% blue: 0% - above: 90 then: - light.turn_on: id: neopix - light.addressable_set: id: neopix color_brightness: 100% red: 75% green: 33% blue: 0% - platform: sdm_meter id: sdm_meter_3 modbus_id: ${bus1} update_interval: ${update_interval} address: 3 phase_a: current: name: "SDM72_1_p1 Current" voltage: name: "SDM72_1_p1 Voltage" active_power: name: "SDM72_1_p1 Power" id: SDM72_1_p1 phase_b: current: name: "SDM72_1_p2 Current" voltage: name: "SDM72_1_p2 Voltage" active_power: name: "SDM72_1_p2 Power" phase_c: current: name: "SDM72_1_p3 Current" voltage: name: "SDM72_1_p3 Voltage" active_power: name: "SDM72_1_p3 Power" - platform: sdm_meter id: sdm_meter_4 modbus_id: ${bus1} update_interval: ${update_interval} address: 4 phase_a: current: name: "SDM72_2_p1 Current" voltage: name: "SDM72_2_p1 Voltage" active_power: name: "SDM72_2_p1 Power" id: SDM72_2_p1 phase_b: current: name: "SDM72_2_p2 Current" voltage: name: "SDM72_2_p2 Voltage" active_power: name: "SDM72_2_p2 Power" id: SDM72_2_p2 phase_c: current: name: "SDM72_2_p3 Current" voltage: name: "SDM72_2_p3 Voltage" active_power: name: "SDM72_2_p3 Power" id: SDM72_2_p3 - platform: sdm_meter modbus_id: ${bus1} id: sdm_meter_5 update_interval: ${update_interval} address: 5 phase_a: current: name: "SDM72_3_p1 Current" voltage: name: "SDM72_3_p1 Voltage" active_power: name: "SDM72_3_p1 Power" id: SDM72_3_p1 phase_b: current: name: "SDM72_3_p2 Current" voltage: name: "SDM72_3_p2 Voltage" active_power: name: "SDM72_3_p2 Power" id: SDM72_3_p2 phase_c: current: name: "SDM72_3_p3 Current" id: L3Current voltage: name: "SDM72_3_p3 Voltage" id: L3Voltage active_power: name: "SDM72_3_p3 Power" id: SDM72_3_p3 - platform: sdm_meter id: sdm_meter_11 modbus_id: ${bus1} update_interval: ${update_interval} address: 11 frequency: name: "SDM120_1 Frequency" total_power: name: "SDM120_1 Total Power" phase_a: current: name: "SDM120_1_p1 Current" voltage: name: "SDM120_1_p1 Voltage" active_power: name: "SDM120_1_p1 Power" id: SDM120_1_p1