Ankündigung

Einklappen
Keine Ankündigung bisher.

Heizungsaktoren steuern mit OpenHAB2. Wie komme ich von Ist zu Soll?

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

    #16
    Aber gern.

    Die TS2plus liefern als Betriebsart ein Byte. Dabei ist Bit 4 immer gesetzt (+32) und die einzelnen Betriebsarten sind den unteren 4 Bits zugeordnet,
    • 0 (Wert 1) -> Komfort,
    • 1 (Wert 2) -> Standby,
    • 2 (Wert 4) -> Nachtabsenkung ,
    • 3 (Wert 8) -> Frostschutz.
    Die Bits 5 bis 7 haben auch eine Bedeutung (Heizen, Kühlen, keine Ahnung...) spielen bei mir aber keine Rolle.

    Die Wahl der Betriebsart erfolgt aber über einen Zahlenwert 1 bis 4 (entsprechend Bitposition +1, also Bit0 -> 1 ... Bit3 -> 4)
    Beim Steuern versende ich also direkt den Zahlenwert 1 bis 4, für die Rückmeldung werte ich die Bits aus.

    Ein Thing (die anderen sehen genauso aus)
    Code:
        Thing device GiraTSplus1_1_113 "TS2plus Wozi" @ "KNX" [
              address="1.1.113",
              fetch=false,
              pingInterval=600,
              readInterval=0
           ] {
              Type number                 : tempIs "Temperatur ist"       [ ga="<3/7/23" ]
              Type number                 : tempSet "Temperatur soll"     [ ga="9.001:3/7/26+<3/7/50" ]
              Type number                 : opMode "Betriebsart ist"      [ ga="5.005:<3/7/36" ]
              Type number                 : opSet "Betriebsart soll"      [ ga="5.005:3/7/28" ]
              Type switch-control         : heat "Heizen"                 [ ga="3/7/37" ]
          }
    Items:
    Code:
     Group GHeat                "Heizung"           <heating>           (All)
             Group GHeat_Mode    "Betriebsart Nr."   <heating>           (GHeat)
             Group GHeat_Set     "Betriebsart"       <heating>           (GHeat)
        //RTR Betriebsart ist
       Number          TS2plusBadEG_OpMode     "Betriebsart ist"        (GHeat_Mode)                   {channel="knx:device:bridge:GiraTSplus1_1_120:opMode"}
       Number          TS2plusBadOG_OpMode     "Betriebsart ist"        (GHeat_Mode)                   {channel="knx:device:bridge:GiraTSplus1_1_220:opMode"}
       Number          TS2plusEltern_OpMode    "Betriebsart ist"        (GHeat_Mode)                   {channel="knx:device:bridge:GiraTSplus1_1_210:opMode"}
       Number          TS2plusFlur_OpMode      "Betriebsart ist"        (GHeat_Mode)                   {channel="knx:device:bridge:GiraTSplus1_1_100:opMode"}
       Number          TS2plusKueche_OpMode    "Betriebsart ist"        (GHeat_Mode)                   {channel="knx:device:bridge:GiraTSplus1_1_130:opMode"}
       Number          TS2plusLaura_OpMode     "Betriebsart ist"        (GHeat_Mode)                   {channel="knx:device:bridge:GiraTSplus1_1_240:opMode"}
       Number          TS2plusMatty_OpMode     "Betriebsart ist"        (GHeat_Mode)                   {channel="knx:device:bridge:GiraTSplus1_1_230:opMode"}
       Number          TS2plusTechnik_OpMode   "Betriebsart ist"        (GHeat_Mode)                   {channel="knx:device:bridge:GiraTSplus1_1_140:opMode"}
       Number          TS2plusWozi_OpMode      "Betriebsart ist"        (GHeat_Mode)                   {channel="knx:device:bridge:GiraTSplus1_1_113:opMode"}
      //
        //RTR Betriebsart soll
       Number          TS2plusBadEG_OpSet      "Betriebsart soll"       (GHeat_Set)                    {channel="knx:device:bridge:GiraTSplus1_1_120:opSet"}
       Number          TS2plusBadOG_OpSet      "Betriebsart soll"       (GHeat_Set)                    {channel="knx:device:bridge:GiraTSplus1_1_220:opSet"}
       Number          TS2plusEltern_OpSet     "Betriebsart soll"       (GHeat_Set)                    {channel="knx:device:bridge:GiraTSplus1_1_210:opSet"}
       Number          TS2plusFlur_OpSet       "Betriebsart soll"       (GHeat_Set)                    {channel="knx:device:bridge:GiraTSplus1_1_100:opSet"}
       Number          TS2plusKueche_OpSet     "Betriebsart soll"       (GHeat_Set)                    {channel="knx:device:bridge:GiraTSplus1_1_130:opSet"}
       Number          TS2plusLaura_OpSet      "Betriebsart soll"       (GHeat_Set)                    {channel="knx:device:bridge:GiraTSplus1_1_240:opSet"}
       Number          TS2plusMatty_OpSet      "Betriebsart soll"       (GHeat_Set)                    {channel="knx:device:bridge:GiraTSplus1_1_230:opSet"}
       Number          TS2plusTechnik_OpSet    "Betriebsart soll"       (GHeat_Set)                    {channel="knx:device:bridge:GiraTSplus1_1_140:opSet"}
       Number          TS2plusWozi_OpSet       "Betriebsart soll"       (GHeat_Set)                    {channel="knx:device:bridge:GiraTSplus1_1_113:opSet"}
      //
    rule:
    Code:
    rule "Betriebsart RTR"
    when
        Member of GHeat_Mode changed
    then
        var Integer newMode
        val mode = (triggeringItem.state as DecimalType).toBigDecimal.toBigInteger     // nur für BigInteger steht testBit() zur Verfügung
        val iName = triggeringItem.name.split("_").get(0).toString                     // erster Teil des Namens des Item, welches die Rule getriggert hat
            logDebug("rtr","Name is: {}, Mode is: {}",iName,mode)
        switch (mode) {
            case mode.testBit(0) :newMode = 1                                          // Bit 0 -> 1
            case mode.testBit(2) :newMode = 3                                          // Bit 2 -> 4
            case mode.testBit(3) :newMode = 4                                          // Bit 3 -> 8
            default              :newMode = 2                                          // falls nichts anders zutrifft
        }
        var myItem = GHeat_Set.members.filter[ f | f.name.startsWith(iName) ].head     // passendes Item aus der 2. Gruppe heraussuchen
        var Integer oldMode = 0
        if(myItem.state instanceof Number) oldMode = (myItem.state as Number).intValue // alten Modus bestimmen
        if(oldMode != newMode) {                                                       // falls abweichend von neuem Modus
            logDebug("rtr","Name is: {}, oldMode is: {}, newMode is: {}",myItem.name,oldMode,newMode)
            myItem.postUpdate(newMode)                                                 // neuen Modus setzen
        }
    end
    Zuletzt geändert von udo1toni; 20.12.2019, 20:46.

    Kommentar


      #17
      Vielen Dank udo1toni,

      was ist bei Dir Betriebsart Ist und Soll, Object 28 und 32? Kannst Du vielleicht noch Deinen ts2plus Setup mitliefern, wäre echt hilfreich?

      Wie machst Du das mit den Temperaturen Basis Sollwert, Soll-Temperatur, ich habe es bis heute nicht hinbekommen das das sauber funktioniert, wenn ich in der Nachtabsenkung bin und die Solltemperatur verstelle kriege ich laufend Sprünge rein und die Temperatur ändert sich um mehrere Grad, auch wenn ich eine Skalierung von 0,1°C eingestellt habe? Im Komfort Betrieb scheint es zu funktionieren, hast Du dafür auch eine Lösung?

      Du hattest geschrieben, das Du den Basis Sollwert nicht in in der ts2plus speicherst, d.h. Du liest die Werte am Anfang aus dem ts2plus in openHAB ein und benutzt Du dann setpoint auf die Basis Temperatur und liest den Soll Temperatur Wert zurück ? Wie sieht das bei Dir aus?




      Zuletzt geändert von clown; 21.12.2019, 00:22.

      Kommentar


        #18
        Ich arbeite über die Absolutwerte, Sollwertverschiebung ist mir nicht geheuer
        Ich dachte eigentlich, die Bezeichnung der beiden Items ist eindeutig genug, also: die Items, welche mit OpSet enden, dienen dazu, die Betriebsart zu setzen, die Items, welche mit OpMode enden, zeigen den Ist-Zustand.
        Die Rule passt das Setz-Item an den Ist-Zustand an, wenn eine Änderung über den Bus empfangen wird. Der neue Zustand wird dabei nicht gesendet, sondern nur per postUpdate auf das Item geschrieben.

        Kommentar


          #19

          Das mit dem Betriebsmode habe ich verstanden.

          Kannst du mir mal deine items und sitemap für die Temperaturen, sowie dein Setup des ts2plus schicken, würde mich echt interessieren wie du das aufgesetzt hast, kriege es einfach nicht sauber hin?



          Danke,
          clown

          Kommentar


            #20
            Klar. Das Thing:
            Code:
                 Thing device GiraTSplus1_1_113 "TS2plus Wozi" @ "KNX" [
                      address="1.1.113",
                      fetch=false,
                      pingInterval=600,
                      readInterval=0
                   ] {
                      Type number         : tempIs "Temperatur ist"   [ ga="<3/7/23" ]
                      Type number         : tempSet "Temperatur soll" [ ga="9.001:3/7/26+<3/7/50" ]
                      Type number         : opMode "Betriebsart ist"  [ ga="5.005:<3/7/36" ]
                      Type number         : opSet "Betriebsart soll"  [ ga="5.005:3/7/28" ]
                      Type switch-control : heat "Heizen"             [ ga="3/7/37" ]
                  }
            Die Items:
            Code:
            Number TS2plusWozi_TempIs  "Wohnzimmer ist"   (GHeat_Is,GTempEG) {channel="knx:device:bridge:GiraTSplus1_1_113:tempIs"}
            Number TS2plusWozi_TempSet "Wohnzimmer soll"  (GHeat_Soll)       {channel="knx:device:bridge:GiraTSplus1_1_113:tempSet"}
            Number TS2plusWozi_OpMode  "Betriebsart ist"  (GHeat_Mode)       {channel="knx:device:bridge:GiraTSplus1_1_113:opMode"}
            Number TS2plusWozi_OpSet   "Betriebsart soll" (GHeat_Set)        {channel="knx:device:bridge:GiraTSplus1_1_113:opSet"}
            Switch TS2plusWozi_Heat    "Heizen"           (HeatingNow)       {channel="knx:device:bridge:GiraTSplus1_1_113:heat"}
            Unbenannt.png

            Die Einstellungen im Gira-Tool sind alle default (KO36 muss halt auf Byte konfiguriert sein, da bin ich mir unsicher, ob es default ist)
            Wie Du sehen kannst, habe ich die GA nach den KO gewählt. Die erste Gruppe bezieht sich auf den Raum (3 = Wohnzimmer), die zweite Gruppe bezieht sich auf die Funktion (7=Heizung) KO26 Basis Sollwert ist die GA zum Setzen der Solltemperatur, KO50 Soll-Temperatur ist die gemeldete Soll-Temperatur. Funktionert bei mir tadellos, ich kann die Solltemperatur in jeder Betriebsart in 1/10°C Schritten verstellen. (die Sitemap enthält einfach ein Setpoint Widget auf TS2plusWozi_TempSet)

            Kommentar


              #21
              Hallo udo1toni,

              ich kriegs einfach nicht hin, meine Solltemperatur macht große Sprünge sobald ich einen anderen Modus einstelle, auf Komfort und Frostschutz funktioniert alles prima, im Nachtmodus spielt es dann verrückt. Zur Info, habe deine Rule noch nicht eingebaut, stelle den Modus noch per ETS um, sollte aber ja nix ändern?!?

              Was hast Du im ETS bei den Sollwerten sitzen? Würde dir auch gerne meinen Setup posten, aber ich habe noch nie Scrrenshots ins Forum geladen.

              Welche openHAB Version hast Du?



              Update:
              Ich glaube ich habe da eine Idee, bei Frostschutz wird eine Temperatur als Basis gesetzt, wie beim Komfort, aber bei Standby und Nacht sind es Sollwertverschiebung, der Setpoint bekommt immer die abgesenkte Temperatur geschickt, und zieht die immer wieder neu ab, deshalb die Sprünge? Welche Moden hast Du in Betrieb, ich nehme an Frostschutz und Komfort?
              Zuletzt geändert von clown; 30.12.2019, 18:02.

              Kommentar


                #22
                Bei mir ist nirendwo eine Sollwertverschiebung aktiv, stattdessen werden bei Modusänderung die Sollwerte geschrieben. Ich ging immer davon aus, dass man das so macht weil es bei mir auch ohne Probleme funktioniert. Sollwertverschiebung ist eigentlich nur dann interessant, wenn man über eine "externe" Schaltwippe per Impuls die Solltemperatur ändern will.

                Kommentar


                  #23
                  Hallo udo1toni,

                  sprechen wir von gleichen GIRA TS2plus? Bei meinem ts2plus kann ich eine Temperatur für den Basis-, den Soll-, den Frostschutzwert im ts2plus-setup eintragen, der Nacht- und Standbywert wird über einen Absenkwert eingetragen z.B. 1,5°C Nachtabsenkung. Diese verschiedenen Werte werden über den Betriebsmodus ausgewählt.

                  D.h. wenn ich 1.5°C Nachtabsenkung eintrage, dann zieht er immer 1,5°C vom Sollwert ab, wenn ich jetzt den Sollwert verändere zieht er jedes mal wieder die 1,5°C ab.
                  Bei der Frost-, Soll- und Basiswert wählt man ja direkt die Temperatur aus, und da funktioniert der Setpoint auch super wie er soll ...

                  Ist das bei Dir nicht so?


                  Ein gutes neues Jahr

                  Kommentar


                    #24
                    So, hab das gerade noch mal bei mir getestet und muss Dir leider Recht geben. Nachtabsenkung und Standby ziehen jeweils zusätzlich 2 Grad ab (die sind im TS2plus hinterlegt) Lustig, offensichtlich habe ich noch nie im Absenkmodus die Temperatur eingestellt, immer nur im Komfort- oder Frostschutzmodus.

                    Dabei hätte ich schwören können... so kann man sich irren.

                    Egal, Frohes neues Jahr!

                    Kommentar


                      #25
                      Zitat von Intenos Beitrag anzeigen
                      Hallo maxheartrate,

                      hast du es mittlerweile hinbekommen? Ansonsten schau ich mal nach und versuche die Umsetzung zu beschreiben. Ich stelle per openHAB sowohl den Betriebsmodus um als auch den Sollwert und lese die resultierenden Einstellungen sowie den Stellwert der Ventile zurück.
                      Das würde mich interessieren! Vor allem das Umschalten des Betriebsmodus. Auslesen klappt. Nur das Schalte nicht.

                      Kommentar


                        #26
                        Hallo Nerz,

                        also hier ist ein Beispielcode einer Rule mit der ich alle Aktoren die im Komfort-Modus sind automatisch auf Nachtbetrieb umgeschalten habe.(Mittlerweile mache ich das nicht mehr).

                        Code:
                        rule "Heizungsumschaltung Tag->Nacht" 
                            when 
                                Time cron "0 0 20 * * ?" 
                            then
                                gHeizung_Modus?.members.forEach[Number| 
                                    if(Number.state==1.0) {                 // 1.0 = Komfort
                                        sendCommand(Number, 3.0)            // 3.0 = Nacht
                                    }
                                ]
                        end
                        Und wenn du einzelne gezielt umschalten möchtest, einfach so:
                        Code:
                        DeinAktor.sendCommand(1.0)
                        Wichtig ist immer das ".0" neben der Zahl zu ergänzen.

                        Falls es dann noch immer nicht geht, würde ich empfehlen nochmal das Thing bzw. die verknüpften Gruppenadressen zu überprüfen. Bei mir schaut das beispielhaft so aus:

                        Code:
                        Type number        : E1_H1_Modus   "EG Flur"                     [ ga="5.010:3/2/100+<3/3/100" ]

                        Kommentar

                        Lädt...
                        X