Automation startet "else" Aktion ohne Grund (?)

Meine Automation hat den “sonst/else” Bereich ausgeführt und ich verstehe nicht warum ?.
Ist hier ein Fehler in der Auto. und ich sehe meinen Fehler nicht oder spinnt mein HA.

id: ‘1778957161720’
alias: P20 BITCOIN Miner _ CONTROLL
description: ‘’
triggers:

alias: 1 security shutdown !
trigger: numeric_state
entity_id:

sensor.antminer_s9_1_miner_consumption
for:
hours: 0
minutes: 0
seconds: 0
id: m1
enabled: true
above: 1100

alias: 2 Uhrzeit 08:05 + SOC		<<<<====   gerade ausgeführt
trigger: time
at: ‘08:05:00’
id: m2
enabled: true
alias: 3 Uhrzeit 22:05 + SOC
trigger: time
at: ‘22:05:00’
id: m3
enabled: true
conditions: 
actions:
alias: 2 Uhrzeit 08:05
if:
condition: trigger
id:
m2
condition: numeric_state
entity_id: sensor.foxess_bat_soc1_2
above: 15
then:

action: persistent_notification.create
metadata: {}
data:
message: Antminer set to 1kW
title: Miner action - speed up

device_id: 627ec843b6ecdff799ec6613b0db86d8
domain: number
entity_id: 68d74ac97fcb84b124d3bd926fb51092
type: set_value
value: 1000
else:															<<<<<=== auch ausgeführt, WARUM ?

action: persistent_notification.create
metadata: {}
data:
message: Antminer set to 400 Watt
title: Miner action - min.

device_id: 627ec843b6ecdff799ec6613b0db86d8
domain: number
entity_id: 68d74ac97fcb84b124d3bd926fb51092
type: set_value
value: 400
</>

Das System hat zuerst heute Morgen auf 1000 Watt gesetzt und dann sofort auf 400 Watt.
Sorry aber mit der Formatierung vom Code komme ich nicht wirklich klar.

Code kopieren und über das Plus Symbol als vorformatierter Text einfügen

Ein else wird immer ausgeführt wenn die if Bedingung aus irgendeinem Grund nicht erfüllt ist … was für ein Schlaumeier :wink: aber dieser Grundsatz grenzt ein.

Bei Dir

    if:
      - condition: trigger
        id:
          - m2
      - condition: numeric_state
        entity_id: sensor.foxess_bat_soc1_2
        above: 15

Wenn der Trigger mit der ID m2 aus löst UND der Sensor sensor.foxess_bat_soc1_2 > 15 ist.

  • m2 heißt bei Dir 8:05 Uhr
  • Ob sensor.foxess_bat_soc1_2 > 15 war? Geht aus Deinem Text nicht hervor. Da die Uhrzeit wohl ok war, wird es daran liegen.

Warum war der Sensor nicht über 15

  • weil er nicht über 15 war - vielleicht genau 15
  • vielleicht weil er 8:05 Uhr unavailable war?

Du solltest im Trace der Automatisation nachschauen.

Der Wert war >15, er war 65% aber ich bin 100% sicher ob er in der Sekunde der Ausführung verfügbar war.

Der SOC wird alle 5 Min. aktualisiert da die Infos aus der Cloud waren.

Ab und zu sehe ich in einer anderen Übersicht das die Werte kurz auf 0 sind. Das passiert aber sehr selten.Und HA hat ja beide Aktionen ausgeführt, wäre der Wert 0 sollte doch auch nur Else laufen oder ?

Interessant.

Sicher, daß es nur einen Durchlauf gab? Was sagt der/die Trace?
Denkbar wäre, daß Dein m2 triggerte und If ordnungsgemäß ausgeführt wurde aber danach m2 triggerte und in den else lief

Ja. Das müßte im Trace unter IF auch einsehbar sein.

Habe jetzt etwas in der Auto. gebastelt, dann gab es ein Problem beim speichern, daraufhin völlig genervt alles gelöscht.

Baue die gleich nochmal neu und ziehe heute Abend den Trace

Also ich würde zuerst die Traces angucken bevor ich die ganze Automation neu baue.

das sieht mir danach aus das du es aus der automation.yaml kopiert hast, da würde ich im normal Fall nie ran gehen, man kann die auch einfach über die UI machen:

In der UI oder direkt in der yaml?

Ich hatte die alte Auto. in der GUI erstellt und dann den yaml code aus dem Trace rauskopiert.
Aber dann hatte ich die Auto. aus Frußt gelöscht.
Neuangelegt und jetzt hat es funktioniert. Eventuell war irgendwas falsch in der ersten Auto.
So läuft es jetzt der SOC war höher als 50 und jetzt hat er nur den “then” path genommen und “else” ignoriert.

alias: ’ M2 - 800 W’
if:

condition: trigger
id:m2
condition: numeric_state
entity_id: sensor.foxess_bat_soc1_2
above: 50

then:
device_id: 627ec843b6ecdff799ec6613b0db86d8
domain: number
entity_id: 68d74ac97fcb84b124d3bd926fb51092
type: set_value
value: 800

else:
device_id: 627ec843b6ecdff799ec6613b0db86d8
domain: number
entity_id: 68d74ac97fcb84b124d3bd926fb51092
type: set_value
value: 400

Danke für eure Hilfeversuche.

Update:
Ahh werde wahnsinnig;
Ich hatte der jetzt neuen Auto. noch eine weitere Abfrage mit hinzugefügt trigger um 08:05 mit M1. Wiedererwartent hat er jetzt wieder was falsch gemacht und den Miner um 0805 auf 400 Watt gesetzt obwohl der SOC höher als 15 war und unter dem Auslöser M1 läuft. Anscheinen hat er das else von M2 genommen, häh ?
Hier was ich aus dem Trace finden kann und ich habe die Auto. jetzt nicht gelöscht, lasse die mal drin, würde gerne den Fehler finden.
Erstellt via GUI:

alias: P20 - Miner control
description: “”
triggers:

alias: M1 - 08:05
trigger: time
at: “08:05:00”
id: m1

trigger: time
at: “22:05:00”
id: m2
alias: M2 - 22:05
conditions: 

actions:

alias: M1 - 1000 W
if:
condition: trigger
id:
m1

condition: numeric_state
entity_id: sensor.foxess_bat_soc1_2
above: 15
then:

device_id: 627ec843b6ecdff799ec6613b0db86d8
domain: number
entity_id: 68d74ac97fcb84b124d3bd926fb51092
type: set_value
value: 1000
else:

device_id: 627ec843b6ecdff799ec6613b0db86d8
domain: number
entity_id: 68d74ac97fcb84b124d3bd926fb51092
type: set_value
value: 400

alias: " M2 - 800 W"
if:
condition: trigger
id:
m2

condition: numeric_state
entity_id: sensor.foxess_bat_soc1_2
above: 50
then:

device_id: 627ec843b6ecdff799ec6613b0db86d8
domain: number
entity_id: 68d74ac97fcb84b124d3bd926fb51092
type: set_value
value: 800
else:

device_id: 627ec843b6ecdff799ec6613b0db86d8
domain: number
entity_id: 68d74ac97fcb84b124d3bd926fb51092
type: set_value
value: 400
mode: single

Trace-Zeitleiste als Bild:

und noch die Aktivität

sieht für mich so aus als ob er 2x den Else path mit 400 ausageführt hat. Häh was ist hier los ?
Muss ich irgendwie ein STOP Auto. , wenn im “then” path abgebogen, einfügen oder so etwas ?

:crayon:by HarryP: Zusammenführung Doppelpost (bei Änderungen oder hinzufügen von Inhalten bitte die „Bearbeitungsfunktion“ anstatt „Antworten“ zu nutzen)

Wieder nicht richtig eingefügt, keine Einrückungen drin.

Kopier das Teil mal richtig mit den Einrückungen raus und füge das als vorformatierter Text ein.

1 „Gefällt mir“

Ich gebe meinen Vorredner Recht. Ohne korrekte Einrückungen macht es das ganze schwierig.

Aber wenn ich deine “einrückungslose” Automation so ansehe, dann tut sie doch genau das was du von ihr willst.

Sie soll um 08:05 starten,wenn id:m1 > 15.
Dann soll sie das Limit erst auf 1000 und danach auf 400 stellen, denn die 400 reagieren auch auf id:m1.

Ich denke so wie du das erstellt hast, reagiert da nix auf deine Condition >15.

Deine Automation ist falsch! Für dein Ziel.

Bitte meine Aussage in Abhängigkeit meiner korrekten Interpretation sehen. Diese kann wegen der fehlenden Einrückungen auch falsch sein.

P.s. wenn das dort oben der yaml-Code aus deiner Automation ist, dann kann der nicht funktionieren, weil falsch eingerückt!

Nein, das ist der Yaml code, der mir in der Auto. dargestellt wird unter \traces\Automations-Konfiguration ; und dann machte ich copy paste.
Jetzt hänge ich es mal als jpg in den thread, irgendwie will mien firefox nicht so recht mit diesem Forum.

Du hast zwei getrennte IF Abfragen. Die werden, unabhängig vom Trigger auch beide geprüft.
Das Verhalten ist daher korrekt.
Um 08:00:05 triggert die ID “m1”. Da auch dein SOC über 15 ist führt die erste IF-Abfrage ihren THEN Zweig aus und setzt das Power Limit auf 1000.
Danach wird die zweite IF-Abfrage ausgeführt.
Da der Auslöser nicht “m2” war, wird hier entsprechend der ELSE Zweig ausgelöst und setzt das Powerlimit auf 400.
Warum allerdings 2x auf 400 gesetzt wird erschließt sich mir nicht direkt, wobei es wahrscheinlich etwas damit zu tun hat, dass es zuerst “400” und dann"400,0" ist. Hört sich irgendwie nach Konflikt text oder float an.

