Homebridge User Configs: Unterschied zwischen den Versionen

Aus FHEMWiki
K (Secu-Signal Fentergriff hinzugefügt)
 
(50 dazwischenliegende Versionen von 16 Benutzern werden nicht angezeigt)
Zeile 4: Zeile 4:


Sehr gute Hinweise gibt es hier: http://www.meintechblog.de/2015/10/mit-siri-und-fhem-das-gesamte-smart-home-per-stimme-steuern/
Sehr gute Hinweise gibt es hier: http://www.meintechblog.de/2015/10/mit-siri-und-fhem-das-gesamte-smart-home-per-stimme-steuern/
== Mögliche Mappings ==
Die Möglichen Mappings können hier nachgelesen werden https://github.com/KhaosT/HAP-NodeJS/tree/master/src/lib/gen  insbesondere in HomeKit.ts.


Hier ein Beispiel:
Characteristic.Brightness = function() {
  Characteristic.call(this, 'Brightness', '00000008-0000-1000-8000-0026BB765291');
  this.setProps({
    format: Characteristic.Formats.INT,
    unit: Characteristic.Units.PERCENTAGE,
    maxValue: 100,
    minValue: 0,
    minStep: 1,
    perms: [Characteristic.Perms.READ, Characteristic.Perms.WRITE, Characteristic.Perms.NOTIFY]
  });
  this.value = this.getDefaultValue();
};
Das Mapping in diesem Fall, hat den Titel Brightness.
Die Werte können in 1er Schritten zwischen 0 und 100 liegen (max und min Value)
== Erstellung eines HomebridgeMappings am Beispiel "Feuchtesensor" ==
Zum Einstieg etwas leicht nachvollziehbares.
Feuchtesensoren haben in der Regel ein "humidity" Reading, im Falle des Opus XT300 Bodenfeuchtesensors auch Temperatur und Batterie Level. Homekit unterstützt einen "HumiditySensor" Service. Dieser ist in homebridge-fhem nicht standardmäßig vorhanden (kann also nicht aus dem dropdown ausgewählt werden, sondern muss über das Befehlsfeld zugewiesen werden):
<code>attr meinSensor genericDeviceType HumiditySensor</code>
Im nächsten Schritt werden die Readings gemappt:
<code>attr meinSensor homebridgeMapping clear CurrentRelativeHumidity=humidity StatusLowBattery=battery,values=ok:BATTERY_LEVEL_NORMAL;;/^.*/:BATTERY_LEVEL_LOW CurrentTemperature=temperature</code>
<code>clear</code>löscht default mappings - das wird in der Regel nicht notwendig sein, schadet aber nicht
<code>CurrentRelativeHumidity</code> ist die relevante Homekit Characteristic - wird mit dem entsprechenden Reading des Sensors gemappt.
<code>StatusLowBattery</code> erwartet entweder BATTERY_LEVEL_NORMAL oder _LOW. Mein Sensor liefert ok zurück, wenn alles gut ist, also wird "ok" auf _NORMAL gemappt, alles andere auf _LOW.
Der Opus XT300 Bodenfeuchtesensors liefert auch noch die Temperatur - der HumiditySensor Service sieht das eigentlich nicht vor, daher wird die Temperatur auch nicht in der Apple "Home" App angezeigt. Bei Eve wird die Temperatur hingegen berücksichtigt.
== BRAVIA Fernseher ==
Ein Beispiel homebridgeMapping für Sony Bravia Fernseher (iOS 12.2 beta!) und genericDeviceType Television:
<pre>
clear
ConfiguredName:model
Active:state,values=off:INACTIVE;on:ACTIVE,cmds=ACTIVE:on;INACTIVE:off
RemoteKey:key,cmds=REWIND:remoteControl+Rewind;FAST_FORWARD:remoteControl+FastForward;NEXT_TRACK:remoteControl+NEXT_TRACK;PREVIOUS_TRACK:remoteControl+PREVIOUS_TRACK;ARROW_UP:remoteControl+Up;ARROW_DOWN:remoteControl+Down;ARROW_LEFT:remoteControl+Left;ARROW_RIGHT:remoteControl+Right;SELECT:remoteControl+Ok;BACK:remoteControl+RETURN;EXIT:remoteControl+Exit;PLAY_PAUSE:remoteControl+Play;INFORMATION:remoteControl+Info
SleepDiscoveryMode:default=ALWAYS_DISCOVERABLE
ClosedCaptions:default=0
DisplayOrder:default=Test1
CurrentMediaState:default=0:currentTitle
TargetMediaState:default=0,cmds=PLAY:remoteControl+play;PAUSE:remoteControl+pause;STOP:remoteControl+stop;
PictureMode:default=1
PowerModeSelection:default=1,cmds=0:remoteControl+options
ActiveIdentifier:input,default=0,values=/tv.dvbt|TV...DVB-T/:1;/HDMI.3/:2,cmds=1:input+TV+/+DVB-T;2:input+HDMI+3/ARC;3:application+Plex
TelevisionSpeaker#Mute=mute
Active:default=ACTIVE
VolumeSelector:volume,cmds=INCREMENT:VolumeUp;DECREMENT:VolumeDown
VolumeControlType:default=RELATIVE_WITH_CURRENT
linkedTo=Television
InputSource(1)#Identifier:default=1
ConfiguredName:default=TV
IsConfigured:default=CONFIGURED
InputSourceType:default=TUNER
CurrentVisibilityState:default=SHOWN
linkedTo=Television
InputSource(2)#Identifier:default=2
ConfiguredName:default=APPLE+TV
IsConfigured:default=CONFIGURED
InputSourceType:default=HDMI
CurrentVisibilityState:default=SHOWN
linkedTo=Television
InputSource(3)#Identifier:default=3
ConfiguredName:default=PLEX
IsConfigured:default=CONFIGURED
InputSourceType:default=APPLICATION
CurrentVisibilityState:default=SHOWN
linkedTo=Television
</pre>
damit lässt sich der Fernseher über Siri/Homekit ein- und ausschalten sowie über das appleTV Control-Center Widget steuern.


== EnOcean STM 250 Tür-/Fensterkontakt ==
== EnOcean STM 250 Tür-/Fensterkontakt ==
Zeile 16: Zeile 95:
  attr STM250 genericDeviceType ContactSensor
  attr STM250 genericDeviceType ContactSensor
  attr STM250 homebridgeMapping ContactSensorState=state,values=closed:CONTACT_DETECTED;open:CONTACT_NOT_DETECTED
  attr STM250 homebridgeMapping ContactSensorState=state,values=closed:CONTACT_DETECTED;open:CONTACT_NOT_DETECTED
Getestet mit
FHEM 5.7 Rev. 9893
Homebridge 0.2.16
homebridge-fhem Vorschauversion aus {{Link2Forum|Topic=48558|Message=402024|LinkText=homebridge/homekit}}
== EnOcean Secu-Signal Fenstergriff ==
Der [[EnOcean-SecuSignal-Fenstergriff|Secu-Signal Fenstergriff]] liefert als Status in FHEM <code>open</code> beziehungsweise <code>open_from_tilted</code>, wenn das Fenster offen ist. Analog liefert er <code>closed</code> wenn das Fenster geschlossen ist. Ist das Fenster gekippt, wird der Status <code>tilted</code> gesetzt. Diese Statusangaben sind sehr intuitiv zu verstehen und zu interpretieren.
Die Integration in HomeKit via HomeBridge erfordert zwei weitere Attribute:
<pre>
attr SecuSignal genericDeviceType window
attr SecuSignal homebridgeMapping CurrentPosition=state,values=closed:0;open:100;tilted:75;open_from_tilted:100; TargetPosition=state,values=open:100;closed:0;tilted:75;open_from_tilted:100;
</pre>
Getestet mit
FHEM 6.2
Homebridge 1.6.1
homebridge-fhem v0.5.38
== Modul RESIDENTS für Anwesenheitserkennung und Steuerung der Anwesenheit benutzen ==
[[Datei:Homebridge_bewohner_zu_szene.jpeg|mini|Schaltzustand eines Bewohners zu einer Szene hinzufügen]]
Aus den einzelnen Komponenten des Moduls RESIDENTS, homebridge sowie der characteristic <code>On</code> und der Szenensteuerung lässt sich eine gleichzeitige Steuerung der Anwesenheit und Anwesenheitserkennung basteln.
Dazu müssen folgende Schritte unternommen werden:
* einem Bewohner aus dem Modul ROOMMATE die Steuerung über homebridgeMapping hinzufügen
* Szene für "Ich bin zu Hause" und "Ich gehe jetzt" in einer HomeKit-fähigen App wie z.B. Eve einrichten
Man kann einen beliebigen Bewohner aus dem Modul ROOMMATE nehmen und ihn über die characteristic <code>On</code> in Form eines Schalters sozusagen schaltbar machen. Nur wird das Ein- und Ausschalten des Bewohners über HomeKit in FHEM auf den Status home bzw. absent gemappt. Seit dem 06.02.2016 werden RESIDENTS automatisch als Occupancy Sensor für HomeKit annonciert. Nun noch die Attribute des ROOMMATE wie folgt setzen:
attr <ROOMMATE> genericDeviceType switch
attr <ROOMMATE> homebridgeMapping On=state,valueOn=/home|awoken|asleep|gotosleep/,valueOff=/gone|absent/,cmdOn=home,cmdOff=absent
Natürlich muss der Bewohner noch dem Filter von homebridge hinzugefügt und homebridge neu gestartet werden.
Anschließend geht es in der HomeKit-fähigen App Deiner Wahl weiter. In Eve von Elgato ist von vornherein zum Beispiel vorgesehen, dass man zwei Szenen "Ich bin zuhause" und "Ich verlasse das Haus" hat. Zu diesen Szenen wird eine Aktion hinzugefügt indem der Bewohner, den das ROOMMATE-Modul meldet zur Szene hinzugefügt wird und beim Nachhausekommen "eingeschaltet" wird. Genauso wird mit der Szene "Ich verlasse das Haus" verfahren: Bewohner zur Szene hinzufügen und den Schaltvorgang auf "ausschalten" setzen.
Mit den Sprachbefehlen "Ich bin zuhause" oder "Ich verlasse das Haus" wird die entsprechende Szene eingeschaltet, homebridge schaltet über das <code>homebridgeMapping</code> Attribut dann den Bewohner auf "home" oder "absent".
Getestet mit
FHEM 5.7 Rev. 9893
Homebridge 0.2.16
homebridge-fhem Vorschauversion aus {{Link2Forum|Topic=48558|Message=402024|LinkText=homebridge/homekit}}
Eine noch etwas bessere Schaltmöglichkeit bietet '''genericDeviceType security'''.
Das Mapping für ROOMMATE sieht wie folgt aus:
attr TYPE=ROOMMATE genericDeviceType security
attr TYPE=ROOMMATE homebridgeMapping SecuritySystemCurrentState=state,values=/home|awoken/:0;;absent:1;;/asleep|gotosleep/:2;;gone:3 SecuritySystemTargetState=SecuritySystemCurrentState,cmds=0:state+home;;1:state+absent;;2:state+gotosleep;;3:state+gone,delay=1
für GUEST:
attr TYPE=GUEST genericDeviceType security
attr TYPE=GUEST homebridgeMapping SecuritySystemCurrentState=state,values=/home|awoken/:0;;absent:1;;/asleep|gotosleep/:2;;none:3 SecuritySystemTargetState=SecuritySystemCurrentState,cmds=0:state+home;;1:state+absent;;2:state+gotosleep;;3:state+none,delay=1
== Homematic Luftfeuchtigkeits- und Temperatursensoren ==
Mit folgenden Geräten wurde folgendes Mapping erstellt und somit erfolgreich getestet:
- HM-WDS10-TH-O
- HM-WDS40-TH-I
- HM-WDS40-TH-I-2
Achtung: Hier wird genericDeviceType "TemperatureSensor" verwendet, um eine history in EVE zu erhalten. Mit einem "HumiditySensor" funktionierte dies bei den Tests (Februar 2019) nicht.
attr <THSensor> genericDeviceType TemperatureSensor
attr <THSensor>      CurrentRelativeHumidity=humidity
                      CurrentTemperature=temperature
                      StatusLowBattery=battery,values=ok:BATTERY_LEVEL_NORMAL;/^.*/:BATTERY_LEVEL_LOW
                      history:size=1024
