Ankündigung

Einklappen
Keine Ankündigung bisher.

- √ - Eine Regel macht Probleme

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

    - √ - Eine Regel macht Probleme

    Hallo liebes Forum,

    ich versuche seit einigen Tagen meine Wohnung mit Openhab auszustatten. Ich verwende zwar nicht KNX sondern Homematic, ich hoffe aber trotzdem, dass ihr mir helfen könnt

    Ich habe ein Problem mit einer recht einfachen Regel, die das Folgende tun soll:
    Wird ein Licht eingeschaltet, soll es nach x Sekunden wieder automatisch aus gehen.
    So wollte ich diese umsetzen (analog zum Beispiel in der Demo):

    Items:
    Code:
    Switch Switch_Bad_Licht "Switch_Bad_Licht" {homematic="address=LEQ0882857, channel=1, parameter=STATE"}
    Rules:
    Code:
    import org.openhab.core.library.types.*
    import org.openhab.core.persistence.*
    import org.openhab.model.script.actions.*
    
    var Timer tmr_Bad_Licht_aus
    
    rule "Timer Licht aus Bad"
    when
      Item Switch_Bad_Licht received command
    then
      if(receivedCommand == ON) {
        tmr_Bad_Licht_aus = createTimer(now.plusSeconds(10)) [|
          sendCommand(Switch_Bad_Licht, OFF)
        ]
      } else if(receivedCommand == OFF) {
        if(tmr_Bad_Licht_aus != null) {
          tmr_Bad_Licht_aus.cancel
          tmr_Bad_Licht_aus = null
        }
      }
    end
    Openhab läuft ohne Probleme und reagiert auf manuelle Schaltvorgänge am Gerät und auch auf Eingaben der Android-App und WebGUI.

    Sobald ich aber die Regel ins Rules-File einfüge, stürtzt Openhab ab, der Prozess verschindet ohne Fehlermeldung und Openhab funktioniert erst nach Entfernung der Regen wieder.

    Was mache ich denn falsch?

    Liebe Grüße

    #2
    Mal so eine Vermutung: Das Ausschalten der Lampe durch den Timer triggert die Regel erneut und in der wird der Timer dann ungültig gemacht, ev. kommt es da aufgrund der parallelen Ausführung zu einem Laufzeitfehler.

    Las die Regel mal nur auf das Kommando ON triggern und frag, falls notwendig, im durch den Timer ausgeführten Code ab, ob die Lampe schon aus ist bevor Du das Kommando erneut schickst. (Ich hab keine Ahnung, ob es bei Homematic ein Problem ist der ausgeschalteten Lampe erneut ein OFF zu schicken, sonst kannst Du Dir das sparen)

    Kommentar


      #3
      Hallo Jockel,

      ich habe noch ein bisschen herumprobiert, nicht das Laden der Regeln ist das Problem, sondern das Ausführen.

      Code:
      rule "Timer Licht aus Bad"
      when
        Item Switch_Bad_Licht received command ON
      then
        createTimer(now.plusMinutes(1)) [|
          val msg = "This is a message" 
        ]
      end
      Die Regel zieht definitiv nur beim Einschalten, das habe ich getestet.

      Sobald der Timer gesetzt wird, wird der Openhab-Prozess beendet, leider ohne Fehler (im Log).

      Ich verwende die aktuelle Runtime 1.6.1 (Download 16.01.2015)...

      Mache ich einen Fehler beim Setzen des Timers?

      Kommentar


        #4
        Hast du mal versucht den Namen der Rule zu ändern? Vlt. Machen die Leerzeichen Probleme. Sonst sieht es nämlich richtig aus.

        Kommentar


          #5
          Ich hätte noch den Verdacht, dass val/var nicht im Timer deklariert werden dürfen. Mach mal ein Licht an /aus oder etwas anderes "normales"

          Sascha

          Kommentar


            #6
            Hey zusammen,

            danke für eure Antworten

            Zitat von kuschelganxta Beitrag anzeigen
            Ich hätte noch den Verdacht, dass val/var nicht im Timer deklariert werden dürfen. Mach mal ein Licht an /aus oder etwas anderes "normales"

            Sascha
            Ursprünglich hat der Code der Regel so ausgesehen:
            Code:
            tmr_Bad_Licht_aus = createTimer(now.plusSeconds(10)) [|
              sendCommand(Switch_Bad_Licht, OFF)
            ]
            Da tritt der Fehler auch auf... Also leider nein...

            Zitat von Tulamidan Beitrag anzeigen
            Hast du mal versucht den Namen der Rule zu ändern? Vlt. Machen die Leerzeichen Probleme. Sonst sieht es nämlich richtig aus.
            Ich glaube nicht, dass das ein Problem sein sollte, da andere Regeln funktionieren, die auch Leerzeichen im Namen haben, aber keine Timer verwenden... Ohne Timer funktioniert die Regel übrigens - also nur mit val... oder sendcommand....). Sobald der Timer in der Regel ist, wars das.
            Eventuell dürfen in Timer-Regel-Namen keine Leerzeichen vorkommen... Das muss ich aber ausprobieren (wenns das wäre, wäre das aber schon sehr kurios und fragwürdig...)

            Liebe Grüße

            Kommentar


              #7
              Also solange die "Leerzeichen" mit_Unterstrichen_dargestellt_werden sollte es keine Probleme geben, funktioniert bei mir problemlos.

              Allerdings fällt mir gerade etwas auf, was offensichtlich bei Dir fehlt, nämlich
              Code:
              import org.joda.time.DateTime
              um überhaupt mit jodatime arbeiten zu können. Dass sich openHAB einfach so verabschiedet, ohne das anzumeckern, ist natürlich unschön.

              Kommentar


                #8
                Das klingt ja sehr nach einem JVM Absturz. Hier hat OpenHab auch keine Möglichkeit mehr dies zu handeln.

                Welche JVM verwendest du (Architektur, Vendor und Version)?
                Welches Betriebssystem, CPU Architektur?

                Die JVM schreibt nach einem Absturz eine hs_err_pid<PID> Datei ins Ausführungsverzeichnis. Diese bitte mal posten, evtl. kann man da was rauslesen.

                Kommentar


                  #9
                  Hallo,
                  Code:
                  import org.joda.time.DateTime
                  Hat leider nichts gebracht, ebenso wie das entfernen der Leerzeichen nichts gebracht hat - danke trotzdem, ein Versuch wars wert!

                  Ich verwende ein Raspberry Pi B+, mit einem CULV3 (busware.de) zur Kommunikation mit der Homematic Hardware.
                  OS = Raspbian 7 (Wheezy) (https://www.homegear.eu/index.php/Downloads)
                  Ich habe das Image von Homegear verwendet, das Homegear bereits integriert hat.

                  Java:
                  root@homegearpi:~# java -version
                  java version "1.7.0_65"
                  OpenJDK Runtime Environment (IcedTea 2.5.1) (7u65-2.5.1-2~deb7u1+rpi1)
                  OpenJDK Zero VM (build 24.65-b04, mixed mode)
                  Es gibt tatsächlich hs_err_pid*.log-Files, ich habe das jüngste dem Post hinzugefügt.

                  Liebe Grüße
                  Angehängte Dateien

                  Kommentar


                    #10
                    Versuche mal
                    PHP-Code:
                    import org.joda.time.* 
                    und den timer:

                    PHP-Code:
                    var Timer tSunsetAll null
                    tSunsetAll 
                    createTimer(sunrise.plusSeconds(1)) [|
                                
                    logInfo("Away","Timer tSunsetAll executed rollaeden fahren runter"
                                
                            ] 
                    Das dann einen Eintrag in die openhab.log

                    Kommentar


                      #11
                      Zitat von Tulamidan Beitrag anzeigen
                      Versuche mal
                      PHP-Code:
                      import org.joda.time.* 
                      und den timer:

                      PHP-Code:
                      var Timer tSunsetAll null
                      tSunsetAll 
                      createTimer(sunrise.plusSeconds(1)) [|
                                  
                      logInfo("Away","Timer tSunsetAll executed rollaeden fahren runter"
                                  
                              ] 
                      Das dann einen Eintrag in die openhab.log
                      Hey Tulamidan,

                      wenn ich die Regel ausführe, stürzt OpenHAB nicht ab! Fortschritt yay!
                      Im Log steht dann:
                      2015-01-20 22:28:21.396 [ERROR] [o.o.c.s.ScriptExecutionThread ] - Error during the execution of rule 'Timer_Licht_aus_Bad': The name 'sunrise' cannot be resolved to an item or type.
                      Allerdings ist das klar, da ich sunrise nirgends definiert habe.

                      Ich habe nun sunrise durch now ersetzt und siehe da, OpenHAB ist wieder weg und es gibt ein neues hs_err_pid*-File.

                      Mal ne richtig blöde Frage: muss ich now irgendwo definieren? Ich bin bis jetzt naiv davon ausgegangen, dass now eine Systemvariable ist, mit der man die aktuelle Zeit abfragen kann.

                      Edit: mit ist aufgefallen, dass im event.log immer pro aus der WebGUI empfangenen Befehl zwei item-updates geloggt werden. Ist das so richtig?
                      2015-01-20 23:18:52 - Switch_Bad_Licht received command ON
                      2015-01-20 23:18:52 - Switch_Bad_Licht state updated to ON
                      2015-01-20 23:18:52 - Switch_Bad_Licht state updated to ON
                      2015-01-20 23:18:54 - Switch_Bad_Licht received command OFF
                      2015-01-20 23:18:54 - Switch_Bad_Licht state updated to OFF
                      2015-01-20 23:18:54 - Switch_Bad_Licht state updated to OFF
                      Grüße

                      Kommentar


                        #12
                        Das Java abstürzt liegt sehr wahrscheinlich nicht an der Syntax in deiner Rule.
                        Die JVM stürzt beim erstellen des Timers ab (in der quartz-scheduler lib)

                        Versuch doch mal ein Oracle Java:
                        Code:
                        sudo apt-get install oracle-java7-jdk
                        Aber entferne besser vorher das OpenJDK.

                        Ich kann mich erinnern, dass es Probleme mit dem OpenJDK gibt.

                        Kommentar


                          #13
                          Hey, die Verwendung von openJDK war leider eher eine Notwendigkeit als gewollt, da ich beim Versuch der Installation der offiziellen Java Version immer
                          root@homegearpi:~# sudo apt-get install oracle-java7-jdk
                          Reading package lists... Done
                          Building dependency tree
                          Reading state information... Done
                          E: Unable to locate package oracle-java7-jdk
                          bekomme....

                          Ich werde mal versuchen es manuell zu installieren.

                          Kommentar


                            #14
                            Leute, ich danke für eure Hilfe, die Lösung ist gefunden.

                            OpenJDK war das Problem.

                            Nach manueller Installation der java8-jdk funktioniert der Timer.
                            OpenHAB ist auch merkbar schneller geworden.

                            Nochmals danke für die Hilfe!

                            Kommentar

                            Lädt...
                            X