[Tutorial] Milight-Lampen mit Node Red in Gladys hinzufügen

Milight-Lampen mit Node Red in Gladys hinzufügen

Inhaltsverzeichnis

  1. Konfiguration in Gladys
    1. Voraussetzungen
    2. Schritt
  2. Konfiguration in Node Red
    1. Voraussetzungen
    2. Schritt
  3. Zusätzlich

Hier ist ein Beispiel für die Integration einer Milight-Lampe des Typs Farbe „fut017“ über Node Red in Gladys 4.
https://www.amazon.fr/KingLed-Ampoule-Mi-Light-Variables-2700K-6500K/dp/B01MXSK2YO/ref=sr_1_1?dchild=1&keywords=FUT017&qid=1634324731&qsid=257-6578826-3953066&sr=8-1&sres=B01MXSK2YO%2CB077H3YKB5%2CB0725D16KX%2CB01MR9UDU0%2CB0763RSRY7%2CB01NCEY7JA%2CB01M0KU53O%2CB071W1K5Q1&th=1

Natürlich muss der Connector je nach Ihrer Lampe geändert werden.

Konfiguration in Gladys

Voraussetzungen

  • Ihren MQTT-Broker in Gladys konfiguriert haben
  • Sich mindestens ein wenig mit der Erstellung virtueller Geräte auskennen

Schritt

  1. Beginnen Sie damit, Ihre Lampe in Gladys über den MQTT-Dienst auf diese Weise zu erstellen:

  1. Geben Sie einen Namen, eine externe ID für den MQTT-Server, den Raum an und speichern Sie:

  1. Sobald dies erledigt ist, verlassen Sie die Seite nicht, sondern fügen Sie diese Funktionen hinzu:

Hier ist ein Beispiel meiner Lampe, die sich in einem Kino-Projector befindet:

Die Konfiguration auf Gladys-Seite ist abgeschlossen, wir gehen nun zu Node Red über.

Konfiguration in Node Red

Voraussetzungen

  • Installieren Sie das Paket node-red-contrib-milight-2 (Version 3 hatte ich zufällige Verbindungsprobleme)
  • Konfigurieren Sie die MQTT-Verbindung in Node Red für die Verbindung mit Gladys

Schritt

  1. Fügen Sie einen MQTT-In-Knoten für jede zuvor erstellte Funktion hinzu: image
    (Einschalten, Helligkeit, Farbe, Sättigung, Temperatur)
  2. Für jeden der Knoten die Verbindung zu Gladys 4 konfigurieren und dann das automatisch in Gladys erstellte Topic hinzufügen:


  1. Fügen Sie einen „Funktions“-Knoten für jeden „MQTT-In“-Knoten hinzu: image
  2. Bearbeiten Sie den „Funktions“-Knoten je nach Funktion wie folgt:
  • Einschalten
msg.payload = msg.payload === '1' ? 'on' : 'off';
return msg;
  • Farbe
const rgb = intToRgb(msg.payload);
msg.payload = `rgb(${rgb[0]}, ${rgb[1]}, ${rgb[2]})`;
msg.command = 'rgb';
return msg;

function intToRgb(intColor) {
  const red = intColor >> 16;
  const green = (intColor - (red << 16)) >> 8;
  const blue = intColor - (red << 16) - (green << 8);

  return [red, green, blue];
}
  • Helligkeit
msg.command = 'brightness';
return msg;
  • Sättigung
msg.command = 'saturation';
return msg;
  • Temperatur
msg.command = 'temperature';
return msg;
  1. Fügen Sie einen „milight“-Knoten hinzu: image
  2. Fügen Sie die Konfiguration in Bezug auf Ihre MiLight-Box wie im folgenden Beispiel hinzu:

Hinweis: Passen Sie den Bridge-Typ und den Lampentyp entsprechend Ihrer Konfiguration an.

  1. Jetzt müssen Sie nur noch die Knoten miteinander verbinden und deployen:

Das war’s, jetzt müssen Sie nur noch diesen Flow kopieren und Ihre Topics und Zonen anpassen, um Ihre Lampen einzeln zu steuern.

Extra

Hier ist mein Flow (denken Sie daran, die Topics, IP, Zone usw. zu ändern..)

