Rule nach bestimmter Uhrzeit
Moderator: seppy
- udo1toni
- Beiträge: 14034
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: Rule nach bestimmter Uhrzeit
Kein Ding, an dieser Stelle ist es halt wichtig, denn unter OH2 verwendest Du noch Joda Time, während unter OH JavaTime zum Einsatz kommt. Entsprechend gibt es einige Methoden, die etwas anders heißen (z.B. .getHourOfDay <-> .getHour)
Bezüglich Umstieg auf OH3 möchte ich Dir dringend ans Herz legen, das anzugehen. Wenn Du keine exotischen OH1 Bindings verwendest, sollte der Aufwand überschaubar sein. Mit OH4 kommen aber weitere Änderungen, und je weiter Du springen muss, umso schwieriger wird es. Umstieg OH3 -> OH4 ist vergleichsweise einfach, allenfalls wird man viele Dinge anpassen, die dann viel einfacher zu konfigurieren sind als zuvor. Zwischen OH2 und OH3 gibt es aber recht viele Fallstricke (unter anderem eben JavaTime vs. Joda Time).
Juni/Juli wird mutmaßlich OH4.0.0 stable werden, ab da wird es dann wahrscheinlich keinen regulären Zugriff auf OH3 mehr geben und die Chance auf einen allmählichen Umstieg ist vorbei.
Bezüglich Umstieg auf OH3 möchte ich Dir dringend ans Herz legen, das anzugehen. Wenn Du keine exotischen OH1 Bindings verwendest, sollte der Aufwand überschaubar sein. Mit OH4 kommen aber weitere Änderungen, und je weiter Du springen muss, umso schwieriger wird es. Umstieg OH3 -> OH4 ist vergleichsweise einfach, allenfalls wird man viele Dinge anpassen, die dann viel einfacher zu konfigurieren sind als zuvor. Zwischen OH2 und OH3 gibt es aber recht viele Fallstricke (unter anderem eben JavaTime vs. Joda Time).
Juni/Juli wird mutmaßlich OH4.0.0 stable werden, ab da wird es dann wahrscheinlich keinen regulären Zugriff auf OH3 mehr geben und die Chance auf einen allmählichen Umstieg ist vorbei.
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.2.2, LXC), mit openHABian eingerichtet
-
- Beiträge: 202
- Registriert: 29. Jul 2020 12:40
Re: Rule nach bestimmter Uhrzeit
Ok.
Mist...
Viel habe ich tatsächlich nicht in Openhab laufen, aber noch weniger Zeit...
Dann muss ich halt irgendwann nen großen Schritt machen. Aktuell sehe ich keine Chance das zu bewerkstelligen.
Andererseits, tut es mir erstmal nicht weh, dort zu bleiben.
Mist...
Viel habe ich tatsächlich nicht in Openhab laufen, aber noch weniger Zeit...
Dann muss ich halt irgendwann nen großen Schritt machen. Aktuell sehe ich keine Chance das zu bewerkstelligen.
Andererseits, tut es mir erstmal nicht weh, dort zu bleiben.
Openhab 2 auf RaspberryPi 4
-
- Beiträge: 202
- Registriert: 29. Jul 2020 12:40
Re: Rule nach bestimmter Uhrzeit
Guten Morgen zusammen.
Ich habe folgende Rule:
An dieser Shelly hängt meine Gefriertruhe dran.
Wir hatten mehrfach das Problem, das diese Steckdose keinen Strom mehr hatte und die Gefriertruhe auftaute, da keiner was bemerkte.
Nun habe ich es seither so gelöst wie in der Rule.
Nun ist es so, das im Keller das Wlan ab und zu Verbindungsabbrüche hat.
Damit kommt dann jedes Mal die Meldung.
Gerne würde ich es so haben, das die Meldung erst kommt, wenn nach einer bestimmten Zeit diese Shelly nicht wieder online ist.
Ich hoffe ihr könnt mir helfen.
Danke im Voraus!!!
Ich habe folgende Rule:
Code: Alles auswählen
rule "Keller Offline"
when
Thing "shelly:shellyplugs:6a6183" changed
then
sendTelegram("Sascha","Steckdose Keller offline")
sendTelegram("Jenny","Steckdose Keller offline")
end
Wir hatten mehrfach das Problem, das diese Steckdose keinen Strom mehr hatte und die Gefriertruhe auftaute, da keiner was bemerkte.
Nun habe ich es seither so gelöst wie in der Rule.
Nun ist es so, das im Keller das Wlan ab und zu Verbindungsabbrüche hat.
Damit kommt dann jedes Mal die Meldung.
Gerne würde ich es so haben, das die Meldung erst kommt, wenn nach einer bestimmten Zeit diese Shelly nicht wieder online ist.
Ich hoffe ihr könnt mir helfen.
Danke im Voraus!!!
Openhab 2 auf RaspberryPi 4
- udo1toni
- Beiträge: 14034
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: Rule nach bestimmter Uhrzeit
Erst mal wichtig: Die Rule funktioniert nicht so, wie Du es erwartest... denn sie meldet das Gerät auch offline, wenn der Status von OFFLINE nach ONLINE gewechselt hat.
Dann eine Frage: Welche Version von openHAB nutzt Du? (openHAB wird sehr intensiv weiterentwickelt, entsprechend ist es wichtig, die Version zu kennen, um die unterschiedlich zur Verfügung stehenden Möglichkeiten nutzen zu können)
Nun zu Deiner Rule, bzw. der Verzögerung:
Als DSL Rule
Der Knackpunkt ist, den aktuellen Status des Things innerhalb der Rule auszuwerten. Die implizite Variable newThingStatus ist allerdings noch nicht so wahnsinnig alt... ich bin mir nicht sicher, kann auch sein, dass die schon mit OH3.0 eingeführt wurde, kann aber auch genauso gut sein, dass sie erst gegen Ende OH3 eingeführt wurde (das ist halt die Frage nach der Version...)
Falls die implizite Variable bei Dir noch nicht zur Verfügung steht, musst Du mit zwei Rules arbeiten:
Die Abfrage des Zustands ist hier in den Trigger ausgelagert.
Die eine Rule triggert nur, wenn der Zustand von ONLINE kommend zu einem beliebigen anderen Zustand wechselt.
Die andere Rule triggert nur, wenn der Zustand von einem beliebigen Zustand kommend zu ONLINE wechselt.
Die Wartezeit ist beliebig, Wenn Du keine vollen Minuten haben willst, kannst Du auch mit plusSeconds() arbeiten, die anzugebenden Werte sind aber immer Integer (bzw. Long), also ganze Zahlen.
Dann eine Frage: Welche Version von openHAB nutzt Du? (openHAB wird sehr intensiv weiterentwickelt, entsprechend ist es wichtig, die Version zu kennen, um die unterschiedlich zur Verfügung stehenden Möglichkeiten nutzen zu können)
Nun zu Deiner Rule, bzw. der Verzögerung:
Als DSL Rule
Code: Alles auswählen
// Globale Variablen müssen vor der ersten Rule in der Datei definiert werden!
var Timer tFridgeAlarm = null // Timer für Alarm Stromausfall
rule "Status Shelly 6a6183"
when
Thing "shelly:shellyplugs:6a6183" changed
then
logDebug("fridgealarm","Status der Steckdose geändert auf {}",newThingStatus)
if(newThingStatus != "ONLINE" && tFridgeAlarm === null) // Status nicht ONLINE und Timer nicht gestartet
logInfo("fridgealarm","Starte Timer für Alarm") // Meldung loggern und
tFridgeAlarm = createTimer(now.plusMinutes(10), [| // Timer starten
sendTelegram("Sascha","Steckdose Keller offline")
sendTelegram("Jenny","Steckdose Keller offline")
tFridgeAlarm = null
])
else if(newThingStatus == "ONLINE") { // Status ONLINE
logInfo("fridgealarm","Steckdose wieder ONLINE, Timer abgebrochen") // Meldung loggen und
tFridgeAlarm?.cancel // Timer abbrechen, falls vorhanden
tFridgeAlarm = null
}
end
Falls die implizite Variable bei Dir noch nicht zur Verfügung steht, musst Du mit zwei Rules arbeiten:
Code: Alles auswählen
// Globale Variablen müssen vor der ersten Rule in der Datei definiert werden!
var Timer tFridgeAlarm = null // Timer für Alarm Stromausfall
rule "Status Shelly 6a6183 not online"
when
Thing "shelly:shellyplugs:6a6183" changed from ONLINE
then
logInfo("fridgealarm","Steckdose nicht online, Starte Timer für Alarm") // Meldung loggern und
tFridgeAlarm = createTimer(now.plusMinutes(10), [| // Timer starten
sendTelegram("Sascha","Steckdose Keller offline")
sendTelegram("Jenny","Steckdose Keller offline")
tFridgeAlarm = null
])
end
rule "Status Shelly 6a6183 online"
when
Thing "shelly:shellyplugs:6a6183" changed to ONLINE
then
logInfo("fridgealarm","Steckdose wieder ONLINE, Timer abgebrochen") // Meldung loggen und
tFridgeAlarm?.cancel // Timer abbrechen, falls vorhanden
tFridgeAlarm = null
end
Die eine Rule triggert nur, wenn der Zustand von ONLINE kommend zu einem beliebigen anderen Zustand wechselt.
Die andere Rule triggert nur, wenn der Zustand von einem beliebigen Zustand kommend zu ONLINE wechselt.
Die Wartezeit ist beliebig, Wenn Du keine vollen Minuten haben willst, kannst Du auch mit plusSeconds() arbeiten, die anzugebenden Werte sind aber immer Integer (bzw. Long), also ganze Zahlen.
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.2.2, LXC), mit openHABian eingerichtet
-
- Beiträge: 202
- Registriert: 29. Jul 2020 12:40
Re: Rule nach bestimmter Uhrzeit
Hallo.
Openhab 2
Das vergesse ich auch jedes Mal...
Vielen Dank, ich werde die zweite Variante gleich mal umsetzen.
Openhab 2
Das vergesse ich auch jedes Mal...
Vielen Dank, ich werde die zweite Variante gleich mal umsetzen.
Openhab 2 auf RaspberryPi 4
- udo1toni
- Beiträge: 14034
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: Rule nach bestimmter Uhrzeit
Oh, eine Antiquität...
Jetzt hast Du es ja in der Signatur stehen (da muss ich nur noch dran denken, nachzuschauen...)
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.2.2, LXC), mit openHABian eingerichtet
-
- Beiträge: 202
- Registriert: 29. Jul 2020 12:40
Re: Rule nach bestimmter Uhrzeit
Ja, Du hattest mir das an anderer Stelle schon einmal empfohlen. Leider sehe ich mich dem Vorhaben aktuell noch nicht gewachsen.
Eventuell mache ich das, wenn die Kinder etwas größer sind.
Dazu werde ich einen zweiten Pi besorgen und parallel zum bestehendem dann neu aufbauen.
Da komme ich sicher noch einmal auf dich zu
Bindings sind überschaubar. ...
Darf ich Dich zu einer anderen Rule auch noch befragen ?
Hier oder PN ?
Eventuell mache ich das, wenn die Kinder etwas größer sind.
Dazu werde ich einen zweiten Pi besorgen und parallel zum bestehendem dann neu aufbauen.
Da komme ich sicher noch einmal auf dich zu
Bindings sind überschaubar. ...
Darf ich Dich zu einer anderen Rule auch noch befragen ?
Hier oder PN ?
Openhab 2 auf RaspberryPi 4
- udo1toni
- Beiträge: 14034
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: Rule nach bestimmter Uhrzeit
Solange es um openHAB geht, sind alle Fragen willkommen
Und selbst wenn es nicht als "von allgemeinem Interesse" erscheint, so ist es meist doch auch für andere User interessant
Und selbst wenn es nicht als "von allgemeinem Interesse" erscheint, so ist es meist doch auch für andere User interessant
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.2.2, LXC), mit openHABian eingerichtet
-
- Beiträge: 202
- Registriert: 29. Jul 2020 12:40
Re: Rule nach bestimmter Uhrzeit
Ok.
Dann schiesse ich mal los:
Wird diese Rule so funktionieren ?
Auch finde ich meine crontab nicht wenn ich mich als openhabian anmelde.
Es existiert aber definitiv eine von mir erweiterte. Meine termininierten Neustarts und Sicherungen funktionieren tadellos.
Dann schiesse ich mal los:
Code: Alles auswählen
var Boolean bBatterieKZ = false
var Boolean bBatterieGWC = false
var Boolean bBatterieSZ = false
rule "Batterie Thermostat Kinderzimmer"
when
Item BatteryLevelKZ changed
then
val nLevel = (BatteryLevelKZ.state as Number).intValue
if(!bBatterieKZ && nLevel >= 10)
bBatterieKZ = true
if(bBatterieKZ && nLevel < 10) {
sendTelegram("Sascha","Thermostat Kinderzimmer Batterie 10%")
bBatterieKZ = false
}
end
rule "Batterie Thermostat Gäste WC"
when
Item BatteryLevelGWC changed
then
val nLevel = (BatteryLevelGWC.state as Number).intValue
if(!bBatterieGWC && nLevel >= 10)
bBatterieGWC = true
if(bBatterieGWC && nLevel < 10) {
sendTelegram("Sascha","Thermostat Gäste WC Batterie 10%")
bBatterieGWC = false
}
end
rule "Batterie Thermostat Schlafzimmer"
when
Item BatteryLevelSZ changed
then
val nLevel = (BatteryLevelSZ.state as Number).intValue
if(!bBatterieKZ && nLevel >= 10)
bBatterieSZ = true
if(bBatterieSZ && nLevel < 10) {
sendTelegram("Sascha","Thermostat Schlafzimmer Batterie 10%")
bBatterieSZ = false
}
end
Auch finde ich meine crontab nicht wenn ich mich als openhabian anmelde.
Code: Alles auswählen
sudo -u openhabian crontab -e
no crontab for openhabian - using an empty one
No modification made
Openhab 2 auf RaspberryPi 4
- udo1toni
- Beiträge: 14034
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: Rule nach bestimmter Uhrzeit
Mir fiele jetzt spontan nichts auf, was dagegen spräche
Natürlich ließen sich die Rules eleganter gestalten (insbesondere wenn es noch mehr als "nur" diese drei zu überwachenden Items gibt).
Ich gehe davon aus, dass Du mit den Boolean Variablen verhindern willst, mehrfach alarmiert zu werden. Das scheint auch erst mal eine gute Idee zu sein, ich frage mich aber, ob Du dann auch zuverlässig innerhalb eines überschaubaren Zeitfensters die Batterien tauschst. Ansonsten böte es sich an, z.B. einmal am Tag eine entsprechende Meldung zu generieren. Nur als Beispiel:
Du brauchst ein Group Item, in dem all BatteryLevel zusammengefasst sind. Die erste Rule triggert bei jeder Änderung eines der zugeordneten Items. Sinkt der gelieferte Wert unter 10, so wird für dieses Item Alarm ausgegeben (nur exakt beim Unterschreiten der 10%, der Wert muss kleiner 10 sein und vor der Änderung mindestens 10 gewesen sein)
Die zweite Rule erzeugt um 10 Uhr eine Liste aller Items, deren Wert unter 10 ist und sendet diese Liste.
Das Schöne: es ist egal, ob Du eine Batterie überwachst oder 1000 Batterien, Du braucht nicht eine zusätzliche Codezeile.
Wichtig ist lediglich, dass das Label einen Rückschluss auf das passende Gerät zulässt.
Natürlich ist das Label nur eine Möglichkeit, man könnte z.B. auch den Itemnamen nutzen (oder auch nur einen Teil des Namens oder des Labels, muss halt passend gestaltet sein).
Natürlich ließen sich die Rules eleganter gestalten (insbesondere wenn es noch mehr als "nur" diese drei zu überwachenden Items gibt).
Ich gehe davon aus, dass Du mit den Boolean Variablen verhindern willst, mehrfach alarmiert zu werden. Das scheint auch erst mal eine gute Idee zu sein, ich frage mich aber, ob Du dann auch zuverlässig innerhalb eines überschaubaren Zeitfensters die Batterien tauschst. Ansonsten böte es sich an, z.B. einmal am Tag eine entsprechende Meldung zu generieren. Nur als Beispiel:
Code: Alles auswählen
rule "Batterie Alarm"
when
Member of gBatteryLevel changed
then
if(!(newState instanceof Number)) {
logWarn("batalarm","Sensor {} liefert ungültigen Wert ({})!",triggeringItem.name,newState)
return;
}
if((newState as Number) >= 10)
return;
var myPrevState = 10
if(myPrevState instanceof Number)
myPrevState = myPrevState as Number
if(myPrevState >= 10) {
sendTelegram("Sascha","Thermostat " + triggeringItem.label + " Batterie unter 10%")
}
end
rule "Batterie Alarm Erinnerung"
when
Time cron "0 0 10 * * ?" // täglich um 10:00:00 Uhr
then
val myList = gBatteryLevel.members.filter[i|i.state intanceof Number].filter[j|j.state as Number < 10]
if(myList.size < 1)
return;
var String myText = "Batterielevel unter 10% bei: "
myList.forEach[i,j|
myText = myText + i.label
if(j < myList.size - 1)
myText = myText + ", "
else
myText = myText + ". Bitte tauschen!"
]
sendTelegram("Sascha",myText)
end
Die zweite Rule erzeugt um 10 Uhr eine Liste aller Items, deren Wert unter 10 ist und sendet diese Liste.
Das Schöne: es ist egal, ob Du eine Batterie überwachst oder 1000 Batterien, Du braucht nicht eine zusätzliche Codezeile.
Wichtig ist lediglich, dass das Label einen Rückschluss auf das passende Gerät zulässt.
Natürlich ist das Label nur eine Möglichkeit, man könnte z.B. auch den Itemnamen nutzen (oder auch nur einen Teil des Namens oder des Labels, muss halt passend gestaltet sein).
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.2.2, LXC), mit openHABian eingerichtet