Telegram Bot in rules

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

Antworten
Ron123
Beiträge: 9
Registriert: 4. Mai 2018 08:23
Answers: 0

Telegram Bot in rules

Beitrag von Ron123 »

Hallo,

hat jemand eine Idee wie man mit sendTelegram "Variablen" verschicken kann ??
Hintergrund ist der Versuch eines Batt Monitors mit der Rule welche ich hier gefunden habe
https://community.openhab.org/t/low-bat ... ng/35363/5
Beitrag von MriX umzusetzen.

habe die Rule so am laufen

Code: Alles auswählen

var String msg = ""
rule "Battery Status Check Homemeatic"
when 
	Time cron " 0/5 0 17 * * ?"
then
 
 var triggertDevices = gBATT.members.filter[state == 0]  
    triggertDevices.forEach [ i |
      msg = msg + i.name + ': ' + i.state.toString + '%\n'
      logInfo("battery-check.rules","Low battery at " + i.name + ": " + i.state.toString + "%")]
      
          sendTelegram("bot1", "Battery warning", msg)
    end
    
das var String msg ="" an den Anfang gesetzt da er sonst einen "Cannot refer to the non-final variable msg inside a lambda expression"
Error gebracht hat ...
in den Logfiles wird auch das Gerät mit dem "Batterie Problem" geloggt nur mit Telegram geht nur die Meldung Batterie Warning raus
nicht das Gerät mit .....

das mit den % Angaben fliegt noch raus habe festgestellt das es bei Homematic wohl nur gut/schlecht gibt ....

Schonmal Danke

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

Re: Telegram Bot in rules

Beitrag von udo1toni »

sendTelegramm kennt zwei Parameter, nämlich den Empfänger der Nachricht, und die Nachricht selbst. Du möchtest also die Nachricht um den Inhalt der Variablen ergänzen. In der Doku gibt es noch die zweite Form mit drei Variablen, aber dort steht dann eindeutig, dass der zweite String ein Format String ist.
Von welchem Typ sind die Batteriestatus Items? Falls die vom Type String sind, muss ein entsprechender Filter natürlich auf den String testen.
Was mich etwas verwirrt, ist der Trigger der Rule. Möchtest Du wirklich um 17 Uhr für eine Minute alle fünf Sekunden eine Nachricht verschicken? Ohne es getestet zu haben, gehe ich davon aus, dass es so funktioniert:

Code: Alles auswählen

var String msg = ""

rule "Battery Status Check Homemeatic"
    when 
        Time cron " 0 0/5 * * * ?"  //alle 5 Minuten
    then
        msg = ""
        gBATT.members.filter[ i|i.state.toString == "bad" ].forEach [ i |
            msg = msg + i.name + ': ' + i.state.toString + '%\n'
            logInfo("battery-check.rules","Low battery at {}!", i.name)
        ]
        sendTelegram("bot1", "Battery warning " + msg)
end
Allerdings wird es wohl schnell nervig, wenn Du alle 5 Minuten die gleiche Nachricht bekommst. Da fehlt also noch etwas Hinrschmalz ;)
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

Ron123
Beiträge: 9
Registriert: 4. Mai 2018 08:23
Answers: 0

Re: Telegram Bot in rules

Beitrag von Ron123 »

alle 5 Minuten ist viel zu lang :lol:
ich hatte die 0/5 noch drin und 17 Uhr zugefügt.....
0/5 sind alle 5 Sekunden ich lösche dann die 17 und bekomme alle 5 sek. eine Nachricht zum testen ........
mit 17 halt nur um 17Uhr ......

Ron123
Beiträge: 9
Registriert: 4. Mai 2018 08:23
Answers: 0

Re: Telegram Bot in rules

Beitrag von Ron123 »

Top !
gerade mal Deine Rule getestet funktioniert so wie es soll !
bis auf das bei Homematic meiner Meinung zustand 0 / 1 ausgewertet wird
0=Batt OK
1= Batt Low

aber erstmal 1000 Dank für die Erleuchtung mit Telegramm

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

Re: Telegram Bot in rules

Beitrag von udo1toni »

Ron123 hat geschrieben: 15. Mai 2018 18:43bis auf das bei Homematic meiner Meinung zustand 0 / 1 ausgewertet wird
0=Batt OK
1= Batt Low
Ja, mit Homematic kenne ich mich nicht aus. Dann müsstest Du halt die entsprechende Stelle abändern, entweder bleibst Du trotzdem beim String

Code: Alles auswählen

.filter[ i|i.state.toString == "1" ]
oder Du verwendest ein Number Item, und das dann als numerischen Wert:

Code: Alles auswählen

.filter[ i|(i.state as Number) == 1 ]
Bei einem konkreten Zahlenwert ist das letztlich wurscht, wie wir in Hessen sagen ;)
Wenn solche Filter aber gegen berechnete Zahlenwerte gehen, oder auf kleiner/größer als getestet werden soll, muss man natürlich den Status als Zahl betrachten.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

Antworten