[Tutoriel] Ajouter des ampoules Milight avec Node Red dans Gladys

Ajouter des ampoules Milight avec Node Red dans Gladys

Table des Matières

  1. Configuration dans Gladys
    1. Pré requis
    2. Etape
  2. Configuration sur Node Red
    1. Pré requis
    2. Etape
  3. Extra

Voici un exemple d’intégration, via node red dans Gladys 4, d’une ampoule milight de type color “fut017”.
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

Bien entendu le connecteur sera a changer en fonction de votre ampoule.

Configuration dans Gladys

Pré requis

  • Avoir configurer son broker MQTT sur Gladys
  • Savoir se débrouiller un minimum dans la création de device virtuel

Etape

  1. Pour commencer il vous faut créer votre ampoule dans gladys via le service MQTT de cette manière :

  1. Renseigné un nom, un id externe pour le serveur mqtt, la piece puis sauvegarder :

  1. Une fois cela fait ne quitter pas la page mais ajouter ces fonctionnalités :

Voici l’exemple de mon ampoule se trouvant dans un projecteur cinéma :

La configuration côté Gladys est terminé, nous allons passer sur node red.

Configuration sur Node Red

Pré requis

  • Installer le package node-red-contrib-milight-2 (la version 3 j’ai rencontré des problèmes de connexion aléatoire)
  • Avoir configurer la connexion mqtt dans node red pour la connexion avec Gladys

Etape

  1. Ajouter un noeud mqtt in pour chaque fonctionnalités précédemment créées : image
    (Allumer, Luminosité, Couleur, Saturation, Température)
  2. Pour chacun des noeuds configurer la connexion a Gladys 4, puis y ajouter le topic créé automatiquement dans gladys :


  1. Ajouter un noeud “function” pour chaque noeuds “mqtt in” : image
  2. Editer le noeud “function” en fonction de la fonctionnalité tel qui suit :
  • Allumer
msg.payload = msg.payload === '1' ? 'on' : 'off';
return msg;
  • Couleur
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];
}
  • Luminosité
msg.command = 'brightness';
return msg;
  • Saturation
msg.command = 'saturation';
return msg;
  • Température
msg.command = 'temperature';
return msg;
  1. Ajouter un noeud “milight” : image
  2. Ajouter la configuration en rapport a votre box milight tel que l’exemple suivant :

ps : Adapter Bridge Type et Bulb Type en fonction de votre configuration.

  1. Il ne vous reste plus qu’a relier comme les noeuds entres eux et déployer :

Voila maintenant il ne vous reste plus qu’a copié ce flow et adapter vos topic et zone pour contrôler vos ampoules une a une.

Extra

Voici mon flow (pensez a modifier les topics, ip, zone etc …)

[
    {
        "id": "f9f8f221204ee3c0",
        "type": "tab",
        "label": "Flow 3",
        "disabled": false,
        "info": ""
    },
    {
        "id": "ac342eaf54ef2eaa",
        "type": "mqtt in",
        "z": "f9f8f221204ee3c0",
        "name": "Allumer",
        "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": "Luminosité",
        "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": "Couleur",
        "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": "Saturation",
        "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": "Temperature",
        "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": ""
    }
]
1 Like

Merci pour ce super tutoriel @spenceur, c’est très précis !! :slight_smile:

1 Like