A história de como automatizei o apartamento usando o Node-RED. parte II

A tão esperada continuação do post sobre a automação do apartamento . Nesta parte, falarei sobre iluminação, um sistema multimídia e sensores de segurança.



Iluminação


Para controlar a iluminação, vários componentes são usados:

  • cortinas motorizadas;
  • iluminação regulável.

Brilho


A luz nos quartos é dividida em duas zonas. Eu uso lâmpadas dimmable LED ikeev. I usar três módulos de controlo:
Dimmer embutido FIBARO Dimmer 2
Built-in dimmer FIBARO dimmer 2

Relé duplo embutido FIBARO Double Switch 2x1.5kW
Built-in dupla relé FIBARO Duplo Interruptor 2x1.5kW

Relé embutido FIBARO Single Switch 2.5kW
Built-in relé FIBARO único interruptor 2.5kW

dimmer pode escolher automaticamente um método de escurecimento (sobre os bordos anterior e posterior da fase) e calibrar para mínimo e máximo brilho. Como eu tinha um sistema de três fios com antecedência para todas as tomadas, não precisava usar um desvio. As lâmpadas LED não piscam e não acendem quando não há tensão. Para módulos dimerizáveis, uso interruptores de campainha para que você possa ajustar o brilho.


Diagrama de fiação do redutor de três fios

Veja como funciona:

  • - , ( ).
  • - , — . . , .
  • , , . — .
  • , . , 1% .
  • , 15 .
  • , .














Como escrevi anteriormente, todas as janelas do meu apartamento têm vista para uma avenida movimentada com luzes brilhantes. Para resolver o problema da luz brilhante das lâmpadas à noite ou no verão devido ao sol forte, uso persianas motorizadas.

No começo, eu queria comprar kits prontos, mas os preços eram muito altos e não gostei do esquema de cores. Essa idéia teve que ser descartada e montar vários conjuntos por conta própria.

Dos motores de 220 V, a escolha foi pequena: o francês Somfy ou o chinês Dooya. Somfy é mais silencioso, mas também mais caro, então a escolha caiu nos motores Dooya DM35S. Encomendei-os juntamente com os prendedores no "Aliexpress". O motor possui dois interruptores de limite que ajustam a posição máxima e mínima.


Motor com suportes

O próximo problema foi o tubo para cortinas de enrolamento. De acordo com as regras da mensagem, você pode enviar um pacote com no máximo 180 cm e uma das janelas que tenho é superior a 2 metros. No mercado de construção mais próximo, encontrei um tubo de alumínio com o diâmetro desejado - 50 mm. Depois de instalar os motores nos tubos, resta encontrar cortinas opacas. Encomendei o tecido nos meus tamanhos de "Aliexpress" depois de concordar com o vendedor que ele me enviaria apenas o tecido, sem mecanismos.


A cortina montada fixa As

as cortinas são controlados usando o rolo FIBARO do obturador 2 módulo de controle cego Z-onda. Gelosia


módulo de controle

O módulo está embutido no soquete. Para esses módulos, é aconselhável colocar imediatamente soquetes profundos para empurrar o módulo, os fios e o interruptor. O módulo possui configurações suficientes, incluindo resposta a alarmes, cálculo do consumo de energia, calibração com chaves fim de curso.


Interruptor montado As

cortinas são instaladas em cada quarto e na cozinha. Você pode controlar as cortinas pelos comutadores localizados ao lado deles ou usando uma interface ou script.

As cortinas são abaixadas automaticamente quando o crepúsculo se aproxima e as luzes acendem na rua. Eles aumentam de acordo com o horário programado para cada quarto nos dias de semana e fins de semana. Se estiver escuro lá fora, a luz começa a acender suavemente na sala onde a cortina é abaixada.

Os dias úteis e fins de semana são calculados de acordo com o calendário de produção baixado. Você pode reconfigurar a hora no dia seguinte para cada sala usando o comando telegrama. Antes de dobrar as cortinas de acordo com o "despertador", chega uma mensagem de telegrama com a capacidade de confirmar, cancelar e reagendar por 30 minutos. Se a ação não seguir, as cortinas se dobram automaticamente. Em dias claros, as cortinas definem sua posição automaticamente, dependendo da iluminação da sala e da hora do dia, além de verificar se a luz está acesa ou não. Após o recebimento do comando "Férias", todas as cortinas em todos os quartos são abaixadas. Cortina de Gestão Cenário cortina cenário de gestão








Exemplo de trabalho

Sistema multimídia


Eu tenho muitos dispositivos multimídia com vários controles remotos na sala de estar e queria controlá-los com um botão.

Na Internet, encontrei códigos IR separados para ligar e desligar o amplificador, a TV e o divisor HDMI. Usando o script Python pronto_broadlink, eles foram transcodificados para base64 e depois convertidos em uma matriz de bytes e gravados na base de código IR. Portanto, agora não é necessário saber em que estado o dispositivo está agora: você pode simplesmente enviar o sinal novamente.

