Création d'un pont Jeedom vers HA

Je comprends pas tout a fait ta remarque, je veux juste modifier ton noeud pour pusher dans mqtt plutôt que dans ha directement, et je garde la configuration côté jeedom.

Ca ajoute un étage d’abstraction mais ça reste conforme a l’utilisation que j’en fait avec mes autres devices (Zigbee2mqtt et zwave2mqtt)

Ah, ok. Je croyais que tu voulais pousser en MQTT depuis jeedom. En gros du jeedom2mqtt :slight_smile:

non non ce sera du jeedom2NR2mqtt :wink:

Ca commence à marcher !!!
image

Par contre jeedom ne doit pas renvoyer les informations si la case ‹ ne pas repeter › est cochée, du coup ca va mettre un peu de temps à tout remonter :wink: A moins qu’il y ai une astuce pour force le premier push avec toutees les valeurs courantes ?

Il me reste à ajouter une valeur last_update par topic et je partagerai mon flow NR !

Je ne pense pas… Dans mon cas, je relaie des capteurs zwave qui envoient « régulièrement » une info.
Et en tout cas, dès qu’il y a un changement, donc, ça me va.

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 »

c’est une alarme Protexiom (idem que la protexial)

@golfvert @Ioull merci pour ces infos.
je commence à me plonger dessus.

j’aime bien ton idée @Ioull j’ai repris ton NR.
par contre, ou as tu positionné ton fichier /data/external_data/jeedom2mqtt.yaml ?
a la racine de config? ou dans www? ou dans le répertoire nodered?
car j’ai tenté mais j’ai une erreur quand je lance le timestamp.

Ok j’suis intrigué :o. Niveau Jeedom, ils utilisent quoi pour contrôler l’alarme ?

le plugin Somfy alarm

ce plugin se connecte sur l’interface web de l’alarm puis scrap toutes les infos

Ah oui ok, c’est pour ça qu’il n’y a rien sur HA pour faire ça : HA interdit le fait de scraper des sites :(.

J’ai une installation sous docker donc j’ai créé un répertoire external_data dans le répertoire data de nodered. Il faut le mettre dans un répertoire que vois nodered, je ne connais pas les bonnes pratiques pour ça …
Pour le mqtt il faut que tu configuré le noeud pour le faire pointer vers une configuration mqtt a toi pour qu’il s’y connecte

ok je m’en suis sorti en mettant le fichier dans le répertoire share.
j’ai bien vu les états via mon outil MQTT explorer

j’attendais que HA me créé les entity mais rien…
je les ai finalement déclaré dans le configuration.yaml
mais je pensais que c’était automatique, car pour Zwave et Zigbee les entités sont créé automatiquement…

reste maintenant à faire les appels de HA vers Jeedom.
j’ai tenté le command_shell mais je ne trouve aucun exemple pour m’aider.

@carfnann tu as testé ça ?

1 « J'aime »

salut,

désolé je n’avais pas vu ton message.
je vais jeter un oeil. merci pour l’info

Bonsoir à tous,

Je bascule de Jeedom vers HA.
Je tente donc de récupérer des infos de capteurs non migrés.
J’ai mis en place les flows donnés par @golfvert.(merci à lui pour le partage au passage)
J’arrive bien à récupérer dans node-red les données. Elles sont bien filtrées par l’ID Jeedom.
Par contre, je n’arrive pas à les faire remonter dans HA.
Je précise que je suis à jour pour HA, que node-red est intégré dans HA.
J’ai créé manuellement l’entité dans configuration.yaml :

sensor:
  - platform: template
    sensors:
      oeil_salon_presence:
         friendly_name: "Salon Presence"
         value_template: "{{ value }}"

Je ne l’ai peut-être pas créé comme il fallait ? (j’ai redémarré HA et l’entité remonte bien mais sans valeur.)

Salut.
Effectivement le yaml est syntaxiquement pas correct. 1 espace en trop pour les deux dernières lignes par exemple.
Et peut être d’autres, mais là j’ai exactement les yeux en face des trous à cet erreur

Même s’il y a un espace en plus, je ne pense pas que yaml râle à cause de ça.
Le fichier m’a l’air bon donc.
Il faudrait regarder du côté NR si l’appel à l’API fonctionne. Comme ça, à première vue, je chercherai plutôt là…

Tout d’abord, merci à tous les 2 pour vos réponses (rapides qui plus est !)
Alors en effet, il y a un espace en trop mais avant de redémarrer HA, je lance toujours une vérification de la conf et il n’avait rien trouvé à redire.
Pour l’appel à l’API, je suppose que c’est le HASSIO out.
Je constate une erreur sur ce node. Déjà, le paramétrage me semble totalement vide. (très étonnant pour moi mais je maitrise pas node-red.
D’autre part, il marque only https URLs allowed.
J’ai tenté de mettre l’URL de mon HA en https mais pas mieux. Et puis en local, je n’ai pas de certificat. Je l’ai fait avec letsencrypt sur le nom de domaine.
Qu’est ce que je devrais avoir sur le node ou quels tests devrais-je effectuer ?
Merci d’avance.

Pour que ça marche, il faut un « long lived token » à toi, par exemple. Tu l’as fait?
Mon HA est en HTTPS, donc, si tu as repris mon flot, c’est logique.
Si le tiens est en HTTP, il faut changer de noeud. Celui-là ne fait que HTTPS.
Donc, pour résumer, il faut adapter l’exemple à chez toi.
Si une fois fait tout ça, ça ne marche pas, tu peux copier le flot ici.