multiple Broadcast Meldungen

Allgemeine Fragen rund um die "Smart Home" Hardware/Komponenten

Moderatoren: seppy, udo1toni

shuo
Beiträge: 181
Registriert: 1. Sep 2018 18:24
Answers: 0

multiple Broadcast Meldungen

Beitrag von shuo »

Hallo zusammen,
ich habe folgendes Problem. Es läuft im Hintergrund (nicht in Openhab) ein Cronjob, der alle paar Minuten Daten vom Auto ausliest und via REST Openhab übergibt.
Ich habe eine Rule gebaut, die eine Info verschicken soll, wenn der Kilometerstand eine bestimmte Schwelle unterschritten hat.

Code: Alles auswählen

var Number counter = 0
rule "RenaultZEService_Zoe_send_broadcast_if_under_certain_limit"
when
	Item RenaultZEServices_Zoe_RemainingRange changed or
	System started
    	
then
 	if ((RenaultZEServices_Zoe_RemainingRange.state >= 100) && (RenaultZEServices_Zoe_Charging.state == "Not charging")){
        counter = 0
        logInfo("RemainingRange", "Remaining Range über 100km : " + counter)
        
     }
     if ((RenaultZEServices_Zoe_RemainingRange.state <= 100) && (counter == 0) && (RenaultZEServices_Zoe_Charging.state == "Not charging") ){             
        
        sendBroadcastNotification("Achtung! Restreichweite: " + RenaultZEServices_Zoe_RemainingRange.state +"km Ladestatus: " + RenaultZEServices_Zoe_ChargeLevel.state + "%"  )
        counter = 1
        logInfo("RemainingRange", "Remaining Range unter 100 km: " + counter)
        
     } 
     if ((RenaultZEServices_Zoe_RemainingRange.state <= 50) && (counter == 1) && (RenaultZEServices_Zoe_Charging.state == "Not charging") ){
        sendBroadcastNotification("Kritisch! Restreichweite: " + RenaultZEServices_Zoe_RemainingRange.state +"km Ladestatus: " + RenaultZEServices_Zoe_ChargeLevel.state + "%"  )
        counter = 2
        logInfo("RemainingRange", "Remaining Range unter 50 km : " + counter)

     }

end

Den Counter habe ich eingebaut, damit ich nicht ständig Nachrichten bekomme. Aber irgendwie habe ich ein Fehler. Ich bekomme immer in unregelmäßigen Abständen Nachrichten und verstehe nicht warum. Habt ihr eine Idee wo ich noch suchen könnte?
WhatsApp Image 2020-08-14 at 20.49.35.jpeg
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.

Darkwin101
Beiträge: 424
Registriert: 6. Mär 2019 11:19
Answers: 14

multiple Broadcast Meldungen

Beitrag von Darkwin101 »

Versuche den Counter mal auf 1.0 usw. zu setzen und abzufragen
Oder setze die Variable auf Integer oder auch int.


Gesendet von iPad mit Tapatalk

thomas_w

Re: multiple Broadcast Meldungen

Beitrag von thomas_w »

Wäre nicht ein Timer sinnvoll (alle 5 min.) anstatt einen Counter zu verwenden oder ein Old-/NewValue. Nur bei Veränderungen senden?

Grüße
Thomas

shuo
Beiträge: 181
Registriert: 1. Sep 2018 18:24
Answers: 0

Re: multiple Broadcast Meldungen

Beitrag von shuo »

Darkwin101 hat geschrieben: 14. Aug 2020 21:28 Versuche den Counter mal auf 1.0 usw. zu setzen und abzufragen
Oder setze die Variable auf Integer oder auch int.
Mache ich gleich mal. Sollte doch aber eigentlich nichts ausmachen, oder?
thomas_w hat geschrieben: 14. Aug 2020 21:34 Wäre nicht ein Timer sinnvoll (alle 5 min.) anstatt einen Counter zu verwenden oder ein Old-/NewValue. Nur bei Veränderungen senden?
Das habe ich nicht ganz verstanden. Ich will ja einfach nur, dass die Nachricht "einmal" kommt und nicht mehrmals verwendet wird. Daher ein flag das auf "Nachricht gesendet" gesetzt wird (counter).

shuo
Beiträge: 181
Registriert: 1. Sep 2018 18:24
Answers: 0

Re: multiple Broadcast Meldungen

Beitrag von shuo »

Was ich auch nicht verstehe ist, warum die rule überhaupt ausgeführt wird. Das Item ändert sich ja überhaupt nicht....

Ich stehe völlig auf dem Schlauch

thomas_w

Re: multiple Broadcast Meldungen

Beitrag von thomas_w »

shuo hat geschrieben: 15. Aug 2020 09:04 Was ich auch nicht verstehe ist, warum die rule überhaupt ausgeführt wird. Das Item ändert sich ja überhaupt nicht....
Mindestens 1x wird die Rules ausgeführt da System started angegeben ist

Code: Alles auswählen

Item RenaultZEServices_Zoe_RemainingRange changed or
	System started
