Frage wegen Speicherbatterie und Automatisierung.

RudiP

Active member
Eigentlich bin ich ein Freund von Ereignisbasierter Programmierung.
Sprich, ein bestimmtes Ereignis tritt und eine Automatisierung wird gestartet.
Mein Problem ist nun, das ich Speicherbatterien im Keller habe, die, wenn PV Überschuss da ist, geladen werden.
Nun möchte ich aber, das die Ihre Energie abgeben, wenn es Notwendig wird.
Und da wirds schwierig.
Bedingungen sind:
1) Batterie Laden durch PV muß aus sein.
2) Wir beziehen gerade mindestens 150 Watt aus dem Stromnetz
Dann soll die Einspeisung der Batterien ins Hausnetz gestartet werden.

Aber, wenn
a) Das Laden durch PV einsetzt
oder
b) der Hausverbrauch weniger als 100 Watt ist
dann soll die Einspeisung wieder abgeschaltet werden.
Code:
alias: Batterie Einspeisung
description: >-
  Schaltet die Batterien dazu, wenn Strom eingekauft wird und die Batterien
  genug geladen sind
trigger:
  - platform: state
    entity_id:
      - switch.messstelle
    from: "on"
    to: "off"
  - platform: state
    entity_id:
      - switch.messstelle
    from: "off"
    to: "on"
  - platform: numeric_state
    entity_id:
      - sensor.electricity_rodgener_strasse_22_gesamtleistung
    below: 100
  - platform: numeric_state
    entity_id:
      - sensor.electricity_rodgener_strasse_22_gesamtleistung
    above: 150
condition:
action:
  - if:
      - condition: and
        conditions:
          - condition: numeric_state
            entity_id: sensor.electricity_rodgener_strasse_22_gesamtverbrauch
            above: 150
          - condition: numeric_state
            entity_id: sensor.nachtstrom_ch2_voltage
            above: 24.5
          - condition: state
            entity_id: switch.messstelle
            state: "off"
    then:
      - service: button.press
        metadata: {}
        data: {}
        target:
          entity_id: button.nachtstrom_turn_inverter_on
  - if:
      - condition: numeric_state
        entity_id: sensor.electricity_rodgener_strasse_22_gesamtverbrauch
        below: 0
      - condition: state
        entity_id: switch.messstelle
        state: "on"
      - condition: numeric_state
        entity_id: sensor.nachtstrom_ch2_voltage
        below: 21
    then:
      - service: button.press
        metadata: {}
        data: {}
        target:
          entity_id: button.nachtstrom_turn_inverter_off
mode: single
Ich habe es also aktuell so, das er als Trigger die obigen Bedingungen hat, also entweder über die gerade verbrauchte Leistung oder das ein/aus schalten der Batterieladung.
Im Aktion Zweig will ich dann anhand der anderen Bedingungen abfragen, welche Bedingung nun zugetroffen hat, um das Einspeisen entweder einzuschalten oder auszuschalten.

Es funktioniert soweit auch, nur das er manchmal irgendwas nicht mitbekommt. Es passiert dann schon mal, das die Einspeisung korrekt anspringt, irgendwann mal der PV Überschuß groß genug wird und das Batterieladen einsetzt, das Einspeisen aber nicht abgeschaltet wird.
Ja, man müßte sich Stundenlang davor setzen, genau den Augenblick abpassen um dann im Trace zu schauen, was passiert ist. Schwierig.
Man könnte die Logbücher durchsuchen und hoffen, das man da was findet, aber bei einem HA, das schon länger in Betrieb ist und schon vieles Automatisiert ist, sind die Logbücher gerne mal so voll, da findet man sich kaum noch zurecht.

Klar könnte ich jetzt eine Automatisierung schreiben, die z.B. alle 5 Minuten aufgerufen wird, dann diverse Bedingungen prüft und dann die entsprechende Aktion ausführt.
Aber die wird dann halt wirklich alle 5 Minuten aufgerufen, schreib das ins Logbuch und Müllt mir das so unnötig voll.

