ESPHome und Victron. Wie kann ich verschiedene Geräte meiner PV einbinden

Hallo, ich habe bei meiner Insel PV-Anlage 2 MPPT Laderegler und einen SmartShunt von Victron. Diese 3 Geräte möchte ich in HA einbinden.
Mit dem GitHub Projekt von “GitHub - KinDR007/VictronMPPT-ESPHOME: Victron Mppt charger ve.direct to esphome node
hab ich es soweit auch geschafft. Mein Problem ist, das ich für die beiden MPPT Laderegler und den SmartShunt jeweils einen eigenen ESP32 brauche, da ich die Projekte nicht miteinander in ESPHome verbinden kann. Von der Leistung und den Anschlüssen müsste aber ein ESP32 ja locker reichen. Mein Problem ist die yaml Programmierung in ESPHome.
Wie kann ich die 2 Projekte die verschiedene “external_components_source:” haben in eine Programmierung einbinden?
Vielen Dank für die Hilfe

Hier die YAML der beiden MPPT Laderegler:

esphome:
  name: victron
  friendly_name: Victron

esp32:
  board: esp32dev
  framework:
    type: arduino

# Enable logging
logger:

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

ota:
  password: "XXXXXXXXXX"

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

  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: "Victron Fallback Hotspot"
    password: "XXXXXXXXX"

captive_portal:

substitutions:
  name: victron
  device0: victron0
  device1: victron1
  external_components_source: github://KinDR007/VictronMPPT-ESPHOME@main



external_components:
  - source: ${external_components_source}
    refresh: 0s


uart:
  - id: uart0
    tx_pin: GPIO19  # Not connected! The communication is read-only
    rx_pin: GPIO16  # Connect this this GPIO and GND to the first MPPT charger
    baud_rate: 19200
    rx_buffer_size: 256
  - id: uart1
    tx_pin: GPIO20  # Not connected! The communication is read-only
    rx_pin: GPIO17  # Connect this this GPIO and GND to the second MPPT charger
    baud_rate: 19200
    rx_buffer_size: 256

victron:
  - id: victron0
    uart_id: uart0
    throttle: 10s
  - id: victron1
    uart_id: uart1
    throttle: 10s

sensor:
  - platform: victron
    victron_id: victron0
    max_power_yesterday:
      name: "${device0} max power yesterday"
    max_power_today:
      name: "${device0} max power today"
    panel_voltage:
      name: "${device0} panel voltage"
    panel_power:
      name: "${device0} panel power"
    battery_current:
      name: "${device0} panel current"
    load_current:
      name: "${device0} load current"
    yield_today:
      name: "${device0} Ertrag Heute"
      device_class: energy
    yield_total:
      name: "${device0} Ertrag Gesamt"
    yield_yesterday:
      name: "${device0} Ertrag Gestern"
    day_number:
      name: "${device0} Anzahl Tage"




  - platform: victron
    victron_id: victron1
    max_power_yesterday:
      name: "${device1} max power yesterday"
    max_power_today:
      name: "${device1} max power today"
    panel_voltage:
      name: "${device1} panel voltage"
    panel_power:
      name: "${device1} panel power"
    battery_current:
      name: "${device1} panel current"
    load_current:
      name: "${device1} load current"
    yield_today:
      name: "${device1} Ertrag Heute"
      device_class: energy
    yield_total:
      name: "${device1} Ertrag Gesamt"
    yield_yesterday:
      name: "${device1} Ertrag Gestern"
    day_number:
      name: "${device1} Anzahl Tage"

text_sensor:
  - platform: victron
    victron_id: victron0
    charging_mode:
      name: "${device0} charging mode"
    error:
      name: "${device0} error"
    tracking_mode:
      name: "${device0} tracking mode"

  - platform: victron
    victron_id: victron1
    charging_mode:
      name: "${device1} charging mode"
    error:
      name: "${device1} error"
    tracking_mode:
      name: "${device1} tracking mode"

Hier der YAML Code für den SmartShunt

esphome:
  name: shunt
  friendly_name: Shunt

esp32:
  board: esp32dev
  framework:
    type: arduino

# Enable logging
logger:

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

ota:
  password: "XXXXXXXXXX"

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

  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: "Shunt Fallback Hotspot"
    password: "XXXXXXXX"

captive_portal:
    
external_components:
  - source: github://KinDR007/VictronSmartShunt-ESPHOME@main

uart:
  id: the_uart
  rx_pin: GPIO18
  baud_rate: 19200
  stop_bits: 1
  data_bits: 8
  parity: NONE
  rx_buffer_size: 256

