Hoymiles Wechselric...
 
Benachrichtigungen
Alles löschen

Anleitung Hoymiles Wechselrichter mit AhoyDTU auslesen und in HomeAssistant einbinden

5 Beiträge
3 Benutzer
2 Likes
274 Ansichten
(@ryhoruk)
Beiträge: 16
Enthusiast
Themenstarter
 

Wie die AhoyDTU korrekt konfiguriert wird um den Wechselrichter auszulesen soll hier nicht das Thema sein. Anleitungen gibt es im Internet dazu genug. Aber die Punkte die wichtig sind um die verfügbaren Werte aus der AhoyDTU in HomeAssistant zu bekommen schon.

Hierfür muss im Setup von AhoyDTU folgendes beachtet werden.

Der Name unter Inverter ist wichtig und bei MQTT muss als Broker die IP-Adresse von HomeAssistant, der Port, und ein Topic definiert sein. Ich habe mir in HomeAssistant einen eigenen User angelegt. Auch hierzu gibt es in Bezug auf MQTT ausreichend YT-Videos und Dokumentationen

Bildschirm­foto 2023 02 16 um 21.44.33

Danach habe ich in der configuration.yaml die Zeile

mqtt: !include mqtt.yaml

hinzugefügt, die Datei mqtt.yaml angelegt und wie folgt befüllt.

Hier findet man in den "state_topic" den im AhoyDTU angelegten Topic und den Namen des Inventers (siehe Screenshot oben). Man kann also meine Daten einfach kopieren und "ahoy/" durch den eigenen Topic ersetzen und "HM-800" durch den eigenen Name, den man dem Wechselrichter gegeben hat.

#####################################################
### MQQT Sensoren anlegen
#####################################################