Como meu amplificador é bastante antigo e não sabe como processar uma imagem 4K via HDMI, comprei um divisor HDMI. Permite dividir o sinal de vídeo e áudio em dois HDMI separados: um deles é conectado ao amplificador e o segundo à TV.


Amplificador e outros dispositivos

No momento, tenho duas fontes de áudio e vídeo: um computador desktop e um servidor. Na interface, você pode ativar todos os dispositivos para reprodução com um botão, apenas em um caso a recepção do sinal será configurada no divisor do servidor e no segundo - no computador. No futuro, está planejado conectar consoles de jogos ao divisor.

Se todos saírem de casa, todos os dispositivos multimídia serão desligados. Cena de controle de mídia




O sistema de presença opera com 6 sensores de movimento e um sensor de abertura da porta frontal. Se, após abrir e fechar a porta, nenhum sensor de ocupação for acionado, uma mensagem será enviada ao Telegram em um determinado intervalo com confirmação. Se nenhuma ação for tomada dentro de dois minutos ou o botão “Ok” for pressionado, o sistema mudará para o modo “Fora de casa”. Se ocorrer um movimento neste momento, o comando é cancelado e a mensagem é excluída.

Tentei usar o BLE, mas, no meu caso, não funcionou muito estável e dependia muito do transmissor do telefone. Detecção automática de presença




Sensores de segurança


Os dispositivos de trava Gidrolock são instalados nos canos de água . Quando o fio de controle está em curto na fase, o atuador fecha a torneira e, quando desconectado, ele abre. Ambos os inversores estão conectados a um relé Philio de contato seco.

Gidrolock
O inversor Gidrolock

Relay é controlado pelos sensores NEO Coolcam Z-Wave localizados nas áreas de possíveis vazamentos. Todos os sensores estão diretamente associados ao relé, de modo que a água é desligada sem a participação do controlador. Para evitar que a torneira fique azeda, a cada duas semanas à noite, ela abre e fecha automaticamente. Diagrama de automação de unidade quando Philio fuma um sensor




a ventilação é desligada para não inflar o fogo. Ao mesmo tempo, uma mensagem é enviada para o bate-papo por telegrama e o sensor chia nojento.

Outros sensores e dispositivos



Autorizar servidor


Este módulo é uma implementação simples de um serviço de autorização.
Existem dois métodos http: um verificará se a solicitação veio da rede interna e, se houver, autorizará o usuário emitindo um token JWT. O token JWT é criptografado usando o RSA 256, a chave privada deve ser registrada no arquivo ao lado. Se a solicitação não for da rede interna, o usuário será redirecionado para a página de login, onde deverá inserir o login e a senha e efetuar login. Como a separação em usuários não é suposta, o arquivo de login e a senha em formato criptografado (SHA 512) estão próximos no arquivo de configuração.

Servidor MQTT


O servidor MQTT é implementado usando o componente aedes .

O servidor sobe em duas portas: interna, para comunicação com o servidor, sem autorização, e externa, que implementa o WebSocket. Todos os clientes front-end se conectam por meio de um soquete e passam a autenticação durante a autorização, assinando o tópico e publicando qualquer mensagem. O token JWT que foi recebido do servidor de autorização entra e é validado usando a chave pública. Para solicitações do servidor, a validação não ocorre.

Nós Node-RED personalizados


Ao escrever a automação, era necessário implementar um nó adicional e dois para finalizar.

Eu tive que modificar o node-red-contrib-openzwave , pois minha solicitação de recebimento foi aceita somente após 7 meses, mas agora você pode usar a biblioteca a partir do npm. O refinamento consistiu em lançar um evento de remoção de nó.



O nó MQTT também foi finalizado. De fato, o principal refinamento é extrair o ID do cliente conectado e gravá-lo novamente quando enviado para a fila. Aqui você pode conviver com a funcionalidade do subfluxo. Também era suposto transferir quaisquer dados para a entrada do nó MQTT, mas não era útil.



Para controlar as cortinas e as torneiras de água, era necessário um nó de programação. As bibliotecas disponíveis na época eram muito ricas em recursos e não suportavam uma implementação simples usando o CRON. Minha implementação é bastante simples: uma programação pode ser feita na entrada de um nó ou definida internamente. É possível cancelar a programação. Sob o capô, a programação do nó é usada .



Frente


Cada componente ativo do apartamento, que acaba com a automação, é um módulo na frente. Cada módulo é independente e contém todos os componentes necessários para renderização. Os módulos são divididos em duas agregações: estática e Z-Wave. Os módulos devem implementar uma interface.

Interface
export interface INode {
    id: string;
    type: NodeTypes;
    name: string;
    addWidget: ComponentClass<AddProps> | StatelessComponent<AddProps>;
    model: INodeModelConstructor;
    service?: INodeServiceConstructor;
    smallComponent: ComponentClass<WidgetProps<any>> | StatelessComponent<WidgetProps<any>>;
    bigComponent: ComponentClass<WidgetProps<any>> | StatelessComponent<WidgetProps<any>>;
    dialogEditComponent: ComponentClass<WidgetProps<any>> | StatelessComponent<WidgetProps<any>>;
    dialogViewComponent: ComponentClass<WidgetProps<any>> | StatelessComponent<WidgetProps<any>>;
}