victron_smart_shunt:
  uart_id: the_uart

  
sensor:
  - platform: victron_smart_shunt
    battery_voltage:
      name: "Battery Voltage"
      id: bv

    battery_current:
      name: "Battery Current"
      id: bc

    fw_version:
      name: "fw"
      id: fw

    pid:
      name: "pid"
      id: pid

    instantaneous_power:
      name: "instantaneous power"
      id: instantaneous_power

    time_to_go:
      name: "time to go"
      id: time_to_go

    consumed_amp_hours:
      name: "consumed amp hours"
      id: consumed_amp_hours
      unit_of_measurement: Ah

    min_battery_voltage:
      name: "Min battery voltage"
      id: min_battery_voltage

    max_battery_voltage:
      name: "Max battery voltage"
      id: max_battery_voltage

    amount_of_charged:
      name: "Amount of charged"
      id:  amount_of_charged
      filters:
        - multiply: 0.001
      state_class: total
      device_class: energy
      unit_of_measurement: kWh


    last_full_charge:
      name: "Time since last full charge"
      id: last_full_charge

    deepest_discharge:
      name: "Depth of the deepest discharge"
      id: deepest_discharge
      unit_of_measurement: Ah

    last_discharge:
      name: "Depth of the last discharge"
      id: last_discharge
      unit_of_measurement: Ah

    discharged_energy:
      name: "Amount of discharged energy"
      id: discharged_energy
      filters:
        - multiply: 0.001
      state_class: total
      device_class: energy
      unit_of_measurement: kWh

    state_of_charge:
      id: state_of_charge
      name: "SoC"

Servus,

ich nutze diese Integration für Victron Geräte,
https://github.com/sfstar/hass-victron
und bin ganz zufrieden damit.

Gruß
Georg

Das geht aber nur mit einem gx Gerät. Das möchte ich mir ja sparen.

Bist du mit dem Problem weiter gekommen?

Gruß
dnwalker

Leider nicht.
Habe immer noch 2 ESP laufen, die sich wahrscheinlich langweilen. :joy:

Läuft denn dein Code für die beiden Solarlader an einem ESP zu betreibe?

Die beiden MPPT Laderegler laufen über einen ESP32.
Für den Victron Shunt brauch ich “noch” einen extra ESP. Obwohl der ESP eigentlich genug Anschlüsse hätte. Schaffe es aber nicht zu programmieren, das alle 3 über einen ESP laufen.

Ich habe jetzt deine beiden Yaml-Codes zusammengefügt und mal auf einen ESP32 geladen. Soweit läuft das nur habe ich aktuell keine Möglichkeit den ESP an einen Solarlader bzw. einen Shunt anzuschließen um zu sehen ob es wirklich funktioniert. Um die grundlegenden Funktionen zu testen habe ich mal den Webserver mit eingebaut und da werden alle Sensoren angezeigt.

Das hört sich interesannt an, habt ihr das bereits getestet?
Hattest Du dwn Code einfach zusammen gwfügt oder musstest da etwas anpassen ?

Gruß
Roland

Mich interessiert das Projekt auch! Ich möchte auch 4 Victron geräte mit wenn möglich nur mit einem esp32 verbind. ist das möglich … Gruß Pascal

Moinsen, etwas später schiebe ich den Thread nochmal hoch.

Habe selber in meinem Womi den Shunt mit meinem Wemos D1 mini angebunden und meine HA Instanz im Womi zeigt auch alles an. Aktuell warte ich auf ein weiteres Kabel für den Mppt.
Da beide Geräte direkt nebeneinander hängen, wäre ich sehr dran interessiert, beide Geräte über einen ESP laufen zu lassen, da mein Wlan mit meinem M2 Router doch etwas beschränkt ist, was die Anzahl der Geräte angeht.

Vielleicht hat hier jemand noch nen Code zum testen rumliegen :slight_smile:

Thx Desti

Ich Antworte mir mal selbst und vielleicht hilft es auch anderen :wink:

auf der Github Seite ist auch eine “smartsolar-mppt-esp8266-example-multiple-uarts.yaml”
hier ist das Beispiel gegeben um 2 MPPT´s über einen D1 mini abzufragen. Habe den Code für meine Abfrage für einen Smart Shunt und einen MPPT angepasst und siehe da… ich habe nun alle Werte von beiden Victron Geräten über einen D1 mini empfangen.

substitutions:
  name: victron
  device0: victron0
  device1: victron1
  external_components_source: github://KinDR007/VictronMPPT-ESPHOME@main

