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
9 commentaires
Bel article.
Je finissais le mien qui propose le meme service mais avec une approche differente :
Calculer le delta T entre la temperature interieur et exterieur (qui peux peu etre utiliser pour d'autre scenario).
Update un virtuel de temperature
Et en suite au choix :
- Utiliser le system de notification interne a Domoticz
- Allumer une ampoule de différentes couleurs en fonction de la valeur de ce delta T
@Deennoo: merci, n'hésite pas à publier ta version 🙂
Merci pour cette idée.
je m'en suis inspiré pour réaliser un script en lua pour domoticz
http://pon.fr/rafraichissement-nocturne/
https://easydomoticz.com/forum/viewtopic.php?f=17&p=38107#p38107
@papoo: Super, ton script est beaucoup plus évolué, il servira à d'autres, et merci pour le quote 🙂
En lua pour être notifié quand la température extérieur est inférieure ou supérieure à la température intérieure (prérequis une variable utilisateur au format string à 0 ou 1, ici notifsalon): https://pastebin.com/7E3z81dT
@chatainsim: merci, comment tu temporises par contre ?
@Mr Xhark:
Comment je temporises, c'est à dire ? Tu veux dire pour ne pas avoir de notification avant 19h ?
Il faut soit utiliser:
if (timeofday['Nighttime']) then
[...]
end
Pour que ça ne s'active que quand le soleil est couché.
Ou alors faire une vérification de l'heure:
time = os.date("*t")
if (time.hour >= 19 and time.hour <= 23) then
[...]
end
Par contre je ne l'ai pas testé mais ça devrait être un truc comme ça.
@chatainsim: je veux dire pour ne pas envoyer des notifications en rafales et seulement une fois par jour ?
@Mr Xhark: c'est la variable utilisateur notifsalon qui évite de renvoyer une notif.
En général la température ne varie pas énormément du coup je n'ai que deux notif, quand il fait plus chaud dehors et quand ça se refroidis.
En gros une dans la matinée et une en soirée.