Ankündigung

Einklappen
Keine Ankündigung bisher.

KNX Status: OH erkennt die Statusänderung nicht

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

    KNX Status: OH erkennt die Statusänderung nicht

    Hallo,

    openHAB bekommt manche KNX Statusänderungen nicht mit. Ich habe folgendes Szenario:

    Code:
    Switch MusikWohnzimmer[B]Schalten[/B] "Musik Wohnzimmer"        <multimedia>   (gMultimedia,gWohnzimmer) { knx="1/5/2+<3/5/2" }
    Switch MusikWohnzimmer[B]Status[/B] "MusikWohnzimmer Status" <multimedia> { knx="3/5/2" }
    Die GA 3/5/2 ist das Statusobjekt des Schaltaktors, GA 1/5/2 ist der Schaltaktor selbst (Busch-Jäger).
    Ich habe eine GA "AllesAus" definiert, in der alle abzuschaltenden Geräte stehen, welche per Tastendruck auf einen "AllesAus" Taster ausgeschaltet werden. Das passiert alles per KNX und nicht mit openHAB.
    Im openHAB events.log sehe ich kein
    Code:
    MusikWohnzimmer[B]Schalten[/B] received command OFF
    obwohl der Aktor ausschaltet. Auch der Status erscheint im events.log korrekt
    Code:
    2014-07-10 08:25:32 - AllesAus received command OFF
    2014-07-10 08:25:34 - MusikWohnzimmer[B]Status[/B] received command OFF
    Was ich nicht verstehe:
    warum sieht openHAB das Kommando "MusikWohnzimmerSchalten OFF" nicht?
    warum wird das Item MusikWohnzimmerSchalten nicht upgedatet, obwohl der Status MusikWohnzimmerStatus korrekt gesendet und von OH empfangen wird?

    Ist das ein Bug oder mein Fehler?

    Viele Grüße
    Michael

    #2
    Hallo,

    nach einem Tag Forschung muss mein Problem sogar noch etwas ausweiten. Obwohl Statusmeldungen vom KNX Aktor auf den Bus gesendet werden, nimmt openHab diese nicht entgegen.
    Ein Beispiel:

    Ich schalte mein
    Code:
    Switch DeckenlichtWohnzimmerSchalten  "Deckenlicht Wohnzimmer" (gBeleuchtung,gWohnzimmer) { knx="1/0/2+<3/0/2" }
    
    Switch DeckenlichtWohnzimmerStatus "Status Deckenlicht Wohnzimmer"  (gBeleuchtungStatus)  { knx="3/0/2" }
    und lese den Status DeckenlichtWohnzimmerStatus (3/0/2) aus (per REST API). DeckenlichtWohnzimmerStatus bleibt aber Uninitialized.
    Im events.log steht entsprechend auch nur:
    Code:
    2014-07-13 07:09:56 - DeckenlichtWohnzimmerSchalten state updated to OFF
    obwohl auch noch DeckenlichtWohnzimmerStatus upgedatet werden müsste und soll.
    Wenn ich den EIBD lauschen lasse, bekomme ich den Busverkehr:

    Code:
    Write from 0.0.0 to 1/0/2: 01 [I]<= Schalte Licht ein (01)[/I]
    Write from 0.1.5 to 3/0/2: 01 [I]<= Rückmeldung Status: Licht ist ein (01)[/I]
    Was mache ich falsch?

    Kommentar


      #3
      Zitat von staehler Beitrag anzeigen
      ...obwohl auch noch DeckenlichtWohnzimmerStatus upgedatet werden müsste und soll.
      Hi,
      nein das kann so leider nicht funktionieren. Du gibts dem Item DeckenlichtWohnzimmerstatus keine Read Anweisung mit:

      Code:
      Switch DeckenlichtWohnzimmerStatus "Status Deckenlicht Wohnzimmer"  (gBeleuchtungStatus)  { knx="3/0/2" }
      Zum lesen vom Bus musst du vor die GA immer ein < schreiben:

      Code:
      Switch DeckenlichtWohnzimmerStatus "Status Deckenlicht Wohnzimmer"  (gBeleuchtungStatus)  { knx="[B]<[/B]3/0/2" }
      Das sollte schon reichen.
      Aber wofür brauchst du denn noch ein extra Status item? Dein Switch Item DeckenlichtWohnzimmerSchalten kennt ja bereits den Status des Lichts: { knx="1/0/2+<3/0/2" }

      Gruß

      Kommentar


        #4
        Hi,

        Zitat von whopperg Beitrag anzeigen
        Hi,
        Zum lesen vom Bus musst du vor die GA immer ein < schreiben:
        Er K A N N ein '<' vor die GA schreiben, muss er aber in seinem Fall nicht zwingend. Er will ja keinen Lese-Request absenden. Das Status-Item muss sich auch so ändern, wenn sich auf dem KNX-Bus das Status-Objekt ändert.
        Das '<' bewirkt doch nur, dass eine Read-Request nach OpenHAB-Neustart abgesetzt wird.

        Gruß,
        Thomas

        Kommentar


          #5
          Ja, das mit dem '<' sollte ohne Bedeutung für mich sein. Außerdem habe ich das auch schon mit '<' ausprobiert und hat, wie zu erwarten, auch nicht funktioniert.
          Das Item DeckenlichtWohnzimmerStatus habe ich nur angelegt, um es dedziert auslesen zu können. Eigentlich erwarte ich auch, dass die Definition
          Code:
          Switch DeckenlichtWohnzimmerSchalten  "Deckenlicht Wohnzimmer" (gBeleuchtung,gWohnzimmer) { [URL="http://redaktion.knx-user-forum.de/lexikon/knx/"]knx[/URL]="1/0/2+<3/0/2" }
          völlig ausreichend sein sollte. Da ist ja der Status schon mit drin.

          Tja, leider komme ich da nicht weiter :-(
          Hat keiner einen Tipp?

          Kommentar


            #6
            Nun, bei mir funktioniert es so ;-)

            Wird dir der Switch Status denn Richtig angezeigt? Irgendwas in den Logs?

            Vielleicht kannst du das auch mit einer Rule erreichen:

            Code:
            Rule "Status update"
            
            when 
            item DeckenlichtWohnzimmerSchalten  received update 
            or 
            item DeckenlichtWohnzimmerSchalten changed
            
            then
            
            DeckenlichtWohnzimmerStatus.postUpdate(DeckenlichtWohnzimmerSchalten.state)
            end
            Achtung, Rule nicht getestet ;-)

            Kommentar


              #7
              Das mit der Rule wäre mir zu umständlich, da es sich um einige Items handelt. Außerdem, und das ist das merkwürdige, funktioniert es bei manchen Items, bei manchen aber nicht.

              Mein ursprüngliches Problem war ja, dass openHAB bei einer KNX-Zentralfunktion, wie "AllesAus", keine Schaltaktionen erkennt. Daher wollte ich das über die Status machen, welche ja aktiv nach einer Schaltaktion auf dem Bus senden. Das geht bei einigen Items auch, aber eben bei einigen auch nicht, obwohl das der selbe Schaltaktor ist. Das ist mir viel zu unzuverlässig, bzw. fehlerbehaftet.
              Aber irgendwie muss ich das in den Griff bekommen, sonst ist mein OH ständig in einem inkonsistenten Zustand, jedesmal, wenn ich eine Zentralfunktion betätige.

              Kann es sein, dass das ein Bug im KNX Binding ist? Immerhin sehe ich die Statustelegramme auf dem Bus.

              Zu Deinen Fragen: nein, das Item des Status ist Uninitialized. In den Logs steht leider nichts :-( Kein Fehler im opehab.log und eben auch kein Update auf das Ststus Item im events.log.

              Kommentar


                #8
                Hier ein Beispiel des unterschiedlichen Verhaltens. Beides sind Lampen, hängen am selben KNX-Schaltaktor und KNX-seitig gleich konfiguriert. Beide haben GAs an den Statusobjekten und sind openHAB seitig gleich konfiguraiert. Keine Tipp-Fehler o.ä. ich hab's schon 100mal geprüft.


                Schalte ich das Licht im Wohnzimmer, passiert folgendes im events.log:
                Code:
                2014-07-13 12:22:28 - DeckenlichtWohnzimmerSchalten received command ON
                2014-07-13 12:22:28 - DeckenlichtWohnzimmerSchalten state updated to ON
                Der eibd sieht das:
                Code:
                Write from 0.0.0 to 1/0/2: 01
                Write from 0.1.5 to 3/0/2: 01
                In der Gardarobe funktioniert es wie erwartet:
                Code:
                2014-07-13 12:22:16 - LichtGardarobeSchalten received command ON
                2014-07-13 12:22:16 - LichtGardarobeStatus received command ON
                eibd:
                Code:
                Write from 0.0.0 to 1/0/21: 01
                Write from 0.1.5 to 3/0/21: 01
                Kann mir das einen erklären? Warum wird beim einen das Status-Item upgedatet, beim andere nicht?

                Kommentar


                  #9
                  Hi,

                  ich vermute, das liegt daran, weil du die Status-GA zweimal verwendest. Einmal beim Schalten-Item und einmal beim Status-Item. Zumindest machst du das beim DeckenlichtWohnzimmer und bei MusikWohnzimmer so.

                  Kann es sein, dass bei LichtGarderobe die Status-GA nur dem Status-Item und nicht dem Schalten-Item zugeordnet ist?

                  Gruß,
                  thomas

                  Kommentar


                    #10
                    Hi Thomas,

                    leider stimmt Deine Vermutung nicht. Das Status-Item hatte ich erst angelegt, nachdem ich dieses Fehlverhalten entdeckt habe. Ich hatte gehofft, dass es dann funktioniert.
                    Zumindest kann ich auf diese Weise nachweisen, dass das Status-Item nicht upgedatet wird, da immer noch Uninitialized.
                    Vorher hatte ich all die dedizierten Status Items nicht und eigentlich will ich diese auch nicht behalten.

                    Trotzdem verstehe ich das Verhalten nicht, da eben bei einem Item der Status upgedatet wird, beim anderen Item nicht. Auf dem Bus sehe ich bei beiden Events die gleichen Telegramme.

                    Wie schon erwähnt, habe ich das Problem mit der Zentralfunktion, welches ich mit den Status-Items begegenen wollte. Da openHab nur ein paar Updates mitbekommt, ist OH nach dem betätigen einer Zentralfunktion in einem nicht konsistenten Zustand.

                    Viele Grüße
                    Staehler

                    Kommentar


                      #11
                      Hmm, ok.

                      Dann fällt mir nur noch das hier ein:

                      Ich hatte auch mal das Problem, dass vom Bus nicht alle Meldungen bei OpenHAB gelandet sind. Damals lag es bei mir an der USB-Schnittstelle von ABB in Kombination mit eibd. Habe mir dann einen TP-UART-Stick bestellt und seitdem funzt alles einwandfrei.

                      Aber bei dir ist das scheinbar etwas anderes, da die Statusmeldungen ja noch bei OpenHAB landen und nur die jeweiligen Items nicht aktualisiert werden. Bei mir hat die Kombination aus eibd und ABB-USB die Updates gar nicht mehr weitergegeben, aber eben auch nur teilweise. Teilweise hat es auch funktioniert.

                      Vielleicht doch ein Bug?

                      Gruß,
                      Thomas

                      Kommentar


                        #12
                        Hallo zusammen,

                        ich greife das Thema noch mal auf.
                        Ich habe bei mir Openhab 3 installiert und das KNX Binding aktiviert.
                        Ich kann über ein Item auch Lichter An und Aus schalten.
                        Das heißt Openhab sendet entsprechend an den BUS.
                        Was jedoch nicht geht, ist wenn ich Licht am Schalter an bzw. ausschalte, dass Openhab die Meldung erhält.

                        Für mich bedeutet das, dass Openhab den Zustand der Stauts Gruppenadresse nicht bekommt.
                        Im Logfile sehe ich auch immer nur die Info, wenn ich direkt aus Openhab Änderungen vornehme.

                        Hat jemand eine Idee?

                        Das Device ist wie folgt programmiert

                        Code:
                        UID: knx:device:CRU:25
                        label: KNX Device
                        thingTypeUID: knx:device
                        configuration:
                        pingInterval: 5
                        address: 0.0.0
                        readInterval: 5
                        fetch: true
                        bridgeUID: knx:ip:CRU
                        location: Keller
                        channels:
                        - id: sw_Arbeitszimmer
                        channelTypeUID: knx:switch
                        label: Deckenlicht Arbeitszimmer
                        description: null
                        configuration:
                        ga: 1/2/11+<1/2/12

                        Das Gateway ist wie folgt programmiert

                        Code:
                        UID: knx:ip:CRU
                        label: KNX/IP Gateway
                        thingTypeUID: knx:ip
                        configuration:
                        useNAT: false
                        readRetriesLimit: 3
                        ipAddress: 192.168.25.12
                        autoReconnectPeriod: 30
                        localIp: 192.168.25.14
                        type: TUNNEL
                        localSourceAddr: 0.0.0
                        readingPause: 50
                        portNumber: 3671
                        responseTimeout: 10
                        location: Keller
                        Logfile beim betätigen des Schalters über OP

                        Code:
                        15:13:33.061 [INFO ] [openhab.event.ItemCommandEvent ] - Item 'item_Deckenlicht_Arbeitszimmmer' received command ON
                        15:13:33.074 [INFO ] [openhab.event.ItemStatePredictedEvent] - Item 'item_Deckenlicht_Arbeitszimmmer' predicted to become ON
                        15:13:33.092 [INFO ] [openhab.event.ItemStateChangedEvent ] - Item 'item_Deckenlicht_Arbeitszimmmer' changed from OFF to ON
                        15:13:34.110 [INFO ] [openhab.event.ItemCommandEvent ] - Item 'item_Deckenlicht_Arbeitszimmmer' received command OFF
                        15:13:34.124 [INFO ] [openhab.event.ItemStatePredictedEvent] - Item 'item_Deckenlicht_Arbeitszimmmer' predicted to become OFF
                        15:13:34.135 [INFO ] [openhab.event.ItemStateChangedEvent ] - Item 'item_Deckenlicht_Arbeitszimmmer' changed from ON to OFF
                        15:13:35.592 [INFO ] [openhab.event.ItemCommandEvent ] - Item 'item_Deckenlicht_Arbeitszimmmer' received command ON
                        15:13:35.603 [INFO ] [openhab.event.ItemStatePredictedEvent] - Item 'item_Deckenlicht_Arbeitszimmmer' predicted to become ON
                        15:13:35.615 [INFO ] [openhab.event.ItemStateChangedEvent ] - Item 'item_Deckenlicht_Arbeitszimmmer' changed from OFF to ON

                        Kommentar


                          #13
                          Beim Item in Openhab unter Metadata "Auto-Update" einfügen und auf "false" setzen, d.h., den Haken entfernen.

                          Kommentar


                            #14
                            hmm
                            Leider klappt das nicht.
                            Wenn ich das mache, bekomme ich das Licht zwar noch per Openhab an, aber nicht mehr aus.
                            Zudem registriert OH weiterhin nicht die Signale vom Bus.

                            Kommentar


                              #15
                              Bitte setze pingInterval auf einen sinnvollen Wert (600 z.B., das heißt es wird alle 10 Minuten geprüft, ob das Device noch da ist. 5 Sekunden flutet im Zweifel den knx Bus mit Read Requests).
                              Bitte setze readInterval unbedingt auf 0. readInterval sollte nur im absoluten Ausnahmefall auf einen anderen Wert als 0 gesetzt werden, und zwar dann, wenn das Device kein zyklisches Senden und kein Senden bei Änderung beherrscht. Mit readInterval kann man dann gezielt diese Devices dazu bringen, auf den Read Request zu antworten. Voraussetzung ist natürlich, dass die GA lesbar ist und das Device exklusiv auf der GA sendet.

                              Kommentar

                              Lädt...
                              X