Ein Problem sehe ich in dem Auslöser über den Hausverbrauch.
Steigt der über 150, soll die Einspeisung beginnen. Da kommen dann aktuell 50 Watt aus der Batterie dazu, womit der Hausverbrauch auch wieder sinkt. Das wollte ich damit abfangen, das ich bei weniger als 100 Watt Hausverbrauch Ausschalte.

Mich würden nun Ideen oder Verbesserungsvorschläge von euch Interessieren, wie man das besser lösen könnte. Und wie gesagt, regelmäßiges Ausführen per Zeitschaltung mag ich nicht.
 
Hmmm, den Sinn dahinter Verstehe ich jetzt aber nicht.
Ich habe 4 Trigger OHNE ID. Wenn einer Auslöst, wird die Automatisierung gestartet.
Warum sollte ich bei Bedingungen nun nochmal prüfen, ob ein Trigger ausgelöst hat und ein anderer nicht ?
Bedingungen würden nur zum Tragen kommen, wenn der Aktion Zweig nur dann ausgeführt werden soll, wenn irgendwas mit den Bedingungen ist. Ich will den Aktion Zweig aber IMMER ausführen, nur halt dort entsprechend Verzweigen, je nachdem was gerade zutrifft.

Ich versuchs mal mit nem einfachen Beispiel.
Du hast 4 Wasserhähne und einen Eimer.
Trigger ist nun, das irgendein Wasserhahn geöffnet wird.
Es gibt keine Bedingungen, weil die "Dann mache" Routine soll immer ausgeführt werden.
In Dann mache fragen wir nur:
Wenn Wasserhahn 1 offen, dann Eimer unter Wasserhahn 1 stellen.
Wenn Wasserhahn 2 offen, dann Eimer unter Wasserhahn 2 stellen.
Wenn Wasserhahn 3 offen, dann Eimer unter Wasserhahn 3 stellen.
Wenn Wasserhahn 4 offen, dann Eimer unter Wasserhahn 4 stellen.
Wenn zwei oder mehr Wasserhähne offen sind, ist egal, wir haben halt nur einen Eimer.
Da hilft mir also keine ID für nen Trigger und Bedingungen brauch ich nicht.

Das Problem ist eher, das ich mit zwei Automatisierungen arbeiten könnte. Die eine schaltet den Wechselrichter nur ein, die andere schaltet ihn aus. Ich würde aber gerne beides in einer haben, was rein von der Logik her auch kein Problem sein dürfte.

Das Problem ist dabei, das die Automatisierung schon mal was macht, was sie nach meinem dafürhalten nicht hätte machen dürfen.
Ja, bei längerfristigen Auslösern kann man in den Trace schauen und Analysieren, was den so gelaufen ist.
Blöd hier ist, das es mehrere Automatisierungen gibt, die sich gegenseitig Beeinflußen können.
z.B. wenn gerade von der Batterie ins Hausnetz eingespeist wird. Jetzt kommt die Sonne raus, eine andere Automatisierung stellt fest, wir haben Stromüberschuß und aktiviert das Laden der Batterien. Damit wird diese neue Automatisierung getriggert, die dann das Einspeisen der Batterien ins Hausnetz abschalten soll.
Das ganze kann man mit Traces nicht mehr Sinnvoll verfolgen, weil während Du die eine Automatisierung untersuchst, löst die andere schon wieder aus und das Traces, was Du gebraucht hättest, wird überschrieben.

Ich kann im Logbuch zwar verfolgen, wann welche Entität durch welche Automatisierung ausgelöst wurde, aber es ist ein fürchterliches hin und her, wenn da mehrere Automatisierungen im Einsatz sind.
Ich überlege aktuell, ob ich nicht eine große Automatisierung machen soll, die quasi die gesamte PV und Batterien steuert.
Also 5, 6 oder 7 Trigger und dann bei Dann mache viele Wenn Dann Bereiche, die das steuern, was ich will.
Ich befürchte nur, das es der Übersichtlichkeit nicht förderlich ist.

