[erledigt] Regel zur Tankpreisbenachrichtigung

Für welche Projekte verwendet Ihr OpenHAB? Was habt Ihr automatisiert? Stellt eure Projekte hier vor.

Moderatoren: Cyrelian, seppy

Antworten
technick90
Beiträge: 39
Registriert: 24. Jul 2019 16:56
Answers: 1

[erledigt] Regel zur Tankpreisbenachrichtigung

Beitrag 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
von peter-pan » 19. Aug 2024 20:38
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.
Gehe zur vollständigen Antwort
Zuletzt geändert von technick90 am 19. Aug 2024 20:52, insgesamt 1-mal geändert.

Benutzeravatar
peter-pan
Beiträge: 2603
Registriert: 28. Nov 2018 12:03
Answers: 27
Wohnort: Schwäbisch Gmünd

Re: Regel zur Tankpreisbenachrichtigung

Beitrag 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)))
Pi5/8GB(PiOS Lite 64-bit(bookworm)/SSD 120GB - OH4.2.1 openhabian

technick90
Beiträge: 39
Registriert: 24. Jul 2019 16:56
Answers: 1

Re: Regel zur Tankpreisbenachrichtigung

Beitrag 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.

Benutzeravatar
peter-pan
Beiträge: 2603
Registriert: 28. Nov 2018 12:03
Answers: 27
Wohnort: Schwäbisch Gmünd

Re: Regel zur Tankpreisbenachrichtigung

Beitrag 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.
Pi5/8GB(PiOS Lite 64-bit(bookworm)/SSD 120GB - OH4.2.1 openhabian

technick90
Beiträge: 39
Registriert: 24. Jul 2019 16:56
Answers: 1

Re: Regel zur Tankpreisbenachrichtigung

Beitrag 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.

Antworten