[Edit 11/12/20] voir l’article sur la V2
Cette partie concernera l’automatisation de la l’ouverture de la porte. A cela on ajoutera un capteur DHT11 pour connaître la température et l’humidité du poulailler. Enfin, la récupération des informations sur Domoticz ;
Sommaire
Récupération de la température et de l’humidité
Pour la récupération de la température de la température de la météo. L’opération n’est pas pas bien compliqué. Un DHT11 qui traine dans le coin et voilà. Adafruit a déjà fait le reste du travail.
On commence par installer le nécessaire :
sudo apt-get update sudo apt-get install git git clone https://github.com/adafruit/Adafruit_Python_DHT.git cd Adafruit_Python_DHT sudo apt-get install build-essential python-dev python-openssl python-pip sudo python setup.py install sudo pip install request
Voila le plus dur est fait, ensuite on connecte le DHT11 à son Raspberry : sur le GPIO 18
Pour tester tout cela, on se rend dans le dossier Adafruit_Python_DHT/example et l’on tape :
sudo python AdafruitDHT.py 11 18
* 11 correspond au DHT11, dans le cadre d’un DHT22 nous aurions utilisé 22.
* 18 port GPIO sur lequel est connecté le GPIO
Reste plus qu’à envoyer l’ensemble des informations à Domoticz
Envoi des informations à Domoticz
Température et humidité
Voila un petit script en python récupéré ici : https://easydomoticz.com/dht-11-22-raspberry-ca-marche-enfin/
Ce tutoriel complète ce qui est présent dans cette partie et en particulier concernant les tâches cron à mettre en place.
#!/usr/bin/python from requests.auth import HTTPBasicAuth import requests import sys import Adafruit_DHT # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ # fonction # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ def maj_widget(val_url): requete = 'http://' + domoticz_ip + ':' + domoticz_port + val_url # print requete r = requests.get(requete, auth=HTTPBasicAuth(user, password)) if r.status_code != 200: print("Erreur API Domoticz") # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ # les parametres de Domoticz # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ domoticz_ip = '' domoticz_port = '8080' user = '' password = '' domoticz_idx = '' # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ # récuperation des informations des capteurs # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ # sensor est 11,22,ou 2302 # pin est le numero d la pin que vous avez cablée # https://pinout.xyz/pinout/pin12_gpio18# sensor = 11 pin = 18 humidity, temperature = Adafruit_DHT.read_retry(sensor, pin) if humidity is not None and temperature is not None and pressure is not None: # https://www.domoticz.com/wiki/Domoticz_API/JSON_URL%27s#Temperature.2Fhumidity.2Fbarometer # modele url : /json.htm?type=command¶m=udevice&idx=IDX&nvalue=0& # svalue=TEMP;HUM; # l URL Domoticz pour le widget virtuel url = '/json.htm?type=command¶m=udevice&idx=' + str(domoticz_idx) url += '&nvalue=0&svalue=' url += str('{0:0.1f};{1:0.1f};0').format(temperature, humidity) print(url) maj_widget(url) else: print('Probleme avec la lecture du DHT11. Try again!') sys.exit(1)
Après automatisation avec le cron nous arrivons à ce résultat :
# pour l'ajout d'un cron : contab -e # mettre à la fin du fichier : */5 * * * * pi /home/pi/chickencoop/send_to_domoticz.py
Pour la documentation sur l’usage du cron :
Automatisation d’ouverture/fermeture de la porte
Dans un premier temps nous allons installer le programme sunwait disponible à cette adresse : https://sourceforge.net/projects/sunwait4windows/files/sunwait0-8.tar/download
Reste à le décompresser et le compiler pour votre machine : voici les différents liens qui m’ont aider pour les quelques lignes ci-dessous.
- http://www.lavrsen.dk/foswiki/bin/view/Motion/SimpleSunriseSunsetScript
- http://scruss.com/blog/2013/02/06/hey-its-the-sun-heyu-and-sunwait-and-cron-on-the-raspberry-pi/
# extraction et décompression tar --get -f sunwait0-8.tar # compilation cd sunwait/0.8 make # ensuite pour le test : ./sunwait report 47.218N -1.554W
Voila et vous devriez vous retrouver avec un truc dans ce genre :
pi@raspberry:~/sunwait/0.8$: sunwait report 47.218N -1.554W Current Date and Time: 12-Jan-2019 14:53 CET Target Information ... Location: 47.218000N, 1.554000E Date: 12-Jan-2019 Timezone: CET Sun directly north/south: 13:01 Twilight angle: -0.83 degrees (daylight) Day with twilight: 08:36 to 17:26 It is: Day (or twilight) General Information (no offset) ... Times ... Daylight: 08:36 to 17:26 with Civil twilight: 08:03 to 17:59 with Nautical twilight: 07:25 to 18:37 with Astronomical twilight: 06:48 to 19:14 Duration ... Day length: 08:49 hours with civil twilight: 09:55 hours with nautical twilight: 11:12 hours with astronomical twilight: 12:25 hours
Maintenant il nous reste à ajouter au cron les taches d’ouverture et de fermeture : on refait un crontab -e et on ajoute les deux lignes suivantes, sur le modèle de celui-ci.
# modèle : # sunwait wait rise offset -1:15:10 51.477932N 0.000000E # ouverture du cron contab -e # ajout des ligne suivante 00 04 * * * /home/pi/sunwait/0.8/sunwait wait civil set 47.132N -1.3314W ; /usr/bin/python3 /home/pi/chickencoop/open_door.py > /home/pi/chickencoop/chicken.log 2>&1 00 16 * * * /home/pi/sunwait/0.8/sunwait wait civil set 47.132N -1.3314W ; /usr/bin/python3 /home/pi/chickencoop/close_door.py > /home/pi/chickencoop/chicken.log 2>&1
Voila, la porte s’ouvre et ce ferme automatiquement. Après il faudra surveiller le cycle des poules pour voir si cela correspond bien.
Information d’ouverture et de fermeture sur domoticz
Après avoir automatiser cela, l’idéal serait d’avoir un tableau de bord permettant de connaître l’état d’ouverture et de fermeture de la porte. La température étant surveillée depuis domoticz, l’idéal serait de voir tout cela depuis le même endroit.
N’ayant jamais fait cela et que le tutoriel qui me sert de base est sur un autre logiciel (Jeedom) ; je me suis basé sur le lien suivant : https://easydomoticz.com/domotique-comment-debuter/domoticz-et-les-materiels-virtuelq/ ; pour récupérer le code du JSON c’est par ici : https://www.domoticz.com/wiki/Domoticz_API/JSON_URL%27s#Text_sensor.
Ensuite on édite de nouveau send_to_domoticz.py en y ajoutant :
import door ... def door_status(): url_door = '/json.htm?type=command¶m=udevice&idx=' + str(domoticz_idx_door) url_door += '&svalue=' url_door += door.read_status() print(url) maj_widget ... # Rajouter l'idx du capteur virtuel (type texte) domoticz_idx_door = '' ... door_status()
Pas de besoin d’ajouter la tâche au cron, c’est déjà fait précédemment.
En conclusion, le DHT11 récupère la température et l’humidité et les transmet à Domoticz toutes les minutes ; également il vérifie l’état de la porte. Ensuite, à 4h et à 15h, sunwait se met en attente pour l’ouverture et la fermeture de la porte.
Sources
- Les sources (codes) sont disponibles sur github