Ankündigung

Einklappen
Keine Ankündigung bisher.

OH2: wie kann ich einen Regler für Jung Stetigregeler 2176 erstellen?

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

    OH2: wie kann ich einen Regler für Jung Stetigregeler 2176 erstellen?

    Hallo zusammen,

    ich versuche bisher vergeblich eine Lösung für einen Regler zu finden, der die Zustände Komfort/Standby/Nachtabsenkung bedienen kann.

    Der 1Bit-Eingang Komfort könnte mit einem Switch belegt werden. Dann kommt aber noch
    der 1Bit-Eingang Nacht/Standby ins Spiel.
    Es gibt für den Status nur einen 1Byte Ausgang, der nur Abgefragt werden kann.

    Kann mir hier jemand weiterhelfen?

    Beste Grüße
    JBreuer
    Angehängte Dateien

    #2
    Ich habe die Gira RTR TS2plus, auf einer GA ../../36 kann ich die Betriebsart als Byte lesen (dabei stehen die 8 Bits für verschiedene Betriebsarten, Kühlen und irgendwelchen Alarm nutze ich aber nicht) Auf einer anderen GA ../../28 kann ich die Betriebsart setzen, aber als Dezimalzahl 1 bis 4 (wer auch immer da gedacht hat...).
    Die GA zum Setzen habe ich auf der Oberfläche zum umsteuern. Damit die Betriebsart auch korrekt gesetzt wird, wenn ich am RTR selbst umschalte, setze ich das Item über eine Rule, sobald es ein Update gibt.
    Die Rule ist noch aus meiner Anfangszeit und ich habe versucht, die Schreibzugriffe auf die Items zu minimieren, deshalb die zusätzliche Abfrage. Auf ähnliche Weise könntest Du das sicher auch lösen, wobei Du durch die unterschiedlichen GA für die Betriebsart noch ein zusätzliches Proxy Item brauchst (das entspricht meinem ...Opset), und eine zusätzliche Rule, wenn dieses Item ein Kommdo empfängt (also received command als Trigger) ein passendes sendCommand an die entsprechenden Adresse

    Code:
     Number  Heat_GF_Bath_Opmode "Bt Bad EG [%.0f ]" <heating>   (GHeat_Mode)        { knx="<5.005:1/7/36" }
     Number  Heat_GF_Bath_Opset  "Bt Bad EG [%s]"    <heating>   (GHeat_Set)     { knx="5.005:1/7/28" }
    Code:
    rule "Abfrage Betriebsart Bad unten"
    when
          Item Heat_GF_Bath_Opmode received update                      //Opmode wurde vom Bus empfangen
    then
        var tmp = Heat_GF_Bath_Opmode.state as DecimalType              //lese empfangenen Wert als Dezimalzahl
        var state = tmp.toBigDecimal.toBigInteger                       //schreibe den Dezimalwert als (Big)Integer nach state
        logDebug("heizung.rules","Heat_GF_Bath_Opmode:"+state.toString)
        if (state.testBit(0))                                           //teste Bit 0
            if (Heat_GF_Bath_Opset.state!=1)
                Heat_GF_Bath_Opset.postUpdate(1)                        //falls 1, dann Betriebsart 1 setzen
        else if (state.testBit(1))                                      //teste Bit 1
            if (Heat_GF_Bath_Opset.state!=2)
                Heat_GF_Bath_Opset.postUpdate(2)                        //falls 1, dann Betriebsart 2 setzen
        else if (state.testBit(2))                                      //teste Bit 2
            if (Heat_GF_Bath_Opset.state!=3)
                Heat_GF_Bath_Opset.postUpdate(3)                        //falls 1, dann Betriebsart 3 setzen
        else if (state.testBit(3))                                      //teste Bit 3
            if (Heat_GF_Bath_Opset.state!=4)
                Heat_GF_Bath_Opset.postUpdate(4)                        //falls 1, dann Betriebsart 4 setzen
        else                                                            //sonst
            if (Heat_GF_Bath_Opset.state!=2)
                Heat_GF_Bath_Opset.postUpdate(2)                        //setze Betriebsart 2
    end
    Vielleicht kannst Du den Stetigregler auch dahingehend konfigurieren, dass es ein zusätzliches Objekt zum Steuern der Betriebsart gibt (so hab ich das beim Gira hinbekommen)
    Zuletzt geändert von udo1toni; 12.11.2017, 19:47.

    Kommentar


      #3
      Es sieht leider so aus, als ob es keine GA für die Eingabe des Status für den Regler geben würde. Der Status kann aber ausgelesen werden (Objekt 9:Status). Das funktioniert auch.
      Hat jemand noch eine Idee?

      Kommentar


        #4
        Hallo,

        ich hab das folgendermassen geregelt:

        Als Items habe ich mehrere eingetragen, z.B. für das Bad:

        Code:
        Number Betriebsart_OG_Bad  "Betriebsart"    <betrieb> (OG_Bad)
        Switch Betriebsart_OG_Bad_Nacht  "Nacht" <betrieb> (OG_Bad) { knx="1/3/17" }
        Switch Betriebsart_OG_Bad_Komfort "Komfort" <betrieb> (OG_Bad) { knx="1/3/18" }
        Switch Betriebsart_OG_Bad_Standby "Standby" <betrieb> (OG_Bad)
        Switch Betriebsart_OG_Bad_Frostschutz "Frostschutz" <betrieb> (OG_Bad) { knx="1/3/19" }
        Number Betriebsart_OG_Bad_Status "Status [(%d)]" <betrieb> (OG_Bad) { knx="5.005:1/2/5" }
        Wobei mein Raumkontroller in den Standby geht, wen Komfort, Nacht und Frostschutz auf 0 stehen. Wenn mehr als eine Switch auf 1 stehen, gibt es die Prioritätsreihenfolge, die ich jetzt nicht auswendig kenne.

        Umschalten tue ich über eine Regel:

        Code:
        rule "Betriebsart Bad umschalten - von Selection nach 1Bit"
        when
          Item Betriebsart_OG_Bad received command
        then
          if (receivedCommand == 0) {
            Betriebsart_OG_Bad_Komfort.postUpdate(ON)
            Betriebsart_OG_Bad_Standby.postUpdate(OFF)
            Betriebsart_OG_Bad_Nacht.postUpdate(OFF)
            Betriebsart_OG_Bad_Frostschutz.postUpdate(OFF)
          }
          else if (receivedCommand == 1) {
            Betriebsart_OG_Bad_Komfort.postUpdate(OFF)
            Betriebsart_OG_Bad_Standby.postUpdate(ON)
            Betriebsart_OG_Bad_Nacht.postUpdate(OFF)
            Betriebsart_OG_Bad_Frostschutz.postUpdate(OFF)
          }
          else if (receivedCommand == 2) {
            Betriebsart_OG_Bad_Komfort.postUpdate(OFF)
            Betriebsart_OG_Bad_Standby.postUpdate(OFF)
            Betriebsart_OG_Bad_Nacht.postUpdate(ON)
            Betriebsart_OG_Bad_Frostschutz.postUpdate(OFF)
          }
          else if (receivedCommand == 3) {
            Betriebsart_OG_Bad_Komfort.postUpdate(OFF)
            Betriebsart_OG_Bad_Standby.postUpdate(OFF)
            Betriebsart_OG_Bad_Nacht.postUpdate(OFF)
            Betriebsart_OG_Bad_Frostschutz.postUpdate(ON)
          }
        end
        
        rule "Abfrage Betriebsart Bad"
        when
          Item Betriebsart_OG_Bad_Status received command
        then
          var tmp = receivedCommand as DecimalType
          var state = tmp.toBigDecimal.toBigInteger
        
          if (state.testBit(0) ) {
            Betriebsart_OG_Bad.postUpdate(0)
          }
          else if (state.testBit(1)) {
            Betriebsart_OG_Bad.postUpdate(1)
          }
          else if (state.testBit(2)) {
            Betriebsart_OG_Bad.postUpdate(2)
          }
          else if (state.testBit(3)) {
            Betriebsart_OG_Bad.postUpdate(3)
          }
          else {
            Betriebsart_OG_Bad.postUpdate(1)
          }
        end
        In der Sitemap sieht das dann folgendermassen aus:

        Code:
        Selection item=Betriebsart_OG_Bad label="Betriebsart" mappings=[0=Komfort, 1=Standby, 2=Nacht, 3=Frostsschutz]
        Gruß,
        Daniel
        Zuletzt geändert von Zigulle; 13.11.2017, 08:55.

        Kommentar


          #5
          Danke, das werde ich gerne mal ausprobieren.

          Kommentar


            #6
            Zigulle Hast Du mal ausprobiert, ob das explizite Abschalten wirklich nötig ist? Ich könnte mir vorstellen, dass der ON-Befehl ausreicht, um den entsprechenden Modus auszuwählen.

            Es gibt übrigens für den Fall der Wertunterscheidung eine nette Funktion:
            Code:
            switch (receivedCommand) {
                case 0: { }
                case 1: { }
                case 2: { }
                case 3: { }
                case default: { }
            }
            Wie immer können die geschweiften Klammern (hinter dem Doppelpunkt) entfallen, falls nur eine Anweisung ausgeführt werden soll.
            case default wird ausgeführt, falls keine der vorherigen Möglichkeiten zutrifft.
            Nachteil ist, dass man keine Wertebereiche angeben kann, aber wenn man eine Liste an Möglichkeiten hat, die jeweils unterschiedliche Wirkung haben sollen, ist switch case übersichtlicher als diverse if() else if() Zeilen.
            Zuletzt geändert von udo1toni; 13.11.2017, 17:12.

            Kommentar

            Lädt...
            X