Seite 1 von 1
Postkasten rules. Schalter entprellen?
Verfasst: 14. Mai 2022 11:36
von djuscha
Hab eine rules die mir sagt das der Postbote Post in den Briefkasten eingeworfen hat. Hab im Postkasten umgebauten Xiaomi Door Sensor mit dem Schalter eingebaut.
Letzte Zeit prellt der Schalter und ich bekomme die Benachrichtigung mehrmals.
Kann man das irgendwie begrenzen? Z.b das wenn einmal getriggert nur einmal Benachrichtigung kommt und danach erst in z.b einer Stunde , wenn nochmal getriggert. Oder irgendwie anders Hauptsache ich bekomme die Nachrichten nur einmal.
Code: Alles auswählen
rule "Post"
when
Item Kontakt4 changed to OPEN
then
{
var picture1 = "pic1.jpg"
executeCommandLine("wget", "http://name:pass192.000.000.000/ISAPI/Streaming/channels/201/picture", "-O", "/etc/openhab/html/" + picture1)
Echo_Show_Announcement.sendCommand('Post ist da')
Echo_Show_TTS_Volume.sendCommand ('5')
Echo_Show_TTS.sendCommand('Post ist da')
Echo_Show_TTS_Volume.sendCommand ('2')
Echo_Garage_TTS.sendCommand( 'Post ist da')
Thread::sleep(3000)
val telegramAction = getActions("telegram","telegram:telegramBot:bot1")
telegramAction.sendTelegram("Post ist da \ud83d\udceb")
telegramAction.sendTelegramPhoto("http://192.000.000.000:8080/static/pic1.jpg", "Kamera Garage")
}
end
Re: Postkasten rules. Schalter entprellen?
Verfasst: 14. Mai 2022 18:48
von udo1toni
Das Einfachste ist ein Schalter, den Du in der Rule einschaltest. Zu Beginn der Rule prüfst Du, ob der Schalter eingeschaltet ist oder nicht. Ist der Schalter eingeschaltet, brichst Du die Rule ab.
Zum Ausschalten der Rule kannst Du entweder einen Timer starten oder Du nutzt einfach die Expiration Funktion, welche den Schalter nach dem eingestellten Timeout einfach wieder abschaltet.
Re: Postkasten rules. Schalter entprellen?
Verfasst: 14. Mai 2022 20:54
von djuscha
Hmm..
also erstmal lege ich mir den Schalter fest
sys.items
dann ändere ich meine rules
Code: Alles auswählen
var Timer PostTimer = null //Timer löschen
val Integer PostTimer_TimeOut = 10 //Wert für den Timer
rule "Post"
when
Item Kontakt4 changed to OPEN
then
if(Post.state == OFF) //wenn der Schalter Post aus ist läuft die rules
{
var picture1 = "pic1.jpg"
executeCommandLine("wget", "http://name:pass192.000.000.000/ISAPI/Streaming/channels/201/picture", "-O", "/etc/openhab/html/" + picture1)
Echo_Show_Announcement.sendCommand('Post ist da')
Echo_Show_TTS_Volume.sendCommand ('5')
Echo_Show_TTS.sendCommand('Post ist da')
Echo_Show_TTS_Volume.sendCommand ('2')
Echo_Garage_TTS.sendCommand( 'Post ist da')
Thread::sleep(3000)
val telegramAction = getActions("telegram","telegram:telegramBot:bot1")
telegramAction.sendTelegram("Post ist da \ud83d\udceb")
telegramAction.sendTelegramPhoto("http://192.000.000.000:8080/static/pic1.jpg", "Kamera Garage")
}
else //wenn der Post schalter nicht aus dann einschalten und timer starten und RPost schalter aus
{Post.sendCommand (ON)
PostTimer = createTimer(now.plusMinutes(PostTimer_TimeOut), [|
Post.sendCommand (OFF)
])
}
end
Ist das so richtig? timer hab ich auf 10 min gemacht das wird bestimmt reichen.
Re: Postkasten rules. Schalter entprellen?
Verfasst: 14. Mai 2022 22:50
von udo1toni
Nein.
Die Rule bricht sofort ab, wenn der Schalter ON ist. Aber wenn Du ohnehin einen Timer verwenden willst, kannst Du auch auf den Schalter verzichten:
Code: Alles auswählen
var Timer tPost = null // Timer für Post
val Integer iPost_TimeOut = 10 // Wert für den Timer
rule "Post"
when
Item Kontakt4 changed to OPEN
then
if(tPost !== null) // wenn der Timer existiert
return; // Rule abbrechen
val telegramAction = getActions("telegram","telegram:telegramBot:bot1") // hole Handle für Telegram
val strMeldung = "Post ist da" // Setze Meldungstext
val strSource = "http://name:pass@192.168.0.0/ISAPI/Streaming/channels/201/picture" // Setze Quelle
var picture1 = "pic1.jpg" // Setze Dateinamen
executeCommandLine("wget", strSource, "-O", "/etc/openhab/html/" + picture1) // speichere Bild im Web-Ordner
Echo_Show_Announcement.sendCommand(strMeldung)
Echo_Show_TTS_Volume.sendCommand (5)
Echo_Show_TTS.sendCommand(strMeldung)
Echo_Show_TTS_Volume.sendCommand (2)
Echo_Garage_TTS.sendCommand(strMeldung)
Thread::sleep(3000) // sollte nicht nötig sein!
telegramAction.sendTelegram("Post ist da \ud83d\udceb")
telegramAction.sendTelegramPhoto("http://192.168.0.0:8080/static/pic1.jpg", "Kamera Garage") // Bild senden
tPost = createTimer(now.plusMinutes(iPost_TimeOut), [| // Timer starten
tPost = null // Variable leeren
])
end
Die Variable muss ohnehin abgefragt werden (wenn man es ordentlich machen will) und dann reicht eine minimalistische Version.
Beachte bitte auch, dass ein ungebundener Schalter nicht mit sendCommand angesteuert wird, sondern mit postUpdate.
Re: Postkasten rules. Schalter entprellen?
Verfasst: 15. Mai 2022 00:11
von djuscha
O man Udo du hast ja alles geändert

) Gott sei Dank mit Komentaren

mit Variablen werde ich nie Freund

Vielen Dank !
Hab die Bilder von 2 anderen Kameras auch so geändert und es läuft.
Warum eigentlich über die Variable val strMeldung = "Post ist da" ?
es geht doch sendCommand('Post ist da') ?