Note de ce sujet :
  • Moyenne : 0 (0 vote(s))
  • 1
  • 2
  • 3
  • 4
  • 5
Knxweb, règles et événements
#1
Bonsoir à tous,

J'ai avancé un tout petit peu dans ma découverte de Knxweb/Linknx depuis mon dernier message. Ma supervision fonctionne à merveille ... lorsqu'elle fonctionne. Je m'explique :

Mon installation tourne sur un RaspberryPi V1 model B. Je suis au courant des inconvénients de cette solution, surtout dans sa version non customisée où seule la carte SD héberge tout. Pour autant, je ne suis pas sûr que mon problème vienne de l'architecture technique.

Je cherche à descendre mes volets roulants au moyen d'une commande générale, à 35% de leur hauteur, dès lors qu'une valeur de température est dépassée sur l'une des sondes d'ambiances de la maison. Bien sûr, je souhaite que les volets n'atteignent éventuellement cette hauteur que durant une période de l'après-midi (pas question que les volets se remontent en pleine nuit parce que sous l'effet d'une bonne flambée d'hiver, la température a dépassé le seuil indiqué !).

Dans un premier temps, j'ai créé une règle que je souhaiterais voir évaluée à 14h, dont le descriptif tient dans le code suivant :
Code :
<rule id="ferm_pct_35_si_chaud_14" init="false">
  <condition type="and">
    <condition type="timer" trigger="true">
      <at hour="14" min="0" wdays="1234567"/>
    </condition>
    <condition type="object" id="temp_sejour" op="gte" value="23" trigger="false"/>
    </condition>
  <actionlist>
    <action type="set-value" id="cmd_gal_pct_volets" value="59"/>
  </actionlist>
</rule>

Plusieurs choses m'interpellent alors que j'ai enregistré cette règle sans le moindre problème, et qu'elle figure bien dans mon fichier linknx.xml.
  • Aucun événement n'est créé dans la liste des événements recensés par Knxweb, contrairement aux règles de fermeture et ouverture générales des volets que j'ai créées, et qui fonctionnent correctement. Je peux d'ailleurs exécuter manuellement la règle associée à l'événement.
  • Il m'est difficile de vérifier si ma règle a été correctement prise en compte. En faisant un tail -f sur /var/log/linknx.log, je m'aperçois que ce fichier n'est pas rempli en temps réel. Je n'ai pas bien compris d'ailleurs quand il se remplissait. Il m'affiche parfois des lignes incomplètes, et tout se complète d'un seul coup ultérieurement, les horodatages restant bons dans le fichier. Je gère la persistance dans une base de données Mysql située sur une machine distante et les horodatages sont également bons dans cette base.

Qu'est-ce qui fait que ma règle ne génère aucun événement dans la section idoine de Knxweb ?
Qu'est-ce qui fait que je ne peux pas consulter en temps réel le remplissage de ce fichier linknx.log ? A priori, seul le daemon linknx le remplit, et du coup, je me demande ce qu'il fabrique à stocker les informations, et les écrire au bout d'un certain temps dans le fichier. Je ne constate aucune surconsommation CPU sur la machine, ni même de problèmes de réactivité lorsque j'active des commandes sur ma supervision.

Merci de vos informations.

Cordialement.
Répondre
#2
Salut,

plusieurs précisions, utilises-tu bien la version dispo sur le cvs de knxweb ? ou celle sur git ? quelle numéro de version ?

tu as créé la rule par quelle procédé ?

pour ta rule il faut mettre le trigger à true sur chaque condition

pour vérifier si elle est prise en compte il suffit d'aller dans la partie "rule" de knxweb et ensuite dans la liste déroulante sélectionner la règle en question pour l'afficher

sinon il existe le script linknx_cmd.php dans le dossier knxweb qui permet d'envoyer des requêtes xml à linknx directement, c'est mon "trivial"
pour le fichier de log, il est censé être rempli en temps réel, pour les éléments a y voir cela peut se configurer dans knxweb (et donc linknx.xml) dans la section "gestion des log" dans "Configuration"

en espérant t'avoir aidé
@+
Anthony.

Knxweb : http://www.knxweb.fr/
Dépot des sources : https://github.com/linknx/knxweb
Version de démo de Knxweb : http://www.knxweb.fr/demo/setup.php
Script install du trio : https://github.com/linknx/install
Export ETS génère le linknx.xml : http://www.knxweb.fr/ETS/index.php
Répondre
#3
@Energy01, un grand merci pour ta réponse.

En ce qui concerne la version de Knxweb, je fais tourner la version 0.9.3, accompagnée de la version 0.0.1.32 de linknx. Ces versions ont été installées sur mon RaspBerryPi à l'aide du script install_trio que tu nous as gracieusement mis à disposition.

Afin de diagnostiquer mes problèmes de rules, j'ai tenté de les créer de toutes les façons possibles :
- par l'interface
- en éditant le fichier <racine de knxweb2>/linknx.xml et en copiant/collant une règle similaire, en ne changeant que certains paramètres
- par la suite, en supprimant via l'interface, les règles créées manuellement, et en les recréant à nouveau via l'interface

J'ai essayé de mettre à "true" le paramètre trigger pour la condition temperature > 23. J'ai constaté dans ma log linknx.log qu'à chaque fois qu'une nouvelle valeur de temp_sejour était reçue de la sonde de température, ma règle était évaluée. Ce n'est pas très grave car la condition Timer=14h n'est pas vraie. Mais mon besoin est qu'elle ne soit évaluée qu'à 14h, et même idéalement, entre 14h et 18h (je n'ai rien trouvé de mieux que de créer 4 règles, chacune évaluée à 14, 15, 16 et 17h). Peut-être ai-je mal compris le fonctionnement des règles.

Je constate bien la présence de toutes les règles que j'ai définies dans la liste déroulante en première ligne de l'onglet règle. Lorsque je sélectionne une règle, elle s'affiche comme je l'ai définie. Pour autant, aucun événement n’apparaît concernant cette règle, ce qui me fait dire qu'elle n'est pas évaluée à 14h. De fait, en ces temps de chaleur, mes volets ne sont jamais descendus lorsque j'arrive du boulot le soir, or la condition de température est largement dépassée.

J'ai également des doutes sur les valeurs auxquelles je compare des données de datapoint 9.xxx : températures, réglages fin de volets, ... Vu le résultat de groupsocketlisten sur les GA de température, je comprends que les valeurs sont codées en hexa, et que la traduction en décimale m'amène une température en degrés sur 4 chiffres avec deux virgules (à l'heure actuelle : 9C4=2500 ou 25°C). Dans mon design, j'ai bien un affichage de 25.0 dans mon widget de température et je pense que mon calcul est bon. Par contre, je ne suis pas sûr de la possibilité de la comparaison id="temp_sejour" op="gte" value="23" dans ma règle.

De la même façon, ma commande générale qui va descendre mes volets roulants à une hauteur de 35% ne s'exécute pas via knxweb, en écrivant directement la valeur 89 (35% de 255) dans l'objet de commande générale. Pourtant, groupsocketlisten m'affiche bien cette information lorsqu'elle passe sur le réseau, lorsque j'ai actionné le positionnement de mes volets à 35% depuis un écran tactile Zennio, et tous les volets renvoient le retour d'état.

Je pense, au vu de ce que tu m'écris concernant les logs, que mon cocktail linknx/knxweb ne fonctionne pas correctement. D'autres artefacts me font pencher pour cette cause :
- les pages web sont très lentes à s'afficher (15s pour afficher la page d'accueil de knxweb lors que le RasberryPi est dédié à la domotique)
- dans la navigation entre onglets, je me retrouve parfois bloqué par un affichage grisé et un "veuillez patienter" qui ne rend jamais la main.

Sur quel repository puis-je trouver les versions les plus à jour des composants de cette suite ? La sauvegarde du fichier <racine de knxweb2>/linknx.xml, ainsi que les ressources graphiques (contenu de <racine de knxweb2>/pictures) est-elle nécessaire et suffisante pour ne rien perdre du travail effectué pendant la mise à jour ?

J'ai sans doute mal fouillé, mais existe-t-il une documentation qui m'expliquerait toutes les options de chacune des rubriques de Knxweb ? J'ai tout découvert par moi même jusqu'ici (avec déjà ton aide sur mes problèmes de retour d'état en janvier dernier).

Merci.

Cordialement.
Répondre
#4
klmpencran a écrit :@Energy01, un grand merci pour ta réponse.
De rien
klmpencran a écrit :En ce qui concerne la version de Knxweb, je fais tourner la version 0.9.3, accompagnée de la version 0.0.1.32 de linknx. Ces versions ont été installées sur mon RaspBerryPi à l'aide du script install_trio que tu nous as gracieusement mis à disposition.
ok donc les "dernières version" de knxweb et linknx bien

klmpencran a écrit :Mais mon besoin est qu'elle ne soit évaluée qu'à 14h, et même idéalement, entre 14h et 18h (je n'ai rien trouvé de mieux que de créer 4 règles, chacune évaluée à 14, 15, 16 et 17h). Peut-être ai-je mal compris le fonctionnement des règles.
tu n'as pas "mal compris" le fonctionnement des règles mais en effet il y a moyen de le faire en 1 seule
je t'ai mis un exemple pour ta rule sur le site de "démo" : http://www.knxweb.fr/demo/setup.php
dans la condition "timer" il y a un deuxième onglet pour dire "jusqu'a" quand la condition timer est "active" soit dans ton cas de : 14h jusqu'à 18h

klmpencran a écrit :Je constate bien la présence de toutes les règles que j'ai définies dans la liste déroulante en première ligne de l'onglet règle. Lorsque je sélectionne une règle, elle s'affiche comme je l'ai définie. Pour autant, aucun événement n’apparaît concernant cette règle, ce qui me fait dire qu'elle n'est pas évaluée à 14h. De fait, en ces temps de chaleur, mes volets ne sont jamais descendus lorsque j'arrive du boulot le soir, or la condition de température est largement dépassée.
qu'est ce que tu appel "événement" car je comprend pas ce que tu veux dire

klmpencran a écrit :J'ai également des doutes sur les valeurs auxquelles je compare des données de datapoint 9.xxx : températures, réglages fin de volets, ... Vu le résultat de groupsocketlisten sur les GA de température, je comprends que les valeurs sont codées en hexa, et que la traduction en décimale m'amène une température en degrés sur 4 chiffres avec deux virgules (à l'heure actuelle : 9C4=2500 ou 25°C). Dans mon design, j'ai bien un affichage de 25.0 dans mon widget de température et je pense que mon calcul est bon. Par contre, je ne suis pas sûr de la possibilité de la comparaison id="temp_sejour" op="gte" value="23" dans ma règle.

pour la comparaison de valeur ça marche bien linknx gère très bien il converti en fonction du type de chaque object, en l'occurence datapoint 9.xxx c'est un float, pour comparer donc pas de problème si tu met 23 ou 23.0 c'est pareil

klmpencran a écrit :De la même façon, ma commande générale qui va descendre mes volets roulants à une hauteur de 35% ne s'exécute pas via knxweb, en écrivant directement la valeur 89 (35% de 255) dans l'objet de commande générale. Pourtant, groupsocketlisten m'affiche bien cette information lorsqu'elle passe sur le réseau, lorsque j'ai actionné le positionnement de mes volets à 35% depuis un écran tactile Zennio, et tous les volets renvoient le retour d'état.
pour la commande des volets quel est le type des object de commande des volets si 5.xxx c'est bien valeur de 0 à 255 mais si tu a 5.001 pour la même GA linknx va convertir en pourcentage soit de 0 (pour 0) à 100 (pour 255) peut-être plus facile a gérer avec des object de type 5.001
et comment envois-tu cette commande générale ?


klmpencran a écrit :Je pense, au vu de ce que tu m'écris concernant les logs, que mon cocktail linknx/knxweb ne fonctionne pas correctement. D'autres artefacts me font pencher pour cette cause :
- les pages web sont très lentes à s'afficher (15s pour afficher la page d'accueil de knxweb lors que le RasberryPi est dédié à la domotique)
- dans la navigation entre onglets, je me retrouve parfois bloqué par un affichage grisé et un "veuillez patienter" qui ne rend jamais la main.

j'ai un pi aussi et c'est vrai que c'est pas des plus rapide ...
et pour le blocage oui ça arrive des "petits bug" sur la version en cours (dispo sur le cvs) peuvent être génant c'est vrai !!! il faut recharger et ça ce résoud ...
ça arrive quand on en ouvre plusieurs et suivant l'ordre dans lequel on le fait ...


klmpencran a écrit :Sur quel repository puis-je trouver les versions les plus à jour des composants de cette suite ? La sauvegarde du fichier <racine de knxweb2>/linknx.xml, ainsi que les ressources graphiques (contenu de <racine de knxweb2>/pictures) est-elle nécessaire et suffisante pour ne rien perdre du travail effectué pendant la mise à jour ?

alors le "officiel" c'est le cvs de sourceforge : http://linknx.cvs.sourceforge.net/viewvc...b/knxweb2/
sinon une version plus évoluée Tongue : https://github.com/energy01/knxweb
mais bon cette dernière peut être buggée Wink mais a pas mal de petite amélioration notamment sur les blocages de certains onglet ... ( si tu as des widgets graph tu devra revenir dessus pour que cela fonctionne sinon doit être "rétro-compatible" pour tout le reste )

sinon pour une mise à jour suffit de télécharger depuis le cvs et décompresser par dessus le dossier knxweb et tout devrait être ok (a voir les droit en écriture des dossier mais un "sudo chmod 775 -R /var/www/knxweb2" résous le problème

le mieux étant de sauvegarder soit tous le dossier avant ou au minimum le linknx.xml, les pictures si tu en a ajouté des perso et aussi surtout le dossier "design"

pour la version de git tu peux dupliquer ton dossier knxweb2 actuel en le renommant comme tu veux et mettre dedans la version du git pour tester

sur le même pi tu peux avoir autant de version que tu veux suffit de dupliquer le dossier knxweb a chaque fois et le renommer
perso sur mon Pi je dois avoir 4 versions différentes, soit 4 dossiers de nom différent, sans parler des autres machines ...


il n'y aura par contre qu'un seul linknx.xml utilisé par linknx et donc celui qui est dans /var/www/knxweb2/


klmpencran a écrit :J'ai sans doute mal fouillé, mais existe-t-il une documentation qui m'expliquerait toutes les options de chacune des rubriques de Knxweb ? J'ai tout découvert par moi même jusqu'ici (avec déjà ton aide sur mes problèmes de retour d'état en janvier dernier).

ah ben oui c'est le gros manque !!
est-ce que faire 1 vidéo de présentation pourrait aider ? plus simple et rapide pour moi que d'écrire de fastidieuses docs ...
1 vidéo ça peut être super long peut-être plusieurs de quelques minutes max sur chaque fonction je sais pas trop si cela peut en intéressé d'autres ...

@+
Anthony.
Knxweb : http://www.knxweb.fr/
Dépot des sources : https://github.com/linknx/knxweb
Version de démo de Knxweb : http://www.knxweb.fr/demo/setup.php
Script install du trio : https://github.com/linknx/install
Export ETS génère le linknx.xml : http://www.knxweb.fr/ETS/index.php
Répondre
#5
@Energy01, encore une fois, merci pour ta rapidité.

Compte tenu de tes réponses, j'ai actualisé ma règle comme celle que tu as postée sur le site de démo. Je verrai demain si ça marche.

Ta réponse m'a mis sur la piste d'un objet de mauvais Datapoint Type : le réglage fin des volets était en objet de type 9.xxx lui aussi. J'ai modifié le Datapoint Type a 5.001. La commande générale est envoyée en faisant un SetValue dans l'objet de commande générale dans ma règle.

D'après ce que j'ai compris des menus de Knxweb, j'ai en partie gauche de mon interface, entre Règles et Edition du design, un menu qui s'appelle Evénements. Dans ce menu, je constate que les événements "à venir" sont indiqués :
- prochaine ouverture générale des volets à 7h45 (tous les jours de semaine), prévue demain à 7h45 donc
- prochaine fermeture générale des volets à l'heure du coucher de soleil - 5mn, prochaine exécution à 21h09 demain.

Je peux même exécuter manuellement une règle depuis cette liste d'événements. Je m'attendais donc à trouver la prochaine évaluation de ma règle de fermeture des volets à 14h demain. Or cet événement n'est pas inscrit dans cette section.

Je suis prêt à t'aider pour la doc, dès que j'ai tout compris. Suis pas très fort en développement, mais je suis prêt à aider le projet, avec mes maigres moyens.

Cordialement.
Répondre
#6
klmpencran a écrit :Ta réponse m'a mis sur la piste d'un objet de mauvais Datapoint Type : le réglage fin des volets était en objet de type 9.xxx lui aussi. J'ai modifié le Datapoint Type a 5.001. La commande générale est envoyée en faisant un SetValue dans l'objet de commande générale dans ma règle.

ok donc tu as 1 seule GA qui regroupe toutes les commandes des volets en position

klmpencran a écrit :D'après ce que j'ai compris des menus de Knxweb, j'ai en partie gauche de mon interface, entre Règles et Edition du design, un menu qui s'appelle Evénements. Dans ce menu, je constate que les événements "à venir" sont indiqués :
- prochaine ouverture générale des volets à 7h45 (tous les jours de semaine), prévue demain à 7h45 donc
- prochaine fermeture générale des volets à l'heure du coucher de soleil - 5mn, prochaine exécution à 21h09 demain.

Je peux même exécuter manuellement une règle depuis cette liste d'événements. Je m'attendais donc à trouver la prochaine évaluation de ma règle de fermeture des volets à 14h demain. Or cet événement n'est pas inscrit dans cette section.

ah oui la section événement !!
j'avais fait cette section pour afficher les règles qui ont 1 seule condition de type timer et uniquement celles-là
permettait de créer plus facilement/rapidement des rules simples
et je vais surement supprimer cette section dans les prochaines version comme sur la version github d’ailleurs je dois l'avoir désactivée ...

la seule chose qu'il n'y avait pas dans la partie rule c'est l'info de "Next execution" que j'ai donc ajouté
et exécuter les actions c'est possible aussi manuellement dans la section "règle" plus ou moins de la même manière

klmpencran a écrit :Je suis prêt à t'aider pour la doc, dès que j'ai tout compris. Suis pas très fort en développement, mais je suis prêt à aider le projet, avec mes maigres moyens.

alors oui avec plaisir Tongue je suis preneur de tout type d'aide / bonne volonté
je pourrais te donner accès au projet sur sourceforge pour ajouter des pages au "wiki" si tu veux

@+
Anthony.
Knxweb : http://www.knxweb.fr/
Dépot des sources : https://github.com/linknx/knxweb
Version de démo de Knxweb : http://www.knxweb.fr/demo/setup.php
Script install du trio : https://github.com/linknx/install
Export ETS génère le linknx.xml : http://www.knxweb.fr/ETS/index.php
Répondre
#7
(14/04/2015, 22:08:12)Energy01 a écrit : 1 vidéo ça peut être super long peut-être plusieurs de quelques minutes max sur chaque fonction je sais pas trop si cela peut en intéressé d'autres ...

Ha oui ça c'est sûr ! Ça peut intéresser d'autres Big Grin, moi le premier
Répondre
#8
Bonjour à tous.

Eureka, ça marche ! Tout ça à cause (sans doute) d'un mauvais datapoint type dans mon objet.

Merci à toi @Energy01 !

Et mon offre tient toujours pour la documentation.
Répondre


Atteindre :


Utilisateur(s) parcourant ce sujet : 1 visiteur(s)