Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

universal Accessory #44

Closed
hobbyquaker opened this issue Oct 13, 2018 · 12 comments
Closed

universal Accessory #44

hobbyquaker opened this issue Oct 13, 2018 · 12 comments
Assignees
Milestone

Comments

@hobbyquaker
Copy link
Member

Frei konfigurierbar mit allen in https://github.com/KhaosT/HAP-NodeJS/blob/master/lib/gen/HomeKitTypes.js definierten Services.

@ptweety
Copy link
Contributor

ptweety commented Oct 18, 2018

Frage hierzu: kann man sich das dann so wie hier vorstellen (nur ohne den Bridge Node)?

@hobbyquaker
Copy link
Member Author

Jupp, so in der Art stell ichs mir vor.

hobbyquaker added a commit that referenced this issue Oct 19, 2018
@hobbyquaker
Copy link
Member Author

Mal ein erster Anlauf. Man kann beliebig viele Services zum Accessory hinzufügen. Die Zahl in der Spalte ganz links gibt den "Subtype" an, der steckt dann in msg.topic. Legt man z.B. einen Switch an mit Subtype 0 und möchte die On Characteristic auf true setzen muss man eine message in der Form {"topic":"0/On", "payload":true} schicken. Verfügbare Characteristics sind hier zu finden: https://github.com/KhaosT/HAP-NodeJS/blob/master/lib/gen/HomeKitTypes.js
Sendet man ein Object als payload wird setProps auf der Characteristic mit dem Object aufgerufen, das ist z.B. nötig um bei einem TemperaturSensor der auch Temperaturen unter 0 Anzeigen können soll die Property minValue zu zu setzen. Doku folgt asap ;-)

@ptweety
Copy link
Contributor

ptweety commented Oct 20, 2018

Beim testen ist mir aufgefallen, dass bei jedem Update des Accessory ein neues Geräte angelegt wird. Alte Geräte werden nicht gelöscht. Man muss RedMatic neu starten, dann ist es wieder ok.

@ptweety
Copy link
Contributor

ptweety commented Oct 20, 2018

BTW: welchen Use Case hast du denn im Hinterkopf für den man mehrere Geräte in ein Accessory reinpacken muss? Ich hätte das universal Accessory einfach als Ersatz für all die individuellen Accessories gesehen, die du bisher implementiert hast.

@hobbyquaker
Copy link
Member Author

Naja, es gibt ein Limit von 100 Accessories je Bridge. Mit "Multi-Service-Accessories" hat man da mehr Luft. Außerdem gibt es bestimmte Services die zwingendermaßen in einem Accessory gruppiert werden müssen, so z.B. der BatteryService der nur als "Zusatzservice" Sinn ergibt oder der StatelessProgrammableSwitch wenn man mehrere Tasten auf einem Accessory haben will. Eigentlich empfehle ich wenn möglich immer soviele Services wie möglich in ein Accessory zu packen - allerdings gibt es einen Grund warum das nicht immer machbar ist: Alle Services eines Accessory können nur im selben Raum existieren, verschiebt man in der Home App ein Service in einen anderen Raum wandern alle anderen automatisch mit.

@ptweety
Copy link
Contributor

ptweety commented Oct 20, 2018

Ah, ok. Ich übersetze das für mich mal so: Ich habe im Wohnzimmer 4 Lampen mit insgesamt 8 Leuchtmitteln.
a) Ich lege ein accessory Universal mit 8 Lightbulbs an und gruppiere diese dann in der Home app nach den Lampen
b) ich lege pro Lampe ein accessory Universal an und darin dann die entsprechenden Leuchtmittel. In der Home app gruppiere ich dann ebenfalls die Leuchtmittel

Kannst du bitte noch erklären, wie man zu einem LightBulb (On/Off) noch die Characteristics Hue, Saturation, Brightness hinzufügen kann?

@hobbyquaker
Copy link
Member Author

hobbyquaker commented Oct 20, 2018

Optionale Characteristiken aktivierst einfach mit einer Nachricht direkt beim Start von Node-RED. Falls die Nodes die Du daran anschließt keine Nachricht nach dem Deploy schicken kannst ein Inject Node zur Hilfe nehmen dafür.

image

Hab allerdings eben noch ein Bug entdeckt, optionale Characteristiken erzeugen noch keine Msg am Output, wird asap gefixt. Gefixt in RedMatic 1.7.10

@ptweety
Copy link
Contributor

ptweety commented Oct 20, 2018

Noch eine Anmerkung: der Node heißt immer Universal, selbst wenn man ihm einen neuen Namen im entsprechend vorgesehenen Feld gibt.

@hobbyquaker
Copy link
Member Author

Das mit den Namen sollte in 1.7.11 gefixt sein

@ptweety
Copy link
Contributor

ptweety commented Oct 22, 2018

Puh! Ich habe mal damit rumgespielt und einen m.E. funktionierenden flow für mein Setup gebastelt. Vielleicht kann das ja auch als Beispiel für andere herhalten (version ist noch 1.7.10.; zusätzlicher node: node-red-contrib-node-hue welcher zuverlässiger funktioniert als huemagic):

flow

[{"id":"12e3d399.1b6e6c","type":"comment","z":"9b81c069.8aaaf8","name":"Wohnzimmer","info":"","x":90,"y":40,"wires":[]},{"id":"eb58283f.8bc548","type":"ccu-rpc-event","z":"9b81c069.8aaaf8","name":"","iface":"HmIP-RF","ccuConfig":"38263145.35ea0e","rooms":"","roomsRx":"str","functions":"","functionsRx":"str","device":"<deviceId>","deviceRx":"str","deviceName":"","deviceNameRx":"str","deviceType":"","deviceTypeRx":"str","channel":"","channelRx":"str","channelName":"","channelNameRx":"str","channelType":"","channelTypeRx":"str","datapoint":"PRESS_SHORT|PRESS_LONG","datapointRx":"re","change":false,"working":false,"cache":false,"topic":"${channelIndex}/${datapoint}","x":600,"y":80,"wires":[["fefdf4c9.709d2"]]},{"id":"fefdf4c9.709d2","type":"function","z":"9b81c069.8aaaf8","name":"switch","func":"// no output for any subsequent msg\nif ( msg.ts - msg.tsPrevious < 1000 ) {\n    return [ msg, null, null ];\n}\n\n// switch on\nif ( msg.channelIndex === 2 ) {\n    if ( msg.datapoint === \"PRESS_SHORT\" ) {\n        return [ msg,\n                 { payload: { on: true, brightness: 100 } },\n                 null\n                ];\n    } else {\n        return [ msg,\n                 { payload: { on: true, brightness: 33 } },\n                 { payload: { on: true, brightness: 25 } }\n                ];\n    }\n}\n\n// switch off\nelse {\n    return [ msg,\n             { payload: false },\n             ( msg.datapoint === \"PRESS_SHORT\" ) ? null : { payload: false }\n            ];\n}","outputs":3,"noerr":0,"x":730,"y":80,"wires":[["f561d806.c8d5a8"],["b355b0b5.c6fd88"],["31e6aac6.b0f2f6","70c7b2d6.306ce4","119034a0.48b423"]],"outputLabels":["original","primary","secondary"]},{"id":"f561d806.c8d5a8","type":"debug","z":"9b81c069.8aaaf8","name":"","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","x":890,"y":40,"wires":[]},{"id":"156d3490.a93f2b","type":"redmatic-homekit-universal","z":"9b81c069.8aaaf8","bridgeConfig":"22728ad7.c1fa96","name":"Wohnzimmer","services":[{"subtype":"0","service":"Lightbulb","name":"Deckenlampe"},{"subtype":"1","service":"Lightbulb","name":"Stehlampe Links"},{"subtype":"2","service":"Lightbulb","name":"Stehlampe Rechts"},{"subtype":"3","service":"Lightbulb","name":"Tischlampe"}],"x":440,"y":140,"wires":[["56d8001a.d7c7f"]]},{"id":"4e6373ff.1164dc","type":"split","z":"9b81c069.8aaaf8","name":"","splt":"\\n","spltType":"str","arraySplt":"1","arraySpltType":"len","stream":false,"addname":"topic","x":390,"y":60,"wires":[["91d79f59.eca7c8"]]},{"id":"6a7c880a.16292","type":"inject","z":"9b81c069.8aaaf8","name":"","topic":"","payload":"{\"0/Brightness\":\"100\",\"0/ColorTemperature\":\"400\",\"1/Brightness\":\"100\",\"1/ColorTemperature\":\"400\",\"2/Brightness\":\"100\",\"2/ColorTemperature\":\"400\",\"3/Brightness\":\"25\",\"3/ColorTemperature\":\"400\",\"3/Hue\":\"360\",\"3/Saturation\":\"100\"}","payloadType":"json","repeat":"","crontab":"","once":true,"onceDelay":0.1,"x":270,"y":60,"wires":[["4e6373ff.1164dc"]]},{"id":"91d79f59.eca7c8","type":"change","z":"9b81c069.8aaaf8","name":"delete","rules":[{"t":"delete","p":"parts","pt":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":410,"y":100,"wires":[["156d3490.a93f2b"]]},{"id":"bcd8c506.a749","type":"function","z":"9b81c069.8aaaf8","name":"modify","func":"function swap(a) {\n  var ret = {};\n  for(var key in a){\n    ret[a[key]] = key;\n  }\n  return ret;\n}\n\nvar ids = swap([8, 10, 9, 2]);\nvar id = ids[msg.info.id];\n\nvar cm = msg.info.capability.indexOf(msg.state.colormode);\n\nnode.status({fill:\"blue\",shape:\"dot\",text: id+\" (cm: \"+msg.info.capability[cm]+\")\"});\n\nreturn [[\n  { topic: id+\"/On\", payload: msg.payload.on},\n  [\"bri\", \"ct\"].includes(msg.info.capability[cm]) ?\n    { topic: id+\"/Brightness\", payload: msg.payload.bri} : undefined,\n  [\"ct\"].includes(msg.info.capability[cm]) ?\n    { topic: id+\"/ColorTemperature\", payload: msg.payload.ct} : undefined,\n  [\"hs\"].includes(msg.info.capability[cm]) ?\n    { topic: id+\"/Hue\", payload: msg.payload.hsv[0]} : undefined,\n  [\"hs\"].includes(msg.info.capability[cm]) ?\n    { topic: id+\"/Saturation\", payload: msg.payload.hsv[1]} : undefined\n]];","outputs":1,"noerr":0,"x":270,"y":140,"wires":[["156d3490.a93f2b"]],"outputLabels":["original"]},{"id":"1cd0e169.f5f277","type":"node-hue-out","z":"9b81c069.8aaaf8","server":"d6dfc4f6.151418","lightID":"group8","name":"Decke","x":110,"y":80,"wires":[["bcd8c506.a749"]]},{"id":"b355b0b5.c6fd88","type":"node-hue-in","z":"9b81c069.8aaaf8","server":"d6dfc4f6.151418","lightID":"group8","name":"Decke","x":890,"y":80,"wires":[]},{"id":"31e6aac6.b0f2f6","type":"node-hue-in","z":"9b81c069.8aaaf8","server":"d6dfc4f6.151418","lightID":"group10","name":"Steh L","x":890,"y":120,"wires":[]},{"id":"70c7b2d6.306ce4","type":"node-hue-in","z":"9b81c069.8aaaf8","server":"d6dfc4f6.151418","lightID":"group9","name":"Steh R","x":890,"y":160,"wires":[]},{"id":"119034a0.48b423","type":"node-hue-in","z":"9b81c069.8aaaf8","server":"d6dfc4f6.151418","lightID":"light2","name":"Tisch","x":890,"y":200,"wires":[]},{"id":"fb9e7346.a0d21","type":"node-hue-out","z":"9b81c069.8aaaf8","server":"d6dfc4f6.151418","lightID":"group10","name":"Steh L","x":110,"y":120,"wires":[["bcd8c506.a749"]]},{"id":"530e0637.9b8aa8","type":"node-hue-out","z":"9b81c069.8aaaf8","server":"d6dfc4f6.151418","lightID":"group9","name":"Steh R","x":110,"y":160,"wires":[["bcd8c506.a749"]]},{"id":"b956664b.ca9cd","type":"node-hue-out","z":"9b81c069.8aaaf8","server":"d6dfc4f6.151418","lightID":"light2","name":"Tisch","x":110,"y":200,"wires":[["bcd8c506.a749"]]},{"id":"f80386ef.b88e28","type":"switch","z":"9b81c069.8aaaf8","name":"","property":"id","propertyType":"msg","rules":[{"t":"eq","v":"8","vt":"num"},{"t":"eq","v":"10","vt":"num"},{"t":"eq","v":"9","vt":"num"},{"t":"eq","v":"2","vt":"num"}],"checkall":"true","repair":false,"outputs":4,"x":730,"y":140,"wires":[["b355b0b5.c6fd88"],["31e6aac6.b0f2f6"],["70c7b2d6.306ce4"],["119034a0.48b423"]]},{"id":"56d8001a.d7c7f","type":"function","z":"9b81c069.8aaaf8","name":"modify","func":"var ids = [8, 10, 9, 2];\nvar id = ids[msg.topic.split(\"/\")[0]];\nvar ops = {\"On\": \"on\", \"Brightness\": \"bri\", \"ColorTemperature\": \"ct\", \"Hue\": \"hue\", \"Saturation\": \"sat\"};\nvar op = ops[msg.topic.split(\"/\")[1]];\n\nnode.status({fill:\"blue\",shape:\"dot\",text: id+\" (\"+op+\": \"+msg.payload+\")\"});\n\nreturn [\n    { id: id, payload: {[op]: msg.payload} }\n];","outputs":1,"noerr":0,"x":590,"y":140,"wires":[["f80386ef.b88e28"]],"outputLabels":["original"]},{"id":"38263145.35ea0e","type":"ccu-connection","z":"","name":"ccu3","host":"127.0.0.1","regaEnabled":true,"bcrfEnabled":true,"iprfEnabled":true,"virtEnabled":true,"bcwiEnabled":false,"cuxdEnabled":false,"regaPoll":true,"regaInterval":"30","rpcPingTimeout":"60","rpcInitAddress":"","rpcServerHost":"127.0.0.1","rpcBinPort":"2064","rpcXmlPort":"2065","contextStore":""},{"id":"22728ad7.c1fa96","type":"redmatic-homekit-bridge","z":"","name":"RedMatic Bridge","username":"CC:22:3D:E3:CE:C7","pincode":"031-45-154","port":"51826"},{"id":"d6dfc4f6.151418","type":"node-hue-bridge","z":"","name":"Hue Bridge","address":"192.168.178.5","key":"Jd69bsh0qB5pl-B4mtyhjLjG1-aN4hYuUzAC3cje","interval":"3000"}]

@habeck76
Copy link

Kurze Frage: Ist es Möglich die maxValue der TargetTemperature eines Thermostats oder HeaterCoolers im Flow zu erhöhen. Ich würde gerne die Soll- und Istwerte meiner Heizkreisläufe darüber abbilden. @hobbyquaker: Du hattest oben mal etwas in der Richtung erwähnt. Danke!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Development

No branches or pull requests

3 participants