Ankündigung

Einklappen
Keine Ankündigung bisher.

Warum dieser Fehler

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

    Warum dieser Fehler

    Hallo zusammen,

    ich stehe gerade etwas auf dem Schlauch, ich hab meine Regeln noch mal umgestellt, dass ganze sieht jetzt wie folgt aus:

    Code:
    var long BM_Einfahrt_OnTime_Lamps  = 0
    var long iPhone_Entered_Time_Lamps = 0
    
    rule "Initalize lamps_house rules"
    when 
    	System started
    then
    	BM_Einfahrt_OnTime_Lamps  = now.getMillis()
    	iPhone_Entered_Time_Lamps = now.getMillis()
    end
    
    
    rule "Get Current time when BM Einfahrt changed"
    when
    	Item BM_Einfahrt changed to ON
    then
    	BM_Einfahrt_OnTime_Lamps = now.getMillis()
    	
    	if (SunNight.state == ON &&	(Math::abs(BM_Einfahrt_OnTime_Lamps - iPhone_Entered_Time_Lamps) <= 90000)) {
    		if (Licht_Windfang_Einbaustrahler_Schalten.state != ON) {
    			sendCommand(Licht_Windfang_Einbaustrahler_Schalten, ON)
    				
    			createTimer(now.plusSeconds(90)) [|
    				if (Licht_Windfang_Einbaustrahler_Schalten.state == ON) {
    					sendCommand(Licht_Windfang_Einbaustrahler_Schalten, OFF)
    			    }
    		    ]
    		}	
    	} 
    end

    Beim Ausführen der Regel bekomme ich jetzt die beten folgenden Fehler:
    - Cannot assign a value in null context.
    - Could not invoke method: org.eclipse.xtext.xbase.lib.LongExtensions.operato r_minus(long,long) on instance: null

    Nur warum? Die fraglichen Variablen sind alle angelegt, beim Initialisieren gab es auch keine Fehler und ähnliche Konstrukte verwende ich auch problemlos an anderen Stellen. Irgend etwas muss ich wohl übersehen, aber was??

    Danke schon mal für Eure Hilfe!

    #2
    Jetzt hab ich mal eine zusätzliche Abfrage der Variable auf !=null eingebaut, immerhin verändert das den Fehler:

    Code:
    2014-01-10 18:23:15.735 ERROR o.o.c.s.ScriptExecutionThread[:68]- 
    java.lang.NullPointerException: null
    	at org.openhab.model.script.lib.NumberExtensions.operator_equals(NumberExtensions.java:73)
    	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    	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)
    Nur was läuft da falsch???

    Kommentar


      #3
      So langsam glaube ich an einen Bug irgendwo im xbase.

      Ich hab jetzt die fraglichen Variablen testweise noch mal als Number definiert:

      Code:
      var Number iPhone_Entered_Time_Lamps
      Initialisiert wird sie bei "System started", keine Fehler im Log:

      Code:
      iPhone_Entered_Time_Lamps = now.getMillis()
      Wird auch ausgeführt, da eine nachfolgende Log-Message zu lesen ist.

      Bei der Verwendung hagelt es dann aber Null-Pointer Exceptions:

      Die Abfrage

      Code:
      if (iPhone_Entered_Time_Lamps == null)
      führt zu

      Code:
      java.lang.NullPointerException: null
      	at org.openhab.model.script.lib.NumberExtensions.operator_equals(NumberExtensions.java:73)
      	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
      	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
      	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)

      Und
      Code:
      iPhone_Entered_Time_Lamps.longValue()
      zu

      Code:
      cannot invoke method public abstract long java.lang.Number.longValue() on null

      Mir gehen da gerade echt die Ideen aus was ich noch machen könnte, die einzige Lösung die mir noch einfällt wäre dann die Logik in einem Bash-Skript abzuwickeln, aber das kann ja nicht Sinn und Zweck der Übung sein. Zumal ich ähnliche Konstrukte an anderen Stellen ohne Probleme verwende.

      Vielleicht hat hier ja noch irgendwer eine Idee, was da schief läuft?

      Ich bin für jede Idee dankbar!

      Kommentar


        #4
        Weiß einer, ob wir für diese NPE schon ein Issue haben? Ich denke nämlich, zumindest für "if(iPhone_Entered_Time_Lamps == null)" sollte es einen leichten Fix geben.

        Grüße,
        Kai

        Kommentar


          #5
          Ich hab jetzt erst mal eine Workarround gefunden. Wenn ich die Variablen nicht im Regelfile deklariere sondern als Items anlege und postUpdate benutze scheint alles zu funktionieren.

          Ein Issue habe ich noch nicht angelegt, vielleicht gibt es aber schon eins, muss ich mal schauen. Vorher würde ich noch etwas experimentieren wollen um es reproduzierbarer zu machen, an anderen Stellen funktionieren ähnliche Konstrukte problemlos.

          Kommentar

          Lädt...
          X