Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.
Moderatoren: seppy , udo1toni
hulda
Beiträge: 68 Registriert: 13. Jan 2018 19:43
Answers: 0
Beitrag
von hulda » 7. Nov 2021 14:17
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
peter-pan
Beiträge: 2758 Registriert: 28. Nov 2018 12:03
Answers: 30
Wohnort: Schwäbisch Gmünd
Beitrag
von peter-pan » 7. Nov 2021 15:01
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
udo1toni
Beiträge: 15247 Registriert: 11. Apr 2018 18:05
Answers: 242
Wohnort: Darmstadt
Beitrag
von udo1toni » 8. Nov 2021 00:12
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
Beitrag
von hulda » 8. Nov 2021 06:57
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
peter-pan
Beiträge: 2758 Registriert: 28. Nov 2018 12:03
Answers: 30
Wohnort: Schwäbisch Gmünd
Beitrag
von peter-pan » 8. Nov 2021 08:14
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
Beitrag
von int5749 » 8. Nov 2021 08:15
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:
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
peter-pan
Beiträge: 2758 Registriert: 28. Nov 2018 12:03
Answers: 30
Wohnort: Schwäbisch Gmünd
Beitrag
von peter-pan » 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
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
Beitrag
von int5749 » 8. Nov 2021 08:33
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
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
openHAB 4.1.0 Release mit openHABian in einem Debian Bookworm (LXC) unter Proxmox 8.1.3
udo1toni
Beiträge: 15247 Registriert: 11. Apr 2018 18:05
Answers: 242
Wohnort: Darmstadt
Beitrag
von udo1toni » 8. Nov 2021 15:50
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
Beitrag
von hulda » 8. Nov 2021 19:01
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