int5749 hat geschrieben: ↑9. Apr 2022 15:45
Da Du in Deiner Rule ausschließlich auf ON triggerst, kannst Du dies auch bereits beim ausführen der Rules abfragen.
Dann brauchst Du dies in der Rule nicht mehr machen und die Rule wird nur noch bei Wechsel auf ON ausgeführt.
Nein, die Rule entfernt einen laufenden Timer, falls sie triggert. Zum einen sind damit marodierende Timer ausgeschlossen, denn der Timer wird immer gelöscht, falls der Zeiger auf den Timer gesetzt ist, zum anderen erfolgt die Alarmierung ausschließlich, wenn das Tor länger als die angegeben Zeit offen steht.
int5749 hat geschrieben: ↑9. Apr 2022 15:45
Code: Alles auswählen
if (now.toLocalTime.toSecondOfDay >= 79200 && now.toLocalTime.toSecondOfDay <= 17999)
Dies sollte dann genau zwischen 22:00 und später aber nur bis 5:00 (also 4:59:59) ausgeführt werden.
Ein Wert kann nicht gleichzeitig (
&&) kleiner als 18000 und größer als 79199 sein

Hier gehört ein oder (
||) hin...
Wenn der Timer abläuft, geschieht dennoch nicht das, was gewünscht ist.
Die Prüfung auf das Zeitfenster geschieht innerhalb des Timers, soweit ist das in Ordnung (obwohl der Timer dann tagsüber vollkommen umsonst läuft).
Wenn das Zeitfenster passt, wird ein Bild erzeugt.
Unabhängig davon, ob ein Bild erzeugt wurde, wartet der Code 3 Sekunden und versendet dann das vorhandene Bild. Sprich: Tagsüber bekommst Du einfach das letzte Bild aus der Nacht gesendet. Ich gehe davon aus, dass dies eigentlich nicht erwünscht ist.
Code: Alles auswählen
import java.util.List
var Timer tGarage = null
rule "Garage Timer"
when
Item Sonoffsv2auf changed
then
tGarage?.cancel // falls noch ein Timer existiert, löschen - unabhängig vom Zustand!
if(Sonoffsv2auf.state == ON) // nur falls Garage geöffnet wurde den Timer erstellen
if((now.getHour < 5 || now.getHour > 21) // Falls Uhrzeit 22 bis 5
tGarage = createTimer(now.plusMinutes(10), [
val telegramAction = getActions("telegram","telegram:telegramBot:bot1")
val mailActions = getActions("mail","mail:smtp:samplesmtp")
val writePic = "/etc/openhab2/html/pic20.jpg"
val readPic = "http://192.168.178.140:8080/static/pic20.jpg"
executeCommandLine("ffmpeg", "-i",
"http://admin:6290@192.168.178.101:81/videostream.cgi?rate=0&user=admin&pwd=6290",
"-s", "480x300", "-f", "image2", "-vframes", "1", "pic.jpg", "-y", writePic)
Thread::sleep(3000)
telegramAction.sendTelegram( "\u26d4 Garage ist laenger als 10 min. OFFEN! \u26d4 ")
telegramAction.sendTelegramPhoto(readPic , "Kamera Garage")
val List<String> attachmentUrlList = newArrayList(readPic)
mailActions.sendHtmlMail("innogysmart@gmail.com",
"\u26d4 Garage ist laenger als 10 min. OFFEN!",
"Bitte schliessen "+ String::format("$1T",now),
attachmentUrlList)
])
end
Formatierung des Codes vor allem, damit er hier gut lesbar bleibt. Die Rules DSL scannt den Code und entfernt in einem ersten Schritt alle Kommentare. Im zweiten Schritt werden alle Indentations (Einrückungen und Umbrüche) durch einzelne Leerzeichen ersetzt. Einrückungen und Umbrüche dienen also ausschließlich der Lesbarkeit des Codes und haben sonst keinerlei Bedeutung (im Gegensatz zu YAML oder auch Python).
Die beiden lokalen Konstanten
writePic und
readPic habe ich eingeführt, damit Anpassungen an einer Stelle im Code ausgeführt werden können. Es gibt noch einige andere Strings, die statisch sind, z.B. die Adresse des Streams. Oftmals bietet es sich an, solche Strings in lokalen oder globalen Konstanten zu speichern. Im vorliegenden Fall könnte z.B. auch die Liste
attachmentUrlList ohne weiteres als globale Konstante definiert werden (so sie an anderer Stelle nicht anders belegt wird) da der Inhalt ja nichts weiter ist, als eine fixe Liste mit einem String. Das geht natürlich nur gut, solange die verwendete Konstante
readPic bereits definiert ist, die müsste also dann ebenfalls global angelegt sein, und zwar vor
attachmentUrlList. Das Bild muss hingegen zum Zeitpunkt der Definition noch nicht existieren, denn zunächst ist das ja einfach nur eine Liste mit Strings. Erst beim Aufruf der Funktion
.sendHtmlMail holt die Funktion das Bild über die URL ab.
Ich bin zu faul zum nachschauen... Was macht \u26d4 ? Gibt es einen besonderen Grund, warum dieses Zeichen in der telegram Message zweimal vorkommt, in der Mail aber nur einmal?
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet