Se passer de linknx et webknx2, une fausse bonne idée ?

Aujourd’hui, grande réflexion autour de linknx et knxweb2.
Je me suis attardé sur ces deux outils, en plus de leur découverte via une Live CD.

Les VM, rien de plus pratique pour essayer sans casser

Les VM, rien de plus pratique pour essayer sans casser

Le but étant, entre autres, de découvrir l’interface de knxweb2 (knxweb v1 sur le LiveCD), et comprendre la communication entre le click et l’ampoule.

KnxWeb2

C’est à peu près démystifié : knxweb2 tourne en AJAX/jQuery qui communique en XML à travers un savant mélange avec linknx.
C’est puissant ! Instantané.

Test de KNXWEB2

Test de KNXWEB2

Seul bémol, au jour d’aujourd’hui, je ne me vois pas capable de « maîtriser » linknx et knxweb2, car là dedans, je n’ai pas mes lots :
– Asterisk
– Notifry
– DMX
– 1-wire
– Alarme
– Teleinfo
– ZoneMinder (vidéo surveillance).

C’est très certainement insérable dans knxweb2, mais le temps que je prenne pour intégrer l’ensemble de mon cahier des charges, j’ai mieux fait de partir de zéro.
Je souhaite connaître au maximum le cheminement de mon usine à gaz pour l’adapter et la faire évoluer au grès des besoins.

Mon problème, c’est que jamais je n’arriverai à égaler la réactivité de knxweb2, mais je vais essayer de m’en approcher.

Linknx

J’ai continué l’approche sur linknx avec une page de test php, et les actions en rapports.
Ça permet de bien saisir la communication :
Clic → PHP → linknx → eibnetmux → knx → ampoule.
Mais au final, d’après ce script de test en php, ça revient à la même chose que :
Clic → PHP → Class PHP Eibnetmux → eibnetmux → knx → ampoule.

Pour linknx, la base utilise un fichier le config xml du paquet.
Pour PHP @ eibnetmux, la base utilise une base de données MySQL et des scripts.

C’est kif kif.
Entre la Class PHP KNX et l’utilisation de linknx par PHP, le fonctionnement est semblable : il y’a ouverture d’un socket pour lire et écrire les informations à la couche inférieure.

Donc pour la partie PHP → KNX, avec ou sans linknx, je ne m’évite pas du travail, ne me complique pas plus la tâche.

Pour conclure

Beaucoup de doutes et de questions.
Au jour d’aujourd’hui, je pense remplacer linknx par des scripts PHP et une base MySQL.
Ainsi que knxweb2 par une interface web perso, en sachant que je n’arriverai pas à égaler sa réactivité, mais je gagnerai en maîtrise, souplesse vis à vis de mon cahier des charges.

Ce billet est posté dans Debian, KNX, php, Sysadmin. Mettre en favoris le permalien.

5 réponses à Se passer de linknx et webknx2, une fausse bonne idée ?

  1. Energy01 says:

    Bonjour,

    je viens de « tomber » sur ton blog par hasard et y trouve des infos intéressantes
    je suis un des concepteurs de knxweb2 😉
    je peux donc si tu le souhaite t’en expliquer le principe et/ou y ajouter les fonctions qui te manques …
    je n’ai pas encore parcouru tous tes posts mais cela m’intéresse et ai perso des solutions qui pourrais peut-être simplifier tes besoins pour le 1wire et/ou knx via linknx ou eibd …
    pour compléter quelques petites infos de ce post :
    la communication entre knxweb2 et le bus KNX : avec vraiment toutes les étapes

    Clic → Ajax/JQuery → PHP → serveur web linknx et flux xml → linknx → eibd → passerelle knx (usb, IP …) → bus knx → module knx et donc l’ampoule

    pour info la eibd a un « cache » et ne lie pas toujours les infos sur le bus lors d’une requête de lecture sauf si la lecture bus est forcée dans les différents autres post tu utilise du php pour « ecouter » le bus via eibd mais n’utilise pas le cache

    toutes les GA sur le bus knx sont lues et viennent mettre à jour le cache de eibd et linknx (si la GA définie dans la « config »)
    linknx permet une action direct dès détections de changement d’état de façon instantanée que tu ne peux pas faire avec « ta méthode » qui consiste à passer par une base mysql « tampon » que tu dois ensuite lire et tu ne peux donc pas faire de « scénario complexe »

    Pour linknx, la base utilise un fichier le config xml du paquet.
    le principe de linknx, il s’appuie sur un fichier de config xml au démarrage pour tout charger en mémoire et travail ensuite en mémoire et pas sur le fichier de config
    il n’y a pas de base de donnée nécessaire pour linknx (sauf si tu veux logguer les changement de valeur de certains « composants ») tout est géré en cache en mémoire et interrogeable/modifiable via le serveur web et les commandes xml

    je n’ai pas (encore) regarder eibnetmux mais a priori ce n’est « qu’une » bibliothèque php pour comuniquer avec eibd (qui est dispo dans bcusdk)

    pour faier un peu de « pub » pour Linknx et knxweb il est possible de tout configurer via interface webn linknx permet la gestion complexe de rules/scénario il est possible de s’interfacer facilement avec le 1wire via 1 rule et owfs et/ou d’autres « techno » en IP/RS232 (genre arduino qui lui peut gérer le DMX a moindre frais) …
    pour la téléinfo c’est en cours d’évolution dans linknx pour le gérer plus facielement sinon un simple script en C par exemple permet de lire le téléinfo et envoyer en xml les data pour linknx et tout composants du bus knx
    donc assez « simple » de lié une autre techno et le knx via linknx…

    en conclusion je serais intéresser d’intégrer toutes les idées que tu as dans eibd/linknx/knxweb pour en faire profiter le plus grand nombre …
    pour les point que tu donnes quelques remarques

    – Asterisk => lien avec linknx existe d’autres « utilisateurs » l’ont fait j’ai des truc si tu veux …
    – Notifry => ne connaissais pas mais semble simple a lié avec linknx
    – DMX => possible avec une passerelle KNX/DMX ou encore avec un arduino+IP/linknx
    – 1-wire => possible avec 1 rule linknx et owfs (que tu utilise déjà)
    – Alarme => dépend du modèle si knx c’est du natif sinon à voir comment comuniquer avec en IP et/ou RS232
    – Teleinfo => j’en ai parlé pas encore en natif mais en projet sinon un programme qui lit en envoi les infos à linknx
    – ZoneMinder => soit un widget « camera » dans knxweb ou simplement un lien vers l’interface web de zm

    suis dispo si tu veux en discuter en MP …

    désolé pour le message un peu long 😉
    PS : es-tu inscrit sur le google groups domotique-eib ? il y a plein d’info sur le « trio » eibd/linknx/knxweb …

    @+
    Anthony.

    • Lionel says:

      Salut,

      Merci pour ton passage et ton message.

      Effectivement, j’ignorais qu’EIBD dispose d’un cache, c’est vrai qu’il peut être utilisé pour alléger les requêtes d’écoute du bus, surtout dans le cas d’une confirmation d’état après un changement.
      J’allume ma lumière ? ma lumière est allumée ? -> Le cache me dit que oui.
      Au lieu de :
      J’allume ma lumière -> ma lumière est allumée ? -> que dit le bus ? -> le bus me répond que oui.

      Ca peut être bien pratique, je vais approfondir l’exploitation du cache. Merci du tuyau.

      linknx permet une action direct dès détection de changement d’état de façon instantanée que tu ne peux pas faire avec « ta méthode » qui consiste à passer par une base mysql « tampon » que tu dois ensuite lire et tu ne peux donc pas faire de « scénario complexe »

      Avec ce fonctionnement, je suis conscient que je ne bénéficie pas de la réactivité des rules de linknx (j’en parle furtivement ici : https://www.domolio.fr/prise-en-main-du-knx-en-php )
      Mais j’ai testé un fonctionnement semblable ici :
      https://www.domolio.fr/frontend-php-pour-lecoute-du-bus-knx

      Le schlimblik consulte la BDD pour mettre les GA à « surveiller » en variables au démarrage du script exécuté en daemon, ce même script lit le socket du bus en temps réel, puis un mélange de conditions me permet d’être réactif sur les GA à surveiller, ainsi j’allume par exemple mes lumières DMX en temps réel : http://youtu.be/4Fh_Ebjh2H4
      Je n’ai pas de boucle qui se rafraîchit toutes les X secondes, pas d’utilisation du cron, c’est du tail, donc en principe plutôt « live ».
      Dans le cas d’un scénario complexe, je lis uniquement ma base MySQL au début du script pour lister mes GA et je peux effectuer mes scénarios complexes sans écrire dans mon tampon MySQL. Bon, accessoirement, j’écris également le changement d’état dans ma base MySQL, mais ce n’est pas cette donnée que je relis pour un scénario complexe.
      Donc non, je ne dois pas ensuite lire ma base tampon MySQL, et oui, je peux faire des « scénarios complexes ».
      Il faut encore que je rendes la chose plus pratique, car mettre mes exceptions en dur dans le script n’est pas userfriendly pour la maintenance et l’évolution on est d’accord.

      Etre réactif sur le bus est bien ma crainte en me passant de linknx, pour l’instant, la seule boucle que j’ai, c’est celle de la page de consultation en jQuery, toutes les 0.5 secondes.
      Je n’aime pas les boucles minutées, je m’en passe volontiers.

      Techniquement, les étapes avec lesquelles je procéde sont moins directes que celles utilisées par linknx, je passe clairement par plus de couches que linknx.

      Dans le cas d’une appli distribuée au grand public, c’est clair qu’un outil qui manque de réactivitée, ce n’est pas génial. Pour soi, on a pas toujours les mêmes besoins ni la même exigence, pour l’instant à l’exception de la consultation en jQuery de 0.5 secondes, je suis réactif, mais lorsque je m’attaquerai à la détection de l’ouverture des fenêtres, le 1-wire ne me permettra pas d’avoir de l’instantanée, je perdrai quelques minutes de chauffage :/
      Là, certainement, je passerai par le cron.

      je n’ai pas (encore) regarder eibnetmux mais a priori ce n’est « qu’une » bibliothèque php pour comuniquer avec eibd (qui est dispo dans bcusdk)

      Non, ce n’est pas qu’une bibliothèque php pour communiquer avec eibd, c’est une alternative à eibd.
      C’est l’un ou l’autre, mais les deux font la même chose, les deux proposent une bibliothèque php, bref, même fonctionnalités.

      Voir les commentaires ici :
      https://www.domolio.fr/prise-en-main-du-knx-en-php

      A l’époque, j’avais demandé à l’auteur de eibnetmux, la différence avec eibd, voici sa réponse :

      Eibnetmux offre une fonctionalité très similaire d’eibd. Au debut, eibd avait des problèmes et n’était pas très « stable ». Auhourd’hui, si quelq’un est content avec eibd, il n’y a vraiment pas de grandes raisons pour changer.D’autre part, il me semble que l’interface pour les clients est un peu plus simple avec eibnetmux.

      en conclusion je serais intéresser d’intégrer toutes les idées que tu as dans eibd/linknx/knxweb pour en faire profiter le plus grand nombre …

      Merci pour l’intérêt que tu portes à mes idées. Je vais malheureusement être égoïste ; pour l’instant je découvre encore la domotique, j’essaye de voir comment je peux répondre à mes besoins, si c’est faisable, avec quels outils, à quel coût et au final, est-ce que je vais vraiment mettre de la domotique dans ma future maison ?
      Linknx est un bon outil, et comme j’en ai parlé ci-dessus, plein de choses sont insérables dans linknx et knxweb2, c’est suffisamment souple.
      Mais comme dis plus haut, le temps que je cherche à m’adapter à linknx, malgré sa souplesse, j’ai mieux fait de partir de zéro.
      Par exemple pour asterisk, j’suis sûr qu’il y’a moyen de faire interagir une action sur le bus avec une émission d’appel via asterisk, et mettant ce qu’il faut dans le fichier de config de linknx, mais personnellement, je le ferai plus aisément avec une interface freebpx, le manager Asterisk, quelques scripts home made.
      C’est sûr, ça devient une usine à gaz égoïste 🙂

      Certainement qu’une fois mes problèmes levés j’aurais l’ambition de faire évoluer des projets publics existants.
      En attendant, je découvre la domotique et fais part de mes découverte sur ce blog.

      Je consulte de temps en temps le google groups domotique-eib, il y a des informations précieuses ! Je n’y participe pas encore, j’ai déjà mis une semaine à te répondre, alors sur un groups …

      Merci encore pour ton feedback, à bientôt.

  2. Pingback: Une interface web pour contrôler le bus KNX sur Raspberry Pi | Domolio, la domotique et pas que…

  3. Olivier says:

    J’ai lu à plusieurs endroits de ton site, que tu récupérais des valeurs en faisant du polling, exemple dans ton commentaire ci-dessus : « Etre réactif sur le bus est bien ma crainte en me passant de linknx, pour l’instant, la seule boucle que j’ai, c’est celle de la page de consultation en jQuery, toutes les 0.5 secondes. ».

    Pourquoi ne pas utiliser plutôt les websockets ? C’est fait justement pour être réactif 🙂

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *