Postkasten rules. Schalter entprellen?

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

Antworten
Benutzeravatar
djuscha
Beiträge: 130
Registriert: 14. Mai 2016 00:12

Postkasten rules. Schalter entprellen?

Beitrag 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


 


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

Re: Postkasten rules. Schalter entprellen?

Beitrag 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.
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

Benutzeravatar
djuscha
Beiträge: 130
Registriert: 14. Mai 2016 00:12

Re: Postkasten rules. Schalter entprellen?

Beitrag von djuscha »

Hmm..
also erstmal lege ich mir den Schalter fest
sys.items

Code: Alles auswählen

Switch Post
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.

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

Re: Postkasten rules. Schalter entprellen?

Beitrag 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.
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

Benutzeravatar
djuscha
Beiträge: 130
Registriert: 14. Mai 2016 00:12

Re: Postkasten rules. Schalter entprellen?

Beitrag 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') ?

Antworten