== Homematic SmokeDetector HM-SEC-SD und HM-SEC-SD2 ==
[[Datei:Homebridge-Homematic-Smokedetector-Gen1.jpg|mini|Homebridge-Homematic-Smokedetector-Gen1 in EVE]]
Es sind keine Homebridge Mappings für die Rauch Meldung erforderlich.
Allerdings ist ein Mapping für den Batterie Zustand nötig, siehe Unten.
attr <SmokeDetector> genericDeviceType SmokeSensor
attr <SmokeDetector> subType smokeDetector
attr <SmokeDetector> homebridgeMapping StatusLowBattery=battery,values=ok:BATTERY_LEVEL_NORMAL;;/^.*/:BATTERY_LEVEL_LOW
== Homematic Heizkörperthermostat HM-CC-RT-DN ==
[[Datei:HM-CC-RT-DN-Eve.PNG|mini|Darstellung des HM-CC-RT-DN in der iOS App Eve]]
attr <HMCCRTDN_Channel2_Clima> homebridgeMapping TargetTemperature=desired-temp::desired-temp,minValue=5,maxValue=35,minStep=0.5,nocache=1
                      CurrentTemperature=BU_Heizung_01_Clima:measured-temp,nocache=1
                      StatusLowBattery=BU_Heizung_01:battery,values=ok:BATTERY_LEVEL_NORMAL;;/^.*/:BATTERY_LEVEL_LOW
                      TargetHeatingCoolingState=heatingState,values=OFF:0;;HEAT:1;;COOL:2;;AUTO:3,cmds=OFF:controlManu+off;;HEAT:controlMode+boost;;AUTO:controlMode+auto;;COOL:controlManu+17.0
                      CurrentHeatingCoolingState=heatingState,values=OFF:0;;HEAT:1;;COOL:2;;AUTO:0,valud=OFF
attr <HMCCRTDN_Channel2_Clima> siriName Robby
Dieses Mapping bezieht sich auf ein vorhandenes ''userReading'' mit dem Namen <code>heatingState</code>, womit Homekit die einzelnen Status nachher unterscheidet.
attr <HM-CC-RT-DN_Clima> userReadings heatingState {(ReadingsVal($NAME,"ValvePosition",0) > 0 || ReadingsVal($NAME,"desired-temp","-") eq "on") ? "HEAT" : ReadingsVal($NAME,"desired-temp","-") eq "off" ? "OFF" : ReadingsVal($NAME,"controlMode","auto") eq "auto" ? "AUTO" : (ReadingsVal($NAME,"measured-temp",20) > ReadingsVal($NAME,"desired-temp",20)) ? "COOL" : "AUTO"}
Global auf alle in FHEM angelegten HM-CC-RT-DN, lässt sich mit folgendem Befehl das ''userReading'' anlegen.
Siehe [https://forum.fhem.de/index.php/topic,59211.msg505986.html#msg505986 Forumsthread].
attr TYPE=CUL_HM:FILTER=model=HM-CC-RT-DN:FILTER=chanNo=04 userReadings heatingState {(ReadingsVal($NAME,"ValvePosition",0) > 0 || ReadingsVal($NAME,"desired-temp","-") eq "on") ? "HEAT" : ReadingsVal($NAME,"desired-temp","-") eq "off" ? "OFF" : ReadingsVal($NAME,"controlMode","auto") eq "auto" ? "AUTO" : (ReadingsVal($NAME,"measured-temp",20) > ReadingsVal($NAME,"desired-temp",20)) ? "COOL" : "AUTO"}
== Homematic IP Wandthermostat mit Schaltausgang HmIP-BWTH ==
attr <HmIP_BWTH_Thermostat> homebridgeMapping TargetTemperature=1.SET_POINT_TEMPERATURE::1.SET_POINT_TEMPERATURE,,minValue=17,maxValue=25,minStep=0.5,cmd=control,nocache=true
                                                  CurrentTemperature=1.ACTUAL_TEMPERATURE
                                                  CurrentHeatingCoolingState=heatingState,values=HEAT:1;COOL:2;OFF:0;AUTO:0
                                                  TargetHeatingCoolingState=heatingState,values=OFF:0;HEAT:1;COOL:2;AUTO:3,cmds=OFF:datapoint+1.CONTROL_MODE+1;HEAT:datapoint+1.BOOST_MODE+1;COOL:datapoint+1.BOOST_MODE+0;AUTO:datapoint+1.CONTROL_MODE+0
                                                  CurrentRelativeHumidity=1.HUMIDITY
Dieses Mapping bezieht sich auf ein vorhandenes ''userReading'' mit dem Namen <code>heatingState</code>, womit Homekit die einzelnen Status nachher unterscheidet.
attr <HmIP_BWTH_Thermostat> userReadings heatingState {(ReadingsVal($NAME,"10.STATE",0) eq 1 && ReadingsVal($NAME,"1.HEATING_COOLING",0) eq 0) ? "HEAT" : ReadingsVal($NAME,"1.SET_POINT_TEMPERATURE","-") eq "off" ? "OFF" : ReadingsVal($NAME,"1.SET_POINT_MODE","-") eq 0 ? "AUTO" : (ReadingsVal($NAME,"10.STATE",0) eq 1 && ReadingsVal($NAME,"1.HEATING_COOLING",0) eq 1) ? "COOL" : "OFF"}
== Homematic Wetterstation OC3 HM-WDS100-C6-O-2 ==
[[Datei: homebridge-wetter.jpg|mini|Wetterstation in EVE]]
Mit der EVE und den hier: [https://github.com/naofireblade/homebridge-weather-plus/blob/master/util/characteristics.js] beschriebenen Characteristics lässt sich eine lokale Homematic OC3 Wetterstation aus FHEM einbinden:
<pre>
clear
CurrentTemperature:temperature
CurrentRelativeHumidity:humidity
49C8AE5A-A3A5-41AB-BF1F-12D5654F9F41:windSpeed,name=WINDGESCHWINDIGKEIT,format=FLOAT,unit=kmh,maxValue=250,minValue=0,minStep=1
46f1284c-1912-421b-82f5-eb75008b167e:windDirection,name=WINDRICHTUNG,format=UINT8,unit=ARC_DEGREE,maxValue=360,minValue=0,minStep=1
StatusLowBattery:battery,values=ok:BATTERY_LEVEL_NORMAL;/^.*/:BATTERY_LEVEL_LOW
ccc04890-565b-4376-b39a-3113341d9e0f:RegenmengeLast24Hours:state,name=REGEN_24h,format=FLOAT,unit=mm,maxValue=100,minValue=0,minStep=1
10c88f40-7ec4-478c-8d5a-bd0c3cce14b7:RegenmengeLast1Hours:state,name=REGEN_1h,format=FLOAT,unit=mm,maxValue=100,minValue=0,minStep=1
0000006B-0000-1000-8000-0026BB765291:brightness,name=BRIGHTNESS,format=FLOAT,unit=LUX,maxValue=10000,minValue=0,minStep=.0001
cd65a9ab-85ad-494a-b2bd-2f380084134c:isRaining,name=BEDINGUNGKATEGORIE,values=0:0;1:2,format=UINT8,maxValue=3,minValue=0,minStep=1
cd65a9ab-85ad-494a-b2bd-2f380084134d:isRaining,name=BEDINGUNG,format=STRING,values=0:-;/.*/:Regen
</pre>
== Roomba über THINKINGCLEANER Modul ==
attr <THINKINGCLEANER> genericDeviceType switch
attr <THINKINGCLEANER> homebridgeMapping clear On=state,valueOn=/^(on|dock)/,cmdOn=on,cmdOff=off,nocache=1 ChargingState=deviceStatus,values=/(_recon|_full|_trickle)$/:CHARGING;/^.*/:NOT_CHARGING
attr <THINKINGCLEANER> siriName Robby
Getestet mit
FHEM 5.7 Rev. 12680
homebridge 0.4.11
homebridge-fhem 0.2.66
== Vallox Belüftungsanlage ==
Die Steuerung der Lüftungsgeschwindigkeit ist nur in Prozent möglich. Die Umrechnung erfolgt im [[Vallox]] Modul.
Hierzu wurde das Reading ''FanSpeedPct'' hinzugefügt.
attr <Vallox> genericDeviceType Fan
attr <Vallox> homebridgeMapping clear
                      model=Vallox
                      On=PowerState,valueOn=1,readOnly=1
                      RotationSpeed=FanSpeedPct,minValue=1,maxValue=100,cmd=FanSpeedPct,delay=1
== Xiaomi Vacuum Cleaner 1. Generation ==
[[Datei:XIAOMI_VACUUM_CLEANER-Gen1.jpg|mini|XIAOMI VACUUM 1. GEN in EVE]]
Voraussetzung zur Verwendung der Mappings, ist ein eingebundener Staubsauger mit dem Modul 72_XiaomiDevice.
Siehe [https://forum.fhem.de/index.php/topic,73052.0.html Forumsthread]
Das Modul muss manuell installiert werden.
attr <XIAOMI> genericDeviceType switch
attr <XIAOMI> homebridgeMapping On=state,valueOn=Cleaning,cmdOn=start,cmdOff=charge
                      RotationSpeed=fan_power,minValue=0,maxValue=90,cmd=fan_power,delay=1
                      BatteryLevel=batteryLevel,maxValue=100,minValue=0,minStep=1
                      StatusLowBattery=battery,values=ok:BATTERY_LEVEL_NORMAL;;low:BATTERY_LEVEL_LOW
                      ChargingState=state,values=Docked:NOT_CHARGING;;Charging:CHARGING;;/.*/:NOT_CHARGEABLE
                      OccupancyDetected=state,values=/Docked|Charging/:OCCUPANCY_DETECTED;;/.*/:OCCUPANCY_NOT_DETECTED
                      FilterLifeLevel=consumables_filter,minValue=0,maxValue=100
                      FilterChangeIndication=consumables_filter,values=0:CHANGE_FILTER
== Roborock S50 (2. Generation des Xiaomi Vacuum Cleaners) ==
[[Datei:Roborock S50.png|mini]]
Voraussetzung zur Verwendung der Mappings, ist ein eingebundener Staubsauger mit dem Modul 72_XiaomiDevice.
Siehe [https://forum.fhem.de/index.php/topic,73052.0.html Forumsthread]
Das Modul muss manuell installiert werden.
Das folgende Mapping für den Roborook S50 beinhaltet neben den Characteristics der 1. Genration des Xiaomi Vacuum Cleaners weitere Custom Mappings. Diese werden auch auf dem Bild dargestellt. Falls das einem zu viele Informationen sind, können diese beim Einfügen einfach weggelassen oder in EVE ausgeblendet werden.
attr <XIAOMI> genericDeviceType switch
attr <XIAOMI> homebridgeMapping On=state,valueOn=Cleaning,cmdOn=start,cmdOff=charge
                      RotationSpeed=fan_power,minValue=0,maxValue=90,cmd=fan_power,delay=1
                      BatteryLevel=batteryPercent,maxValue=100,minValue=0,minStep=1
                      StatusLowBattery=batteryState,values=ok:BATTERY_LEVEL_NORMAL;;low:BATTERY_LEVEL_LOW
                      ChargingState=state,values=Docked:NOT_CHARGING;;Charging:CHARGING;;/.*/:NOT_CHARGEABLE
                      OccupancyDetected=state,values=/Docked|Charging/:OCCUPANCY_DETECTED;;/.*/:OCCUPANCY_NOT_DETECTED
                      2af6d0d0-3691-4f0d-9c9c-c1098295b1cb=consumables_sensors,name=Reinigung+Sensoren,minValue=0,maxValue=100,format=FLOAT,minStep=1,unit=%
                      fd11b965-052e-430f-b08f-206287d8bc00=consumables_filter,name=Austausch+Filter,minValue=0,maxValue=100,format=FLOAT,minStep=1,unit=%
                      fe7a8dac-dff3-4a07-8a5e-0d6abbf0df0c=consumables_main_brush,name=Austausch+Hauptbürste,minValue=0,maxValue=100,format=FLOAT,minStep=1,unit=%
                      4f9b2a22-b764-4fc1-8cd2-99383924394c=consumables_side_brush,name=Austausch+Seitenbürste,minValue=0,maxValue=100,format=FLOAT,minStep=1,unit=%
                      FilterLifeLevel=consumables_filter,minValue=0,maxValue=100
                      FilterChangeIndication=consumables_filter,values=0:CHANGE_FILTER
                      4896763a-26f7-400b-9734-2ce6564ceba2=total_clean_time,name=Lebenszeitersparnis,format=FLOAT,minStep=1,unit=h
                      82af5fd7-50a3-4ab3-81d3-1f7903de612a=total_clean_area,name=Gereinigte+Fläche,format=FLOAT,minStep=1,unit=m²
                      00d2ef14-b429-4569-8af3-c342d41cf383=total_cleans,name=Reinigungsvorgänge,format=FLOAT,minStep=1
                      e8d1027e-b068-40d5-9efd-f161b1b52774=device_firmware,name=Firmware,format=STRING
== Xiaomi Fan (ältere Generationen mit Luftfeuchtigkeits- und Temperatursensor und Battery-Readings) ==
[[Datei:Xiaomi DC Pedestal Fan.png|mini]]
Voraussetzung zur Verwendung der Mappings, ist ein eingebundener Ventilator mit dem Modul 72_XiaomiDevice.
Siehe [https://forum.fhem.de/index.php/topic,73052.0.html Forumsthread]
Das Modul muss manuell installiert werden.
Die ältere Generation enthält Sensoren und somit Readings für Luftfeuchtigkeit, Temperatur und auch Batteriestatus. Diese fehlen bei den neueren Generation dieses Ventilators, siehe Bilder. Da anscheinend jedes Jahr neue Generationen dieses Ventilators herausgekommen sind, ist nicht klar bis zu welcher Generation diese Sensoren enthalten waren.
Mit folgenden Geräten wurde folgendes Mapping erstellt und somit erfolgreich getestet:
- Xiaomi DC Pedestal Fan (FHEM model fehlt, Default Hostname am Router: zhimi-fan-v3)
- Liste bitte ergänzen!
Um möglichst viele Funktionen bereitzustellen, wurden auch Characteristics von anderen DeviceTypes verwendet. Erklärung zu den Characteristics:
- Die Kindersicherung (LockPhysicalControls) ist in Eve über das kleine Einstellungssymbol zu finden.
- Mit AudioFeedback/Audio-Bestätigung werden die Töne des Lüfters ein bzw. ausgeschaltet.
- Mit NightVision/Nachtsicht werden die LEDs ein (bright) bzw. ausgeschaltet (off).
- Mit Mute/Audio wird der Windmodus von Straight zu Natural geschaltet.
- Mit TargetTiltAngle/Neigung kann der Schwenkwinkel justiert werden.
- Mit SwingMode/Schwenken kann der Schwenkmodus ein bzw. ausgeschaltet werden.
- Der Rest ist selbsterklärend.
homebridgeMapping:
attr <XIAOMI> genericDeviceType Fan
attr <XIAOMI> homebridgeMapping
                      clear
                      On:power,cmdOn=on,cmdOff=off,valueOn=on,valueOff=off
                      LockPhysicalControls=child_lock,values=on:CONTROL_LOCK_ENABLED;;off:CONTROL_LOCK_DISABLED,cmds=CONTROL_LOCK_ENABLED:child_lock+on;CONTROL_LOCK_DISABLED:child_lock+off
                      RotationSpeed=level,minValue=0,maxValue=100,cmd=level,delay=1
                      TargetTiltAngle=angle,minValue=30,maxValue=120,minStep=30,cmd=angle
                      SwingMode=angle_enable,values=on:SWING_ENABLED;;off:SWING_DISABLED,cmdOn=angle_enable+on,cmdOff=angle_enable+off
                      CurrentRelativeHumidity=humidity
                      CurrentTemperature=temperature
                      BatteryLevel=batteryPercent,maxValue=100,minValue=0,minStep=1
                      StatusLowBattery=batteryState,values=ok:BATTERY_LEVEL_NORMAL;;low:BATTERY_LEVEL_LOW
                      ChargingState=charging,values=complete:NOT_CHARGING;;progress:CHARGING;;/.*/:NOT_CHARGEABLE
                      AudioFeedback:buzzer,cmdOn=buzzer+on,cmdOff=buzzer+off,valueOn=on,valueOff=off
                      NightVision:led,cmdOn=led+off,cmdOff=led+bright,valueOn=off,valueOff=bright
                      Mute:mode,cmdOn=mode+straight,cmdOff=mode+natural,valueOn=straight,valueOff=natural
                      CurrentFanState:power,values=on:BLOWING_AIR;;off:INACTIVE;;/.*/:IDLE
== Xiaomi Fan (neuere Generationen ohne Luftfeuchtigkeits- und Temperatursensor und Battery-Readings) ==
[[Datei:Xiaomi Standing Fan 2 bzw. 2S.png|mini]]
Voraussetzung zur Verwendung der Mappings, ist ein eingebundener Ventilator mit dem Modul 72_XiaomiDevice.
Siehe [https://forum.fhem.de/index.php/topic,73052.0.html Forumsthread]
Das Modul muss manuell installiert werden.
Den neueren Generationen dieses Ventilators fehlen Sensoren und somit Readings für Luftfeuchtigkeit, Temperatur und auch Batteriestatus. Diese sind bei der älteren Generation dieses Ventilators enthalten, siehe vorangegangenes Beispiel.
Dieses Mapping wurde mit dem "2S" erstellt. Es sollte aber mindestens auch mit einem "Xiaomi Standing Fan 2" (ohne Akku) funktionieren, da auch der "Xiaomi Standing Fan 2S" (mit Akku) kein Reading für die Batterie bereitstellt. Ansonsten gibt es wohl auch noch Generationen zwischen dem "Xiaomi DC Pedestal Fan" und den "Xiaomi Standing Fan 2/2S". Es ist davon auszugehen, dass dieses Beispiel genauso auch bei diesen Modellen funktioniert.
Mit folgenden Geräten wurde folgendes Mapping erstellt und somit erfolgreich getestet:
- 2019 Xiaomi Standing Fan 2S (FHEM model bzw. Default Hostname am Router: zhimi-fan-za4)
- 2018 Xiaomi ZhiMiDCVariableFrequencyFan ZRFFS01ZM (FHEM model bzw. Default Hostname am Router: zhimi-fan-za1)
- Liste bitte ergänzen!
Um möglichst viele Funktionen bereitzustellen, wurden auch Characteristics von anderen DeviceTypes verwendet. Erklärung zu den Characteristics:
- Die Kindersicherung (LockPhysicalControls) ist in Eve über das kleine Einstellungssymbol zu finden.
- Mit AudioFeedback/Audio-Bestätigung werden die Töne des Lüfters ein bzw. ausgeschaltet.
- Mit NightVision/Nachtsicht werden die LEDs ein (bright) bzw. ausgeschaltet (off).
- Mit Mute/Audio wird der Windmodus von Straight zu Natural geschaltet.
- Mit TargetTiltAngle/Neigung kann der Schwenkwinkel justiert werden.
- Mit SwingMode/Schwenken kann der Schwenkmodus ein bzw. ausgeschaltet werden.
- Der Rest ist selbsterklärend.
homebridgeMapping:
attr <XIAOMI> genericDeviceType Fan
attr <XIAOMI> homebridgeMapping
                      clear
                      On:power,cmdOn=on,cmdOff=off,valueOn=on,valueOff=off
                      LockPhysicalControls=child_lock,values=on:CONTROL_LOCK_ENABLED;;off:CONTROL_LOCK_DISABLED,cmds=CONTROL_LOCK_ENABLED:child_lock+on;CONTROL_LOCK_DISABLED:child_lock+off
                      RotationSpeed=level,minValue=0,maxValue=100,cmd=level,delay=1
                      TargetTiltAngle=angle,minValue=30,maxValue=120,minStep=30,cmd=angle
                      SwingMode=angle_enable,values=on:SWING_ENABLED;;off:SWING_DISABLED,cmdOn=angle_enable+on,cmdOff=angle_enable+off
                      AudioFeedback:buzzer,cmdOn=buzzer+on,cmdOff=buzzer+off,valueOn=on,valueOff=off
                      NightVision:led,cmdOn=led+off,cmdOff=led+bright,valueOn=off,valueOff=bright
                      Mute:mode,cmdOn=mode+straight,cmdOff=mode+natural,valueOn=straight,valueOff=natural
                      CurrentFanState:power,values=on:BLOWING_AIR;;off:INACTIVE;;/.*/:IDLE
== ZWave Türschloss Vision ZM1701 einbinden ==
Das ZWave Türschloss ZM1701 von der Firma Vision sendet seinen aktuellen Schließstatus in ein einzelnes Reading wie "lock", sondern schickt eine ganze Reihe von Informationen über den Zustand in das Reading <code>doorLockOperation</code>. Das Schließen und Öffnen der Türschlosses wird auch nicht mit einem Setzen des <code>state</code> erreicht, sondern mit dem Setzen von <code>doorLockOperation</code>. Das macht das Einbinden in homebridge nicht trivial, funktioniert aber über folgendes Homebridge-Mapping:
attr <ZM1701> genericDeviceType lock
attr <ZM1701> homebridgeMapping LockCurrentState=doorLockOperation,values=/\ssecured/:SECURED;/unsecured/:UNSECURED LockTargetState=doorLockOperation,values=/\ssecured/:SECURED;/unsecured/:UNSECURED,cmds=SECURED:doorLockOperation+close;UNSECURED:doorLockOperation+open
Kurz zur Erklärung: Um ein Schloss über HomeKit steuern zu können braucht es zwei characteristics. LockCurrentState zeigt an, ob das Schloss geöffnet oder geschlossen ist. Und mit LockTargetState wird das Schloss geöffnet oder geschlossen. Damit der aktuelle Status des Schlosses ausgelesen werden kann, muss aus dem FHEM-Reading <code>doorLockOperation</code> die Zeichenfolge <code> secured</code> oder <code>unsecured</code> extrahiert werden, daher die beiden regulären Ausdrücke <code>/\ssecured/</code> und <code>/unsecured/</code>. In der characteristic <code>LockTargetState</code> muss sowohl der aktuelle Status des Schlosses als auch das Kommando angegeben werden, schließlich möchte man ein geschlossenes Schloss nicht nochmal schließen. Daher wird erst aus dem Reading <code>doorLockOperation</code> der aktuelle Status des Schlosses ausgelesen und die damit korrespondierenden Befehle über <code>cmds=SECURED:doorLockOperation+close;UNSECURED:doorLockOperation+open</code> generiert.
Wer es in FHEM über ein webCmd einfacher zu bedienen haben möchte, fügt bitte noch die dafür notwendigen Attribute und die leicht geänderten homebridgeMappings wie folgt ein:
attr <ZM1701> genericDeviceType lock
attr <ZM1701> homebridgeMapping LockCurrentState=doorLockOperation,values=/\ssecured/:SECURED;/unsecured/:UNSECURED LockTargetState=doorLockOperation,values=/\ssecured/:SECURED;/unsecured/:UNSECURED,cmds=SECURED:close;UNSECURED:open
attr <ZM1701> /doorLockOperation open:open/doorLockOperation close:close
attr <ZM1701> webCmd open:close
== Garagentorsteuerung und Schließzustandserkennung mit einem Shelly Plus 1 anhand eines Sommer S9080 base+ Antriebs ==
=== 1. Konfiguration und Installation des Shellys ===
[[Datei:Shelly Input Output.jpg|mini|alternativtext=|Änderung des Relay Types]]
[[Datei:Shelly AutoOff.jpg|mini|alternativtext=|Shelly als Taster konfigurieren]]
[[Datei:Shelly-Verkableung.jpg|mini|alternativtext=|Shelly, Garagentor Platine und Relay]]
Da der Shelly hierbei zwei verschiedene Aufgaben übernehmen soll, müssen zunächst die nachfolgenden Einstellungen am Shelly vorgenommen werden:
# Im Webend des Shellys (unter seiner IP-Adresse zu erreichen)  in den Einstellungen ''Channel Settings > Input output settings'' den relay type auf "''Detached''" stellen. Dies hat zur Folge, dass die Eingänge für den Schalter (also da wo normalerweise z. B. der Lichtschalter angeschlossen und vom Shelly ausgewertet wird) vom internen Relay des Shellys (das z.B. den Strom zur Lampe schaltet) losgelöst wird. Somit lässt sich später der Zustand des des angeschlossenen Schalters (in diesem Beispiel der Schließzustand des Garagentors) separat auswerten ohne, dass etwas geschaltet wird.
# Da der Shelly zum Öffnen des Tors nur ein kurzen Stromstoß, wie beispielsweise ein Tastschalter, an die Garagentor-Elektronik schicken soll, müssen wir in den Einstellungen ''Timers > Auto'' off einen Aus-Timer einstellen. Der Shelly funktioniert somit als Taster.
Gemäß der Anleitung benötigt man beim besagten Garagentorantrieb der Firma Sommer ein weiteres Relay (als Zubehörteil erhältlich), welches einfach auf die Hauptplatine aufgesteckt wird, um den Schließzustand des Tors auszuwerten. Das Relay zieht an, sobald das Tor nicht geschlossen ist.
=== 2. FHEM + Homebridge-Mapping ===
Der Shelly wird per Autocreate des MQTT2 Moduls selbstständig angelegt. In diesem Beispiel mit dem Namen shellyplus1_a8032abd6100. Das Reading "''params_input_0_state''" liefert uns hierbei den Wert des losgelösten Schaltereingangs (also den Schließzustand des Garagentors). Hierbei ist zu beachten, dass das Reading erst auftaucht sobald der Schalter das erste mal geschlossen (also das Garagentor geöffnet) wurde.
Die weitere Konfiguration erfolgte mit:
attr MQTT2_shellyplus1_a8032abd6100 alias Garagentor
attr MQTT2_shellyplus1_a8032abd6100 webCmd auf:zu
attr MQTT2_shellyplus1_a8032abd6100 devStateIcon 1.open:fts_garage_door_10 1.closed:fts_garage_door_100\
attr MQTT2_shellyplus1_a8032abd6100 eventMap on:auf on:zu
attr MQTT2_shellyplus1_a8032abd6100 genericDeviceType garage
attr MQTT2_shellyplus1_a8032abd6100 group Garage
attr MQTT2_shellyplus1_a8032abd6100 homebridgeMapping CurrentDoorState=homebridgestate,values=0:CLOSED;;1:OPEN TargetDoorState=CurrentDoorState,cmds=OPEN:on;;CLOSED:on
attr MQTT2_shellyplus1_a8032abd6100 icon fts_garage
attr MQTT2_shellyplus1_a8032abd6100 room Homekit
attr MQTT2_shellyplus1_a8032abd6100 stateFormat 1:TOR\
<nowiki> </nowiki><nowiki> FGStatus
  attr MQTT2_shellyplus1_a8032abd6100 userReadings TOR {(ReadingsVal($name,"params_input_0_state","true") eq "true")?"open":"closed"},\
  FGStatus {if (ReadingsVal($name,"params_input_0_state","") eq "true") {ReadingsTimestamp($name,"params_input_0_state","") =~ /^(\d+)-(\d+)-(\d+)\s(\d+:\d+):(\d+)$/;; return "Letzte Öffnung: am $3.$2.$1 um $4 Uhr"} else {ReadingsTimestamp($name,"params_input_0_state","") =~ /^(\d+)-(\d+)-(\d+)\s(\d+:\d+):(\d+)$/;; return "Letzte Schließung: am $3.$2.$1 um $4 Uhr"}},\
  homebridgestate {(ReadingsVal($name,"params_input_0_state","true") eq "true")?1:0}</nowiki>
Ergänzt wurde das MQTT2-Modul automatisch angelegt Attribut um die letzten beiden Zeilen (auf, zu):
<nowiki>attr MQTT2_shellyplus1_a8032abd6100 setList toggle:noArg $DEVICETOPIC/rpc {"id":0,"src":"fhem","method":"Switch.Toggle","params": {"id":0}}\</nowiki>
<nowiki> </nowiki><nowiki> off:noArg $DEVICETOPIC/rpc {"id":0,"src":"fhem","method":"Switch.Set","params": {"id":0,"on":false}}\</nowiki>
<nowiki> </nowiki><nowiki> on:noArg $DEVICETOPIC/rpc {"id":0,"src":"fhem","method":"Switch.Set","params": {"id":0,"on":true}}\</nowiki>
<nowiki> </nowiki><nowiki> on-for-timer $DEVICETOPIC/rpc {"id":0,"src":"fhem","method":"Switch.Set","params": {"id":0,"on":true,"toggle_after":$EVTPART1}}\</nowiki>
<nowiki> </nowiki><nowiki> x_update:noArg $DEVICETOPIC/rpc {"id":0,"src":"fhem","method":"Shelly.Update","params": {"stage":"stable"}}\</nowiki>
<nowiki> </nowiki> x_reboot:noArg $DEVICETOPIC/rpc {"id":0,"src":"fhem","method":"Shelly.Reboot"}\
<nowiki> </nowiki><nowiki> auf:noArg $DEVICETOPIC/rpc {"id":0,"src":"fhem","method":"Switch.Set","params": {"id":0,"on":true}}\</nowiki>
<nowiki> </nowiki><nowiki> zu:noArg $DEVICETOPIC/rpc {"id":0,"src":"fhem","method":"Switch.Set","params": {"id":0,"on":false}}</nowiki>
[[Datei:IOs.png|mini|alternativtext=|Ansicht in HomeKit]]
[[Datei:FHEM.jpg|mini|alternativtext=|Ergebnis in FHEM]]
Getestet mit
FHEM 6.1 Rev. 25376
homebridge 1.4.0
homebridge-fhem 0.5.33     
 
 
[[Kategorie:HOWTOS]]
[[Kategorie:Sprachsteuerung]]
[[Kategorie:Code Snippets]]

Aktuelle Version vom 28. Juni 2023, 15:38 Uhr

Dieser Eintrag dient zur Sammlung funktionsfähiger Homebridge Configs.

Bitte immer die FHEM Version und Homebridge Version angegeben.

Sehr gute Hinweise gibt es hier: http://www.meintechblog.de/2015/10/mit-siri-und-fhem-das-gesamte-smart-home-per-stimme-steuern/

Mögliche Mappings

Die Möglichen Mappings können hier nachgelesen werden https://github.com/KhaosT/HAP-NodeJS/tree/master/src/lib/gen insbesondere in HomeKit.ts.

Hier ein Beispiel:

Characteristic.Brightness = function() {
 Characteristic.call(this, 'Brightness', '00000008-0000-1000-8000-0026BB765291');
 this.setProps({
   format: Characteristic.Formats.INT,
   unit: Characteristic.Units.PERCENTAGE,
   maxValue: 100,
   minValue: 0,
   minStep: 1,
   perms: [Characteristic.Perms.READ, Characteristic.Perms.WRITE, Characteristic.Perms.NOTIFY]
 });
 this.value = this.getDefaultValue();
};

Das Mapping in diesem Fall, hat den Titel Brightness.

Die Werte können in 1er Schritten zwischen 0 und 100 liegen (max und min Value)

Erstellung eines HomebridgeMappings am Beispiel "Feuchtesensor"

Zum Einstieg etwas leicht nachvollziehbares.

Feuchtesensoren haben in der Regel ein "humidity" Reading, im Falle des Opus XT300 Bodenfeuchtesensors auch Temperatur und Batterie Level. Homekit unterstützt einen "HumiditySensor" Service. Dieser ist in homebridge-fhem nicht standardmäßig vorhanden (kann also nicht aus dem dropdown ausgewählt werden, sondern muss über das Befehlsfeld zugewiesen werden):

attr meinSensor genericDeviceType HumiditySensor

Im nächsten Schritt werden die Readings gemappt:

attr meinSensor homebridgeMapping clear CurrentRelativeHumidity=humidity StatusLowBattery=battery,values=ok:BATTERY_LEVEL_NORMAL;;/^.*/:BATTERY_LEVEL_LOW CurrentTemperature=temperature

clearlöscht default mappings - das wird in der Regel nicht notwendig sein, schadet aber nicht

CurrentRelativeHumidity ist die relevante Homekit Characteristic - wird mit dem entsprechenden Reading des Sensors gemappt.

StatusLowBattery erwartet entweder BATTERY_LEVEL_NORMAL oder _LOW. Mein Sensor liefert ok zurück, wenn alles gut ist, also wird "ok" auf _NORMAL gemappt, alles andere auf _LOW.

Der Opus XT300 Bodenfeuchtesensors liefert auch noch die Temperatur - der HumiditySensor Service sieht das eigentlich nicht vor, daher wird die Temperatur auch nicht in der Apple "Home" App angezeigt. Bei Eve wird die Temperatur hingegen berücksichtigt.

BRAVIA Fernseher

Ein Beispiel homebridgeMapping für Sony Bravia Fernseher (iOS 12.2 beta!) und genericDeviceType Television:

clear
ConfiguredName:model
Active:state,values=off:INACTIVE;on:ACTIVE,cmds=ACTIVE:on;INACTIVE:off
RemoteKey:key,cmds=REWIND:remoteControl+Rewind;FAST_FORWARD:remoteControl+FastForward;NEXT_TRACK:remoteControl+NEXT_TRACK;PREVIOUS_TRACK:remoteControl+PREVIOUS_TRACK;ARROW_UP:remoteControl+Up;ARROW_DOWN:remoteControl+Down;ARROW_LEFT:remoteControl+Left;ARROW_RIGHT:remoteControl+Right;SELECT:remoteControl+Ok;BACK:remoteControl+RETURN;EXIT:remoteControl+Exit;PLAY_PAUSE:remoteControl+Play;INFORMATION:remoteControl+Info
SleepDiscoveryMode:default=ALWAYS_DISCOVERABLE
ClosedCaptions:default=0
DisplayOrder:default=Test1
CurrentMediaState:default=0:currentTitle
TargetMediaState:default=0,cmds=PLAY:remoteControl+play;PAUSE:remoteControl+pause;STOP:remoteControl+stop;
PictureMode:default=1
PowerModeSelection:default=1,cmds=0:remoteControl+options
ActiveIdentifier:input,default=0,values=/tv.dvbt|TV...DVB-T/:1;/HDMI.3/:2,cmds=1:input+TV+/+DVB-T;2:input+HDMI+3/ARC;3:application+Plex
TelevisionSpeaker#Mute=mute
 Active:default=ACTIVE
 VolumeSelector:volume,cmds=INCREMENT:VolumeUp;DECREMENT:VolumeDown
 VolumeControlType:default=RELATIVE_WITH_CURRENT
 linkedTo=Television
InputSource(1)#Identifier:default=1
 ConfiguredName:default=TV
 IsConfigured:default=CONFIGURED
 InputSourceType:default=TUNER
 CurrentVisibilityState:default=SHOWN
 linkedTo=Television
InputSource(2)#Identifier:default=2
 ConfiguredName:default=APPLE+TV
 IsConfigured:default=CONFIGURED
 InputSourceType:default=HDMI
 CurrentVisibilityState:default=SHOWN
 linkedTo=Television
InputSource(3)#Identifier:default=3
 ConfiguredName:default=PLEX
 IsConfigured:default=CONFIGURED
 InputSourceType:default=APPLICATION
 CurrentVisibilityState:default=SHOWN
 linkedTo=Television

damit lässt sich der Fernseher über Siri/Homekit ein- und ausschalten sowie über das appleTV Control-Center Widget steuern.

EnOcean STM 250 Tür-/Fensterkontakt

Der STM 250 liefert als Status in FHEM open, wenn das Fenster offen und damit der Kontakt "offen" ist. Analog liefert er closed wenn das Fenster geschlossen und damit auch der Kontakt geschlossen ist. Diese Statusangaben sind sehr intuitiv zu verstehen und zu interpretieren.

Die characteristic ContactSensorState von HomeKit liefert entweder den Wert CONTACT_DETECTED=0 oder CONTACT_NOT_DETECTED=1 zurück. Wobei CONTACT_DETECTED bedeutet, dass der Kontakt geschlossen ist. Je nach Darstellung in der HomeKit-fähigen App muss dieses Verhalten bei der Interpretation berücksichtigt werden. Die App Eve von Elgato zum Beispiel liefert für Kontaktsensoren "JA" oder "NEIN" mit der Bedeutung CONTACT_DETECTED=0=JA bzw. CONTACT_NOT_DETECTED=1=NEIN zurück.

Noch ein wichtiger Punkt: Um einen Sensorkontakt sinnvoll einzurichten sollte als zusätzlicher Wert für das Attribut genericdeviceType der Wert ContactSensor hinzugefügt werden. Wie das geht ist im Eintrag Homebridge einrichten ausführlicher beschrieben.

Folgende Attribute dann hinzufügen:

attr STM250 genericDeviceType ContactSensor
attr STM250 homebridgeMapping ContactSensorState=state,values=closed:CONTACT_DETECTED;open:CONTACT_NOT_DETECTED

Getestet mit

FHEM 5.7 Rev. 9893
Homebridge 0.2.16
homebridge-fhem Vorschauversion aus homebridge/homekit

EnOcean Secu-Signal Fenstergriff

Der Secu-Signal Fenstergriff liefert als Status in FHEM open beziehungsweise open_from_tilted, wenn das Fenster offen ist. Analog liefert er closed wenn das Fenster geschlossen ist. Ist das Fenster gekippt, wird der Status tilted gesetzt. Diese Statusangaben sind sehr intuitiv zu verstehen und zu interpretieren. Die Integration in HomeKit via HomeBridge erfordert zwei weitere Attribute:

attr SecuSignal genericDeviceType window
attr SecuSignal homebridgeMapping CurrentPosition=state,values=closed:0;open:100;tilted:75;open_from_tilted:100; TargetPosition=state,values=open:100;closed:0;tilted:75;open_from_tilted:100;

Getestet mit

FHEM 6.2
Homebridge 1.6.1
homebridge-fhem v0.5.38

Modul RESIDENTS für Anwesenheitserkennung und Steuerung der Anwesenheit benutzen

Schaltzustand eines Bewohners zu einer Szene hinzufügen

Aus den einzelnen Komponenten des Moduls RESIDENTS, homebridge sowie der characteristic On und der Szenensteuerung lässt sich eine gleichzeitige Steuerung der Anwesenheit und Anwesenheitserkennung basteln.

Dazu müssen folgende Schritte unternommen werden:

  • einem Bewohner aus dem Modul ROOMMATE die Steuerung über homebridgeMapping hinzufügen
  • Szene für "Ich bin zu Hause" und "Ich gehe jetzt" in einer HomeKit-fähigen App wie z.B. Eve einrichten

Man kann einen beliebigen Bewohner aus dem Modul ROOMMATE nehmen und ihn über die characteristic On in Form eines Schalters sozusagen schaltbar machen. Nur wird das Ein- und Ausschalten des Bewohners über HomeKit in FHEM auf den Status home bzw. absent gemappt. Seit dem 06.02.2016 werden RESIDENTS automatisch als Occupancy Sensor für HomeKit annonciert. Nun noch die Attribute des ROOMMATE wie folgt setzen:

attr <ROOMMATE> genericDeviceType switch
attr <ROOMMATE> homebridgeMapping On=state,valueOn=/home|awoken|asleep|gotosleep/,valueOff=/gone|absent/,cmdOn=home,cmdOff=absent

Natürlich muss der Bewohner noch dem Filter von homebridge hinzugefügt und homebridge neu gestartet werden.

Anschließend geht es in der HomeKit-fähigen App Deiner Wahl weiter. In Eve von Elgato ist von vornherein zum Beispiel vorgesehen, dass man zwei Szenen "Ich bin zuhause" und "Ich verlasse das Haus" hat. Zu diesen Szenen wird eine Aktion hinzugefügt indem der Bewohner, den das ROOMMATE-Modul meldet zur Szene hinzugefügt wird und beim Nachhausekommen "eingeschaltet" wird. Genauso wird mit der Szene "Ich verlasse das Haus" verfahren: Bewohner zur Szene hinzufügen und den Schaltvorgang auf "ausschalten" setzen.

Mit den Sprachbefehlen "Ich bin zuhause" oder "Ich verlasse das Haus" wird die entsprechende Szene eingeschaltet, homebridge schaltet über das homebridgeMapping Attribut dann den Bewohner auf "home" oder "absent".

Getestet mit

FHEM 5.7 Rev. 9893
Homebridge 0.2.16
homebridge-fhem Vorschauversion aus homebridge/homekit

Eine noch etwas bessere Schaltmöglichkeit bietet genericDeviceType security. Das Mapping für ROOMMATE sieht wie folgt aus:

attr TYPE=ROOMMATE genericDeviceType security
attr TYPE=ROOMMATE homebridgeMapping SecuritySystemCurrentState=state,values=/home|awoken/:0;;absent:1;;/asleep|gotosleep/:2;;gone:3 SecuritySystemTargetState=SecuritySystemCurrentState,cmds=0:state+home;;1:state+absent;;2:state+gotosleep;;3:state+gone,delay=1

für GUEST:

attr TYPE=GUEST genericDeviceType security
attr TYPE=GUEST homebridgeMapping SecuritySystemCurrentState=state,values=/home|awoken/:0;;absent:1;;/asleep|gotosleep/:2;;none:3 SecuritySystemTargetState=SecuritySystemCurrentState,cmds=0:state+home;;1:state+absent;;2:state+gotosleep;;3:state+none,delay=1

Homematic Luftfeuchtigkeits- und Temperatursensoren

Mit folgenden Geräten wurde folgendes Mapping erstellt und somit erfolgreich getestet:

- HM-WDS10-TH-O
- HM-WDS40-TH-I
- HM-WDS40-TH-I-2

Achtung: Hier wird genericDeviceType "TemperatureSensor" verwendet, um eine history in EVE zu erhalten. Mit einem "HumiditySensor" funktionierte dies bei den Tests (Februar 2019) nicht.

attr <THSensor> genericDeviceType TemperatureSensor
attr <THSensor>      CurrentRelativeHumidity=humidity
                     CurrentTemperature=temperature
                     StatusLowBattery=battery,values=ok:BATTERY_LEVEL_NORMAL;/^.*/:BATTERY_LEVEL_LOW
                     history:size=1024

Homematic SmokeDetector HM-SEC-SD und HM-SEC-SD2

Homebridge-Homematic-Smokedetector-Gen1 in EVE

Es sind keine Homebridge Mappings für die Rauch Meldung erforderlich.

Allerdings ist ein Mapping für den Batterie Zustand nötig, siehe Unten.


attr <SmokeDetector> genericDeviceType SmokeSensor
attr <SmokeDetector> subType smokeDetector
attr <SmokeDetector> homebridgeMapping StatusLowBattery=battery,values=ok:BATTERY_LEVEL_NORMAL;;/^.*/:BATTERY_LEVEL_LOW

Homematic Heizkörperthermostat HM-CC-RT-DN

Darstellung des HM-CC-RT-DN in der iOS App Eve
attr <HMCCRTDN_Channel2_Clima> homebridgeMapping TargetTemperature=desired-temp::desired-temp,minValue=5,maxValue=35,minStep=0.5,nocache=1
                     CurrentTemperature=BU_Heizung_01_Clima:measured-temp,nocache=1
                     StatusLowBattery=BU_Heizung_01:battery,values=ok:BATTERY_LEVEL_NORMAL;;/^.*/:BATTERY_LEVEL_LOW
                     TargetHeatingCoolingState=heatingState,values=OFF:0;;HEAT:1;;COOL:2;;AUTO:3,cmds=OFF:controlManu+off;;HEAT:controlMode+boost;;AUTO:controlMode+auto;;COOL:controlManu+17.0
                     CurrentHeatingCoolingState=heatingState,values=OFF:0;;HEAT:1;;COOL:2;;AUTO:0,valud=OFF
attr <HMCCRTDN_Channel2_Clima> siriName Robby

Dieses Mapping bezieht sich auf ein vorhandenes userReading mit dem Namen heatingState, womit Homekit die einzelnen Status nachher unterscheidet.

attr <HM-CC-RT-DN_Clima> userReadings heatingState {(ReadingsVal($NAME,"ValvePosition",0) > 0 || ReadingsVal($NAME,"desired-temp","-") eq "on") ? "HEAT" : ReadingsVal($NAME,"desired-temp","-") eq "off" ? "OFF" : ReadingsVal($NAME,"controlMode","auto") eq "auto" ? "AUTO" : (ReadingsVal($NAME,"measured-temp",20) > ReadingsVal($NAME,"desired-temp",20)) ? "COOL" : "AUTO"}

Global auf alle in FHEM angelegten HM-CC-RT-DN, lässt sich mit folgendem Befehl das userReading anlegen. Siehe Forumsthread.

attr TYPE=CUL_HM:FILTER=model=HM-CC-RT-DN:FILTER=chanNo=04 userReadings heatingState {(ReadingsVal($NAME,"ValvePosition",0) > 0 || ReadingsVal($NAME,"desired-temp","-") eq "on") ? "HEAT" : ReadingsVal($NAME,"desired-temp","-") eq "off" ? "OFF" : ReadingsVal($NAME,"controlMode","auto") eq "auto" ? "AUTO" : (ReadingsVal($NAME,"measured-temp",20) > ReadingsVal($NAME,"desired-temp",20)) ? "COOL" : "AUTO"}

Homematic IP Wandthermostat mit Schaltausgang HmIP-BWTH

attr <HmIP_BWTH_Thermostat> homebridgeMapping TargetTemperature=1.SET_POINT_TEMPERATURE::1.SET_POINT_TEMPERATURE,,minValue=17,maxValue=25,minStep=0.5,cmd=control,nocache=true
                                                 CurrentTemperature=1.ACTUAL_TEMPERATURE
                                                 CurrentHeatingCoolingState=heatingState,values=HEAT:1;COOL:2;OFF:0;AUTO:0
                                                 TargetHeatingCoolingState=heatingState,values=OFF:0;HEAT:1;COOL:2;AUTO:3,cmds=OFF:datapoint+1.CONTROL_MODE+1;HEAT:datapoint+1.BOOST_MODE+1;COOL:datapoint+1.BOOST_MODE+0;AUTO:datapoint+1.CONTROL_MODE+0
                                                 CurrentRelativeHumidity=1.HUMIDITY

Dieses Mapping bezieht sich auf ein vorhandenes userReading mit dem Namen heatingState, womit Homekit die einzelnen Status nachher unterscheidet.

attr <HmIP_BWTH_Thermostat> userReadings heatingState {(ReadingsVal($NAME,"10.STATE",0) eq 1 && ReadingsVal($NAME,"1.HEATING_COOLING",0) eq 0) ? "HEAT" : ReadingsVal($NAME,"1.SET_POINT_TEMPERATURE","-") eq "off" ? "OFF" : ReadingsVal($NAME,"1.SET_POINT_MODE","-") eq 0 ? "AUTO" : (ReadingsVal($NAME,"10.STATE",0) eq 1 && ReadingsVal($NAME,"1.HEATING_COOLING",0) eq 1) ? "COOL" : "OFF"}

Homematic Wetterstation OC3 HM-WDS100-C6-O-2

Wetterstation in EVE

Mit der EVE und den hier: [1] beschriebenen Characteristics lässt sich eine lokale Homematic OC3 Wetterstation aus FHEM einbinden:

clear
CurrentTemperature:temperature
CurrentRelativeHumidity:humidity
49C8AE5A-A3A5-41AB-BF1F-12D5654F9F41:windSpeed,name=WINDGESCHWINDIGKEIT,format=FLOAT,unit=kmh,maxValue=250,minValue=0,minStep=1
46f1284c-1912-421b-82f5-eb75008b167e:windDirection,name=WINDRICHTUNG,format=UINT8,unit=ARC_DEGREE,maxValue=360,minValue=0,minStep=1
StatusLowBattery:battery,values=ok:BATTERY_LEVEL_NORMAL;/^.*/:BATTERY_LEVEL_LOW 
ccc04890-565b-4376-b39a-3113341d9e0f:RegenmengeLast24Hours:state,name=REGEN_24h,format=FLOAT,unit=mm,maxValue=100,minValue=0,minStep=1 
10c88f40-7ec4-478c-8d5a-bd0c3cce14b7:RegenmengeLast1Hours:state,name=REGEN_1h,format=FLOAT,unit=mm,maxValue=100,minValue=0,minStep=1 
0000006B-0000-1000-8000-0026BB765291:brightness,name=BRIGHTNESS,format=FLOAT,unit=LUX,maxValue=10000,minValue=0,minStep=.0001 
cd65a9ab-85ad-494a-b2bd-2f380084134c:isRaining,name=BEDINGUNGKATEGORIE,values=0:0;1:2,format=UINT8,maxValue=3,minValue=0,minStep=1 
cd65a9ab-85ad-494a-b2bd-2f380084134d:isRaining,name=BEDINGUNG,format=STRING,values=0:-;/.*/:Regen

Roomba über THINKINGCLEANER Modul

attr <THINKINGCLEANER> genericDeviceType switch
attr <THINKINGCLEANER> homebridgeMapping clear On=state,valueOn=/^(on|dock)/,cmdOn=on,cmdOff=off,nocache=1 ChargingState=deviceStatus,values=/(_recon|_full|_trickle)$/:CHARGING;/^.*/:NOT_CHARGING
attr <THINKINGCLEANER> siriName Robby


Getestet mit

FHEM 5.7 Rev. 12680
homebridge 0.4.11
homebridge-fhem 0.2.66

Vallox Belüftungsanlage

Die Steuerung der Lüftungsgeschwindigkeit ist nur in Prozent möglich. Die Umrechnung erfolgt im Vallox Modul. Hierzu wurde das Reading FanSpeedPct hinzugefügt.

attr <Vallox> genericDeviceType Fan
attr <Vallox> homebridgeMapping clear
                     model=Vallox
                     On=PowerState,valueOn=1,readOnly=1
                     RotationSpeed=FanSpeedPct,minValue=1,maxValue=100,cmd=FanSpeedPct,delay=1

Xiaomi Vacuum Cleaner 1. Generation

XIAOMI VACUUM 1. GEN in EVE

Voraussetzung zur Verwendung der Mappings, ist ein eingebundener Staubsauger mit dem Modul 72_XiaomiDevice.

Siehe Forumsthread Das Modul muss manuell installiert werden.

attr <XIAOMI> genericDeviceType switch
attr <XIAOMI> homebridgeMapping On=state,valueOn=Cleaning,cmdOn=start,cmdOff=charge
                     RotationSpeed=fan_power,minValue=0,maxValue=90,cmd=fan_power,delay=1
                     BatteryLevel=batteryLevel,maxValue=100,minValue=0,minStep=1
                     StatusLowBattery=battery,values=ok:BATTERY_LEVEL_NORMAL;;low:BATTERY_LEVEL_LOW
                     ChargingState=state,values=Docked:NOT_CHARGING;;Charging:CHARGING;;/.*/:NOT_CHARGEABLE
                     OccupancyDetected=state,values=/Docked|Charging/:OCCUPANCY_DETECTED;;/.*/:OCCUPANCY_NOT_DETECTED
                     FilterLifeLevel=consumables_filter,minValue=0,maxValue=100
                     FilterChangeIndication=consumables_filter,values=0:CHANGE_FILTER

Roborock S50 (2. Generation des Xiaomi Vacuum Cleaners)

Roborock S50.png

Voraussetzung zur Verwendung der Mappings, ist ein eingebundener Staubsauger mit dem Modul 72_XiaomiDevice.

Siehe Forumsthread Das Modul muss manuell installiert werden.

Das folgende Mapping für den Roborook S50 beinhaltet neben den Characteristics der 1. Genration des Xiaomi Vacuum Cleaners weitere Custom Mappings. Diese werden auch auf dem Bild dargestellt. Falls das einem zu viele Informationen sind, können diese beim Einfügen einfach weggelassen oder in EVE ausgeblendet werden.

attr <XIAOMI> genericDeviceType switch
attr <XIAOMI> homebridgeMapping On=state,valueOn=Cleaning,cmdOn=start,cmdOff=charge
                     RotationSpeed=fan_power,minValue=0,maxValue=90,cmd=fan_power,delay=1
                     BatteryLevel=batteryPercent,maxValue=100,minValue=0,minStep=1
                     StatusLowBattery=batteryState,values=ok:BATTERY_LEVEL_NORMAL;;low:BATTERY_LEVEL_LOW
                     ChargingState=state,values=Docked:NOT_CHARGING;;Charging:CHARGING;;/.*/:NOT_CHARGEABLE
                     OccupancyDetected=state,values=/Docked|Charging/:OCCUPANCY_DETECTED;;/.*/:OCCUPANCY_NOT_DETECTED
                     2af6d0d0-3691-4f0d-9c9c-c1098295b1cb=consumables_sensors,name=Reinigung+Sensoren,minValue=0,maxValue=100,format=FLOAT,minStep=1,unit=%
                     fd11b965-052e-430f-b08f-206287d8bc00=consumables_filter,name=Austausch+Filter,minValue=0,maxValue=100,format=FLOAT,minStep=1,unit=%
                     fe7a8dac-dff3-4a07-8a5e-0d6abbf0df0c=consumables_main_brush,name=Austausch+Hauptbürste,minValue=0,maxValue=100,format=FLOAT,minStep=1,unit=%
                     4f9b2a22-b764-4fc1-8cd2-99383924394c=consumables_side_brush,name=Austausch+Seitenbürste,minValue=0,maxValue=100,format=FLOAT,minStep=1,unit=%
                     FilterLifeLevel=consumables_filter,minValue=0,maxValue=100
                     FilterChangeIndication=consumables_filter,values=0:CHANGE_FILTER
                     4896763a-26f7-400b-9734-2ce6564ceba2=total_clean_time,name=Lebenszeitersparnis,format=FLOAT,minStep=1,unit=h
                     82af5fd7-50a3-4ab3-81d3-1f7903de612a=total_clean_area,name=Gereinigte+Fläche,format=FLOAT,minStep=1,unit=m²
                     00d2ef14-b429-4569-8af3-c342d41cf383=total_cleans,name=Reinigungsvorgänge,format=FLOAT,minStep=1
                     e8d1027e-b068-40d5-9efd-f161b1b52774=device_firmware,name=Firmware,format=STRING

Xiaomi Fan (ältere Generationen mit Luftfeuchtigkeits- und Temperatursensor und Battery-Readings)

Xiaomi DC Pedestal Fan.png

Voraussetzung zur Verwendung der Mappings, ist ein eingebundener Ventilator mit dem Modul 72_XiaomiDevice. Siehe Forumsthread Das Modul muss manuell installiert werden.

Die ältere Generation enthält Sensoren und somit Readings für Luftfeuchtigkeit, Temperatur und auch Batteriestatus. Diese fehlen bei den neueren Generation dieses Ventilators, siehe Bilder. Da anscheinend jedes Jahr neue Generationen dieses Ventilators herausgekommen sind, ist nicht klar bis zu welcher Generation diese Sensoren enthalten waren.

Mit folgenden Geräten wurde folgendes Mapping erstellt und somit erfolgreich getestet:

- Xiaomi DC Pedestal Fan (FHEM model fehlt, Default Hostname am Router: zhimi-fan-v3)
- Liste bitte ergänzen!

Um möglichst viele Funktionen bereitzustellen, wurden auch Characteristics von anderen DeviceTypes verwendet. Erklärung zu den Characteristics:

- Die Kindersicherung (LockPhysicalControls) ist in Eve über das kleine Einstellungssymbol zu finden. 
- Mit AudioFeedback/Audio-Bestätigung werden die Töne des Lüfters ein bzw. ausgeschaltet.
- Mit NightVision/Nachtsicht werden die LEDs ein (bright) bzw. ausgeschaltet (off).
- Mit Mute/Audio wird der Windmodus von Straight zu Natural geschaltet.
- Mit TargetTiltAngle/Neigung kann der Schwenkwinkel justiert werden.
- Mit SwingMode/Schwenken kann der Schwenkmodus ein bzw. ausgeschaltet werden.
- Der Rest ist selbsterklärend.

homebridgeMapping:

attr <XIAOMI> genericDeviceType Fan
attr <XIAOMI> homebridgeMapping
                     clear
                     On:power,cmdOn=on,cmdOff=off,valueOn=on,valueOff=off
                     LockPhysicalControls=child_lock,values=on:CONTROL_LOCK_ENABLED;;off:CONTROL_LOCK_DISABLED,cmds=CONTROL_LOCK_ENABLED:child_lock+on;CONTROL_LOCK_DISABLED:child_lock+off
                     RotationSpeed=level,minValue=0,maxValue=100,cmd=level,delay=1
                     TargetTiltAngle=angle,minValue=30,maxValue=120,minStep=30,cmd=angle
                     SwingMode=angle_enable,values=on:SWING_ENABLED;;off:SWING_DISABLED,cmdOn=angle_enable+on,cmdOff=angle_enable+off
                     CurrentRelativeHumidity=humidity
                     CurrentTemperature=temperature
                     BatteryLevel=batteryPercent,maxValue=100,minValue=0,minStep=1
                     StatusLowBattery=batteryState,values=ok:BATTERY_LEVEL_NORMAL;;low:BATTERY_LEVEL_LOW
                     ChargingState=charging,values=complete:NOT_CHARGING;;progress:CHARGING;;/.*/:NOT_CHARGEABLE
                     AudioFeedback:buzzer,cmdOn=buzzer+on,cmdOff=buzzer+off,valueOn=on,valueOff=off
                     NightVision:led,cmdOn=led+off,cmdOff=led+bright,valueOn=off,valueOff=bright
                     Mute:mode,cmdOn=mode+straight,cmdOff=mode+natural,valueOn=straight,valueOff=natural
                     CurrentFanState:power,values=on:BLOWING_AIR;;off:INACTIVE;;/.*/:IDLE

Xiaomi Fan (neuere Generationen ohne Luftfeuchtigkeits- und Temperatursensor und Battery-Readings)

Xiaomi Standing Fan 2 bzw. 2S.png

Voraussetzung zur Verwendung der Mappings, ist ein eingebundener Ventilator mit dem Modul 72_XiaomiDevice. Siehe Forumsthread Das Modul muss manuell installiert werden.

Den neueren Generationen dieses Ventilators fehlen Sensoren und somit Readings für Luftfeuchtigkeit, Temperatur und auch Batteriestatus. Diese sind bei der älteren Generation dieses Ventilators enthalten, siehe vorangegangenes Beispiel.

Dieses Mapping wurde mit dem "2S" erstellt. Es sollte aber mindestens auch mit einem "Xiaomi Standing Fan 2" (ohne Akku) funktionieren, da auch der "Xiaomi Standing Fan 2S" (mit Akku) kein Reading für die Batterie bereitstellt. Ansonsten gibt es wohl auch noch Generationen zwischen dem "Xiaomi DC Pedestal Fan" und den "Xiaomi Standing Fan 2/2S". Es ist davon auszugehen, dass dieses Beispiel genauso auch bei diesen Modellen funktioniert.

Mit folgenden Geräten wurde folgendes Mapping erstellt und somit erfolgreich getestet:

- 2019 Xiaomi Standing Fan 2S (FHEM model bzw. Default Hostname am Router: zhimi-fan-za4)
- 2018 Xiaomi ZhiMiDCVariableFrequencyFan ZRFFS01ZM (FHEM model bzw. Default Hostname am Router: zhimi-fan-za1)
- Liste bitte ergänzen!

Um möglichst viele Funktionen bereitzustellen, wurden auch Characteristics von anderen DeviceTypes verwendet. Erklärung zu den Characteristics:

- Die Kindersicherung (LockPhysicalControls) ist in Eve über das kleine Einstellungssymbol zu finden. 
- Mit AudioFeedback/Audio-Bestätigung werden die Töne des Lüfters ein bzw. ausgeschaltet.
- Mit NightVision/Nachtsicht werden die LEDs ein (bright) bzw. ausgeschaltet (off).
- Mit Mute/Audio wird der Windmodus von Straight zu Natural geschaltet.
- Mit TargetTiltAngle/Neigung kann der Schwenkwinkel justiert werden.
- Mit SwingMode/Schwenken kann der Schwenkmodus ein bzw. ausgeschaltet werden.
- Der Rest ist selbsterklärend.

homebridgeMapping:

attr <XIAOMI> genericDeviceType Fan
attr <XIAOMI> homebridgeMapping 
                     clear
                     On:power,cmdOn=on,cmdOff=off,valueOn=on,valueOff=off
                     LockPhysicalControls=child_lock,values=on:CONTROL_LOCK_ENABLED;;off:CONTROL_LOCK_DISABLED,cmds=CONTROL_LOCK_ENABLED:child_lock+on;CONTROL_LOCK_DISABLED:child_lock+off
                     RotationSpeed=level,minValue=0,maxValue=100,cmd=level,delay=1
                     TargetTiltAngle=angle,minValue=30,maxValue=120,minStep=30,cmd=angle
                     SwingMode=angle_enable,values=on:SWING_ENABLED;;off:SWING_DISABLED,cmdOn=angle_enable+on,cmdOff=angle_enable+off
                     AudioFeedback:buzzer,cmdOn=buzzer+on,cmdOff=buzzer+off,valueOn=on,valueOff=off
                     NightVision:led,cmdOn=led+off,cmdOff=led+bright,valueOn=off,valueOff=bright
                     Mute:mode,cmdOn=mode+straight,cmdOff=mode+natural,valueOn=straight,valueOff=natural
                     CurrentFanState:power,values=on:BLOWING_AIR;;off:INACTIVE;;/.*/:IDLE

ZWave Türschloss Vision ZM1701 einbinden

Das ZWave Türschloss ZM1701 von der Firma Vision sendet seinen aktuellen Schließstatus in ein einzelnes Reading wie "lock", sondern schickt eine ganze Reihe von Informationen über den Zustand in das Reading doorLockOperation. Das Schließen und Öffnen der Türschlosses wird auch nicht mit einem Setzen des state erreicht, sondern mit dem Setzen von doorLockOperation. Das macht das Einbinden in homebridge nicht trivial, funktioniert aber über folgendes Homebridge-Mapping:

attr <ZM1701> genericDeviceType lock
attr <ZM1701> homebridgeMapping LockCurrentState=doorLockOperation,values=/\ssecured/:SECURED;/unsecured/:UNSECURED LockTargetState=doorLockOperation,values=/\ssecured/:SECURED;/unsecured/:UNSECURED,cmds=SECURED:doorLockOperation+close;UNSECURED:doorLockOperation+open

Kurz zur Erklärung: Um ein Schloss über HomeKit steuern zu können braucht es zwei characteristics. LockCurrentState zeigt an, ob das Schloss geöffnet oder geschlossen ist. Und mit LockTargetState wird das Schloss geöffnet oder geschlossen. Damit der aktuelle Status des Schlosses ausgelesen werden kann, muss aus dem FHEM-Reading doorLockOperation die Zeichenfolge secured oder unsecured extrahiert werden, daher die beiden regulären Ausdrücke /\ssecured/ und /unsecured/. In der characteristic LockTargetState muss sowohl der aktuelle Status des Schlosses als auch das Kommando angegeben werden, schließlich möchte man ein geschlossenes Schloss nicht nochmal schließen. Daher wird erst aus dem Reading doorLockOperation der aktuelle Status des Schlosses ausgelesen und die damit korrespondierenden Befehle über cmds=SECURED:doorLockOperation+close;UNSECURED:doorLockOperation+open generiert.

Wer es in FHEM über ein webCmd einfacher zu bedienen haben möchte, fügt bitte noch die dafür notwendigen Attribute und die leicht geänderten homebridgeMappings wie folgt ein:

attr <ZM1701> genericDeviceType lock
attr <ZM1701> homebridgeMapping LockCurrentState=doorLockOperation,values=/\ssecured/:SECURED;/unsecured/:UNSECURED LockTargetState=doorLockOperation,values=/\ssecured/:SECURED;/unsecured/:UNSECURED,cmds=SECURED:close;UNSECURED:open
attr <ZM1701> /doorLockOperation open:open/doorLockOperation close:close
attr <ZM1701> webCmd open:close

Garagentorsteuerung und Schließzustandserkennung mit einem Shelly Plus 1 anhand eines Sommer S9080 base+ Antriebs

1. Konfiguration und Installation des Shellys

Änderung des Relay Types
Shelly als Taster konfigurieren
Shelly, Garagentor Platine und Relay

Da der Shelly hierbei zwei verschiedene Aufgaben übernehmen soll, müssen zunächst die nachfolgenden Einstellungen am Shelly vorgenommen werden:

  1. Im Webend des Shellys (unter seiner IP-Adresse zu erreichen) in den Einstellungen Channel Settings > Input output settings den relay type auf "Detached" stellen. Dies hat zur Folge, dass die Eingänge für den Schalter (also da wo normalerweise z. B. der Lichtschalter angeschlossen und vom Shelly ausgewertet wird) vom internen Relay des Shellys (das z.B. den Strom zur Lampe schaltet) losgelöst wird. Somit lässt sich später der Zustand des des angeschlossenen Schalters (in diesem Beispiel der Schließzustand des Garagentors) separat auswerten ohne, dass etwas geschaltet wird.
  2. Da der Shelly zum Öffnen des Tors nur ein kurzen Stromstoß, wie beispielsweise ein Tastschalter, an die Garagentor-Elektronik schicken soll, müssen wir in den Einstellungen Timers > Auto off einen Aus-Timer einstellen. Der Shelly funktioniert somit als Taster.

Gemäß der Anleitung benötigt man beim besagten Garagentorantrieb der Firma Sommer ein weiteres Relay (als Zubehörteil erhältlich), welches einfach auf die Hauptplatine aufgesteckt wird, um den Schließzustand des Tors auszuwerten. Das Relay zieht an, sobald das Tor nicht geschlossen ist.

2. FHEM + Homebridge-Mapping

Der Shelly wird per Autocreate des MQTT2 Moduls selbstständig angelegt. In diesem Beispiel mit dem Namen shellyplus1_a8032abd6100. Das Reading "params_input_0_state" liefert uns hierbei den Wert des losgelösten Schaltereingangs (also den Schließzustand des Garagentors). Hierbei ist zu beachten, dass das Reading erst auftaucht sobald der Schalter das erste mal geschlossen (also das Garagentor geöffnet) wurde.

Die weitere Konfiguration erfolgte mit:

attr MQTT2_shellyplus1_a8032abd6100 alias Garagentor
attr MQTT2_shellyplus1_a8032abd6100 webCmd auf:zu
attr MQTT2_shellyplus1_a8032abd6100 devStateIcon 1.open:fts_garage_door_10 1.closed:fts_garage_door_100\
attr MQTT2_shellyplus1_a8032abd6100 eventMap on:auf on:zu
attr MQTT2_shellyplus1_a8032abd6100 genericDeviceType garage
attr MQTT2_shellyplus1_a8032abd6100 group Garage
attr MQTT2_shellyplus1_a8032abd6100 homebridgeMapping CurrentDoorState=homebridgestate,values=0:CLOSED;;1:OPEN TargetDoorState=CurrentDoorState,cmds=OPEN:on;;CLOSED:on
attr MQTT2_shellyplus1_a8032abd6100 icon fts_garage
attr MQTT2_shellyplus1_a8032abd6100 room Homekit
attr MQTT2_shellyplus1_a8032abd6100 stateFormat 1:TOR\
  FGStatus
   attr MQTT2_shellyplus1_a8032abd6100 userReadings TOR {(ReadingsVal($name,"params_input_0_state","true") eq "true")?"open":"closed"},\
   FGStatus {if (ReadingsVal($name,"params_input_0_state","") eq "true") {ReadingsTimestamp($name,"params_input_0_state","") =~ /^(\d+)-(\d+)-(\d+)\s(\d+:\d+):(\d+)$/;; return "Letzte Öffnung: am $3.$2.$1 um $4 Uhr"} else {ReadingsTimestamp($name,"params_input_0_state","") =~ /^(\d+)-(\d+)-(\d+)\s(\d+:\d+):(\d+)$/;; return "Letzte Schließung: am $3.$2.$1 um $4 Uhr"}},\
   homebridgestate {(ReadingsVal($name,"params_input_0_state","true") eq "true")?1:0}

Ergänzt wurde das MQTT2-Modul automatisch angelegt Attribut um die letzten beiden Zeilen (auf, zu):

attr MQTT2_shellyplus1_a8032abd6100 setList toggle:noArg $DEVICETOPIC/rpc {"id":0,"src":"fhem","method":"Switch.Toggle","params": {"id":0}}\
  off:noArg $DEVICETOPIC/rpc {"id":0,"src":"fhem","method":"Switch.Set","params": {"id":0,"on":false}}\
  on:noArg $DEVICETOPIC/rpc {"id":0,"src":"fhem","method":"Switch.Set","params": {"id":0,"on":true}}\
  on-for-timer $DEVICETOPIC/rpc {"id":0,"src":"fhem","method":"Switch.Set","params": {"id":0,"on":true,"toggle_after":$EVTPART1}}\
  x_update:noArg $DEVICETOPIC/rpc {"id":0,"src":"fhem","method":"Shelly.Update","params": {"stage":"stable"}}\
  x_reboot:noArg $DEVICETOPIC/rpc {"id":0,"src":"fhem","method":"Shelly.Reboot"}\
  auf:noArg $DEVICETOPIC/rpc {"id":0,"src":"fhem","method":"Switch.Set","params": {"id":0,"on":true}}\
  zu:noArg $DEVICETOPIC/rpc {"id":0,"src":"fhem","method":"Switch.Set","params": {"id":0,"on":false}}
Ansicht in HomeKit
Ergebnis in FHEM

Getestet mit

FHEM 6.1 Rev. 25376
homebridge 1.4.0
homebridge-fhem 0.5.33