Homewatcher : une centrale d'alarme en python pour Linknx

186 views
Skip to first unread message

Cyrille

unread,
Sep 26, 2014, 9:55:33 AM9/26/14
to eibd-link...@googlegroups.com
Bonjour à tous,

J'ai commencé il y a un peu plus d'un an le développement d'une centrale d'alarme en Python, basée sur Linknx. J'en ai parlé initialement ici.

Après tout ce temps, le projet n'était pas mort, bien au contraire. C'est juste le temps qui manque pour avancer plus vite...

Qu'importe, la première version est désormais disponible ! L'application s'appelle Homewatcher et elle est disponible sur le Python Package Index.
Vous trouverez toute la documentation nécessaire sur le dépôt github.
Vous verrez dans le détail comment installer, configurer et utiliser Homewatcher. Pour l'installation, consultez notamment la page Getting Started.

Le tout est disponible sous licence GPL.

Note:
Je préfère conserver un tag 'beta' sur cette première version dans la mesure où je n'ai pas encore de vrai retour utilisateur. Néanmoins, la quasi totalité des fonctionnalités sont éprouvées via des tests de recette ou des tests unitaires (visibles dans le dépôt pour ceux qui voudraient utiliser homewatcher en tant que module). Donc en principe, ça doit fonctionner plutôt bien. Cependant, n'hésitez pas à me contacter directement si vous avez des questions, un problème ou une demande d'évolution.

Bonne journée,
Cyrille

Cyrille

unread,
Oct 2, 2014, 5:33:53 AM10/2/14
to eibd-link...@googlegroups.com
Bonjour,

Est-ce qu'il y a du monde intéressé ? Si certains y ont au moins jeté un oeil, j'apprécierais beaucoup un retour du genre :
- bof, c'est nul, ça sert à rien ton truc !
- je suis intéressé mais j'ai rien compris à comment ça marche !
- je suis intéressé et je crois que je pourrais l'utiliser

J'avais tâté le terrain l'année dernière et plusieurs personnes avaient dit être intéressées par le projet. C'est pour ça que je m'étonne du bide majestueux de mon post...
J'envisage en effet d'y ajouter encore quelques fonctionnalités qui me seront utiles. Mais si ça n'intéresse personne, je ne vais pas m'embêter à tout documenter :)

Merci !
Cyrille

Laurent

unread,
Oct 2, 2014, 5:50:49 AM10/2/14
to eibd-link...@googlegroups.com
Bonjour,

Je trouve l'idée très bonne !!!

Tu as fait une doc en français ?


Merci d'avance

Laurent

Cyrille

unread,
Oct 2, 2014, 6:01:43 AM10/2/14
to eibd-link...@googlegroups.com
Bonjour Laurent,

Non, pas de doc en français pour l'instant. J'ai supposé que l'anglais était le meilleur choix pour toucher le plus grand nombre (comme Linknx, d'ailleurs, il me semble).

Est-ce que l'anglais est un problème ou c'est juste pour le confort ? Maintenir la doc dans plusieurs langues est vraiment un gros et fastidieux boulot donc je veux bien m'y mettre mais faut que ça en vaille le coup.

Merci pour ton avis, en tout cas !

A+
Cyrille

Laurent

unread,
Oct 2, 2014, 7:18:46 AM10/2/14
to eibd-link...@googlegroups.com
Tu pourrais m'expliquer le principe comment ça marche ?

Merci d'avance

Laurent

Cyrille

unread,
Oct 2, 2014, 8:08:37 AM10/2/14
to eibd-link...@googlegroups.com
> Tu pourrais m'expliquer le principe comment ça marche ?
Tu n'as pas répondu à ma question :)Est-ce que l'anglais est vraiment un problème ?
Si la réponse est oui, alors il faut traduire la doc en français. Mais je pense que ce n'est pas indispensable dans la mesure ou Linknx est un prérequis et que la doc de Linknx est en anglais.

