Quero chamar sua atenção para uma série de artigos sobre os módulos de controle Laurent da KernelChip . Nesta série, mostrarei como integrar esses módulos à sua Smart Home, como aprender a gerenciá-los no popular sistema de automação residencial MajorDoMo , nos esboços do Arduino, no sistema Arduino Mega Server e até mesmo como aplicar esses módulos para uma finalidade completamente inesperada - por ensinando seus filhos a programar em Processing.
Em geral, os módulos que são bastante interessantes por si só podem inesperadamente ser muito úteis nas famílias, se você os abordar com uma certa quantidade de imaginação e criatividade.Por que Laurent?
Como esses módulos trabalham com sucesso no meu sistema Smart Home há muito tempo (mais de três anos) e adquiri alguma experiência no uso deles e tenho algo a dizer sobre eles. E também tenho alguma experiência e código testado e pronto para gerenciar esses módulos, que quero compartilhar com você.E você poderá desenvolver suas soluções de software com base nesse código, será bastante simples, porque eu já fiz a maior parte do trabalho. Além disso, o código será explicado em detalhes, o que certamente contribui para o seu entendimento de como ele funciona, aprendendo a programar e criando sistemas domésticos inteligentes.Módulos em si
Quando escolhi uma solução pronta para gerenciar cargas elétricas por meio da rede, Laurent me subornou com a integridade e simplicidade da solução. Para começar a controlar a rede, ligar e desligar dispositivos e iluminação, quase nada era necessário. Não era necessário aprender a linguagem de programação, não era necessário soldar nada, bastava conectar o módulo à rede local, conectar a carga aos terminais do relé (e não se esqueça de aplicar energia ao próprio módulo) e isso foi tudo. Depois disso, foi possível enviar comandos diretamente do computador (a partir do programa do terminal). O módulo imediatamente começou a obedecer e apagar a luz de acordo com meus comandos. Naquela época, eu não precisava de mais.Posso dizer sobre os próprios módulos que, durante todo o período de operação, não houve falhas e congela, tudo funcionou e funciona "como um relógio", o que, de fato, é necessário a partir desses módulos para funcionar.Design e qualidade de construção
Basta apenas olhar para o módulo para deixar claro que ele foi desenvolvido por uma razão, "se ao menos", mas tentou fazer uma coisa realmente digna. Eu também não tenho queixas sobre a qualidade da construção, tudo é feito de maneira ordenada e como deveria ser: sem peças tortas, manchas de solda ou qualquer coisa assim, tudo é claro e limpo. Em geral, a qualidade da construção não difere dos componentes do computador "de marca" e do Arduino "de fábrica".A única coisa que eu faria se eu mesmo lançasse esses módulos era instalar terminais multicoloridos para conectar os fios em vez de terminais de uma cor, pelo menos destacar os terminais de conexão de energia, mas é assim, uma pequena escolha de nitidez (tudo, é claro, está bem assinado).Qual é o primeiro artigo da série?
Todas as informações são divididas em três artigos logicamente finalizados. O primeiro artigo focará na integração dos módulos Laurent com o MajorDoMo, uma popular plataforma de automação residencial de código aberto. Exemplos específicos e código PHP serão fornecidos.O segundo artigo é sobre integração com o ecossistema do Arduino. Você pode gerenciar os módulos de seus esboços individuais ou integrar o Laurent ao Mega Server do Arduino (que também é baseado no código do Arduino) e gerenciar o Laurents a partir de uma interface conveniente ou automaticamente, de acordo com o programa. Soluções prontas e código testado também serão fornecidos.E na terceira - sobre o gerenciamento de módulos Laurent a partir de esboços sobre processamento. Ou seja, diretamente da área de trabalho do seu computador doméstico. O mesmo artigo descreverá como aumentar o interesse das crianças em aprender programação e qual o papel que esses módulos podem desempenhar nesse assunto.A série é dedicada à integração dos módulos Laurent aos sistemas de automação residencial e não considera a arquitetura e a operação dos próprios módulos. Isso foi descrito em outros artigos com os quais você pode ler 1 , 2 , 3 e será discutido mais adiante. Aqui nos concentramos apenas na integração.No processo de redação dos artigos, foi utilizado o módulo Laurent com firmware La01 e a versão da interface da Web LW1.0, ou seja, o próprio módulo de “combate” que trabalha há três anos. Nas novas versões dos módulos, os detalhes de implementação podem diferir um pouco, mas a compatibilidade com as equipes de controle é preservada; portanto, tudo o que foi dito aqui também é válido para modificações mais recentes.Como o gerenciamento de módulos funciona
Todas as trocas de informações com os módulos são realizadas na rede e, para começar a trabalhar com eles, é necessário estabelecer uma conexão TCP / IP na porta 2424. Uma vez estabelecida a conexão, você pode enviar comandos de texto (os chamados comandos KE) que controlam o módulo. O site do KernelChip possui documentação detalhada, incluindo uma descrição acessível dos comandos KE.O KernelChip cuidou dos usuários e forneceu aos seus módulos uma interface da web conveniente, mas esse é um "controle manual", e a conveniência, o valor e a utilidade da solução aumentarão em um pedido se aprendermos a gerenciar o módulo em nossa Smart Home.
A interface da web é protegida por senha por padrão e, para visualizar o conteúdo da página, é necessário inserir o nome de usuário “admin” e a senha “Laurent”.Mordomo
O sistema MajorDoMo é bastante popular e não vou me deter aqui em detalhes. Supõe-se que você já instalou este sistema e trabalhou com ele por algum tempo. Para aqueles que não estão atualizados, explicarei que essa é uma plataforma de automação residencial aberta que roda em Windows e Linux e é baseada em um servidor da web e é um tipo de CMS (sistema de gerenciamento de conteúdo) especializado com amplos recursos e "aguçado" para automação residencial.As possibilidades do MajorDoMo são verdadeiramente infinitas e o gerenciamento dos módulos Laurent é apenas um dos talentos deste sistema.Detalhes técnicos
MajorDoMo incorpora o arquivo laurent.class.php, localizado no diretório\htdocs\lib\
Código completo laurent.class.php<?
function laurent_command($host, $command, $password='Laurent') {
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if ($socket === false) {
echo «socket_create() failed: reason: ». socket_strerror(socket_last_error()). "\n";
return 0;
}
$result = socket_connect($socket, $host, 2424);
if ($result === false) {
echo «socket_connect( $socket, $host, 2424) failed.\nReason: ($result) ». socket_strerror(socket_last_error($socket)). "\n";
return 0;
}
$in='$KE'."\r\n";
socket_write($socket, $in, strlen($in));
$res='';
while ($out = socket_read($socket, 2048, PHP_NORMAL_READ)) {
$res.=$out;
if (is_integer(strpos($out, "\n"))) {
break;
}
}
$in='$KE,PSW,SET,'.$password."\r\n";
socket_write($socket, $in, strlen($in));
$res='';
while ($out = socket_read($socket, 2048, PHP_NORMAL_READ)) {
$res.=$out;
if (is_integer(strpos($out, "\n"))) {
break;
}
}
$in=$command."\r\n";
socket_write($socket, $in, strlen($in));
$res='';
while ($out = socket_read($socket, 2048, PHP_NORMAL_READ)) {
$res.=$out;
if (is_integer(strpos($out, "\n"))) {
break;
}
}
socket_close($socket);
return trim($res);
}
function laurent_getStat($host, $password='Laurent') {
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if ($socket === false) {
echo «socket_create() failed: reason: ». socket_strerror(socket_last_error()). "\n";
return 0;
}
$result = socket_connect($socket, $host, 2424);
if ($result === false) {
echo «socket_connect( $socket, $host, 2424) failed.\nReason: ($result) ». socket_strerror(socket_last_error($socket)). "\n";
return 0;
}
$in='$KE'."\r\n";
socket_write($socket, $in, strlen($in));
$res='';
while ($out = socket_read($socket, 2048, PHP_NORMAL_READ)) {
$res.=$out;
if (is_integer(strpos($out, "\n"))) {
break;
}
}
$in='$KE,PSW,SET,'.$password."\r\n";
socket_write($socket, $in, strlen($in));
$res='';
while ($out = socket_read($socket, 2048, PHP_NORMAL_READ)) {
$res.=$out;
if (is_integer(strpos($out, "\n"))) {
break;
}
}
$command='$KE,DAT,ON';
$in=$command."\r\n";
socket_write($socket, $in, strlen($in));
$res='';
$started=0;
while ($out = socket_read($socket, 2048, PHP_NORMAL_READ)) {
$res.=$out;
if (is_integer(strpos($out, "#TIME,"))) {
if (!$started) {
$started=1;
} else {
break;
}
}
}
$command='$KE,DAT,OFF';
$in=$command."\r\n";
socket_write($socket, $in, strlen($in));
sleep(1);
socket_write($socket, $in, strlen($in));
socket_write($socket, $in, strlen($in));
socket_close($socket);
return trim($res);
}
?>
e contém tudo o que você precisa para trabalhar com os módulos Laurent. Este arquivo contém funções na linguagem de programação PHP e, provavelmente, na forma pronta ou com alterações mínimas, pode ser transferido para qualquer sistema usando essa linguagem de programação. Portanto, se você tiver um projeto do Smart Home em uma plataforma diferente, poderá tentar integrar o Laurent ao seu sistema usando esse arquivo.A principal função usada para controlar o módulo élaurent_command('< >', '<>', '< >');
por exemplo,$result = laurent_command('192.168.2.19', '$KE,INF', 'Laurent');
, onde '192.168.2.19' é o endereço IP do módulo, '$ KE, INF' é o próprio comando, 'Laurent' é a senha (padrão).O resultado do trabalho da função entra na variável $ result, ou seja, a resposta do módulo, que você pode analisar e interpretar usando ferramentas PHP padrão. A senha é especificada como é por padrão. Caso você tenha alterado a senha de acesso ao seu módulo, será necessário substituí-la por uma nova e na chamada de função.Tudo deve ficar claro com a equipe; você pode pegar qualquer comando do diretório e gerenciar o módulo como desejar. O endereço IP também não deve causar problemas. Basta especificar o endereço IP que o seu módulo Laurent realmente possui.Você pode encerrar a teoria com isso e agora mostrarei um exemplo prático de como fazer com que a luz (ou um dispositivo) controle diretamente no menu MajorDoMo.Exemplo prático
Como exemplo prático, vejamos a criação de dois botões "Ligar" e "Desligar" no menu principal do sistema MajorDoMo. Com esses botões, você pode ligar ou desligar a luz ou qualquer outro aparelho elétrico (basta lembrar que os relés instalados no módulo não são capazes de controlar diretamente uma carga poderosa como um fogão elétrico ou um aquecedor de água).Então, criamos o botão "Ativar", para isso, vamos ao painel de administração do MajorDoMo e inserimos o nome de usuário e a senha (admin / admin por padrão) e clicamos em "OBJETOS / Menu de Controle" e, em seguida, no grande botão verde "Adicionar uma nova seção".
Em seguida, encontramos a lista suspensa “Tipo” e selecionamos “Botão” de toda a variedade de tipos apresentados e clique em “Salvar”.
Em seguida, selecione "Item do menu principal" é o local onde nosso botão "engancha". Eu tenho Laurent, e você pode ter qualquer item de menu conveniente. Por padrão, existe "ROOT", o que significa que o botão ficará visível imediatamente, sem clicar em nenhum item do menu.No campo de entrada "Título", escreva o que deseja que seja escrito no botão. E, finalmente, no campo Código, escreva o código da função laurent_command já familiar para nós:laurent_command('192.168.2.19', '$KE,REL,2,1', 'Laurent');
Aqui é o mesmo que no exemplo teórico, apenas a variável $ result está ausente (não precisamos dela) e o comando é substituído por '$ KE, REL, 2,1', o que significa ativar o relé nº 2.Fazemos o mesmo no botão "Desligar", mas não esqueça de alterar o nome do botão e, em vez de '$ KE, REL, 2.1' escreva '$ KE, REL, 2.0', o que significa desativar o relé nº 2:laurent_command('192.168.2.19', '$KE,REL,2,0', 'Laurent');
Isso é tudo. Recarregamos a página com a interface MajorDoMo. Aparecem dois novos botões que ligam e apagam as luzes (ou o appliance) diretamente da interface MajorDoMo, de forma bonita e quase sem demora. O que queríamos alcançar.Controle automático
Agora vamos tentar controlar o módulo automaticamente, sem intervenção humana. Agora você verá que é ainda mais fácil do que usar os botões para controlar o módulo.
Encontramos no menu principal do painel de administração do MajorDoMo o item "Objetos", clique nele e, em seguida, encontramos o objeto "ClockChime" e seu método "onNewMinute". Nós precisamos dele. Para quem não conhece, esse é o método "central" MajorDoMo, chamado a cada minuto e muito popular. É nesse método que existem muitas funções e chamadas de script que fornecem a funcionalidade do usuário do sistema.
E tudo o que precisamos fazer é adicionar nosso código a esse método. Por exemplo, considere esta situação. Seu módulo Laurent controla a iluminação noturna no pátio da sua casa. E você, por exemplo, deseja que a luz acenda às 21h00 e apague às 7h30 da manhã. Nada é mais simples, eis o código que você deve adicionar ao método onNewMinute:if (timeIs('21:00')) {
laurent_command('192.168.2.19', '$KE,REL,2,1', 'Laurent');
}
if (timeIs('7:30')) {
laurent_command('192.168.2.19', '$KE,REL,2,0', 'Laurent');
}
E é isso! Concordo, não é nada difícil. Este é apenas um exemplo, a lógica do trabalho pode ser absolutamente toda e muito sofisticada. E o talento dos módulos Laurent não termina com a ativação e desativação de cargas, sua funcionalidade é muito mais ampla, mas esse não é o tópico deste artigo; aqui, consideramos apenas os problemas de integração com exemplos simples.Recebendo e emitindo dados do módulo
E o último exemplo será como obter e exibir informações recebidas do módulo Laurent na página da web do MajorDoMo.O MajorDoMo é um sistema orientado a objetos e todo o trabalho ocorre através da criação de objetos e do uso de seus dados (variáveis) e métodos (código do programa). Um pouco difícil? Na verdade, está tudo bem e agora você verá por si mesmo.
Assim, por exemplo, usaremos o objeto "ThisComputer" já existente e adicionaremos a ele uma nova propriedade "test". Para fazer isso, clique no item de menu "Objetos" que já nos é familiar na área administrativa do MajorDoMo, localize o objeto "ThisComputer" e clique no item "Propriedades", role para baixo e localize o campo de entrada "Adicionar nova propriedade", insira "teste" e clique em "Atualizar" (deixe o valor em branco).
Com isso, as operações preparatórias podem ser consideradas concluídas, adicionamos uma nova propriedade "test" ao objeto "ThisComputer", que usaremos em nossos experimentos.Agora, nossa tarefa é solicitar as informações necessárias do módulo Laurent e colocá-las na propriedade (variável) do "teste" do objeto "ThisComputer". Como fazer isso? Muito simples.Adicione este código ao método onNewMinute que já sabemos:$result = laurent_command('192.168.2.19', '$KE,INF', 'Laurent');
setGlobal('ThisComputer.test', $result);
E a cada minuto, o MajorDoMo solicita ao módulo as informações necessárias e atualiza a variável "test", que podemos usar conforme necessário. Por exemplo, exibir em uma página da web. Para fazer isso, colocamos o seguinte código em qualquer lugar da página que precisamos:%ThisComputer.test%
Este é o chamado. uma macro que, ao carregar uma página, substitui o valor da variável em vez de si mesmo, armazenada na propriedade "test" do objeto "ThisComputer". E, como resultado, você vê as informações transmitidas pelo módulo Laurent em resposta à sua solicitação na página da web.Como adicionar uma macro à página? Vamos ao menu do administrador e selecionamos o item "Páginas iniciais" e selecionamos qualquer página que você deseja ou cria uma nova usando o grande botão verde "Nova página". E adicione a macro a qualquer local desejado na página.Subtotal
Então é só isso. Armado com as informações deste artigo, você pode se sentir um verdadeiro mestre dos Laurents e integrar esses módulos ao seu sistema Smart Home. E no próximo artigo da série, você aprenderá como gerenciar módulos a partir de seus esboços no Arduino e no sistema Arduino Mega Server .