#AhoyDTU HM-800
sensor:
  #<TOPIC>/#
  - name: "AHOY comm_start"
    state_topic: ahoy/comm_start
  - name: "AHOY comm_start_extended"
    state_topic: ahoy/comm_start
    value_template: >-
      {{ value | int | timestamp_custom('%d.%m.%Y %H:%M:%S') }}
  - name: "AHOY comm_stop"
    state_topic: ahoy/comm_stop
  - name: "AHOY comm_stop_extended"
    state_topic: ahoy/comm_stop
    value_template: >-
      {{ value | int | timestamp_custom('%d.%m.%Y %H:%M:%S') }}
  - name: "AHOY dis_night_comm"
    state_topic: ahoy/dis_night_comm
  - name: "AHOY mqtt"
    state_topic: ahoy/mqtt
  - name: "AHOY status"
    state_topic: ahoy/status
  - name: "AHOY status extended"
    state_topic: ahoy/status
    value_template: >-
      {% if (value | int) == 0 %}
        offline
      {% elif (value | int) == 1 %}
        partial
      {% elif (value | int) == 2 %}
        online
      {% endif %}
  - name: "AHOY sunrise"
    state_topic: ahoy/sunrise
  - name: "AHOY sunrise_extended"
    state_topic: ahoy/sunrise
    value_template: >-
      {{ value | int | timestamp_custom('%d.%m.%Y %H:%M:%S') }}
  - name: "AHOY sunset"
    state_topic: ahoy/sunset
  - name: "AHOY sunset_extended"
    state_topic: ahoy/sunset
    value_template: >-
      {{ value | int | timestamp_custom('%d.%m.%Y %H:%M:%S') }}
  - name: "AHOY Uptime"
    state_topic: ahoy/uptime
    unit_of_measurement: "s"
  - name: "AHOY Uptime_extended"
    state_topic: ahoy/uptime
    value_template: >-
      {{ value | int | timestamp_custom('%H:%M:%S', local=false) }}
  - name: "AHOY Version"
    state_topic: ahoy/version
  - name: "AHOY Device"
    state_topic: ahoy/device
  - name: "AHOY WiFi"
    state_topic: ahoy/wifi_rssi
    unit_of_measurement: "dBm"
  - name: "AHOY Gesamtertrag"
    state_topic: ahoy/YieldTotal
    unit_of_measurement: "kWh"
  #<TOPIC>/<INVERTER_NAME_FROM_SETUP>/#
  - name: "AHOY available"
    state_topic: ahoy/HM-800/available
  - name: "AHOY available extended"
    state_topic: ahoy/HM-800/available
    value_template: >-
      {% if (value | int) == 0 %}
        not available and not producing
      {% elif (value | int) == 1 %}
        available but not producing
      {% elif (value | int) == 2 %}
        available and producing
      {% endif %}
  - name: "AHOY last_success"
    state_topic: ahoy/HM-800/last_success
  - name: "AHOY last_success_extended"
    state_topic: ahoy/HM-800/last_success
    value_template: >
      {{ value | int | timestamp_custom('%d.%m.%Y %H:%M:%S') }}
  #Basic <TOPIC>/<INVERTER_NAME_FROM_SETUP>/ch0/#
  - name: "AHOY U_AC"
    state_topic: ahoy/HM-800/ch0/U_AC
    unit_of_measurement: "V"
  - name: "AHOY I_AC"
    state_topic: ahoy/HM-800/ch0/I_AC
    unit_of_measurement: "A"
  - name: "AHOY P_AC"
    state_topic: ahoy/HM-800/ch0/P_AC
    unit_of_measurement: "W"
  - name: "AHOY Q_AC"
    state_topic: ahoy/HM-800/ch0/Q_AC
  - name: "AHOY F_AC"
    state_topic: ahoy/HM-800/ch0/F_AC
    unit_of_measurement: "Hz"
  - name: "AHOY PF_AC"
    state_topic: ahoy/HM-800/ch0/PF_AC
  - name: "AHOY Temperatur"
    state_topic: ahoy/HM-800/ch0/Temp
    unit_of_measurement: "°C"
  - name: "AHOY EVT"
    state_topic: ahoy/HM-800/ch0/EVT
  - name: "AHOY YieldDay"
    state_topic: ahoy/HM-800/ch0/YieldDay
    device_class: power
    unit_of_measurement: "Wh"
  - name: "AHOY YieldTotal"
    state_topic: ahoy/HM-800/ch0/YieldTotal
    device_class: energy
    unit_of_measurement: "kWh"
  - name: "AHOY P_DC"
    state_topic: ahoy/HM-800/ch0/P_DC
    unit_of_measurement: "W"
  - name: "AHOY Efficiency"
    state_topic: ahoy/HM-800/ch0/Efficiency
    unit_of_measurement: "%"
  - name: "AHOY FWVersion"
    state_topic: ahoy/HM-800/ch0/FWVersion
  - name: "AHOY FWBuildYear"
    state_topic: ahoy/HM-800/ch0/FWBuildYear
  - name: "AHOY FWBuildMonthDay"
    state_topic: ahoy/HM-800/ch0/FWBuildMonthDay
  - name: "AHOY HWPartID"
    state_topic: ahoy/HM-800/ch0/HWPartId
  - name: "AHOY PowerLimit"
    state_topic: ahoy/HM-800/ch0/PowerLimit
  - name: "AHOY LastAlarmCode"
    state_topic: ahoy/HM-800/ch0/LastAlarmCode
  #Panel 1 - UNTEN - <TOPIC>/<INVERTER_NAME_FROM_SETUP>/ch<CHANNEL_NUMBER>/#
  - name: "AHOY U_DC 1"
    state_topic: ahoy/HM-800/ch1/U_DC
    unit_of_measurement: "V"
  - name: "AHOY I_DC 1"
    state_topic: ahoy/HM-800/ch1/I_DC
    unit_of_measurement: "A"
  - name: "AHOY P_DC 1"
    state_topic: ahoy/HM-800/ch1/P_DC
    unit_of_measurement: "W"
  - name: "AHOY YieldDay 1"
    state_topic: ahoy/HM-800/ch1/YieldDay
    unit_of_measurement: "Wh"
  - name: "AHOY YieldTotal 1"
    state_topic: ahoy/HM-800/ch1/YieldTotal
    unit_of_measurement: "kWh"
  - name: "AHOY Irradiation 1"
    state_topic: ahoy/HM-800/ch1/P_DC
    unit_of_measurement: "%"
  #Panel 2 - OBEN - <TOPIC>/<INVERTER_NAME_FROM_SETUP>/ch<CHANNEL_NUMBER>/#
  - name: "AHOY U_DC 2"
    state_topic: ahoy/HM-800/ch2/U_DC
    unit_of_measurement: "V"
  - name: "AHOY I_DC 2"
    state_topic: ahoy/HM-800/ch2/I_DC
    unit_of_measurement: "A"
  - name: "AHOY P_DC 2"
    state_topic: ahoy/HM-800/ch2/P_DC
    unit_of_measurement: "W"
  - name: "AHOY YieldDay 2"
    state_topic: ahoy/HM-800/ch2/YieldDay
    unit_of_measurement: "Wh"
  - name: "AHOY YieldTotal 2"
    state_topic: ahoy/HM-800/ch2/YieldTotal
    unit_of_measurement: "kWh"
  - name: "AHOY Irradiation 2"
    state_topic: ahoy/HM-800/ch2/P_DC
    unit_of_measurement: "%"

 

