{"id":11399,"date":"2025-12-14T10:42:04","date_gmt":"2025-12-14T09:42:04","guid":{"rendered":"https:\/\/bitacora.eniac2000.com\/?p=11399"},"modified":"2025-12-14T10:42:07","modified_gmt":"2025-12-14T09:42:07","slug":"deteccion-de-movimientos-con-ia-como-control-domotico-configuracion-maestro-esclavo-a-mas-de-600-kilometros-de-distancia","status":"publish","type":"post","link":"https:\/\/bitacora.eniac2000.com\/?p=11399","title":{"rendered":"Detecci\u00f3n de movimientos con IA como control dom\u00f3tico. Configuraci\u00f3n maestro\/esclavo a m\u00e1s de 600 kil\u00f3metros de distancia"},"content":{"rendered":"<div class=\"seriesmeta\">Esta entrada es la parte 2 de 3 de la serie <a href=\"https:\/\/bitacora.eniac2000.com\/?series=deteccion-de-movimientos-con-ia-como-control-domotico\" class=\"series-1896\" title=\"Detecci\u00f3n de movimientos con IA como control dom\u00f3tico\">Detecci\u00f3n de movimientos con IA como control dom\u00f3tico<\/a><\/div>\n<p>Comentaba en el art\u00edculo anterior que la primera evoluci\u00f3n obvia del proyecto era pasar de un modelo local, en el que el sensor Kinect est\u00e1 conectado al servidor donde se realiza el procesamiento, a un modelo maestro\/esclavo, donde el sensor est\u00e1 en un equipo sencillo, y la l\u00f3gica de procesamiento se encuentra en un servidor remoto, con la potencia de c\u00e1lculo adecuada como para realizar de manera adecuada la detecci\u00f3n de movimientos y la integraci\u00f3n con el sistema de dom\u00f3tica.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"960\" height=\"960\" src=\"https:\/\/bitacora.eniac2000.com\/wp-content\/uploads\/2025\/12\/ros-maestro-esclavo.jpg\" alt=\"\" class=\"wp-image-11406\" srcset=\"https:\/\/bitacora.eniac2000.com\/wp-content\/uploads\/2025\/12\/ros-maestro-esclavo.jpg 960w, https:\/\/bitacora.eniac2000.com\/wp-content\/uploads\/2025\/12\/ros-maestro-esclavo-300x300.jpg 300w, https:\/\/bitacora.eniac2000.com\/wp-content\/uploads\/2025\/12\/ros-maestro-esclavo-150x150.jpg 150w, https:\/\/bitacora.eniac2000.com\/wp-content\/uploads\/2025\/12\/ros-maestro-esclavo-768x768.jpg 768w\" sizes=\"auto, (max-width: 960px) 100vw, 960px\" \/><figcaption class=\"wp-element-caption\">Imagen conceptual de la arquitectura. Creada con IA<\/figcaption><\/figure>\n\n\n\n<p>La raz\u00f3n, en mi caso, para realizar esta evoluci\u00f3n es que todo el sistema, en su configuraci\u00f3n local, se encuentra en una m\u00e1quina virtual desplegada en mi servidor ProLiant DL360p Gen8. No es exactamente la clase de decoraci\u00f3n que puedas colocar en el sal\u00f3n de tu casa. Pero, m\u00e1s all\u00e1 de este caso concreto, es razonable tender a este modelo de trabajo, sobre todo si pensamos en aplicaciones pr\u00e1cticas en entornos de tipo industrial, donde es conveniente estructurar los modelos de despliegue de acuerdo al modelo Purdue, con segmentaci\u00f3n entre la red de sensores y la red de procesamiento. Algo que se hace no s\u00f3lo por motivos de eficiencia (mejor desplegar m\u00faltiples sensores baratos <em>y resistentes<\/em> en un entorno naturalmente agresivo que trabajan contra un servidor central, que no tener sensores caros en el entorno), sino tambi\u00e9n de seguridad, estableciendo redes separadas, control de tr\u00e1fico entre ellas y, sobre todo, reduciendo superficie de ataque mediante la limitaci\u00f3n de servicios desplegados en la red industrial.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/bitacora.eniac2000.com\/wp-content\/uploads\/2025\/01\/hp-proliant-dl360p-gen8.jpg\" alt=\"\"\/><figcaption class=\"wp-element-caption\">Servidor ProLiant DL360p Gen8. No es exactamente lo que quieres tener en el sal\u00f3n de tu casa<\/figcaption><\/figure>\n\n\n\n<p>Hay una segunda raz\u00f3n para que me interesara trabajar en este modelo maestro\/esclavo, y es la siguiente: aunque en un primer lugar hab\u00eda pensado este modo de trabajo para el sal\u00f3n de mi casa y la sala donde tengo el servidor, al final lo he evolucionado a un modelo de larga distancia: \u00bfser\u00eda un modelo de trabajo factible para un entorno en el que el servidor est\u00e1 en Sevilla, y el sensor Kinect en Pontevedra, con una separaci\u00f3n en l\u00ednea recta de m\u00e1s de 600 kil\u00f3metros? Y esta pregunta tambi\u00e9n merec\u00eda una respuesta.<\/p>\n\n\n\n<p>Llegados a este punto, era cuesti\u00f3n de empezar a analizar:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Configuraci\u00f3n ROS maestro\/esclavo:<\/strong> El primero de los aspectos a tratar. \u00bfEra posible que ROS funcionara en una configuraci\u00f3n maestro\/esclavo? Y la respuesta era s\u00ed. Es, de hecho, una configuraci\u00f3n bastante com\u00fan. La idea subyacente es que existe un nodo ROS, configuraci\u00f3n en funci\u00f3n de maestro, que act\u00faa como elemento principal de la arquitectura, y uno o varios nodos esclavos, que a la hora de publicar sus <em>topics<\/em> lo hacen en el servidor maestro.<\/li>\n\n\n\n<li><strong>Distribuci\u00f3n de funciones entre maestro y esclavo: <\/strong>El segundo de los aspectos era el de la distribuci\u00f3n de la l\u00f3gica. En la configuraci\u00f3n local, en l\u00edneas generales, se realizaban dos acciones: reconocer y procesar la informaci\u00f3n proveniente del sensor Kinect, public\u00e1ndola en un <em>topic<\/em> ROS para que pudiera ser consumida; y el procesamiento mediante Machine Learning de la secuencia de v\u00eddeo por parte de MediaPipe, realizando el procesamiento esquel\u00e9tico, reconocimiento de gestos, y publicaci\u00f3n en MQTT para control dom\u00f3tico. La primera de las acciones tiene una carga de trabajo limitada, mientras que la segunda es intensiva en capacidad de c\u00f3mputo. Era obvio que lo adecuado era dejar la primera acci\u00f3n para el nodo esclavo y la segunda para el maestro. Esto permit\u00eda, adem\u00e1s, que el nodo esclavo fuera ligero y con unas necesidades de c\u00f3mputo livianas, lo que permit\u00eda el uso de sistemas muy compactos. En cuanto al segundo, al estar ya libre de sens\u00f3rica f\u00edsica, lo habilitaba para ser desplegado en cualquier ubicaci\u00f3n y con cualquier potencia de c\u00e1lculo.<\/li>\n\n\n\n<li><strong>Elecci\u00f3n del nodo cliente:<\/strong> Aqu\u00ed mi idea preliminar era usar un <em>hardware<\/em> de bajo consumo. Idealmente una Raspberry Pi 4, pero lo que ten\u00eda a mi disposici\u00f3n era una Orange Pi Zero. Un equipo con procesador ARM H3 Quad-core Cortex-A7 y 512 MB de RAM. Limitado, pero sumamente compacto. Y, sobre el papel, v\u00e1lido para esta idea. Sin embargo, y por razones que detallar\u00e9 m\u00e1s adelante, acabar\u00eda usando una m\u00e1quina virtual en un port\u00e1til ThinkPad X270.<\/li>\n\n\n\n<li><strong>Conectividad entre maestro y esclavo:<\/strong> El aspecto clave. C\u00f3mo conectar entre s\u00ed los nodos. Y aqu\u00ed val\u00eda la pena aplicar dos conceptos muy interesantes para una red industrial. Redes definidas por software (SDN) y ZTNA. Dado que ambos nodos se encontraban en redes completamente separadas (el maestro en una red local en Sevilla, y el esclavo en una red virtual en un port\u00e1til, tras un NAT), me decid\u00ed a crear una red definida por software entre ambos nodos, lo que t\u00e9cnicamente corresponder\u00eda a una red SD-WAN. Desde el punto de vista de los nodos estar\u00edan en una red local, pero desde el punto de vista de la infraestructura de red estar\u00edan en sus sistemas separados, y sin necesidad de abrir puertos, realizar enrutados, o cualquier otra clase de procesado del tr\u00e1fico de manera convencional. Adem\u00e1s, el m\u00e9todo escogido me permit\u00eda implementar los principios de ZTNA (Zero Trust Network Access), ya que pod\u00eda implementar un control granular de los sistemas conectados a dicha red, mediante conectividad segura (las interfaces virtuales, en realidad, se realizan como t\u00faneles cifrados extremo a extremo), control de acceso (con permisos individualizados a nivel de dispositivo) y visibilidad de los dispositivos conectados. La manera de implementarlo fue mediante <a href=\"https:\/\/bitacora.eniac2000.com\/?p=5177\" data-type=\"post\" data-id=\"5177\" target=\"_blank\" rel=\"noreferrer noopener\">ZeroTier<\/a>, un sistema que vengo usando desde hace tiempo para interconectar mis sistemas.<\/li>\n<\/ul>\n\n\n\n<p>Con todo esto en mente, el diagrama del sistema quedar\u00eda como sigue:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"559\" src=\"https:\/\/bitacora.eniac2000.com\/wp-content\/uploads\/2025\/12\/diagrama-sistema-2-1024x559.png\" alt=\"\" class=\"wp-image-11411\" srcset=\"https:\/\/bitacora.eniac2000.com\/wp-content\/uploads\/2025\/12\/diagrama-sistema-2-1024x559.png 1024w, https:\/\/bitacora.eniac2000.com\/wp-content\/uploads\/2025\/12\/diagrama-sistema-2-300x164.png 300w, https:\/\/bitacora.eniac2000.com\/wp-content\/uploads\/2025\/12\/diagrama-sistema-2-768x419.png 768w, https:\/\/bitacora.eniac2000.com\/wp-content\/uploads\/2025\/12\/diagrama-sistema-2.png 1408w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Cambios en la configuraci\u00f3n del nodo maestro<\/h2>\n\n\n\n<p>El nodo maestro, pues, ser\u00eda la evoluci\u00f3n del nodo local que hab\u00eda preparado en la fase anterior del proyecto. Recordemos:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>M\u00e1quina virtual desplegada en mi servidor ProxMox, con el sensor Kinect conectado a un puerto USB local, y mapeado a la m\u00e1quina virtual.<\/li>\n\n\n\n<li>Un servicio, <em>freenect.launch.service, <\/em>que se encargaba de conectar el sensor Kinect mediante freenect y OpenNi, para inyectar las im\u00e1genes en ROS.<\/li>\n\n\n\n<li>Otro servicio, <em>mediapipe_pose.service<\/em>, que se conectaba al <em>topic<\/em> ROS adecuado, procesaba la imagen, obten\u00eda la imagen esquel\u00e9tica, procesaba gestos, e inyectaba en el servidor MQTT.<\/li>\n<\/ul>\n\n\n\n<p>Los cambios a realizar en este nodo fueron los siguientes:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Instalar el cliente ZeroTier,<\/strong> para crear una IP virtual para el servidor.<\/li>\n\n\n\n<li><strong>Deshabilitar <em>freenect.launch.service<\/em><\/strong><em>,<\/em> que ya no prestaba ninguna funci\u00f3n.<\/li>\n\n\n\n<li><strong>Definir las variables ROS_MASTER_URI y ROS_IP.<\/strong> Estas variables le dicen al sistema ROS que va a trabajar en una configuraci\u00f3n maestro\/esclavo. Como este nodo iba a ser el nodo maestros, ambas variables apuntar\u00edan a su propia direcci\u00f3n IP, en este caso, la de la red SD-WAN desplegada con ZeroTier. En un primer momento defin\u00ed las variables a nivel de sistema; una vez probado el correcto funcionamiento, pas\u00e9 a definirlas en los servicios <em>systemd<\/em> apropiados.<\/li>\n\n\n\n<li><strong>Crear un nuevo servicio <em>roscore.service<\/em>.<\/strong> Dado que el servicio ROS anteriormente se levantaba dentro del servicio <em>freenect.launch.service<\/em>, era necesario crear un nuevo servicio simplificado que se encargara de levantar <em>roscore<\/em>.<\/li>\n\n\n\n<li><strong>Modificar el servicio <em>mediapipe_pose.service<\/em><\/strong> para que contemplara las variables de entorno anteriormente mencionadas, y que dependiera de <em>roscore.service<\/em>, para asegurar la correcta puesta en marcha de los servicios.<\/li>\n<\/ul>\n\n\n\n<p>La belleza esta configuraci\u00f3n es que no era necesario realizar ning\u00fan tipo de cambio en la l\u00f3gica de MediaPipe, ya que desde un inicio se apoyaba en un <em>topic<\/em> ROS, que segu\u00eda siendo el mismo, aun siendo publicado por el nodo esclavo.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Instalaci\u00f3n del nodo esclavo<\/h2>\n\n\n\n<p>En cuanto al nodo esclavo, en l\u00edneas generales el trabajo implicaba desplegar sistema operativo, freenect, ROS y OpenNi, y conectar el sensor Kinect. Mi primer impulso hab\u00eda sido usar una Raspberry Pi 4, pero no ten\u00eda ninguna disponible. Mi segunda opci\u00f3n era la Orange Pi Zero, pero me encontr\u00e9 con un problema bastante importante.<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"1024\" src=\"https:\/\/bitacora.eniac2000.com\/wp-content\/uploads\/2025\/12\/Orange_Pi_zero_case-1024x1024.webp\" alt=\"\" class=\"wp-image-11403\" style=\"width:477px;height:auto\" srcset=\"https:\/\/bitacora.eniac2000.com\/wp-content\/uploads\/2025\/12\/Orange_Pi_zero_case-1024x1024.webp 1024w, https:\/\/bitacora.eniac2000.com\/wp-content\/uploads\/2025\/12\/Orange_Pi_zero_case-300x300.webp 300w, https:\/\/bitacora.eniac2000.com\/wp-content\/uploads\/2025\/12\/Orange_Pi_zero_case-150x150.webp 150w, https:\/\/bitacora.eniac2000.com\/wp-content\/uploads\/2025\/12\/Orange_Pi_zero_case-768x768.webp 768w, https:\/\/bitacora.eniac2000.com\/wp-content\/uploads\/2025\/12\/Orange_Pi_zero_case.webp 1200w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\">Orange Pi Zero con su carcasa oficial. Muy compacta, pero con problemas de sobrecalentamiento<\/figcaption><\/figure>\n\n\n\n<p>El problema no era otro que el de los sistemas operativos disponibles. Esta placa es bastante antigua, y admite el despliegue de Ubuntu 16.04, Debian Stretch, y Android 4. Nada de ello val\u00eda para desplegar ROS Noetic. A\u00fan as\u00ed, estuve haciendo algunas pruebas, para ver si era posible solventarlo de alguna manera, pero acab\u00e9 por rendirme a la evidencia. Tocaba descartar la Orange Pi Zero.<\/p>\n\n\n\n<p>El Mac Mini M4, con su arquitectura Apple, tampoco es adecuado para el despliegue de un entorno Ubuntu 20.04, as\u00ed que, aprovechando que hac\u00eda poco me hab\u00eda hecho con un ThinkPad X270 al que le hab\u00eda instalado una Debian 13, aprovech\u00e9 para instalar KVM-Qemu, y desplegar una Ubuntu 20.04.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"750\" height=\"500\" src=\"https:\/\/bitacora.eniac2000.com\/wp-content\/uploads\/2025\/12\/x270_750.jpg\" alt=\"\" class=\"wp-image-11408\" srcset=\"https:\/\/bitacora.eniac2000.com\/wp-content\/uploads\/2025\/12\/x270_750.jpg 750w, https:\/\/bitacora.eniac2000.com\/wp-content\/uploads\/2025\/12\/x270_750-300x200.jpg 300w\" sizes=\"auto, (max-width: 750px) 100vw, 750px\" \/><figcaption class=\"wp-element-caption\">ThinkPad X270 de 13\u00bb. Equipo duro donde los haya&#8230;<\/figcaption><\/figure>\n\n\n\n<p>A partir de aqu\u00ed era simplemente seguir las instrucciones del art\u00edculo anterior para desplegar ROS Noetic, los drivers Freenect para Kinect, y OpenNi para poder inyectar la imagen del sensor Kinect en un <em>topic<\/em> ROS.<\/p>\n\n\n\n<p>El \u00fanico aspecto a tener en cuenta era el del trabajo en modo maestro\/esclavo. En este caso, el ROS desplegado en este nodo pasaba a ser el esclavo. Era preciso, por ello, hac\u00e9rselo saber. Y como en el caso del nodo maestro, se hac\u00eda definiendo las variables ROS_MASTER_URI y ROS_IP. En este caso, la URL de ROS_MASTER_URI tendr\u00eda que ser la del servidor maestro, y ROS_IP la IP del nodo esclavo.<\/p>\n\n\n\n<p>Por \u00faltimo, quedaba lanzar de manera automatizada el servicio. Sin embargo, aqu\u00ed introduje una peque\u00f1a variaci\u00f3n: dado que el ROS esclavo necesita que el ROS maestro est\u00e9 funcionando para poderse lanzar adecuadamente, en vez de crear un servicio que simplemente lanzara el ROS esclavo, cre\u00e9 con ayuda de Perplexity un script que primero comprueba si el ROS maestro est\u00e1 activo y, si lo est\u00e1, entonces lanza el servicio. El servicio <em>systemd<\/em> lanza este script.<\/p>\n\n\n\n<p>Esta es la l\u00f3gica de <em>start_freenect.sh:<\/em><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>#!\/bin\/bash\n# start_freenect.sh - ros-remote (10.147.xxx.160)\n\nMASTER_URI=\"http:\/\/10.147.xxx.205:11311\"\nMASTER_IP=\"10.147.xxx.205\"\n\nexport ROS_MASTER_URI=$MASTER_URI\nexport ROS_IP=10.147.xxx.160\n\n# Cargar entorno ROS\nsource \/opt\/ros\/noetic\/setup.bash\nsource \/home\/username\/catkin_ws\/devel\/setup.bash 2>\/dev\/null || true\n\necho \"&#91;start_freenect] Comprobando ROS master en $MASTER_URI...\"\n\n# Esperar a que el master est\u00e9 disponible (m\u00e1x ~30s)\nMAX_TRIES=30\ni=0\nwhile &#91; $i -lt $MAX_TRIES ]; do\n    if curl -s \"$MASTER_URI\" | grep -q \"Unsupported method\"; then\n        echo \"&#91;start_freenect] ROS master disponible.\"\n        break\n    fi\n    echo \"&#91;start_freenect] ROS master no responde, reintentando... ($((i+1))\/$MAX_TRIES)\"\n    sleep 1\n    i=$((i+1))\ndone\n\nif &#91; $i -ge $MAX_TRIES ]; then\n    echo \"&#91;start_freenect] ERROR: ROS master no disponible tras $MAX_TRIES intentos. Saliendo.\"\n    exit 1\nfi\n\necho \"&#91;start_freenect] Lanzando freenect_launch...\"\nexec roslaunch freenect_launch freenect.launch depth_registration:=true\n<\/code><\/pre>\n\n\n\n<p>&#8230;y este el servicio <em>systemd freenect.service:<\/em><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&#91;Unit]\nDescription=Kinect v1 freenect_launch (ROS Noetic)\nAfter=network-online.target\nWants=network-online.target\n\n&#91;Service]\nType=simple\nUser=jhidalgo\nEnvironment=\"HOME=\/home\/username\"\n# Variables ROS maestro\u2013esclavo\nEnvironment=\"ROS_MASTER_URI=http:\/\/10.147.xxx.205:11311\"\nEnvironment=\"ROS_IP=10.147.xxx.160\"\nExecStart=\/bin\/bash \/home\/username\/start_freenect.sh\nRestart=on-failure\nRestartSec=5s\nWorkingDirectory=\/home\/username\n\n&#91;Install]\nWantedBy=multi-user.target\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Integraci\u00f3n en el sistema dom\u00f3tico: Home Assistant<\/h2>\n\n\n\n<p>Uno de los puntos que hab\u00eda quedado por definir en el art\u00edculo anterior era la integraci\u00f3n efectiva en el sistema dom\u00f3tico. No hab\u00eda avanzado en ello ya que, habiendo llegado al punto de inyectar las acciones en un <em>topic<\/em> MQTT, el procesado de las acciones era algo trivial. Sin embargo, para hacer una verdadera prueba funcional, era algo necesario de implementar.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"576\" src=\"https:\/\/bitacora.eniac2000.com\/wp-content\/uploads\/2025\/12\/home-assistant-dashboard-1024x576.jpg\" alt=\"\" class=\"wp-image-11407\" srcset=\"https:\/\/bitacora.eniac2000.com\/wp-content\/uploads\/2025\/12\/home-assistant-dashboard-1024x576.jpg 1024w, https:\/\/bitacora.eniac2000.com\/wp-content\/uploads\/2025\/12\/home-assistant-dashboard-300x169.jpg 300w, https:\/\/bitacora.eniac2000.com\/wp-content\/uploads\/2025\/12\/home-assistant-dashboard-768x432.jpg 768w, https:\/\/bitacora.eniac2000.com\/wp-content\/uploads\/2025\/12\/home-assistant-dashboard-1536x864.jpg 1536w, https:\/\/bitacora.eniac2000.com\/wp-content\/uploads\/2025\/12\/home-assistant-dashboard.jpg 1600w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\">Interfaz de usuario de Home Assistant<\/figcaption><\/figure>\n\n\n\n<p>En mi caso, mi sistema dom\u00f3tico se basa en una instalaci\u00f3n local de Home Assistant. Decid\u00ed que, ya que me encontraba en Forcarey, deb\u00eda interactuar con las luces de aqu\u00ed. Estas luces se gestionan mediante sistemas Sonoff con firmware Tasmota, que son reconocidos en Home Assistant como <em>switches. <\/em>Por tanto, para utilizar el gesto de levantar el brazo derecho para encender\/apagar la luz, bastaba con una automatizaci\u00f3n como la que sigue:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>- alias: \"Sal\u00f3n Forcarey - Toggle con gesto brazo\"\n  trigger:\n    - platform: mqtt\n      topic: \"domotica\/brazo_presencia\"\n      payload: \"BRAZO_DERECHO_LEVANTADO\"\n  action:\n    - service: switch.toggle\n      target:\n        entity_id: switch.luz_salon_forcarey\n  mode: single<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Prob\u00e1ndolo todo<\/h2>\n\n\n\n<p>Lleg\u00f3 el momento de la prueba. Configur\u00e9 el sistema, coloqu\u00e9 el Kinect en el sal\u00f3n, verifiqu\u00e9 las conexiones entre los sistemas y&#8230; \u00a1exito! La luz se encend\u00eda y se apagaba a un gesto de mi brazo. De acuerdo, un resultado trivial y divertido, pero que abre la puerta a algo bastante m\u00e1s interesante, y es la interacci\u00f3n a larga distancia de sistemas rob\u00f3ticos para el control de sistemas, detecci\u00f3n de personas, etc&#8230; aplicando principios de securizaci\u00f3n mediante SD-WAN y ZTNA en infraestructuras, y con procesamiento mediante IA y ML en sistemas remotos.<\/p>\n\n\n\n<p>Y seguimos teniendo sobre la mesa las otras mejoras que comentaba en el primer art\u00edculo de la serie. <img src=\"https:\/\/bitacora.eniac2000.com\/wp-includes\/images\/smilies\/mrgreen.png\" alt=\":mrgreen:\" class=\"wp-smiley\" style=\"height: 1em; max-height: 1em;\" \/><\/p>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<div class=\"seriesmeta\">Esta entrada es la parte 2 de 3 de la serie <a href=\"https:\/\/bitacora.eniac2000.com\/?series=deteccion-de-movimientos-con-ia-como-control-domotico\" class=\"series-1896\" title=\"Detecci\u00f3n de movimientos con IA como control dom\u00f3tico\">Detecci\u00f3n de movimientos con IA como control dom\u00f3tico<\/a><\/div><p>Comentaba en el art\u00edculo anterior que la primera evoluci\u00f3n obvia<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"advanced_seo_description":"","jetpack_seo_html_title":"","jetpack_seo_noindex":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2}},"categories":[13],"tags":[1901,517,543,798,824,1885,1895,1134,1887,1209,1310,1900,1381,1882,1897,1899,1883,1785,1815,1898],"series":[1896],"class_list":["post-11399","post","type-post","status-publish","format-standard","hentry","category-informatica","tag-1901","tag-debian","tag-domotica","tag-home-assistant","tag-ia","tag-kinect","tag-mediapipe","tag-mqtt","tag-openni","tag-orange-pi-zero","tag-proxmox","tag-purdue","tag-raspberry-pi","tag-ros","tag-sd-wan","tag-sdn","tag-ubuntu","tag-wifi","tag-zerotier","tag-ztna","series-deteccion-de-movimientos-con-ia-como-control-domotico"],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/bitacora.eniac2000.com\/index.php?rest_route=\/wp\/v2\/posts\/11399","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/bitacora.eniac2000.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/bitacora.eniac2000.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/bitacora.eniac2000.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/bitacora.eniac2000.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=11399"}],"version-history":[{"count":6,"href":"https:\/\/bitacora.eniac2000.com\/index.php?rest_route=\/wp\/v2\/posts\/11399\/revisions"}],"predecessor-version":[{"id":11412,"href":"https:\/\/bitacora.eniac2000.com\/index.php?rest_route=\/wp\/v2\/posts\/11399\/revisions\/11412"}],"wp:attachment":[{"href":"https:\/\/bitacora.eniac2000.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=11399"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/bitacora.eniac2000.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=11399"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/bitacora.eniac2000.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=11399"},{"taxonomy":"series","embeddable":true,"href":"https:\/\/bitacora.eniac2000.com\/index.php?rest_route=%2Fwp%2Fv2%2Fseries&post=11399"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}