Seite 1 von 2

Werte umrechnen und Aktion auslösen

Verfasst: 11. Jan 2023 11:26
von loewes
Hallo zusammen,

ich möchte aus der PV-Anlage verschiedene Werte verrechnen, dann mit einem Vorgabewert vergleichen und dann eine Aktion (URL aufrufen) ausführen. An sich sollte das kein größeres Thema sein, aber ich bin gescheitert. Gibt es da eine gute Schritt-für-Schritt-Anleitung für Einsteiger?
Ich weiß auch nicht, ob ich das als Rule oder Script anlegen soll.
Also als Zusammenfassung: ich möchte
- Messwerte voneinander abziehen
- Ergebnis mit vorgegebenem Wert vergleichen und dann einen http-Aufruf absetzen

Vielen Dank schon mal!

Re: Werte umrechnen und Aktion auslösen

Verfasst: 11. Jan 2023 14:33
von oh73
rechnen geht grundsätzlich auch in openhab,
wenn ich auch so meine Probleme hab.

ich mach das auch wieder in einer rule,
zuerst den Wert von einem Item in eine Variable,

Beispiele:

Code: Alles auswählen

var Number wert_1 = Item_Wert_1.state 						
var Number wert_2 = (Item_Wert_2.state as Number)			
var Number wert_3 = (Item_wert_3.state as Number).intValue 
es kommt immer darauf an in welchem Format der Wert in dem Item ist !
eventuell noch umwandeln

Code: Alles auswählen

var Number wert_4 = Float::parseFloat(String::format("%s",wert_1))
rechnen ist wenn das richtige Format da ist einfach,
wert_3 = wert_1 + wert_2

abfrage und Aktion ausführen get zB. mit

Code: Alles auswählen

