Weiter zum Inhalt
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Hell
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dunkel
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. MiLight Ansteuerung per node-red

NEWS

  • Neuer ioBroker-Blog online: Monatsrückblick März/April 2026
    BluefoxB
    Bluefox
    8
    1
    371

  • Verwendung von KI bitte immer deutlich kennzeichnen
    HomoranH
    Homoran
    10
    1
    326

  • Monatsrückblick Januar/Februar 2026 ist online!
    BluefoxB
    Bluefox
    18
    1
    945

MiLight Ansteuerung per node-red

Geplant Angeheftet Gesperrt Verschoben Skripten / Logik
1 Beiträge 1 Kommentatoren 2.8k Aufrufe 1 Beobachtet
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • andreA Offline
    andreA Offline
    andre
    Developer
    schrieb am zuletzt editiert von
    #1

    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-100 
    

    Fü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 = Lavendar 
    

    Beispiel: 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:
    914_milight_nodered_flow.jpg
    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é

    Bitte keine Support-Fragen per PN! Nutzt die öffentliche Kanäle damit auch andere von den Antworten profitieren können!

    1 Antwort Letzte Antwort
    0

    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
    Antworten
    • In einem neuen Thema antworten
    Anmelden zum Antworten
    • Älteste zuerst
    • Neuste zuerst
    • Meiste Stimmen


    Support us

    ioBroker
    Community Adapters
    Donate

    489

    Online

    32.8k

    Benutzer

    82.8k

    Themen

    1.3m

    Beiträge
    Community
    Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
    ioBroker Community 2014-2025
    logo
    • Anmelden

    • Du hast noch kein Konto? Registrieren

    • Anmelden oder registrieren, um zu suchen
    • Erster Beitrag
      Letzter Beitrag
    0
    • Home
    • Aktuell
    • Tags
    • Ungelesen 0
    • Kategorien
    • Unreplied
    • Beliebt
    • GitHub
    • Docu
    • Hilfe