Dezimalwert als auslöser.

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

Antworten
Cruise
Beiträge: 5
Registriert: 25. Feb 2022 19:36
Answers: 0

Dezimalwert als auslöser.

Beitrag 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

Benutzeravatar
peter-pan
Beiträge: 2758
Registriert: 28. Nov 2018 12:03
Answers: 30
Wohnort: Schwäbisch Gmünd

Re: Dezimalwert als auslöser.

Beitrag 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.
Pi5/8GB(PiOS Lite 64-bit(bookworm)/SSD 120GB - OH4.3.5 openhabian

Harka
Beiträge: 489
Registriert: 30. Apr 2021 13:13
Answers: 19

Re: Dezimalwert als auslöser.

Beitrag 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

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

Re: Dezimalwert als auslöser.

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

Cruise
Beiträge: 5
Registriert: 25. Feb 2022 19:36
Answers: 0

Re: Dezimalwert als auslöser.

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

Benutzeravatar
peter-pan
Beiträge: 2758
Registriert: 28. Nov 2018 12:03
Answers: 30
Wohnort: Schwäbisch Gmünd

Re: Dezimalwert als auslöser.

Beitrag 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)
Pi5/8GB(PiOS Lite 64-bit(bookworm)/SSD 120GB - OH4.3.5 openhabian

Antworten