Werte umrechnen und Aktion auslösen

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

Moderatoren: Cyrelian, seppy

loewes
Beiträge: 31
Registriert: 10. Jan 2023 09:52
Answers: 2

Werte umrechnen und Aktion auslösen

Beitrag 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!
von EmptySoft » 16. Jan 2023 12:37
Ruke im DSL Format

Ich probiere es einmal aus dem Gedächtnis, die Rule wird jede Minute um 5 nach gestartet. Bitte when Bedingung und Rest an Deine Wünsche anpassen. Im Logfile siehst Du auch schön was passiert (oder welche Fehlermeldung kommt)

Code: Alles auswählen

val grenzwert = 0
rule "RuleNameLasDirEinenEinfallen"
 when 
  Time cron "5 * * * * ?"
 then
  val fName="NameFuersLoggingAmBestenWieDerRuleName"
  logInfo(fName,"-started")
  if(Reststrom.getState() > grenzwert)
   {
   logInfo(fName," RestStrom {} > grenzwert {}",RestStrom,grenzwert)
   var result =sendHttpGetRequest("http://192.168.178.45/PW/sw/0/off", 1000)
   logInfo(fName,"  result: {}",result)
   }
  logInfo(fName,"-ended")
 end 

Gehe zur vollständigen Antwort

oh73
Beiträge: 285
Registriert: 7. Mär 2021 14:49
Answers: 1

Re: Werte umrechnen und Aktion auslösen

Beitrag 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!
OH 4.0.3 auf HP 26o G1 Dm Mini Pc mit MX_Linux

loewes
Beiträge: 31
Registriert: 10. Jan 2023 09:52
Answers: 2

Re: Werte umrechnen und Aktion auslösen

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

Harka
Beiträge: 298
Registriert: 30. Apr 2021 13:13
Answers: 15

Re: Werte umrechnen und Aktion auslösen

Beitrag 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 ^^
Zuletzt geändert von Harka am 14. Jan 2023 09:12, insgesamt 1-mal geändert.

EmptySoft
Beiträge: 188
Registriert: 7. Jan 2020 14:45
Answers: 2
Kontaktdaten:

Re: Werte umrechnen und Aktion auslösen

Beitrag 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
BYe
Harald

loewes
Beiträge: 31
Registriert: 10. Jan 2023 09:52
Answers: 2

Re: Werte umrechnen und Aktion auslösen

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

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

Re: Werte umrechnen und Aktion auslösen

Beitrag 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)
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

loewes
Beiträge: 31
Registriert: 10. Jan 2023 09:52
Answers: 2

Re: Werte umrechnen und Aktion auslösen

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

EmptySoft
Beiträge: 188
Registriert: 7. Jan 2020 14:45
Answers: 2
Kontaktdaten:

Re: Werte umrechnen und Aktion auslösen

Beitrag 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")
BYe
Harald

loewes
Beiträge: 31
Registriert: 10. Jan 2023 09:52
Answers: 2

Re: Werte umrechnen und Aktion auslösen

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

Antworten