Ajouter des ampoules Milight avec Node Red dans Gladys
Table des Matières
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
- Pour commencer il vous faut créer votre ampoule dans gladys via le service MQTT de cette manière :
- Renseigné un nom, un id externe pour le serveur mqtt, la piece puis sauvegarder :
- 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
- Ajouter un noeud mqtt in pour chaque fonctionnalités précédemment créées :
(Allumer, Luminosité, Couleur, Saturation, Température) - Pour chacun des noeuds configurer la connexion a Gladys 4, puis y ajouter le topic créé automatiquement dans gladys :
- Ajouter un noeud “function” pour chaque noeuds “mqtt in” :
- 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;
- Ajouter un noeud “milight” :
- 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.
- 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": ""
}
]