Seite 1 von 1

Problem mit Zeitabschaltung in einer Rule

Verfasst: 8. Jan 2021 11:06
von OliverCJ
Hallo zusammen und ein frohes neues Jahr!

Ich habe am vergangenen Wochenende die folgende rule für meine Außenbeleuchtung geschrieben:

Code: Alles auswählen

var Timer tTerrassenlicht = null
var int Schwellenwert = 35

rule "Terrassenlicht bei Bewegung"
when
    Item WMDO_Draussen_motioncount changed
then
    if (WMDO_Draussen_luminance.state < Schwellenwert) {
        if (tTerrassenlicht !== null) {
            tTerrassenlicht.cancel
            tTerrassenlicht = null
        }
        Hue_OD_Terrasse_Wandleuchte_Color.sendCommand("29,80,80")
        Hue_OD_Terrasse_UpDown1_Color.sendCommand("29,80,80")
        Hue_OD_Terrasse_UpDown2_Color.sendCommand("29,80,80")
        createTimer(now.plusSeconds(300)) [|
        Hue_OD_Terrasse_Wandleuchte_Toggle.sendCommand(OFF)
        Hue_OD_Terrasse_UpDown1_Toggle.sendCommand(OFF)
        Hue_OD_Terrasse_UpDown2_Toggle.sendCommand(OFF)
        ]
    }
end
Die drei Lampen werden auch zuverlässig eingeschaltet, nur leider werden sie auch manchmal ziemlich schnell wieder ausgeschaltet. Wenn das passiert, dann auf jeden Fall viel schneller als nach 300 Sekunden.

Meine Vermutung ist nun (ich werde das heute Abend mal checken), dass wenn die Lampen an sind, die Helligkeit auf der Terrasse über 35% liegt und die nächste Bewegung dann ein Abschalten verursacht. Könnte das sein? Und wenn ja, wie würdet ihr die Regel umschreiben, um das zu verhindern?
Ich scheine da gerade Tomaten auf den Augen zu haben...

Danke!
Oliver

Re: Problem mit Zeitabschaltung in einer Rule

Verfasst: 8. Jan 2021 11:13
von Darkwin101
Du musst auch beim anlegen des Timers ihm den vorgesehenen Namen geben tTerrassenlicht = createTimer sonst kann er nicht abgebrochen werden usw


Gesendet von iPhone mit Tapatalk

Re: Problem mit Zeitabschaltung in einer Rule

Verfasst: 8. Jan 2021 14:11
von ODB
Kann man den timer in OH3 auch über die Design Oberfläche setzen oder ist dies nur via Code möglich?
Das expire binding gibt es scheinbar nicht mehr in OH3

Re: Problem mit Zeitabschaltung in einer Rule

Verfasst: 8. Jan 2021 14:29
von OliverCJ
Darkwin101 hat geschrieben: 8. Jan 2021 11:13 Du musst auch beim anlegen des Timers ihm den vorgesehenen Namen geben tTerrassenlicht = createTimer sonst kann er nicht abgebrochen werden usw
Darkwin.... Danke! Hab ich echt nicht gesehen. Kommt wahrscheinlich davon, wenn man zu lange auf den Bildschirm starrt.

Re: Problem mit Zeitabschaltung in einer Rule

Verfasst: 8. Jan 2021 17:06
von violine21
ODB hat geschrieben: 8. Jan 2021 14:11 Kann man den timer in OH3 auch über die Design Oberfläche setzen oder ist dies nur via Code möglich?
Ja, das geht.
Such Dir das entsprechende Item raus, klicke unter dem Menüpunkt Add Metadata auf Expiration Timer.
Dort findest Du die Einstellungen. Das gilt dann aber grundsätzlich für das Item.
Ansonsten siehe hier:
udo1toni hat geschrieben: 7. Jan 2021 00:38
violine21 hat geschrieben: 7. Jan 2021 00:15
udo1toni hat geschrieben: 6. Jan 2021 23:10 Auf dem Licht Item richtest Du das expire Tag ein und konfigurierst es auf Command OFF nach 120 Sekunden.
Gilt das dann aber generell für das Item?
Wie gehe ich vor, wenn ich das Item mehrmals unter unterschiedlichen Bedingungen nutzen will?
z.B. in einer Rule:
Bedingung 1 >>> Item 2 Minuten ein
Bedingung 2 >>> Item 30 Sekunden ein
Bedingung 3 >>> Item dauernd ein
Greife ich dann auf die üblichen Timer zurück?
Ja, dann brauchst Du einen dynamischen Timer. Das geht nur über eine Rule.

Re: Problem mit Zeitabschaltung in einer Rule

Verfasst: 8. Jan 2021 17:20
von ODB
Hallo Violine21,

Danke für deine Antwort.
Also es handelt sich bei dem Item um eine Glühbirne
die sollte natürlich nicht immer 60 Sekunden nach dem einschalten ausgehen.

Gedacht ist das nach dem öffnen der eingangstür die Lampe angeht und dann nach 60 sek wieder aus.

Wie kann ich das denn in der rule einstellen mit dem dynamischen Timer.

Sry bin noch sehr neu in der Materie

Re: Problem mit Zeitabschaltung in einer Rule

Verfasst: 9. Jan 2021 00:32
von udo1toni
Allgemein ist das Kapern eines Threads keine gute Idee... ;)

Aber sei's drum. Wenn es um eine einfache Leuchte geht, so spricht eigentlich nichts dagegen, den Expiration Timer zu verwenden. Hat man einen Bewegungsmelder, der bei jeder erkannten Bewegung ON sendet, so wird das Licht dann z.B. 60 Sekunden nach dem letzten ON-Befehl abgeschaltet. Es ist also nicht so, dass das Licht genau 60 Sekunden leuchtet.

Ein dynamischer Timer hat unterschiedliche Laufzeiten.
Ich habe bei mir z.B. eine variable Lüfter Nachlaufzeit, abhängig von der Einschaltdauer des Lichts. Beim kleinen Geschäft oder Händewaschen schaltet der Lüfter praktisch sofort wieder aus, beim großen Geschäft läuft er 5 Minuten nach, wenn jemand duscht, läuft er 15 Minuten nach. Das funktioniert eigentlich ganz zuverlässig.

Innerhalb einer Rule erstellt man einen Timer mit dem Befehl createTimer(Startzeitpunkt,Code). Den Startzeitpunkt gibt man gewöhnlich relativ zum aktuellen Zeitpunkt an, also z.B. now.plusMinutes(3). Wenn man nun die 3 durch eine Variable ersetzt, muss man nur noch mit einer Formel dafür sorgen, dass die Variable beim Setzen des Timers den gewünschten Wert enthält.