Este proyecto utiliza una Raspberry Pi Zero W, un Pimoroni Enviro+ y un sensor de calidad del aire Plantower para monitorear, mostrar e informar sobre partículas de aire, gases, temperatura, humedad, presión del aire, niveles de luz y niveles de ruido. También existe la opción de monitorear los niveles de eCO2 y TVOC agregando un sensor SGP30. El código se basa en muchos de los ejemplos y bibliotecas de Python publicados por Pimoroni, con una variedad de modificaciones y mejoras.
Se ha agregado una función básica de pronóstico del tiempo, basada en los niveles y cambios de presión del aire.
La visualización del nivel de luz en el magnífico Clima y Luz se ha cambiado para mostrar los niveles de calidad del aire. El tono de fondo ahora representa el nivel de calidad del aire y la posición del sol ahora se muestra mediante un ícono de sol visible. También proporciona información del pronóstico del tiempo, niveles de ruido (si está habilitado) y tiene algunos cambios menores en el indicador de humedad.
La función Combinada se ha modificado para proporcionar una visibilidad mejorada de cada gráfico. Los colores del gráfico se basan en umbrales de nivel para cada parámetro y solo muestra los parámetros que se han medido. El método 'display_everything' también se ha modificado para mostrar solo los parámetros de calidad del aire, con el fin de mejorar la legibilidad de la pantalla.
La función Todo en Uno se ha modificado para permitir recorrer todas las funciones del Enviro Monitor.
La precisión de las mediciones de temperatura y humedad se ha mejorado mediante la realización de pruebas exhaustivas y análisis de regresión (entre 0 y 40 grados Celsius) para desarrollar algoritmos de compensación más efectivos. Sin embargo, por sí solos, incluso estos algoritmos mejorados no proporcionaron suficiente precisión y fue necesario utilizar una carcasa impresa en 3D para separar el Enviro+ de la Raspberry Pi Zero W y conectarlos mediante un cable plano.
Además de mejorar las mediciones de temperatura y humedad, se llevaron a cabo pruebas y análisis de regresión para proporcionar compensación de deriva basada en el tiempo, temperatura, humedad y presión del aire para los sensores de gas Enviro+. También se utilizan algoritmos y calibración de aire limpio para proporcionar lecturas del sensor de gas en ppm. Se proporciona una función de registro de datos para respaldar el análisis de regresión. El archivo de registro para ese análisis debe habilitarse y convertirse a un formato json válido antes de realizar más análisis de regresión.
La precisión de las lecturas de presión del aire se obtiene mediante compensación de altitud. La altitud se establece mediante el parámetro 'altitud' en el archivo config.json.
El estuche no es resistente al agua y debe protegerse de los elementos. La base sólo es necesaria si la unidad no está montada en una superficie vertical. Existe una variante de carcasa y tapa para el modelo Indoor Plus que monitoriza los niveles de eCO2 y TVOC. Esta variante del estuche proporciona espacio y flujo de aire adicionales para el sensor SGP30.
El estuche también tiene la opción de agregar una cubierta contra la intemperie para brindar protección adicional contra los elementos. Al utilizar esta portada, es necesario configurar "enable_display" en el archivo config.json en "false". Eso limita la funcionalidad de la pantalla a solo el tono y el número de serie basados en la calidad del aire, además de cambiar las variables de compensación de temperatura y humedad para mitigar el efecto de la cubierta en el sensor de temperatura y humedad.
Se agregaron mediciones aproximadas de niveles de ruido a la versión 6, según este repositorio. Esta función no ha sido calibrada y no debe usarse para mediciones precisas del nivel de sonido. La versión 6.7 ha mejorado la compensación de frecuencia de la función de medición del nivel de ruido, pero aún se requiere más trabajo y calibración. Esta función de medición del nivel de ruido requiere una configuración adicional (descrita a continuación) y, después de la configuración, debe habilitarse en el archivo de configuración.
Se proporciona soporte mqtt para permitir el uso de sensores externos de temperatura y humedad (para registro de datos y análisis de regresión), interconexión entre Enviro Monitor y un sistema de automatización del hogar y para admitir la interconexión entre Enviro Monitors exteriores e interiores. Ese interfuncionamiento permite que la visualización de un monitor Enviro interior realice un ciclo entre lecturas interiores y exteriores.
Una alternativa al uso de monitores Enviro interiores y exteriores vinculados a mqtt para obtener lecturas exteriores en un monitor Enviro interior es configurar el monitor Enviro interior para capturar lecturas de Luftdaten o feeds IO de Adafruit de otro monitor Enviro.
El interfuncionamiento de Luftdaten se ha modificado para admitir la adición de lecturas de nivel de ruido mínimo, máximo y medio. Las lecturas del nivel de ruido se pueden enviar a Luftdaten configurando "enable_luftdaten_noise" en verdadero en el archivo config.json. Tenga en cuenta que Luftdaten actualmente no se puede configurar con tres sensores por nodo, por lo que las lecturas del nivel de ruido solo se pueden enviar a Luftdaten si las lecturas de PM o climáticas están deshabilitadas. Esto se puede hacer configurando "disable_luftdaten_sensor_upload" en el archivo config.json como "Clima" o "PM".
Se utiliza la misma configuración de Enviro+ para configurar Enviro Monitor y los parámetros del archivo config.json se utilizan para personalizar su funcionalidad. Aquí encontrará una descripción de los parámetros del archivo config.json.
La configuración de las mediciones del nivel de ruido requiere los siguientes pasos adicionales:
Es necesaria la ejecución exitosa de esta configuración antes de habilitar la medición de ruido en el archivo de configuración.
sudo apt-obtener actualización
sudo apt-obtener actualización
curl -sSL https://get.pimoroni.com/enviroplus | intento
sudo python -m pip desinstalar dispositivo de sonido
sudo pip3 instalar dispositivo de sonido == 0.3.15
Para las versiones 6.7 y posteriores, haga también:
sudo apt-get instalar python3-scipy
sudo pip3 instalar git+https://github.com/endolith/waveform_analysis.git@master
Luego siga las instrucciones en: https://learn.adafruit.com/adafruit-i2s-mems-microphone-breakout/raspberry-pi-wiring-test, incluido "Agregar control de volumen"
Utilice lo siguiente en lugar del texto documentado para ~/.asoundrc:
Para versiones anteriores a la Versión 6.7:
Utilice alsamixer para configurar el nivel de captura de adau7002 en 50
Para la versión 6.7 y posteriores:
Utilice alsamixer para configurar el nivel de captura de adau7002 en 10
Una Guía del usuario proporciona orientación sobre el uso de Enviro Monitor.
Se proporciona soporte para la transmisión del pronóstico del tiempo, calidad del aire, temperatura, humedad, punto de rocío, presión del aire, concentración de PM, concentración de gas, niveles de luz, niveles de ruido y, con el sensor SGP30 opcional, datos de eCO2 y TVOC a Adafruit IO. Esto se puede habilitar y configurar de la siguiente manera:
Los siguientes campos en el archivo config.json de Enviro Monitor deben completarse para proporcionar datos a las fuentes de IO de Adafruit.
"enable_adafruit_io": configúrelo en verdadero para habilitar y falso para deshabilitar los feeds de Adafruit IO.
"aio_user_name": "Su nombre de usuario de Adafruit IO",
"aio_key": "Tu clave IO de Adafruit",
"aio_feed_window": valor entre 0 y 9. Establece la hora de inicio de la ventana de alimentación de un minuto (consulte Control de limitación de Adafruit). Establezca en 0 si solo tiene un Enviro Monitor,
"aio_feed_sequence": valor entre 0 y 3. Establece la hora de inicio de la actualización del feed dentro de la ventana de actualización del feed de un minuto (consulte Control de limitación de Adafruit). Establezca en 0 si solo tiene un Enviro Monitor,
"aio_household_prefix": "El prefijo clave de Adafruit IO para el hogar que estás monitoreando (ver Convención de nomenclatura de Adafruit IO)",
"aio_location_prefix": "El prefijo de clave IO de Adafruit para la ubicación de este monitor Enviro en particular. Utilice 'indoor' para un monitor interior o 'outdoor' para un monitor exterior. (consulte la Convención de nomenclatura de IO de Adafruit)",
"aio_package": Establezca en "Premium Plus" o "Premium Plus Noise" o "Premium" o "Premium Noise" o "Basic Air" o "Basic Combo"
Necesitará una cuenta Adafruit IO+ para poder utilizar los paquetes 'Premium Plus', 'Premium Plus Noise', 'Premium' o 'Premium Noise' y un Enviro Monitor Indoor Plus (equipado con un sensor SGP30 eCO2/TVOC) para el ' Paquetes Premium Plus' o 'Premium Plus Noise' (ver Paquetes Adafruit IO)",
El script configura los feeds, paneles y bloques de Adafruit IO de Enviro Monitor como en este ejemplo
El script puede configurar varios hogares y ubicaciones en una sola ejecución, completando el diccionario aio_feed_prefix con los datos requeridos. El formato de aio_feed_prefix es:
aio_feed_prefix = {'Nombre del hogar 1': {'key': 'household1key', 'paquete': 'aio_package', 'ubicaciones': {'Ubicación1Name': 'ubicación1key', 'Ubicación2Name': 'ubicación2key'}, 'visibilidad ': 'público' o 'privado'}, 'Nombre del hogar 2': {'key': 'household2key', 'paquete': 'aio_package', 'ubicaciones': {'Ubicación1Nombre': 'ubicación1key'}, 'visibilidad': 'público' o 'privado'}}
Los nombres de los hogares y las claves del hogar deben ser coherentes con los definidos en los archivos config.json de los monitores Enviro correspondientes.
Por ejemplo, si solo tiene un Enviro Monitor para su hogar y ha configurado "aio_household_prefix" en "home", "aio_location_prefix" en "outdoor" y "aio_package" en "Premium" en su archivo config.json para ese Enviro Monitor, y si desea que los feeds, paneles y bloques estén configurados con visibilidad privada:
aio_feed_prefix = {'Inicio': {'clave': 'inicio', 'paquete': Premium', 'ubicaciones': {'Exterior': 'exterior'}, 'visibilidad': 'privado'}}
Si tiene dos monitores Enviro para su hogar y ha configurado los archivos config.json como "aio_household_prefix" en "home" para ambos monitores Enviro, "aio_location_prefix" en "outdoor" para el monitor exterior e "indoor" para su monitor interior, "aio_package" a "Premium" para su monitor exterior y "Premium Plus" para su monitor interior, y si desea las transmisiones, paneles y Conjunto de bloques con visibilidad pública:
aio_feed_prefix = {'Inicio': {'key': 'inicio', 'paquete': Premium Plus', 'ubicaciones': {'Exterior': 'exterior', 'Interior': 'interior'}, 'visibilidad': 'público'}}
Los otros dos diccionarios definidos por el usuario son aio_user_name y aio_key. Estos deben completarse con el mismo nombre de usuario y clave que utilizó en el archivo config.json de su Enviro Monitor.
aio_user_name = "Su nombre de usuario de Adafruit IO"
aio_key = "Su clave IO de Adafruit"
Si está habilitado, las actualizaciones del feed IO de Adafruit se generan cada 10 minutos. Las variables aio_feed_window y aio_feed_sequence del archivo de configuración se utilizan para minimizar los errores de limitación de IO de Adafruit al recopilar feeds de múltiples monitores Enviro. La variable aio_feed_window puede tener un valor entre 0 y 9 para establecer la hora de inicio de una ventana de actualización del feed de un minuto. 0 abre la ventana a las 0, 10, 20, 30, 40 y 50 minutos después de la hora, 1 abre la ventana a las 1, 11, 21, 31, 41 y 51 minutos después de la hora, 2 abre la ventana a las 2, 12, 22, 32, 42 y 52 minutos después de la hora, y así sucesivamente. La variable aio_feed_sequence puede tener un valor entre 0 y 3 para establecer la hora de inicio de la actualización del feed dentro de la ventana de actualización del feed de un minuto. 0 inicia la actualización del feed inmediatamente después de que se abre la ventana, 1 retrasa el inicio 15 segundos, 2 30 segundos y 3 45 segundos.
La convención de nomenclatura para cada feed, panel o bloque de Adafruit IO de Enviro Monitor es utilizar el nombre del hogar, seguido de la ubicación del Enviro Monitor relevante dentro de ese hogar, como prefijo para cada feed, panel o bloque. Usted elige un nombre adecuado para "aio_household_prefix" y "aio_location_prefix" puede ser "interior" o "exterior". Por ejemplo, configurar "aio_household_prefix" en "home" y "aio_location_prefix" en "outdoor" establecerá el prefijo del nombre de cada feed como "Home Outdoor" y el prefijo de la clave de cada feed como "home-outdoor-". La alimentación de temperatura tendrá el nombre "Temperatura exterior del hogar" y la clave "temperatura exterior del hogar". El tablero tendrá el nombre "Inicio" y la clave "Inicio" y el bloque indicador de temperatura dentro de ese tablero. tendrá el nombre “medidor de temperatura exterior” y la clave “medidor-de-temperatura-exterior”.
Hay seis opciones de paquete Adafruit IO disponibles: "Premium" con 14 fuentes de datos por Enviro, "Premium Noise" con 17 fuentes de datos por Enviro, "Premium Plus" con 16 fuentes de datos por Enviro (es decir, la adición de eCO2 y TVOC a través del opcional sensor SGP30), "Premium Plus Noise" con 19 fuentes de datos por Enviro, todas las cuales necesitan una cuenta Adafruit IO+; "Aire básico" con 5 flujos de datos de calidad del aire (Nivel de calidad del aire, Texto de calidad del aire, PM1, PM2.5 y PM10) y "Combo básico" con 5 flujos de calidad del aire/clima (Nivel de calidad del aire, Icono de pronóstico del tiempo, Temperatura, Humedad y presión del aire).
El uso de los paquetes Adafruit IO "Premium Noise" y "Premium Plus Noise" requiere configurar y habilitar las mediciones de ruido en Enviro, siguiendo las instrucciones de configuración pertinentes. La versión 6.5 cambia las fuentes de ruido y los paneles para mostrar los niveles de ruido máximo, mínimo y medio entre las actualizaciones de las fuentes, mientras que las versiones anteriores solo mostraban los niveles de ruido máximos entre las actualizaciones de las fuentes.
Este proyecto tiene la licencia MIT; consulte el archivo LICENSE.md para obtener más detalles.
Pronóstico del tiempo basado en www.worldstormcentral.co/law_of_storms/secret_law_of_storms.html por RJ Ellis