(modifié le 2 septembre 2018 à 23:20)

Il faut chaud, c'est l'été. Si vous habitez en appartement c'est toujours la même question : fait-il plus chaud dehors ou dedans ?

Plutôt que d'ouvrir la fenêtre pour le vérifier pourquoi ne pas recevoir une notification sur son smartphone dès que la température externe est inférieure à celle de votre appartement ?

Voyons comment faire avec Domoticz.

Principe de fonctionnement

J'utilise deux sondes banggood, une à l'intérieur et l'autre sur le balcon.

Ces sondes renvoient la température et l'humidité, seule la température nous intéresse. Pour simplifier le fonctionnement je me suis tourné vers Blockly, nativement présent dans Domoticz. Comme Blockly ne sait pas séparer la température de l'humidité j'utilise un script bash qui va mettre à jour les températures internes et externes dans des variables utilisateur, toutes les 5 minutes grâce à crontab.

 

Enfin si la température extérieure est effectivement inférieure à la température intérieure alors on envoie un SMS de notification, histoire de dire que c'est le bon moment pour ouvrir la fenêtre et permettre à la fraicheur d'innonder la pièce.

Cela peut vous sembler gadget, mais vous n'habitez peut-être pas dans une grande ville caniculaire. Il suffit d'oublier d'ouvrir la fenêtre quelques heures avant de se coucher pour passer une mauvaise nuit.

Création des variables utilisateur

Créer 3 variables utilisateurs Domoticz dans Réglages > Plus d'options > Variables utilisateur.

  • tempInt : décimal
  • tempExt : décimal
  • SMSdejaENVOYE : entier

Définir la valeur de la variable à 0 pour la création (erreur sinon).

La variable SMSdejaENVOYE nous permettra d'envoyer la notification une seule fois par 24h, elle passera à "1" après l'envoi d'un SMS.

Notez l'idx de chaque variable utilisateur ainsi que les idx de vos 2 sondes de témpérature, nous allons en avoir besoin ensuite.

Script bash

Le script va injecter la température en degré de chaque sonde dans une variable utilisateur, grâce à l'API de Domoticz.

Maj 09/2018 : jq est maintenant dans les dépôts : apt install jq

En pré-requis vous devez installer jq manuellement :

cd ~
sudo apt-get install dh-autoreconf -y
git clone https://github.com/stedolan/jq.git
cd jq
autoreconf -i
./configure --disable-maintainer-mode
make
sudo make install

Téléchargez et déposez mon script dans /home/pi/scripts (au choix, root non nécessaire).

Rendez-le exécutable :

chmod +x /home/pi/scripts/tempUpdate.sh

Ouvrir le script et éditez les id des sondes "ID_INT" et "ID_EXT"

ID_INT=1098
ID_EXT=1100

Changez aussi les noms des variables utilisateurs si vous avez mis autre chose que "tempInt" et "tempExt".

Exécutez le script qui doit retourner ceci :

$ /home/pi/scripts/tempUpdate.sh

Injection Temperature INT (30.2):
{
   "status" : "OK",
   "title" : "UpdateUserVariable"
}

Injection Temperature EXT (33.6):
{
   "status" : "OK",
   "title" : "UpdateUserVariable"
}

Fin du script - vendredi 23 juin 2017, 18:43:53 (UTC+0200) - v2016.08.15

On observe le retour OK pour l'insertion de chaque température via l'API Domoticz.

Vérifiez dans Domoticz (Réglages > Plus d'options > Variables utilisateur) que la valeur actuelle est maintenant à jour.

Ajout du script dans crontab

Toujours en tant que simple utilisateur non root, éditez le fichier crontab :

crontab -e

Ajouter le PATH (pour jq) au début du fichier cron :

PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

Ajouter l'exécution du script toutes les 5 minutes :

# extraction puis injection des temp INT et EXT
*/5 * * * * /home/pi/scripts/tempUpdate.sh

Sauvegardez et quittez le fichier.

Création du bloc dans Blockly

Il nous reste à comparer les deux sondes et de savoir si la notification a déjà été envoyée ou non aujourd'hui. Et c'est Blockly qui s'en charge dans Réglages > Plus d'options > Evènements.

Voici le principe :

  • SI l'heure courante > 19h et inférieure à 23h59
  • ET que tempInt > tempExt
  • ET que SMSdejaENVOYE est différent de 1
    • alors notification par SMS,
    • alors écriture log
    • alors temporisation de 6h
    • alors SMSdejaENVOYE=1

J'ai borné l'exécution du script en soirée (19h - 29h59) car c'est le moment où la température extérieure baisse. La temporisation doit être supérieure à la durée d'exécution pour ne pas générer plusieurs SMS le même jour. De 19h à 23h59 cela nous donne 5h, j'ai donc définis la temporisation sur 6h (6*60*60=21600 secondes).

Créer un évènement "SMS écart temp" puis créer les blocs de la sorte (cliquez dessus) :

Les variables utilisateurs sont dans "User Variables", write to log dans "Debug/log", start script dans "messages"

La notification par SMS se fait avec un dongle Huawei E303 ou E1752 avec les scripts d'Arno. Si vous êtes chez Free Mobile vous pouvez utiliser l'API SMS gratuite et choisir le bloc "open url" (dans messages) et insérer ceci :

https://smsapi.free-mobile.fr/sendmsg?user=11111111&pass=2222222222222&msg=Il fait plus frais dehors

Attention : laissez bien "https://" dans la valeur du bloc, sinon ça ne fonctionnera pas.

Conclusion

C'était relativement long à expliquer, mais en réalité c'est très simple. J'utilise ce script depuis plus d'un an, au départ sur Free Mobile et maintenant avec un dongle 3G Huawei car je suis passé chez Sosh donc je n'ai plus l'accès à l'API.

Le SMS est un exemple, libre à vous d'envoyer un mail, une notification Pushbullet, allumer une ampoule Hue en vert, etc.

Maintenant quand vous serez calé au fond du canapé devant Netflix et qu'un SMS retentira alors ce sera le moment d'ouvrir la fenêtre. Les plus feignants domotiseront aussi l'ouverture de la fenêtre ou des volets roulants 🙂

Auteur : Mr Xhark

Fondateur du blog et passionné par les nouvelles techno, suivez-moi sur twitter