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)