Meu sistema de automação residencial

Olá Habr!

O objetivo deste artigo (ciclo) é o efeito Habra, uma história introdutória sobre o meu sistema de automação residencial, é claro que eu não inventei e criei tudo do zero, mas apenas coletei tecnologias e projetos que eu considerava os mais adequados para esse fim e acrescentei um pouco de mim. Nível amador, mas, como resultado, tudo funciona, as pessoas o usam e não correm atrás de mim com um clube. Eu fiz tudo sozinho. Críticas construtivas são bem-vindas, será interessante conhecer qualquer opinião.

O sistema inclui equipamentos e um conjunto de programas: diretamente um sistema de automação para comunicação e visualização de equipamentos, comunicação e telemetria para monitoramento e atualização remota, um assistente de voz da Yandex. Tudo (quase tudo) é aberto e publicado no Github .

Nível do equipamento


A parte principal e necessária é um servidor baseado no Raspberry Pi, mas pode funcionar em um PC com Debian ou Ubuntu sem problemas. Sistema operacional Raspbian. O sistema deve funcionar 24/7/365 para que você precise de uma fonte de alimentação de alta qualidade, por exemplo, um PSU ideal para iPad.



Para o Gerenciamento Remoto, também tenho a habilidade de o assistente de voz Yandex precisar de um servidor com um IP "branco" e um domínio. Um servidor MQTT está em execução no servidor; SSL / TLS é usado para segurança.

Suporte KNX através do gateway BAOS 771-774. BAOS é a interface entre o barramento KNX e a LAN. Permite o acesso a endereços no barramento por meio de um serviço da web no formato JSON.

Meu equipamento:

Projetos para o IDE do Arduino

Controlador Wifi baseado no Wemos D1 mini



Alimentado por uma rede de 230 volts, também é possível sem uma fonte de alimentação de um barramento comum de 5 volts para alimentar o Wemos ou de equipamentos que ele controla, por exemplo, um acionamento por cortina. É possível instalar em caixas de junção e montagem com profundidade suficiente, por exemplo, atrás de um interruptor.

Pode ser usado em vez do controle de rádio de várias unidades de cortina.

Esquema


Pinagem de saídas controladas:
L1, L2 - Saídas de potência dos triacs BT-137S, controladas pelas saídas Wemos D0, D5 através de um acoplador óptico MOC 3063S com controle de transição de fase até zero. A ativação e desativação da carga ocorrerá sem causar interferência na rede.
Saída p1, p2 - pwm para dimmers ou acionadores de cortina motorizados ou botões adicionais, dependendo das configurações. correspondem às conclusões de D6, D7.
Entrada analógica A0 para conectar vários sensores, como luz ou um botão adicional.
ds - A conexão do sensor de temperatura DS18B20 corresponde ao pino D1.
DHT - A conexão do sensor de temperatura DHT22 corresponde ao pino D2.
b1, b2 - Os botões, pressão curta e longa, com a função do contador de cliques, podem ser conectados às saídas de pulso dos medidores de eletricidade, água, etc.

Demonstração de trabalho


Programa controlador criado no Arduino IDE. Adequado para todas as placas-mãe baseadas no ESP-8266. A configuração, controle e operação da rede do controlador são realizados pelo MQTT. Para uma visualização conveniente das configurações, existe uma interface da Web, anteriormente havia a capacidade de controlar via http, mas então eu a considerei supérflua e a removi.

Interface da web


A interface da web pode ser desativada. Para conveniência da configuração inicial, são fornecidos um script e instruções winit.sh. Para redefinir o controlador para as configurações padrão, você deve inserir o comando “padrão 1” ou pressionar simultaneamente os botões b1, b2 por 20 segundos. Há também uma versão simplificada do programa para tomadas Sonoff gerenciadas.

Controlador baseado em Arduino Mega



Consiste no mega em si e no escudo da placa de rede W5100, a placa possui saídas separadas para dimmers e uma entrada para sensores e botões, as saídas de relé devem ser conectadas separadamente usando um cabo ao conector de 2 linhas localizado na mega placa no lado oposto das portas USB e de alimentação. O controlador foi projetado para o gabinete D6MG.

Pinagem:

D2-9, D11-13 - saídas PWM para dimmers, a frequência do PWM é aumentada em relação ao padrão.
D14-21 - Sensores de temperatura DS18B20 e DHT22.
D22-49 - saídas de relé, as saídas D22-29 podem ser configuradas para acionamentos de persianas, portões, cortinas.
D 10.50-53 - usa a placa de rede W5100.
A0-16 - entradas para botões, pressão curta e longa. A0-A6 pode ser configurado para sensores analógicos.

As configurações de rede do mega são definidas no programa antes de piscar. O endereço IP é fixo.

Interface da web


Dimmer no triac BT137-600E



Entrada de 220 volts, controle PWM de 0 a 5 / 3,3 volts, definido configurando um jumper. 0-5 volts para trabalhar com o Arduino Mega ou 0-3,3 volts no caso de wemos. O sinal PWM é alimentado na entrada analógica A0 Arduino Pro, onde é convertido em um atraso para abrir o triac, um conector é fornecido para piscar o arduino no lugar. Espaço designado para o radiador. No lado do arduino, há o conector de controle e energia do arduino (PWM, -, +), no lado do smimstor, há um conector de energia de 4 pinos - energia e saída para a carga, se necessário, também pode ser equipado com um varistor ou amortecedor. A placa dimmer foi projetada para o chassi D2MG.

