Et voila c’est fonctionnel pour ma part !
Merci @golfvert pour la bonne base de travail !!!
Il faut tout d’abord configurer le push de jeedom avec l’url du serveur NR:
http://IP_SRV_NODERED:1880/jeedom?value=#value#&id=#cmd_id#
Voici le flow NR
[
{
"id": "6987201a.3de69",
"type": "tab",
"label": "Jeedom2Mqtt",
"disabled": false,
"info": ""
},
{
"id": "6273e9a6.0704e8",
"type": "http in",
"z": "6987201a.3de69",
"name": "Jeedom In",
"url": "/jeedom",
"method": "get",
"upload": false,
"swaggerDoc": "",
"x": 200,
"y": 160,
"wires": [
[
"5be0819d.013f2",
"3c3b2c34.7b2924"
]
]
},
{
"id": "5be0819d.013f2",
"type": "http response",
"z": "6987201a.3de69",
"name": "",
"statusCode": "",
"headers": {},
"x": 390,
"y": 140,
"wires": []
},
{
"id": "3c3b2c34.7b2924",
"type": "function",
"z": "6987201a.3de69",
"name": "jeedom2mqtt",
"func": "id2topic = flow.get(\"id2topic\");\nlast_seen = null;\n\nvar device = id2topic[msg.payload.id];\n\nif ( device === undefined ) {\n return null;\n}\nelse {\n msg.topic = device.topic;\n msg.retain = true;\n msg.payload = msg.payload.value;\n \n if(device.last_seen)\n {\n last_seen = {};\n last_seen.retain = device.retain;\n last_seen.topic = device.topic.substring(0,device.topic.lastIndexOf('/')+1)+\"last_seen\";\n last_seen.payload = new Date();\n }\n}\n\nreturn [msg,last_seen];\n",
"outputs": 2,
"noerr": 0,
"initialize": "",
"finalize": "",
"x": 410,
"y": 180,
"wires": [
[
"3608f8ec.aa1218"
],
[
"bdceb078.0b19d"
]
]
},
{
"id": "1d321a0d.73bf76",
"type": "inject",
"z": "6987201a.3de69",
"name": "",
"repeat": "900",
"crontab": "",
"once": true,
"onceDelay": "2",
"topic": "",
"payload": "",
"payloadType": "date",
"x": 230,
"y": 60,
"wires": [
[
"409aeef2.d2993"
]
]
},
{
"id": "409aeef2.d2993",
"type": "file in",
"z": "6987201a.3de69",
"name": "jeedom2mqtt",
"filename": "/data/external-data/jeedom2mqtt.yaml",
"format": "utf8",
"chunk": false,
"sendError": false,
"encoding": "none",
"x": 410,
"y": 60,
"wires": [
[
"dfdd3eb6.4b15e"
]
]
},
{
"id": "dfdd3eb6.4b15e",
"type": "yaml",
"z": "6987201a.3de69",
"property": "payload",
"name": "",
"x": 570,
"y": 60,
"wires": [
[
"322c70df.d7297"
]
]
},
{
"id": "322c70df.d7297",
"type": "function",
"z": "6987201a.3de69",
"name": "Charge",
"func": "let id2topic = {};\n\nfor (var i=0; i<msg.payload.sensors.length;i++) {\n baseTopic=msg.payload.topicbase+\"/\"+msg.payload.sensors[i].name+\"/\";\n retain = msg.payload.sensors[i].retain || true;\n last_seen = msg.payload.sensors[i].retain || false;\n for (var j=0; j<msg.payload.sensors[i].sensors.length;j++) {\n topic = baseTopic+msg.payload.sensors[i].sensors[j].topic;\n id2topic[\"\"+msg.payload.sensors[i].sensors[j].id] = {topic:topic, retain:retain, last_seen:last_seen};\n }\n}\n\nflow.set(\"id2topic\", id2topic);\n\nreturn msg;\n",
"outputs": 1,
"noerr": 0,
"initialize": "",
"finalize": "",
"x": 720,
"y": 60,
"wires": [
[]
]
},
{
"id": "3608f8ec.aa1218",
"type": "mqtt out",
"z": "6987201a.3de69",
"name": "",
"topic": "",
"qos": "0",
"retain": "true",
"broker": "9b372184.f0e1a",
"x": 630,
"y": 140,
"wires": []
},
{
"id": "bdceb078.0b19d",
"type": "mqtt out",
"z": "6987201a.3de69",
"name": "",
"topic": "",
"qos": "0",
"retain": "true",
"broker": "9b372184.f0e1a",
"x": 630,
"y": 220,
"wires": []
},
{
"id": "9b372184.f0e1a",
"type": "mqtt-broker",
"name": "mqttIoull",
"broker": "192.168.10.9",
"port": "1883",
"clientid": "",
"usetls": false,
"compatmode": true,
"keepalive": "60",
"cleansession": true,
"birthTopic": "",
"birthQos": "0",
"birthPayload": "",
"closeTopic": "",
"closeQos": "0",
"closePayload": "",
"willTopic": "",
"willQos": "0",
"willPayload": ""
}
]
Ca prends en entrée un fichier yaml que j’ai mis dans /data/external_data/jeedom2mqtt.yaml
topicbase: jeedom2mqtt
sensors:
- name: CDL_TMP
last_seen: true
retain: true
sensors:
- id: 91
topic: temperature
- id: 92
topic: humidity
- id: 93
topic: battery
- id: 94
topic: signal
- name: CDM_TMP
last_seen: true
retain: true
sensors:
- id: 9
topic: temperature
- id: 10
topic: humidity
- id: 11
topic: battery
- id: 12
topic: signal
- name: CDT_TMP
last_seen: true
retain: true
sensors:
- id: 83
topic: temperature
- id: 84
topic: humidity
- id: 85
topic: battery
- id: 86
topic: signal
les couples (id, topic) permettent de faire le lien entre l’id de la ‹ commande › jeedom avec le topic MQTT.
Et ca rempli le mqtt :
N’hesitez pas si vous avez des commentaires !