nioc / jeedom-websocket

Jeedom plugin to provide a client-server communication over websocket protocol
GNU General Public License v2.0
2 stars 0 forks source link

[Question] Quels données sont envoyés à travers le websocket ? #4

Closed alkemist closed 1 year ago

alkemist commented 1 year ago

Bonjour, j'aimerais avoir une petite clarification ^^", qu'est ce que t'entend par "jeedom event" ?

Je cherche un moyen de récupérer des informations de mon jeedom en websocket (la température de mes thermostats par exemple) pour les avoir en temps réel sur une web app custom que je suis entrain de développer. Je voulais savoir si ce plugin pouvais aider.

Est-ce que tu sais si la communication websocket peut fonctionner avec le dns jeedom (xxx.jeedom.link) si je fait une redirection de port sur ma box ?

Merci :D

nioc commented 1 year ago

Salut, TL;DR : oui.

Plus en détail : je ne pourrai pas te répondre sur le contenu précis car je n'utilise plus Jeedom :) Mais à l'époque (Jeedom 3), le plugin remontait :

Pour ton cas, tu devrais avoir un message avec un cmd::update remontant la température.

Si tu veux, tu peux regarder le code du front (que j'utilise toujours mais sur une solution domotique maison), notamment le traitement des messages reçus sur le websocket : https://github.com/nioc/vue-dom/blob/master/src/services/providers/JeedomApi.js#L62-L138

Pour le DNS oui normalement. Il faudra aussi que tu fasses un proxy du port 8090 niveau Apache ou que tu ouvres ce port sur ta box avec un NAT sur ton Jeedom (mais c'est souvent bloqué par les proxy d'entreprise).

alkemist commented 1 year ago

Génial, merci pour ce code de front, je vais jouer avec et on verra bien ce que ça me renvois, mais déjà y'a de l'espoir ^^

Je pense que je vais principalement utilisé ça sur mon téléphone, donc y'aura pas de soucis de proxy d'entreprise ^^

nioc commented 1 year ago

Je cloture, si tu as besoin d'info n'hésites pas à revenir :)

alkemist commented 1 year ago

Je me permet de te reposer une question ici, même si c'est pas vraiment le même sujet (tu me diras si tu veux que je crée un autre ticket)

Pourquoi ne pas avoir mis ce plugin sur le market ? Je viens de voir que si je l'installe je perd ma "garantie" qui va avec le Jeedom Atlas :/ Sur le coup je me demande si ça vaut vraiment le coup ^^"

"Attention, il n’y a pas d’assistance de l’équipe Jeedom Atlas sur les plugins installés depuis une autre source que le Market Jeedom Atlas. De plus, l’installation d’un plugin depuis une autre source que le Market Jeedom Atlas entraine la perte globale d’assistance par l’équipe Jeedom Atlas."

nioc commented 1 year ago

Hello. À la lecture de cette info, je t'invite à ne pas installer le plug-in.

Jeedom core c'est open source et c'est cool, Jeedom SAS qui propose le support payant et les boxs c'est moins mon truc (je comprends l'idée et il en faut pour tous les profils, mais étant dev, je n'adhère pas)…

Comme je te disais, je n'utilise plus Jeedom, donc je ne peux pas garantir que le plug-in fonctionne encore sur la V4 (et encore moins passer par le process officiel).

Si tu te sens à l'aise avec Php, fais toi un clone de ton installation sur une VM ou un docker et teste le plug-in. Je peux t'aider en cas de problème (sans garantie). Si tu ne peux (/ veux) pas te passer du support Atlas qui se défaussera du fait de la présence plug-in tiers en cas de problème, ne l'installe pas.

alkemist commented 1 year ago

Je suis dev aussi, mais disons que j'ai pas l'énergie de tout bricoler ^^", et même si je suis pas sûr de me servir du support un jour, en cas de pépin je me dit que ça peut être utile.

Si t'es plus sur le market c'est parce que tu utilise plus jeedom et que tu peux plus garantir le fonctionnement du plugin ? ou vraiment à cause du concept du market/support ?

Je pense que dans un premier temps je vais faire du JsonRPC, pour jouer un peu avec l'api. Puis dans un second temps, je vais lister toutes les solutions possibles pour avoir quelques choses de plus "temps réel". Voir ce qui est possible aussi niveau communication de serveur à serveur (j'ai un serveur php où j'ai plus la main dessus, où je pourrais faire du websocket par exemple), et peut être trouver un moyen de faire transiter les données sur une autre base de données (enfin pas toutes les données, mais les derniers états)

Puis dans mes recherches je suis tombé sur "Mercure", un protocole qui a l'air d'être "mieux" que les websocket, faudra que j'essaye de jouer avec.

En tout cas merci pour ce plugin que tu partages, et je pense que ça pourra toujours m'être utile de voir comment c'est fait, et les possibilités du websocket.

nioc commented 1 year ago

Je comprends tout à fait 😉 J'ai passé beaucoup (trop) de temps à bricoler mon instance et un jour j'en ai marre du PHP et je me suis dit que quitte à y passer des jours, autant faire sur une techno qui me plaît (nodejs + Node-RED). Quand j'ai fait mes plug-ins, le market n'était pas obligatoire et mon instance était sur un raspberrypi classique. Je n'ai jamais publié sur le market 😆 Je les ai mis à disposition publique si ça peut aider quelqu'un, mais sans autre ambition.

Au pire effectivement tu peux faire le polling classique du JSONRPC en local sur un autre serveur et pousser en ws ou autre (je ne connaissais pas mercure) vers ton site .

nioc commented 1 year ago

Hello, pour info j'ai fait quelques tests sur un Jeedom V4 et voici un exemple de trame de réponse (pour mémoire) :

{
  "datetime": 1678657404.136585,
  "result": [
    {
      "datetime": 1678657404.133375,
      "name": "cmd::update",
      "option": {
        "cmd_id": "35",
        "value": 0,
        "display_value": 0,
        "unit": "",
        "valueDate": "2023-03-12 22:43:24",
        "collectDate": "2023-03-12 22:43:24",
        "alertLevel": "none"
      }
    },
    {
      "datetime": 1678657404.136575,
      "name": "jeeObject::summary::update",
      "option": {
        "object_id": "1",
        "keys": {
          "temperature": {
            "value": 0
          }
        }
      }
    },
    {
      "datetime": 1678657404.136585,
      "name": "jeeObject::summary::update",
      "option": {
        "object_id": "global",
        "keys": {
          "temperature": {
            "value": 5.1
          }
        }
      }
    }
  ]
}