Was ich bei mir manchmal sehe ist, wenn ich am OH Items, Rules, Things ändere und etwas hinzu kommt, dann scheint OH auch "System started" auszulösen.
shuo hat geschrieben: 15. Aug 2020 08:54
Darkwin101 hat geschrieben: 14. Aug 2020 21:28 Versuche den Counter mal auf 1.0 usw. zu setzen und abzufragen
Oder setze die Variable auf Integer oder auch int.
Mache ich gleich mal. Sollte doch aber eigentlich nichts ausmachen, oder?
Manchmal frage ich mich wie "Changed" genau auslöst wird.
Beispiel: Wenn der "alte" Wert 1,005 ist und der neue 1,0054 wird dann "Changed" ausgelöst? Integer Zahlen haben kein Nachkomma. Dann gibt es kein Rundungsproblem.

Vielleicht eine Lösung..

Grüße
Thomas

thomas_w

Re: multiple Broadcast Meldungen

Beitrag von thomas_w »

Ich habe die Rules etwas umgeschrieben und vereinfach (erst mal ohne den Broadcast). Ich hoffe das keine Syntaxfehler drin sind, hab hier nur einen einfachen Editor. Ich verwende xx.state.toString() für die Vergleiche

Code: Alles auswählen

rule "RenaultZEService_Zoe_send_broadcast_if_under_certain_limit"
when
	Item RenaultZEServices_Zoe_RemainingRange changed or
	System started
    	
then

     if (RenaultZEServices_Zoe_Charging.state.toString == "Not charging") {
	     
	if (RenaultZEServices_Zoe_RemainingRange.state.toString) < '50' {
          logInfo("RemainingRange", "Remaining Range unter 50 km  " + RenaultZEServices_Zoe_RemainingRange.state.toString)		
        } 

	if ((RenaultZEServices_Zoe_RemainingRange.state.toString) >= '50') && (RenaultZEServices_Zoe_RemainingRange.state.toString) <= '100')) {
          logInfo("RemainingRange", "Remaining Range zwischen 50 km und 100 km " + RenaultZEServices_Zoe_RemainingRange.state.toString )		
        }

        if (RenaultZEServices_Zoe_RemainingRange.state.toString) > '100') {
          logInfo("RemainingRange", "Remaining Range über 100 km " + RenaultZEServices_Zoe_RemainingRange.state.toString)				
	}	
	     
     }  else {
       // Test 
       logInfo("RemainingRange", RenaultZEServices_Zoe_Charging.state.toString)
     }

end
Vielleicht ein Ansatz...

Grüße
Thomas

shuo
Beiträge: 181
Registriert: 1. Sep 2018 18:24
Answers: 0

Re: multiple Broadcast Meldungen

Beitrag von shuo »

Also wenn ich den counter als Integer definiere, geht es auch nicht. Bekomme immer wieder die Nachricht.
thomas_w hat geschrieben: 15. Aug 2020 09:28 Mindestens 1x wird die Rules ausgeführt da System started angegeben ist
Mein Server läuft seiten Tagen durch...Uptime ist derzeit bei 26953,7 Minutes ;)
thomas_w hat geschrieben: 15. Aug 2020 10:25 Ich habe die Rules etwas umgeschrieben und vereinfach (erst mal ohne den Broadcast). Ich hoffe das keine Syntaxfehler drin sind, hab hier nur einen einfachen Editor. Ich verwende xx.state.toString() für die Vergleiche
Danke für den Ansatz. Das Problem hier wäre, dass ich jedesmal eine Nachricht bekommen würde, wenn der Km-Stand sich ändert. Und genau das will ich ja nicht. Es soll ja eben immer nur einmal die Nachricht verschickt werden....

thomas_w

Re: multiple Broadcast Meldungen

Beitrag von thomas_w »

shuo hat geschrieben: 15. Aug 2020 10:33 Danke für den Ansatz. Das Problem hier wäre, dass ich jedesmal eine Nachricht bekommen würde, wenn der Km-Stand sich ändert. Und genau das will ich ja nicht. Es soll ja eben immer nur einmal die Nachricht verschickt werden....
Einmal pro was genau?

Dann ist vielleicht ein Timer die Lösung:
anstatt:

Code: Alles auswählen

rule "RenaultZEService_Zoe_send_broadcast_if_under_certain_limit"
when
	Item RenaultZEServices_Zoe_RemainingRange changed or
	System started
    	
then
mit Time cron:
Beim Systemstart und alle zwei Stunden, hier kannst Du ja auch einstellen, z.b. alle 8 Stunden oder einmal am Tag

Code: Alles auswählen

rule "RenaultZEService_Zoe_send_broadcast_if_under_certain_limit"
when
         System started or
	Time cron "0 0 0/2 * * ?"  // alle 2 Stunden Source: http://www.quartz-scheduler.org/documentation/quartz-2.3.0/tutorials/crontrigger.html
Grüße
Thomas

shuo
Beiträge: 181
Registriert: 1. Sep 2018 18:24
Answers: 0

Re: multiple Broadcast Meldungen

Beitrag von shuo »

Hi Thomas,

ein Timer wird mein Problem nicht wirklich lösen. Ich möchte eine Nachricht rausschicken immer dann, wenn die Restreichweite unter 100 km kommt. Wenn Sie unter 100km ist, dann soll eben einmal die Nachricht verschickt werden.
Daher habe ich hier einen counter-flag eingebaut. Wenn die Nachricht einmal verschickt wurde, wird ein Flag gesetzt, sodass ich nicht mehr in die Bedingung reinkomme.
Sobald ich das Auto auflade und Restreichweite wieder über 100km ist wird das Flag wieder auf Null gesetzt und das Spiel beginnt wieder von vorne....

Antworten