NEWS
MiLight Ansteuerung per node-red
-
Hallo,
da der Adapter für die Anbindung des MiLight Systems (RGBW LED System, limitlessled.com) an ioBroker noch im Alpha-Stadium hängt und ich (noch) nicht fit genug für die Adapterprogrammierung bin, habe ich mir als Umgehungslösung einen Flow in node-red gebastelt.
Das Ganze ist angelehnt an diesen Flow für den Zugriff via MQTT: http://flows.nodered.org/flow/b2cb3bdc5a81ac881d4b
In meiner Version dient dem Flow ein String-Objekt als Input, das ich nach Belieben aus verschiedenen Scripts und auch direkt aus iobroker.vis heraus befülle. Nach folgender Syntax:
[power].[group].[whitemode].[hue].[brightness]Dabei können die einzelnen Segmente folgende Werte annehmen:
- power = on / off
group = 1-4 whitemode = yes / no hue = 0-255 brightness = 1-100Für die Aufschlüsselung der Farbwerte hier noch eine kleine Übersicht in 16 Farben. Natürlich liegen dazwischen noch ein paar mehr:
- 0x00 = 0 = Violet
0x10 = 16 = Royal_Blue 0x20 = 32 = Baby_Blue 0x30 = 48 = Aqua 0x40 = 64 = Mint 0x50 = 80 = Seafoam_Green 0x60 = 96 = Green 0x70 = 112 = Lime_Green 0x80 = 128 = Yellow 0x90 = 144 = Yellow_Orange 0xA0 = 160 = Orange 0xB0 = 176 = Red 0xC0 = 192 = Pink 0xD0 = 208 = Fusia 0xE0 = 224 = Lilac 0xF0 = 240 = LavendarBeispiel: on.1.no.176.25
Als nächste Schritte sind noch die Integration des Disco-Mode bzw. der weiteren Standardprogramme inkl. Speed up bzw. down geplant.
Für den Moment bin ich mit dem was der Flow kann aber noch zufrieden. :)
Hier das Bild zum Flow:

Und hier der Code zum Importieren:! ````
[{"id":"145baf34.e77fd1","type":"udp out","z":"3d5c0b33.6637a4","name":"UDP send to MiLight","addr":"192.168.0.14","iface":"","port":"8899","ipv":"udp4","outport":"","base64":false,"multicast":"false","x":753.6111450195312,"y":364.27777099609375,"wires":[]},{"id":"973ad97f.4647b8","type":"delay","z":"3d5c0b33.6637a4","name":"","pauseType":"rate","timeout":"100","timeoutUnits":"milliseconds","rate":"10","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":false,"x":632.5277709960938,"y":308.02777099609375,"wires":[["145baf34.e77fd1"]]},{"id":"371dd5b5.3155ca","type":"function","z":"3d5c0b33.6637a4","name":"Translate to MiLight","func":"//translates single commands to MiLight commands\n\nvar commandCode = [];\nswitch ( msg.payload.command ) {\n\tcase "on":\n\t\tcommandCode = [[0x42,0x45,0x47,0x49,0x4B][msg.payload.value],0x00]; \n\t\tbreak;\n\tcase "off":\n\t\tcommandCode = [[0x41,0x46,0x48,0x4A,0x4C][msg.payload.value],0x00];\n\t\tbreak;\n\tcase "hue": //0-255\n\t\tvar hex = msg.payload.value.toString(16);\n\t\thex = (hex.length < 2) ? '0x0'+hex : '0x'+hex;\n\t\tcommandCode = [0x40,hex];\n\t\tbreak;\n\tcase "whitemode":\n\t\tcommandCode = [[0xC2,0xC5,0xC7,0xC9,0xCB][msg.payload.value],0x00];\n\t\tbreak;\n\tcase "brightness": //1-100 => 2 to 27\n\t\tvar hex = Math.max(2,(Math.ceil((msg.payload.value-1)/99*25))+2).toString(16);\n\t\thex = (hex.length < 2) ? '0x0'+hex : '0x'+hex;\n\t\tcommandCode= [0x4E,hex];\n\t\tbreak;\n\tcase "discoMode":\n\t\tcommandCode = [0x4D,0x00];\n\t\tbreak;\n\tcase "discoSpeedUp":\n\t\tcommandCode = [0x44,0x00];\n\t\tbreak;\n\tcase "discoSpeedDown":\n\t\tcommandCode = [0x43,0x00];\n\t\tbreak;\n}\n//commandCode[2]=0x55;\nmsg.payload = new Buffer(commandCode);\nreturn msg;","outputs":1,"noerr":0,"x":524.861083984375,"y":246.111083984375,"wires":[["973ad97f.4647b8"]]},{"id":"611b7953.5769e8","type":"inject","z":"3d5c0b33.6637a4","name":"power.group.whitemode.hue.brightness","topic":"","payload":"off.2.no.176.50","payloadType":"string","repeat":"","crontab":"","once":false,"x":190,"y":41,"wires":[["d0ff40fd.18216"]]},{"id":"d0ff40fd.18216","type":"function","z":"3d5c0b33.6637a4","name":"Parse light commands from input","func":"// split input command [power.group.hue.whithemode.brightness] to single commands\n\nvar newMsg = [];\nvar action = msg.payload.split(".");\n\nvar power = action[0];\nvar group = parseInt(action[1]);\nvar whitemode = action[2];\nvar hue = parseInt(action[3]);\nvar brightness = parseInt(action[4]);\n\nif (power == "on") {\n\t\tif (whitemode == "yes") {\n\t\t\tnewMsg=[{payload:{command:"on",value:group}},{payload:{command:"whitemode",value:group}},{payload:{command:"brightness",value:brightness}}];\n\t\t\t} else {\n\t\t\t\tnewMsg=[{payload:{command:"on",value:group}},{payload:{command:"hue",value:hue}},{payload:{command:"brightness",value:brightness}}];\t\t\t\n\t\t}\n\t} else {\n\t\tnewMsg={payload:{command:power,value:group}};\n}\nreturn [newMsg];","outputs":1,"noerr":0,"x":354,"y":182,"wires":[["371dd5b5.3155ca"]]},{"id":"6134c55d.cc712c","type":"ioBroker in","z":"3d5c0b33.6637a4","name":"ioBroker Objekt","topic":"javascript.0.display.mode","payloadType":"value","onlyack":"","func":"rbe","gap":"","x":115,"y":100,"wires":[["d0ff40fd.18216"]]}]Für Verbesserungsvorschläge, speziell im Code-Bereich des Flows, bin ich immer offen. :) MfG, André
Hey! Du scheinst an dieser Unterhaltung interessiert zu sein, hast aber noch kein Konto.
Hast du es satt, bei jedem Besuch durch die gleichen Beiträge zu scrollen? Wenn du dich für ein Konto anmeldest, kommst du immer genau dorthin zurück, wo du zuvor warst, und kannst dich über neue Antworten benachrichtigen lassen (entweder per E-Mail oder Push-Benachrichtigung). Du kannst auch Lesezeichen speichern und Beiträge positiv bewerten, um anderen Community-Mitgliedern deine Wertschätzung zu zeigen.
Mit deinem Input könnte dieser Beitrag noch besser werden 💗
Registrieren Anmelden