Je vous présenterai très bientôt une centrale domotique Chacon autonome ainsi qu'une centrale domotique GSM. J'anticipe un peu ce billet puisque j'ai essayé de connecter un détecteur d'ouverture, présent dans les 2 kits, sur ma centrale domoticz.
Problème : l'état du capteur n'est pas remonté correctement à Domoticz. Je vous propose aujourd'hui une solution avec un script en Lua, peut-être l'occasion pour vous de découvrir un autre moyen de scripting que le bash.
Installation domotique
Petit rappel sur mon installation. J'utilise un Raspberry Pi B+ qui fait tourner Domoticz grâce à la distribution Raspbian.
Pour communiquer avec un maximum de périphériques tiers j'utilise un module RFXCom RFXtrx433E qui fonctionne sur la bande de fréquence 433,92 MHz.
Fonctionnement du capteur
Le capteur permet la détection d'ouverture d'une porte ou d'une fênetre. Il est vendu sous la référence CH34946 et fonctionne sur le même principe que le capteur Somfy : un aimant agit comme un interrupteur, ce qui permet au module d'émettre un signal de changement d'état.
Contrairement au capteur Somfy celui-ci ne possède pas de retour d'état (chuango). Aucune information n'est envoyée pour dire que les deux lamelles sont de nouveaux proches, c'est à dire que la porte est fermée. Cela n'est pas très gênant car si une alerte d'ouverture est émise c'est que quelqu'un est rentré dans le logement, cela permet donc de détecter une effraction.
Ce mode de fonctionnement veut aussi dire qu'il faut configurer Domoticz pour que l'état du capteur revienne sur l'état "porte fermée" automatiquement. Sinon il restera ouvert en permanence.
Ce capteur comporte à son dos un interrupteur de détection d'arrachement, qui émet une notification différente, comme s'il s'agissait d'un autre capteur. Ce capteur s'active si le détecteur est arraché de son emplacement alors qu'il est maintenu par du scotch double face.
Comme vous le voyez le capteur est alimenté par deux piles CR2032, une référence très classique que l'on retrouve sur la majorité des cartes mères d'ordinateur.
Ajout du capteur CH34946 dans domoticz
J'ai essayé de nombreux types de capteurs dans Domoticz et la solution la plus fonctionnelle est d'utiliser un capteur virtuel de type détecteur d'ouverture de porte (door sensor).
Avant tout il faut ajouter les deux capteurs :
- détection d'ouverture
- détection d'arrachement
Activation de Lighting4 et Arc
Dans Réglages > Matériel > RFXtrx433E > bouton "réglez le mode" : cocher Lighting4 et ARC. Lighting4 semble couvrir Lighting5, car c'est bien sous Lighting5 que sera vu notre capteur par Domoticz.
Dans Réglages > Paramètres > Matériel/dispositifs, cliquer sur le bouton "autoriser pendant 5 minutes". Séparer les deux parties du capteurs puis appuyer sur le switch arrachement au dos pour faire remonter les deux sondes dans Domoticz.
Aller dans Réglages > Dispositifs pour ajouter la sonde et chercher le type Lighting5 et le sous-type "BBSB new" car c'est sous ce nom que la sonde est vue par Domoticz. Cliquer sur la flèche verte pour lui donner un nom et l'ajouter :
Choisir un type de périphérique ON/OFF "light/switch".
Vérifiez que le capteur change bien d'état quand vous séparez les deux parties du capteur, pensez à regarder dans le log de Domoticz également (Réglages > Log).
Un méchant bug à contourner
Nous avons un souci : l'état du capteur réel reste toujours sur OFF. Quand j'ouvre la porte domoticz reçoit une information de changement d'état avec l'ordre OFF. Du coup la sonde reste toujours sur OFF, mais Domoticz reçoit bien un ordre OFF.
On a donc un problème : l'ordre est inversé car Domoticz reçoit l'ordre OFF signifie quand le capteur détecte une ouverture. Pour le vérifier il suffit de passer la sonde à ON en cliquant dessus via le menu interrupteurs, puis ouvrir la porte : il repasse à OFF.
Plutôt que de bidouiller la sonde nous allons créer un second capteur qui sera virtuel et reflétera l'état réel de la porte (ouverte ou non). C'est un script lua qui va faire le lien entre le capteur réel et le capteur virtuel, dès qu'un changement d'état est détecté.
La subtilité est ici, soyez attentif.
Pour domoticz l'écriture de la valeur d'une sonde est un changement d'état,même s'il écrit la même valeur. Le capteur réel est toujours sur OFF, mais lorsque j'ouvre la porte le capteur envoie l'info à domoticz pour dire "hey je passe sur OFF". Domoticz acquitte l'information en réécrivant la valeur OFF pour cette sonde. Certes la valeur était à OFF avant puis à OFF après mais nous avons un changement d'état.
En bref : un changement d'état dans domoticz ne signifie pas nécessairement passer de ON à OFF ou OFF à ON. Il consiste en la réception et l’enregistrement de la valeur quelle qu'elle soit.
note : à l'origine je voulais simplement définir un délai d'inversion d'état, mais cela ne convient pas à notre cas tordu
Création du capteur virtuel
Vous suivez toujours ? Alors passons au capteur virtuel.
Dans Réglages > Matériel ajouter un périphérique de type "dummy" (factice en anglais), sans délai d'attente des données.
Nommez-le "bouton virtuel" et faire ajouter :
Puis créer un capteur virtuel :
Entrer le nom "porte chacon virt" et choisir le type "door lock" (je vous déconseille de choisir d'autres types qui se comporteront différemment) :
Choisir un délai d'extinction, 6 secondes ici, pour éviter que le capteur bagote trop rapidement si la porte est fermée puis ouverte rapidement à plusieurs reprises. Dans mon cas cela génère un SMS et la clé 3G n'aime pas être trop stressée sinon elle pète un plomb.
Le script en lua
Comme on me l'a conseillé sur le forum domoticz je me suis tourné vers du code lua, à placer dans le répertoire /home/pi/domoticz/scripts/lua/.
Attention : le nom du fichier doit respecter : script_{time|device}_nom-au-choix.lua
Dans mon cas ce sera script_device_PorteChacon.lua :
----------------------------
------ Variables ------
------ blogmotion.fr ------
----------------------------
local chaconporte = 'Porte chacon' --Nom du capteur réel
local chaconvirtuel = 'Porte chacon virt' --Nom de l'interrupteur virtuel
commandArray = {}
-- DEBUT DU CODE
if (devicechanged[chaconporte]=='Off') then
commandArray[chaconvirtuel]='On'
print('************************************ Porte Ouverte via Chacon ! inversion')
-- après 6 secondes on repasse à ON via le délai d'extinction domoticz
end
return commandArray
Si vous utilisez Windows pour créer ce fichier faites-le avec Notepad++ en UTF-8 sans bom (menu encodage > convertir). Sinon utilisez directement nano, vi, vim, etc. Attention aussi à bien indenter le code correctement (tabulation sur ce qui est dans le if).
L'appel du script en lua est automatique par Domoticz, à partir du moment où le script est dans le bon répertoire censé accueillir les scripts. Magique non ?
Test du script
J'ai ajouté un print dans le code lua afin de voir rapidement la trace dans le log de domoticz.
Et voici la trace :
2017-02-01 00:38:57.764 Hardware Monitor: Fetching data (System sensors)
2017-02-01 00:39:17.691 LUA: ************************************ Porte Ouverte via Chacon ! inversion
2017-02-01 00:39:17.695 EventSystem: Script event triggered: /home/pi/domoticz/scripts/lua/script_device_PorteChacon.lua
2017-02-01 00:39:17.665 (RFXtrx433E) Lighting 5 (Porte chacon)
2017-02-01 00:39:17.722 Notification sent (http) => Success
2017-02-01 00:39:20.948 Notification sent (pushbullet) => Success
2017-02-01 00:39:17.713 (Bouton Virtuel) Lighting 1 (Porte chacon virt)
Il ne reste plus qu'à ajouter les notifications sur le capteur virtuel : http, pushbullet, etc.
Conclusion
Je vous expliquerai une prochaine fois comment j'ai réalisé la partie de notification SMS, vous pouvez utiliser PushBullet qui fonctionne aussi très bien si vous avez un forfait data. L'avantage du SMS est qu'il fonctionne même en cas de panne de connexion internet (sabotage, etc).
J'appréhendais un peu la conception d'un bout de code en lua et je pensais qu'il serait bien plus facile de faire ça en bash. Mais je me suis trompé, c'est d'une simplicité enfantine.
Le capteur Chacon CH34946 est vendu moins de 14 euros, pas de quoi se ruiner. Pour ceux qui voudraient absolument un retour d'état j'essaierai de me procurer un capteur Chacon DiO dans les prochains mois, en théorie complètement compatible.
Auteur : Mr Xhark
Fondateur du blog et passionné par les nouvelles techno, suivez-moi sur twitter
16 commentaires
Très interessant, je suis en train d'essayer d'utiliser ce module dans jeedom et je me retrouve avec le même problème. .Le module reste tout le temps à off.
Grace à toi j'ai des pistes pour faire fonctionner mon module ^^
Merci 🙂
Bon tuto.
Tu peux aussi utiliser l'editeur de script LUA integré a Domoticz.
L'avantage est que tes scripts sont enregistré dans la base de donnée qui est sauvegarder automatiquement.
L'autre gros avantage est que cela evite d'avoir a ce connecter avec winscp ou putty pour y mettre le script ou le retoucher .
Dernier bon point, il integre un correcteur, si il y a un probleme de formulation dans le script, ce sera indiqué sur la gauche par une croix blanche dans un carré rouge, une bulle explicant le probleme si tu passes ton curseur dessus.
@Deennoo: Merci, en fait ce n'est que très récemment que j'ai vu qu'il y avait un éditeur, je ne l'avais pas avant de faire les MàJ, tu as raison de le préciser si c'est plus simple pour certains 🙂
Merci mais en fait mon contact n'apparait pas en lighting5 et encore moins en données Off mais en "sécurité" ?
Par ailleurs les chacon et ca me parait être une aberration, je ne sais pas comment ouvrir le contacteur pour voir les batteries et la petite documentation ne le précise pas ce qui est sommes déroutant, pouvez vous me dire comment vous l'avez ouvert (dixit l'image)
merci d'avance
@bpi: tu as bien un RFXtrx433e ? pense à mettre à jour vers le dernier firmware disponible. Es-tu sûr que c'est bien le bon périphérique que tu as identifié ?
Pour démonter c'est un clipse, il suffit de l'ouvrir par le côté.
Bonjour,
Super se petit bout de code, mais j'ai eu une idée(place le DO au milieu du rail de ma porte de garage) ce qui fait que je pourrais détecter l'ouverture, puis la fermeture, mais je me bas avec se bout de code depuis 3jours..
Voici ou j'en suis :
Mais ça ne fonctionne pas, soit il reste toujours on ou alors il ne s'actionne plus(le bouton virtuel)
Auriez vous une idée!?
Merci
@Clement P.: je te conseille de faire des print puis de surveiller le log de domoticz, ainsi tu verras quelles sont les conditions qui fonctionnent ou ne fonctionnent pas.
@bpi:
mon capteur (exactement le meme ) est en lighting 4 et PT2262 en sous type , au lieu d'etre en OFF comme dans le tuto le miens est constamment en ON ducoup
jai juste modifier la valeur if (devicechanged[chaconporte]=='Off') then . en if (devicechanged[chaconporte]=='On')
pour que cela fonctionne , a noté que l'animation de la porte du capteur virtuel sur domoticz ne fonctionne pas toujours ,toutefois on peut voir ds les logs que l'info est bien transmise .
Merci pour ce tuto en tous cas qui m'a fait choisir ce capteur.
Hello, le mien est aussi en light 4 mais j'ai 3 dispositifs détectés et ils fonctionnent comme des push on. Donc un pour arrachage, un pour ouverture et un pour fermeture. Et oui, quand pour approchez de nouveau le contact, c'est considéré comme un troisième par domoticz. Du coup avec la logique des push on, c'est bon on a l'état du capteur ! Il reste plus qu'à créer en effet un bouton virtuel pour rendre compte de l'état de manière plus compréhensible. Il faut préciser à l'internaute lambda que ce capteur à la base n'est pas fait pour ça, il est prévu pour fonctionner avec ça centrale alarme de chacon
NB : il suffit aussi de mettre 10 secondes de délai de désactivation au push on pour qu'il réinitialise son état après avoir été activé
M'inspirant de ce post fort utile, je viens de constater qu'il est possible de créer un troisième capteur:
. détection de fermeture.
Dans ces conditions le script LUA disposant des informations d'ouverture et de fermeture, le dispositif virtuel peut facilement évaluer le temps d'ouverture de la porte.
Merci.
@laservert: tu peux nous en dire plus sur le script que tu as fait ? si ça peut servir à d'autres?
Bonjour,
est-ce que quelqu'un a étudié le rôle des 4 jumpers sur la carte ? J'ai noté qu'en retirant d2, l'aimant n'est plus utilisé, uniquement l'entrée filaire (à souder sur 'line')
@Manu: ah non mais c'est intéressant! tu as fait d'autres observations ?
@Mr Xhark:
Je n'ai fait qu'appliquer le script LUA déjà décrit plus haut.
A l'ocasion de la réinstallation d'un nouveau CH34946, je découvre plusieurs fonctionnalités.
1-Sous protocole X10, le système se comporte comme un dispositif d'alerte et ne fontionne qu'à l'ouverture et à l'arrachement.
2-En supprimant le protocole X10 sur le RFXCOM, le système prend la configuration de type Lighting 4, PT2262 et permet dans ce cas de configurer trois dispositifs: ouverture, fermeture, arrachement.