Le fonctionnement en deux mots :
- homewatcher est un process qui communique de manière bidirectionnelle avec linknx.Dans un sens, ça passe par le serveur XML de linknx et dans l'autre, linknx envoie des informations via un ioport.
- homewatcher se configure avec un fichier XML ressemblant à ça. Ce fichier décrit les modes de fonctionnement de l'alarme (typiquement 'Absence', 'Présence', 'Nuit', 'Vacances', ...), les différents types d'alertes gérées (par exemple : Intrusion, Incendie, ou n'importe quoi d'autre qui a du sens pour toi...) et les capteurs utilisés.
- un capteur, c'est un concept virtuel qui observe un objet linknx (renseigné via l'attribut 'watchedObjectId') et qui se déclenche en fonction des valeurs de l'objet. Pour un sensor de type 'boolean', par défaut lorsque le watchedObject passe à 'on' dans linknx, le capteur se déclenche. Pour un capteur 'float', il se déclenche lorsque le watchedObject sort des bornes indiquées dans la config.
- lorsqu'une alerte est levée, il est possible d'exécuter des actions avec la même syntaxe que linknx. L'exécution de l'action est d'ailleurs déléguée à linknx.

Je prends l'exemple de mon installation :
- j'ai 4 modes : Absence, Présence, Nuit et Ménage qui servent respectivement lorsque la maison est vide, lorsqu'on est là, la nuit ou lorsque ma femme de ménage est en train de passer l'aspirateur (en mon absence).
- j'ai 3 types d'alerte : Intrusion, Incendie et Température. La première est levée par des détections d'ouverture sur les fenêtres et portes, la seconde par des DAAF Kidde modifiés pour être interfacés avec le bus, la troisième lorsque la température extérieure passe sous zéro ou lorsque la température dans mon abri de jardin dépasse 35°C.
- Les sondes de température ainsi que les DAAF sont surveillés dans tous les modes
- Les capteurs d'intrusion sont tous actifs en mode Absence, partiellement actifs en mode Nuit et en mode Ménage pour permettre d'aller et venir dans la maison.
- Si je passe de Présence à Absence, le capteur sur la porte d'entrée s'active après 60s, ce qui me laisse le temps de quitter les lieux. Si je passe de Présence à Nuit, ce capteur s'active instantanément puisque je ne suis pas censé sortir. Idem pour la porte du garage ou celle de l'abri de jardin.
- J'utilise également une caméra IP, raccordée à motion pour l'analyse du flux vidéo en guise de détecteur de mouvement additionnel. Cela se traduit par un capteur de type 'boolean' et j'ai un peu de code perso pour rajouter de la glue entre Motion et Homewatcher. Ce capteur ne s'active en mode Absence que si les volets de la pièce sont tous fermés, pour éviter les faux positifs.

Je crois que j'ai dit l'essentiel. Je n'ai pas détaillé comment cela est réalisé mais ça donne une idée de ce qu'il est possible de faire.

Les fonctionnalités en cours de développement ou en réflexion sont visibles en tant que Github Issues. Vous pouvez proposer les vôtres :)
En ce moment, je travaille sur l'issue #15 pour permettre d'envoyer des emails ou des sms dont le corps du message est contextuel. Par exemple, cela permettra en cas d'intrusion d'envoyer un sms indiquant quel capteur s'est déclenché, ce qui est assez pratique quand on n'a qu'une mauvaise connexion Edge sous la main alors qu'il faut rapidement décider d'appeler la maréchaussée ou non...

Je termine en précisant que le petit frère de Homewatcher que j'avais développé il y a deux ans pour satisfaire mon besoin perso a démontré son efficacité fin 2013 en faisant échouer une tentative de cambriolage à mon domicile. Ca marche, donc :)

A+
Cyrille

Cedric

unread,
Oct 2, 2014, 9:53:52 AM10/2/14
to eibd-link...@googlegroups.com
Bonjour Cyrille,

