Tabla de contenido:
- Paso 1: monitoreo de temperatura
- Paso 2: Configurar Cloud4Rpi.io
- Paso 3: Monitoreo de UPS
- Paso 4: preparación para la "producción"
- Paso 5: Configuración de un panel de control
Video: Monitoreo casero de bricolaje con RaspberryPi y Cloud4Rpi: 5 pasos
2024 Autor: John Day | [email protected]. Última modificación: 2024-01-30 08:42
Un fin de semana de invierno fui a mi casa de campo y descubrí que allí hacía mucho frío. Algo había sucedido con la electricidad y el disyuntor RCD lo había apagado, y la calefacción también se apagó. Tuve suerte de llegar allí, de lo contrario en varios días todo se habría congelado, lo cual es muy malo para las tuberías y los radiadores.
Tenía varias Raspberry Pi y un sensor térmico, así que pensé: ¿por qué no hago un dispositivo de monitoreo simple? Las instrucciones a continuación asumen que tiene una Raspberry Pi con Raspbian y una conexión de red configurada. En mi caso, es Raspberry Pi B + con Raspbian (2018–06–27-raspbian-stretch-lite).
Paso 1: monitoreo de temperatura
¿Cómo conectar un sensor de temperatura DS18B20? Solo busca en Google cómo hacer esto y verás muchas imágenes como esta:
En mi caso tenía cables negros, amarillos y rojos. El negro es tierra, va al pin de tierra, el rojo es potencia - va al pin 3.3v y el amarillo es datos - debe ir al pin GPIO4, con una resistencia de 4.7 kOm conectada entre datos y energía. en paralelo (son digitales y tienen diferentes direcciones), solo necesita una resistencia. Después de conectar su sensor, debe habilitar 1Wire en raspi-config:
sudo raspi-config
Vaya a 5 opciones de interfaz, habilite P7 1-Wire y reinicie.
Luego puede probar si puede ver el sensor:
sudo modprobe w1-gpiosudo modprobe w1-thermls / sys / bus / w1 / devices /
Debería ver algo como esto:
pi @ vcontrol: ~ $ ls / sys / bus / w1 / devices / 28–00044eae2dff w1_bus_master1
28–00044eae2dff es nuestro sensor de temperatura.
El hardware está listo. Ahora necesito configurar la parte de monitoreo. Necesito algo que me muestre los datos y me notifique si el dispositivo está desconectado por un tiempo o no hay energía, o la temperatura es baja. Obviamente, esto no puede ser raspberry pi en sí, debería haber algún servidor o servicio en Internet que monitoree mi dispositivo.
Puedo crear un servidor simple, conseguir un alojamiento y configurar todo, pero sinceramente, no quiero. Afortunadamente, alguien ya pensó en esto y creó cloud4rpi.io, un panel de control en la nube para su dispositivo.
Paso 2: Configurar Cloud4Rpi.io
Cloud4Rpi proporciona un servicio que permite que su dispositivo envíe y reciba datos utilizando protocolos MQTT o HTTP. Tienen una biblioteca cliente para Python, así que usaré Python.
Los ejemplos de Python que vienen con el servicio Cloud4Rpi ya contienen código para el sensor de temperatura DS18B20.
Así que fui a https://cloud4rpi.io, creé una cuenta y agregué un nuevo dispositivo allí. La página del dispositivo tiene un token, una cadena que identifica el dispositivo y que debe especificarse en el programa que envía los datos.
Para empezar, siempre es una buena idea actualizar un administrador de paquetes y actualizar los paquetes (nota: puede llevar horas si no ha actualizado durante un tiempo):
sudo apt-get update && sudo apt-get upgrade
Luego, instale git, Python y su administrador de paquetes Pip:
sudo apt-get install git python python-pip
Luego, instale la biblioteca Python de cloud4rpi:
sudo pip instalar cloud4rpi
Finalmente, estoy listo para escribir mi programa de control. Empiezo con el ejemplo disponible en
clon de git https://github.com/cloud4rpi/cloud4rpi-raspberrypi… cloud4rpicd cloud4rpi
El archivo principal del programa es control.py; necesito modificarlo según mis necesidades. Primero, edite el programa y pegue un token:
sudo nano control.py
Busque una línea DEVICE_TOKEN = '…'] y especifique un token de dispositivo allí. Después de eso, simplemente puedo ejecutar el programa: funciona e informa una temperatura en la variable RoomTemp:
sudo python control.py
Funciona y reporta una temperatura en la variable RoomTemp.
Tenga en cuenta que descubre todos los sensores onewire ds18b20
ds_sensors = ds18b20. DS18B20.find_all ()
y usa el primer sensor encontrado:
RoomTemp ': {' type ':' numeric ',' bind ': ds_sensors [0] if ds_sensors else None}
Ok, eso fue fácil, porque el programa de muestra tiene todo lo que se requiere para trabajar con el sensor ds18b20 en Raspberry Pi. Ahora necesito encontrar la manera de informar el estado de la energía.
Paso 3: Monitoreo de UPS
Lo siguiente que quiero monitorear es el estado del UPS, por lo que si hay un corte de energía, lo sabré antes de que todo se desconecte.
Tengo un SAI de APC con control USB, así que busqué en Google rápidamente y descubrí que necesitaba apcupsd. https://www.anites.com/2013/09/monitoring-ups.html … Intenté varias veces instalarlo a través de apt-get, y no me funcionaba por varias razones. Le mostraré cómo instalarlo desde las fuentes.
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
Luego edito apcupsd.conf para conectarme a mi UPS a través de usb.
sudo nano /etc/apcupsd/apcupsd.conf# #UPSCABLE smart UPSCABLE usb # #UPSTYPE apcsmart #DEVICE / dev / ttyS0 UPSTYPE usb DEVICE
Ahora puedo conectar el cable USB de UPS a RaspberryPi y probar si se encuentra UPS.
sudo apctest
No debería darle ningún mensaje de error.
Ahora se debe iniciar el servicio apcupsd:
sudo systemctl start apcupsd
Para silenciar el estado del UPS, puedo usar un comando de estado:
sudo /etc/init.d/apcupsd estado
Y daría como resultado algo como esto:
APC: 001, 035, 0855FECHA: 2018-10-14 16:55:30 +0300 HOSTNAME: vcontrol VERSIÓN: 3.14.14 (31 de mayo de 2016) debian UPSNAME: vcontrol CABLE: Cable USB CONTROLADOR: USB UPS Driver UPSMODE: Stand Alone HORA DE INICIO: 2018-10-14 16:54:28 +0300 MODELO: Back-UPS XS 650CI ESTADO: LÍNEA EN LÍNEA V: 238.0 Voltios PCT DE CARGA: 0.0 Por ciento BCHARGE: 100.0 Por ciento TIEMPO DE EJECUCIÓN: 293.3 Minutos MBATTCHG: 5 Por ciento MINTIMEL: 3 Minutos TIEMPO MÁXIMO: 0 Segundos SENTIDO: Medio LOTRANS: 140.0 Voltios HITRANS: 300.0 Voltios ALARMDEL: 30 Segundos BATTV: 14.2 Voltios LASTXFER: Sin transferencias desde el encendido NUMXFERS: 0 TONBATT: 0 Segundos CUMONBATT: 0 Segundos XOFFBATT: NATT / AXNOX STATFLAG: 300014IAL: 2014-06-10 NOMINV: 230 Voltios NOMBATTV: 12.0 Voltios NOMPOWER: 390 Watts FIRMWARE: 892. R3. I USB FW: R3 END APC: 2018-10-14 16:55:38 +0300
Necesito un estado, que es la línea "ESTADO:".
La biblioteca de Cloud4rpi contiene un módulo "rpy.py" que devuelve los parámetros del sistema Raspberry Pi, como el nombre de host o la temperatura de la CPU. Dado que todos esos parámetros son el resultado de ejecutar algunos comandos y analizar la salida, también contiene una práctica función "parse_output" que hace exactamente lo que necesito. Así es como puedo obtener el estado de mi UPS:
def ups_status (): result = rpi.parse_output (r'STATUS / s +: / s + (S +) ', [' /etc/init.d/apcupsd ',' status ']) if result: return result else: return 'DESCONOCIDO'
Para enviar este estado a cloud4rpi, necesito declarar una variable UPSStatus y vincularla a mi función ups_status: Ahora puedo ejecutar mi programa:
variables = {'RoomTemp': {'type': 'numeric', 'bind': ds_sensors [0]}, 'UPSStatus': {'type': 'string', 'bind': ups_status}}
Y puedo ver inmediatamente mi variable en la página del dispositivo cloud4rpi.
Paso 4: preparación para la "producción"
Todo está funcionando y ahora necesito preparar mi dispositivo para el modo desatendido.
Para empezar, voy a ajustar los intervalos de tiempo. El intervalo de encuesta define la frecuencia con la que el programa verifica la temperatura y el estado del UPS; configúrelo en un segundo.
Los resultados se envían a la nube cada 5 minutos y la información de diagnóstico, cada hora.
# ConstantsDATA_SENDING_INTERVAL = 300 # seg DIAG_SENDING_INTERVAL = 3600 # seg POLL_INTERVAL = 1 # seg
Cuando cambia el estado de UPS, no quiero que mi dispositivo espere 5 minutos y envío datos de inmediato. Así que modifiqué ligeramente el bucle principal y se ve así:
data_timer = 0diag_timer = 0 prevUPS = 'ONLINE' while True: newUPS = ups_status () if (data_timer <= 0) o (newUPS! = prevUPS): device.publish_data () data_timer = DATA_SENDING_INTERVAL prevUPS = newUPS si diag_timer <= 0 device.publish_diag () diag_timer = DIAG_SENDING_INTERVAL sleep (POLL_INTERVAL) diag_timer - = POLL_INTERVAL data_timer - = POLL_INTERVAL
Prueba: ejecutar script:
sudo python control.py
Y puedo ver el estado de UPS en la página de mi dispositivo.
Si apago el UPS, el estado cambia en un par de segundos, entonces todo está funcionando. Ahora necesito iniciar apcupsd y mi control.py en el inicio del sistema. El servicio Apcupsd es antiguo y para iniciarlo en raspbian moderno, debería modificar el archivo /etc/init.d/apcupsd, agregando estas líneas en algún lugar en la parte superior:
### BEGIN INIT INFO # Proporciona: apcupsd # Required-Start: $ all # Required-Stop: # Default-Start: 2 3 4 5 # Default-Stop: # Breve descripción: APC UPS daemon… ### END INIT INFO #
Luego habilite el servicio:
sudo systemctl habilitar apcupsd
Luego inicie el servicio:
sudo systemctl start apcupsd
Ahora apcupsd se iniciará en el inicio del sistema.
Para instalar control.py como servicio, utilicé el script service_install.sh proporcionado:
sudo bash service_install.sh ~ / cloud4rpi / control.py
Ahora se inicia el servicio y debe sobrevivir a un reinicio.
Paso 5: Configuración de un panel de control
Cloud4rpi me permite configurar un panel de control para mi dispositivo. Puede agregar "widgets" y vincularlos a variables de dispositivo.
Mi dispositivo proporciona dos variables de solo lectura: RoomTemp y UPSStatus:
variables = {'RoomTemp': {'type': 'numeric', 'bind': ds_sensors [0]}, 'UPSStatus': {'type': 'string', 'bind': ups_status}}
Agregué 3 widgets: Number para RoomTemp, Text para UPSStatus y un gráfico para RoomTemp.
Puedo configurar alertas, por lo que recibo un correo electrónico cuando la temperatura está fuera del rango especificado, el UPS se desconectó o el dispositivo en sí no envía datos cuando debería. Ahora puedo estar seguro de que mi casa de campo está bien y puedo ser notificado cuando algo anda mal, así puedo llamar a los vecinos y pedirles que comprueben lo que está pasando. Aquí está el código real del control.py.
Recomendado:
Panel solar casero de bricolaje: 4 pasos
Panel solar de bricolaje casero: había completado este proyecto aprox. Hace 3 años para mi proyecto universitario (finalmente, tuve la oportunidad de publicarlo, ya que tengo tiempo libre durante el cierre de la pandemia Covid-19 en Mumbai, India). Más tarde monté este panel solar de bricolaje en el balcón de mi casa y usé
Bricolaje: Linterna LED UV de Lego / Detector casero de orina para mascotas: 3 pasos
Bricolaje: Linterna LED UV de Lego / Detector de orina para mascotas casero: esta es una forma fácil (no requiere soldadura), divertida y económica de hacer una gran linterna LED UV con Legos. Esto también funciona como un detector de orina para mascotas casero (comparar precios). Si alguna vez has soñado con hacer tu propio Lego Flash casero
Detector de INUNDACIONES casero de bricolaje: 9 pasos
Detector de INUNDACIONES de bricolaje para el hogar: WHATI ha construido la detección de alarmas de agua al alterar las alarmas de intrusión de Dollar Store. Anteriormente, había construido el mismo diseño, con un interruptor FET de lado bajo y una sirena de alarma. Compré alarmas comerciales de RadioShack (ahora conocido como TheSource
Automatización y monitoreo del hogar controlado por voz / Internet de bricolaje usando ESP8266 y Google Home Mini: 6 pasos
Automatización y monitoreo del hogar controlado por voz / Internet de bricolaje usando ESP8266 y Google Home Mini: ¡¡Oye !! Después de un largo descanso, estoy aquí porque todos tenemos que hacer algo aburrido (trabajo) para ganar. Después de todos los artículos de AUTOMATIZACIÓN DEL HOGAR que he escrito desde BLUETOOTH, IR, WIFI local, Cloud, es decir, los difíciles, * NOW * viene el más fácil pero más eficiente
Cómo hacer un secador de pelo - Secador de pelo casero casero: 6 pasos (con imágenes)
Cómo hacer un secador de pelo: secador de pelo casero: ❄ SUSCRÍBETE AQUÍ ➜ https://www.youtube.com/subscription_center?add_us…❄ TODOS LOS VIDEOS AQUÍ ➜ http://www.youtube.com/user/fixitsamo / videos❄ SÍGUENOS: FACEBOOK ➜ https://www.facebook.com/fixitsamo PINTEREST ➜ https://www.facebook.com/fixitsamo