OH3 Timer

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

hulda
Beiträge: 68
Registriert: 13. Jan 2018 19:43
Answers: 0

OH3 Timer

Beitrag von hulda »

Hallo zusammen,
nächstes Problem beim Umstellen auf OH 3.
Wieso funktioniert der Timer nicht mehr?
Muß man auch da beim Umstellen auf OH3 etwas ändern?



Code: Alles auswählen

rule "Timer Beduftung starten"
when
    Time cron "0 0 14 ? * MON-FRI" or                                                             // Montag bis Freitag 14 Uhr
    Time cron "0 0 12 ? * SAT,SUN" or                                                             // Samstag und Sonntag 12 Uhr
    Item Beduftunghauptschalter received command ON                                               // Hauptschalter wurde geschaltet
then
    var Integer iStart = 14                                                                       // Startzeitvariable
    if(now.getDayOfWeek > 5) iStart = 12                                                          // Falls Wochenende
    if((receivedCommand === null && Beduftunghauptschalter.state != ON)
        || (receivedCommand == ON && now.plusHours(3).getHourOfDay <= iStart + 2))                     // Siehe Text
        return;
    tAuto?.cancel                                                                                 // eventuell vorhandenen Timer entfernen
    tAuto = createTimer(now.plusMillis(10), [|                                                    // Timer initialisieren
        if(Beduftung_An_Aus.state != ON) {                                                        // Falls Beduftung aus
            var Integer iOnTime = 10                                                              // Default ON-Zeit
            if(Beduftung_Timer_Anzeit.state instanceof Number)                                    // falls gültiger Wert
                iOnTime = (Beduftung_Timer_Anzeit.state as Number).intValue                       // übernimm ON-Zeit aus Item
            Beduftung_An_Aus.sendCommand(ON)                                                      //Beduftung an
            tAuto.reschedule(now.plusSeconds(iOnTime))                                            // Timer bis zum erneuten Ausschalten
        } else {                                                                                  // ansonsten
            var Integer iOffTime = 290                                                            // Default OFF-Zeit
            if(Beduftung_Timer_Auszeit.state instanceof Number)                                   // falls gültiger Wert
                iOffTime = (Beduftung_Timer_Auszeit.state as Number).intValue                     // übernimm OFF-Zeit aus Item
            Beduftung_An_Aus.sendCommand(OFF)                                                     // Beduftung aus
            tAuto.reschedule(now.plusSeconds(iOffTime))                                           // Timer bis zum erneuten Einschalten
        }
    ])
end

rule "Timer Beduftung stoppen"
when
    Time cron "0 0 21 * * ?" or                                                                   // täglich um 21 Uhr
    Item Beduftunghauptschalter received command OFF                                              // Hauptschalter wurde geschaltet
then
    Beduftung_An_Aus.sendCommand(OFF)                                                             // Beduftung abschalten
    tAuto?.cancel                                                                                 // und Timer stopppen
end



Gruß Dirk

Benutzeravatar
peter-pan
Beiträge: 2758
Registriert: 28. Nov 2018 12:03
Answers: 30
Wohnort: Schwäbisch Gmünd

Re: OH3 Timer

Beitrag von peter-pan »

Da hab ich was im internationalen Forum gefunden.

