Seite 1 von 1

(gelöst) zeitschalt rule problem

Verfasst: 16. Mai 2021 14:17
von seebaer1976
hi,
bekomme die zeitschalt rule nicht zum laufen.
bekomme immer diese fehlermeldung und werde nicht schlau drauß, erwartet wird das und gefunden das, gemeint ist:

Code: Alles auswählen

Script execution of rule with UID 'd075611537' failed: <eval>:8:80 Expected an operand but found |

  var timer = ScriptExecution.createTimer(ZonedDateTime.now().plusMinutes(15), [| events.sendCommand('TuyaPool_TuyaPoolSchalter', 'OFF') ] );

                                                                                ^ in <eval> at line number 8 at column number 80


Code: Alles auswählen

triggers:
  - id: "1"
    configuration:
      cronExpression: 0 0 8-22/2 * 5-10 ? *
    type: timer.GenericCronTrigger
conditions:
  - inputs: {}
    id: "2"
    configuration:
      itemName: PoolPumpeZeitschaltuhr
      state: ON
      operator: =
    type: core.ItemStateCondition
actions:
  - inputs: {}
    id: "3"
    configuration:
      type: application/javascript
      script: >-
        var ScriptExecution =
        Java.type("org.openhab.core.model.script.actions.ScriptExecution");

        var ZonedDateTime = Java.type("java.time.ZonedDateTime");  

        var logger = Java.type("org.slf4j.LoggerFactory").getLogger("org.openhab.model.script.Rules.Examples");

        var zeitumschalten;


        if (zeitumschalten == '0') {
          events.sendCommand('TuyaPool_TuyaPoolSchalter', 'ON');
          var timer = ScriptExecution.createTimer(ZonedDateTime.now().plusMinutes(15), [| events.sendCommand('TuyaPool_TuyaPoolSchalter', 'OFF') ] );
          zeitumschalten = '1';
          }
        else {
          events.sendCommand('TuyaPool_TuyaPoolSchalter', 'ON');
          var timer = ScriptExecution.createTimer(ZonedDateTime.now().plusMinutes(30), [| events.sendCommand('TuyaPool_TuyaPoolSchalter', 'OFF') ] );
          zeitumschalten = '0';
          }
    type: script.ScriptAction
kann vielleicht mal ein drüberschauen und mir helfen was flasch ist.


mfg
markus

Re: zeitschalt rule problem

Verfasst: 16. Mai 2021 15:51
von seebaer1976
auch wenn ich die rule so mache:

Code: Alles auswählen

triggers:
  - id: "1"
    configuration:
      cronExpression: 0 0 8-22/2 * 5-10 ? *
    type: timer.GenericCronTrigger
conditions:
  - inputs: {}
    id: "2"
    configuration:
      itemName: PoolPumpeZeitschaltuhr
      state: ON
      operator: =
    type: core.ItemStateCondition
actions:
  - inputs: {}
    id: "3"
    configuration:
      type: application/javascript
      script: |-
    var zeitumschalten = '0'
    if (zeitumschalten == '0' ) {
        sendCommand('TuyaPool_TuyaPoolSchalter', 'ON')
        createTimer(now.plusMinutes(30), [|
                sendCommand('TuyaPool_TuyaPoolSchalter', 'OFF')])
         zeitumschalten = '1'
        }
    else {
        sendCommand('TuyaPool_TuyaPoolSchalter', 'ON')
        createTimer(now.plusMinutes(15), 
            [|
                sendCommand('TuyaPool_TuyaPoolSchalter', 'OFF')
            ]) 
         zeitumschalten = '0'
          }
    type: script.ScriptAction
wird immer wegen diesem | zeichen der fehler ausgeben.

Code: Alles auswählen

2021-05-16 15:51:01.624 [ERROR] [internal.handler.ScriptActionHandler] - Script execution of rule with UID 'd075611537' failed: <eval>:6:15 Expected an operand but found |

              [|

               ^ in <eval> at line number 6 at column number 15

mfg
markus

Re: zeitschalt rule problem

Verfasst: 17. Mai 2021 14:46
von udo1toni
Ganz einfach: Das ist kein javascript. Vielmehr ist es eine "gewöhnliche" "Rules DSL" Rule.

Re: zeitschalt rule problem

Verfasst: 17. Mai 2021 17:07
von seebaer1976
danke für die hilfe

läuft jetzt

Re: zeitschalt rule problem

Verfasst: 18. Mai 2021 07:14
von seebaer1976
Müsste nochmal eure hilfe,beim script, in anspruch nehmen

die rule startet morgens ab 8-22 uhr und löst das script alle 2 std aus und schaltet nach dem timer wieder aus, das läuft alles.
ich schaffe es nur nicht, das das script alle zwei std mit der anderen verzögerung läuft. sie durchläuft immer nur die else mit den 5 minuten.

Code: Alles auswählen

var zeitumschalten = 'NULL'
    if (zeitumschalten == '0') {
        sendCommand('aaatest', 'ON')
        createTimer(now.plusMinutes(10),
          [
            sendCommand('aaatest', 'OFF')
          ])
         zeitumschalten = '1'
        }
    else {
        sendCommand('aaatest', 'ON')
        createTimer(now.plusMinutes(5), 
            [
              sendCommand('aaatest', 'OFF')
            ]) 
         zeitumschalten = '0'
          }
Der Ablauf solte so sein, das sie ab 8 uhr immer mit den 10 min startet und dann alle 2 std zwischen den timer 10min und 5min wechselt. Das starten und stoppen funktioniert.

Mfg

Oser sollte ich lieber mit einem dummyschalter arbeiten?

Re: zeitschalt rule problem

Verfasst: 18. Mai 2021 17:01
von geos
Hmm, du setzt zeitumschalten in Zeile 1 und prüfst dann in Zeile 2. Da sollte doch immer das gleiche bei rauskommen?
Würde tippen du musst die Variable global anlegen.

Re: zeitschalt rule problem

Verfasst: 18. Mai 2021 23:58
von udo1toni
Das, was Du da tun willst, solltest Du besser über eine konventionelle Rule in einer normalen rules-datei im Ordner /etc/openhab/rules/ erledigen.

Alternativ kannst Du auch ein ungebundenes Item verwenden, um zu steuern, welche Länge der Timer haben soll. Die Variable kannst Du nicht auf diese Weise definieren, denn sie muss den Lauf der Rule überleben. Über die UI stehen keine globalen Variablen zur Verfügung, die Du dafür bräuchtest. Es gibt die Möglichkeit, eine Variable im Kontext überleben zu lassen, die Definition sieht dann aber anders aus, denn falls die Variable schon existiert, darf sie nicht überschrieben werden.