[
    {
        "id": "f9f8f221204ee3c0",
        "type": "tab",
        "label": "Flow 3",
        "disabled": false,
        "info": ""
    },
    {
        "id": "ac342eaf54ef2eaa",
        "type": "mqtt in",
        "z": "f9f8f221204ee3c0",
        "name": "Einschalten",
        "topic": "gladys/device/mqtt:projecteur/feature/mqtt:projecteur-allumer/state",
        "qos": "2",
        "datatype": "auto",
        "broker": "d4dd08180f860b0e",
        "nl": false,
        "rap": true,
        "rh": 0,
        "x": 70,
        "y": 120,
        "wires": [
            [
                "4f2df4ecbd1f994c"
            ]
        ]
    },
    {
        "id": "d0cc861e9c276a0a",
        "type": "mqtt in",
        "z": "f9f8f221204ee3c0",
        "name": "Helligkeit",
        "topic": "gladys/device/mqtt:projecteur/feature/mqtt:projecteur-luminosite/state",
        "qos": "2",
        "datatype": "auto",
        "broker": "d4dd08180f860b0e",
        "nl": false,
        "rap": true,
        "rh": 0,
        "x": 100,
        "y": 220,
        "wires": [
            [
                "052e9712c29fee8f"
            ]
        ]
    },
    {
        "id": "4f2df4ecbd1f994c",
        "type": "function",
        "z": "f9f8f221204ee3c0",
        "name": "",
        "func": "msg.payload = msg.payload === '1' ? 'on' : 'off';\nreturn msg;",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 260,
        "y": 140,
        "wires": [
            [
                "f698f083e6fb1c3f"
            ]
        ]
    },
    {
        "id": "052e9712c29fee8f",
        "type": "function",
        "z": "f9f8f221204ee3c0",
        "name": "",
        "func": "msg.command = 'brightness';\nreturn msg;",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 270,
        "y": 240,
        "wires": [
            [
                "f698f083e6fb1c3f"
            ]
        ]
    },
    {
        "id": "4be8a6865ec71a53",
        "type": "mqtt in",
        "z": "f9f8f221204ee3c0",
        "name": "Farbe",
        "topic": "gladys/device/mqtt:projecteur/feature/mqtt:projecteur-couleur/state",
        "qos": "2",
        "datatype": "auto",
        "broker": "d4dd08180f860b0e",
        "nl": false,
        "rap": true,
        "rh": 0,
        "x": 70,
        "y": 40,
        "wires": [
            [
                "2953be4d64f19a5a"
            ]
        ]
    },
    {
        "id": "2953be4d64f19a5a",
        "type": "function",
        "z": "f9f8f221204ee3c0",
        "name": "",
        "func": "const rgb = intToRgb(msg.payload);\nmsg.payload = `rgb(${rgb[0]}, ${rgb[1]}, ${rgb[2]})`;\nmsg.command = 'rgb';\nreturn msg;\n\nfunction intToRgb(intColor) {\n  const red = intColor >> 16;\n  const green = (intColor - (red << 16)) >> 8;\n  const blue = intColor - (red << 16) - (green << 8);\n\n  return [red, green, blue];\n}",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 220,
        "y": 60,
        "wires": [
            [
                "f698f083e6fb1c3f"
            ]
        ]
    },
    {
        "id": "2b570fa1345f22db",
        "type": "mqtt in",
        "z": "f9f8f221204ee3c0",
        "name": "Sättigung",
        "topic": "gladys/device/mqtt:projecteur/feature/mqtt:projecteur-saturation/state",
        "qos": "2",
        "datatype": "auto",
        "broker": "d4dd08180f860b0e",
        "nl": false,
        "rap": true,
        "rh": 0,
        "x": 100,
        "y": 300,
        "wires": [
            [
                "794310d6a6d5169b"
            ]
        ]
    },
    {
        "id": "794310d6a6d5169b",
        "type": "function",
        "z": "f9f8f221204ee3c0",
        "name": "",
        "func": "msg.command = 'saturation';\nreturn msg;",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 270,
        "y": 320,
        "wires": [
            [
                "f698f083e6fb1c3f"
            ]
        ]
    },
    {
        "id": "201ddc93bd0ed84c",
        "type": "mqtt in",
        "z": "f9f8f221204ee3c0",
        "name": "Temperatur",
        "topic": "gladys/device/mqtt:projecteur/feature/mqtt:projecteur-temperature/state",
        "qos": "2",
        "datatype": "auto",
        "broker": "d4dd08180f860b0e",
        "nl": false,
        "rap": true,
        "rh": 0,
        "x": 130,
        "y": 400,
        "wires": [
            [
                "713b068948cf83fa"
            ]
        ]
    },
    {
        "id": "713b068948cf83fa",
        "type": "function",
        "z": "f9f8f221204ee3c0",
        "name": "",
        "func": "msg.command = 'temperature';\nreturn msg;",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 340,
        "y": 400,
        "wires": [
            [
                "f698f083e6fb1c3f"
            ]
        ]
    },
    {
        "id": "f698f083e6fb1c3f",
        "type": "MiLight",
        "z": "f9f8f221204ee3c0",
        "name": "MiLight",
        "bridgetype": "v6",
        "bulbtype": "fullColor",
        "zone": "1",
        "ip": "192.168.1.89",
        "broadcast": true,
        "x": 686.5894470214844,
        "y": 246.19509887695312,
        "wires": []
    },
    {
        "id": "d4dd08180f860b0e",
        "type": "mqtt-broker",
        "name": "Gladys4",
        "broker": "mqtt://192.168.1.59",
        "port": "1883",
        "clientid": "",
        "usetls": false,
        "protocolVersion": "4",
        "keepalive": "60",
        "cleansession": true,
        "birthTopic": "",
        "birthQos": "0",
        "birthRetain": "false",
        "birthPayload": "",
        "birthMsg": {},
        "closeTopic": "",
        "closeQos": "0",
        "closeRetain": "false",
        "closePayload": "",
        "closeMsg": {},
        "willTopic": "",
        "willQos": "0",
        "willRetain": "false",
        "willPayload": "",
        "willMsg": {},
        "sessionExpiry": ""
    }
]

Danke für diesen super Tutoriel @spenceur, das ist sehr präzise!! :slight_smile: