FHEM > Sprachsteuerung

homebridge/homekit

(1/829) > >>

justme1968:
damit der alte homekit thread nicht noch länger wird gibt es jetzt diesen hier für die neue version.


hallo zusammen,

anbei eine erste test version des neuen und konfigurierbaren homebridge plugins.

zum testen ist es vermutlich am besten mit einer eigenen config.json und einem eigenen usernamen zu testen. homekit sollte dann ein zusätzliches bridge device anlegen. das index.js file muss nach ~/.nvm/versions/v0.12.7/lib/node_modules/homebridge-fhem. die alte version natürlich vorher sichern.


wie bisher müssen ein oder mehrere FHEM platform plugins im homebridge config file eingetragen werden.
neu ist das noch nicht vorhandene attribute automatisch auf fhem seite angelegt werden.

alle devices die in der alten version automatisch erkannt wurden sollten immer noch unverändert funktionieren. bei fenster und tür bin ich mir aber nicht ganz sicher. wenn nicht -> bitte melden. die häufigsten device typen sollen immer noch automatisch und ohne weiter konfiguration
funktionieren.


zusätzlich zum 'alten' automaktik modus gibt jetzt die möglichkeit die zuornungen zwischen fhem device und homekit accessory/service, zwischen fhem reading und homekit characteristic, das mapping vom fhem reading werten zu homekit werten sowie das mapping von homekit werten zu fhem set kommandos und werten völlig frei zu konfigurieren. die einzige einschränkung die es hier (zur zeit) noch gibt ist das es pro fhem device nur ein 'haupt' accessory auf homebridge seite erzeugt werden kann. es können aber sowohl homebridge accessoies aus mehreren fhem devices zusammen gebaut werden als auch mehrere accessories oder characteristics auf das gleiche reading ides gleichen device konfiguriert werden.

für alles weitere ist es sinnvoll sich einen überblick über hap-nodejs/lib/gen/HomeKitTypes.js zu verschaffen. die hier deklarierten Service und Charakteristik typen sowie konstanten lassen sich alle mit der im folgenden beschriebenen konfiguration verwenden.

auch bei diesem neuen modus ist das genericDeviceType attribut der ausgangspunkt für alles weitere. hiermit wird der homekit service typ bestimmt der einem fhem device zugeordnet wird.  zusätzlich zu den bisher verwendeten allgemeinen typen wie switch, outlet, light, ... die automatisch den entsprechenden homekit typ zugeordnet werden lässt sich hier jeder in homebridge bekannte service name verwenden.

der zweite schritt erfolgt dann über das neue homebridgeMapping attribut. der inhalt des Attributs wird von links nach rechts ausgwertet und ist wie folgt aufgebaut:
* das attribut enthält eine durch leerzeichen getrennte liste aus konfiguraionen für jeweils eine characteristic
* jede einzelne der characteristic konfiguraion besteht aus dem namen der characteristic gefolgt von einem = gefolgt von einer durch komma unterteilten liste von parametern
attr <device> homebridgeMapping <Characteristic1>=<param1.1>,<param1.2>,... <Characteristic2>=<param2.1>,<param2.2>,...

* jeder parameter besteht entweder aus
* <cmd>:<device>:<reading>
hier können nicht verwendete elemente von links nach rechts weg gelassen werden
* <name>=<value>
* dem schlüsselwort clear
löscht alle vorhandenen (default) paramter dieser characteristic
* das schlüsselwort clear kann auch an stelle einer ganzen characteristic konfiguraionen stehen
etwas formeller:
--- Code: ---attr <device> homebridgeMapping <Characteristic1>=<param1.1>,<param1.2>,... <Characteristic2>=<param2.1>,<param2.2>,...
--- Ende Code ---
<Characteristic-n> ist hierbei ein in HomeKitTypes.js deklarierer name einer characteristic
<param-n> kann entweder <command>:<device>:<reading> oder <name>=<value> oder das schlüsselwort clear sein
<value> kann entweder ein wert oder eine mit ; unterteilte liste sein

und an einem konkreten beispiel:
hier wird ein im fhem vorhandener 'virtueller' thermostat der aus
  einem (dummy) device mit namen thermostat
    mit einem reading target das die aktuelle wunsch temperatur repräsentiert
    und einem 'set target' kommando um diese zu setzen
  und einem temperatur sensor namens myTemp
    mit einem reading temperature das die aktuelle temperatur enthält
besteht auf ein homekit thermostat device abgebildet das dann über siri abfrag und steuerbar ist:
--- Code: ---attr thermostat genericDeviceType thermostat
attr thermostat homebridgeMapping TargetTemperature=target::target,minValue=18,maxValue=25,minStep=0.5
                                  CurrentTemperature=myTemp:temperature
--- Ende Code ---


die folgenden parameter namen sind für die richtung fhem -> homebridge möglich:
* minValue, maxValue, minStep: für alle int und float characteristics -> der erlaubte wertebereich in homekit
* max: der maximal wert in fhem wenn dieser von maxValue abweicht
* nocache: reading value wird nicht gecached sondern immer life abgefragt.
* subtype: eindeutiger name um mehrere identische characteristics im gleiche accessory zu unterscheiden
* threshold: schwellwert für die konvertierung von zahlen in boolean werte
* invert: invertiert das fhem reading

* part: das reading wird an leerzeichen gesplittet und der n-te teil als wert verwendet. es wird mit 0 beginnend gezählt
* values: eine durch ; getrennte liste aus <von>:<nach> werte paaren die das mapping von fhem reading werten auf homekit werte beschreibt.

* <von> kann ein wert oder eine in / eingeschlossene regex sein.

* <nach> kann ein wert oder eine in HomeKitTypes.js deklarierte konstante der characteristic sein
* valueOn, valueOff: werte die auf true/false bzw. an/aus abgebildet werden sollen. nur für bool characteristics, abkürzung zu values.
wenn nur einer von beiden angegeben ist werden alle nicht berücksichtigten werden autmatisch dem gegenteil zugeordnet.die rehenfolge der transformationen ist: eventMap, part, values, valueOn/valueOff, threshold, max, maxValue/minValue/minStep, invert

beispiel:
--- Code: ---PositionState=motor,values=/^up/:INCREASING;/^down/:DECREASING;/.*/:STOPPED On=state,valueOn=/on|dim/,valueOff=off
--- Ende Code ---


die folgende parameter namen sind für die richtung homebridge -> fhem möglich:
* delay: true/<number> -> der wert wird nach <number>ms inaktivität an fhem gesendet. true -> 1000.
* maxValue: maximal wert in homekit
* max: maximal wert in fhem  wenn er von maxValue abweicht
* invert: invertiert den homekit wert

* cmd: das set kommando das verwendet werden soll: set <device> <cmd> <value>
* cmdOn, cmdOff: die kommandos die für on/off bzw. true/false verwendet werden sollen
* (cmdLock, cmdUnlock, cmdOpen: die kommandos zum verschliessen, aufschliessen und öffnen einer tür)
* cmds: eine mit ; unterteilte list aus <von>:<nach> werte paaren die das mapping von homekit werten auf fhem kommandos beschreibt:
* <von> kann ein wert oder eine in HomeKitTypes.js deklarierte konstante der characteristic sein

* <nach> ist das zu verwendende set kommandoleerzeichen in kommandos müßen durch + ersetzt werden
die reihenfolge der transformationen ist: invert, max/maxValue
der vorrang der kommando mappings ist in aufsteigender reihenfolge: cmd, cmdOn/cmdOff, cmds

beispiel:
--- Code: ---TargetHeatingCoolingState=...,cmds=OFF:desired-temp+off;HEAT:controllMode+day;COOL:controllMode+night;AUTO:controllMode+auto
--- Ende Code ---


das ganze schaut auf den ersten blick vermutlich sehr unübersichtlich aus. es sollte aber mit etwas übung einfacher werden.

beim starten von homebridge mit --debug werden details zum mapping der werte und komamndos ausgegeben. damit kann man sich auch die im automatik modus verwendeten parameter ansehen und als ausgangspunkt für änderungen verwenden.


weitere beispiele:
1 device -> 1 service (thermometer)
--- Code: ---  attr <temp> genericDeviceType thermometer
  attr <temp> homebridgeMapping CurrentTemperature=temperature1,minValue=-30
--- Ende Code ---
wenn das reading temperature heisst statt temperature1 muss es nicht angegeben werden.

1 device -> 1 service, 2 characteristics (thermostat)
--- Code: ---  attr <thermostat> genericDeviceType thermostat
  attr <thermostat> homebridgeMapping TargetTemperature=target::target,minValue=18,maxValue=25,minStep=0.5
                                      CurrentTemperature=myTemp:temperature
--- Ende Code ---

1 device -> 2 services mit identischen characteristics (thermometer)
--- Code: ---  attr <dualTemp> genericDeviceType thermometer
  attr <dualTemp> homebridgeMapping CurrentTemperature=temperature1,minValue=-30,subtype=innen
                                    CurrentTemperature=temperature2,minValue=-30,subtype=aussen
--- Ende Code ---

n devices -> 1 service (temp + hum, dummy thermostat + temp)
--- Code: ---  attr <tempHum> genericDeviceType thermometer
  attr <tempHum> homebridgeMapping [CurrentTemperature=temperature1] CurrentRelativeHumidity=<device2>:humidity
--- Ende Code ---
wenn das reading temperature heisst statt temperature1 kann CurrentTemperature=temperature1 weg gelassen werden

1 device  -> n services (1 service per harmony activity)
--- Code: ---  attr <hub> genericDeviceType switch
  attr <hub> homebridgeMapping clear
                               On=activity,subtype=TV,valueOn=TV,cmdOn=activity+TV,cmdOff=off
                               On=activity,subtype=DVD,valueOn=/DVD/,cmdOn=activity+DVD,cmdOff=off
                               On=activity,subtype=Off,valueOn=PowerOff,valueOff=PowerOff,cmd=off
--- Ende Code ---

achtung: die zeilenenden der mehrzeiligen beispiele müssen natürlich maskiert werden wenn sie nicht im web frontend im attr text feld / popup eingegeben werden .


wenn diese konfigurierbarkeit noch nicht reicht gibt es auch die möglichkeit das mapping zwischen reading wert und homekit wert in beide richtungen durch kleine js routinen zu machen. hierzu später mehr sobald das jemand braucht :)

wenn auch das nicht reicht kann die komplette im mapping verwendete datenstruktur auch per json konfiguriert werden. auch dazu später mehr.


was in dieser version noch nicht eingebaut ist ist die konfiguration von custom characteristics (d.h. solche für die es in HomeKitTypes.js keine vorbereitet deklaration gibt) wie volume oder actuation. das kommt noch.

zum zeitplan: ich räume den code in den nächsten tagen noch auf, schmeisse so weit es geht alle internen sonderbehandlungen noch raus und warte dann gespannt was noch alles fehlt :) und fehlerfrei ist es sicher auch noch nicht.

gruss
  andre

edit 01.02.2016:
- cmdOn/cmdOff bug fix
- wenn kein reading angegeben wird ist jetzt state der default
- devices with mit einem attribut setList in dem es genau zwei einträge gibt werden automatisch zum switch
- mit dem ersten eintrag als on zustand und dem zweiten als off zustand.
  bug fix für die abfrage der werte aus dem cache

edit 02.02.2016:
- neuer parameter factor für die richtung reading -> homekit wird das reading mit diesem faktor multipliziert
- custom characteristics eingebaut, neue parameter name, format, unit
- elgato eve custom characteristics für voltage, current, power and energy
- neue parameter default und timeout -> erlaubt die simulation eines tasters z.b. für den türoffner.
- diverse default characteristics intern auf konfigurierbare mappings umgestellt
- bug fix für frei konfigurierbare thermostate

edit 03.02.2016:
- minValue/maxValue/minStep fix
- ausgabe des symbolischen homekit namens nach umwandlung aus einem reading
- eve custom air pressure characteristic
- PRESENCE/ROOMMATE fix
- fixed identify after pairing
- fixed bug in caching internal readings without own characteristic

edit 06.02.2016:
- fix für dim
- alle automatisch erkannten characteristics verwenden jetzt die konfigurierbaren mappings
- diverse fixes für log nachrichten
- ROOMMATE fix

edit 07.02.2016:
- bessere erkennung von WifiLight, HSV kommando statt RGB
- MilightDevice hinzugefügt
- fix für TargetDoorState taster bei HM-SEC-KEY
- mehr HM-SEC-KEY fixes

edit 11.02.2016:
- die hier beschriebene version ist eingecheckt und per npm update zu bekommen.

DeeSPe:

--- Zitat von: justme1968 am 01 Februar 2016, 16:18:09 ---du hast das homebridgeMapping attribut noch nicht gesetzt. da sollte etwas in der art drin stehen:
--- Code: ---attr Schlafengehen homebridgeMapping On:valueOn=gotosleep,cmdOn=gotosleep,cmdOff=home
--- Ende Code ---

--- Ende Zitat ---

Habe es mal hinzugefügt, funktioniert leider trotzdem nicht.

--- Code: ---Internals:
   NAME       Schlafengehen
   NR         118
   STATE      home
   TYPE       dummy
   Readings:
     2016-02-01 16:13:49   state           home
Attributes:
   alias      Schlafmodus
   genericDeviceType switch
   group      Zuhause Status
   homebridgeMapping On:valueOn=gotosleep,cmdOn=gotosleep,cmdOff=home
   room       Anwesenheit,HomeKit
   setList    gotosleep home
   webCmd     gotosleep:home
--- Ende Code ---

Sehe auch keine Meldung auf der Homebridge Console beim Schalten in Eve.

Dabei ist mir gerade aufgefallen dass meine ganzen Schalter nicht mehr funktionieren, die vorher immer gingen:

--- Code: ---[FHEM] ku_Abwaschlicht sending command set with value off
[FHEM]   executing: http://127.0.0.1:8083/fhem?cmd=undefined&XHR=1
[FHEM] ku_Abwaschlicht sending command set with value on
[FHEM]   executing: http://127.0.0.1:8083/fhem?cmd=undefined&XHR=1
[FHEM] ku_Deckenlicht sending command set with value on
[FHEM]   executing: http://127.0.0.1:8083/fhem?cmd=undefined&XHR=1
[FHEM] ku_Deckenlicht sending command set with value off
[FHEM]   executing: http://127.0.0.1:8083/fhem?cmd=undefined&XHR=1
--- Ende Code ---

Muss ich jetzt überall das homebridgeMapping setzen? Eigentlich sollten doch bestehende Geräte weiter funktionieren.

Hast Du an der Version hier schon wieder Änderungen verbaut oder ist das die aus dem anderen Thema?

justme1968:
in der version oben ist nur das problem mit der debug meldung repariert.

im attribut war noch ein fehler drin:
--- Code: ---attr Schlafengehen homebridgeMapping On=valueOn=gotosleep,cmdOn=gotosleep,cmdOff=home
--- Ende Code ---

das hoembridgeMapping musst du nur dann setzen wenn du nicht on und off bei einem switch verwendest.

gruss
  andre

DeeSPe:
Okay, jetzt reagiert Homebridge zwar auf den Schalter, aber schalten tut der und alle anderen Schalter trotzdem nicht.


--- Code: ---[FHEM] Schlafengehen sending command set with value gotosleep
[FHEM]   executing: http://127.0.0.1:8083/fhem?cmd=undefined&XHR=1
[FHEM] Schlafengehen sending command set with value home
[FHEM]   executing: http://127.0.0.1:8083/fhem?cmd=undefined&XHR=1
--- Ende Code ---

justme1968:
ups. da ist an einer stelle noch ein doppeltes mapping im code. das kann so nicht gehen.

ich habe die version oben noch mal aktualisiert.

danke
  andre

Navigation

[0] Themen-Index

[#] Nächste Seite

Zur normalen Ansicht wechseln