Création d'un pont Jeedom vers HA

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 :
image

N’hesitez pas si vous avez des commentaires !

1 « J'aime »