Ankündigung

Einklappen
Keine Ankündigung bisher.

ClassCastException in Rule

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

    ClassCastException in Rule

    Hallo,

    ich habe eine Regel, die den Stromverbrauch ausliest aus einer db4o und darauf basierend einige Berechnungen durch führt. Ich musste jetzt die db4o Datenbank löschen und neu machen, da openHab andauernd einen Java Heap Space geworfen hat.

    Das ist ein Teil der Regel:

    Code:
    rule Stromverbrauch
    when
            // Check every minute
            Time cron "0 * * * * ?"
    then
            var powerWeek_Int = 0
            var heatingWeek_Int = 0
            logWarn("FILE","------ UPDATE POWER FIGURES ------")
            logWarn("FILE","powerNow/heatingNow="+(Zaehler_Strom.historicState(now,"db4o").state+"/"+(Zaehler_WP.historicState(now,"db4o").state)
            // Read actual values via python from power meter
    //      executeCommandLine("/usr/bin/python /Users/macadmin/Desktop/vzlogger.py")
            // Actual values / counter
    logWarn("FILE","STROM-1")
            var Number powerNow = (Zaehler_Strom.historicState(now,"db4o").state)
            var Number heatingNow = (Zaehler_WP.historicState(now,"db4o").state as DecimalType)
    logWarn("FILE","STROM-2")
    
            // Actual values / counter as Integer
            var powerNow_Int = (powerNow*1000)
    logWarn("FILE","STROM-3")
            var heatingNow_Int = (heatingNow*1000).intValue()
    logWarn("FILE","STROM-4")
            var powerConsumption = powerNow_Int - powerOld
            var heatingConsumption = heatingNow_Int - heatingOld
    
    logWarn("FILE","STROM-5->"+powerOld)
            var Number tmpInt = powerOld
            tmpInt = tmpInt.intValue()
            powerOld = tmpInt
    logWarn("FILE","STROM-5.1->"+powerOld)
            if(powerOld == -1) {
    logWarn("FILE","STROM-6.1")
                    Verbrauch_Strom.postUpdate(0)
                    Verbrauch_WP.postUpdate(0)
                    //logWarn("FILE", "Initialize old powerNow="+powerOld+" heatingNow="+heatingOld)
            } else {
    logWarn("FILE","STROM-6.2")
                    Verbrauch_Strom.postUpdate(powerConsumption)
                    Verbrauch_WP.postUpdate(heatingConsumption)
                    //logWarn("FILE", "Old powerNow(consumption)=" + powerNow_Int + " - " + powerOld + "(" + (powerNow_Int - powerOld) + ")")
                    //logWarn("FILE", "Old heatingNow(consumption)=" + heatingNow_Int + " - " + heatingOld + "(" + (heatingNow_Int - heatingOld) + ")")
            }
    logWarn("FILE","STROM-7")
            // SAVE OLD Power/Heating usage
            powerOld = powerNow_Int
    logWarn("FILE","STROM-8")
            heatingOld = heatingNow_Int
    logWarn("FILE","STROM-9")
    
            var powerMidnight_Int = ((Zaehler_Strom.historicState(now.toDateMidnight,"db4o").state as DecimalType)*1000).intValue()
            var heatingMidnight_Int = ((Zaehler_WP.historicState(now.toDateMidnight,"db4o").state as DecimalType)*1000).intValue()
    logWarn("FILE","STROM-10")

    Und die Exception:

    Code:
    2014-12-19 16:33:00.168 ERROR o.o.m.r.i.e.ExecuteRuleJob[:57] - Error during the execution of rule Stromverbrauch
    java.lang.ClassCastException: null
    	at java.lang.Class.cast(Class.java:3047)
    Hat jemand eine Idee?
    Danke, Manuel

    #2
    Da Du ja schon viele Warnings implantiert hast: Was gibt das Log denn unmittelbar vor und nach der Exception aus?

    Kommentar


      #3
      Das hier ist der ganze Part, den die Rule auswirft (bis auf 2-3 Events, die nicht dazu gehören):


      Code:
      2014-12-19 21:16:00.027 WARN  org.openhab.model.script.FILE[:68] - ------ UPDATE POWER FIGURES ------
      2014-12-19 21:16:00.114 WARN  org.openhab.model.script.FILE[:68] - powerNow/heatingNow=34318.783/35305.541
      2014-12-19 21:16:00.115 WARN  org.openhab.model.script.FILE[:68] - STROM-1
      2014-12-19 21:16:00.126 WARN  org.openhab.model.script.FILE[:68] - +++Switch to Raffstore Abends initiated...
      2014-12-19 21:16:00.127 WARN  org.openhab.model.script.FILE[:68] - +++TIME -  raff: 20:30
      2014-12-19 21:16:00.128 WARN  org.openhab.model.script.FILE[:68] - +++TIME -  now : 21:16
      2014-12-19 21:16:00.129 WARN  org.openhab.model.script.FILE[:68] - +++Check Switch to Raffstore Abends - Raffstore_Abends/Kueche_Tuer/timer=ON/CLOSED/null
      2014-12-19 21:16:00.154 INFO  runtime.busevents[:26] - Regen_status state updated to 0
      2014-12-19 21:16:00.157 WARN  org.openhab.model.script.FILE[:68] - X-MAS state=0.0/ON/ON
      2014-12-19 21:16:00.188 WARN  org.openhab.model.script.FILE[:68] - STROM-2
      2014-12-19 21:16:00.188 WARN  org.openhab.model.script.FILE[:68] - STROM-3
      2014-12-19 21:16:00.189 WARN  org.openhab.model.script.FILE[:68] - STROM-4
      2014-12-19 21:16:00.189 WARN  org.openhab.model.script.FILE[:68] - STROM-5->34318783.000
      2014-12-19 21:16:00.190 WARN  org.openhab.model.script.FILE[:68] - STROM-5.1->34318783
      2014-12-19 21:16:00.190 WARN  org.openhab.model.script.FILE[:68] - STROM-6.2
      2014-12-19 21:16:00.191 WARN  org.openhab.model.script.FILE[:68] - STROM-7
      2014-12-19 21:16:00.191 WARN  org.openhab.model.script.FILE[:68] - STROM-8
      2014-12-19 21:16:00.192 WARN  org.openhab.model.script.FILE[:68] - STROM-9
      2014-12-19 21:16:00.196 INFO  runtime.busevents[:26] - Verbrauch_Strom state updated to 0.000
      2014-12-19 21:16:00.202 INFO  runtime.busevents[:26] - Verbrauch_WP state updated to 0
      2014-12-19 21:16:00.202 ERROR o.o.m.r.i.e.ExecuteRuleJob[:57] - Error during the execution of rule Stromverbrauch
      java.lang.ClassCastException: null
      	at java.lang.Class.cast(Class.java:3047)
      2014-12-19 21:16:01.908 INFO  runtime.busevents[:26] - Zaehler_Strom state updated to 34318.812
      2014-12-19 21:16:01.911 INFO  runtime.busevents[:26] - Zaehler_WP state updated to 35305.545

      Kommentar


        #4
        Jetzt habe ich folgende Exception bekommen:

        Code:
        2014-12-20 09:19:00.372 ERROR o.o.m.r.i.e.ExecuteRuleJob[:57] - Error during the execution of rule Stromverbrauch
        java.lang.NullPointerException: cannot invoke method public abstract org.openhab.core.types.State org.openhab.core.persistence.HistoricItem.getState() on null
        	at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.invokeOperation(XbaseInterpreter.java:724)
        Liegt es nicht einfach daran, dass die entsprechenden Werte z.B. Midnight nicht in der DB4O Datenbank vorhanden sind/waren?
        Trotzdem wäre es schön, wenn ich vorher überprüfen könnte ob der Wert null ist ohne das mir die Rule mit einer Exception abbricht!
        Danke, Manolo

        Kommentar


          #5
          Genau, das wäre jetzt mein Tipp, dass toDateMidnight keinen gültigen Wert ausgibt. Falls z.B. ein - oder ein uninitialized zurückgegeben wird, wäre die Exception für mich logisch. Um das abzusichern, könntest Du den Wert in toDateMidnight loggen, also bevor Du versuchst, ihn der Variable zuzuweisen.

          Ich meine auch, dass es einen issue zu dem (oder einem ähnlichen) Thema gibt.
          Als Workaround (also bis zum Fix des Problems) müsstest Du ja "nur" prüfen, ob ein gültiger Zahlenwert vorliegt, um dann notfalls einen Default zuzuweisen.

          Kommentar


            #6
            Hi Udo1toni,

            Genau das ist mein Problem. Ich versuche den Wert aus der db4o auf null zu prüfen, aber es funktioniert nicht. Ist das auch ein Bug?
            Danke, Manolo

            Kommentar


              #7
              Füge doch mal diese Logzeilen ein:
              Code:
              logWarn("Stromverbrauch","Zaehler_Strom.historicState= ",Zaehler_Strom.historicState(now.toDateMidnight,"db4o").state)
              logWarn("Stromverbrauch","Zaehler_WP.historicState= ",Zaehler_WP.historicState(now.toDateMidnight,"db4o").state)
              dann kannst Du sehen, auf welchen wert Du prüfen musst. Die Exception wird ja wahrscheinlich von der Dezimalwandlung geschmissen...

              Kommentar

              Lädt...
              X