[SOLVED)Timer restart - aber nur die laufenden

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

Antworten
Boris099
Beiträge: 383
Registriert: 19. Feb 2020 20:51
Answers: 3
Wohnort: Saarbrücken

[SOLVED)Timer restart - aber nur die laufenden

Beitrag von Boris099 »

Ich habe hier ein Rule welches mit
- mehreren trigger items
- mehrere items schaltet

Wenn das item != ON wird es eingeschaltet und ein Timer gesetzt
Ein Timer pro item verhindert dabei, dass manuell aktivierte items nicht beeinflusst werden.

Mein Problem:
Wenn nun einer der trigger items geschaltet wird, sollen genau die laufenden Timer
zurückgesetzt und damit praktisch verlängert werden - aber nicht alle Timer

Geht das?

Code: Alles auswählen

var Timer LED_Nachbar_Timer = null
var Timer LED_GVorne_Timer = null
var Timer LED_GWald_Timer = null

rule "Einfahrt_Licht"
when
        Item DW2_TOR received update ON or
        Item S_Touch90_1 received update ON or
        Item zwave_device_6c898019_node8_scene_number received update 4
then
        if(Nacht != OFF) {
                if(LED_Nachbar.state != ON) {
                LED_Nachbar.sendCommand(ON)
                LED_Nachbar_Timer = createTimer(now.plusSeconds(240), [|
                LED_Nachbar.sendCommand(OFF)
                ])
                }
                if(LED_GVorne.state != ON) {
                LED_GVorne.sendCommand(ON)
                LED_GVorne_Timer = createTimer(now.plusSeconds(240), [|
                LED_GVorne.sendCommand(OFF)
                ])
                }
                if(LED_GWald.state != ON) {
                LED_GWald.sendCommand(ON)
                LED_GWald_Timer = createTimer(now.plusSeconds(240), [|
                LED_GWald.sendCommand(OFF)
                ])
                }
        }
end
Zuletzt geändert von Boris099 am 19. Dez 2021 11:27, insgesamt 1-mal geändert.
Raspberry 4, Rev.1.2b, 4GB, Openhab 2.5.12 (OH3 kommt im Winter dran:-))

Benutzeravatar
udo1toni
Beiträge: 15265
Registriert: 11. Apr 2018 18:05
Answers: 245
Wohnort: Darmstadt

Re: Timer restart - aber nur die laufenden

Beitrag von udo1toni »

Ja, das geht sogar ganz leicht.

Code: Alles auswählen

var Timer LED_Nachbar_Timer = null
var Timer LED_GVorne_Timer  = null
var Timer LED_GWald_Timer   = null

rule "Einfahrt Licht"
when
    Item DW2_TOR     received update ON or
    Item S_Touch90_1 received update ON or
    Item zwave_device_6c898019_node8_scene_number received update 4
then
    if(Nacht.state != OFF) {
        if(LED_Nachbar_Timer !== null)
            LED_Nachbar_Timer.reschedule(now.plusSeconds(240))
        if(LED_Nachbar.state != ON) {
            LED_Nachbar.sendCommand(ON)
            LED_Nachbar_Timer = createTimer(now.plusSeconds(240), [|
                LED_Nachbar.sendCommand(OFF)
                LED_Nachbar_Timer = null
            ])
        }
        if(LED_GVorne_Timer !== null)
            LED_GVorne_Timer.reschedule(now.plusSeconds(240))
        if(LED_GVorne.state != ON) {
            LED_GVorne.sendCommand(ON)
            LED_GVorne_Timer = createTimer(now.plusSeconds(240), [|
                LED_GVorne.sendCommand(OFF)
                LED_GVorne_Timer = null
            ])
        }
        if(LED_GWald_Timer !== null)
            LED_GWald_Timer.reschedule(now.plusSeconds(240))
        if(LED_GWald.state != ON) {
            LED_GWald.sendCommand(ON)
            LED_GWald_Timer = createTimer(now.plusSeconds(240), [|
                LED_GWald.sendCommand(OFF)
                LED_GWald_Timer = null
            ])
        }
    }
end
Wichtig ist halt, dass der Timer beim Ablaufen korrekt deinitialisiert wird (also auf null gesetzt wird). Beim Vergleich mit null muss der Operator === bzw. !== verwendet werden.
openHAB4.3.5 stable in einem Debian-Container (bookworm) (Proxmox 8.4.1, LXC), mit openHABian eingerichtet

Boris099
Beiträge: 383
Registriert: 19. Feb 2020 20:51
Answers: 3
Wohnort: Saarbrücken

Re: Timer restart - aber nur die laufenden

Beitrag von Boris099 »

Ah OK, Du setzt also die Timer bei jedem Triggern einfach zurück und dazu ein reschedule, und das ist unabhängig vom Zustand der Lampen.
Dann Laufen die Timer, aber das tangiert die Lampen nicht wenn sie schon an waren, denn der zweite Teil fürs Ausschalten kommt ja nicht zum Zug.
Das ist gar nicht schlecht 8-) würde ich behaupten

BTW:
Ich habe jedoch jetzt noch ein kleines Problem mit der "Nacht" die wird nicht geschaltet, aber das hänge ich am Besten noch an den anderen
Beitrag mit dem Astro Binding dran, da gehört das ja hin...
Raspberry 4, Rev.1.2b, 4GB, Openhab 2.5.12 (OH3 kommt im Winter dran:-))

Benutzeravatar
udo1toni
Beiträge: 15265
Registriert: 11. Apr 2018 18:05
Answers: 245
Wohnort: Darmstadt

Re: [SOLVED)Timer restart - aber nur die laufenden

Beitrag von udo1toni »

Nein, das Problem in Deiener Rule ist, dass Du nicht auf den Status des Items zugreifst, sondern auf das Item selbst (ich gehe davon aus, dass Du ein Item namens Nacht hast). Da Du mit != OFF vergleichst, ist diese Bedingung immer erfüllt, denn das Item liefert immer etwas anderes als OFF zurück ;) Mit dem (in der Rule oben angegebenen) Nacht.state sollte es funktionieren...
openHAB4.3.5 stable in einem Debian-Container (bookworm) (Proxmox 8.4.1, LXC), mit openHABian eingerichtet

Boris099
Beiträge: 383
Registriert: 19. Feb 2020 20:51
Answers: 3
Wohnort: Saarbrücken

Re: [SOLVED)Timer restart - aber nur die laufenden

Beitrag von Boris099 »

Das mit dem .state hate ich schon geändert, ja das war nach dem Zeitpunkt.
Aber der Channel den ich für den Morgen gewählt habe, der hat nicht getriggert. Im Log sehr ich aber andere Channels obwohl ich die deaktiviert habe,. Sehr komisch

Im anderen Beitrag habe ich das detailliert dargestellt.
Ich glaube ich mach Mal noch einen Neustart.
Raspberry 4, Rev.1.2b, 4GB, Openhab 2.5.12 (OH3 kommt im Winter dran:-))

Antworten