{"id":4497,"date":"2020-11-15T18:54:26","date_gmt":"2020-11-15T18:54:26","guid":{"rendered":"https:\/\/robertjwallace.com\/?p=4497"},"modified":"2020-11-22T20:52:08","modified_gmt":"2020-11-22T20:52:08","slug":"home-automation-part-2","status":"publish","type":"post","link":"https:\/\/robertjwallace.com\/es\/home-automation-part-2\/","title":{"rendered":"Dom\u00f3tica, parte 2"},"content":{"rendered":"<p>Esta es una actualizaci\u00f3n de <a href=\"https:\/\/robertjwallace.com\/es\/home-automation-smart-home\/\">https:\/\/robertjwallace.com\/home-automation-smart-home<\/a>\/.<\/p>\n\n\n\n<p>Finalmente estoy empezando a cambiar del sistema X10 a uno m\u00e1s moderno, a pesar del coste. Mi sistema actual es un h\u00edbrido entre Philips Hue y X10. Para integrar el X10 con Alexa, uso... <a href=\"https:\/\/www.x10.com\/cm19a.html\" target=\"_blank\" rel=\"noreferrer noopener\">Transceptor X10 CM19<\/a> con el <a href=\"https:\/\/github.com\/bjonica\/mochad\" target=\"_blank\" rel=\"noreferrer noopener\">controlador mochad para Linux<\/a>, y <a href=\"https:\/\/github.com\/bwssytems\/ha-bridge\" target=\"_blank\" rel=\"noreferrer noopener\">puente ha<\/a>Un emulador de Philips Hue. Esto me permiti\u00f3 usar Alexa para controlar el sistema X10.<\/p>\n\n\n\n<!--more-->\n\n\n\n<p>Luego a\u00f1ad\u00ed un puente Hue &quot;de verdad&quot;. \u00bfPor qu\u00e9 el Hue? Bueno, a pesar del precio de las bombillas Hue, decid\u00ed que era uno de los mejores productos y un d\u00eda encontr\u00e9 el puente en oferta.  <\/p>\n\n\n\n<p>Pero hab\u00eda un par de factores que todav\u00eda me atan al sistema X10:<\/p>\n\n\n\n<ol class=\"wp-block-list\"><li>Sensores de movimiento. Uso los sensores de movimiento X10 para encender las luces al entrar en una habitaci\u00f3n. Estos cuestan aproximadamente $19.00, mientras que los sensores Hue cuestan $40.00. Los sensores X10 tienen retardos variables para el apagado autom\u00e1tico, lo cual tambi\u00e9n me gusta.<\/li><li>Algunas de mis luminarias de techo tienen varias bombillas, lo que hace que sea bastante costoso utilizarlas con las bombillas Hue.<\/li><li>Algunas de mis luces de techo est\u00e1n completamente cerradas, lo que las hace susceptibles al sobrecalentamiento de las bombillas LED.<\/li><\/ol>\n\n\n\n<p>Todo iba bien hasta que un d\u00eda Alexa dej\u00f3 de detectar y controlar los dispositivos del ha-bridge. Creo que probablemente se deba a una actualizaci\u00f3n de software. Buscando en internet no encontr\u00e9 ninguna soluci\u00f3n. Y como ya me hab\u00eda acostumbrado al control por voz, decid\u00ed que era hora de convertir m\u00e1s habitaciones a Hue.<\/p>\n\n\n\n<p>El principal problema que quer\u00eda solucionar era que los sensores de movimiento X10 funcionaran con las luces Hue. Por suerte, hab\u00eda una soluci\u00f3n.<\/p>\n\n\n\n<p>El CM19A y el mochad usan el puerto 1099. Si observa el tr\u00e1fico del puerto, puede ver los comandos inal\u00e1mbricos X10 transmitidos y recibidos usando el comando &quot;nc&quot; de Linux:<\/p>\n\n\n\n<p class=\"has-white-color has-black-background-color has-text-color has-background\">host local de Carolina del Norte 1099<br>15\/11 07:53:20 Tx RF HouseUnit: M15 Funci\u00f3n: Activada<br>15\/11 07:53:22 Comando de c\u00e1mara RF desconocido<br>15\/11 07:53:22 5D 14 27 D8 80<br>15\/11 07:53:22 Rx RF HouseUnit: M15 Funci\u00f3n: Activada<br>15\/11 07:53:22 Tx RF HouseUnit: M15 Funci\u00f3n: Apagado<br>15\/11 07:53:25 Rx RF HouseUnit: M16 Func: Apagado<br>15\/11 07:53:26 Tx RF HouseUnit: M12 Funci\u00f3n: Activada<\/p>\n\n\n\n<p>Los dispositivos Philips Hue se pueden encender mediante un comando de protocolo HTTP que se puede enviar al puente mediante el comando \u201ccurl\u201d de Linux:<\/p>\n\n\n\n<p class=\"has-white-color has-black-background-color has-text-color has-background\">curl \u2013solicitud PUT \u2013datos &#039;{\u201con\u201d:true}&#039; http:\/\/192.168.254.26\/api\/$apikey\/lights\/$unit\/state<\/p>\n\n\n\n<p>Entonces todo lo que tuve que hacer fue escribir un programa corto con Perl para monitorear el puerto y cuando el programa vio el comando X10 correcto, que era un sensor de movimiento, dispar\u00f3 el comando &quot;curl&quot;.<\/p>\n\n\n\n<p>Decid\u00ed usar la tuber\u00eda de Linux para ingresar los datos \u201cnc\u201d al programa Perl, por lo que el comando para comenzar a monitorear el puerto en segundo plano es:<\/p>\n\n\n\n<p class=\"has-white-color has-black-background-color has-text-color has-background\">nc localhost 1099 | perl motion.pl &amp;<\/p>\n\n\n\n<p>El programa Perl solo controla los sensores X10 que se utilizan para controlar los dispositivos Hue. Los dem\u00e1s sensores X10 siguen funcionando con normalidad.<\/p>\n\n\n\n<p>Una vez configurado todo, Motion.pl monitorea el tr\u00e1fico en el puerto 1099 y, al detectar un comando X10 v\u00e1lido, verifica si corresponde a un sensor que controla una luz Hue. De ser as\u00ed, motion.pl realiza una llamada de sistema a un script de Bash y, a continuaci\u00f3n, llama a huecmd.pl para encender o apagar la luz Hue.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Motion.pl<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>#!\/usr\/bin\/perl -w usar estricto; usar JSON; usar HTTP::Request::Common; usar LWP; # apikey para comunicarse con el puente hue my $apikey = &quot;********************************&quot;; sub gethuenames{ # enviar solicitud a hue para devolver json con datos de luz my $agent = LWP::UserAgent-&gt;new; my $url = &quot;http:\/\/192.168.999.26\/api\/&quot;.$apikey.&quot;\/lights&quot;; my $response = $agent-&gt;get($url); my $lights = decode_json($response-&gt;content); my %obj; mientras ((mi $key, mi $ele) = cada %$lights) { mi $name = %$ele{&#039;name&#039;}; $obj{&quot;$name&quot;} = &quot;$key&quot;; } devolver %obj; } # # obtiene la lista de nombres y n\u00fameros de dispositivos Hue como un hash de &quot;hue name&quot; =&gt; &quot;hue number&quot; mi %huenames = gethuenames(); # # El programa obtiene la salida de &quot;nc localhost 1099&quot; (monitorea el tr\u00e1fico X10 a trav\u00e9s de # mochad) y busca comandos que coincidan con los sensores de movimiento. Cuando encuentra uno, dispara un comando del sistema para encender o apagar el dispositivo Hue correspondiente. Tabla hash # de c\u00f3digos de unidad de sensor de movimiento para verificar. Si se cambia el c\u00f3digo de un sensor # o se a\u00f1ade un nuevo sensor de movimiento, esta tabla debe actualizarse. El hash del sensor de movimiento # es x10 unidad =&gt; nombre de la luz de tono. my %motionsensors = ( 12 =&gt; [&#039;luz de entrada&#039;], 14 =&gt; [&#039;spare room 1&#039;,&#039;spare room 2&#039;] ); # # bucle infinito que analiza la salida del programa de tuber\u00eda nc # Cuando la l\u00ednea nc = M3 activado, se enciende la l\u00e1mpara de tono n\u00famero 6 while(1) { my $line = readline(STDIN); # obtiene la entrada nc # verifica si es un comando v\u00e1lido if ($line =~ \/Rx\\s*RF\\s*HouseUnit:\\s*M(\\S*)\\sFunc:\\s*(On|Off)\/) { my $unit = $1; my $cmd = lc $2; if (exists $motionsensors{$unit}) # \u00bfes este un sensor para controlar una luz Hue? { my @list = @{ $motionsensors{$unit} }; if ($cmd eq &quot;on&quot;) { $cmd = &quot;true&quot;; } else { $cmd = &quot;false&quot;; } foreach (@list) { system(&quot;perl \/home\/bob\/Dom\u00f3tica\/mochad-0.1.17\/huecmd.pl \\&quot;$_\\&quot; $cmd&quot;); } } } }\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">script bash huecmd<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>echo &quot;ejecutar comando hue: &quot; echo $1 echo $2 \/usr\/bin\/perl \/home\/bob\/Home-Automation\/mochad-0.1.17\/huecmd.pl &quot;$1&quot; $2 &gt; log.txt\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Programa Perl huecmd<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>#!\/usr\/bin\/perl #use strict; use JSON; use HTTP::Request::Common; use LWP; # # Se necesita una clave API para el tono. Consulte el sitio web para desarrolladores de tonos: # https:\/\/developers.meethue.com\/develop\/get-started-2\/ # my $apikey = &quot;**************************&quot;; sub gethuenames{ my $agent = LWP::UserAgent-&gt;new; my $url = &quot;http:\/\/192.168.999.26\/api\/&quot;.$apikey.&quot;\/lights&quot;; my $response = $agent-&gt;get($url); my $lights = decode_json($response-&gt;content); mi %obj; mientras ((mi $key, mi $ele) = cada %$lights) { mi $name = %$ele{&#039;nombre&#039;}; $obj{&quot;$name&quot;} = &quot;$key&quot;; } devolver %obj; } mi %obj = gethuenames(); mi $device = @ARGV[0]; mi $devnum = $obj{$device}; mi $cmd = &#039;{&quot;on&quot;:&#039;.@ARGV[1].&quot;}&quot;; mi $url = &quot;http:\/\/192.168.999.26\/api\/$apikey\/lights\/$devnum\/state&quot;; my $ua = LWP::UserAgent-&gt;new; # Crear una solicitud my $req = HTTP::Request-&gt;new(PUT =&gt; $url); $req-&gt;content_type(&#039;application\/json&#039;); $req-&gt;content($cmd); # Pasar la solicitud al agente de usuario y obtener una respuesta my $res = $ua-&gt;request($req); # Verificar el resultado de la respuesta if ($res-&gt;is_success) { print $res-&gt;content; } else { print $res-&gt;status_line, &quot;n&quot;; }\n<\/code><\/pre>\n\n\n\n<p><\/p>","protected":false},"excerpt":{"rendered":"<p>This is an update to https:\/\/robertjwallace.com\/home-automation-smart-home\/. I am finally beginning to move from the X10 system to a more modern system, despite the cost. My existing system is an hybrid of Philips Hue and X10. To integrate the X10 with Alexa I use the X10 CM19 transceiver with the mochad linux driver, and ha-bridge, a &hellip; <\/p>\n<p class=\"link-more\"><a href=\"https:\/\/robertjwallace.com\/es\/home-automation-part-2\/\" class=\"more-link\">Continuar leyendo<span class=\"screen-reader-text\"> &#8220;Home automation, part 2&#8221;<\/span><\/a><\/p>","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"nf_dc_page":"","_eb_attr":"","footnotes":""},"categories":[143],"tags":[],"class_list":["post-4497","post","type-post","status-publish","format-standard","hentry","category-computer-stuff"],"featured_image_src":null,"featured_image_src_square":null,"author_info":{"display_name":"Bob","author_link":"https:\/\/robertjwallace.com\/es\/author\/admin\/"},"_links":{"self":[{"href":"https:\/\/robertjwallace.com\/es\/wp-json\/wp\/v2\/posts\/4497","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/robertjwallace.com\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/robertjwallace.com\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/robertjwallace.com\/es\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/robertjwallace.com\/es\/wp-json\/wp\/v2\/comments?post=4497"}],"version-history":[{"count":3,"href":"https:\/\/robertjwallace.com\/es\/wp-json\/wp\/v2\/posts\/4497\/revisions"}],"predecessor-version":[{"id":4505,"href":"https:\/\/robertjwallace.com\/es\/wp-json\/wp\/v2\/posts\/4497\/revisions\/4505"}],"wp:attachment":[{"href":"https:\/\/robertjwallace.com\/es\/wp-json\/wp\/v2\/media?parent=4497"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/robertjwallace.com\/es\/wp-json\/wp\/v2\/categories?post=4497"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/robertjwallace.com\/es\/wp-json\/wp\/v2\/tags?post=4497"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}