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.

domoticz-capteur-ouverture-chacon

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.

chacon-ch34946

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.

chacon-ch34946-piles

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 :

domoticz-chacon-ajout

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 :

domoticz-chacon-bouton-virtuel-ajout

Puis créer un capteur virtuel :

domoticz-chacon-bouton-virtuel-creer

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) :

domoticz-chacon-delai-extinction

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