Ankündigung

Einklappen
Keine Ankündigung bisher.

- √ - RTR Betriebsmodus umschalten mit 1 Byte Objekt

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

    - √ - RTR Betriebsmodus umschalten mit 1 Byte Objekt

    Hallo, ich beschäftige mich gerade mit Openhab. Vieles funktioniert soweit, aber wie kann ich mit Openhab den Betriebsmodus von Raumthermostaten (MDT SCN-RT1UPE.01) mit einem 1-Byte Objekt umschalten und den aktuellen Status abfragen?

    Die Umschaltung des Objektes 'DPT HVAC Mode' und die Abfrage von 'DPT HVAC Status' erfolgt mit Hex-Werten.

    Gibt es in Openhab eine entsprechende Funktion, oder wie lässt sich das Problem lösen?

    Versucht habe ich es schon mit der Mapping Funktion, aber die überträgt keine Hex-Werte.

    Danke für die Hilfe.

    #2
    Kenne dein Gerät nicht. Mit meinem TS2+ geht das so

    Number Betriebsart_RTR_Wohnen"Betriebsart RTR" <heating> (All,RTR, GF_Arbeiten) { knx="<5.010:1/4/13" }

    1=Komfort, 2=Abwesend, 3=Nacht, 4=Frost

    Kommentar


      #3
      Hallo Rak,

      danke für die Hilfe. Ich habe den Fehler gefunden. Ich habe ein 'Switch' Item angelegt, kein 'Number' Item. Jetzt funktioniert es.

      Kommentar


        #4
        Hallo säme,

        Ich habe bei mir Merten RTR. Das Status wird über ein 1-byte DPT HVAC 20.102 Datentyp mitgeteilt. Ich bin aber da nur an die 4 ersten Bits interessiert (also der Modus, Komfort 0x01, Standby 0x02, Nacht 0x03 und Frost/Hitzeschutz 0x04).

        Der Modus wird über einen anderen 1-byte KO gesetzt. Der will ich aber nicht lesen, da er nur als Input gedacht ist und bei einer manuellen Änderung des Modus im RTR sicher nicht geupdatet wird.

        Mein Wunsch wäre der Modus über eine "Selection" in openHAB (also wie der Radio-Kanal im openHAB Demo) zu setzen. Der Wert sollte über das Status-Objekt gelesen werden. Hat jemand schon so was gemacht?

        Ich befürchte ich muss das Status mit einer Rule interpretieren, da die KNX Binding keine Transformation unterstützt. Oder hat jemand eine bessere Idee? Danke.

        Gruss,
        Cyril

        Kommentar


          #5
          Mit mappings?

          So:
          Selection item=Betriebsart_RTR_Wohnen label="Betriebsmodus" mappings=[1=Komfort, 2=Abwesend, 3=Nacht, 4=Frost]

          Oder verstehe ich deine Frage falsch?

          Kommentar


            #6
            Danke. Ja mit Mapping ist es mir klar.

            Ich möchte aber die Selection richtig updaten und das geht nur über das 1-Byte Status KO von Typ 20.102 mit meinen Merten RTR.

            Zum Beispiel, vom Status (DPT 20.102) bekomme ich den Wert 21, was mir sagt, dass der RTR im Heizung-Modus ist und dass der Komfort-Modus aktuell benutzt wird. Wenn ich aber den Komfort-Modus setzen möchte, muss ich den Wert 1 an einem anderen KO senden.

            Anders gesagt, wie wird deine Selection geupdatet? Nur über 1/4/13? Funktioniert das auch, wenn Du auf dem RTR den Modus änderst. Mit meinen Merten, muss ich wirklich den Status überwachen sonst bekomme ich kein Update, wenn der Modus direkt auf dem RTR geändert wird.

            Hier ist das Problem genau das gleiche: https://knx-user-forum.de/360663-post17.html

            Gruss,
            Cyril

            Kommentar


              #7
              Hallo zusammen,

              ich bin fast verzweifelt an diesem HVAC Modus und habe mich deshalb durch den Quellcode des KNX Bindings gewühlt.

              Was mich nun brennend interessiert: Funktioniert das mit dem Datapoint Type "5.006" bei euch wirklich? Dieser wird von dem KNX Binding nämlich gar nicht unterstützt. Sprich: Ein Item mit diesem DPT wird von openHab gar nicht auf den KNX Bus geschrieben, sondern (fast) stillschweigend geschluckt. Und 20.102 wird weder vom KNX Binding in openHab noch von der dabei benutzten Bibliothek "calimero.jar" unterstützt.

              Also: Wird der Betriebsmodus bei euch wirklich auf den KNX Bus geschrieben?

              Gruß,
              Martin

              Kommentar


                #8
                Ich habe Gira TS2+ und benutze für die Betriebsart dpt 5.005. Funktioniert bei mir ohne Fehlermeldungen. Ab und zu wird der Betriebszustand einzelner TS2+ nicht korrekt angezeigt, aber grundsätzlich tut es so wie es soll.

                Kommentar


                  #9
                  Hallo,

                  danke für die Rückmeldung. 5.005 könnte tatsächlich funktionieren, da dieser Typ von openHab unterstützt wird.

                  Gerade eben bemerke ich auch, dass ich wohl halluziniert habe: Im ganzen Thread kommt DPT 5.006 gar nicht vor, sondern 5.010. Und 5.010 wird von openHab ebenfalls unterstützt.

                  Die beiden muss ich mal bei mir ausprobieren.

                  Danke & Gruß,
                  Martin

                  Kommentar


                    #10
                    Ich verwende auch ein 5.0?? (weiss jetzt nicht mehr auswendig welcher) DPT, der von openHAB unterstützt wird.

                    Ich lese den Status (DPT 20.102) von meinen Merten RTR und extrahiere die nötigen Werte mit einer Rule. Die Rule sendet dann ein Update auf einem weiteren Item, der den Betriebsmodus des RTR setzt. Funktioniert gut aber leider jede Statusänderung schreibt konsequenterweise den Betriebsmodus des RTR neu. Nichts schlimmes aber nicht schön.

                    Ist es möglich ein Item in openHAB zu updaten ohne dass es auf dem KNX-Bus geschrieben wird?

                    Gruss,
                    Cyril

                    Kommentar


                      #11
                      So habe ich das jetzt auch.

                      Die Items (das erste schreibt den Modus auf den Bus, das zweite liest den Status aus):
                      Code:
                      Number Heizen_Wohnen_Betriebsart_HVAC  "Betriebsart"      <settings> { knx="5.005:3/1/5+5.005:3/7/4" }
                      Number Heizen_Wohnen_Status_HVAC       "Status HVAC [%d]"            { knx="<5.005:3/1/6" }
                      Die Sitemap:
                      Code:
                      Switch item=Heizen_Wohnen_Betriebsart_HVAC mappings=[1="Komfort", 2="Standby", 3="Nacht", 4="Frost"]
                      Text   item=Heizen_Wohnen_Status_HVAC
                      Und die dazu passende Rule:
                      Code:
                      import org.openhab.core.library.types.*
                      
                      
                      rule "Heizen_Wohnen_Betriebsart"
                      when
                          Item Heizen_Wohnen_Status_HVAC received update
                          or System started
                      then
                          if (Heizen_Wohnen_Status_HVAC.state instanceof DecimalType) {
                              var value = Heizen_Wohnen_Status_HVAC.state as DecimalType
                              logDebug("heating", "Received HVAC status " + value)
                              if ((value.intValue().bitwiseAnd(0x08)) == 0x08) {
                                  postUpdate(Heizen_Wohnen_Betriebsart_HVAC, 4)
                              }
                              else if ((value.intValue().bitwiseAnd(0x04)) == 0x04) {
                                  postUpdate(Heizen_Wohnen_Betriebsart_HVAC, 3)
                              }
                              else if ((value.intValue().bitwiseAnd(0x02)) == 0x02) {
                                  postUpdate(Heizen_Wohnen_Betriebsart_HVAC, 2)
                              }
                              else if ((value.intValue().bitwiseAnd(0x01)) == 0x01) {
                                  postUpdate(Heizen_Wohnen_Betriebsart_HVAC, 1)
                              }
                          }
                      end
                      Mit genau dem von Dir beschriebenen unschönen Verhalten, dass beim Betätigen des Umschalters der Modus mit dem Item "Betriebsart" auf den Bus geschrieben wird, dann vom "Status"-Item vom Bus empfangen wird, dieses das Item "Betriebsart" aktualisiert und somit der Wert nochmal auf den Bus geschrieben wird.

                      Super wäre es an der Stelle natürlich, wenn man Skripte mit Parametern aufrufen könnte. Im Moment habe ich obige Rule einfach x-Mal geklont, was ich nicht so hübsch finde.

                      Gruß,
                      Martin

                      Kommentar


                        #12
                        Hier meine Variante:

                        Code:
                        rule "Betriebsart Heizung"
                        when
                          Item Heat_Opmode received command  //Opmode wurde vom Bus empfangen
                        then
                          var tmp = receivedCommand as DecimalType  //lese Wert als Dezimalzahl
                          var state = tmp.toBigDecimal.toBigInteger  //schreibe als BigInt nach state
                          logDebug("heizung.rules","Heat_Opmode:"+state.toString)
                          if (state.testBit(0) ) {  //Bit 0 gesetzt?
                                Heat_Opset.postUpdate(1)
                          }    
                          else if (state.testBit(1)) {  //Bit 1 gesetzt?
                                Heat_Opset.postUpdate(2)
                          }
                          else if (state.testBit(2)) { //Bit 2 gesetzt?
                                Heat_Opset.postUpdate(3)
                          }
                          else if (state.testBit(3)) {  //Bit 3 gesetzt?
                                Heat_Opset.postUpdate(4)
                          }
                          else {
                                Heat_Opset.postUpdate(2)
                          }
                        end
                        Ob man received command oder received update nimmt, ist bei knx wohl egal, weil der Bus da keinen Unterschied kennt.

                        System started sollte eigentlich keine positiven Auswirkungen haben, da bei frisch gestartetem System die entsprechenden items noch nicht initialisiert sind. Wenn sie dann (durch ein vorangestelltes < in der item-Definition) automatisch initialisiert werden, sollte die Rule ohnehin greifen.

                        Kommentar


                          #13
                          Hallo zusammen,

                          mit interesse verfolge ich eurer Diskussion - leider klappt keine der beiden Löungen bei mir irgendwie nicht. Ich bekomme die RTR (B.IQ von Berker) nicht im Modus umgeschaltet. Ich habe sie im KNX pro Stockwerk gruppiert mit einer Gruppen Adresse - wenn ich im ETS die entsprechenden Werte 1/2/3/4 für Komfort/Standby/Nacht/Frost schicke klappt es wunderbar und die RTRs schalten um.

                          Wenn ich nun das ganze auf OH probiere kommt hier irgendwie nichts im RTR an. Erwartet werden 1 Byte werte.

                          Ich habe versucht das nur auf die Adresse aber auch über DPT zu schreiben (laut B.IQ Beschreibung verhält sich das so:
                          Objekt Funktion Name DPT-ID Typ Flag
                          28 Komfortbetrieb Betriebsmodiumsch. 1.001 1 Bit K, S(, Ü)6
                          29 Standby-Betrieb Betriebsmodiumsch.1.001 1 Bit K, S(, Ü)6
                          30 Nachtbetrieb Betriebsmodiumsch. 1.001 1 Bit K, S(, Ü)6
                          31 Frost-Betriebsmodiumsch. 1.001 1 Bit K, S(, Ü)6

                          )

                          Alles bislang erfolglos.

                          Itemconfig:
                          Number HzgModusOGDG "Betriebsart OG DG" <settings> { knx="1.001:13/1/0" }

                          Sitemap:
                          Switch item=HzgModusOGDG mappings=[1=Komfort, 2=Abwesend, 3=Nacht, 4=Frost]

                          Rule:
                          rule "Heizen_Wohnen_Betriebsart_OG_DG"
                          when
                          Item HzgModusOGDG received update
                          then
                          if (HzgModusOGDG.state instanceof DecimalType) {
                          var value = HzgModusOGDG.state as DecimalType
                          logDebug("heating", "Received HVAC status " + value)
                          if ((value.intValue().bitwiseAnd(0x08)) == 0x08) {
                          postUpdate(HzgModusOGDG, 4)
                          }
                          else if ((value.intValue().bitwiseAnd(0x04)) == 0x04) {
                          postUpdate(HzgModusOGDG, 3)
                          }
                          else if ((value.intValue().bitwiseAnd(0x02)) == 0x02) {
                          postUpdate(HzgModusOGDG, 2)
                          }
                          else if ((value.intValue().bitwiseAnd(0x01)) == 0x01) {
                          postUpdate(HzgModusOGDG, 1)
                          }
                          }
                          end

                          Im Log sehe ich folgende Fehlermeldung:
                          14:00:59.505 ERROR o.o.c.s.ScriptExecutionThread[:50]- Error during the execution of rule 'Heizen_Wohnen_Betriebsart_OG_DG': cannot invoke method public org.openhab.core.types.State org.openhab.core.items.GenericItem.getState() on null


                          Aber leider passiert gar nix.

                          Irgend eine Idee/ Hilf?

                          Danke
                          Karsten
                          Angehängte Dateien

                          Kommentar


                            #14
                            Hallo zusammen,

                            @udo1toni:
                            Stimmt, auf "System started" kann man verzichten. Ich hatte das noch drin, weil bei mir die UI nicht aktualisiert wurde. Aber das liegt an einem Bug (Issue 795).

                            @kakaiser:
                            Das passt nicht zusammen, was Du schreibst. Einerseits magst Du einen 1-Byte-Wert (mit 1,2,3,4) schreiben, andererseits zitierst Du aus der Doku 4 unterschiedliche KO vom Typ 1.001 (= Bit).

                            Also entweder schreibst Du den 1-Byte Wert auf eine Gruppenadresse, die mit dem passenden 1-Byte HVAC KO verbunden ist, oder Du schreibst auf 4 unterschiedliche 1-Bit Gruppenadressen, die mit den 4 KOs 28, 29, 30 und 31 verbunden sind.

                            Gruß,
                            Martin

                            Kommentar


                              #15
                              Nachtrag:

                              13/1/0 kann laut Screenshot ein 1-Byte Objekt sein. Dann darfst Du in openHab aber nicht den DPT 1.001 verwenden, sondern musst 5.005 oder 5.010 verwenden.

                              Also so:

                              Code:
                              Number HzgModusOGDG "Betriebsart OG DG" <settings> { knx="5.005:13/1/0" }
                              Gruß,
                              Martin

                              Kommentar

                              Lädt...
                              X