Seite 1 von 1

Problem mit ganz einfachem Timer

Verfasst: 10. Mär 2022 10:30
von Oliver
Hallo Gemeinde,
ich sitze nun seit 2 Tagen an einem einzigen, eigentlich kleinem Problem, einen Timer erstellen.

Funktion, wenn ein Ereignis eintritt, in meinem Fall "Den Müll rausstellen", sollen 18 Std. gewartet werden und dann eine Nachricht verschicken.
Wenn ich nun folgendes Script erstelle:

Code: Alles auswählen

var Timer myTimer = null
myTimer = createTimer(now.plusMinutes(5), [ |
    sendBroadcastNotification("Graue Tonne rausstellen", "error")
])
welches in dieser Regel integriert ist:

Code: Alles auswählen

configuration: {}
triggers:
  - id: "1"
    configuration:
      itemName: GraueTonne_Ergebnisstart
    type: core.ItemStateChangeTrigger
conditions: []
actions:
  - inputs: {}
    id: "2"
    configuration:
      type: application/javascript
      script: |-
        var Timer myTimer = null
        myTimer = createTimer(now.plusMinutes(5), [ |
            sendBroadcastNotification("Graue Tonne rausstellen", "error")
        ])
    type: script.ScriptAction
Wenn ich diese Regel ausführe, dann bekomme ich in der Log-Datei folgende Fehlermeldung:
"[ERROR] [internal.handler.ScriptActionHandler] - Script execution of rule with UID 'GraueTonneNachricht' failed: <eval>:1:10 Expected ; but found myTimer"
mit dem Zusatz:

Code: Alles auswählen

var Timer myTimer = null
          ^ in <eval> at line number 1 at column number 10
Das ergibt für mich überhaupt keinen Sinn, die Variable ist doch richtig deklariert, wo soll da an der 10ten Stelle ein Fehler sein?
Ich weiß da echt nicht mehr weiter.
Kann mir bitte jemand bei diesem Problem helfen.

Danke schon mal vorab.


Viele Grüße
Oliver

Re: Problem mit ganz einfachem Timer

Verfasst: 11. Mär 2022 10:40
von udo1toni
Du hast die Rule als Javascript Rule deklariert, verwendest aber DSL Befehle.
Abgesehen davon ist die Rule in dieser Form nicht gut, weil Du mit der Variablen nichts anfangen kannst. Einzig in der Rule selbst könntest Du auf die Variable zugreifen, aber da Du sie lokal definiert hast und beim Start der Rule direkt neu initialisierst, wird auch das nicht funktionieren. Timer kannst Du dennoch verwenden, nur ohne Zuweisung zu einer Variablen (also einfach das myTimer = weglassen)

Re: Problem mit ganz einfachem Timer

Verfasst: 11. Mär 2022 13:45
von Oliver
Danke für deine Antwort,
ja das mit den DSL Befehlen ist mir später auch aufgefallen und ich habe es dann nochmal mit Blockly probiert und es hat direkt funktioniert :)

Gruß
Oliver