Seite 1 von 1

[erledigt] Regel zur Tankpreisbenachrichtigung

Verfasst: 19. Aug 2024 18:25
von technick90
Hallo,

ich habe mir eine Regel zur Tankpreisbenachrichtung gebaut.

Bisher war die Preisgrenze zur Benachrichtung fest in der Regel hinterlegt.

Bisherige Regel:

Code: Alles auswählen

rule "Tankpreise Benachrichtigung"
when
    Member of Tankpreise changed
then
	var Tankpreis = triggeringItem.state.toString
	var Tankstelle = triggeringItem.label.toString
	var text = Tankstelle + " " + Tankpreis + "€"
	
	if ((triggeringItem.state <= 1.549) && (triggeringItem.state < previousState)) {
		if (Tankstelle_Benachrichtigung_Robert.state == ON) {
		sendNotification("abcd@googlemail.com", text, "oil", "Info")
			}
		if (Tankstelle_Benachrichtigung_Martin.state == ON) {
		sendNotification("efgh@googlemail.com", text, "oil", "Info")
			}
		}
end
Neue Regel:

Code: Alles auswählen

rule "Tankpreise Benachrichtigung"
when
    Member of Tankpreise changed
then
	var Tankpreis = triggeringItem.state.toString
	var Tankstelle = triggeringItem.label.toString
	var Preisgrenze = Tankstelle_Benachrichtigung_Preis.state
	var text = Tankstelle + " " + Tankpreis + "€"
	
	if ((triggeringItem.state <= Preisgrenze) && (triggeringItem.state < previousState)) {
		if (Tankstelle_Benachrichtigung_Robert.state == ON) {
		sendNotification("abcd@googlemail.com", text, "oil", "Info")
			}
		if (Tankstelle_Benachrichtigung_Martin.state == ON) {
		sendNotification("efgh@googlemail.com", text, "oil", "Info")
			}
		}
end
Die bisherige Regel hat funktioniert.
Die neue Regel funktioniert nicht.
Fehlermeldung:

Code: Alles auswählen

2024-08-19 18:21:49.361 [ERROR] [internal.handler.ScriptActionHandler] - Script execution of rule with UID 'tankpreise-1' failed: An error occurred during the script execution: Could not invoke method: org.openhab.core.model.script.lib.NumberExtensions.operator_lessEqualsThan(org.openhab.core.types.Type,java.lang.Number) on instance: null in tankpreise
Das Item Tankstelle_Benachrichtung_Preisgrenze ist vom Typ String und wird über die Sitemap mit Selection gewählt.
Hinterlegter Wert z. B. 1.549, analog zur statischen Regel.

Was mache ich falsch?

Gruß

Robert

Re: Regel zur Tankpreisbenachrichtigung

Verfasst: 19. Aug 2024 19:59
von peter-pan
Eventuell müsstest du das String-Item für den Vergleich in ein Number-Item umwandeln.

Etwa so:

Code: Alles auswählen

if ((triggeringItem.state <= Float::parseFloat(String::format("%s",Preisgrenze.state)))

Re: Regel zur Tankpreisbenachrichtigung

Verfasst: 19. Aug 2024 20:08
von technick90
@peter-pan
Vielen Dank, es funktioniert.
Ich bin ehrlich, ich komme mit dieser Programmiersprache absolut nicht klar.
Programmieren ist aber generell nicht so meins. Wenn dann nur Powershell, aus Eigeninteresse, um mir das Leben als Admin leichter zu machen.

Vielen Dank!

Eine Frage aber noch:
Ich habe ja am Anfang die Variable Preisgrenze definiert. Die ruft den Wert des Items ab.
Kann ich die Umwandlung schon hier vornehmen und dann in der eigentlichen Regel nur die bereits umgewandelte Variable verwenden?
Liest sich m. E. besser in dem Script.

Re: Regel zur Tankpreisbenachrichtigung

Verfasst: 19. Aug 2024 20:38
von peter-pan
Das sollte eigentlich auch gehen, bzw. ist die bessere Lösung.
Also so:

Code: Alles auswählen

var Number Preisgrenze = Float::parseFloat(String::format("%s",Tankstelle_Benachrichtigung_Preis.state))
und dann bleibt die If-Bedingung, wie sie war:

Code: Alles auswählen

if ((triggeringItem.state <= Preisgrenze) && (triggeringItem.state < previousState))
Mit dem Programmieren hab ich's auch nicht so, aber ich hab so allerlei "Schnipsel" in meine Regeln eingebaut und da kann man immer mal wieder nachschauen.
Und wenn nichts mehr hilft, dann hilft auf jeden Fall Udo. Der bekommt das auf jeden Fall hin. Also keine Angst vor Fragen.

Re: Regel zur Tankpreisbenachrichtigung

Verfasst: 19. Aug 2024 20:51
von technick90
Nochmal vielen Dank.

Und echt witzig, ich mache es genauso mit den Codeschnipseln.
Udo hat mir auch schon mehrfach geholfen, bin ich ebenfalls sehr dankbar für.