Ankündigung

Einklappen
Keine Ankündigung bisher.

Rules werden stark verzögert ausgeführt

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    Rules werden stark verzögert ausgeführt

    Hallo zusammen,

    ich habe ein Skript für Ferien und Feiertage in openhab hinterlegt und führe dies mit der folgenden Rule aus:

    Code:
    /************************************************** Kalender Rules ********************************************/
    
    rule "Feiertag und Ferien Skript aufrufen"
    when
    System started
    then
    Thread::sleep(30000)
    callScript("feiertage")
    callScript("ferien")
    end
    
    rule "Feiertag"
    when
    Item feiertag changed or
    Item Holidays changed or
    Item urlaub changed
    
    then
    if (feiertag.state==ON || Holidays.state==ON || urlaub.state==ON) {
    
    
    prae_urlaub_ferien.sendCommand(ON)
    
    }
    
    else {
    
    
    prae_urlaub_ferien.sendCommand(OFF)
    
    
    }
    end
    Nach dem Code sollte das Skript nur wenn openhab hochfährt und jeden Tag um 0 Uhr ausgeführt werden.

    Ich sehe aber ständig in den Logs von openhab, dass das Skript alle 5 Minuten ausgeführt wird. Ich vermute das Problem besteht seit openhab 2.5.7.
    Ich merke in dem zusammenhang auch, dass manche Rules sehr starkt zeitverzögert starten. Habt ihr eine Idee?
    Seltsam ist, wenn ich die Rules schalte, dann dauert es 5-10 sekunden, dann werden diese auch ausgeführt. Danach kann ich die Rules dann ohne Verzögerung schalten. Wenn ich dann aber wieder 5 min warte und schalte sie wieder, dann dauert es wieder 5-10 Sekunden.

    Jemand eine Idee, was das sein könnte.
    Zuletzt geändert von SaschaQ; 04.08.2020, 12:01.

    #2
    Liegt vielleicht an dem "Thread::sleep(30000)" in Deiner Rule?!?

    Also mit dem Trigger "System started" wir diese Rule nur beim Systemstart ausgeführt, nicht zusätzlich jeden Tag um 0 Uhr...

    Mit geändertem Trigger und dem Ersatz für den Thread::sleep würde es so aussehen:

    Code:
    rule "Feiertag und Ferien Skript aufrufen"
    when
      System started   or
      Time cron "0 0 0 * * ? *"
    then
      createTimer(now.plusSeconds(30), [|
        callScript("feiertage")
        callScript("ferien")
      ])
    end
    Ich nehme an, dass in den Scripten "feiertage" und "ferien" die Items "feiertag", "Holidays" und "urlaub" gesetzt werden...

    Kommentar


      #3
      Daran liegts nicht. Ich habe mal das LogLevel auf Debug gestellt und konnte jetzt sehen, dass er im Hintergrund Map Transformations in der Dauerschleife schreibt und dadurch auch den Rapsberry an 90 % Cpu Las bringt.

      Kommentar


        #4
        Was kann man denn innerhalb eines Timers alles ausführen. Kann man auch sowas machen:

        Code:
        
        createTimer(now.plusSeconds(30), [|
        
        if(SQ_Samsung_Galaxy_S10.state==CLOSED && KB_Samsung_Galaxy_S8.state==CLOSED){
        prae_anwesenheit.sendCommand(ON)
        sendBroadcastNotification("Niemand ist zuhause, Kinderbetreuung an!")
        
        } ])

        Kommentar


          #5
          Du kannst in einem Timer alles machen, was Du auch außerhalb eines Timers machen kannst. Zu beachten ist lediglich, dass der Timercode außerhalb eines Rule-Kontextes ausgeführt wird. Entsprechend kannst Du nicht auf implizite Variablen oder innerhalb der auslösenden Rule definierte Variablen oder Konstanten zugreifen. Stattdessen musst Du Variablen für Timer grundsätzlich global definieren (es sei denn, Du benötigst sie ausschließlich innerhalb des Timers, natürlich).

          Kommentar

          Lädt...
          X