Ich kämpfe gerade die Betriebsart des Merten RTR über eine Selection zu steuern. Aufgrund zahlreicher Hinweise und Erklärungen im Forum habe ich das auch funktionell hinbekommen, es gibt aber noch einen kleinen Schönheitsfehler den ich einfach nicht wegbekomme.
Zunächst ist wohl das Problem das der Merten RTR nur die ersten 4 Bit interessant sind, und die zweiten 4 Bit für andere Funktionen verwendet werden:
Bit
0 Komfort
1 Standby
2 Nacht
3 Frostschutz
4 Taupunkt Alarm
5 Heizen/Kühlen
6 Regler inaktiv
7 Frostalarm
Nach vielen Hinweisen, vor allem zum auslesen einzelner Bits habe ich es wie folgt implementiert:
Channels:
Items:
Selection:
Rule:
Das funktioniert so weit das er durch die Auswahl im Selection Feld den Betriebsmodus korrekt setzt (auch die neue zum Betriebsmodus gehöhrende SOLL-Temperatur wird korrekt gesetzt), nur ist das SElection Feld nach der Auswahl wieder leer. Wähle ich dann den gleichen Betriebsmodus ein zweites mal, bleibt die Auswahl stehen.
Ändere ich den Betriebsmodus direkt am RTR, wird der Wert nicht im Selection angezeigt...
Zunächst ist wohl das Problem das der Merten RTR nur die ersten 4 Bit interessant sind, und die zweiten 4 Bit für andere Funktionen verwendet werden:
Bit
0 Komfort
1 Standby
2 Nacht
3 Frostschutz
4 Taupunkt Alarm
5 Heizen/Kühlen
6 Regler inaktiv
7 Frostalarm
Nach vielen Hinweisen, vor allem zum auslesen einzelner Bits habe ich es wie folgt implementiert:
Channels:
Code:
Type number : ch313 [ ga="5.010:<3/1/3+<3/1/4" ]
Code:
[COLOR=#000000]Number EG_Bad_RTR "Betriebsart RTR" <heating> (EG_Bad) { channel="knx:device:bridge:t1_1_14:ch313" }[/COLOR] [COLOR=#000000]Switch EG_Bad_RTR_Standby "Betriebsart Standby RTR" <heating> (EG_Bad)[/COLOR] [COLOR=#000000]Switch EG_Bad_RTR_Nacht "Betriebsart Nacht RTR" <heating> (EG_Bad)[/COLOR] [COLOR=#000000]Switch EG_Bad_RTR_Komfort "Betriebsart Komfort RTR" <heating> (EG_Bad)[/COLOR] [COLOR=#000000]Switch EG_Bad_RTR_Frostschutz "Betriebsart Frostschutz RTR" <heating> (EG_Bad)[/COLOR]
Code:
Selection item=EG_Bad_RTR mappings=[4=Frostschutz, 3=Nacht, 2=Standby, 1=Komfort]
Code:
import org.openhab.core.library.types.* import java.lang.Math rule "Betriebsart RTR EG Bad umschalten - von Selection nach 1Bit" when Item EG_Bad_RTR received update then var tmp = EG_Bad_RTR.state as DecimalType var state = tmp.toBigDecimal.toBigInteger if (state.testBit(0)) { if (EG_Bad_RTR.state!=1) EG_Bad_RTR_Standby.postUpdate(OFF) EG_Bad_RTR_Nacht.postUpdate(OFF) EG_Bad_RTR_Komfort.postUpdate(ON) EG_Bad_RTR_Frostschutz.postUpdate(OFF) } else if (state.testBit(1)) { if (EG_Bad_RTR.state!=2) EG_Bad_RTR_Standby.postUpdate(ON) EG_Bad_RTR_Nacht.postUpdate(OFF) EG_Bad_RTR_Komfort.postUpdate(OFF) EG_Bad_RTR_Frostschutz.postUpdate(OFF) } else if (state.testBit(2)) { if (EG_Bad_RTR.state!=3) EG_Bad_RTR_Standby.postUpdate(OFF) EG_Bad_RTR_Nacht.postUpdate(ON) EG_Bad_RTR_Komfort.postUpdate(OFF) EG_Bad_RTR_Frostschutz.postUpdate(OFF) } else if (state.testBit(3)) { if (EG_Bad_RTR.state!=4) EG_Bad_RTR_Standby.postUpdate(OFF) EG_Bad_RTR_Nacht.postUpdate(OFF) EG_Bad_RTR_Komfort.postUpdate(OFF) EG_Bad_RTR_Frostschutz.postUpdate(ON) } end rule "Betriebsart RTR EG Bad umschalten - von 1Bit nach Selection" when Item EG_Bad_RTR_Standby received command or Item EG_Bad_RTR_Nacht received command or Item EG_Bad_RTR_Komfort received command or Item EG_Bad_RTR_Frostschutz received command then if (EG_Bad_RTR_Standby.state == ON) { EG_Bad_RTR.postUpdate(2) } else if (EG_Bad_RTR_Nacht.state == ON) { EG_Bad_RTR.postUpdate(3) } else if (EG_Bad_RTR_Komfort.state == ON) { EG_Bad_RTR.postUpdate(1) } else if (EG_Bad_RTR_Frostschutz.state == ON) { EG_Bad_RTR.postUpdate(4) } //else { //EG_Bad_RTR.postUpdate(0) //} end
Ändere ich den Betriebsmodus direkt am RTR, wird der Wert nicht im Selection angezeigt...
Kommentar