Hilfe bei Automatisierung: Action bei mehrfachem Trigger durch Stromverbrauch-Entity

Putarex

New member
Moin zusammen, 😎

ich habe eine Tauchpumpe die über einen Tuya-Smartplug in HA eingerichtet ist.

Beim einschalten (durch die Pumpen-Elektronik) steigt der Stromverbrauch auf >15 Watt (mal mehr (>200 Watt), mal weniger und wenn die Pumpe fertig ist schaltet die Pumpe (nicht das Smartplug) ab und der Stromverbrauch geht auf rund 1 Watt bis er kurze Zeit auf 0 Watt geht (denke wenn die Elkos leer sind).

Wenn der Wasserstand sehr niedrig ist, macht die Pumpe das sehr oft und kurz hintereinander.
Also:
einschalten, abpumpen, ausschalten, +/- 2 sek. Pause, einschalten, abpumpen, ausschalten, +/- 2 sek. Pause, ... usw.
Ich möchte nun wenn dieses Verhalten da 3 mal vorgekommen ist, die Pumpe für einen gewissen Zeitraum abschalten über den Smartplug (12 Stunden)...

Ich stelle mir das automatisiert so vor (ohne jetzt eine spezielle syntax zu benutzen):

Python:
if zeit.verbrauch_unter_15_watt < 5 sek:
    zaehler++
if zaehler = 3:
    trigger switch_off.smartplug

Ich habe keine Ahnung wie man das am besten in HA automatisieren könnte.
Bestimmt gibt es einen eleganteren weg, den ich gerade nicht sehe. 🤔

An die Automatisierungs-Spezies: Habt Ihr eine Idee?

Lieben Dank und viele Grüße,
Putarex
 

alexamend

Active member
Vermutlich must du dir ein template counter anlegen und diesen als trigger der automation einsetzten, schau mal nach counter, ich hab aktuell keinen (da keine Verwendung)
 

Putarex

New member
OK. Danke Dir.👍

Überlege nur gerade ob ich erkennen kann (also als Bedingung fürs hochzählen), dass die Unterbrechung max 5 Sek. war.
🤔
 

IvoryBalboa90

Active member
Zwei Möglichkeiten fallen mir spontan ein. Kopier dir die Codes mal in eine leere Automation und guck dir das dann im grafischen Editor an, um die Logik einmal zu checken. Bei Gefallen natürlich Entitäten und Geräte setzen.

Diese wäre ohne Templates:
YAML:
description: ""
mode: single
trigger:
  - platform: numeric_state
    entity_id: ""
    below: 1
condition: []
action:
  - wait_for_trigger:
      - platform: numeric_state
        entity_id: ""
        above: 1
    continue_on_timeout: false
    timeout:
      hours: 0
      minutes: 1
      seconds: 0
      milliseconds: 0
  - wait_for_trigger:
      - platform: numeric_state
        entity_id: ""
        above: 1
    continue_on_timeout: false
    timeout:
      hours: 0
      minutes: 1
      seconds: 0
      milliseconds: 0
  - wait_for_trigger:
      - platform: numeric_state
        entity_id: ""
        above: 1
    continue_on_timeout: false
    timeout:
      hours: 0
      minutes: 1
      seconds: 0
      milliseconds: 0
  - service: switch.turn_off
    data: {}

Zweite Variante (für advanced User):


YAML:
description: ""
mode: parallel
trigger:
  - platform: numeric_state
    entity_id: ""
    below: 1
condition: []
action:
  - if:
      - condition: template
        value_template: "{{ this.current == '3' }} "
    then:
      - service: switch.turn_off
        data: {}
    else:
      - wait_for_trigger:
          - platform: state
            entity_id: null
            to: "off"
        timeout:
          hours: 0
          minutes: 1
          seconds: 0
          milliseconds: 0
        continue_on_timeout: true
max: 4


Die zweite Variante lässt für jeden deiner "schnellen Zyklen" eine eigene Instanz der Automation laufen, die jeweils nach einer Minute von alleine beendet wird oder vorzeitig durch ausschalten deines Plugs. Sind 3 "schnelle Zyklen" erkannt worden, laufen also drei Instanzen gleichzeitig. Ist das der Fall, wird das vom Template erkannt und deine Pumpe ausgeschaltet.
 
Zuletzt bearbeitet:

Putarex

New member
OK.
Danke erstmal. Hab beides ausprobiert und versuche den Code zu verstehen:
Leider klappt es nicht. 🤔

Ich würde das mit meinen Code-Kenntnissen (php) mal so ausdrücken:
PHP:
# $tauchpumpe_switch ist die Schaltbare Steckdose mit Strommessung

while ($switch_tauchpumpe=="ein")
{
    #wenn stromverbrauch <10 Watt
    if ($tauchpumpe_power < 10)
        {
        #wenn Tauchpumpe-Aus für max. 10 Sekunden
        if ($tauchpumpe_aus_time < 10) $count++
        }
    if {$count==3} $switch_tauchpumpe="aus";
}

Müsste das jetzt in HA übersetzen, sofern HA das überhaupt hergibt (z.B. aus für max. 10 Sekunden)...!?
 

IvoryBalboa90

Active member
Probier mal so:

YAML:
description: ""
mode: parallel
trigger:
  - platform: numeric_state
    entity_id: XXXXX
    below: 2
condition: []
action:
  - if:
      - condition: template
        value_template: "{{ this.current == '4' }} "
    then:
      - service: switch.turn_off
        data: {}
        target:
          entity_id: YYYYYY
    else:
      - wait_for_trigger:
          - platform: numeric_state
            entity_id: XXXXX
            for:
              hours: 0
              minutes: 0
              seconds: 30
            above: 2
        timeout:
          hours: 0
          minutes: 2
          seconds: 0
          milliseconds: 0
max: 4

Bei XXXXX trägst du die Entität ein, die dir den Stromverbrauch anzeigt (sensor.irgendwas). Und bei YYYYY den Schalter von deinem Plug. (switch.irgendwas)
 

Putarex

New member
Danke.
Ich habe es eingefügt, die Tauchpumpe (der Switch) bleibt aber an.

Ich versuche gerade auch den Code zu verstehen.
Es wird ja hier ausgeschaltet:

YAML:
action:
  - if:
      - condition: template
        value_template: "{{ this.current == '4' }} "
    then:
      - service: switch.turn_off
        data: {}
        target:
          entity_id: YYYYYY

Aber wie kommt denn der value auf "4"? Sehe da keinen inkrementierung... 🤔
Oder zählt "numeric_state" standardmäßig eins hoch...!?
Und was macht das "timeout". Bezieht sich das auf "wait_for_trigger"? Und was bewirkt das?

Sorry für die Fragen! 😏
 

IvoryBalboa90

Active member
Der Trigger
YAML:
trigger:
  - platform: numeric_state
    entity_id: XXXXX
    below: 2
löst aus, wenn deine Pumpe unter 2 Watt zieht. Eine Instanz dieser Automation startet und wartet
YAML:
     - wait_for_trigger:
          - platform: numeric_state
            entity_id: XXXXX
            for:
              hours: 0
              minutes: 0
              seconds: 30
            above: 2
darauf, dass die Pumpe wieder über 2 Watt zieht. Tut sie das nicht innerhalb 2 Minuten
YAML:
        timeout:
          hours: 0
          minutes: 2
          seconds: 0
          milliseconds: 0
dann endet diese Instanz der Automation. Sollte sie 30 Sekunden lang über 2 Watt ziehen, endet die Instanz ebenfalls. Das ist die Erkennung für das schnelle an und ausschalten.
Häufen sich nun 3 Instanzen an, sprich dein schneller Zyklus wurde 3 mal erkannt (innerhalb 2 Minuten), dann
YAML:
    - if:
      - condition: template
        value_template: "{{ this.current == '4' }} "
    then:
      - service: switch.turn_off
        data: {}
        target:
          entity_id: YYYYYY
schaltet die vierte Instanz (current=4) die Pumpe aus.

So zumindest die Theorie...

Hast du irgendwelche Fehler im Log?


Wie können das ganze aber auch von vorne anfangen und einen Counter zur Hilfe nehmen.
 

Zurzeit aktive Besucher

Letzte Anleitungen

Statistik des Forums

Themen
1.725
Beiträge
21.435
Mitglieder
1.234
Neuestes Mitglied
Doneinei
Oben