Seite 1 von 1
Dezimalwert als auslöser.
Verfasst: 5. Nov 2022 11:22
von Cruise
Hallo, ich versuche gerade einen Dezimalwert als Auslöser zu generieren. Leider funktioniert es nicht so ganz.
Ich nutze einen Shelly Plug.
Dieser soll wenn der Leisungsverbrauch des angeschlossenen Gerätes über 10W steigt. nach 30Min den Plug abschalten.
Aktuell sieht das ganze so aus:
configuration: {}
triggers:
- id: "2"
configuration:
itemName: shellPlug_Leistung
type: core.ItemStateChangeTrigger
conditions: []
actions:
- inputs: {}
id: "1"
configuration:
type: application/javascript
script: >-2
if (itemRegistry.getItem("shellPlug_Leistung").getState() > "10") {
delay(30000); events.sendCommand("shellPlug_Betrieb", "OFF");
type: script.ScriptAction
OpenHab reagiert auf die Zustandsänderung der Leistungsmessung, führt aber den Scriptbefehl in ID1 nicht aus.
Welchen fehler übersehe ich?
Gruß Flo
Re: Dezimalwert als auslöser.
Verfasst: 5. Nov 2022 12:30
von peter-pan
Ich kann leider kein JS, aber könnte es sein, dass es sich bei dem Item um eines mit (UoM) handelt, welches die Einheit ("W") mitführt ? Wenn das der Fall ist, müsste diese evtl. im Vergleich eliminiert oder mit angegeben werden.
Re: Dezimalwert als auslöser.
Verfasst: 5. Nov 2022 12:50
von Harka
ja, versuch es mal mit
Code: Alles auswählen
if (parseFloat(itemRegistry.getItem('shellPlug_Leistung').getState()) > 10) {
delay(30000);
events.sendCommand("shellPlug_Betrieb", "OFF");
}
also parsen, die Klammern um die 10 entfernen und die schließende Klammer vom If fehlt auch
Re: Dezimalwert als auslöser.
Verfasst: 5. Nov 2022 17:01
von udo1toni
Der erste Fehler ist offensichtlich. "10" ist ein String. Du kannst einen String nicht mit größer oder kleiner vergleichen, nur auf Gleichheit oder Ungleichheit.
Re: Dezimalwert als auslöser.
Verfasst: 7. Nov 2022 19:20
von Cruise
peter-pan hat geschrieben: ↑5. Nov 2022 12:30
Ich kann leider kein JS, aber könnte es sein, dass es sich bei dem Item um eines mit (UoM) handelt, welches die Einheit ("W") mitführt ? Wenn das der Fall ist, müsste diese evtl. im Vergleich eliminiert oder mit angegeben werden.
Die Einheit habe ich über die State description entfernt, ebenso die Nachkomma-stellen.
Muss kein Java sein, wenn du eine Idee für das DSL-Script hast, hilft das auch weiter.
Harka hat geschrieben: ↑5. Nov 2022 12:50
ja, versuch es mal mit
Code: Alles auswählen
if (parseFloat(itemRegistry.getItem('shellPlug_Leistung').getState()) > 10) {
delay(30000);
events.sendCommand("shellPlug_Betrieb", "OFF");
}
also parsen, die Klammern um die 10 entfernen und die schließende Klammer vom If fehlt auch
Leider will das auch nicht laufen.
Hat vielleicht wer nen andreren Ansatz für die Geschichte?
Funkt vielleicht die schwankende Leistungsaufnahme und somit das ständige restarten des scripts dazwischen?
Re: Dezimalwert als auslöser.
Verfasst: 7. Nov 2022 20:21
von peter-pan
Ich habe gerade mal mit deinem Script etwas herumgespielt
Code: Alles auswählen
if (parseFloat(itemRegistry.getItem('Socket_Fritz_01_Temp').getState()) > 10) {
// delay(30000);
var vTemp = itemRegistry.getItem('Socket_Fritz_01_Temp').getState(); // Socket-Temp Type Number:Temperature
logger.info("shelly test" + " Ergebnis :" + vTemp + " Ergebnis geparsed - ohne Unit -->: " + parseFloat(itemRegistry.getItem('Socket_Fritz_01_Temp').getState()) );
// events.sendCommand("shellPlug_Betrieb", "OFF");
}
else {
var vTemp = itemRegistry.getItem('Socket_Fritz_01_Temp').getState(); // Socket-Temp Type Number:Temperature
logger.warn("Ich bin die else vom if " + vTemp)
}
Log bei " > 10"
Code: Alles auswählen
2022-11-07 20:07:52.446 [INFO ] [org.openhab.rule.test_ecma ] - shelly test Ergebnis :11.5 °C Ergebnis geparsed - ohne Unit -->: 11.5
Log bei "< 10"
Code: Alles auswählen
2022-11-07 20:09:52.340 [WARN ] [org.openhab.rule.test_ecma ] - Ich bin die else vom if 11.5 °C
Das Script ist m.E. soweit in Ordnung, bis auf die "Delay-Function". Da bekomme ich eine Fehlermeldung:
Code: Alles auswählen
2022-11-07 20:05:01.752 [ERROR] [internal.handler.ScriptActionHandler] - Script execution of rule with UID 'test_ecma' failed: ReferenceError: "delay" is not defined in <eval> at line number 61
Woher hast du diesen Befehl und was soll er genau machen (ich kann mir's zwar denken, aber ich habe unter JS keine solche Funktion/Methode gefunden)