Neben den Werten, die mir die AhoyDTU liefert habe ich auch einige Identifier gleich in "verständliche Werte" transformiert und Zeitstempel im UTC-Format gleich ich menschlich lesbare Notationen.
Die Darstellung der "Uptime" ist mir nicht wirklich gelungen, da muss ich nochmals suchen. Stunden, Minuten, Sekunden ist da nicht ausreichen ein "Tage" fehlt noch.

 

Nach den ersten Tagen der Nutzung sind mir folgende Ungereimtheiten aufgefallen, die ich dann wie folgt versucht habe abzufangen. Der Wechselrichter hat einen Eigenverbrauch. Darum nutze ich für die Werte der Stromproduktion den sensor "sensor.ahoy_p_ac" das entspricht zwar nicht der Gleichstromproduktion des BKWs, aber den am Ende bereitgestellten Strom.
Dann ist mir aufgefallen, dass dieser Sensor den Wert von ca. 5Watt nie unterschreitet. Also auch bei schlechtem Wetter und in der Nacht produziert das BKW 5Watt (erwartet hätte ich eher negative Werte). Das ist natürlich Quatsch und darum habe ich einen weiteren Sensor in der template.yaml angelegt, der mir diesen "Fehlstrom" herausrechnen soll.

#Wenn nur noch der Wechselrichter Strom zieht (<5 Watt), dann soll das auch als Verbrauch gezählt werden
#und nicht als Produktion. Der Verbrauch wird dann im Shelly 3EM ermittelt.
- sensor:
  - name: "Total Power Solar"
    device_class: power
    unit_of_measurement: "W"
    state: >
      {{
      states('sensor.ahoy_p_ac')|float(0) if states('sensor.ahoy_p_ac')| int > 5 else 0
      }}

Um dann meine kWh für den EnergieMonitor zu bekommen habe ich einen Helfer angelegt

Eingangssensor: Total Power Solar
Typ: Integration - Riemann Summenintegralsensor
Integrationsmethode: linke Riemannsche Summe
Genauigkeit: 2
Metrisches Präfix: k
Zeitschnitt: Stunden

