Hoymiles abregeln bei zu hoher Einspeisung

RudiP

Well-known member
Ich möchte meinen Hoymiles Wechselrichter abregeln, wenn der zu viel Einspeist. Was ich bisher habe:
Code:
alias: Nulleinspeisung
description: ""
trigger:
  - platform: time_pattern
    seconds: "10"
  - platform: time_pattern
    seconds: "20"
  - platform: time_pattern
    seconds: "30"
  - platform: time_pattern
    seconds: "40"
  - platform: time_pattern
    seconds: "50"
  - platform: time_pattern
    seconds: "00"
condition:
  - type: is_power
    condition: device
    device_id: 2e562692166a7f556412a313a97fe3eb
    entity_id: e08cbf7ef28d8daf1565733651991cdb
    domain: sensor
    below: -600
action:
  - type: toggle
    device_id: 5a94c05a6adc65c11a6b7636771cc523
    entity_id: 26590bd310b447105e3ba73076c881ec
    domain: switch
mode: single
Alle 10 Sekunden wird geprüft, wie groß die Einspeisung ist. Ist die größer als -600 Watt, dann wird zur Kontrolle eine Steckdose umgeschaltet.
So weit, so gut.
Der einfache weg wäre nun, die Produktion einfach ganz abzuschalten, was nicht so toll wäre.
Besser wäre es, wenn man die Produktion drosseln könnte.
ABER, ich will den Eleganten weg.

Wenn Einspeisung > - 600 dann drossel die Produktion um 10 Watt.
Das machen wir so lange, bis weniger als 600 Watt eingespeist werden.
ABER, ich kann nicht einfach um 10 Watt reduzieren, ich muß da schon einen Wert eintragen.
Also z.B: SET Produktion = 590

Am einfachsten wäre es nun, wenn ich sagen kann: Set Produktion = aktuelle Einspeisung - (aktuelle Einspeisung - 600)
Würden also 620 Watt eingespeist, dann wären das 620 - (620 - 600) = 600
Da noch ein - 50 oder -100 dran, das nur 500 bis 550 Watt eingespeist werden, wäre wohl das kleinere Problem.
Mein erster Gedanke war: Setzt Du eine Variable. ABER, wie kann ich in der Automatisierung eine Variable setzen und die Werte wie oben setzen ?
- variables:
Einspseisung: 50
definiert mir zwar die Variable, aber wie kann ich der den Wert eines Sensor zuweisen ?

Schreibe ich sowas:
Code:
variables:
  Einspseisung: {{  ((states('sensor.electricity_rodgener_strasse_22_total_power') | float }}
Macht er mir nach dem Speichern dieses draus:
Code:
variables:
  Einspseisung:
    "[object Object]": null
 
Den Wechselrichter kannst Du doch fest auf 600W max. einstellen. Dann brauchst du nichtt regeln und wenn HA mal ausfällt gibt es auch keine Probleme.
 
So, die Formel oben war falsch, so viel weiß ich schon mal. :D
Ich habe mit jetzt einfach mal einen Sensor in den template.yaml gemacht.
Code:
  - sensor:
    - name: PV Einspeisung
      unique_id: PV_Einspeisung
      unit_of_measurement: "W"
      device_class: power
      state_class: measurement
      state: >
        {{  ((states('sensor.electricity_rodgener_strasse_22_total_power') | float - 600)) }}
So habe ich dann eine Entität, die mir anzeigt, wenn die Einspeisung über 600 Watt geht bzw. wie viel über 600 Watt.
Damit kann ich dann, sobald ich soweit bin, mit einer weiteren Formel bestimmen, wie weit ich den Wechselrichter reduzieren muß, damit nie mehr als 600 Watt eingespeist werden.
Sobald ich die Automatisierung am laufen habe, melde ich mich nochmal.
 
Davon stand da nichts 😉
Wahrscheinlich weil es für die eigentliche Frage nicht relevant war. ;)
Aber leider klappt es immer noch nicht so ohne weiteres.
Das setzen eines errechneten Wertes ist wohl doch etwas umständlicher
Code:
service: number.set_value
data:
  value: "{{ states('PV Einspeisung') | float(0) }}"
target:
  entity_id: f1f3f486dcc5f83cfb8921b981e478bb
enabled: true
Das habe ich in dem Aktionteil als "Aufruf eines Dienstes 'Nummer'.....
Leider funktioniert das auch nicht. Fehlermeldung beim Trace:
Value 0.0 for number.wechselrichter_1_limit_nonpersistent_absolute is outside valid range 10.0 - 2250.0

Trage ich anstatt "{{ states('PV Einspeisung') | float(0) }}" einfach mal 650 ein, dann wird der Wert im Wechselrichter auch gesetzt.
Wie schaffe ich es, das mir der Wert von PV Einspeisung übermittelt wird ?
 
Doch schon. Wenn nur ein Umrichter > fest auf 600 setzen, Problem gelöst.

Bei zweien musst du ja beide regeln, falls beide mehr als 600 machen.

Und bei einem Intervall von 10 Sekunden ist das eher steuern als regeln 😉
 
Nein, das eigentliche Thema ist, wie kann ich die Werte speichern, berechnen und weiter geben. Ob nun an einen ider 10 ist dabei Nebensache.
Und nein, selbst bei zwei muss ich nicht zwei Regeln, einer würde auch reichen, wenn ich den auf 0 drehe, kann der andere nicht über 600 Watt abgeben. Zumindest nicht so ohne weiteres.
Und doch, auch bei einem Intervall von 10 Sekunden ist es immer noch Regeln. Ich Regel die Leistung so lange runter, bis sie in einen definierten Bereich passt. Da ist nirgendwo die Rede von Zeit.
Aber das ist nun Kleinkrämerei, ob das nun so oder so heißt, es hilft nicht dabei, eine Lösung zu finden.
Aber ich bin sicher auch dankbar, wenn Du eine bessere Lösung kennst, als in einem zu definierenden Intervall abzufragen und dann zu regeln.
 
YAML:
alias: Nulleinspeisung
description: ""
trigger:
  - platform: time_pattern
    seconds: /10
condition:
  - type: is_power
    condition: device
    device_id: 2e562692166a7f556412a313a97fe3eb
    entity_id: e08cbf7ef28d8daf1565733651991cdb
    domain: sensor
    below: -600
action:
  - variables:
      einspeisung: >-
        {{ states('sensor.electricity_rodgener_strasse_22_total_power') |
        float(0) - (states('sensor.electricity_rodgener_strasse_22_total_power')
        | float(0) - 600) }}
  - service: number.set_value
    data:
      value: "{{ einspeisung }}"
    target:
      entity_id: f1f3f486dcc5f83cfb8921b981e478bb
mode: single
 

Zurzeit aktive Besucher

Keine Mitglieder online.

Letzte Anleitungen

Statistik des Forums

Themen
6.115
Beiträge
59.425
Mitglieder
6.160
Neuestes Mitglied
gonzo12345
Zurück
Oben