Homematic eTRV-B oder eTRV2 in fhem, FTUI und Alexa einbinden

Begonnen von siggel, 19 November 2020, 20:01:58

Vorheriges Thema - Nächstes Thema

siggel

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?

RPi4B, ConBee II, OSRAM/Ledvance Plugs/Switch, Aqara Sensors, IKEA Tradfri Dimmers, Gosund Plugs (Tasmota), Shelly Relays/Plugs/Sensors/Buttons, D1minis (Tasmota/WLED), Bosch Indego, Amazon Echo Dots/Fire Tablets (FTUI), HmIP CCU3/Thermostats/Sensors, OctoPi3B+, SMA HM2.0/STP10.0-3SE-40, BYD HVS 7.7

siggel

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     :
RPi4B, ConBee II, OSRAM/Ledvance Plugs/Switch, Aqara Sensors, IKEA Tradfri Dimmers, Gosund Plugs (Tasmota), Shelly Relays/Plugs/Sensors/Buttons, D1minis (Tasmota/WLED), Bosch Indego, Amazon Echo Dots/Fire Tablets (FTUI), HmIP CCU3/Thermostats/Sensors, OctoPi3B+, SMA HM2.0/STP10.0-3SE-40, BYD HVS 7.7