Deswegen hier die Frage, ob jemand ne Idee hat, wie man es besser machen könnte.
 
Oha, da habe ich gerade noch was rausgefunden, das kannte ich ja noch gar nicht.
Wenn ich im Trace bin, sehe ich ja links das Ablaufdiagramm. Bild 1

Ich hatte schon gesehen, das man da auch auf einzelne Punkte klicken kann, aber noch nie gesehen, das mir dann exakt angezeigt wird, was HA gemacht hat, wie die Bedingungen waren und aufgrund welcher Werte da entschieden wurde.

Ich hatte schon gesehen, das man da auch auf einzelne Punkte klicken kann, aber noch nie gesehen, das mir dann exakt angezeigt wird, was HA gemacht hat, wie die Bedingungen waren und aufgrund welcher Werte da entschieden wurde.

Code:
if
Ausgeführt: 11. Mai 2024 um 13:14:13
Ergebnis:
result: false
if/condition/0 (Wenn Gesamtleistung ist unter 100)
Ausgeführt: 11. Mai 2024 um 13:14:13
Ergebnis:
result: true
if/condition/0/entity_id/0
Ausgeführt: 11. Mai 2024 um 13:14:13
Ergebnis:
result: true
state: -249.01

if/condition/1 (Batterie Laden ist An)
Ausgeführt: 11. Mai 2024 um 13:14:13
Ergebnis:
result: true
if/condition/1/entity_id/0
Ausgeführt: 11. Mai 2024 um 13:14:13
Ergebnis:
result: true
state: 'on'
wanted_state: 'on'

if/condition/2 (Nachtstrom Voltage ist unter 21)
Ausgeführt: 11. Mai 2024 um 13:14:13
Ergebnis:
result: false
if/condition/2/entity_id/0
Ausgeführt: 11. Mai 2024 um 13:14:13
Ergebnis:
result: false
state: 25.6
wanted_state_below: 21

Wie wir sehen, zwei Bedingungen, die ODER Verknüpft sind, sind erfüllt. Trotzdem sehe ich im Traces das hier.

Ausgelöst durch state of switch.messstelle um 11. Mai 2024 um 13:14:13
Wenn: Keine Aktion ausgeführt
Wenn: Keine Aktion ausgeführt
Beendet um 11. Mai 2024 um 13:14:13 (Laufzeit: 0.00 Sekunden)

Kann doch nicht sein. Die zweite Aktion hätte ausgeführt werden müssen, da mindestens eine Bedingung erfüllt ist.

Ich habe die zweite WENN DANN jetzt mal expliziert mit ODER Verknüpft, mal sehen, ob ich nun ein anderes Ergebnis bekomme.

Nur der Vollständigkeit halber.
In einer Automatisierung sind der WENN Zweig (Trigger, Auslöser) ODER Verknüpft. Es muß also nur eine der Bedingungen zutreffen.
Der ABER NUR WENN Zweig (Bedingungen) ist UND Verknüpft. Alle Bedingungen müssen erfüllt sein.
Im DANN MACHE mit dem Baustein WENN-DANN war ich nun davon ausgegangen, das hier ebenfalls ODER Verknüpft wird. Aber wenn ich mir das obere so ansehe, scheint das nicht der Fall zu sein.

So, hab mir das jetzt mal ne weile angesehen und ich denke, ja, man muß zwingend sagen, ob nun UND oder ODER Verknüpft werden soll.
 

Anhänge

  • 1715426804573.png
    1715426804573.png
    9,2 KB · Aufrufe: 1

Zurzeit aktive Besucher

Letzte Anleitungen

Statistik des Forums

Themen
4.676
Beiträge
47.752
Mitglieder
4.325
Neuestes Mitglied
Tim Schroth
Zurück
Oben