Projeto Dimmer:

PCB de PCBWay

Demonstração de trabalho


Há também uma unidade triac de 28 canais no pacote D9MG.

Peço desculpas pela qualidade da imagem


O equipamento é conectado através da rede local, um protocolo para comunicação MQTT. Estou usando o servidor MQTT Mosquitto.

Parte do software


Por conveniência, primeiro você precisa preparar uma imagem do sistema operacional com todos os programas necessários, eu uso o Raspbian Stretch Lite. Você precisará instalar nodejs, python-pip, python3-pip, supervisor, mosquitto, mosquitto-clients, sqlite3. E pacotes pip: paho-mqtt e psutil. Você também pode instalar o Node-red, perfeito para todos os tipos de experiências.

Após o lançamento do Apple Homekit em 2016, verificou-se que todos os fabricantes e desenvolvedores de toda a existência de sistemas Smart Home não podiam fazer nada próximo em termos de conveniência e funcionalidade em comparação com o homkit, isso é semelhante à situação com o lançamento do primeiro iPhone, quando se descobriu que todo o zoológico telefones, smartphones, comunicadores se transformaram em um monte de lixo. De qualquer forma, é sempre agradável usar um produto acabado e de qualidade.

Eu escolhi o projeto homekit2mqtt como o principal sistema de visualização. Obviamente, você pode usar o OpenHUB ou o HomAssistant, esses sistemas também funcionam com o MQTT.

hjmqtt
O Homekit2mqtt cria o Homekit Bridge, que pode ser encontrado no programa Home em dispositivos Apple. Os acessórios (iluminação, sensores, controladores de temperatura etc.) devem ser registrados em um arquivo especial no formato JSON. Os scripts filegen.sh e install.sh são responsáveis ​​por criar este arquivo. Você precisa registrar acessórios no arquivo filegen.sh, install.sh adiciona o homekit2mqtt ao carregamento automático e inicia. O principal acontece no arquivo hjmqtt.py - a conexão de acessórios com o equipamento, também manualmente no arquivo, é necessário registrar os parâmetros de acessórios e equipamentos, os endereços do KNX.
A funcionalidade dos acessórios está registrada nos arquivos Accessory.py e Accessoryknx.py. Os status do dispositivo são armazenados no banco de dados sqlite; a biblioteca statdb.py é usada para operações do banco de dados.

hjconnect
O próximo projeto é necessário para telemetria remota. É o uso de memória, discos, carga e temperatura, e o pacote psutil é usado para isso. Agora, a versão hjconnect está disponível para acesso aberto apenas para monitoramento e sem criptografia, e com um projeto separado, o programa para vincular arquivos também está no MQTT file-transfer-via-mqtt . As configurações estão diretamente no arquivo hjconnect.py principal. Se você executá-lo com a opção -l, poderá testá-lo no servidor MQTT local, as configurações do servidor remoto estarão na linha 160

rclient.connect("test.mosquitto.org", 1883, 60) 

O servidor test.mosquitto.org pode ser substituído pelo seu domínio ou IP. Para identificar o Raspberry Pi, o número de série do processador está incluído no tópico. Se o programa for executado em outro computador, em vez do número de série, haverá a string "SN". O intervalo da mensagem é definido na linha 96.

 th = threading.Timer(9, my_stat) # interval 

onde 9 é segundos.

Um exemplo de como é o monitoramento


sima
Agora, apenas o Yandex tem a única coluna de língua russa. Criar uma habilidade para Alice é fácil. Ao contrário da Siri, há total liberdade de ação. E acesse em qualquer dispositivo. Infelizmente, embora não exista uma maneira sensata de lançar uma habilidade, a execução constante de uma habilidade é inconveniente.

Demo


Este é um exemplo de habilidade de trabalho. Para iniciar a habilidade, você precisa de um certificado SSL, que pode ser gerado usando o openssl. Na linha sima.py na linha 14, há um exemplo de geração de certificado

 openssl req -new -keyout crt.pem -out crt.pem -x509 -days 365 -nodes -subj '/CN=site.com/O=user/C=RU' 

site.com e usuário precisam ser substituídos por seus dados.

Quando uma habilidade é lançada em um novo dispositivo, seu identificador é registrado. Para vincular o identificador e o sistema de automação, primeiro é necessário criar um novo arquivo csv no diretório clients com base no arquivo my.csv de amostra. O número de série é gravado no arquivo de acordo com o modelo, este é o mesmo número de série do programa hjconnect e os objetos de controle são gravados: nome, tipo, tópico. O tópico é uma parte significativa do tópico do acessório MQTT do arquivo JSON para homekit2mqtt. Em seguida, usando sn.py, você precisa converter o número de série em uma senha e nomear essa senha no dispositivo a partir do qual você gerenciará. A comunicação é fornecida pelo programa hjconnect e o servidor de monitoramento MQTT é o mesmo computador em que a habilidade está sendo executada.

Obrigado, tchau.

Source: https://habr.com/ru/post/pt442600/


All Articles