M贸dulos Laurent y Smart Home (Parte 1). Mayordomo

Quiero llamar su atenci贸n sobre una serie de art铆culos sobre los m贸dulos de control Laurent de KernelChip . En esta serie, le contar茅 sobre c贸mo integrar estos m贸dulos en su Smart Home, c贸mo aprender a administrarlos desde el popular sistema de automatizaci贸n del hogar MajorDoMo , desde bocetos de Arduino, desde el sistema Arduino Mega Server e incluso c贸mo usar estos m贸dulos para un prop贸sito completamente inesperado, para ense帽ando a tus hijos a programar en Processing.

imagen

En general, los m贸dulos que son bastante interesantes en s铆 mismos pueden ser inesperadamente muy 煤tiles en los hogares si los aborda con cierta imaginaci贸n y creatividad.


驴Por qu茅 Laurent?


Debido a que estos m贸dulos han funcionado con 茅xito en mi sistema Smart Home durante mucho tiempo (m谩s de tres a帽os) y he adquirido cierta experiencia en su uso y tengo algo que contar sobre ellos. Y tambi茅n tengo algo de experiencia y un c贸digo probado y listo para administrar estos m贸dulos, que quiero compartir con ustedes.

Y podr谩 desarrollar sus soluciones de software basadas en este c贸digo, ser谩 bastante simple, porque ya he hecho la mayor parte del trabajo. Adem谩s, el c贸digo se explicar谩 en detalle, lo que sin duda contribuye a su comprensi贸n de c贸mo funciona, aprender a programar y construir sistemas dom茅sticos inteligentes.

M贸dulos en s铆


Cuando eleg铆 una soluci贸n ya preparada para administrar las cargas el茅ctricas a trav茅s de la red, Laurent me soborn贸 con la integridad y simplicidad de la soluci贸n. Para comenzar a controlar los dispositivos de encendido y apagado de la red y la iluminaci贸n, no se necesitaba casi nada. No fue necesario aprender el lenguaje de programaci贸n, no fue necesario soldar nada, fue suficiente para conectar el m贸dulo a la red local, conectar la carga a los terminales del rel茅 (y no olvidar aplicar energ铆a al m贸dulo en s铆) y eso fue todo. Despu茅s de eso, fue posible enviar comandos directamente desde la computadora (desde el programa del terminal). El m贸dulo inmediatamente comenz贸 a encender y apagar obedientemente la luz de acuerdo con mis 贸rdenes. En ese momento, no necesitaba m谩s.

Puedo decir acerca de los m贸dulos en s铆 mismos que durante todo el per铆odo de operaci贸n no hubo fallas ni bloqueos, todo funcion贸 y funciona "como un reloj", que, de hecho, se requiere de dichos m贸dulos para que simplemente funcione.

Dise帽o y calidad de construcci贸n.


Basta con mirar el m贸dulo para dejar en claro que fue desarrollado por una raz贸n, "si solo", pero que intent贸 hacer algo realmente valioso. Tampoco tengo quejas sobre la calidad de construcci贸n, todo se hace con cuidado y como debe ser: sin partes torcidas, manchas de soldadura o algo as铆, todo est谩 claro y ordenado. En general, la calidad de construcci贸n no difiere de los componentes inform谩ticos "de marca" y del Arduino "de f谩brica".

Lo 煤nico que har铆a si lanzara estos m贸dulos yo mismo ser铆a instalar terminales multicolores en lugar de terminales de un solo color para conectar los cables, al menos resaltar los terminales de conexi贸n de alimentaci贸n, pero esto es as铆, una peque帽a selecci贸n (todo, por supuesto, est谩 perfectamente firmado).

驴De qu茅 trata el primer art铆culo de la serie?


Toda la informaci贸n se divide en tres art铆culos terminados l贸gicamente. El primer art铆culo se centrar谩 en la integraci贸n de los m贸dulos Laurent con MajorDoMo, una popular plataforma de automatizaci贸n del hogar de c贸digo abierto. Se dar谩n ejemplos espec铆ficos y c贸digo PHP.

El segundo art铆culo trata sobre la integraci贸n con el ecosistema Arduino. Puede administrar los m贸dulos desde sus bocetos individuales o integrar Laurent con el Arduino Mega Server (que tambi茅n se basa en el c贸digo Arduino) y administrar los Laurents desde una interfaz conveniente o autom谩tica, de acuerdo con el programa. Tambi茅n se dar谩n soluciones listas para usar y c贸digo probado.

Y en el tercero, sobre la gesti贸n de m贸dulos Laurent a partir de bocetos en Processing. Es decir, directamente desde el escritorio de la computadora de su hogar. El mismo art铆culo describir谩 c贸mo aumentar el inter茅s de los ni帽os en la programaci贸n de aprendizaje y qu茅 papel pueden desempe帽ar estos m贸dulos en este asunto.

La serie est谩 dedicada a la integraci贸n de los m贸dulos Laurent con los sistemas de automatizaci贸n del hogar y no considera la arquitectura y el funcionamiento de los m贸dulos en s铆. Esto se describi贸 en otros art铆culos con los que puede leer 1 , 2 , 3 y se discutir谩 m谩s adelante. Aqu铆 nos centramos solo en la integraci贸n.

En el proceso de redacci贸n de los art铆culos, se utiliz贸 el m贸dulo Laurent con firmware La01 y la versi贸n de interfaz web LW1.0, es decir, el m贸dulo de "combate" que ha estado funcionando durante tres a帽os. En las nuevas versiones de m贸dulos, los detalles de implementaci贸n pueden diferir ligeramente, pero se preserva la compatibilidad con los equipos de control, por lo que todo lo dicho aqu铆 tambi茅n es cierto para las modificaciones m谩s recientes.

C贸mo funciona la gesti贸n de m贸dulos


Todo el intercambio de informaci贸n con los m贸dulos se realiza a trav茅s de la red y para comenzar a trabajar con ellos, debe establecer una conexi贸n TCP / IP en el puerto 2424. Una vez establecida la conexi贸n, puede enviar comandos de texto (los llamados comandos KE) que controlan el m贸dulo. El sitio web KernelChip tiene documentaci贸n detallada, que incluye una descripci贸n accesible de los comandos KE.

KernelChip se ocup贸 de los usuarios y proporcion贸 a sus m贸dulos una interfaz web conveniente, pero esto es un "control manual", y la conveniencia, el valor y la utilidad de la soluci贸n aumentar谩n en un pedido si aprendemos a administrar el m贸dulo desde nuestra casa inteligente.

imagen

La interfaz web est谩 protegida por contrase帽a de forma predeterminada y para ver el contenido de la p谩gina web debe ingresar el nombre de usuario "admin" y la contrase帽a "Laurent".

Mayordomo


El sistema MajorDoMo es bastante popular y no me detendr茅 aqu铆 en detalle. Se supone que ya instal贸 este sistema y trabaj贸 con 茅l durante alg煤n tiempo. Para aquellos que no est谩n actualizados, les explicar茅 que esta es una plataforma abierta de automatizaci贸n del hogar que se ejecuta en Windows y Linux y se basa en un servidor web y es una especie de CMS (sistema de gesti贸n de contenido) especializado con amplias capacidades y "perfeccionado" para automatizaci贸n del hogar.

Las posibilidades de MajorDoMo son realmente infinitas y administrar m贸dulos Laurent es solo uno de los talentos de este sistema.

Detalles t茅cnicos


MajorDoMo incorpora el archivo laurent.class.php, que se encuentra en el directorio

\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);

}

?>


y contiene todo lo que necesita para trabajar con los m贸dulos Laurent. Este archivo contiene funciones en el lenguaje de programaci贸n PHP y, probablemente, en forma terminada o con modificaciones m铆nimas, puede transferirse a cualquier sistema que use este lenguaje de programaci贸n. Por lo tanto, si tiene un proyecto Smart Home en una plataforma diferente, puede intentar integrar Laurent con su sistema utilizando este archivo.

La funci贸n principal utilizada para controlar el m贸dulo es

laurent_command('< >', '<>', '<  >');


p.ej,

$result = laurent_command('192.168.2.19', '$KE,INF', 'Laurent');


