(gelöst) zeitschalt rule problem

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

Antworten
seebaer1976
Beiträge: 9
Registriert: 29. Apr 2021 11:05

(gelöst) zeitschalt rule problem

Beitrag 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
Zuletzt geändert von seebaer1976 am 21. Mai 2021 13:21, insgesamt 1-mal geändert.

seebaer1976
Beiträge: 9
Registriert: 29. Apr 2021 11:05

Re: zeitschalt rule problem

Beitrag 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

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

Re: zeitschalt rule problem

Beitrag von udo1toni »

Ganz einfach: Das ist kein javascript. Vielmehr ist es eine "gewöhnliche" "Rules DSL" Rule.
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

seebaer1976
Beiträge: 9
Registriert: 29. Apr 2021 11:05

Re: zeitschalt rule problem

Beitrag von seebaer1976 »

danke für die hilfe

läuft jetzt

seebaer1976
Beiträge: 9
Registriert: 29. Apr 2021 11:05

Re: zeitschalt rule problem

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

geos
Beiträge: 15
Registriert: 5. Jan 2021 15:37
Answers: 1

Re: zeitschalt rule problem

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

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

Re: zeitschalt rule problem

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

Antworten