Wenn es wirklich nur um den timer geht, könntest du ja das now.plusMillis(10) durch now.plusNanos(100000) ersetzen. So verstehe ich das zumindest.
Pi5/8GB(PiOS Lite 64-bit(bookworm)/SSD 120GB - OH4.3.5 openhabian

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

Re: OH3 Timer

Beitrag von udo1toni »

getHourOfDay muss auch noch auf getHour geändert werden.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

hulda
Beiträge: 68
Registriert: 13. Jan 2018 19:43
Answers: 0

Re: OH3 Timer

Beitrag von hulda »

Hallo,
habe mal beides eingetragen.
Leider ohne Erfolg..
Timer läuft nicht.
Kann man irgendwo sehen ob der Timer läuft? Oder nur an der Reaktion des Schalters...

Code: Alles auswählen



rule "Timer Beduftung starten"
when
    Time cron "0 0 6 ? * MON-FRI" or                                                             // Montag bis Freitag 14 Uhr
    Time cron "0 0 12 ? * SAT,SUN" or                                                             // Samstag und Sonntag 12 Uhr
    Item Beduftunghauptschalter received command ON                                               // Hauptschalter wurde geschaltet
then
    var Integer iStart = 14                                                                       // Startzeitvariable
    if(now.getDayOfWeek > 5) iStart = 12                                                          // Falls Wochenende
    if((receivedCommand === null && Beduftunghauptschalter.state != ON)
        || (receivedCommand == ON && now.plusHours(3).getHour <= iStart + 2))                     // Siehe Text
        return;
    tAuto?.cancel                                                                                 // eventuell vorhandenen Timer entfernen
    tAuto = createTimer(now.plusNanos(100000), [|                                                    // Timer initialisieren
        if(Beduftung_An_Aus.state != ON) {                                                        // Falls Beduftung aus
            var Integer iOnTime = 10                                                              // Default ON-Zeit
            if(Beduftung_Timer_Anzeit.state instanceof Number)                                    // falls gültiger Wert
                iOnTime = (Beduftung_Timer_Anzeit.state as Number).intValue                       // übernimm ON-Zeit aus Item
            Beduftung_An_Aus.sendCommand(ON)                                                      //Beduftung an
            tAuto.reschedule(now.plusSeconds(iOnTime))                                            // Timer bis zum erneuten Ausschalten
        } else {                                                                                  // ansonsten
            var Integer iOffTime = 290                                                            // Default OFF-Zeit
            if(Beduftung_Timer_Auszeit.state instanceof Number)                                   // falls gültiger Wert
                iOffTime = (Beduftung_Timer_Auszeit.state as Number).intValue                     // übernimm OFF-Zeit aus Item
            Beduftung_An_Aus.sendCommand(OFF)                                                     // Beduftung aus
            tAuto.reschedule(now.plusSeconds(iOffTime))                                           // Timer bis zum erneuten Einschalten
        }
    ])
end

rule "Timer Beduftung stoppen"
when
    Time cron "0 0 21 * * ?" or                                                                   // täglich um 21 Uhr
    Item Beduftunghauptschalter received command OFF                                              // Hauptschalter wurde geschaltet
then
    Beduftung_An_Aus.sendCommand(OFF)                                                             // Beduftung abschalten
    tAuto?.cancel                                                                                 // und Timer stopppen
end

Benutzeravatar
peter-pan
Beiträge: 2758
Registriert: 28. Nov 2018 12:03
Answers: 30
Wohnort: Schwäbisch Gmünd

Re: OH3 Timer

Beitrag von peter-pan »

hulda hat geschrieben: 8. Nov 2021 06:57 Timer läuft nicht.

Code: Alles auswählen

rule "Timer Beduftung starten"
when
    Time cron "0 0 6 ? * MON-FRI" or                                                             // Montag bis Freitag 14 Uhr
    Time cron "0 0 12 ? * SAT,SUN" or                                                             // Samstag und Sonntag 12 Uhr
    Item Beduftunghauptschalter received command ON                                               // Hauptschalter wurde geschaltet
then
    var Integer iStart = 14                                                                       // Startzeitvariable
    if(now.getDayOfWeek > 5) iStart = 12                                                          // Falls Wochenende
    if((receivedCommand === null && Beduftunghauptschalter.state != ON)
        || (receivedCommand == ON && now.plusHours(3).getHour <= iStart + 2))                     // Siehe Text
        logInfo("Beduftung","Regel abgebrochen")
        return;
    tAuto?.cancel                                                                                 // eventuell vorhandenen Timer entfernen
    tAuto = createTimer(now.plusNanos(100000), [|                                                    // Timer initialisieren
        logInfo("Beduftung","Timer initialisiert")
    
        if(Beduftung_An_Aus.state != ON) {                                                        // Falls Beduftung aus
            var Integer iOnTime = 10                                                              // Default ON-Zeit
            if(Beduftung_Timer_Anzeit.state instanceof Number)                                    // falls gültiger Wert
                iOnTime = (Beduftung_Timer_Anzeit.state as Number).intValue                       // übernimm ON-Zeit aus Item
            Beduftung_An_Aus.sendCommand(ON)                                                      //Beduftung an
            tAuto.reschedule(now.plusSeconds(iOnTime))                                            // Timer bis zum erneuten Ausschalten
        } else {                                                                                  // ansonsten
            var Integer iOffTime = 290                                                            // Default OFF-Zeit
            if(Beduftung_Timer_Auszeit.state instanceof Number)                                   // falls gültiger Wert
                iOffTime = (Beduftung_Timer_Auszeit.state as Number).intValue                     // übernimm OFF-Zeit aus Item
            Beduftung_An_Aus.sendCommand(OFF)                                                     // Beduftung aus
            tAuto.reschedule(now.plusSeconds(iOffTime))                                           // Timer bis zum erneuten Einschalten
        }
    ])
end
Ich hab mal auf die Schnelle zwei Logs eingeschoben. Vielleicht kannst du da schon was erkennen.
Pi5/8GB(PiOS Lite 64-bit(bookworm)/SSD 120GB - OH4.3.5 openhabian

int5749
Beiträge: 1173
Registriert: 4. Nov 2019 22:08
Answers: 9

Re: OH3 Timer

Beitrag von int5749 »

hulda hat geschrieben: 8. Nov 2021 06:57 Kann man irgendwo sehen ob der Timer läuft? Oder nur an der Reaktion des Schalters...
now.plusNanos(100000) entspricht ja gerade einmal 0,1ms.
10ms ist schon sehr wenig, ein Timer von 0,1mms evtl. doch schon zu kurz??

Wenn es wirklich 10ms sein sollte und dies bisher funktioniert hat, dann:

Code: Alles auswählen

now.plusNanos(10000000)
hulda hat geschrieben: 8. Nov 2021 06:57 Kann man irgendwo sehen ob der Timer läuft? Oder nur an der Reaktion des Schalters...
Du könntest noch Log Einträge erstellen, damit Du siehst wo in der Rule es hakt. <<== Dies hat ja auch schon Peter (etwas schneller) eingebaut :)

VG
openHAB 4.1.0 Release mit openHABian in einem Debian Bookworm (LXC) unter Proxmox 8.1.3

Benutzeravatar
peter-pan
Beiträge: 2758
Registriert: 28. Nov 2018 12:03
Answers: 30
Wohnort: Schwäbisch Gmünd

Re: OH3 Timer

Beitrag von peter-pan »

int5749 hat geschrieben: 8. Nov 2021 08:15 Wenn es wirklich 10ms sein sollte und dies bisher funktioniert hat, dann:
Sorry, mit den Nullen hab' ich's nicht so :oops: ;)
Pi5/8GB(PiOS Lite 64-bit(bookworm)/SSD 120GB - OH4.3.5 openhabian

int5749
Beiträge: 1173
Registriert: 4. Nov 2019 22:08
Answers: 9

Re: OH3 Timer

Beitrag von int5749 »

peter-pan hat geschrieben: 8. Nov 2021 08:24
int5749 hat geschrieben: 8. Nov 2021 08:15 Wenn es wirklich 10ms sein sollte und dies bisher funktioniert hat, dann:
Sorry, mit den Nullen hab' ich's nicht so :oops: ;)
:) Not your fault, kam mir nur zu wenig vor und dank google gibt es ja schöne Online Konverter.
Denn auch ich vergesse da gerne mal eine 0 :lol:
openHAB 4.1.0 Release mit openHABian in einem Debian Bookworm (LXC) unter Proxmox 8.1.3

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

