Hallo zusammen,
ich möchte möglichst viele Funktionalitäten der Homematic Thermostate eTRV-B oder eTRV2 aus fhem/FTUI nutzen können. Folgendes habe ich mir schon anhand früherer Posts zusammengesucht und selbst ergänzt (ginge sicher auch eingekürzt für meine Frage, aber vielleicht kann der eine oder andere Suchende davon profitieren wie ich von ähnlichen Posts:
Internals:
DEF 00201A49123456
FUUID ...
IODev CCU3
NAME HmIP_eTRV_B_123456
NR 171
STATE 19.6 auto1
TYPE HMCCUDEV
ccuaddr 00201A49123456
ccudevstate active
ccuif HmIP-RF
ccuname HmIP-eTRV-B-123456
ccutype HmIP-eTRV-B
channels 8
firmware 1.0.20
statevals devstate
OLDREADINGS:
READINGS:
2020-11-19 18:58:35 battery_low 0
2020-11-19 18:58:35 battery_percent 90
2020-11-19 18:58:35 battery_voltage 2.9
2020-11-19 18:58:35 boost_mode 0
2020-11-19 18:58:35 control 11.0
2020-11-19 18:58:35 hmstate 19.6
2020-11-19 18:58:35 mode 0
2020-11-19 18:58:35 overall_mode auto1
2020-11-19 18:58:35 profile 1
2020-11-19 18:58:35 state 19.6
2020-11-19 18:58:35 target_temperature 11.0
2020-11-19 18:58:35 temperature 19.6
2020-11-19 18:58:35 valve_open_percent 0
2020-11-19 18:58:35 window_state closed
hmccu:
devspec 00201A49123456
dp:
0.CONFIG_PENDING:
OVAL 0
VAL 0
0.DUTY_CYCLE:
OVAL 0
VAL 0
0.INSTALL_TEST:
OVAL true
VAL true
0.LOW_BAT:
OSVAL 0
OVAL 0
SVAL 0
VAL 0
0.OPERATING_VOLTAGE:
OSVAL 2.9
OVAL 2.9
SVAL 2.9
VAL 2.9
0.OPERATING_VOLTAGE_STATUS:
OVAL 0
VAL 0
0.RSSI_DEVICE:
OVAL -79
VAL -80
0.RSSI_PEER:
OVAL 182
VAL 182
0.UNREACH:
OVAL 0
VAL 0
1.ACTIVE_PROFILE:
OSVAL 1
OVAL 1
SVAL 1
VAL 1
1.ACTUAL_TEMPERATURE:
OSVAL 19.3
OVAL 19.3
SVAL 19.6
VAL 19.6
1.ACTUAL_TEMPERATURE_STATUS:
OVAL 0
VAL 0
1.BOOST_MODE:
OSVAL 0
OVAL 0
SVAL 0
VAL 0
1.BOOST_TIME:
OVAL 0
VAL 0
1.FROST_PROTECTION:
OVAL 0
VAL 0
1.LEVEL:
OSVAL 0
OVAL 0.0
SVAL 0
VAL 0.0
1.LEVEL_STATUS:
OVAL 0
VAL 0
1.PARTY_MODE:
OVAL 0
VAL 0
1.PARTY_SET_POINT_TEMPERATURE:
OVAL 0.000000
VAL 0.000000
1.PARTY_TIME_END:
OVAL
VAL
1.PARTY_TIME_START:
OVAL
VAL
1.QUICK_VETO_TIME:
OVAL 0
VAL 0
1.SET_POINT_MODE:
OSVAL 0
OVAL 0
SVAL 0
VAL 0
1.SET_POINT_TEMPERATURE:
OSVAL 11.0
OVAL 11.0
SVAL 11.0
VAL 11.0
1.SWITCH_POINT_OCCURED:
OVAL 0
VAL 0
1.VALVE_ADAPTION:
OVAL false
VAL false
1.VALVE_STATE:
OVAL 4
VAL 4
1.WINDOW_STATE:
OSVAL closed
OVAL 0
SVAL closed
VAL 0
Attributes:
IODev CCU3
alexaName Heizung Küche
alias Heizung Küche
ccureadingfilter ^ACTUAL_TEMPERATURE$|^SET_POINT_MODE$|^SET_POINT_TEMPERATURE$|^LEVEL$|^OPERATING_VOLTAGE$|^LOW_BAT|^ACTIVE_PROFILE|^WINDOW_STATE|^BOOST_MODE
ccureadingname 1.ACTUAL_TEMPERATURE$:temperature;1.SET_POINT_TEMPERATURE$:target_temperature;1.LEVEL$:valve_open_percent;1.SET_POINT_MODE$:mode;0.LOW_BAT$:battery_low;0.OPERATING_VOLTAGE$:battery_voltage;1.ACTIVE_PROFILE$:profile;1.WINDOW_STATE$:window_state;1.BOOST_MODE$:boost_mode
ccuscaleval LEVEL:0:1:0:100
controldatapoint 1.SET_POINT_TEMPERATURE
eventMap /datapoint 1.BOOST_MODE true:boost/datapoint 1.CONTROL_MODE 0 1.ACTIVE_PROFILE 1:auto/datapoint 1.CONTROL_MODE 0 1.ACTIVE_PROFILE 2:absent/datapoint 1.CONTROL_MODE 1:manual/datapoint 1.CONTROL_MODE 1 1.SET_POINT_TEMPERATURE 4.5:off/datapoint 1.CONTROL_MODE 1 1.SET_POINT_TEMPERATURE 30.5:on/datapoint 1.WINDOW_STATE 1:open/datapoint 1.WINDOW_STATE 0:close
genericDeviceType thermostat
group Heizung
homebridgeMapping TargetTemperature=target_temperature::target_temperature,,minValue=5,maxValue=30,minStep=0.5,cmd=control,nocache=true CurrentTemperature=temperature
readingsWatcher 87000,-1,battery_percent
room EG Küche,Geräteinfos
sortby 1(EG)-2(Küche)-3(Heizung)-1(Nummer)
stateFormat temperature overall_mode
statedatapoint 1.ACTUAL_TEMPERATURE
stripnumber 1
substexcl control
substitute SET_POINT_TEMPERATURE!#0-4.5:off,#30.5-40:on;WINDOW_STATE!(0|false):closed,(1|true):open
userReadings battery_percent {max(0,100*(ReadingsNum($NAME,"battery_voltage",0)-2.0))},
overall_mode { if (ReadingsVal($NAME,"window_state","closed") eq "open") {"window open"}
elsif (ReadingsVal($NAME,"boost_mode","0") eq "1") {"boost"}
else {
if (ReadingsVal($NAME,"mode","0") eq "1") {
if (ReadingsVal($NAME,"target_temperature","0") eq "off") {"off"}
elsif (ReadingsVal($NAME,"target_temperature","0") eq "on") {"on"}
else {"manual"}
}
elsif (ReadingsVal($NAME,"mode","0") eq "0") {
if (ReadingsVal($NAME,"profile","1") eq "1") {"auto1"}
elsif (ReadingsVal($NAME,"profile","1") eq "2") {"auto2"}
elsif (ReadingsVal($NAME,"profile","1") eq "3") {"auto3"}
else {"unknown"}
}
elsif (ReadingsVal($NAME,"mode","0") eq "2") {"holiday"}
else {"unknown"}
}
}
webCmd control:boost:auto:absent:manual:on:off:open:close
widgetOverride control:slider,4.5,0.5,30.5,1
Das habe ich damit schon erreicht:
- die Temperatur regeln,
- unterschiedliche Modi einstellen (Auto=Auto-Profil1, Abwesend=Auto-Profil2,Manuell,Boost,Fenster auf/zu; on/off/auto3/holiday nur der Vollständigkeit halber, die will ich nicht aktiv nutzen)
- das ganze über Alexa regeln ("stell Heizung Küche auf 20 Grad")
- den Batteriestatus in meiner Batteriegeräteübersicht und einem readingsWatcher überwachen
- das Fenster virtuell öffnen/schließen, damit der Thermostat so lange runterregelt, wobei er dann praktischerweise beim Schließen wieder in die vorherige Einstellung zurückspringt, so dass ich mir nichts programmatisch merken muss. Virtuell, weil ich mir nicht damit anfreunden kann, Plastik-Kontaktsensoren aufs Holzfenster zu kleben, da bin ich eigen :-\
Der angehängte FTUI-Screenshot zeigt recht anschaulich, wie das aktuell bedient werden kann.
Was ich gerne noch hätte, aber entweder syntaktisch nicht verstanden habe, oder mir nicht sicher bin, ob ich zu kompliziert denke:
- Alexa auch den Modus mitzuteilen, ist mir via homebridgeMapping noch nicht gelungen. Ich habe auch schon so mit der vorhandenen (kopierten) Einstellung meine Verständnisprobleme, z.B. warum da ein doppeltes Komma vorkommt... Oder legt man dafür besser ein weiteres Device (readingsProxy?) an, das dann "Heizungsmodus Küche" angesprochen wird und sich nur um den Modus kümmert?
- Ich hätte für das Lüften gerne eine Art on-for-timer, also statt auf/zu lieber "5min auf"/"15min auf"/"zu". Spontan käme mir ein Dummy-Switch in den Sinn, der ein DOIF/notify auslöst, um das "on"/"off" in das nötige "set open" "set close" zu übersetzen. Oder ginge sowas auch einfacher ohne 2 zusätzliche Devices je Thermostat anlegen zu müssen?
Das Lüften habe ich jetzt mittels readingsProxy gelöst, da habe ich dann auch ein on-for-timer und kann z.B. 5 min lüften. Wen es interessiert (passend zum Thermostat-Listing meines Eingangs-Posts):
Internals:
CFGFN
DEF HmIP_eTRV_B_123456:window_state
DEVICE HmIP_eTRV_B_123456
FUUID
NAME Lueften_123456
NOTIFYDEV global,HmIP_eTRV_B_123456
NR 17567
NTFY_ORDER 50-Lueften_123456
READING window_state
STATE off
TYPE readingsProxy
CONTENT:
HmIP_eTRV_B_123456 1
READINGS:
2020-11-21 18:51:56 lastCmd off
2020-11-21 18:51:57 state off
Attributes:
alias Lüften Küche
devStateIcon on.*:fts_window_1w_open@orange .*:fts_window_1w
group Heizung
room EG Küche
setFn {($CMD eq "on")?"open":"close"}
setList on off
valueFn {($VALUE eq "open")?"on":"off"}
webCmd :