Este projeto usa um Raspberry Pi Zero W, um Pimoroni Enviro+ e um sensor de qualidade do ar Plantower para monitorar, exibir e relatar partículas de ar, gases, temperatura, umidade, pressão do ar, níveis de luz e níveis de ruído. Também existe a opção de monitorar os níveis de eCO2 e TVOC adicionando um sensor SGP30. O código é baseado em muitos exemplos e bibliotecas Python publicados pela Pimoroni, com uma série de modificações e melhorias.
Foi adicionada uma função básica de previsão do tempo, com base nos níveis e alterações da pressão atmosférica.
A exibição do nível de luz no excelente Weather and Light foi alterada para exibir os níveis de qualidade do ar. A tonalidade de fundo agora representa o nível de qualidade do ar e a posição do sol agora é exibida através de um ícone de sol visível. Ele também fornece informações de previsão do tempo, níveis de ruído (se ativado) e apresenta algumas pequenas alterações no indicador de umidade.
A função Combinada foi modificada para fornecer melhor visibilidade de cada gráfico. As cores do gráfico são baseadas nos limites de nível para cada parâmetro e exibe apenas os parâmetros que foram medidos. O método 'display_everything' também foi modificado para mostrar apenas parâmetros de qualidade do ar, a fim de melhorar a legibilidade do display.
A função All in One foi modificada para permitir percorrer todas as funções do Enviro Monitor.
A precisão das medições de temperatura e umidade foi melhorada através da realização de testes extensivos e análises de regressão (entre 0 e 40 graus Celsius) para desenvolver algoritmos de compensação mais eficazes. No entanto, por si só, mesmo esses algoritmos aprimorados não forneceram precisão suficiente e foi necessário usar uma caixa impressa em 3D para separar o Enviro+ do Raspberry Pi Zero W e conectá-los por meio de um cabo plano.
Além de melhorar as medições de temperatura e umidade, foram realizados testes e análises de regressão para fornecer compensação baseada em tempo, temperatura, umidade e pressão do ar para os sensores de gás Enviro+. Algoritmos e calibração de ar limpo também são usados para fornecer leituras de sensores de gás em ppm. Uma função de registro de dados é fornecida para apoiar a análise de regressão. O arquivo de log dessa análise precisa ser habilitado e convertido em um formato JSON válido antes de realizar análises de regressão adicionais.
A precisão das leituras de pressão atmosférica é fornecida através da compensação de altitude. A altitude é definida pelo parâmetro 'altitude' no arquivo config.json.
A caixa não é resistente à água e precisa ser protegida das intempéries. A base só é necessária se a unidade não estiver montada numa superfície vertical. Existe uma variante de case e capa para o modelo Indoor Plus que monitora os níveis de eCO2 e TVOC. Esta variante do gabinete fornece espaço e fluxo de ar adicionais para o sensor SGP30.
O case também tem a opção de adicionar uma cobertura contra intempéries para fornecer proteção adicional contra as intempéries. Ao usar esta capa, é necessário definir "enable_display" no arquivo config.json como "false". Isso limita a funcionalidade do display apenas à matiz e número de série com base na qualidade do ar, bem como à alteração das variáveis de compensação de temperatura e umidade para mitigar o efeito da tampa no sensor de temperatura e umidade.
Medições aproximadas de níveis de ruído foram adicionadas à versão 6, com base neste repositório. Este recurso não foi calibrado e não deve ser usado para medições precisas de nível sonoro. A versão 6.7 melhorou a compensação de frequência da função de medição de nível de ruído, usando isso, mas ainda é necessário mais trabalho e calibração. Esta função de medição de nível de ruído requer configuração adicional (descrita abaixo) e após a configuração, precisa ser habilitada no arquivo de configuração.
O suporte mqtt é fornecido para permitir o uso de sensores externos de temperatura e umidade (para registro de dados e análise de regressão), interoperabilidade entre o Enviro Monitor e um sistema de automação residencial e para suportar a interoperabilidade entre monitores Enviro externos e internos. Essa interoperabilidade permite que a exibição de um monitor Enviro interno alterne entre leituras internas e externas.
Uma alternativa ao uso de monitores Enviro internos e externos vinculados a mqtt para obter leituras externas em um monitor Enviro interno é configurar o monitor Enviro interno para capturar leituras Luftdaten ou feeds Adafruit IO de outro monitor Enviro.
A interoperabilidade Luftdaten foi modificada para suportar a adição de leituras de nível de ruído mínimo, máximo e médio. As leituras de nível de ruído podem ser enviadas para Luftdaten definindo "enable_luftdaten_noise" como true no arquivo config.json. Observe que o Luftdaten não pode atualmente ser configurado com três sensores por nó, portanto, as leituras de nível de ruído só podem ser enviadas ao Luftdaten se as leituras de PM ou climáticas estiverem desativadas. Isso pode ser feito definindo "disable_luftdaten_sensor_upload" no arquivo config.json como "Clima" ou "PM".
A mesma configuração do Enviro+ é usada para configurar o Enviro Monitor e os parâmetros do arquivo config.json são usados para personalizar sua funcionalidade. Uma descrição dos parâmetros do arquivo config.json está aqui.
A configuração das medições de nível de ruído requer as seguintes etapas adicionais:
A execução bem-sucedida desta configuração é necessária antes de ativar a medição de ruído no arquivo de configuração.
sudo apt-get atualização
sudo apt-get atualização
curl -sSL https://get.pimoroni.com/enviroplus | festa
sudo python -m pip desinstalar dispositivo de som
sudo pip3 instalar dispositivo de som == 0.3.15
Para versões 6.7 e posteriores, faça também:
sudo apt-get install python3-scipy
sudo pip3 instale git + https://github.com/endolith/waveform_análise.git@master
Em seguida, siga as instruções em: https://learn.adafruit.com/adafruit-i2s-mems-microphone-breakout/raspberry-pi-wiring-test incluindo “Adicionando controle de volume”
Use o seguinte em vez do texto documentado para ~/.asoundrc:
Para versões anteriores à Versão 6.7:
Use alsamixer para definir o nível de captura do adau7002 para 50
Para versão 6.7 e posterior:
Use alsamixer para definir o nível de captura do adau7002 para 10
Um Guia do Usuário fornece orientação sobre o uso do Enviro Monitor.
É fornecido suporte para streaming de previsão do tempo, qualidade do ar, temperatura, umidade, ponto de orvalho, pressão do ar, concentração de PM, concentração de gás, níveis de luz, níveis de ruído e, com o sensor SGP30 opcional, dados de eCO2 e TVOC para Adafruit IO. Isso pode ser ativado e configurado da seguinte forma:
Os seguintes campos no arquivo config.json do Enviro Monitor precisam ser preenchidos para fornecer dados aos feeds Adafruit IO.
"enable_adafruit_io": Defina como verdadeiro para ativar e falso para desativar os feeds Adafruit IO,
"aio_user_name": "Seu nome de usuário Adafruit IO",
"aio_key": "Sua chave Adafruit IO",
"aio_feed_window": Valor entre 0 e 9. Define o horário de início da janela de feed de um minuto (ver Adafruit Throttling Control). Defina como 0 se você tiver apenas um Monitor Enviro,
"aio_feed_sequence": Valor entre 0 e 3. Define o horário de início da atualização do feed dentro da janela de atualização do feed de um minuto (ver Adafruit Throttling Control). Defina como 0 se você tiver apenas um Monitor Enviro,
"aio_household_prefix": "O prefixo chave Adafruit IO para a família que você está monitorando (veja Convenção de Nomenclatura Adafruit IO)",
"aio_location_prefix": "O prefixo da chave Adafruit IO para a localização deste monitor Enviro específico. Use 'indoor' para um monitor interno ou 'outdoor' para um monitor externo. (consulte Convenção de nomenclatura Adafruit IO)",
"aio_package": definido como "Premium Plus" ou "Premium Plus Noise" ou "Premium" ou "Premium Noise" ou "Basic Air" ou "Basic Combo"
Você precisará de uma conta Adafruit IO+ para usar os pacotes 'Premium Plus', 'Premium Plus Noise', 'Premium' ou 'Premium Noise' e um Enviro Monitor Indoor Plus (equipado com um sensor SGP30 eCO2/TVOC) para o ' Pacotes Premium Plus' ou 'Premium Plus Noise' (ver Pacotes Adafruit IO)",
O script configura os feeds, painéis e blocos Adafruit IO do Enviro Monitor como este exemplo
O script pode configurar vários domicílios e locais em uma única execução, preenchendo o dicionário aio_feed_prefix com os dados necessários. O formato para aio_feed_prefix é:
aio_feed_prefix = {'Nome da família 1': {'key': 'household1key', 'package': 'aio_package', 'locations': {'Location1Name': 'location1key', 'Location2Name': 'location2key'}, 'visibilidade ': 'público' ou 'privado'}, 'Nome da família 2': {'key': 'household2key', 'pacote': 'aio_package', 'locais': {'Location1Name': 'location1key'}, 'visibilidade': 'público' ou 'privado'}}
Os Nomes Domésticos e as Chaves Domésticas precisam ser consistentes com aqueles definidos nos arquivos config.json relevantes dos Monitores Enviro.
Por exemplo, se você tiver apenas um Monitor Enviro para sua casa e se tiver definido "aio_household_prefix" como “home”, “aio_location_prefix” como “outdoor” e “aio_package” como “Premium” em seu arquivo config.json para aquele Enviro Monitor, e se você deseja que os feeds, painéis e blocos sejam configurados com visibilidade privada:
aio_feed_prefix = {'Home': {'key': 'home', 'package': Premium', 'locations': {'Outdoor': 'outdoor'}, 'visibility': 'private'}}
Se você tiver dois monitores Enviro para sua casa e se tiver definido os arquivos config.json como "aio_household_prefix" para "home" para ambos os monitores Enviro, "aio_location_prefix" para "outdoor" para o monitor externo e "indoor" para seu monitor interno, "aio_package" para “Premium” para seu monitor externo e “Premium Plus” para seu monitor interno, e se você quiser os feeds, painéis e blocos definidos com visibilidade pública:
aio_feed_prefix = {'Home': {'key': 'home', 'package': Premium Plus', 'locations': {'Outdoor': 'outdoor', 'Indoor': 'indoor'}, 'visibility': 'público'}}
Os outros dois dicionários definidos pelo usuário são aio_user_name e aio_key. Eles precisam ser preenchidos com o mesmo nome de usuário e chave que você usou no arquivo config.json do Enviro Monitor.
aio_user_name = "Seu nome de usuário Adafruit IO"
aio_key = "Sua chave Adafruit IO"
Se ativado, as atualizações do feed Adafruit IO serão geradas a cada 10 minutos. As variáveis aio_feed_window e aio_feed_sequence do arquivo de configuração são usadas para minimizar erros de limitação do Adafruit IO ao coletar feeds de vários monitores Enviro. A variável aio_feed_window pode ter um valor entre 0 e 9 para definir o horário de início de uma janela de atualização de feed de um minuto. 0 abre a janela aos 0, 10, 20, 30, 40 e 50 minutos após a hora, 1 abre a janela aos 1, 11, 21, 31, 41 e 51 minutos após a hora, 2 abre a janela aos 2, 12, 22, 32, 42 e 52 minutos após a hora e assim por diante. A variável aio_feed_sequence pode ter um valor entre 0 e 3 para definir o horário de início da atualização do feed dentro da janela de atualização do feed de um minuto. 0 inicia a atualização do feed imediatamente após a janela ser aberta, 1 atrasa o início em 15 segundos, 2 em 30 segundos e 3 em 45 segundos.
A convenção de nomenclatura para feeds, painéis ou blocos Adafruit IO de cada Enviro Monitor é usar o nome da família, seguido pela localização do Enviro Monitor relevante dentro dessa família, como um prefixo para cada feed, painel ou bloco. Você escolhe um nome adequado para "aio_household_prefix" e "aio_location_prefix" pode ser “interno” ou “externo”. Por exemplo, definir “aio_household_prefix” como “home” e “aio_location_prefix” como “outdoor” definirá o prefixo do nome de cada feed como “Home Outdoor “ e o prefixo da chave de cada feed como “home-outdoor-“. O feed de temperatura terá o nome “Home Outdoor Temperature” e a chave “home-outdoor-temperature”. O painel terá o nome “Home” e a chave “home” e o bloco do medidor de temperatura dentro dele. o painel terá o nome “Medidor de temperatura externa” e a chave “Medidor de temperatura externa”.
Seis opções de pacotes Adafruit IO estão disponíveis: "Premium" com 14 feeds de dados por Enviro, "Premium Noise" com 17 feeds de dados por Enviro, "Premium Plus" com 16 feeds de dados por Enviro (ou seja, a adição de eCO2 e TVOC através do opcional sensor SGP30), "Premium Plus Noise" com 19 feeds de dados por Enviro, todos precisando de uma conta Adafruit IO+; "Ar Básico" com 5 fluxos de dados de qualidade do ar (Nível de Qualidade do Ar, Texto de Qualidade do Ar, PM1, PM2.5 e PM10) e "Combo Básico" com 5 fluxos de qualidade do ar/clima (Nível de Qualidade do Ar, Ícone de Previsão do Tempo, Temperatura, Umidade e pressão do ar).
O uso dos pacotes Adafruit IO "Premium Noise" e "Premium Plus Noise" requer a configuração e ativação de medições de ruído no Enviro, usando as instruções de configuração relevantes. A versão 6.5 altera os feeds de ruído e os painéis para mostrar os níveis de ruído máximo, mínimo e médio entre as atualizações de feed, enquanto as versões anteriores mostravam apenas os níveis de ruído máximo entre as atualizações de feed.
Este projeto está licenciado sob a licença MIT - consulte o arquivo LICENSE.md para obter detalhes
Previsão do tempo baseada em www.worldstormcentral.co/law_of_storms/secret_law_of_storms.html por RJ Ellis