Da man diesen Helfer im Nachhinein nicht mehr aufrufen kann um sich die Einstellungen anzuschauen empfehle ich hiervor einen Screenshot zu machen. Man kann sich sicherlich den Helfer und den Sensor "Total Power Solar" sparen und auf einen der kWh- oder Wh-Werte die der Wechselrichter liefert einbinden, jedoch fand ich die Umsetzung über den eigenen Helfer ansprechender.

Der eigene Helfer birgt natürlich das Risiko bei einem Ausfall der AhoyDTU oder des HomeAssistant Daten zu verlieren, die mit der Einbindung der kWh-Werte des Wechselrichters nicht passieren würden. Man hätte bei der direkten Einbindung der Wechselrichterwerte nur bei einem Reconnect einen WertePeak. Trotzdem habe ich mich entschieden den Wert in HomeAssistant selbst zu ermitteln, auch unter dem Hintergrund, dass ich nicht wusste wie die 5Watt bei schlechtem Wetter oder in der Nacht in den Wert "sensor.ahoy_yieldtotal" einfliesst oder nicht. (--> man hätte das auch einfach mal einige Nächste beobachten können. Da fehlte die Geduld)

 

OFFENE FRAGEN:

wie würden sich die Werte ändern, wenn ein 2. Hoymiles hinzugefügt werden würde, da es doch einige Sensoren gibt, die in ihrem state_topic keinen Bezug auf den "name" des Wechselrichters haben?

 
Veröffentlicht : 16.02.2023 22:31
(@ryhoruk)
Beiträge: 16
Enthusiast
Themenstarter
 

Ich habe jetzt doch noch eine "schöne" Darstellung für die Uptime-Information gefunden

  - name: "AHOY Uptime_extended"
    state_topic: ahoy/uptime
    value_template: >
      {% set uptime =value | int %}
      {% set days = (uptime / 86400) | int %}
      {%- if days > 0 -%}
        {{ days }}Tage {{ (uptime - (days * 86400)) | int | timestamp_custom('%-Hh %-Mm', false) }}
      {%- else -%}
        {{ uptime | int | timestamp_custom('%-Hh %-Mm', false) }}
      {%- endif -%}
 
Veröffentlicht : 19.02.2023 19:06
Imany
(@imany)
Beiträge: 48
Vertrauenswürdig
 

Veröffentlicht von: @ryhoruk

OFFENE FRAGEN:

wie würden sich die Werte ändern, wenn ein 2. Hoymiles hinzugefügt werden würde, da es doch einige Sensoren gibt, die in ihrem state_topic keinen Bezug auf den "name" des Wechselrichters haben?

Ich habe 2 Wechselrichter. Einen 1200er und einen 1500er.

Ergibt sich dann auch das Problem (ich habe mir den ganzen Code noch nicht angesehen)?

Wenn nicht, könntest Du ja den zweiten als HM-800-2 benennen?

 

Viele Grüße vom Uwe

 
Veröffentlicht : 02.03.2023 13:12
RyHoRuK reacted
(@ryhoruk)
Beiträge: 16
Enthusiast
Themenstarter
 

@imany Die Frage der Bezeichnungen ist ja hier nicht das Thema, sondern ob in den AhoyDTU-Daten dann alle Sensoren, die keinen Bezeichnungsbezug haben von beiden Wechselrichtern einfach addiert werden.

 

Da es aber nur folgende Werte betrifft, ist das wohl verschmerzbar.

  - name: "AHOY Gesamtertrag"
    state_topic: ahoy/YieldTotal
    unit_of_measurement: "kWh"
 
Veröffentlicht : 02.03.2023 18:01
Imany reacted
(@lubeda)
Beiträge: 2
Neuling
 

Moin,

ich hatte das System auch eine Weile und bei mir wurden die entities nicht über die MQTT-Integration eingebunden. in der dev-Version https://github.com/lumapu/ahoy/issues/632 ist das gefixt und du brauchst nicht jeden Wert mühsam einzeln definieren.

Have fun!

 

 
Veröffentlicht : 05.03.2023 13:57
Teilen: