Home Assistant mit Ahoy DTU Limit per API oder MQTT ändern

Moin,
jetzt sind wir hier vom Limit einstellen zum ein- und ausschalten gekommen. Befehlsmäßig wird das sicher ähnlich sein.
Nun meine Frage:
Ich habe 2 Hoymiles in Reihe. Muss ich jedem WR den Befehl senden, oder dem der letztendlich am Hausnetz hängt?
Danke schon mal.
Uwe

Edit: Ich habe es mir noch mal genauer betrachtet.
Meine Antwort: Ja, ich muss …

Hi Zusammen,

Ich habe eine Automatisierung welche die Wechselrichter über die Ahoy DTU steuert. Hier der Befehl dazu:

      - service: mqtt.publish
        data:
          topic: inverter/ctrl/limit/1
          payload: >-
            {{ (states('sensor.batterieeinspeisung')|float -10)|float if
            (states('sensor.batterieeinspeisung') |float -10)| int < 800
            else 800 }}W

Bei Payload reicht auch nur der Wert in Watt („xxx W“), bei mir ist der aber dynamisch abhängig von einer anderen Entität.
„Inverter“ ist das MQTT Topic das ihr in der Ahoy DTU einstellen könnt, und die 1 hinten ist die Nummer des Wechselrichters (startet mit 0).

2 „Gefällt mir“

Hallo.

Ich muss leider das Thema nochmal aufmachen.

Eigentlich habe ich ein gutes technisches Verständnis und habe auch einige Erfahrungen im Programmieren. Naja irgendwie stehe ich auf dem Schlauch.

Nun zu meiner Frage.

Ich habe einen Hoymiles HM-800 bei den ich über MQTT ein dynamisches Limit setzen möchte. Das ganze soll über einen Flow bei Nodered erfolgen.

Leider habe ich auch noch Stunden es nicht geschafft ein Payload zu generieren das vom Wechselrichter akzeptiert wird.

Kann mir jemand anhand der Daten den MQTT Flow in Nodered posten mit dem ich das Limit setzten kann.

Meine Daten
MQTT Topic des Wechselrichters : AhoyDTU/Akku WS


Ahoy Zugriffsschutz


Moin Marko076,
wenn du in dem oben verlinkten Thread ein wenig gestöbert hast wirst du sicherlich auch den dort eingestellten Flow gefunden haben der eine NodeRed Steuerung mittels Ahoy-DTU darstellt. Wenn du damit nicht klarkommst kannst du gerne deinen Flow hier einstellen damit dir uns das mal ansehen können.

Grüße
LL

Ich habe den Flow nochmal genau angesehen.
Mein Fehler war das ich bei der ID für den Wechselrichter die Seriennummer eingetragen hatte. Statt einfach nur der 0 für den ersten und 1 für den zweiten Wechselrichter.
Nun klappt es so wie es sein soll.

Vielen Dank für eure Unterstützung.

Hi,

ich bin über das Thema gestolpert, weil ich gerne eine Minimaleinspeisung realisieren wollte.

Ich habe in der configuration.yaml mir eine Ententiät zur Leistungsbegrenzung für meinen Wechselrichter gemacht.

mqtt:
  number:
    name: "PV_Leistungsbegrenzung_Prozent"
    state_topic: "inverter/Balkon/ch0/active_PowerLimit" # Topic zum Auslesen des aktuellen Wertes (optional)
    command_topic: "inverter/ctrl/limit/0" # Topic zum Setzen des Wertes
    min: 10
    max: 100
    step: 1
    unit_of_measurement: "%"

Und mir eine Automatisierung angelegt:

    - service: number.set_value
      data_template:
        entity_id: number.pv_leistungsbegrenzung_prozent # Ihre erstellte Number Entity
        value: >
          {% set pv_leistung = states('sensor.balkon_p_ac') | float(0) %}
          {% set netz_bezug = states('sensor.kg_versorgungskeller_stromzahler_leistung') | float(0) %}
          {% set leistungs_differenz = pv_leistung - netz_bezug %}
          {% set aktuelle_begrenzung = states('number.pv_leistungsbegrenzung_prozent') | float(0) %} # Aktuelle Begrenzung auslesen
          {% set minimale_reduktion = 10 %} # Minimale Reduktion in Prozent

          {% if leistungs_differenz > 0 %}
            {# PV Überschuss - Reduzierung berechnen #}
            {% set reduktions_prozent_linear = (leistungs_differenz / pv_leistung * 100) | round(0) %}
            {% set neue_begrenzung = aktuelle_begrenzung + reduktions_prozent_linear  %} {# Lineare Reduktion additiv zur aktuellen Begrenzung #}

            {#  Lineare Reduktion auf minimale und maximale Werte begrenzen  #}
            {% set neue_begrenzung_geclamped = [neue_begrenzung, 100] | min | round(0) | max(minimale_reduktion)  %} {# Auf max 100%, min 10% begrenzen #}

            {{ neue_begrenzung_geclamped }}

          {% else %}
            {# Kein PV Überschuss oder sogar Bezug - Begrenzung aufheben (minimal) #}
            {{ minimale_reduktion }} {# Auf minimale Begrenzung setzen #}
          {% endif %}

    - service: system_log.write
      data_template:
        message: "PV Leistung: {{ states('sensor.balkon_p_ac') }}, Netzbezug: {{ states('sensor.kg_versorgungskeller_stromzahler_leistung') }}, Leistungsdifferenz: {{ leistungs_differenz }},  Neue Begrenzung: {{ value }}"
        level: info # Optional, für Debugging im Systemprotokoll

Leider funktioniert die Automatisierung nicht, ich bekomme die Fehlermeldung:

Fehler: expected float for dictionary value @ data['value']
Ergebnis:

params:
  domain: number
  service: set_value
  service_data:
    entity_id: number.pv_leistungsbegrenzung_prozent
    value: |-
      # Aktuelle Begrenzung auslesen  # Minimale Reduktion in Prozent

        
        10
  target: {}
running_script: false

Kann mir da jemand auf die Sprünge helfen?