Ersetze deine beiden IF-Abfragen durch ein Choose(Auswählen), dann wird nur der jeweils zum trigger passende Zweig ausgeführt.

Du kopierst einfach nicht den korrekten Code teil. Du rufts nicht die Automation auf, dann die Traces und kopierst dann unter Automationskonfiguration, sondern:
Du öffnest die Automation, klickst oben rechts auf die drei Punkte und wählst dann “In YAML bearbeiten”. Den Code kannst du sowohl direkt bearbeiten, als auch vernünftig inkl indentation kopieren… und dann hier einfügen…

ich hab das mal gemacht:

alias: P20 - Miner control
description: ""
mode: single
triggers:
  - trigger: time
    at: "08:05:00"
    id:
      - m1
    alias: M1 - 08:05
  - trigger: time
    at: "22:05:00"
    id:
      - m2
    alias: M2 - 22:05
conditions: []
actions:
  - alias: M1 - 1000 W
    if:
      - condition: trigger
        id:
          - m1
      - condition: numeric_state
        entity_id: sensor.foxess_bat_soc1_2
        above: 15
    then:
      - device_id: 627ec843b6ecdff799ec6613b0db86d8
        domain: number
        entity_id: 68d74ac97fcb84b124d3bd926fb51092
        type: set_value
        value: 1000
    else:
      - device_id: 627ec843b6ecdff799ec6613b0db86d8
        domain: number
        entity_id: 68d74ac97fcb84b124d3bd926fb51092
        type: set_value
        value: 400
  - alias: M2 - 800 W
    if:
      - condition: trigger
        id:
          - m2
      - condition: numeric_state
        entity_id: sensor.foxess_bat_soc1_2
        above: 50
    then:
      - device_id: 627ec843b6ecdff799ec6613b0db86d8
        domain: number
        entity_id: 68d74ac97fcb84b124d3bd926fb51092
        type: set_value
        value: 800
    else:
      - device_id: 627ec843b6ecdff799ec6613b0db86d8
        domain: number
        entity_id: 68d74ac97fcb84b124d3bd926fb51092
        type: set_value
        value: 400

Ich glaube auch das du einen Logikfehler hast und das @bigmirror recht hat mit seiner choose Empfehlung. Statt zwei if-Blöcke untereinander zu hängen, nutzt man choose.

Dabei wird nur der Pfad ausgeführt, der exakt zur Trigger-ID passt. Der andere Block wird komplett ignoriert.

Probier es lieber mal so:

alias: P20 - Miner control
description: ""
mode: single
triggers:
  - trigger: time
    at: "08:05:00"
    id:
      - m1
    alias: M1 - 08:05
  - trigger: time
    at: "22:05:00"
    id:
      - m2
    alias: M2 - 22:05
conditions: []
actions:
  - choose:
      - conditions:
          - condition: trigger
            id:
              - m1
        sequence:
          - if:
              - condition: numeric_state
                entity_id: sensor.foxess_bat_soc1_2
                above: 15
            then:
              - device_id: 627ec843b6ecdff799ec6613b0db86d8
                domain: number
                entity_id: 68d74ac97fcb84b124d3bd926fb51092
                type: set_value
                value: 1000
            else:
              - device_id: 627ec843b6ecdff799ec6613b0db86d8
                domain: number
                entity_id: 68d74ac97fcb84b124d3bd926fb51092
                type: set_value
                value: 400
      - conditions:
          - condition: trigger
            id:
              - m2
        sequence:
          - if:
              - condition: numeric_state
                entity_id: sensor.foxess_bat_soc1_2
                above: 50
            then:
              - device_id: 627ec843b6ecdff799ec6613b0db86d8
                domain: number
                entity_id: 68d74ac97fcb84b124d3bd926fb51092
                type: set_value
                value: 800
            else:
              - device_id: 627ec843b6ecdff799ec6613b0db86d8
                domain: number
                entity_id: 68d74ac97fcb84b124d3bd926fb51092
                type: set_value
                value: 400

Oder nimm 2 getrennte Automationen wenn du beim if else then bleiben möchtest.

btw. würde ich dir auch empfehlen keine Geräte sondern lieber Entitäten zu verwenden.

  1. besser lesbar
  2. besser zu maintainen, wenn dir mal ein Gerät kaputt geht, kannst du du dem neuen Gerät dieselbe entity-ID geben und es läuft sofort wieder, ohne dass du in die Automation eingreifen musst.

Danke euch, mit if / then / choose habe ich es hinbekommen.