esphome:
  name: ${name}
  platform: ESP8266
  board: d1_mini

external_components:
  - source: ${external_components_source}
    refresh: 0s

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

api:
  encryption:
   key: "***"
ota:
  password: "***"

logger:
  baud_rate: 0
  esp8266_store_log_strings_in_flash: false

uart:
  - id: uart_0
    tx_pin: D8  # Not connected! The communication is read-only
    rx_pin: D7  # Connect this this GPIO and GND to the first MPPT charger
    baud_rate: 19200
    rx_buffer_size: 256
  - id: uart_1
    tx_pin: D6  # Not connected! The communication is read-only
    rx_pin: D5  # Connect this this GPIO and GND to the second MPPT charger
    baud_rate: 19200
    rx_buffer_size: 256

victron:
  - id: victron0
    uart_id: uart_0
    throttle: 10s
  - id: victron1
    uart_id: uart_1
    throttle: 10s

sensor:
  - platform: victron
    victron_id: victron0
    battery_voltage:
      name: "${name} battery voltage"
    auxiliary_battery_voltage:
      name: "${name} auxiliary battery voltage"
    midpoint_voltage_of_the_battery_bank:
      name: "${name} midpoint voltage of the battery bank"
    midpoint_deviation_of_the_battery_bank:
      name: "${name} midpoint deviation of the battery bank"
    battery_current:
      name: "${name} battery current"
    battery_temperature:
      name: "${name} battery temperature"
    instantaneous_power:
      name: "${name} instantaneous power"
    consumed_amp_hours:
      name: "${name} consumed amp hours"
    state_of_charge:
      name: "${name} state of charge"
    time_to_go:
      name: "${name} time to go"
    depth_of_the_deepest_discharge:
      name: "${name} depth of the deepest discharge"
    depth_of_the_last_discharge:
      name: "${name} depth of the last discharge"
    depth_of_the_average_discharge:
      name: "${name} depth of the average discharge"
    number_of_charge_cycles:
      name: "${name} number of charge cycles"
    number_of_full_discharges:
      name: "${name} number of full discharges"
    cumulative_amp_hours_drawn:
      name: "${name} cumulative amp hours drawn"
    min_battery_voltage:
      name: "${name} min battery voltage"
    max_battery_voltage:
      name: "${name} max battery voltage"
    last_full_charge:
      name: "${name} last full charge"
    number_of_automatic_synchronizations:
      name: "${name} number of automatic synchronizations"
    number_of_low_main_voltage_alarms:
      name: "${name} number of low main voltage alarms"
    number_of_high_main_voltage_alarms:
      name: "${name} number of high main voltage alarms"
    number_of_low_auxiliary_voltage_alarms:
      name: "${name} number of low auxiliary voltage alarms"
    number_of_high_auxiliary_voltage_alarms:
      name: "${name} number of high auxiliary voltage alarms"
    min_auxiliary_battery_voltage:
      name: "${name} min auxiliary battery voltage"
    max_auxiliary_battery_voltage:
      name: "${name} max auxiliary battery voltage"
    amount_of_discharged_energy:
      name: "${name} amount of discharged energy"
    amount_of_charged_energy:
      name: "${name} amount of charged energy"
    dc_monitor_mode_id:
      name: "${name} dc monitor mode id"

  - platform: victron
    victron_id: victron1
    max_power_yesterday:
      name: "${device0} max power yesterday"
    panel_voltage:
      name: "${device1} panel voltage"
    panel_power:
      name: "${device1} panel power"
    battery_current:
      name: "${device1} panel current"
    load_current:
      name: "${device1} load current"

text_sensor:
  - platform: victron
    victron_id: victron0
    alarm_condition_active:
      name: "${name} alarm condition active"
    alarm_reason:
      name: "${name} alarm reason"
    model_description:
      name: "${name} model description"
    firmware_version:
      name: "${name} firmware version"
    device_type:
      name: "${name} device type"
    serial_number:
      name: "${name} serial number"
    dc_monitor_mode:
      name: "${name} dc monitor mode"

  - platform: victron
    victron_id: victron1
    charging_mode:
      name: "${device1} charging mode"
    error:
      name: "${device1} error"
    tracking_mode:
      name: "${device1} tracking mode"

binary_sensor:
  - platform: victron
    victron_id: victron0
    relay_state:
      name: "${name} relay state"

Passt also soweit. Werde nur die Bezeichnungen noch anpassen, damit ich es besser auseinander halten kann und die Daten raus nehmen, die ich nicht brauche :slight_smile: