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

redmatic-homekit-universal lightbulb für Farblampen #104

Open
thinkcase opened this issue Jan 4, 2019 · 18 comments
Open

redmatic-homekit-universal lightbulb für Farblampen #104

thinkcase opened this issue Jan 4, 2019 · 18 comments
Labels
✋help wanted Extra attention is needed ❓question Further information is requested

Comments

@thinkcase
Copy link

Ich versuche gerade eine innr Farblampe in HomeKit einzubinden, finde im redmatic-homekit-universal node jedoch nur die Möglichkeit eine normale lightbulb einzurichten, die ich in HomeKit dann nur Ein-, Ausschalten und Dimmen kann.

GIbt es eine Chance mit dem node auch die Farbauswahl in der Home-App von HomeKit zu ermöglichen?

@hobbyquaker
Copy link
Member

Jap, Du musst die optionalen Characteristicen einfach einmal auf "irgendwas" setzen und dann erscheinen Sie bei dem Service auch. Siehe #44 (comment)

@hobbyquaker hobbyquaker added the ❓question Further information is requested label Jan 6, 2019
@thinkcase
Copy link
Author

thinkcase commented Jan 6, 2019

Danke mal für die Info, noch klappt es bei mir leider nicht:

Hab eine "universal node" auf 0 mit "Lightbulb" eingerichtet, und einen Inject davor mit Payload (JSON): {"0/Brightness":"100","0/ColorTemperature":"400"}.

Erhalte jedoch die Fehlermeldung: msg : string[16] -> "unknown subtype"

@hobbyquaker
Copy link
Member

zeig ma bitte screenshots und ein flow export

@thinkcase
Copy link
Author

bildschirmfoto 2019-01-06 um 20 59 05

@thinkcase
Copy link
Author

bildschirmfoto 2019-01-08 um 20 11 37

Ich hab die Adresse der Bridge unkenntlich gemacht. Den flow hätte ich dir bereits per Email geschickt, da ich zu wenig Ahnung davon habe, ob da sensible Daten meines Netzwerks drinnen stehen. Hast du die Mail nicht erhalten?

@hobbyquaker
Copy link
Member

Ich hab grad garnicht im Kopf ob man so mehrere Charakteristiken mit JSON payload setzen kann, muss ich nachschauen. Was aber auf jeden Fall gehen sollte ist dass Du jede Charakteristik einzeln setzt - ohne JSON, einfach mit einer Message in der Form

{
  "topic": "0/Brightness",
  "payload": 0
}

In einem Inject Node also so:
image
Mail kam an - aber der hobbyquaker-Account leidet grade unter mangelnder Disziplin und Übersicht ;-)

@thinkcase
Copy link
Author

Danke – das hat zumindest mal soweit geklappt, dass ich in HomeKit jetzt eine Farbanzeige hab. Leider schaltet die noch nichts. Für mich sieht das auch eher nach einer Steuerung für eine Lampe mit unterschiedlichen Weißbereichen aus (da ich in Homekit nur zwischen Farben von Blauweiß bis Orange auswählen kann).

Ich hab mal die Farblampe ausgelesen und erhalte folgende Werte:
bildschirmfoto 2019-01-08 um 21 44 12

@thinkcase
Copy link
Author

Ich hab jetzt noch die Charakteristiken 0/Hue und 0/Saturation hinzugefügt. Damit hab ich jetzt zwar auch das volle Farbspektrum, meine Einstellungen in HomeKit haben jedoch keine Auswirkung auf die Lampe. Nur Ein und Aus klappt.

@thinkcase
Copy link
Author

Ich hab jetzt die Hue-Node gewechselt, statt "node-red-contrib-huemagic" verwende ich nun "node-red-contrib-node-hue".

Damit klappt nun zumindest das Dimmen. Farben werden aber auch nicht gewechselt (wobei manche Farben zumindest die Helligkeit verändern, aber nicht den Farbwert!).

@habeck76
Copy link

Mit den Huemagic-Nodes funktioniert das einwandfrei. Du kannst den Flow nicht nur so konfigurieren, dass du On, Brightness + ColorTemperature an die Lampe übermittelst, sondern du kannst die Werte auch zurück in die Lightbulp holen. D.h. wenn du über die Hue-App oder manuell schaltest, holst du die aktuellen Werte auch direkt ins Homekit. Wichtig zu wissen ist, dass die Light-Node nur zuverlässig mit original Hue-Lampen funktioniert. Wenn keine Philips Geräte eingesetzt werden, funktioniert das aber immer top über die Groups. Saturation hat bei mir auch keinen Effekt. Das mit dem Farbwert bei den RGB-Lampen habe ich aber auch noch nicht hinbekommen. Problem ist ist die Umwandlung des HUE-Wertes in RGB oder HEX. Vielleicht kann da jemand helfen?

@thinkcase
Copy link
Author

thinkcase commented Jan 15, 2019

Wie in meinem Ausgangspost geschrieben, verwende ich innr Farblampen und da klappt aktuell nur Ein/Aus + Helligkeit.

Kannst du mir das mit den Groups bitte näher erklären?

Deinem Request schließe ich mich an, und verweise mal auf den Blogpost: https://www.imakeyouintelligent.com/node-red-nicht-homekit-zertifizierte-lampen-an-homekit-anbinden-via-hue-teil1/

Leider dürfte der Code von der Blogsoftware verändert worden sein und ist nicht zu verwenden. Der Autor hat bisher leider auch auf meine Email-Anfrage nicht reagiert.

EDIT: Ich hab es jetzt mit einer offiziellen HUE Lampe probiert und konnte damit auch keine Änderung der Farbe bewirken.

@hobbyquaker
Copy link
Member

Vorneweg: Die Hue Charcteristik von HomeKit hat einen Wertebereich von 0-360, der Hue Wert den die Philips-API ausspuckt von 0-65535 für Philips Lampen und 0-65400 für Osram Lampen. Sprich das muss umgerechnet werden via einfachem Dreisatz in einem Function Node. Saturation muss glaube ich auch umgerechnet werden, ColorTemperature kann man iirc 1:1 durchreichen. Ich bastel mal ein Beispielflow bei Gelegenheit.
Die Huemagic Nodes sind für den Anwendungsfall etwas dämlich, die geben den Hue Wert gar nicht raus seh ich grade... Umständlich dass wieder zurückzurechnen in ein Hue/Sat/Bri Wert, aber machbar. Ich denk mal drüber nach. Vielleicht gibt es auch andere Hue-Nodes für Node-RED die den Hue Wert rausgeben, ansonsten könnt man bei Hue-Magic auch mal ein PR stellen.

@hobbyquaker hobbyquaker added ✋help wanted Extra attention is needed and removed ⏳awaiting-feedback labels Jan 15, 2019
@thinkcase
Copy link
Author

bildschirmfoto 2019-01-15 um 18 45 41

Hier einmal ein Test mit zwei unterschiedlichen Lampen und zwei verschiedenen Nodes. Bei Verwendung von "node-red-contrib-huemagic" funktioniert nur Ein/Aus, bei "node-red-contrib-node-hue" zusätzlich auch die Helligkeit. Farbe geht bei beiden nicht.

@hobbyquaker
Copy link
Member

Ja, so einfach ists leider nicht. Zwischen das universal accessory und die HueMagic Nodes müssen definitiv noch change/function Nodes die die Topics/Payloads anpassen. Gebt mir etwas Zeit, ich mach n Beispielflow.

@ptweety
Copy link
Contributor

ptweety commented Jan 15, 2019

Den gibt es doch schon hier #44 (comment)

@hobbyquaker
Copy link
Member

ah top, ganz vergessen. magst den mal ins wiki kopieren?

@thinkcase
Copy link
Author

Ich hab es damit jetzt tatsächlich auch hinbekommen.

Ich musste jedoch ColorTemperature entfernen, da ich sonst ein falsches Farbspektrum in der Farbauswahl/Temperatur in HomeKit erhalte und die Farbauswahl dann verbuggt ist.

Mit einem inject von ColorTemperature ist die Farbtemperatur von Orange bis Weiß möglich, ohne von Orange bis Blau.

Also mein inject sieht jetzt so aus für 2 Lampen:

{"0/Brightness":"100","0/Hue":"360","0/Saturation":"100",
"1/Brightness":"100","1/Hue":"360","1/Saturation":"100"}

@ptweety
Copy link
Contributor

ptweety commented Jan 15, 2019

@hobbyquaker` ich habe mal etwas Text dazu geschrieben und das Beispiel sowohl für node-red-contrib-node-hue als auch node-red-contrib-huemagic gebaut.

kannst du bitte mal drüberschauen und eine kleine Qualitätssicherung machen?

[{"id":"e65ca9c2.4b0b68","type":"comment","z":"d1553ba8.467ce","name":"Wohnzimmer - Beispiel (node-red-contrib-node-hue)","info":"Voraussetzungen:\n- Philips Hue Bridge\n- Lampen(-gruppen) in Hue-App definiert\n\nZiel:\n- Alle Lampen(-gruppen) sind in der Hue- und in der Home-App steuerbar und synchron\n\nVorbereitung:\n- Hue Bridge in jedem hue node neu erstellen oder auswählen\n- Gruppe oder Licht auswählen und die ID merken\n- Homekit Bridge im universal accessory neu erstellen oder auswählen\n- Pro Gruppe oder Licht einen lightbulb anlegen\n\nWichtig:\n- Die Reihenfolge der Gruppen oder Lampen ist ab jetzt entscheidend\n- Im Beispiel sind die Gruppen 8, 10, 9 und das Licht 2 den lightbulbs 0, 1, 2, 3 zugeordnet\n\nAnpassungen:\n- Im inject node \"init\" sind nun pro Gruppe oder Licht die jeweiligen Fähigkeiten zu definieren\n- In jedem function node \"modify\" ist das array der Gruppen und Lichter an deine Nummern anzupassen. Aus [8, 10, 9, 2] wird dann evtl. [21, 1, 7] oder [15, 14, 4, 9, 32]\n- Im change node \"route\" ist pro lightbulb eine Zeile anzulegen. Auch hier wieder ist die Reihenfolge von 0,..,3 den Gruppen und Lichter zuzuordnen","x":270,"y":100,"wires":[]},{"id":"a78546de.06ea18","type":"redmatic-homekit-universal","z":"d1553ba8.467ce","bridgeConfig":"","name":"Wohnen","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":500,"y":200,"wires":[["30e83299.512146"]]},{"id":"98b312b7.219728","type":"split","z":"d1553ba8.467ce","name":"","splt":"\\n","spltType":"str","arraySplt":"1","arraySpltType":"len","stream":false,"addname":"topic","x":470,"y":140,"wires":[["a78546de.06ea18"]]},{"id":"5d94178d.00b7f8","type":"inject","z":"d1553ba8.467ce","name":"init","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":330,"y":140,"wires":[["98b312b7.219728"]]},{"id":"459921fd.e53188","type":"function","z":"d1553ba8.467ce","name":"modify","func":"const id = [8, 10, 9, 2].indexOf(parseInt(msg.info.id));\nconst cm = msg.info.capability.indexOf(msg.state.colormode);\n\nif (id >- 1) {\n  node.status({fill:\"blue\",shape:\"dot\",text: id+\" (cm: \"+msg.info.capability[cm]+\")\"});\n\n  return [[\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  ]];\n} else {\n  node.status({});\n}","outputs":1,"noerr":0,"x":330,"y":200,"wires":[["a78546de.06ea18"]],"outputLabels":["original"]},{"id":"283fdbce.69a5f4","type":"node-hue-out","z":"d1553ba8.467ce","server":"","lightID":"<GroupId>","name":"Decke","x":170,"y":140,"wires":[["459921fd.e53188"]]},{"id":"e3cfda87.8d777","type":"node-hue-in","z":"d1553ba8.467ce","server":"","lightID":"<GroupId>","name":"Decke","x":950,"y":140,"wires":[]},{"id":"e0210296.43c52","type":"node-hue-in","z":"d1553ba8.467ce","server":"","lightID":"<GroupId>","name":"Steh L","x":950,"y":180,"wires":[]},{"id":"ba4fa06a.9d5f5","type":"node-hue-in","z":"d1553ba8.467ce","server":"","lightID":"<GroupId>","name":"Steh R","x":950,"y":220,"wires":[]},{"id":"1306637c.fd7d0d","type":"node-hue-in","z":"d1553ba8.467ce","server":"","lightID":"<LightId>","name":"Tisch","x":950,"y":260,"wires":[]},{"id":"3e269a1c.ec9a66","type":"node-hue-out","z":"d1553ba8.467ce","server":"","lightID":"<GroupId>","name":"Steh L","x":170,"y":180,"wires":[["459921fd.e53188"]]},{"id":"e8096b2f.16e0e8","type":"node-hue-out","z":"d1553ba8.467ce","server":"","lightID":"<GroupId>","name":"Steh R","x":170,"y":220,"wires":[["459921fd.e53188"]]},{"id":"bc10d8c9.e0697","type":"node-hue-out","z":"d1553ba8.467ce","server":"","lightID":"<LightId>","name":"Tisch","x":170,"y":260,"wires":[["459921fd.e53188"]]},{"id":"30e83299.512146","type":"function","z":"d1553ba8.467ce","name":"modify","func":"const ids = [8, 10, 9, 2];\nconst ops = {\n  'On': 'on',\n  'Brightness': 'bri',\n  'ColorTemperature': 'ct',\n  'Hue': 'hue',\n  'Saturation': 'sat'\n};\n\nif (ids[msg.topic.split('/')[0]] && ops[msg.topic.split('/')[1]]) {\n  let id = ids[msg.topic.split('/')[0]];\n  let op = ops[msg.topic.split('/')[1]];\n\n  node.status({fill:\"blue\",shape:\"dot\",text: id+\" (\"+op+\": \"+msg.payload+\")\"});\n\n  return [\n    { id: id, payload: {[op]: msg.payload} }\n  ];\n} else {\n  node.status({});\n}","outputs":1,"noerr":0,"x":650,"y":200,"wires":[["28488385.9a861c"]],"outputLabels":["original"]},{"id":"26f7b6ec.56056a","type":"comment","z":"d1553ba8.467ce","name":"Wohnzimmer - Beispiel (node-red-contrib-huemagic)","info":"Voraussetzungen:\n- Philips Hue Bridge\n- Lampen(-gruppen) in Hue-App definiert\n\nZiel:\n- Alle Lampen(-gruppen) sind in der Hue- und in der Home-App steuerbar und synchron\n\nVorbereitung:\n- Hue Bridge in jedem hue node neu erstellen oder auswählen\n- Gruppe oder Licht auswählen und die ID merken\n- Homekit Bridge im universal accessory neu erstellen oder auswählen\n- Pro Gruppe oder Licht einen lightbulb anlegen\n\nWichtig:\n- Die Reihenfolge der Gruppen oder Lampen ist ab jetzt entscheidend\n- Im Beispiel sind die Gruppen 8, 10, 9 und das Licht 2 den lightbulbs 0, 1, 2, 3 zugeordnet\n\nAnpassungen:\n- Im inject node \"init\" sind nun pro Gruppe oder Licht die jeweiligen Fähigkeiten zu definieren\n- In jedem function node \"modify\" ist das array der Gruppen und Lichter an deine Nummern anzupassen. Aus [8, 10, 9, 2] wird dann evtl. [21, 1, 7] oder [15, 14, 4, 9, 32]\n- Im change node \"route\" ist pro lightbulb eine Zeile anzulegen. Auch hier wieder ist die Reihenfolge von 0,..,3 den Gruppen und Lichter zuzuordnen","x":270,"y":320,"wires":[]},{"id":"c190d3ae.ded6e","type":"split","z":"d1553ba8.467ce","name":"","splt":"\\n","spltType":"str","arraySplt":"1","arraySpltType":"len","stream":false,"addname":"topic","x":470,"y":360,"wires":[["655ff827.a14ca8"]]},{"id":"4cbe6147.0edf18","type":"hue-group","z":"d1553ba8.467ce","name":"Steh R","bridge":"","groupid":"<GroupId>","colornamer":true,"x":950,"y":440,"wires":[["9da5841f.627f48"]]},{"id":"d000c7b2.2647f","type":"hue-group","z":"d1553ba8.467ce","name":"Steh L","bridge":"","groupid":"<GroupId>","colornamer":true,"x":950,"y":400,"wires":[["9da5841f.627f48"]]},{"id":"e3888f7c.50d2d","type":"hue-light","z":"d1553ba8.467ce","name":"Tisch","bridge":"","lightid":"<LightId>","colornamer":true,"x":950,"y":480,"wires":[["9da5841f.627f48"]]},{"id":"a57f64ba.7cafe8","type":"hue-group","z":"d1553ba8.467ce","name":"Decke","bridge":"","groupid":"<GroupId>","colornamer":true,"x":950,"y":360,"wires":[["9da5841f.627f48"]]},{"id":"f7f15ac5.ffac5","type":"function","z":"d1553ba8.467ce","name":"modify","func":"const id = [8, 10, 9, 2].indexOf(parseInt(msg.info.id));\nconst cm = msg.payload.colorTemp !== undefined ? 'ct' : 'bri';\n \nif (id >- 1) {\n  node.status({fill:'blue',shape:'dot',text: id+' (cm: '+cm+')'});\n \n  return [[\n      { topic: id+'/On', payload: msg.payload.on },\n      ['bri', 'ct'].includes(cm) ?\n        { topic: id+'/Brightness', payload: msg.payload.brightness} : undefined,\n      ['ct'].includes(cm) ?\n        { topic: id+'/ColorTemperature', payload: msg.payload.colorTemp} : undefined\n    ]];\n} else {\n  node.status({});\n}","outputs":1,"noerr":0,"x":330,"y":420,"wires":[["655ff827.a14ca8"]]},{"id":"2bb34ad.8e1e836","type":"function","z":"d1553ba8.467ce","name":"modify","func":"const ids = [8, 10, 9, 2];\nconst ops = {\n  'On': 'on',\n  'Brightness': 'brightness',\n  'ColorTemperature': 'colorTemp',\n  'Saturation': 'saturation'\n};\n \nif (ids[msg.topic.split('/')[0]] && ops[msg.topic.split('/')[1]]) {\n  let id = ids[msg.topic.split('/')[0]];\n  let op = ops[msg.topic.split('/')[1]];\n \n  node.status({fill:'blue',shape:'dot',text: id+' ('+op+': '+msg.payload+')'});\n \n  return [{ id: id, payload: {[op]: msg.payload} }];\n} else {\n  node.status({});\n}","outputs":1,"noerr":0,"x":650,"y":420,"wires":[["d1fd3fd2.7ac07"]]},{"id":"d1fd3fd2.7ac07","type":"switch","z":"d1553ba8.467ce","name":"route","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":790,"y":420,"wires":[["a57f64ba.7cafe8"],["d000c7b2.2647f"],["4cbe6147.0edf18"],["e3888f7c.50d2d"]]},{"id":"581b11ea.4dc28","type":"link in","z":"d1553ba8.467ce","name":"","links":["9da5841f.627f48","c65bd187.b8e9a"],"x":235,"y":420,"wires":[["f7f15ac5.ffac5"]]},{"id":"9da5841f.627f48","type":"link out","z":"d1553ba8.467ce","name":"","links":["581b11ea.4dc28"],"x":1075,"y":420,"wires":[]},{"id":"655ff827.a14ca8","type":"redmatic-homekit-universal","z":"d1553ba8.467ce","bridgeConfig":"","name":"Wohnen","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":500,"y":420,"wires":[["2bb34ad.8e1e836"]]},{"id":"28488385.9a861c","type":"switch","z":"d1553ba8.467ce","name":"route","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":790,"y":200,"wires":[["e3cfda87.8d777"],["e0210296.43c52"],["ba4fa06a.9d5f5"],["1306637c.fd7d0d"]]},{"id":"59b40167.d2ce08","type":"inject","z":"d1553ba8.467ce","name":"init","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":330,"y":360,"wires":[["c190d3ae.ded6e"]]}]

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
✋help wanted Extra attention is needed ❓question Further information is requested
Development

No branches or pull requests

4 participants