if ((DaylightPhilips_Dunkel.state == ON) && (am_pm.state == OFF )) { 
		kwhmorgens = kwhh - standgestern 
		kwhmorgens= Float::parseFloat(String::format("%s",kwhmorgens))
		
		sMeterdgm.get(tag).postUpdate(kwhmorgens)
		smdgm32.postUpdate(kwhmorgens)
		//logInfo("Smartmeter kwhmorgens = "," "+kwhabends )
		var senden = "http://192.168.178.19/openhab_php/sm_speichern.php?kwhdg="+(smdg_Zaehlerstand.state as Number)
	
	var result =sendHttpGetRequest(senden, 1000)
		
hier ist jetzt einiges an Müll von mir drin, aber als Beispiel sollte das gehen!

Re: Werte umrechnen und Aktion auslösen

Verfasst: 13. Jan 2023 21:24
von loewes
Hallo und vielen Dank schonmal für die Antwort!
Ich bekomme das aber irgendwie nicht hin, wahrscheinlich stimmt doch irgendwas mit den Datenformaten nicht...
Also ich hab jetzt in eine Rule das hier als ECMA Script eingefügt:

Code: Alles auswählen

var production, rest;
production = 200; 
rest = production + 150;
events.postUpdate('Reststrom', rest);
Die Variable "Reststrom" ist als Item definiert und gibt hier brav 350 aus. Wenn ich aber jetzt statt der 200 einen anderen Wert (Item) einlesen will, passiert gar nichts mehr, es bleiben die 350 einfach stehen. Ich hatte das so versucht:

Code: Alles auswählen

production = itemRegistry.getItem('sB_production');
Das Item sB_production liest aus einem JSON einen Wert der PV-Produktion in Watt aus, definiert als [%d W]. Das Item liefert mir den richtigen Wert. Nur scheinbar ist da irgendwas falsch an den Definitionen und ich kann nicht damit rechnen. Kann mir jemand helfen?
Vielen Dank!

Re: Werte umrechnen und Aktion auslösen

Verfasst: 14. Jan 2023 06:24
von Harka
Moin,
gibt es im Log ein Fehler? Versuch mal dem Item-Wert vorher gezielt in einen rein numerischen Wert umzuwandeln.

Code: Alles auswählen

production = parseFloat(itemRegistry.getItem('sB_production'));
wobei EmptySoft im folgenden Beitrag eher des Nagels Kopf getroffen haben dürfte ^^

Re: Werte umrechnen und Aktion auslösen

Verfasst: 14. Jan 2023 08:25
von EmptySoft
loewes hat geschrieben: 13. Jan 2023 21:24 Das Item sB_production liest aus einem JSON einen Wert der PV-Produktion in Watt aus, definiert als [%d W]. Das Item liefert mir den richtigen Wert. Nur scheinbar ist da irgendwas falsch an den Definitionen und ich kann nicht damit rechnen. Kann mir jemand helfen?
Wenn Du den Wert eines Items in der Rule verwenden möchtest, musst Du es mit .state also zum Beispiel

Code: Alles auswählen

DeinItem.state
ansprechen. Und immer im logfile mitsehen, da steht schön drinnen, warum es nicht funktioniert :D

Re: Werte umrechnen und Aktion auslösen

Verfasst: 14. Jan 2023 18:07
von loewes
Vielen Dank! Jetzt glaub ich funktioniert es...
Aber ich glaube, ich hab noch ein Problem mit dem Trigger oder irgendetwas anderes bleibt hängen. Ich habe jetzt den Trigger auf alle 5s eingestellt, aber irgendwie bleibt scheinbar sonst alles hängen und die Werte aus dem Thing werden nicht mehr aktualisiert.
Kann ich die Log-Datei irgendwie auch auf der grafischen Oberfläche anschauen? Gibt es da ne Anzeige?

Re: Werte umrechnen und Aktion auslösen

Verfasst: 14. Jan 2023 18:27
von udo1toni
Wenn Du openHABian verwendest, kannst Du einfach frontail nutzen. Der Link dazu verbirgt sich in der rechten Seitenleiste (die Du wiederum aus der Main UI heraus einblenden kannst - ganz rechts ganz oben das winzige Seitenleistensymbol)

Re: Werte umrechnen und Aktion auslösen

Verfasst: 16. Jan 2023 10:00
von loewes
Hallo zusammen,

hab das System leider nicht als openHabian laufen und finde das so nicht... aber dann schau ich halt über das Terminal ins Log...
Jetzt hab ich soweit wieder alles am Laufen: ich hab jetzt jede UI-basierte Definition von Things/Items rausgenommen und per Datei definiert und jetzt liest er auch alle Werte aus und rechnet den "überschüssigen" Strom aus (also eigentlich Leistung).
Jetzt scheitere ich am zweiten Teil: je nach Wert und Zustand der Steckdose möchte ich dann eine Steckdose anschalten.
Ich hab das als separate Rule definiert:

Code: Alles auswählen

var r, s;

r = itemRegistry.getItem('Reststrom').state;
s = itemRegistry.getItem('HomeWizardInfo_Steckdose_1').state;
if (r > 20 && s == "OFF") {var senden = "http://192.168.178.45/PW/sw/0/on"}
In Abhängigkeit der Werte r und s soll also eine URL aufgerufen werden.
In der openhab.log finde ich diesen Eintrag, der mir grad allerdings nicht so recht weiterhilft...
2023-01-16 09:52:37.643 [ERROR] [e.automation.internal.RuleEngineImpl] - Failed to execute rule 'steckdose': Fail to execute action: 2
Könnt Ihr mir helfen, wie ich das richtig umsetze?
Danke!

Re: Werte umrechnen und Aktion auslösen

Verfasst: 16. Jan 2023 10:30
von EmptySoft
Ich denke das OFF darf nicht in Anführungszeichen sein.

Ich würde auch ein paar Loggingeinträge machen, erleichter die Suche ungemein ...

Code: Alles auswählen

logInfo("NameDerRule","-started")

Re: Werte umrechnen und Aktion auslösen

Verfasst: 16. Jan 2023 10:55
von loewes
Jetzt hab ich das Ganze so gelöst:

Code: Alles auswählen

if (itemRegistry.getItem('Reststrom').getState() > 0 && itemRegistry.getItem('HomeWizardInfo_Steckdose_1').getState() == 'off') {var senden = "http://192.168.178.45/PW/sw/0/on"};
Wenn ich statt dem URL-Aufruf einen Log-Eintrag generiere, dann erhalte ich im Log

Code: Alles auswählen

2023-01-16 10:45:23.508 [ERROR] [org.openhab.rule.steckdose          ] - Steckdose ein!
Das bedeutet, die if-Abfrage funktioniert an sich, aber wie bekomme ich jetzt den URL-Aufruf hin?