Je souhaitais un certain nombre de fonctionnalités que je ne retrouvais pas avec les solutions commerciales :
- non pas basé sur la luminosité ou l’heure, mais sur l’heure réelle de lever et coucher du soleil
- pilotable à distance
- retour vidéo avec vision nocture, pour s’assurer que tout le monde est bien rentré dans le poulailler
- compatible jeedom

Ce qu’il faut acheter :
- Rpi zero w avec sa boite, 22€ chez Gearbest
- Carte SD, environ 15€ chez Amazon
- Caméra pour pi zero, 11.30€ chez Aliexpress
- Pont L298N, 1.26€ chez Aliexpress
- Moteur 12 V 25 RPM, 6.76€ chez Aliexpress
- Coupleur d’axe 6mm/6mm, 5€ sur ebay
- Capteur de fin de butée, 2.41€ les 10 chez Aliexpress
- convertisseur 12V vers USB 5V, 0.66€ chez Aliexpress
- Alimentation 12V 3A, 11€ chez Amazon
- Boîte en plastique, 7€ chez Amazon
- Porte coulissante en alu, 35€ chez Amazon
- Divers : wago, petit fil, bobine de cable, ficelle, petites poulies, gaines thermorétractables, soudure, diodes, etc…, environ 35€
Total : 130€
Bonus : caméra de surveillance supplémentaire, payé 19e en promo sur Gearbest
Selon ou vous achetez le délai est plus ou moins long mais prévoyez un mois pour tout recevoir, avant de pouvoir commencer l’assemblage.
Schéma logique moche :

Photo de la boîte avec tous ses composants (le fil d’ouverture de porte sort à la verticale) :

Des capteurs de fin de course associés à des diodes permettent de stopper le moteur lorsque la porte est tout en haut ou tout en bas.
Par fainéantise, je n’ai finalement installé qu’un seul capteur de fin de course, le plus important : celui de porte ouverte.
Coté Rpi0, des fils ont été soudés sur 3 gpio, masse, et 2 data
La caméra a été raccordée au Rpi0.
Raspbian a été installé, mis à jour, et configuré.
Pour la caméra, j’ai suivi le tuto suivant:
https://youtu.be/wIsRP0RGEmY
J’ai installé le programme “sunwait” pour déclencher l’ouverture et fermeture de la porte en fonction des horaires du soleil.
Jeedom a été configuré pour récupérer le flux vidéo et pousser les commandes manuelles.
Etant accro aux capteurs Xiaomi, et heureux propriétaire d’un Zigate, j’ai également “enrichi” le poulailler de quelques capteurs supplémentaires :
- capteur température & humidité
- capteur d’ouverture de la trappe donnant accès aux oeufs
- à venir : capteur d’état de la porte pour détecter des anomalies
Tuto poulailler
Code source
Avertissement : je ne me considère pas comme un développeur, et code beaucoup avec google dans une autre page… donc les scripts suivants fonctionnent, mais je ne peux pas garantir leur stabilité et sécurité. Le serveur ne doit donc pas être accessible depuis Internet.
Sur jeedom : les commandes d’ouverture et fermeture manuelles se font via le plugin script :