, donde '192.168.2.19' es la direcci贸n IP del m贸dulo, '$ KE, INF' es el comando en s铆, 'Laurent' es la contrase帽a (predeterminada).

El resultado del trabajo de la funci贸n entra en la variable $ resultado, es decir, la respuesta del m贸dulo, que puede analizar e interpretar utilizando herramientas de lenguaje PHP est谩ndar. La contrase帽a se especifica como est谩 por defecto. En caso de que haya cambiado la contrase帽a para acceder a su m贸dulo, deber谩 reemplazarla por una nueva y en la llamada a la funci贸n.

Todo debe estar claro con el equipo, puede tomar cualquier comando del directorio y administrar el m贸dulo como desee. La direcci贸n IP tampoco deber铆a causar ning煤n problema. Simplemente especifique la direcci贸n IP que tiene realmente su m贸dulo Laurent.

Puede terminar la teor铆a con esto y ahora le mostrar茅 con un ejemplo pr谩ctico c贸mo hacer que la luz (o un dispositivo) controle directamente desde el men煤 MajorDoMo.

Ejemplo pr谩ctico


Como ejemplo pr谩ctico, veamos la creaci贸n de dos botones "Activar" y "Desactivar" en el men煤 principal del sistema MajorDoMo. Con estos botones puede encender o apagar la luz o cualquier aparato el茅ctrico (aqu铆 solo debe recordar que los rel茅s instalados en el m贸dulo no pueden controlar directamente una carga potente como una estufa el茅ctrica o un calentador de agua).

Entonces, creamos el bot贸n "Activar", para esto vamos al panel de administraci贸n de MajorDoMo e ingresamos el nombre de usuario y la contrase帽a (admin / admin por defecto) y hacemos clic en "OBJETOS / Men煤 de control" y luego en el gran bot贸n verde "Agregar una nueva secci贸n".

imagen

A continuaci贸n, encontramos la lista desplegable "Tipo" y seleccionamos "Bot贸n" de toda la variedad de tipos presentados y hacemos clic en "Guardar".

imagen

A continuaci贸n, seleccione "Elemento del men煤 principal" es el lugar donde nuestro bot贸n "engancha". Lo tengo Laurent, y puedes tener cualquier art铆culo de men煤 conveniente. Por defecto, hay "ROOT", lo que significa que el bot贸n ser谩 visible de inmediato, sin hacer clic en ning煤n elemento del men煤.

En el campo de entrada "T铆tulo" escriba lo que desea que se escriba en el bot贸n. Y, por 煤ltimo, en el campo C贸digo, escriba el c贸digo de funci贸n laurent_command que ya nos es familiar:

laurent_command('192.168.2.19', '$KE,REL,2,1', 'Laurent');


Aqu铆 es lo mismo que en el ejemplo te贸rico, solo falta la variable $ result (no la necesitamos) y el comando se reemplaza por '$ KE, REL, 2,1', lo que significa habilitar el rel茅 No. 2.

Hacemos lo mismo con el bot贸n "Apagar", simplemente no olvide cambiar el nombre del bot贸n y en lugar de '$ KE, REL, 2.1' escriba '$ KE, REL, 2.0', lo que significa apagar el rel茅 No. 2:

laurent_command('192.168.2.19', '$KE,REL,2,0', 'Laurent');


Eso es todo. Recargamos la p谩gina con la interfaz MajorDoMo, aparecen dos botones nuevos que encienden y apagan las luces (o el dispositivo) directamente desde la interfaz MajorDoMo de manera hermosa y casi sin demora. Lo que quer铆amos lograr.

Control autom谩tico


Ahora intentemos controlar el m贸dulo autom谩ticamente, sin intervenci贸n humana. Ahora ver谩 que es a煤n m谩s f谩cil que usar los botones para controlar el m贸dulo.

imagen

Encontramos en el men煤 principal del panel de administraci贸n de MajorDoMo el elemento "Objetos", hacemos clic en 茅l, luego encontramos el objeto "ClockChime" y su m茅todo "onNewMinute". Lo necesitamos a el. Para aquellos que no est谩n al tanto, este es el m茅todo "central" MajorDoMo, que se llama cada minuto y es muy popular. Es en este m茅todo que hay muchas funciones y llamadas de script que proporcionan la funcionalidad del sistema al usuario.