Exemplo de implementação
class Widget extends BaseWidget implements INode {
    model: INodeModelConstructor = Model;
    manufacturerid: string = '0x0086';
    producttype: string = '0x1a02';
    productid: string = '0x0064';
    addWidget: StatelessComponent<AddProps> = AddWidget;
    service: INodeServiceConstructor = Service;
    smallComponent: StatelessComponent<WidgetProps<Model>> = SmallComponent;
    bigComponent: StatelessComponent<WidgetProps<Model>> = BigComponent;
    dialogEditComponent: ComponentClass<WidgetProps<Model>> = DialogEditComponent;
    dialogViewComponent: ComponentClass<WidgetProps<Model>> = DialogViewComponent;
}
export default Widget;


Para módulos estáticos - por exemplo, condicionadores de ar - você precisa implementar um data warehouse na frente. Essa implementação é inconveniente e, de uma maneira boa, precisa ser alterada para um repositório.Para os

módulos Z-Wave, organizei um repositório comum e acompanhei todas as alterações nele.

O módulo implementa a exibição de duas maneiras:

  • para telas "grandes" (tablet, computador);
  • para telefones.

Dependendo do tipo de dispositivo, o controle por toque ou mouse será selecionado.

O aplicativo é desenvolvido usando o webpack + babel: de acordo com as configurações atuais, ele é montado para as duas últimas versões do Firefox, Chrome e Chrome Android.

Recursos de códigos-fonte


Fontes

Todo o fluxo está desativado, para não gerar erros no log. O nó de configuração do Z-Wave é excluído: é incorreto se não encontrar o controlador Z-Wave e descarta todo o Node-RED. Deve ser algo como isto:


Para que o carregador do calendário de trabalho funcione, é necessário registrar-se em data.gov.ru , obter um token lá e inseri-lo após access_token:


A previsão do tempo é baixada do darksky.net uma vez a cada 15 minutos. Ele também precisa de um token, é necessário registrar e inserir o token após a previsão, nas coordenadas:


Para enviar notificações por telegrama, você precisa obter seu bot, insira-o no nó de configuração do Telegram e escreva o ID do bate-papo quando necessário. No caso do meu Flow, isso é subfluxo: As



fontes são divididas em frente e verso. Na parte de trás encontra-se:

  • Autorizar servidor.
  • Servidor MQTT.
  • Módulos Node-RED personalizados.
  • Fluxos exportados em um arquivo, que pode ser carregado em sua própria conta ou em uma instância separada para testes.
  • Um projeto para o Node-RED, no qual você precisa instalar os módulos e, em seguida, carregar apenas o fluxo exportado (os módulos já estão no projeto).
  • Base de backup Mongo.

Você pode encontrar informações mais detalhadas sobre a instalação no arquivo leia-me no repositório do github .

Planos


Os planos são usar o microfone de um smartphone ou tablet montado na parede para controle de voz. Planejo implantar meu sistema de código aberto em um servidor baseado no CMU Sphinx .

Também planejo montar um módulo para tirar e transmitir leituras de medidores de encanamento e eletricidade.

Também vale a pena considerar o uso de estatísticas acumuladas para vários parâmetros, a fim de otimizar a automação.

Conclusão


No momento, consegui uma automação quase completa da casa para as minhas necessidades - para manter um clima confortável e iluminação na casa. Devido a alguma automação, foi possível reduzir o consumo de eletricidade (cerca de 1.500 ₽ no inverno em comparação com o mesmo equipamento sem automação), tanto pelos elementos de aquecimento quanto pelo lado da iluminação.

Claro, ainda existem bugs nos algoritmos, mas eu os pegarei algum dia, pelo menos estou me movendo nessa direção. O sistema funciona de forma estável, não vejo freios, apesar da velocidade muito baixa no protocolo Z-Wave.

Obviamente, o sistema não se pagará à custa da economia, há mais uma questão de conforto. Essa automação é muito úmida em termos de pequenas coisas, como fechar e abrir cortinas, controlar a luz. Quando você está em um apartamento comum, às vezes esquece de acender ou apagar as luzes e não abre as cortinas.

Raramente ajusto o sistema climático com as mãos, mas às vezes é preciso ligar ou desligar o ar condicionado ou ajustar a temperatura da bateria. Em geral, estou satisfeito com o sistema resultante: permite menos tempo para gastar em quaisquer ajustes. No caso de uma falha do controlador, todas as funcionalidades permanecerão no local (somente a automação cairá). A funcionalidade do fechamento da água também será preservada. Se eu decidir vender o apartamento, removerei facilmente toda a automação. Ou deixe-o no lugar, mas vendendo mais.

All Articles