Sur le raspberry pi zero w, les pages correspondantes sont très courtes :
open_script.php :
close_script.php :
Ces deux pages appellent des fichiers pythons :
open_door.py :
#!/usr/bin/env python # vim: tabstop=8 expandtab shiftwidth=4 softtabstop=4 import door #quit() door.init() door.open_door() |
close_door.py :
#!/usr/bin/env python # vim: tabstop=8 expandtab shiftwidth=4 softtabstop=4 import door #quit() door.init() door.close_door() |
Ces deux fichiers appellent un autre fichier central : door.py, qui pilote les ports GPIO du RPi, génère des logs, et garde le statut dans un fichier texte. Suite à un problème qui a failli détruire le moteur (une fois la ficelle entièrement déroulée, si on continu à dérouler, ça enroule dans l’autre sens !), j’ai ajouté des sécurités empêchant de fermer ou ouvrir deux fois la porte. Pour des cas particuliers (amorçage), j’ai ajouté des fonctions bypassant la sécurité.
Le code n’est pas du tout documenté (honte à moi), mais il est suffisant simple pour être facilement compréhensible.
#!/usr/bin/env python # vim: tabstop=8 expandtab shiftwidth=4 softtabstop=4 import RPi.GPIO as gpio import datetime import time import logging TIME_UP = 45 TIME_DOWN = 36 FILENAME = « /opt/chickendoor/status.txt » LOGFILE = « /opt/chickendoor/chicken.log » def init(): gpio.setmode(gpio.BCM) gpio.setup(17, gpio.OUT) gpio.setup(22, gpio.OUT) logging.basicConfig(filename=’chicken.log’, level=logging.DEBUG, format=’%(asctime)s — %(name)s — %(levelname)s — %(message)s’) def read_status(): file = open(FILENAME, »r ») status = file.readline() file.close() return(status) def write_status( STATUS ): file = open(FILENAME, »w ») file.write(STATUS) file.close() def open_door(): if read_status() == « Closed »: write_status(« Opening ») logging.info(‘DOOR Opening…’) gpio.output(17, True) gpio.output(22, False) time.sleep(TIME_UP) gpio.cleanup() logging.info(‘DOOR Opened !’) write_status(« Opened ») else: gpio.cleanup() logging.warning(‘ERROR! Action OPEN but door not closed!’) def force_open_door(): write_status(« Opening ») logging.info(‘DOOR FORCED Opening…’) gpio.output(17, True) gpio.output(22, False) time.sleep(TIME_UP) gpio.cleanup() logging.info(‘DOOR FORCED Opened!’) write_status(« Opened ») def close_door(): print read_status() if read_status() == « Opened »: write_status(« Closing ») logging.info(‘DOOR Closing…’) gpio.output(17, False) gpio.output(22, True) time.sleep(TIME_DOWN) gpio.cleanup() logging.info(‘DOOR Closed!’) write_status(« Closed ») else: gpio.cleanup() logging.warning(‘ERROR! Action CLOSE but door not opened!’) def force_close_door(): write_status(« Closing ») logging.info(‘DOOR FORCED Closing…’) gpio.output(17, False) gpio.output(22, True) time.sleep(TIME_DOWN) gpio.cleanup() logging.info(‘DOOR FORCED Closed!’) write_status(« Closed ») |
Autre paramètrage :
- il faut ajouter www-data dans les utilisateurs habilités à modifier les ports GPIO :
$ sudo usermod -a -G gpio www-data $ sudo groups www-data $ sudo service apache2 restart |
- Il faut créer un fichier status.txt lisible et écrivable par tous dans le répertoire /opt/chikendoor/ et avec un lien symbolique dans le répertoire html où se trouvent les scripts php :
touch /opt/chickendoor/status.txt chmod a+wr /opt/chickendoor/status.txt ln -s /opt/chickendoor/status.txt /var/www/html/chicken/status.txt chmod a+r /var/www/html/chicken/status.txt |
- il faut paramétrer le crontab (ou tout autre planificateur) pour ouvrir et fermer automatiquement la porte.
Attention : j’avais d’abord utilisé les options de décalage avant/après le levé/coucher du soleil, mais avec ma version de sunwait, cela ne marchait pas !
J’ai trouvé la solution en me basant sur une option de sunwait, qui permet le déclenchement non pas lorsque le soleil est à l’horizon (0°), mais encore caché (-8° de mémoire).
Ainsi, la porte s’ouvre une demie heure avant le levé “officiel” du soleil, et se couche une demie-heure après le coucher.
Exemple des différences entre le lever/coucher “normal” et “civil” :
root@Rpi-Poulailler:/home/pi# sunwait report 48.735393N 2.430392E Current Date and Time: 11-Apr-2018 21:12 CEST Target Information … Location: 48.735393N, 2.430392E Date: 11-Apr-2018 Timezone: CEST Sun directly north/south: 13:51 Twilight angle: -0.83 degrees (daylight) Day with twilight: 07:08 to 20:34 It is: Night General Information (no offset) … Times … Daylight: 07:08 to 20:34 with Civil twilight: 06:37 to 21:05 with Nautical twilight: 05:57 to 21:45 with Astronomical twilight: 05:15 to 22:27 Duration … Day length: 13:26 hours with civil twilight: 14:27 hours with nautical twilight: 15:47 hours with astronomical twilight: 17:12 hours |
Ce qui me donne les entrées cron suivantes :
00 02 * * * /usr/bin/sunwait wait civil rise 48.735393N 2.430392E; /usr/bin/python /opt/chickendoor/open_door.py >> /var/log/chicken.log 2>&1
00 13 * * * /usr/bin/sunwait wait civil set 48.735393N 2.430392E; /usr/bin/python /opt/chickendoor/wait_and_close.py >> /var/log/chicken.log 2>&1 |
Exemple de fonctionnement
- tous les jours à 2h du matin, le programme sunwait se lance et attend que la condition de lever du soleil soit remplie, puis se termine.
- La deuxième commande est alors exécutée : l’ouverture de la porte
- Puis rebelote à 13h, sunwait attend le coucher de soleil, se ferme, et la commande python de fermeture est alors exécutée.