imagen

Y todo lo que necesitamos hacer es agregar nuestro c贸digo a este m茅todo. Por ejemplo, considere esta situaci贸n. Su m贸dulo Laurent controla la iluminaci贸n nocturna en el patio de su hogar. Y usted, por ejemplo, quiere que la luz se encienda a las 21.00 y que se apague a las 7.30 de la ma帽ana. Nada es m谩s simple, aqu铆 est谩 el c贸digo que debe agregar al 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');
}


隆Y eso es! Debes admitir que no es dif铆cil en absoluto. Esto es solo un ejemplo, la l贸gica del trabajo puede ser absolutamente cualquiera y muy sofisticada. Y el talento de los m贸dulos Laurent no termina con el encendido y apagado de las cargas, su funcionalidad es mucho m谩s amplia, pero este no es el tema de este art铆culo, aqu铆 solo consideramos los problemas de integraci贸n con ejemplos simples.

Recepci贸n y salida de datos del m贸dulo


Y el 煤ltimo ejemplo ser谩 c贸mo obtener y mostrar la informaci贸n recibida del m贸dulo Laurent en la p谩gina web de MajorDoMo.

MajorDoMo es un sistema orientado a objetos y todo el trabajo se lleva a cabo a trav茅s de la creaci贸n de objetos y el uso de sus datos (variables) y m茅todos (c贸digo de programa). Un poco dificil? En realidad, est谩 bien y ahora lo ver谩s por ti mismo.

imagen

Entonces, por ejemplo, usaremos el objeto ya existente "ThisComputer" y le agregaremos una nueva propiedad "test". Para hacer esto, haga clic en el elemento del men煤 "Objetos" que ya nos es familiar en el 谩rea de administraci贸n de MajorDoMo, busque el objeto "ThisComputer" y haga clic en el elemento "Propiedades", despl谩cese hasta la parte inferior y busque el campo de entrada "Agregar nueva propiedad", ingrese "prueba" y haga clic "Actualizar" (deje el valor vac铆o).

imagen

En esto, las operaciones preparatorias pueden considerarse completadas, agregamos una nueva "prueba" de propiedad al objeto "ThisComputer", que utilizaremos en nuestros experimentos.

Ahora nuestra tarea es solicitar la informaci贸n necesaria del m贸dulo Laurent y ponerla en la propiedad (variable) de la "prueba" del objeto "ThisComputer". 驴Como hacer esto? Muy simple.

Agregue este c贸digo al m茅todo onNewMinute que ya conocemos:

$result = laurent_command('192.168.2.19', '$KE,INF', 'Laurent');
setGlobal('ThisComputer.test', $result); 


Y cada minuto MajorDoMo le pedir谩 al m贸dulo la informaci贸n necesaria y actualizar谩 la variable "prueba", que podemos usar cuando lo necesitemos. Por ejemplo, mostrar en una p谩gina web. Para hacer esto, colocamos el siguiente c贸digo en cualquier lugar de la p谩gina que necesitemos:

%ThisComputer.test%


Este es el llamado. una macro que, al cargar una p谩gina, sustituye el valor de la variable en lugar de s铆 misma, almacenada en la propiedad "prueba" del objeto "ThisComputer". Y como resultado, ver谩 la informaci贸n transmitida por el m贸dulo Laurent en respuesta a su solicitud en la p谩gina web.

驴C贸mo agregar una macro a la p谩gina? Vamos al men煤 de administraci贸n y seleccionamos el elemento "P谩ginas de inicio" y seleccionamos cualquier p谩gina que desee o creamos una nueva usando el bot贸n verde grande "Nueva p谩gina". Y agregue la macro a cualquier ubicaci贸n deseada en la p谩gina.

Total parcial


Entonces eso es todo. Armado con la informaci贸n de este art铆culo, puede sentirse un verdadero maestro de los Laurents e integrar estos m贸dulos en su sistema Smart Home. Y en el pr贸ximo art铆culo de la serie, aprender谩 a administrar m贸dulos a partir de sus bocetos en Arduino y del sistema Arduino Mega Server .

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


All Articles