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,
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)
Items:
rule:
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 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" ] }
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"} //
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
Kommentar