Werte umrechnen und Aktion auslösen
-
- Beiträge: 31
- Registriert: 10. Jan 2023 09:52
Werte umrechnen und Aktion auslösen
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!
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!
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)
Gehe zur vollständigen AntwortIch 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
-
- Beiträge: 285
- Registriert: 7. Mär 2021 14:49
Re: Werte umrechnen und Aktion auslösen
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:
es kommt immer darauf an in welchem Format der Wert in dem Item ist !
eventuell noch umwandeln
rechnen ist wenn das richtige Format da ist einfach,
wert_3 = wert_1 + wert_2
abfrage und Aktion ausführen get zB. mit
hier ist jetzt einiges an Müll von mir drin, aber als Beispiel sollte das gehen!
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
eventuell noch umwandeln
Code: Alles auswählen
var Number wert_4 = Float::parseFloat(String::format("%s",wert_1))
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)
OH 4.0.3 auf HP 26o G1 Dm Mini Pc mit MX_Linux
-
- Beiträge: 31
- Registriert: 10. Jan 2023 09:52
Re: Werte umrechnen und Aktion auslösen
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:
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:
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!
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);
Code: Alles auswählen
production = itemRegistry.getItem('sB_production');
Vielen Dank!
-
- Beiträge: 298
- Registriert: 30. Apr 2021 13:13
Re: Werte umrechnen und Aktion auslösen
Moin,
gibt es im Log ein Fehler? Versuch mal dem Item-Wert vorher gezielt in einen rein numerischen Wert umzuwandeln.
wobei EmptySoft im folgenden Beitrag eher des Nagels Kopf getroffen haben dürfte ^^
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'));
Zuletzt geändert von Harka am 14. Jan 2023 09:12, insgesamt 1-mal geändert.
-
- Beiträge: 188
- Registriert: 7. Jan 2020 14:45
- Kontaktdaten:
Re: Werte umrechnen und Aktion auslösen
Wenn Du den Wert eines Items in der Rule verwenden möchtest, musst Du es mit .state also zum Beispielloewes 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?
Code: Alles auswählen
DeinItem.state
BYe
Harald
Harald
-
- Beiträge: 31
- Registriert: 10. Jan 2023 09:52
Re: Werte umrechnen und Aktion auslösen
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?
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?
- udo1toni
- Beiträge: 13864
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: Werte umrechnen und Aktion auslösen
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
-
- Beiträge: 31
- Registriert: 10. Jan 2023 09:52
Re: Werte umrechnen und Aktion auslösen
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:
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!
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 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!
-
- Beiträge: 188
- Registriert: 7. Jan 2020 14:45
- Kontaktdaten:
Re: Werte umrechnen und Aktion auslösen
Ich denke das OFF darf nicht in Anführungszeichen sein.
Ich würde auch ein paar Loggingeinträge machen, erleichter die Suche ungemein ...
Ich würde auch ein paar Loggingeinträge machen, erleichter die Suche ungemein ...
Code: Alles auswählen
logInfo("NameDerRule","-started")
BYe
Harald
Harald
-
- Beiträge: 31
- Registriert: 10. Jan 2023 09:52
Re: Werte umrechnen und Aktion auslösen
Jetzt hab ich das Ganze so gelöst:
Wenn ich statt dem URL-Aufruf einen Log-Eintrag generiere, dann erhalte ich im Log
Das bedeutet, die if-Abfrage funktioniert an sich, aber wie bekomme ich jetzt den URL-Aufruf hin?
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"};
Code: Alles auswählen
2023-01-16 10:45:23.508 [ERROR] [org.openhab.rule.steckdose ] - Steckdose ein!