motionEyeOS est un système génial pour créer des caméras de sécurité avec des ordinateurs monocarte. Cela peut inclure des systèmes de surveillance des animaux domestiques ou des cambrioleurs. Il a un certain nombre de fonctionnalités intéressantes sous le capot et l’une de ces fonctionnalités est la possibilité de surveiller les broches GPIO et d’afficher des informations dans l’interface Web motionEyeOS.
La fonction de « surveillance » vous permet d’exécuter un script bash à intervalle régulier et de superposer la sortie de texte sur l’interface Web. Cela pourrait être utilisé pour afficher l’état des broches GPIO ou d’autres données telles que la température du processeur, les lectures des capteurs, etc.
Je voulais utiliser cette fonctionnalité pour afficher l’état de mes deux portes de garage. Ils ont des commutateurs magnétiques, j’ai donc décidé de configurer motionEyeOS pour afficher leur état étant donné que le Raspberry Pi est déjà configuré au même endroit. Les interrupteurs de porte connectent une broche GPIO à 3,3V. Lorsque la porte est ouverte, la connexion est interrompue et la broche GPIO est tirée vers le bas par les résistances de rappel internes du Pi.

La fonction de commande de surveillance est décrite dans le wiki motionEye. En général, c’est la même chose que motionEyeOS à l’exception du chemin de fichier que vous devez utiliser.
Pour commencer, nous pouvons créer un script pour surveiller une seule broche GPIO. Assurez-vous que votre système fonctionne et que vous pouvez visualiser la sortie de votre caméra via l’interface Web motionEyeOS.
Étape 1 – Créer un script
En utilisant SSH, connectez-vous au Pi. SSH est activé par défaut et vous devez utiliser le compte utilisateur « admin » avec le mot de passe que vous avez défini dans les paramètres. Si vous n’avez pas modifié le mot de passe par défaut, il sera vide, mais je vous recommande de définir un mot de passe décent et de ne pas le laisser par défaut !
Accédez au répertoire etc :
cd /data/etc/
et créez un fichier vierge nommé « monitor_1 » :
nano monitor_1
Le « 1 » fait référence à la caméra avec l’ID 1. Si vous avez plusieurs caméras, vous pouvez ajouter un fichier « moniteur_# » distinct pour chacune. Une deuxième caméra peut utiliser « monitor_2 » etc.
Tapez ou collez ce qui suit :
#!/bin/bash GPIO=17 test -e /sys/class/gpio/gpio$GPIO || (echo $GPIO > /sys/class/gpio/export && echo in > /sys/class/gpio/gpio$GPIO/direction) val=$(cat /sys/class/gpio/gpio$GPIO/value) if [ "$val" == "1" ]; then GPIO_text="HIGH" else GPIO_text="LOW" fi echo "$GPIO:$GPIO_text" echo 1 1>&2
Quittez l’éditeur nano en utilisant CTRL-X, Y et [Enter].
Ce fichier est également disponible dans mon référentiel BitBucket. Il est préférable de copier le texte de le fichier monitor_1 sur BitBucket et évitez les problèmes de formatage potentiels sur cette page Web.
La commande « test » vérifie si la broche GPIO a déjà été configurée. Si ce n’est pas le cas, deux commandes d’écho sont exécutées pour configurer la broche en tant qu’entrée. Ceux-ci seront généralement liés par défaut à des résistances de rappel internes. En l’absence de connexions, la valeur sera 0/faible. La connexion de la broche à 3,3 V changera l’état en 1/Élevé.
Étape 2 – Rendre exécutable
Maintenant, rendez ce script exécutable :
chmod +x monitor_1
Étape 3 – Script de test
Pour tester que votre script s’exécute sans erreur vous pouvez taper :
sh ./monitor_1
La sortie doit refléter le texte défini dans les instructions echo et il ne doit y avoir aucune erreur.
Étape 4 – Recharger l’interface Web
Lorsque des scripts de surveillance sont ajoutés, supprimés ou modifiés, l’interface Web doit être rechargée dans votre navigateur pour que les modifications prennent effet. Cliquer sur l’image de la caméra affichera les icônes en haut à droite et l’état du GPIO en bas à gauche :

Modifiez maintenant l’état du commutateur connecté au GPIO 17. Vous devriez voir le texte changer à l’écran. Le texte « 17 : HIGH » peut être remplacé par ce que vous souhaitez définir dans le script bash.
Étape 5 – Ajouter une lecture GPIO supplémentaire
Le script bash peut maintenant être modifié pour lire plus d’une broche GPIO et le résultat peut être combiné en une seule sortie à afficher à l’écran. Dans l’exemple ci-dessous, le script vérifie les GPIO 17 et 27. Leurs états sont combinés en une seule sortie.
#!/bin/bash
GPIOA=17
GPIOB=27
test -e /sys/class/gpio/gpio$GPIOA ||
(echo $GPIOA > /sys/class/gpio/export
&& echo in > /sys/class/gpio/gpio$GPIOA/direction)
test -e /sys/class/gpio/gpio$GPIOB ||
(echo $GPIOB > /sys/class/gpio/export
&& echo in > /sys/class/gpio/gpio$GPIOB/direction)
valA=$(cat /sys/class/gpio/gpio$GPIOA/value)
valB=$(cat /sys/class/gpio/gpio$GPIOB/value)
if [ "$valA" == "1" ]; then
GPIOA_text="HIGH"
else
GPIOA_text="LOW"
fi
if [ "$valB" == "1" ]; then
GPIOB_text="HIGH"
else
GPIOB_text="LOW"
fi
echo "$GPIOA:$GPIOA_text $GPIOB:$GPIOB_text"
echo 1 1>&2
Ce fichier est également disponible dans mon référentiel BitBucket. Il est préférable de copier le texte de le fichier monitor_1_twin sur BitBucket et évitez les problèmes de formatage sur cette page Web.
N’oubliez pas de le rendre exécutable :
chmod +x monitor_1
Étape 6 – Ajuster le texte
Pour mon script final, j’ai ajusté l’affichage du texte pour qu’il corresponde mieux à la situation de ma porte de garage. Le script peut être vu en suivant le lien BitBucket vers motion_1_doors.
Il affiche une ligne de texte indiquant l’état de chaque porte. D1 est à gauche et D2 à droite. La capture d’écran suivante a été prise depuis mon smartphone et montre maintenant l’état des deux portes de garage :

Une chose que j’ai remarquée, c’est que le texte de mise à jour a été tronqué sur mon smartphone. J’ai ajusté les éléments de texte pour éviter cela. C’est la raison pour laquelle j’ai utilisé « SHUT » plutôt que « CLOSED ». Sur mon téléphone, la limite semblait être de 17 caractères, mais je soupçonne que cela variera sur d’autres appareils. Sur un navigateur de bureau, je n’ai eu aucun problème avec le texte tronqué.
Fréquence de script
Par défaut, le script est exécuté une fois par seconde. Vous pouvez changer cela en ajustant le nombre dans la dernière ligne à la fin du script :
echo 5 1>&2
Cela indiquera à motionEyeOS de ne pas exécuter le script pendant 5 secondes supplémentaires.
Le seul inconvénient que j’ai pu trouver avec l’augmentation du délai est qu’il augmente également le temps qu’il faut pour afficher la première lecture lorsque vous cliquez initialement sur l’image de la caméra.
Dépannage
Si cela ne fonctionne pas, considérez les points suivants :
- Assurez-vous que le fichier est exécutable
- Assurez-vous que le fichier n’a pas d’extension
- Assurez-vous qu’il utilise le bon ID de caméra (c’est-à-dire monitor_1 pour la caméra #1, etc.)
- Vérifiez la syntaxe dans votre script
- Testez le script seul comme indiqué à l’étape 3
- Le script doit revenir immédiatement et ne doit pas bloquer
Noter : J’ai utilisé un caractère « » dans les scripts Bash indiqués ci-dessus pour diviser les longues lignes. C’était purement à des fins d’affichage. Si vous jetez un œil aux versions BitBucket de moniteur_1 et monitor_1_twin la commande « test » est sur une seule ligne.
Dernières pensées
Vous devrez décider si cette technique va convenir à vos besoins. Ce qu’il ne fait pas, c’est de fournir des notifications ou des alertes. Dans mon exemple, il montre l’état actuel des portes mais rien d’autre. Son utilité dépendra de vos attentes. Cependant, c’est certainement une fonctionnalité utile à connaître.