Re: OH3 Timer

Beitrag von udo1toni »

Die 10 ms sind im Übrigen nicht unbedingt nötig. Es geht dabei darum, dass openHAB den Code schon komplett im Scheduler eingetragen hat, bis der Timer abläuft.

Bist Du sicher, dass die Rule überhaupt fehlerfrei geladen wird? Siehst Du in openhab.log eine Meldung in der Art wie

Code: Alles auswählen

2021-11-08 15:48:36.146 [INFO ] [el.core.internal.ModelRepositoryImpl] - Loading model 'my.rules'
?
Werden evtl. zum Zeitpunkt der Ausführung irgendwelche Fehler ausgegeben?
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

hulda
Beiträge: 68
Registriert: 13. Jan 2018 19:43
Answers: 0

Re: OH3 Timer

Beitrag von hulda »

Das sind die Fehlermeldungen die ich gefunden habe

Code: Alles auswählen

Script execution of rule with UID 'timer-3' failed: class java.lang.Integer cannot be cast to class java.lang.Enum (java.lang.Integer and java.lang.Enum are in module java.base of loader 'bootstrap') in timer

Code: Alles auswählen

 Validation issues found in configuration model 'timer.rules', using it anyway:
Unreachable expression.

Code: Alles auswählen

- Script execution of rule with UID 'timer-1' failed: class java.lang.Integer cannot be cast to class java.lang.Enum (java.lang.Integer and java.lang.Enum are in module java.base of loader 'bootstrap') in timer

Antworten