Índice:
- Etapa 1: Monitoramento de temperatura
- Etapa 2: Configurando Cloud4Rpi.io
- Etapa 3: Monitoramento de UPS
- Etapa 4: Preparação para a "produção"
- Etapa 5: Configurando um Painel de Controle
Vídeo: Monitoramento DIY House com RaspberryPi e Cloud4Rpi: 5 etapas
2024 Autor: John Day | [email protected]. Última modificação: 2024-01-30 11:37
Num fim de semana de inverno, fui à minha casa de campo e descobri que fazia muito frio lá. Algo havia acontecido com eletricidade e o disjuntor RCD o desligou, e o aquecimento também. Tive a sorte de chegar lá, senão em vários dias tudo teria congelado, o que é muito ruim para os canos e os radiadores.
Eu tinha vários Raspberry Pi e um sensor térmico, então pensei - por que não faço um dispositivo de monitoramento simples? As instruções abaixo pressupõem que você tenha um Raspberry Pi com Raspbian e uma conexão de rede configurada. No meu caso, é Raspberry Pi B + com Raspbian (2018–06–27-raspbian-stretch-lite).
Etapa 1: Monitoramento de temperatura
Como conectar um sensor de temperatura DS18B20? Pesquise no Google como fazer isso e você verá muitas fotos como esta:
No meu caso eu tinha fios Preto, Amarelo e Vermelho. O preto é aterrado, vai para o pino de aterramento, o vermelho é energia - vai para o pino de 3,3 V, e o amarelo é para dados - deve ir para o pino GPIO4, com resistor de 4,7 kOm conectado entre os dados e a energia. Nota, você pode conectar vários sensores em paralelo (são digitais e têm endereços diferentes), você precisa de apenas um resistor. Depois de conectar seu sensor, você deve habilitar 1Wire no raspi-config:
sudo raspi-config
Vá para 5 opções de interface, habilite P7 1-Wire e reinicie.
Então você pode testar se consegue ver o sensor:
sudo modprobe w1-gpiosudo modprobe w1-thermls / sys / bus / w1 / devices /
Você deve ver algo assim:
pi @ vcontrol: ~ $ ls / sys / bus / w1 / devices / 28–00044eae2dff w1_bus_master1
28–00044eae2dff é nosso sensor de temperatura.
O hardware está pronto. Agora preciso configurar a parte de monitoramento. Preciso de algo que me mostre os dados e me avise se o dispositivo for desconectado por um tempo ou se não houver energia ou se a temperatura estiver baixa. Obviamente, este não pode ser o próprio raspberry pi, deve haver algum servidor ou serviço na internet que monitore meu dispositivo.
Posso criar um servidor simples, conseguir uma hospedagem e configurar tudo, mas honestamente, não quero. Felizmente, alguém já pensou sobre isso e criou cloud4rpi.io - um painel de controle em nuvem para o seu dispositivo.
Etapa 2: Configurando Cloud4Rpi.io
Cloud4Rpi fornece um serviço que permite que seu dispositivo envie e receba dados usando os protocolos MQTT ou HTTP. Eles têm uma biblioteca cliente para Python, então usarei Python.
Os exemplos de Python que vêm com o serviço Cloud4Rpi já contêm código para o sensor de temperatura DS18B20.
Então eu fui para https://cloud4rpi.io, criei uma conta e adicionei um novo dispositivo lá. A página do dispositivo possui um token - uma string que identifica o dispositivo e que deve ser especificada no programa que envia os dados.
Para começar, é sempre uma boa ideia atualizar um gerenciador de pacotes e atualizar os pacotes (nota: pode levar horas se você não atualizar por um tempo):
sudo apt-get update && sudo apt-get upgrade
Em seguida, instale git, Python e seu gerenciador de pacotes Pip:
sudo apt-get install git python python-pip
Em seguida, instale a biblioteca cloud4rpi Python:
sudo pip install cloud4rpi
Finalmente, estou pronto para escrever meu programa de controle. Começo com o exemplo disponível em
git clone https://github.com/cloud4rpi/cloud4rpi-raspberrypi… cloud4rpicd cloud4rpi
O arquivo de programa principal é control.py - preciso modificá-lo de acordo com minhas necessidades. Primeiro, edite o programa e cole um token:
sudo nano control.py
Encontre uma linha DEVICE_TOKEN = '…'] e especifique um token de dispositivo lá. Depois disso, posso simplesmente executar o programa: ele funciona e relata uma temperatura na variável RoomTemp:
sudo python control.py
Ele funciona e relata uma temperatura na variável RoomTemp.
Observe que ele descobre todos os sensores ds18b20 onewire
ds_sensors = ds18b20. DS18B20.find_all ()
e usa o primeiro sensor encontrado:
RoomTemp ': {' type ':' numeric ',' bind ': ds_sensors [0] if ds_sensors else None}
Ok, isso foi fácil, porque o programa de amostra tem tudo o que é necessário para funcionar com o sensor ds18b20 no Raspberry Pi. Agora preciso encontrar uma maneira de relatar o status de energia.
Etapa 3: Monitoramento de UPS
A próxima coisa que desejo monitorar é o status do no-break, portanto, se houver queda de energia, saberei antes que tudo seja desconectado.
Tenho um UPS APC com controle USB, então pesquisei rapidamente no Google e descobri que preciso do apcupsd. https://www.anites.com/2013/09/monitoring-ups.html… Tentei várias vezes instalá-lo através do apt-get e não estava funcionando para mim por vários motivos. Vou mostrar como instalá-lo a partir das fontes.
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
Em seguida, edito o apcupsd.conf para me conectar ao meu no-break via usb.
sudo nano /etc/apcupsd/apcupsd.conf# #UPSCABLE smart UPSCABLE usb # #UPSTYPE apcsmart #DEVICE / dev / ttyS0 UPSTYPE USB DEVICE
Agora posso conectar o cabo USB do UPS ao RaspberryPi e testar se o UPS foi encontrado.
sudo apctest
Não deve apresentar mensagens de erro.
Agora, sevice apcupsd deve ser iniciado:
sudo systemctl start apcupsd
Para ativar o status do UPS, posso usar um comando de status:
sudo /etc/init.d/apcupsd status
E a saída seria algo assim:
APC: 001, 035, 0855DATE: 2018-10-14 16:55:30 +0300 HOSTNAME: vcontrol VERSÃO: 3.14.14 (31 de maio de 2016) debian UPSNAME: vcontrol CABO: Cabo USB DRIVER: USB UPS Driver UPSMODE: Stand Alone STARTTIME: 2018-10-14 16:54:28 +0300 MODELO: Back-UPS XS 650CI STATUS: ONLINE LINEV: 238,0 Volts LOADPCT: 0,0 por cento BCHARGE: 100,0 por cento TIMELEFT: 293,3 minutos MBATTCHG: 5 por cento MINTIMEL: 3 minutos MAXTIME: 0 Segundos SENTIDO: Médio LOTRANS: 140,0 Volts HITRANS: 300,0 Volts ALARMDEL: 30 Segundos BATTV: 14,2 Volts LASTXFER: Nenhuma transferência desde a ativação NUMXFERS: 0 TONBATT: 0 Segundos CUMONBATT: 0 Segundos XOFFBATT: N / A STATFLATTFLAG: 0x0NOTE14: 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
Preciso de um status - que é a linha “STATUS:”.
A biblioteca Cloud4rpi contém um módulo ‘rpy.py’ que retorna os parâmetros do sistema Raspberry Pi, como nome do host ou temperatura da cpu. Uma vez que todos esses parâmetros são resultados da execução de alguns comandos e da saída de análise, ele também contém uma função útil ‘parse_output’ que faz exatamente o que eu preciso. Veja como obter o status do meu UPS:
def ups_status (): resultado = rpi.parse_output (r'STATUS / s +: / s + (S +) ', [' /etc/init.d/apcupsd ',' status ']) se resultado: retornar resultado else: retornar 'DESCONHECIDO'
Para enviar esse status para cloud4rpi, preciso declarar uma variável UPSStatus e vinculá-la à minha função ups_status: Agora posso executar meu programa:
variáveis = {'RoomTemp': {'type': 'numeric', 'bind': ds_sensors [0]}, 'UPSStatus': {'type': 'string', 'bind': ups_status}}
E posso ver imediatamente minha variável na página do dispositivo cloud4rpi.
Etapa 4: Preparação para a "produção"
Tudo está funcionando e agora preciso preparar meu dispositivo para o modo autônomo.
Para começar, vou ajustar os intervalos de tempo. O intervalo de sondagem define com que freqüência o programa verifica a temperatura e o status do UPS - defina-o para um segundo.
Os resultados são enviados para a nuvem a cada 5 minutos e as informações de diagnóstico - a cada hora.
# ConstantsDATA_SENDING_INTERVAL = 300 # seg DIAG_SENDING_INTERVAL = 3600 # seg POLL_INTERVAL = 1 # seg
Quando o status do UPS muda - não quero que meu dispositivo espere 5 minutos e envio os dados imediatamente. Então, eu modifiquei um pouco o loop principal e ele se parece com isto:
data_timer = 0diag_timer = 0 prevUPS = 'ONLINE' enquanto True: newUPS = ups_status () if (data_timer <= 0) ou (newUPS! = prevUPS): device.publish_data () data_timer = DATA_SENDING_INTERVAL prevUPS = newUPS se diag_timer <= 0: device.publish_diag () diag_timer = DIAG_SENDING_INTERVAL hibernar (POLL_INTERVAL) diag_timer - = POLL_INTERVAL data_timer - = POLL_INTERVAL
Teste: execute o script:
sudo python control.py
E posso ver o status do UPS na página do meu dispositivo.
Se eu desligar o UPS, o status muda em alguns segundos, então tudo está funcionando. Agora eu preciso iniciar o apcupsd e meu control.py na inicialização do sistema. O serviço Apcupsd é antigo e para iniciá-lo no raspbian moderno, devo modificar o arquivo /etc/init.d/apcupsd, adicionando estas linhas em algum lugar no topo:
### BEGIN INIT INFO # Fornece: apcupsd # Required-Start: $ all # Required-Stop: # Default-Start: 2 3 4 5 # Default-Stop: # Breve descrição: APC UPS daemon… ### END INIT INFO #
Em seguida, ative o serviço:
sudo systemctl enable apcupsd
Em seguida, inicie o serviço:
sudo systemctl start apcupsd
Agora o apcupsd será iniciado na inicialização do sistema.
Para instalar control.py como um serviço, usei o script service_install.sh fornecido:
sudo bash service_install.sh ~ / cloud4rpi / control.py
Agora o serviço foi iniciado e deve sobreviver a uma reinicialização.
Etapa 5: Configurando um Painel de Controle
Cloud4rpi me permite configurar um painel de controle para meu dispositivo. Você pode adicionar “widgets” e vinculá-los a variáveis de dispositivo.
Meu dispositivo fornece duas variáveis somente leitura - RoomTemp e UPSStatus:
variáveis = {'RoomTemp': {'type': 'numeric', 'bind': ds_sensors [0]}, 'UPSStatus': {'type': 'string', 'bind': ups_status}}
Eu adicionei 3 widgets - Número para RoomTemp, Texto para UPSStatus e um Gráfico para RoomTemp.
Posso configurar alertas, então recebo um e-mail quando a temperatura está fora da faixa especificada, o UPS ficou off-line ou o próprio dispositivo não envia dados quando deveria. Agora posso ter certeza de que minha casa de campo está ok e posso ser notificado quando algo está errado, posso ligar para meus vizinhos e pedir que verifiquem o que está acontecendo. Aqui está o código real do control.py.
Recomendado:
House Alarm Internet Dialer para Aritech com Arduino: 6 etapas
House Alarm Internet Dialer para Aritech com Arduino: Um alarme doméstico e empresarial muito comum usado em muitos países da Europa é a série Aritech de painéis de alarme. Eles foram instalados até o início de 2000 em suas centenas de milhares e muitos ainda existem em casas hoje - eles geralmente são renomeados por
Oradores Bird House: 5 etapas
Oradores da Bird House: Minha família passa muito tempo no quintal assistindo filmes, dando festas e curtindo o dia. Eu me peguei arrastando muito rádios e alto-falantes para fora. Claro que existe uma solução melhor. Meu objetivo era ter um sistema externo permanente, com f
Monitoramento de Green House com IOT: 5 etapas
Monitoramento de estufa com IOT: Quando se trata de agricultura, monitorar a temperatura & a umidade das plantas é um fator importante para sua sobrevivência. Atualmente, as pessoas usam termômetros fixados em uma estufa para que os agricultores possam medir a temperatura. No entanto, este aplicativo manual
Bomba de máquina de café inteligente controlada por Raspberry Pi & HC-SR04 Sensor ultrassônico e Cloud4RPi: 6 etapas
Bomba de máquina de café inteligente controlada por Raspberry Pi & HC-SR04 Sensor ultrassônico e Cloud4RPi: em teoria, toda vez que você vai à máquina de café para sua xícara matinal, há apenas uma chance em vinte de você ter que encher a água tanque. Na prática, porém, parece que a máquina de alguma forma encontra uma maneira de sempre colocar essa tarefa em você. O
Decoração DIY Rainbow House: 5 etapas
DIY Rainbow House Decor: Bem-vindo ao meu novo artigo … Fazendo uma decoração DIY Rainbow House! O Arduino pode ser usado para fazer praticamente qualquer projeto eletrônico. Aqui, usei-o para fazer uma bela decoração para sua casa. O " arco-íris " parte deste projeto é