Ankündigung

Einklappen
Keine Ankündigung bisher.

Nullpointer Exception

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

    Nullpointer Exception

    Guten Morgen zusammen,

    ich habe in einer meiner Regeln eine NullPointer Exception - vermutlich ein Anfängerfehler. Die Regel nimmt Werte aus dem Novelan WP Binding (welches funktioniert und sinnvolle Werte liefert) und schreibt diese auf KNX Adressen die auf einem Infoterminal angezeigt werden. Sie ist wie folgt aufgesetzt:
    Code:
    import org.openhab.core.library.types.*
    import org.openhab.core.persistence.*
    import org.openhab.model.script.actions.*
    
    //******************************************************************************
    rule "Aktualisiere KNX Werte"
    when 
      Item UG_Waermepumpe_Temp_AT received update
    then
      postUpdate(UG_WP_Temp_AT, UG_Waermepumpe_Temp_AT.state)
    ......
      val Date currentTime = new Date()
      postUpdate(UG_WP_Timestamp, currentTime.time)
    end
    Die items habe ich wie folgt mit den EIB Typen aufgesetzt, die ich auch in der ETS verwendet habe:
    Code:
    Number UG_WP_Timestamp                                                                                { knx="10.000:3/0/23" }
    Number UG_WP_Temp_AT                                                                                  { knx="9.000:3/0/8" }
    Number UG_WP_Temp_RL_Ist                                                                              { knx="9.000:3/0/6" }
    Number UG_WP_Temp_RL_Soll                                                                             { knx="9.000:3/0/7" }
    Number UG_WP_Temp_VL                                                                                  { knx="9.000:3/0/5" }
    Number UG_WP_Temp_WW_Soll                                                                             { knx="9.000:3/0/11" }
    Number UG_WP_Temp_WW_Ist                                                                              { knx="9.000:3/0/10" }
    Im logfile erscheint folgendes:
    Code:
    07:21:03.951 INFO  runtime.busevents[:46] - UG_WP_Temp_AT state updated to 9.800000000000000710542735760100185871124267578125
    07:21:03.989 INFO  runtime.busevents[:46] - UG_WP_Temp_RL_Ist state updated to 40.5
    07:21:04.010 INFO  runtime.busevents[:46] - UG_WP_Temp_RL_Soll state updated to 15
    07:21:04.031 INFO  runtime.busevents[:46] - UG_WP_Temp_VL state updated to 47.7999999999999971578290569595992565155029296875
    07:21:04.078 INFO  runtime.busevents[:46] - UG_WP_Temp_WW_Soll state updated to 46
    07:21:04.118 INFO  runtime.busevents[:46] - UG_WP_Temp_WW_Ist state updated to 46.5
    07:21:04.185 ERROR o.o.c.s.ScriptExecutionThread[:68] - Error during the execution of rule 'Aktualisiere KNX Werte'
    java.lang.NullPointerException: null
            at org.eclipse.xtext.common.types.util.JavaReflectAccess.getRawType(JavaReflectAccess.java:107)
    Neben der Exception erscheinen im Infoterminal die Werte leider auch nicht. Habe ich hier zweite isolierte Probleme oder hängt beides zusammen? Vielen Dank für Eure Hilfe

    Beste Grüße, Stefan

    #2
    Hallo,

    Du könntest mal ein paar Logging-Zeilen einfügen:
    Code:
    logInfo("MyRule", "Start")
    logInfo("MyRule", "UG_WP_Temp_AT = " + UG_WP_Temp_AT)
    logInfo("MyRule", "UG_Warmepumpe_Temp_AT = " + UG_Warmepumpe_Temp_AT)
    postUpdate(UG_WP_Temp_AT, UG_Waermepumpe_Temp_AT.state)
    logInfo("Blah")
    dann kannst Du Dich an den Fehler heran tasten.

    Gruß,
    Martin

    Kommentar


      #3
      Könnte es etwas mit dem Date zu tun haben? Lass das bitte zum Test erstmal weg.

      Gruß,

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

      Kommentar


        #4
        Zitat von teichsta Beitrag anzeigen
        Könnte es etwas mit dem Date zu tun haben? Lass das bitte zum Test erstmal weg.

        Gruß,

        Thomas E.-E.
        Hallo Thomas,
        habe ich gemacht. Es fehlten auch imports. jtezt bin ich ein Stück weiter
        Code:
        import java.util.Date
        import java.util.Calendar
        import org.joda.time.DateTime
        ...
          var datum = new Date()
          logInfo("Waermepumpe.rules", "currentTime = " + datum.getTime())
          sendCommand(UG_WP_Timestamp, datum.time)
        Der Output im Logfile sind Millisekunden seit dem 01.01.1970 00:00
        Code:
        00:19:47.678 INFO  o.o.m.script.Waermepumpe.rules[:73] - currentTime = 1373494787662
        Es fehlt also offensichtlich die Umwandlung in einen EIB3 Date Type, denn beim sendCommand kommt folgende Meldung:
        Code:
        00:26:10.330 WARN  o.o.c.i.e.EventPublisherImpl[:78] - given command is NULL, couldn't send command to 'UG_WP_Timestamp'
        Wie mache ich die Umwandlung?
        Vielen Dank für die Hilfe.

        VG Stefan

        Kommentar


          #5
          "einfach nur" die aktuelle Systemzeit auf den KNX-Bus schicken würdest Du mit:

          Code:
          eventPublisher.postUpdate(itemName, new DateTimeType());
          Gruß,

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

          Kommentar


            #6
            Zitat von teichsta Beitrag anzeigen
            "einfach nur" die aktuelle Systemzeit auf den KNX-Bus schicken würdest Du mit:

            Code:
            eventPublisher.postUpdate(itemName, new DateTimeType());
            Gruß,

            Thomas E.-E.
            Herzlichen Dank Thomas - mit
            Code:
            postUpdate(itemName, new DateTimeType());
            funktioniert es. Offensichtlich habe ich auch den Unterschied zwischen postUpdate und sendCommand nicht verstanden. Im wiki steht dazu
            sendCommand(String itemName, String commandString): Sends the given command for the specified item to the event bus
            postUpdate(String itemName, String stateString): Posts the given status update for the specified item to the event bus
            Gehe ich Recht in der Annahme, dass man also für die Aktualisierung eines EIB StingItems ein postUpdate benutzt, zum Setzen eines Schalters aber ein sendCommand? Aller Anfang ist schwer...

            BG Stefan

            Kommentar


              #7
              Hi,

              Zitat von boxerfahrer Beitrag anzeigen
              Gehe ich Recht in der Annahme, dass man also für die Aktualisierung eines EIB StingItems ein postUpdate benutzt, zum Setzen eines Schalters aber ein sendCommand? Aller Anfang ist schwer...
              genau!

              Es gibt eben Items, denen Du das Kommando schicken kannst etwas zu tun (=ÖFFNE DICH), das aber noch lange nicht bedeutet, dass das Ding geöffnet ist (=GEÖFFNET).

              Gruß,

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

              Kommentar


                #8
                Gut auf den Punkt gebracht - herzlichen Dank!

                BG Stefan

                Kommentar

                Lädt...
                X