tout d'abord bravo pour ce travail, qui est remarquable. Pour répondre à ce post demandant une critique, voici mon avis, qui n'est que mon avis, que j'espère constructif !

Je trouve l'idée d'une gestion modulaire à l'aide d'un fichier xml très intéressante, cela permet une personnalisation complète, et ainsi de se fabriquer une alarme sur mesure quasiment dans frais.
Le gros défaut, je pense, est la gestion de la coupure de courant, qui n'est pas intégrée; à moins de réaliser un montage avec un rasperry (ou autre), une batterie et un circuit de détection de la coupure.

L'idéal serait d'utiliser un OS android, ce qui permettrait de recycler un ancien smartphone. La gestion de la charge / décharge sur secteur / batterie serait très simple, ainsi que l'envoie de SMS d'alerte sans ADSL ni 230V. Mais à ma connaissance, le langage Python que tu utilises pour Homewatcher ne permet pas ce portage.

Ma contrib à 2 balles !

Encore bravo.

Cédric
--
Vous recevez ce message, car vous êtes abonné au groupe Google Groupes "Eibd / Linknx / KnxWeb".
Visitez ce groupe à l'adresse http://groups.google.com/group/eibd-linknx-knxweb.

chtiloft

unread,
Oct 2, 2014, 11:43:20 AM10/2/14
to eibd-link...@googlegroups.com
bonjour,
je partage avec Cédric, un super boulot. Je n'ai pas encore testé, juste lu la doc (clap clap). Sauf erreur de ma part, je ne vois pas de notion de zone à surveiller selon les modes (nuit, etc) ? 

Cdlmnt.
Arnaud

Cyrille

unread,
Oct 2, 2014, 12:30:33 PM10/2/14
to eibd-link...@googlegroups.com
Merci à vous deux pour votre retour.

