[Domotique] Poulailler connecté – partie 2

[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 ;

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&param=udevice&idx=IDX&nvalue=0&
    # svalue=TEMP;HUM;
    # l URL Domoticz pour le widget virtuel

    url = '/json.htm?type=command&param=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.

# 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&param=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