Table des matières:
- Étape 1: Surveillance de la température
- Étape 2: Configuration de Cloud4Rpi.io
- Étape 3: Surveillance de l'onduleur
- Étape 4: Préparation à la « production »
- Étape 5: Configuration d'un panneau de configuration
Vidéo: Surveillance de maison DIY avec RaspberryPi et Cloud4Rpi : 5 étapes
2024 Auteur: John Day | [email protected]. Dernière modifié: 2024-01-30 09:07
Un week-end d'hiver, je suis allé dans ma maison de campagne et j'ai découvert qu'il y faisait très froid. Quelque chose s'était produit avec l'électricité et le disjoncteur RCD l'avait éteint, et le chauffage s'est également éteint. J'ai eu de la chance d'être venu là-bas, sinon dans plusieurs jours tout aurait été gelé ce qui est très mauvais pour les tuyaux et les radiateurs.
J'avais plusieurs Raspberry Pi et un capteur thermique, alors j'ai pensé - pourquoi ne pas créer un simple appareil de surveillance ? Les instructions ci-dessous supposent que vous avez un Raspberry Pi avec Raspbian et une connexion réseau configurée. Dans mon cas, il s'agit de Raspberry Pi B+ avec Raspbian (2018-06-27-raspbian-stretch-lite).
Étape 1: Surveillance de la température
Comment connecter un capteur de température DS18B20 ? Il suffit de google comment faire cela, et vous verrez beaucoup d'images comme celle-ci:
Dans mon cas, j'avais des fils noir, jaune et rouge. Le noir est la masse, va à la broche de terre, le rouge est l'alimentation - va à la broche 3,3v, et le jaune est aux données - devrait aller à la broche GPIO4, avec une résistance de 4,7 kOm connectée entre les données et l'alimentation. Remarque, vous pouvez connecter plusieurs capteurs en parallèle (ils sont numériques et ont des adresses différentes), vous n'avez besoin que d'une seule résistance. Après avoir connecté votre capteur, vous devez activer 1Wire dans la configuration raspi:
sudo raspi-config
Accédez aux 5 options d'interfaçage, activez P7 1-Wire et redémarrez.
Ensuite, vous pouvez tester si vous pouvez voir le capteur:
sudo modprobe w1-gpiosudo modprobe w1-thermls /sys/bus/w1/devices/
Vous devriez voir quelque chose comme ceci:
pi@vcontrol:~ $ ls /sys/bus/w1/devices/28–00044eae2dff w1_bus_master1
28–00044eae2dff est notre capteur de température.
Le matériel est prêt. Maintenant, je dois configurer la partie surveillance. J'ai besoin de quelque chose qui me montre les données et m'informe si l'appareil est déconnecté pendant un certain temps, s'il n'y a pas de courant ou si la température est basse. Évidemment, cela ne peut pas être raspberry pi lui-même, il devrait y avoir un serveur ou un service sur Internet qui surveille mon appareil.
Je peux créer un serveur simple, obtenir un hébergement et tout configurer, mais honnêtement, je ne veux pas. Heureusement, quelqu'un a déjà pensé à cela et a créé cloud4rpi.io - un panneau de contrôle cloud pour votre appareil.
Étape 2: Configuration de Cloud4Rpi.io
Cloud4Rpi fournit un service qui permet à votre appareil d'envoyer et de recevoir des données à l'aide des protocoles MQTT ou HTTP. Ils ont une bibliothèque cliente pour Python, je vais donc utiliser Python.
Les exemples Python fournis avec le service Cloud4Rpi contiennent déjà du code pour le capteur de température DS18B20.
Je suis donc allé sur https://cloud4rpi.io, j'ai créé un compte et j'y ai ajouté un nouvel appareil. La page de l'appareil a un jeton - une chaîne qui identifie l'appareil et qui doit être spécifiée dans le programme qui envoie les données.
Pour commencer, c'est toujours une bonne idée de mettre à jour un gestionnaire de packages et de mettre à niveau les packages (remarque: cela peut prendre des heures si vous n'avez pas effectué de mise à niveau depuis un certain temps):
sudo apt-get update && sudo apt-get upgrade
Ensuite, installez git, Python et son gestionnaire de packages Pip:
sudo apt-get installer git python python-pip
Ensuite, installez la bibliothèque Python cloud4rpi:
sudo pip installer cloud4rpi
Enfin, je suis prêt à écrire mon programme de contrôle. Je pars d'un exemple disponible sur
git clone https://github.com/cloud4rpi/cloud4rpi-raspberrypi… cloud4rpicd cloud4rpi
Le fichier principal du programme est control.py - je dois le modifier selon mes besoins. Tout d'abord, modifiez le programme et collez un jeton:
sudo nano control.py
Recherchez une ligne DEVICE_TOKEN='…'] et spécifiez-y un jeton de périphérique. Après cela, je peux simplement exécuter le programme: Il fonctionne et indique une température dans la variable RoomTemp:
sudo python control.py
Il fonctionne et signale une température dans la variable RoomTemp.
Notez qu'il découvre tous les capteurs onewire ds18b20
ds_sensors = ds18b20. DS18B20.find_all()
et utilise le premier capteur trouvé:
RoomTemp': { 'type': 'numeric', 'bind': ds_sensors[0] if ds_sensors else None }
D'accord, c'était facile, car l'exemple de programme contient tout ce qui est nécessaire pour fonctionner avec le capteur ds18b20 sur Raspberry Pi. Maintenant, je dois trouver le moyen de signaler l'état de l'alimentation.
Étape 3: Surveillance de l'onduleur
La prochaine chose que je veux surveiller est l'état de l'onduleur, donc s'il y a une panne de courant, je le saurai avant que tout ne se déconnecte.
J'ai un onduleur APC avec contrôle USB, alors j'ai rapidement cherché sur Google et j'ai découvert que j'avais besoin d'apcupsd. https://www.anites.com/2013/09/monitoring-ups.html… J'ai essayé plusieurs fois de l'installer via apt-get, et cela ne fonctionnait pas pour moi pour diverses raisons. Je vais montrer comment l'installer à partir des sources.
wget https://sourceforge.net/projects/apcupsd/files/ap…tar xvf apcupsd-3.14.14.tar.gz cd apcupsd-3.14.14./configure --enable-usb sudo make sudo make install
Ensuite, j'édite apcupsd.conf pour me connecter à mon onduleur via usb.
sudo nano /etc/apcupsd/apcupsd.conf# #UPSCABLE smart UPSCABLE usb # #UPSTYPE apcsmart #DEVICE /dev/ttyS0 UPSTYPE usb DEVICE
Maintenant, je peux brancher le câble USB de l'onduleur au RaspberryPi et tester si l'onduleur serait trouvé.
sudo apctest
Il ne devrait vous donner aucun message d'erreur.
Maintenant, le service apcupsd doit être démarré:
sudo systemctl démarrer apcupsd
Pour interroger l'état de l'onduleur, je peux utiliser une commande d'état:
état sudo /etc/init.d/apcupsd
Et cela produirait quelque chose comme ceci:
APC: 001, 035, 0855DATE: 2018-10-14 16:55:30 +0300 HOSTNAME: vcontrol VERSION: 3.14.14 (31 mai 2016) debian UPSNAME: vcontrol CABLE: USB Cable DRIVER: USB UPS Driver UPSMODE: Stand Alone STARTTIME: 2018-10-14 16:54:28 +0300 MODÈLE: Back-UPS XS 650CI STATUT: ONLINE LINEV: 238.0 Volts LOADPCT: 0.0 Pourcent BCHARGE: 100.0 Pourcent TIMELEFT: 293.3 Minutes MATTCHG: 5 Pourcent MINTIMEL: 3 Minutes MAXTIME: 0 Secondes SENSE: Moyen LOTRANS: 140,0 Volts HITRANS: 300,0 Volts ALARMDEL: 30 Secondes BATTV: 14,2 Volts LASTXFER: Aucun transfert depuis la mise sous tension NUMXFERS: 0 TONBATT: 0 Secondes CUMONBATT: 0 Secondes XOFFBATT: N/A STATFLAG: 0x050000B14 SERIALTD029: 3: 2014-06-10 NOMINV: 230 Volts NOMBATTV: 12.0 Volts NOMPOWER: 390 Watts FIRMWARE: 892. R3. I USB FW:R3 END APC: 2018-10-14 16:55:38 +0300
J'ai besoin d'un statut - qui est la ligne « STATUS: ».
La bibliothèque Cloud4rpi contient un module 'rpy.py' qui renvoie les paramètres du système Raspberry Pi tels que le nom d'hôte ou la température du processeur. Étant donné que tous ces paramètres sont le résultat de l'exécution de certaines commandes et de l'analyse de la sortie, il contient également une fonction "parse_output" pratique qui fait exactement ce dont j'ai besoin. Voici comment obtenir mon statut UPS:
def ups_status(): result = rpi.parse_output(r'STATUS\s+:\s+(S+)', ['/etc/init.d/apcupsd', 'status']) if result: return result else: return 'INCONNU'
Pour envoyer ce statut à cloud4rpi, je dois déclarer une variable UPSStatus et la lier à ma fonction ups_status:
variables = { 'RoomTemp': { 'type': 'numeric', 'bind': ds_sensors[0] }, 'UPSStatus': { 'type': 'string', 'bind': ups_status } }
Et je peux immédiatement voir ma variable sur la page de l'appareil cloud4rpi.
Étape 4: Préparation à la « production »
Tout fonctionne et je dois maintenant préparer mon appareil en mode sans surveillance.
Pour commencer, je vais ajuster les intervalles de temps. Intervalle d'interrogation définit la fréquence à laquelle le programme vérifie la température et l'état de l'onduleur - réglez-le sur une seconde.
Les résultats sont envoyés au cloud toutes les 5 minutes et les informations de diagnostic - toutes les heures.
# ConstantsDATA_SENDING_INTERVAL = 300 # sec DIAG_SENDING_INTERVAL = 3600 # sec POLL_INTERVAL = 1 # sec
Lorsque l'état de l'UPS change, je ne veux pas que mon appareil attende 5 minutes et j'envoie les données immédiatement. J'ai donc légèrement modifié la boucle principale et cela ressemble à ceci:
data_timer = 0diag_timer = 0 prevUPS = 'ONLINE' while True: newUPS = ups_status() if (data_timer <= 0) ou (newUPS != prevUPS): device.publish_data() data_timer = DATA_SENDING_INTERVAL prevUPS = newUPS if diag_timer <= 0: device.publish_diag() diag_timer = DIAG_SENDING_INTERVAL sleep(POLL_INTERVAL) diag_timer -= POLL_INTERVAL data_timer -= POLL_INTERVAL
Test: exécuter le script:
sudo python control.py
Et je peux regarder l'état de l'onduleur sur la page de mon appareil.
Si je coupe l'alimentation de l'onduleur, l'état change en quelques secondes, donc tout fonctionne. Maintenant, je dois démarrer apcupsd et mon control.py au démarrage du système. Le service Apcupsd est ancien et pour le démarrer sur raspbian moderne, je devrais modifier le fichier /etc/init.d/apcupsd, en ajoutant ces lignes quelque part en haut:
### BEGIN INIT INFO# Fournit: apcupsd # Required-Start: $all # Required-Stop: # Default-Start: 2 3 4 5 # Default-Stop: # Description courte: Démon UPS APC… ### END INIT INFO#
Activez ensuite le service:
sudo systemctl activer apcupsd
Démarrez ensuite le service:
sudo systemctl démarrer apcupsd
Maintenant, apcupsd sera lancé au démarrage du système.
Pour installer control.py en tant que service, j'ai utilisé le script service_install.sh fourni:
sudo bash service_install.sh ~/cloud4rpi/control.py
Maintenant, le service est démarré et il doit survivre à un redémarrage.
Étape 5: Configuration d'un panneau de configuration
Cloud4rpi me permet de configurer un panneau de contrôle pour mon appareil. Vous pouvez ajouter des « widgets » et les lier à des variables de périphérique.
Mon appareil fournit deux variables en lecture seule - RoomTemp et UPSStatus:
variables = { 'RoomTemp': { 'type': 'numeric', 'bind': ds_sensors[0] }, 'UPSStatus': { 'type': 'string', 'bind': ups_status } }
J'ai ajouté 3 widgets - Number for RoomTemp, Text pour UPSStatus et un graphique pour RoomTemp.
Je peux configurer des alertes, donc je reçois un e-mail lorsque la température est en dehors de la plage spécifiée, que l'onduleur s'est déconnecté ou que l'appareil lui-même n'envoie pas de données quand il le devrait. Maintenant, je peux être sûr que ma maison de campagne va bien et je peux être averti quand quelque chose ne va pas, je peux donc téléphoner aux voisins et leur demander de vérifier ce qui se passe. Voici le code réel du control.py.
Conseillé:
Refroidisseur / réfrigérateur Peltier fait maison avec contrôleur de température DIY: 6 étapes (avec photos)
Refroidisseur/réfrigérateur Peltier fait maison avec contrôleur de température DIY Ce module TEC1-12706 et l'effet Peltier font la glacière de bricolage parfaite ! Cette instructable est un tutoriel étape par étape vous montrant comment faire
Projet de surveillance GPS avec écran OLED : 5 étapes (avec photos)
Projet de surveillance GPS avec écran OLED : Bonjour à tous, dans cet article rapide, je vais partager avec vous mon projet : Module GPS ATGM332D avec microcontrôleur SAMD21J18 et écran SSD1306 OLED 128*64, j'ai construit un PCB spécial pour cela sur Eagle Autodesk, et je le programme en utilisant Atmel studio 7.0 et ASF
Arduino autonome 3,3 V avec horloge externe 8 MHz programmée à partir d'Arduino Uno via ICSP / ISP (avec surveillance série!): 4 étapes
Arduino autonome 3,3 V avec horloge externe 8 MHz programmée à partir d'Arduino Uno via ICSP / ISP (avec surveillance série!): Objectifs: Construire un Arduino autonome qui fonctionne sur 3,3 V à partir d'une horloge externe 8 MHz. Pour le programmer via ISP (également connu sous le nom d'ICSP, programmation série en circuit) à partir d'un Arduino Uno (fonctionnant à 5 V) Pour éditer le fichier du chargeur de démarrage et graver le
Surveillance de l'humidité et de la température de la maison : 11 étapes
Surveillance de l'humidité et de la température de la maison : Salut les gars ! Afin de démarrer de la meilleure des manières, une petite histoire sur le projet. J'ai récemment obtenu mon diplôme et j'ai déménagé en Autriche pour mon premier poste d'ingénieur. Le pays est beau mais très froid & humide en saison hivernale. J'ai vite commencé
Surveillance de la maison intelligente à l'aide d'Alexa et d'Arduino : 9 étapes (avec photos)
Surveillance de la maison intelligente à l'aide d'Alexa et d'Arduino : Dans le monde actuel, les gens passent plus de temps sur leur lieu de travail que chez eux. Par conséquent, il existe un besoin d'un système de surveillance à domicile où les gens peuvent connaître les conditions de la maison pendant qu'ils sont au travail. Ce serait encore mieux si on c