Timer für X Stunden, innerhalb der X Stunden, alle X Minuten Steckdose An/Aus

Hallo Community,

ich hab ein kleines Problem und bin nicht sicher ob dies mit Homeassistent umsetzbar ist.

Ich benötige einen Timer der für eine gewisse Zeit (z.b. 60 Minuten) läuft. In dieser Zeitspanne soll zufällig (z.b. zwischen 2-5 Minuten), eine Steckdose eingeschaltet werden die dann eine zufällige Zeit (z.b. zwischen 1-4 Minuten) läuft, danach soll die Steckdose wieder abgeschaltet werden und das ganze Spiel geht von vorne los (innerhalb der Timer Zeit von z.b. 60 Minuten).

Ich hoffe ich konnte das ganze verständlich erklären. Ich Scheiter aber allerdings bei der Umsetzung. Hat vielleicht jemand Tipps, oder besser noch, eine Lösung? Schön wäre, wenn man das alles in der Automation quasi immer wieder dynamisch eingeben kann, ist aber kein muss ;-.).

Gerne steh ich für Rückfragen zur Verfügung und danke im Vorfeld.

Gruß

Spacerat

Gestern Abend habe ich für jemanden einen Code zusammengeklickt, dessen Prinzip zu 90 % auch auf Deine Bedürfnisse paßt, siehe Timer für ein und Ausschalten - #4 von Bacardi.

Folgende Änderungen:

  • den manuellen Schalter AN/AUS steuerst Du über eine Automatisation, die Deinen Zeitraum abdeckt, z.B. 19:00 Uhr → An, 20:00 Uhr → Aus (= Deine 60 min)
  • natürlich statt Pumpe ist das bei Dir die Steckdose
  • aus dem 6min Timer1 wird bei Dir die Dauer zufällig bestimmt zwischen 2-5 min {{ range(120, 300) | random }} → Steckdose AN
  • aus dem 2 min Timer2 wird bei Dir wieder zufällig die Dauer bestimmt zwischen 1-4 min {{ range(60, 240) | random }} → Steckdose AUS

Die Idee: Eine Automatisation startet und beendet die Simulation. In diesem Zeitraum wird sowohl die Dauer der Steckdose AN als auch die Dauer der Steckdose AUS über einen Zufallsmechanismus bestimmt, dessen Grenzen Du setzt. Das Auslaufen des einen Timers startet den anderen Timer und damit den Zustand der Steckdose.

Hallo Bacardi,

dank dir schon mal für den Anstoss. Ich hab das Script jetzt soweit auf meine Umgebung angepasst, erhalte aber beim Versuch das ganze zu Speichern folgenden Fehler:

homeassistent Message malformed: extra keys not allowed @ data[‘triggers’]

Aktuell geh ich von einem Formatierungsfehler aus, such mich aber gerade “dämlich”. Den Fehler erhalte ich auch, wenn ich dein Script 1:1 versuche zu via YAML zu speichern.

Irgendeine Idee?

Update: Ist natürlich eine Automation, und kein Script - MyFault. Ich experimentiere mal rum und gebe dir dann eine Rückmeldung.

Gruss

Spacerat

So, ich hab das ganze mal angepasst, ich hab die entsprechenden Timer unter Helfer angelegt, jeweils mit 6 und 2 Minuten. Wenn ich die Random Duration im Yaml Code hinterlegen will, verschwinden die wieder.

Hier mein angepasster Code:

alias: Steckdose Multiswitch Random
description: ""
triggers:
  - trigger: state
    entity_id:
      - scene.steckdose_multiswitch_random_an_aus
    from: "off"
    to: "on"
    id: SchalterAn
  - trigger: state
    entity_id:
      - timer.6min
    from: active
    to: idle
    id: Timer6minGehtZuEnde
  - trigger: state
    entity_id:
      - timer.2min
    from: active
    to: idle
    id: Timer2minGehtZuEnde
  - trigger: state
    entity_id:
      - scene.steckdose_multiswitch_random_an_aus
    from: "on"
    to: "off"
    id: SchalterAUS
conditions: []
actions:
  - choose:
      - conditions:
          - condition: trigger
            id:
              - SchalterAN
        sequence:
          - action: timer.start
            metadata: {}
            data:
              duration:
                "[object Object]": null
            target:
              entity_id: timer.6min
          - action: switch.turn_on
            metadata: {}
            data: {}
            target:
              entity_id: switch.steckdose_multiswitch_steckdose_multiswitch
      - conditions:
          - condition: trigger
            id:
              - Timer6minGehtZuEnde
        sequence:
          - action: timer.start
            metadata: {}
            data:
              duration:
                "[object Object]": null
            target:
              entity_id: timer.2min
          - action: switch.turn_off
            metadata: {}
            data: {}
            target:
              entity_id: switch.steckdose_multiswitch_steckdose_multiswitch
      - conditions:
          - condition: trigger
            id:
              - Timer2minGehtZuEnde
          - condition: state
            state: "on"
            entity_id: switch.manueller_schalter
        sequence:
          - action: timer.start
            metadata: {}
            data:
              duration:
                "[object Object]": null
            target:
              entity_id: timer.6min
          - action: switch.turn_on
            metadata: {}
            data: {}
            target:
              entity_id: switch.steckdose_multiswitch_steckdose_multiswitch
      - conditions:
          - condition: trigger
            id:
              - SchalterAUS
        sequence:
          - action: timer.cancel
            metadata: {}
            data: {}
            target:
              entity_id:
                - timer.6min
                - timer.2min
          - if:
              - condition: state
                entity_id: switch.steckdose_multiswitch_steckdose_multiswitch
                state: "on"
            then:
              - action: switch.turn_off
                metadata: {}
                data: {}
                target:
                  entity_id: switch.steckdose_multiswitch_steckdose_multiswitch
mode: single


Wo ist mein Denkfehler? :wink:

Gruss

Spacerat

Diese Sachen müssen raus. Liegen wahrscheinlich in der Art und Weise begründet, wie Du den random Befehl eingibst.

Test


ergibt

  - action: timer.start
    metadata: {}
    data:
      duration: "{{range(120, 300) | random}}"
    target:
      entity_id: timer.bad_licht_hell_timer

Jetzt habe ich verstanden was Du meinst. Beim Anlegen des Timer Helfers kannst, mußt aber nicht eine Dauer mitgeben. Dies machst Du nachher über den Auruf aus der Automatisation. Wichtiger ist daß Du beim Anlegen diesen Haken setzt.
grafik

Hallo Bacardi, erstmal danke für deine Hilfe.

Hab die Timer entsprechend angepasst das der Zustand jetzt erhalten bleibt. Ebenfalls hab ich jetzt die Random Variable rein bekommen. Interessanterweise geht das nicht, wenn ich das im ganzen Bearbeite, sondern nur in dem jeweiligen Drop Down Menu. Das sieht, bis hierhin, zumindest gut aus.

Zum Verständnis für mich. Um das ganze jetzt auf diese eine Stunde einzugrenzen muss ich jetzt in der Automation im oberen Segment die Uhrzeit oder die Dauer konfigurieren, korrekt?

Ich hab das mit der Auslöser ID noch nicht ganz verstanden, anbei mal ein Screenshot der aktuell folgenden Einstellung dafür:

Und das ganze für aus:

Dies erkläre bitte etwas mehr, am Besten mit Screenshot(s).

triggers:
  - trigger: state
    entity_id:
      - scene.steckdose_multiswitch_random_an_aus
    from: "off"
    to: "on"
    id: SchalterAn
...
  - trigger: state
    entity_id:
      - scene.steckdose_multiswitch_random_an_aus
    from: "on"
    to: "off"
    id: SchalterAUS

Ich sehe in Deinem Code, Du versuchst über eine Szene den Schalter einzuschalten und damit den 60 min Zeitraum. Aber wann endet dieser? Laut Trigger, wenn der Schalter manuell auf Aus gestellt wird. Sieht noch nicht rund aus.

Um auf Deine Frage zu antworten: Über eine Automatisation mit festen Zeiten brauchst Du nur, wenn Du das so willst. Denkbar wäre auch ein Kalender Helfer, wo Du die Zeiten hinterlegst. Oder eben etwas was Deine Szene aktiviert und wieder deaktiviert. In dem anderen Post sah ich auch einen gelobten HACS Scheduler, ginge genauso. Du bräuchtest streng genommen auch keine gesonderte Automatisation sondern nur eine - dann müßtest Du Zeiten als Trigger setzen und die Optionen bzw. Aktionen anpassen. Sobald Du etwas mehr Erfahrungen hast, würde ich es so machen. Fürs Erste trenne in überschaubare Logiken.

Probiere einfach was Dir liegt.
Wichtig ist, der Schalter wird planmäßig AN und wieder AUS gestellt!

Wenn Du mehrere Trigger hast in einer Automatisation und hinter bestimmten soll eine gesonderte Action folgen, dann kannst Du im Action Teil sagen, Wenn der Trigger mit TriggerID = xyz, dann mache dies und das. Im oberen choose/conditions erreicht. “Ausgelöst durch” ist das Menüwort. Genauso wäre ein WENN/DANN Konstrukt möglich.