Ankündigung

Einklappen
Keine Ankündigung bisher.

- √ - Null Pointer Exception in Regel?

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

    - √ - Null Pointer Exception in Regel?

    Hallo zusammen,

    ich habe folgende Regel, die bei mir schon seit Monaten unverändert und problemlos läuft:

    Code:
    ...
    
    val int LampsNightInterval   = 1800  //Sekunden
    
    rule "Switch lamps on in the evening"
    when
        Item SunDark changed from OFF to ON
    then
        var int randomOffset
    	
        randomOffset = (Math::random()*LampsNightInterval).intValue()
        logInfo("timer_lampes rules", "Steckdosen_Halle_oben_Schalten - Offset: " + randomOffset)
        createTimer(now.plusSeconds(randomOffset)) [|
            sendCommand(Steckdosen_Halle_oben_Schalten, ON)
            logInfo("timer_lampes rules", "Switch gallery lamp on")
        ]
    ...
    end
    Nur wurde sie heute abend plötzlich nicht mehr ausgeführt, stattdessen finde ich im Log folgende Exception:

    Code:
    2013-10-10 18:20:01.007 ERROR o.o.c.s.ScriptExecutionThread[:68]- Error during the execution of rule 'Switch lamps on in the evening' java.lang.NullPointerException: null at org.openhab.model.script.lib.NumberExtensions.operator_multiply(NumberExtensions.java:62) at sun.reflect.GeneratedMethodAccessor74.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:606) at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.invokeOperation(XbaseInterpreter.java:729) at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter._featureCallOperation(XbaseInterpreter.java:713)
    Da schon die erste Log-Meldung nicht gekommen ist liegt es vermutlich am Aufruf von randomOffset= aber warum?

    Der Unterschied von gestern zu heute ist, dass noch eine weitere Regel mit gleichem Trigger in einer anderen Datei dazugekommen ist die einen identischen Aufruf randomOffset= macht, aber auf eigenen lokalen Variablen. Das kann es ja wohl kaum sein.

    Vielleicht habt Ihr ja eine Idee, was da falsch laufen könnte?

    Schon mal vielen Dank für Eure Hinweise!

    #2
    Hört sich für mich danach an: Issue 487 - openhab - Same variable declaration in different rule files results in strange behaviour - empowering the smart home - Google Project Hosting
    Offensichtlich sind die Variablen nicht lokal - erst recht nicht innerhalb eines Rule-Files.

    Kommentar


      #3
      Danke für den Hinweis, den Bug hatte ich noch nicht gesehen. Muss ich mir nachher mal in Ruhe anschauen, könnte die Ursache sein. Allerdings ist bei mir die fragliche Variable ja sogar lokal in der Regel deklariert.

      Auffällig ist aber schon, dass der Fehler just mit der Einführung einer neuen Regel entstanden ist. Ich werde heute abend den Variablen mal eindeutige Namen geben und das ganze weiter beobachten.

      Solche Fälle hab ich sogar recht häufig im Code, da ich einiges duplizieren musste. Da werde ich dann auch mal schauen, wird aber wohl in der Regel nicht zur exakt gleichen Zeit aufgerufen.

      Kommentar


        #4
        Es sieht wirklich so aus, als gäbe es da auch dann ein Problem wenn es um Variablen lokal zu einer Regel geht, die in zwei verschiedenen Dateien liegen.

        Folgende Beispielregeln führen beim Triggern zur genannten Exception wenn sie in zwei Regeldateien liegen. Innerhalb einer Datei hab ich keine Probleme beobachten können:

        Code:
        rule "Test Random Offset A"
        when
        	Item Test_Offset changed from OFF to ON
        then
        	var int randomOffset
        	
        	randomOffset = (Math::random()*LampsTestInterval).intValue()
        	logInfo("test random offset A", "Offset: " + randomOffset)
        
        end

        Code:
        rule "Test Random Offset B"
        when
        	Item Test_Offset changed from OFF to ON
        then
        	var int randomOffset
        	
        	randomOffset = (Math::random()*LampsTestInterval).intValue()
        	logInfo("test random offset B", "Offset: " + randomOffset)
        
        end

        Kommentar


          #5
          Danke für das Update!

          Gruß,

          Thomas E.-E.
          Visualisierung, Rule/Logic-Engine, Integrationsplattform mit openhab (Supportforum)

          Kommentar

          Lädt...
          X