@Cédric :
Le problème de l'alimentation de la machine qui fait tourner homewatcher dépasse clairement l'objectif que je m'étais fixé. Le problème ne se pose pas que pour homewatcher : linknx est également nécessaire. A la fin, pour que tu puisses être notifié de quoi que ce soit, il te faut linknx, eibd et homewatcher, même en cas de panne de courant.
Pour moi, ce problème est indépendant. Tu peux le régler avec un raspberry alimenté par une pile, un pc sous onduleur (c'est ce que j'ai retenu), un laptop sur batterie, un téléphone (si t'es prêt pour le combat), ... Quant à porter homewatcher pour Android, ça pourrait sans doute se faire puisqu'il y a des environnements python pour Android. En revanche, le problème de linknx est plus ardu à régler.

@Arnaud
Si, tu peux définir quels capteurs surveiller en fonction du mode. Regarde cet exemple, dans chaque élement <mode> il y a des élements enfants <sensor> qui indiquent les capteurs surveillés lorsque ce mode est actif. Dans l'exemple, le mode Présence inclut donc
GarageTemperatureProbe et le mode Away inclut EntranceDoor, GarageDoor et GarageTemperatureProbe.

A+
Cyrille

chtiloft

unread,
Oct 2, 2014, 5:11:24 PM10/2/14
to eibd-link...@googlegroups.com
Re,
j ajoute mes remarques : ne pas oublier qu'ici il n y a pas que des experts linux et cie , il y a aussi des "pas courageux" et des overbooked.
Dans le wiki, (https://github.com/2franix/homewatcher/wiki/Getting-Started) il pourrait être intéressant d'ajouter les "aptitude install" afin de donner envie de tester ton boulot :).
voici ce que j'ai fait :
apt-get install python3
apt-get install python3-pip ???
With pip for Python 3 (http://www.pip-installer.org),
from https://pip.pypa.io/en/latest/installing.html#install-pip
wget  https://bootstrap.pypa.io/get-pip.py
 python3 get-pip.py
simply do:
 a noter au passage aussi peut etre un lien vers  https://pypi.python.org/pypi/pyknx/ ;)

 pip3 install --pre homewatcher

pour ma part, j'obtiens ceci sur mon rpi
pip3 install --pre homewatcher
Downloading/unpacking homewatcher
Downloading homewatcher-1.0.0b6.tar.gz
Running setup.py (path:/tmp/pip_build_root/homewatcher/setup.py) egg_info for package homewatcher
Traceback (most recent call last):
File "<string>", line 17, in <module>
File "/tmp/pip_build_root/homewatcher/setup.py", line 26, in <module>
import homewatcher
File "homewatcher/__init__.py", line 23, in <module>
from pyknx import Version
ImportError: cannot import name Version
Complete output from command python setup.py egg_info:
Traceback (most recent call last):

File "<string>", line 17, in <module>

File "/tmp/pip_build_root/homewatcher/setup.py", line 26, in <module>

import homewatcher

File "homewatcher/__init__.py", line 23, in <module>

from pyknx import Version

ImportError: cannot import name Version

----------------------------------------
Cleaning up...
Command python setup.py egg_info failed with error

Cyrille Defranoux

unread,
Oct 2, 2014, 5:18:17 PM10/2/14
to eibd-link...@googlegroups.com

Ton erreur vient du fait que tu n'as pas installé pyknx d'abord. Il faut suivre les étapes du getting started dans l'ordre.

Quant à l'install de pip, aptitude install python3-pip suffit, c'est dommage d'aller l'installer à la mano comme tu as fait (ou j'ai pas compris)
Je regarde demain pour essayer de clarifier la page getting started.
Merci pour ton retour :)

Cyrille

Vous recevez ce message, car vous êtes abonné à un sujet dans le groupe Google Groupes "Eibd / Linknx / KnxWeb".

Cyrille Defranoux

unread,
Oct 2, 2014, 5:31:44 PM10/2/14
to eibd-link...@googlegroups.com

Ah,  pour python3-pip, possible que le paquet n'existe pas pour raspbian. J'utilise debian testing, alors faut que je vérifie.

Dans tous les cas, pip n'est pas obligatoire, c'est juste un moyen pratique pour installer. La méthode qui marche toujours c'est de telecharger la tarball sur pypi, de la dézipper et d'exécuter :
./setup.py install

C'est une forme d'équivalent au traditionnel configure-make install des softs gnu en C ou C++

Je vais préciser ça, en effet, ça serait ballot de rester planté sur la première étape !

Cyrille

chtiloft

unread,
Oct 2, 2014, 5:32:49 PM10/2/14
to eibd-link...@googlegroups.com

ach, mon copie colle ne doit pas etre complet, j'ai bien install pyknx avant.
quant à apt-get install python3-pip uniquement, ca ne fonctionnait pas, j'avais pas acces a pip3....

chtiloft

unread,
Oct 2, 2014, 6:49:06 PM10/2/14
to eibd-link...@googlegroups.com
pour info,
pip3 install --pre --upgrade pyknx
pip3 install --pre --upgrade homewatcher

semble avoir résolu le pb....

Cyrille

unread,
Oct 3, 2014, 2:02:29 AM10/3/14
to eibd-link...@googlegroups.com
> quant à apt-get install python3-pip uniquement, ca ne fonctionnait pas, j'avais pas acces a pip3....
Etonnant. J'ai pip3 dans /usr/bin/pip3. Quelle est la sortie d'un dpkg -L python3-pip sur ta machine ?


> pip3 install --pre --upgrade pyknx
> pip3 install --pre --upgrade homewatcher
> semble avoir résolu le pb....
N'aurais-tu pas oublié l'option --pre lors de ta première installation de pyknx ? Sans --pre, pip t'auras installé la version 1 de pyknx, laquelle te donnerait effectivement l'erreur que tu as observée à l'install de homewatcher. En faisant un second install avec --pre et --upgrade, tu auras mis à jour pyknx vers la version 2. Ca me semble probable :)
Pour en avoir le coeur net, peux-tu retrouver la ligne de commande que tu as utilisée pour la première install. Tu peux fouiller ou m'envoyer ton fichier .bash_history (dans le $HOME du user utilisé) pour retrouver l'info. J'aimerais bien être sûr de mon coup, là :)
Si c'est ça, je vais blinder le setup.py de homewatcher pour qu'une erreur claire soit indiquée dans ce scénario.

Merci beaucoup !
Cyrille

Cyrille

unread,
Oct 3, 2014, 2:07:20 AM10/3/14
to eibd-link...@googlegroups.com
Et juste pour rappel pour aller plus vite à l'avenir : pour aider à diagnostiquer un problème, il est important de toujours fournir la sortie complète des commandes utilisées, même si vous penser a priori que ça n'a aucun intérêt (en général, l'utilisateur final ne peut pas en juger). Si mon hypothèse pour l'install de pyknx sans --pre est bonne, je l'aurais compris dès hier soir si j'avais vu l'output de la console, c'est dommage !
Merci !

Petitpunch

unread,
Oct 10, 2014, 10:35:58 AM10/10/14
to eibd-link...@googlegroups.com
Bonjour,
j'ai aussi réalisé une alarme en linknx mais je n'ai utilisé que linknx.  En fait elle détecte les incendies et les intrusions via des capteurs sur les portes et fenetres.

je passe d'un mode inactif à un mode nuit par un widget dans knxweb2 (alarme clock), celui-ci active la protection périphérique tout seul le soir venu et désactive tout seul le matin... fini l'oubli.

Pour le reste du temps pour entrer et sortir j'utilise une page php qui me laisse 30 sec pour armer et désarmer. et j'utilise une petite tablette android bon marché avec verrouillage de l'écran en guise de clavier d'alarme (au pire ils voleront la tablette bon marché).

Pour le reste linknx m'appel sur mon portable (via asterisk), mon fixe et m'envoi également un email et un sms dès qu'il y a déclenchement alarme ou incendie.

Jusqu’à présent je m'en sort sans rien d'autre que linknx,knxweb et asterisk...  juste des regles.








Le vendredi 26 septembre 2014 15:55:33 UTC+2, Cyrille a écrit :

Cyrille

unread,
Oct 11, 2014, 4:45:52 AM10/11/14
to eibd-link...@googlegroups.com
Salut,

Si ça satisfait ton besoin, alors c'est certainement parfait :)

Mais homewatcher propose plus de fonctionnalités que ça. Surtout, il permet de gérer les modes, les capteurs, etc, sans devoir vraiment se donner du mal. Il suffit de configurer un xml, c'est quand même très simple.
Pour ma part, une activation automatique d'un mode à un horaire donné, je n'en voudrais pas. Mais si ça intéresse certains ça pourrait être intégré dans homewatcher. Pourquoi avoir fait ça avec un widget knxweb plutôt que dans linknx ? Du coup, il faut que knxweb soit chargé pour que le mode soit changé ?

Bon week-end,
Cyrille

Anthony PENHARD

unread,
Oct 11, 2014, 5:47:33 AM10/11/14
to eibd-link...@googlegroups.com
Salut,


> Pourquoi avoir fait ça avec un widget knxweb plutôt que
> dans linknx ? Du coup, il faut que knxweb soit chargé pour que le mode soit
> changé ?

knxweb n'est "que" l'interface web pour linknx il n'y a rien d'exécuté
par knxweb, c'est linknx qui gère tout pas de daemon pas de tache CRON
on peut très bien utiliser knxweb et d'autres visu en parallèle pour
le "même" linknx

le widget "alarm clock" permet de gérer de façon "transparente" une
rule de linknx et s'affiche de façon simple dans la visu
on définit une liste d'action et via la visu on peut intervenir sur
l'heure d'exécution de cette rule
il est possible de faire un widget encore plus évoluer pour aller plus
loin dans la configuration l'idée étant d'être le plus simple/intuitif
dans l'interface web

je n'ai pas pris le temps de regarder "Homewatcher"
PS : merci pour le partage
je suppose que le principe est que cela va venir créer des rules dans linknx
est-ce qu'il y a aussi un daemon (ou cron) à tourner pour
"Homewatcher" ? ou linknx qui "gère tout" ?

@+
Anthony.

Cyrille

unread,
Oct 27, 2014, 9:01:28 AM10/27/14
to eibd-link...@googlegroups.com
Salut Anthony,

Je réponds avec beaucoup de retard, je n'avais pas vu ton message...

Merci pour la précision. Je n'utilise pas knxweb pour configurer linknx, je ne l'utilise que comme UI "passive" pour linknx. Mais là j'ai compris, merci :)

Pour tes remarques sur Homewatcher :
- Homewatcher est un démon qui tourne en parallèle de linknx. C'est le script hwdaemon.py qui sert à le démarrer
- Homewatcher ajoute des rules à linknx pour que linknx notifie par ioport le changement de certains objets. Plus exactement, c'est Pyknx qui se charge de cela: un autre package python sur lequel est basé Homewatcher. Mais cette modif de la config est faite automatiquement par hwconf.py.
- la logique de gestion des capteurs, modes, etc est implémentée en pur python dans Homewatcher. Elle n'est pas basée sur des rules linknx. En tant que développeur, écrire du code est plus souple et efficace que d'écrire une config XML complexe.

Comme je l'ai dit, linknx permet déjà de réaliser un système d'alarme. Mais il n'est pas raisonnable d'espérer faire ainsi tout ce que Homewatcher propose. Cela nécessiterait de dupliquer beaucoup de règles dans le XML et ça rendrait la config très fragile à maintenir. Et quand il s'agit d'une alarme, l'objectif c'est vraiment d'éviter que ça se casse la figure à chaque modif, non ?

A+
Cyrille

Cyrille

unread,
Nov 20, 2014, 8:00:49 AM11/20/14
to eibd-link...@googlegroups.com
Salut à tous,

J'ai terminé la version 1.1 de homewatcher. Les nouveautés sont indiquées ici. Il s'agit principalement de simplifier l'écriture d'action d'envoi d'email ou de sms.

En parallèle, je suis en train de relier "motion" à homewatcher sur mon install perso pour pouvoir convertir mes caméras en détecteur de mouvement. Cette fonctionnalité pourrait être intégrée à homewatcher mais cela demande un travail non négligeable. Si un nombre suffisant d'utilisateurs se montrent intéressés, ça peut se faire. Sinon, je peux facilement expliquer le principe, ce n'est pas bien compliqué.

Cyrille

chtiloft

unread,
Nov 27, 2014, 7:57:36 AM11/27/14
to eibd-link...@googlegroups.com
Hello


Le vendredi 10 octobre 2014 16:35:58 UTC+2, Petitpunch a écrit :
Bonjour,....

Pour le reste linknx m'appel sur mon portable (via asterisk), mon fixe et m'envoi également un email et un sms dès qu'il y a déclenchement alarme ou incendie.

....
Petitpunch, tu passes par quoi pour réaliser cela ? Merci.
Arnaud

raphael....@gmail.com

unread,
Oct 30, 2020, 7:21:28 AM10/30/20
to Eibd / Linknx / KnxWeb
Bonjour Cyrille,

Je suis directeur de la société Ergo3 en Suisse et je suis intéressé par votre travail, pourrions nous nous appeler ? ( Contact sur www.ergo3.ch)

A+

Raphaël

Cyrille Defranoux

unread,
Oct 30, 2020, 9:27:49 AM10/30/20
to Eibd / Linknx / KnxWeb
Bonjour Raphaël,

Je vous ai envoyé un email à votre adresse de contact.

Cyrille
Reply all
Reply to author
Forward
0 new messages