Seite 2 von 2
Re: Werte umrechnen und Aktion auslösen
Verfasst: 16. Jan 2023 11:00
von EmptySoft
Du benötigst dazu das httpbindung
In Deiner Rule wird deine gewünschte Url nur in eine Variable geschrieben richtig wäre
Code: Alles auswählen
sendHttpGetRequest("http://192.168.178.45/PW/sw/0/on")
wobei ich über MQTT mit den Geräten kommuniziere...
Re: Werte umrechnen und Aktion auslösen
Verfasst: 16. Jan 2023 11:28
von loewes
jetzt bekomme ich im Log:
Code: Alles auswählen
2023-01-16 11:26:03.101 [ERROR] [internal.handler.ScriptActionHandler] - Script execution of rule with UID 'steckdose' failed: ReferenceError: "sendHttpGetRequest" is not defined in <eval> at line number 5
Oder kann ich das irgendwie als "Schalter" anlegen? Mein Problem war: ich kann das ja als HTTP Binding anlegen, aber dann ruft er die Adresse ja in regelmäßigen Abständen auf, ich möchte das ja nur bei Anforderung...
Re: Werte umrechnen und Aktion auslösen
Verfasst: 16. Jan 2023 11:40
von oh73
wie das gesendet wird hatte ich schon im 2. Beitrag geschrieben.
du hast nur nicht alles übernommen, den Befehl schon in die Variable geschrieben aber den eigentlichen sende Befehl vergessen!
wichtig ist auch das ",1000" im senden Befehl, damit vermeidest du Timeout Probleme!
wenn du dann noch mit Loginfo die Variable result ausgibst, findest du auch schnell eventuelle Fehler.
Re: Werte umrechnen und Aktion auslösen
Verfasst: 16. Jan 2023 11:47
von loewes
Sorry, stimmt, das hattest Du schon so geschrieben.
Ich hab das jetzt so eingefügt und bekomme immer noch den gleichen Fehler:
Code: Alles auswählen
2023-01-16 11:45:24.354 [ERROR] [internal.handler.ScriptActionHandler] - Script execution of rule with UID 'steckdose' failed: ReferenceError: "sendHttpGetRequest" is not defined in <eval> at line number 5
Muss ich da vorher noch irgendwas definieren?
Re: Werte umrechnen und Aktion auslösen
Verfasst: 16. Jan 2023 11:52
von oh73
hast du das http Binding installiert?
meine Befehle sind ja alle in einer Text Rule,
könnte sein das bei bei ECMA Scripten der Befehl etwas anders ist, weiß ich nicht, deshalb hab ich mich da auch raus gehalten!
Re: Werte umrechnen und Aktion auslösen
Verfasst: 16. Jan 2023 12:01
von loewes
Ja, das HTTP Binding ist installiert.
Text-Rule wäre dann in der Oberfläche "Rule DSL"? Ich schreibe es auch gern einfach in eine Text-Datei. Aber dann muss ich jetzt die Syntax anpassen, oder? Das ist ja dann nicht mehr Java?
Im Wesentlichen will ich ja nur diese Abfrage hier machen:
Code: Alles auswählen
var grenzwert = 0;
if (itemRegistry.getItem('Reststrom').getState() > grenzwert && itemRegistry.getItem('HomeWizardInfo_Steckdose_1').getState() == 'off') {
var senden = "http://192.168.178.45/PW/sw/0/on"} else if (itemRegistry.getItem('Reststrom').getState() < grenzwert && itemRegistry.getItem('HomeWizardInfo_Steckdose_1').getState() == 'on') {
var senden = "http://192.168.178.45/PW/sw/0/off"
};
var result =sendHttpGetRequest(senden, 1000)
Re: Werte umrechnen und Aktion auslösen
Verfasst: 16. Jan 2023 12:37
von EmptySoft
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
Re: Werte umrechnen und Aktion auslösen
Verfasst: 16. Jan 2023 13:01
von loewes
Perfekt! Vielen Dank! Das funktioniert jetzt!
Ich hab das jetzt als "Rule DSL" definiert und es funktioniert!
Hier meine Umsetzung:
Code: Alles auswählen
val fName="steckdose"
val grenzwert = 0
logInfo(fName,"-started")
if(Reststrom.getState() > grenzwert && HomeWizardInfo_Steckdose_1.getState() == 'off')
{
logInfo(fName," Reststrom {} > grenzwert {}",Reststrom.getState(),grenzwert)
var result =sendHttpGetRequest("http://192.168.178.45/PW/sw/0/on", 1000)
logInfo(fName," result: {}",result)
}
else if(Reststrom.getState() < grenzwert && HomeWizardInfo_Steckdose_1.getState() == 'on')
{
logInfo(fName," Reststrom {} < grenzwert {}",Reststrom.getState(),grenzwert)
var result =sendHttpGetRequest("http://192.168.178.45/PW/sw/0/off", 1000)
logInfo(fName," result: {}",result)
}
logInfo(fName,"-ended")
Re: Werte umrechnen und Aktion auslösen
Verfasst: 16. Jan 2023 19:52
von udo1toni
Zur Ergänzung: sendHttpGetRequest ist eine Funktion im Core, das heißt, das http Binding ist dazu nicht notwendig!
Das Problem wird hier sein (deshalb half der Umstieg auf die DSL), dass man die Funktion in JavaScript erst bekannt machen muss.
Da ich mich aber nicht mit JavaScript beschäftige, kann ich außer dieser Vermutung keinen weiteren Tipp geben, wie das genau funktioniert.
Fakt ist aber: es wird mit JavaScript genauso funktionieren, wenn Du raus findest, wie es korrekt aufgerufen wird.
Re: Werte umrechnen und Aktion auslösen
Verfasst: 16. Jan 2023 20:17
von oh73
ich hab hier :
https://community.openhab.org/t/syntax- ... t/111863/4
was gefunden wie das mit JavaScript funktionieren soll,
ist mir aber zu kompliziert!