Et les poules dans tout ça ?

Elles se portent à merveille et pondeuse leur oeuf quotidien.
Les premiers jours ont été compliqués, car seule une poule était venue dormir dans le nichoir. Mais après les avoir forcé à s’y rendre une nuit, tout le monde va dormir dans le dortoir chaque soir !
Malheureusement, elles sont un peu trop curieuses, et on va devoir leur couper quelques plumes pour les empêcher de prendre la poudre d’escampette !
Super 👍
Bien jouer bon boulot !
Je confirme 😉
Bonjour,
Super installation, quelle portée entre le poulailler et la box?
Merci d’avance
Patrick
10m à vol d’oiseau, avec une cloison BA13 + un mur porteur.
Merci
Bonjour Matthieu et bravo pour ton tuto.
J’ai aussi équipé mon poulailler du même système, en plus simple car il n’y a pas de caméra ni de capteur pour le moment.
Tout fonctionne bien en automatique, sauf que je n’arrive pas à faire communiquer mon jeedom « Maison » avec le RPI poulailler, ni avec le module script, ni avec rien… As tu un peu plus d’information sur le paramétrage utilisé entre les 2 RPI ?
Bonjour,
Je suis vraiment désolé pour le temps de réponse, l’article date de plus de 2 ans, et je ne suis pas notifié des commentaires. Je viens de tomber par hasard sur une dizaine de message qui m’étaient destinés…
Si votre question est toujours d’actualité, voici mon mail, ça m’évitera de rater votre message ! matthieu.favris[arobase]gmail.com
Ce que je peux dire, c’est qu’il faut que les deux RPI soient sur le même réseau wifi, et qu’ils arrivent à se pinguer.
Si ça c’est bon, alors contacte moi pour l’étape d’après 😉
chapeau pour le travail !
Salut,
Je regarde ton schéma et tes codes mais je ne vois pas comment ton capteur de fin de course arrête de faire tourner le moteur, tu fais ça comment stp?
bonjour, pourriez vous m’expliquer svp comment réaliser la partie script sur le Raspberry car je n’y connais rien. je vous remercie beaucoup.
Slt, je suis assez novice en programmation de ce genre.
Peux tu juste me dire ou je tape tout le code dans mon Raspberry ?
je te remercie, et chapeau pour le boulot !
Bonjour, je continu de chercher la marche à suivre mais pas simple.
en fait, j’aimerais connaître les prérequis à installer et savoir ou et comment éditer les fichier.
merci beaucoup
bonjour, j’aimerais juste savoir précisement la marche à suivre pour éditer le script car je n’y connais rien. Je bute simplement sur ce point. mon montage est correctement réalisé mais je suis bloqué .
d’avance un grand merci et chapeau pour le travail réalisé.
Bonjour,
Je suis vraiment désolé pour le temps de réponse, l’article date de plus de 2 ans, et je ne suis pas notifié des commentaires. Je viens de tomber par hasard sur une dizaine de message qui m’étaient destinés…
Si votre question est toujours d’actualité, voici mon mail, ça m’évitera de rater votre message ! matthieu.favris[arobase]gmail.com
Bonjour Matthieu,
Pourrions nous discuter pour concevoir un projet identique?
Je ne sais pas programmer et ne suis pas du tout geek:) en revanche je suis sélectionneur de poules de races anciennes et j’ai grandement besoin de données effectives et instantanées.
Pouvons nous en discuter?
Cordialement
Willy
Bonjour avez vous eu une réponse
Bonjour,
Désolé pour le temps de réponse, l’article date de plus de 2 ans, et je ne suis pas notifié des commentaires.
Si votre question est toujours d’actualité, voici mon mail, ça m’évitera de rater votre message ! matthieu.favris[arobase]gmail.com
bonjour Mathieu,
pourrais tu par hasard, fournir une la copie de la carte SD de ton raspberry ?
merci à toi.
Bonjour,
Je suis vraiment désolé pour le temps de réponse, l’article date de plus de 2 ans, et je ne suis pas notifié des commentaires. Je viens de tomber par hasard sur une dizaine de message qui m’étaient destinés…
Oui c’est possible ! Mais vu la date de votre message, ça ne doit plus trop être d’actualité…
Voici mon mail, ça m’évitera de rater votre message ! matthieu.favris[arobase]gmail.com
Bonjour,
Super Tuto merci ! je bloque juste sur l’étape de jeedom pour appeler le script.. l’image stockée sur le site est pixelisé. impossible de lire la syntaxe écrite.
Si qqn peut l’écrire ce serait parfait 🙂
Bonjour,
Désolé pour le temps de réponse, l’article date de plus de 2 ans, et je ne suis pas notifié des commentaires.
Si votre question est toujours d’actualité, voici mon mail, ça m’évitera de rater votre message ! matthieu.favris[arobase]gmail.com
Bonjour je suis intéressé par ce projet et souhaiterais le mettre en œuvre chez moi. Serait il possible d’avoir la liste du matériel et une notice de mise en service et programlation ?
Merxi beaucoup
Bonjour,
Désolé pour le temps de réponse, l’article date de plus de 2 ans, et je ne suis pas notifié des commentaires.
La liste est indiqué dans l’article, de quelle autre précision avez vous besoin ?
Si vous avez d’autres questions, voici mon mail, ça m’évitera de rater votre message ! matthieu.favris[arobase]gmail.com
Bonjour,
Super projet bien détaillé, cependant j’ai une question que l’alimentation il faut une prise à 220v à proximité ou on peut l’alimenté via batterie + panneau solaire ?
L’interface vient de jeedom ?
Bonjour,
Désolé pour le temps de réponse, l’article date de plus de 2 ans, et je ne suis pas notifié des commentaires.
Mon système utilise du 12V (il y a un transfo 220V vers 12V tout bête branché sur une prise de mon garage), mais si vous pouvez fournir du 12V stable à partir d’un panneau solaire et d’une batterie, c’est encore mieux !
Si vous avez d’autres questions, voici mon mail, ça m’évitera de rater votre message ! matthieu.favris[arobase]gmail.com
Salut.
Je viens de tomber sur ce tuto très intéressant que j’ai seulement parcouru pour l’instant. En voyant la liste de matériel, vous croyez qu’il est possible de fabriquer sa propre porte en métal à moindre coût plutôt qu’acheter celle sur Amazon ? 🤔
Bonjour,
Désolé pour le temps de réponse, l’article date de plus de 2 ans, et je ne suis pas notifié des commentaires.
Depuis la publication de cet article, j’ai fait évolué mon système, et c’est dorénavant la grande porte qui est automatiquement contrôlée (celle qu’on aperçoit dans l’application mobile). J’ai juste tourné à 90° le boîtier moteur, et inversé les commandes (maintenant c’est en tirant le fil que la porte se ferme, alors qu’avant il fallait relâcher le fil pour faire redescendre la trappe.
J’ai ensuite ajouté un contrepoids pour que la porte s’ouvre quand le fil est relâché.
Si vous avez d’autres questions, voici mon mail, ça m’évitera de rater votre message ! matthieu.favris[arobase]gmail.com
Bonsoir, je cherche à intégrer les différents codes proposés, mais je n’y connais pas grand chose. Je viens de cabler une RPI Zero W avec 2 sondes de températures, un moteur 12V pour la porte et une caméra IR.
J’ai installé aussi JEEDOM après avoir essayé DOMOTICZ .
J’ai bien les DHT11 qui remontent les infos de température et d’humidité, mais pour les reste, je ne sais pas trop comment faire…
Merci pour votre aide.
Bien cordialement
Bonjour Patrick,
Comment avez vous raccordé le moteur ?
Je vous propose de continuer la discussion par mail : matthieu.favris[arobase]gmail.com
Bonjour,
Débutant dans ce genre de montage, serait-il possible d’avoir le détail des diodes utilisées pour actionner le moteur et utilisées pour le capteur de la porte ?
D’avance merci.
Christophe
Bonjour
apres plusieurs tentative d’installer SUNWAIT SUR PI ZERO.
Cdlt,
merci ton projet va beaucoup nous aider pour notre projet d’étude en Science de l’ingénieur
A la prochaine dans la basse cours 😉
Bonjour, j’ai suivi votre tuto et j’ai acheté la même alim 220v > 12v mais du coup la carte l298n chauffe et ne transmet pas une intensité stable au moteur.
Ça pourrait venir de les branchements peu être…