{"id":2569,"date":"2024-01-31T18:43:56","date_gmt":"2024-01-31T17:43:56","guid":{"rendered":"https:\/\/theroamingworkshop.cloud\/b\/?p=2569"},"modified":"2024-09-13T23:14:29","modified_gmt":"2024-09-13T22:14:29","slug":"unihiker-pal-asistente-del-hogar-simplificado-de-codigo-abierto-en-python","status":"publish","type":"post","link":"https:\/\/theroamingworkshop.cloud\/b\/2569\/unihiker-pal-asistente-del-hogar-simplificado-de-codigo-abierto-en-python\/","title":{"rendered":"UNIHIKER-PAL: asistente del hogar simplificado, de c\u00f3digo abierto en python"},"content":{"rendered":"\n<p><strong>PAL<\/strong> es una versi\u00f3n simplificada de mi asistente del hogar en python, que se ejecuta en una placa <strong>UNIHIKER<\/strong> de <strong>DFRobot<\/strong>, y que lanzo en c\u00f3digo abierto gratuito.<\/p>\n\n\n\n<p>Esta es solo una peque\u00f1a demostraci\u00f3n de la simplicidad de la ejecuci\u00f3n de comandos con reconocimiento de voz en python, y con suerte servir\u00e1 de gu\u00eda para tu propio asistente.<\/p>\n\n\n\n<p>Version actual: <strong>v0.2.0<\/strong> <em>(actualizado septiembre 2024)<\/em><\/p>\n\n\n\n<div id=\"menu\" style=\"padding:20px 20px 20px 20px; border-left:2px solid darkgrey;\">\n<p style=\"font-weight:bold;\">Contenido<\/p>\n<\/div>\n<script>\nvar text;\nvar element;\n\nfunction fillmenu(){\n\nfor (let i=0; i<window.document.getElementsByTagName(\"h2\").length; i++){\nelement = window.document.getElementsByTagName(\"h2\")[i];\ntext = \"\u25b9 \"+element.innerHTML;\nvar newelement = document.createElement(\"a\");\nnewelement.innerHTML=text;\nvar postid=window.document.getElementsByTagName(\"article\")[0].id;\nvar url = \"https:\/\/theroamingworkshop.cloud\/b\/?p=\"+postid.substr(5,postid.length)+\"#\"+element.id;\nnewelement.setAttribute(\"href\", url);\nnewelement.appendChild(document.createElement(\"br\"));\nwindow.document.getElementById(\"menu\").appendChild(newelement);\n}\n}\n\nif(window.location.href.includes(\"tag\")){\n\n}else{\nwindow.setTimeout(fillmenu,2000);\n}\n\n<\/script>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"caracter\u00edsticas\">Caracter\u00edsticas<\/h2>\n\n\n\n<p>La versi\u00f3n actual incluye lo siguiente:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Reconocimiento de voz<\/strong>: usando la librer\u00eda de c\u00f3digo abierto <a href=\"https:\/\/github.com\/Uberi\/speech_recognition\" data-type=\"link\" data-id=\"https:\/\/github.com\/Uberi\/speech_recognition\" target=\"_blank\" rel=\"noreferrer noopener\">SpeechRecognition<\/a>, se obtiene una lista con las cadenas de texto reconocidas.<\/li>\n\n\n\n<li><strong>Pron\u00f3stico del tiempo<\/strong>: usando la API de datos de <a href=\"https:\/\/worldweather.wmo.int\/en\/dataguide.html\" data-type=\"link\" data-id=\"https:\/\/worldweather.wmo.int\/en\/dataguide.html\" target=\"_blank\" rel=\"noreferrer noopener\">World Meteorological Organization<\/a>, devuelve el tiempo de hoy y el pron\u00f3stico de los pr\u00f3ximos 3 d\u00edas. Incluye los iconos de la WMO.<\/li>\n\n\n\n<li><strong>Temperatura local<\/strong>: reads local BMP-280 temperature sensor to provide a room temperature indicator.<\/li>\n\n\n\n<li><strong>Comandos HTTP para IoT<\/strong>: flujo de trabajo b\u00e1sico para controlar dispositivos inteligentes de IoT mediante comandos HTTP. Actualmente ENCIENDE y APAGA un interruptor inteligente Shelly2.5.<\/li>\n\n\n\n<li><strong>Modo ahorro de energ\u00eda<\/strong>: controla el brillo para reducir el consumo de energ\u00eda.<\/li>\n\n\n\n<li><strong>Gestor de conexi\u00f3n<\/strong>: peri\u00f3dicamente comprueba el wifi y llama a internet para restaurar la conexi\u00f3n cuando se pierda.<\/li>\n\n\n\n<li><strong>Muestra de voces de PAL<\/strong>: voz clonada de PAL de \"<em>Los Mitchells contra las M\u00e1quinas<\/em>\" usando el modelo de IA de voz <a href=\"https:\/\/huggingface.co\/spaces\/coqui\/xtts\" target=\"_blank\" rel=\"noreferrer noopener\">CoquiAI-TTS v2<\/a>.<\/li>\n\n\n\n<li><strong>Botones UNIHIKER<\/strong>: bot\u00f3n A despliega un simple men\u00fa (est\u00e1 pensado para desarrollar un men\u00fa m\u00e1s complejo en el futuro).<\/li>\n\n\n\n<li><strong>Controles t\u00e1ctiles<\/strong>: restaura el brillo (centro), cambia de programa (izquierda) y cierra el programa (derecha) pulsando en distintas zonas de la pantalla.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"instalaci\u00f3n\">Instalaci\u00f3n<\/h2>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Instala dependencias:<br><strong>pip install SpeechRecognition pyyaml<\/strong><\/li>\n\n\n\n<li>Descarga el repositorio de github:<br><a href=\"https:\/\/github.com\/TheRoam\/UNIHIKER-PAL\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/github.com\/TheRoam\/UNIHIKER-PAL<\/a><\/li>\n\n\n\n<li>Sube los archivos y carpetas a la UNIHIKER en <strong>\/root\/upload\/PAL\/<\/strong><\/li>\n\n\n\n<li><strong>Configura<\/strong> en <strong><code>PAL_config.yaml<\/code><\/strong> las credenciales WIFI, dispositivos IoT,  etc.<\/li>\n\n\n\n<li>Lanza el script de python <strong><code>python \/root\/upload\/PAL\/PAL_020.py<\/code><\/strong> desde la terminal de Mind+ o desde la interfaz t\u00e1ctil de UNIHIKER.<\/li>\n<\/ol>\n\n\n<div class=\"wp-block-image\">\n<figure data-wp-context=\"{&quot;imageId&quot;:&quot;6a5dc23b44242&quot;}\" data-wp-interactive=\"core\/image\" data-wp-key=\"6a5dc23b44242\" class=\"aligncenter size-large wp-lightbox-container\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"473\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on--click=\"actions.showLightbox\" data-wp-on--load=\"callbacks.setButtonStyles\" data-wp-on-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/theroamingworkshop.cloud\/b\/wp-content\/uploads\/2024\/01\/PAL_Mind-1024x473.png\" alt=\"\" class=\"wp-image-2714\" srcset=\"https:\/\/theroamingworkshop.cloud\/b\/wp-content\/uploads\/2024\/01\/PAL_Mind-1024x473.png 1024w, https:\/\/theroamingworkshop.cloud\/b\/wp-content\/uploads\/2024\/01\/PAL_Mind-300x139.png 300w, https:\/\/theroamingworkshop.cloud\/b\/wp-content\/uploads\/2024\/01\/PAL_Mind-768x355.png 768w, https:\/\/theroamingworkshop.cloud\/b\/wp-content\/uploads\/2024\/01\/PAL_Mind-676x312.png 676w, https:\/\/theroamingworkshop.cloud\/b\/wp-content\/uploads\/2024\/01\/PAL_Mind.png 1379w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><button\n\t\t\tclass=\"lightbox-trigger\"\n\t\t\ttype=\"button\"\n\t\t\taria-haspopup=\"dialog\"\n\t\t\taria-label=\"Agrandar\"\n\t\t\tdata-wp-init=\"callbacks.initTriggerButton\"\n\t\t\tdata-wp-on--click=\"actions.showLightbox\"\n\t\t\tdata-wp-style--right=\"state.imageButtonRight\"\n\t\t\tdata-wp-style--top=\"state.imageButtonTop\"\n\t\t>\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewBox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\" \/>\n\t\t\t<\/svg>\n\t\t<\/button><\/figure>\n<\/div>\n\n\n<p>Si habilitas <strong>Auto boot<\/strong> en el men\u00fa de <strong>Service Toggle<\/strong>, el script se ejecutar\u00e1 autom\u00e1ticamente cada vez que se reinicie la UNIHIKER <\/p>\n\n\n\n<p><a href=\"https:\/\/www.unihiker.com\/wiki\/faq#Error:%20python3:%20can't%20open%20file\u2026\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/www.unihiker.com\/wiki\/faq#Error:%20python3:%20can't%20open%20file\u2026<\/a><\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"configuraci\u00f3n\">Configuraci\u00f3n<\/h2>\n\n\n\n<p>Version 0.2.0 includes configuration using a yaml file that is read when the program starts.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>CREDENTIALS:<br>    ssid: \"WIFI_SSID\"<br>    pwd: \"WIFI_PASSWORD\"<br><br>DEVICES:<br>    light1:<br>        brand: \"Shelly25\"<br>        ip: \"192.168.1.44\"<br>        channel: 0<br><br>    light2:<br>        brand: \"Shelly25\"<br>        ip: \"192.168.1.44\"<br>        channel: 1<br><br>    light3:<br>        brand: \"Shelly1\"<br>        ip: \"192.168.1.42\"<br>        channel: 0<br><br>PAL:<br>    power_save_mode: 0<br>    temperature_sensor: 0<br>    wmo_city_id: \"195\"<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Localizaci\u00f3n<\/h3>\n\n\n\n<p>La variable \"<strong>CityID<\/strong>\" se usa para proporcionar un pron\u00f3stico del tiempo de WMO m\u00e1s cercano a tu localizaci\u00f3n.<\/p>\n\n\n\n<p>Elige una de las localizaciones disponibles en su listado oficial:<\/p>\n\n\n\n<p><a href=\"https:\/\/worldweather.wmo.int\/en\/json\/full_city_list.txt\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/worldweather.wmo.int\/en\/json\/full_city_list.txt<\/a><\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Dispositivos IoT<\/h3>\n\n\n\n<p>En este momento, <strong>PAL v0.2.0<\/strong> solo incluye compatibilidad con Shelly2.5 para fines demostrativos.<\/p>\n\n\n\n<p>Usa las variables <strong>lampBrand<\/strong>, <strong>lampChannel<\/strong> y <strong>lampIP<\/strong> para ajustar tu configuraci\u00f3n de Shelly2.5.<\/p>\n\n\n\n<p>Esto es solo un ejemplo para mostrar c\u00f3mo se pueden configurar distintos dispositivos. Estas variables se deber\u00edan usar para cambiar las peculiaridades de los comandos HTTP que se env\u00edan a cada dispositivo IoT.<\/p>\n\n\n\n<p>Se a\u00f1adir\u00e1n m\u00e1s dispositivos en futuras actualizaciones, como Shelly1, ShellyDimmer, Sonoff D1, etc.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Modo ahorro de energ\u00eda<\/h3>\n\n\n\n<p>El ahorro de energ\u00eda disminuye el brillo del dispositivo para reducir el consumo de energ\u00eda de la UNIHIKER. Esto se hace usando el comando del sistema \"<strong>brightness<\/strong>\".<\/p>\n\n\n\n<p>Cambia la variable \"<strong>ps_mode<\/strong>\" para habilitar (\"1\") o deshabilitar (\"0\") el modo ahorro de energ\u00eda.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Temperatura de habitaci\u00f3n<\/h3>\n\n\n\n<p>Cambia la variable \"<strong>room_temp<\/strong>\" para habilitar (\"1\") o deshabilitar (\"0\") el m\u00f3dulo de lectura de sensor de temperatura. Esto requiere un sensor BMP-280 instalado mediante el conector I2C.<\/p>\n\n\n\n<p>Comprueba este otro post para los detalles de la instalaci\u00f3n del sensor:<\/p>\n\n\n\n<p><a href=\"https:\/\/theroamingworkshop.cloud\/b\/en\/2490\/\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/theroamingworkshop.cloud\/b\/en\/2490\/<\/a><\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Otras configuraciones desde el c\u00f3digo fuente:<\/h3>\n\n\n\n<h3 class=\"wp-block-heading\">Tema<\/h3>\n\n\n\n<p>Se habilita la personalizaci\u00f3n de la imagen de fondo que representa los ojos de PAL.<\/p>\n\n\n\n<p>Usa las variables \"<strong>eyesA<\/strong>\" y \"<strong>eyesB<\/strong>\" para especificar uno de los siguientes valores y cambia la expresi\u00f3n del PAL:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\"happy\"<\/li>\n\n\n\n<li>\"angry\"<\/li>\n\n\n\n<li>\"surprised\"<\/li>\n\n\n\n<li>\"sad\"<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-gallery has-nested-images columns-4 is-cropped wp-block-gallery-1 is-layout-flex wp-block-gallery-is-layout-flex\">\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/theroamingworkshop.cloud\/b\/wp-content\/uploads\/2024\/01\/PAL_happy.jpg\" target=\"_blank\" rel=\"noreferrer noopener\"><img loading=\"lazy\" decoding=\"async\" width=\"320\" height=\"240\" data-id=\"2541\" src=\"https:\/\/theroamingworkshop.cloud\/b\/wp-content\/uploads\/2024\/01\/PAL_happy.jpg\" alt=\"\" class=\"wp-image-2541\" srcset=\"https:\/\/theroamingworkshop.cloud\/b\/wp-content\/uploads\/2024\/01\/PAL_happy.jpg 320w, https:\/\/theroamingworkshop.cloud\/b\/wp-content\/uploads\/2024\/01\/PAL_happy-300x225.jpg 300w\" sizes=\"auto, (max-width: 320px) 100vw, 320px\" \/><\/a><figcaption class=\"wp-element-caption\">\"happy\"<\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/theroamingworkshop.cloud\/b\/wp-content\/uploads\/2024\/01\/PAL_angry.jpg\" target=\"_blank\" rel=\"noreferrer noopener\"><img loading=\"lazy\" decoding=\"async\" width=\"320\" height=\"240\" data-id=\"2540\" src=\"https:\/\/theroamingworkshop.cloud\/b\/wp-content\/uploads\/2024\/01\/PAL_angry.jpg\" alt=\"\" class=\"wp-image-2540\" srcset=\"https:\/\/theroamingworkshop.cloud\/b\/wp-content\/uploads\/2024\/01\/PAL_angry.jpg 320w, https:\/\/theroamingworkshop.cloud\/b\/wp-content\/uploads\/2024\/01\/PAL_angry-300x225.jpg 300w\" sizes=\"auto, (max-width: 320px) 100vw, 320px\" \/><\/a><figcaption class=\"wp-element-caption\">\"angry\"<\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"320\" height=\"240\" data-id=\"2543\" src=\"https:\/\/theroamingworkshop.cloud\/b\/wp-content\/uploads\/2024\/01\/PAL_surprised.jpg\" alt=\"\" class=\"wp-image-2543\" srcset=\"https:\/\/theroamingworkshop.cloud\/b\/wp-content\/uploads\/2024\/01\/PAL_surprised.jpg 320w, https:\/\/theroamingworkshop.cloud\/b\/wp-content\/uploads\/2024\/01\/PAL_surprised-300x225.jpg 300w\" sizes=\"auto, (max-width: 320px) 100vw, 320px\" \/><figcaption class=\"wp-element-caption\">\"surprised\"<\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"320\" height=\"240\" data-id=\"2542\" src=\"https:\/\/theroamingworkshop.cloud\/b\/wp-content\/uploads\/2024\/01\/PAL_sad.jpg\" alt=\"\" class=\"wp-image-2542\" srcset=\"https:\/\/theroamingworkshop.cloud\/b\/wp-content\/uploads\/2024\/01\/PAL_sad.jpg 320w, https:\/\/theroamingworkshop.cloud\/b\/wp-content\/uploads\/2024\/01\/PAL_sad-300x225.jpg 300w\" sizes=\"auto, (max-width: 320px) 100vw, 320px\" \/><figcaption class=\"wp-element-caption\">\"sad\"<\/figcaption><\/figure>\n<\/figure>\n\n\n\n<p>\"<strong>eyesA\"<\/strong> se usa como fondo por defecto y \"<strong>eyesB<\/strong>\" se usa como transici\u00f3n cuando el reconocimiento de voz se activa y <strong>PAL<\/strong> habla.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"500\" height=\"280\" src=\"https:\/\/theroamingworkshop.cloud\/b\/wp-content\/uploads\/2024\/01\/PAL_face.gif\" alt=\"\" class=\"wp-image-2563\" style=\"width:350px\"\/><\/figure>\n<\/div>\n\n\n<p>El valor por defecto de \"<strong>eyesA<\/strong>\" es \"<strong>surprised<\/strong>\" y cambiar\u00e1 a \"<strong>happy<\/strong>\" cuando se reconoce un comando.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Comandos personalizados<\/h3>\n\n\n\n<p>A\u00f1adir tus propios comandos a <strong>PAL<\/strong> es simple usando la funci\u00f3n \"comandos\".<\/p>\n\n\n\n<p>Cada audio reconocido por SpeechRecognition se env\u00eda como una cadena a la funci\u00f3n \"comandos\", que filtra y lanza uno u otro comando coincidente con la orden.<\/p>\n\n\n\n<p>Solo define todas las posibles cadenas que pueden ser reconozidas para lanzar tu comando (a veces SpeechRecognition devuelve transcripciones err\u00f3neas o imprecisas).<\/p>\n\n\n\n<p>Finalmente, define el comando que se lanza cuando la cadena coincide.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>def comandos(msg):\n    # LAMP ON\n    if any(keyword in msg for keyword in &#91;\"turn on the lamp\", \"turn the lights on\",\"turn the light on\", \"turn on the light\", \"turn on the lights\"]):\n        turnLAMP(\"on\")\n        os.system(\"aplay '\/root\/upload\/PAL\/mp3\/Turn_ON_lights.wav'\")<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Palabra clave para la activaci\u00f3n<\/h3>\n\n\n\n<p>Puedes personalizar las palabras clave o cadenas que activan las funciones de comandos. Si cualquiera de las palabras clave en la lista es reconocida, toda la frase se env\u00eda a la funci\u00f3n \"comandos\" para buscar un comando coincidente y ejecutarlo.<\/p>\n\n\n\n<p>En caso de PAL v0.2, estas son las palabras clave que lo activan (el 90% de las veces es Paypal...):<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>activate=&#91;\n    \"hey pal\",\n    \"hey PAL\",\n    \"pal\",\n    \"pall\",\n    \"Pall\",\n    \"hey Pall\",\n    \"Paul\",\n    \"hey Paul\",\n    \"pol\",\n    \"Pol\",\n    \"hey Pol\",\n    \"poll\",\n    \"pause\",\n    \"paypal\",\n    \"PayPal\",\n    \"hey paypal\",\n    \"hey PayPal\"\n]<\/code><\/pre>\n\n\n\n<p>Puedes cambiar esto a cualquier otra frase o nombre para activar a PAL cuando la llames de esa manera.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Voz de PAL<\/h3>\n\n\n\n<p>Usa la muestra de audio \"<strong>PAL_full<\/strong>\" abajo (tambi\u00e9n en el repositorio de github en <strong>\/mp3<\/strong>) como audio de referencia para la clonaci\u00f3n de voz de <strong>CoquiAI-TTS v2<\/strong> y genera tus propias voces:<\/p>\n\n\n\n<p><a href=\"https:\/\/huggingface.co\/spaces\/coqui\/xtts\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/huggingface.co\/spaces\/coqui\/xtts<\/a><\/p>\n\n\n\n<figure class=\"wp-block-audio\"><audio controls src=\"https:\/\/theroamingworkshop.cloud\/b\/wp-content\/uploads\/2024\/01\/PAL_full.mp3\"><\/audio><\/figure>\n\n\n<div class=\"wp-block-image\">\n<figure data-wp-context=\"{&quot;imageId&quot;:&quot;6a5dc23b4593d&quot;}\" data-wp-interactive=\"core\/image\" data-wp-key=\"6a5dc23b4593d\" class=\"aligncenter size-large wp-lightbox-container\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"575\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on--click=\"actions.showLightbox\" data-wp-on--load=\"callbacks.setButtonStyles\" data-wp-on-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/theroamingworkshop.cloud\/b\/wp-content\/uploads\/2024\/01\/CoquiAI-XTTS-1024x575.png\" alt=\"\" class=\"wp-image-2715\" srcset=\"https:\/\/theroamingworkshop.cloud\/b\/wp-content\/uploads\/2024\/01\/CoquiAI-XTTS-1024x575.png 1024w, https:\/\/theroamingworkshop.cloud\/b\/wp-content\/uploads\/2024\/01\/CoquiAI-XTTS-300x169.png 300w, https:\/\/theroamingworkshop.cloud\/b\/wp-content\/uploads\/2024\/01\/CoquiAI-XTTS-768x432.png 768w, https:\/\/theroamingworkshop.cloud\/b\/wp-content\/uploads\/2024\/01\/CoquiAI-XTTS-1536x863.png 1536w, https:\/\/theroamingworkshop.cloud\/b\/wp-content\/uploads\/2024\/01\/CoquiAI-XTTS-676x380.png 676w, https:\/\/theroamingworkshop.cloud\/b\/wp-content\/uploads\/2024\/01\/CoquiAI-XTTS.png 1589w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><button\n\t\t\tclass=\"lightbox-trigger\"\n\t\t\ttype=\"button\"\n\t\t\taria-haspopup=\"dialog\"\n\t\t\taria-label=\"Agrandar\"\n\t\t\tdata-wp-init=\"callbacks.initTriggerButton\"\n\t\t\tdata-wp-on--click=\"actions.showLightbox\"\n\t\t\tdata-wp-style--right=\"state.imageButtonRight\"\n\t\t\tdata-wp-style--top=\"state.imageButtonTop\"\n\t\t>\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewBox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\" \/>\n\t\t\t<\/svg>\n\t\t<\/button><\/figure>\n<\/div>\n\n\n<p style=\"border-left:3px solid orange;padding-left:5px;font-size:16px;\"><b>TIP! <\/b><br>Comprueba este otro post sobre clonaci\u00f3n de voz con CoquiAI-XTTS:<br> <a href=\"https:\/\/theroamingworkshop.cloud\/b\/2429\" target=\"_blank\" rel=\"noopener\">https:\/\/theroamingworkshop.cloud\/b\/2429<\/a><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Demo<\/h2>\n\n\n\n<p>A continuaci\u00f3n hay algunos ejemplos de consultas y respuestas de <strong>PAL<\/strong>:<\/p>\n\n\n\n<figure class=\"wp-block-video aligncenter\"><video height=\"1080\" style=\"aspect-ratio: 1920 \/ 1080;\" width=\"1920\" controls src=\"https:\/\/theroamingworkshop.cloud\/b\/wp-content\/uploads\/2024\/01\/PAL_lightsON.mp4\"><\/video><figcaption class=\"wp-element-caption\">\"Hey PAL, turn on the lights!\"<\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-block-video aligncenter\"><video height=\"1080\" style=\"aspect-ratio: 1920 \/ 1080;\" width=\"1920\" controls src=\"https:\/\/theroamingworkshop.cloud\/b\/wp-content\/uploads\/2024\/01\/PAL_lightsOFF.mp4\"><\/video><figcaption class=\"wp-element-caption\">\"Hey PAL, turn the lights off\"<\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-block-video aligncenter\"><video height=\"1080\" style=\"aspect-ratio: 1920 \/ 1080;\" width=\"1920\" controls src=\"https:\/\/theroamingworkshop.cloud\/b\/wp-content\/uploads\/2024\/01\/PAL_weather-1.mp4\"><\/video><figcaption class=\"wp-element-caption\">\"Hey PAL, what's the weather like?\"<\/figcaption><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"future-releases\">Futuros lanzamientos (To-Do list)<\/h2>\n\n\n\n<p>Ir\u00e9 desarrollando estas caracter\u00edsticas en mi asistente personal, e ir\u00e9 actualizando la versi\u00f3n de c\u00f3digo abierto de vez en cuando. Ponte en contacto via github si tienes especial inter\u00e9s en alguna de ellas:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Men\u00fa avanzado: a\u00f1adir configuraci\u00f3n y comandos manuales.<\/li>\n\n\n\n<li>Dispositivos IoT: incluir todos los comandos HTTP de Shelly y Sonoff.<\/li>\n\n\n\n<li>Consultar la hora: requiere clonar la voz de todas las combinaciones de n\u00fameros...<\/li>\n\n\n\n<li>Consulta de Wikipedia\/internet: requiere generar voz en tiempo real...<\/li>\n\n\n\n<li>Mejoradas animaciones \/ temas.<\/li>\n<\/ul>\n\n\n\n<p>Comentarios, problemas o mejoras, me encantar\u00e1 recibirlos en github o Twitter!<\/p>\n\n\n\n<p>\ud83d\udc26 <code><a rel=\"noreferrer noopener\" href=\"https:\/\/twitter.com\/roamingworkshop\" target=\"_blank\">@RoamingWorkshop<\/a><\/code><\/p>\n","protected":false},"excerpt":{"rendered":"<p>PAL es una versi\u00f3n simplificada de mi asistente del hogar en python, que se ejecuta en una placa UNIHIKER de DFRobot, y que lanzo en c\u00f3digo abierto gratuito. Esta es solo una peque\u00f1a demostraci\u00f3n de la simplicidad de la ejecuci\u00f3n de comandos con reconocimiento de voz en python, y con suerte servir\u00e1 de gu\u00eda para [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":2547,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[607,66,45],"tags":[704,654,417,419,706,708,710,712,423,714,716,718,658,720],"class_list":["post-2569","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-demos","category-electronica","category-programas","tag-asistente-inteligente-es","tag-dfrobot-es","tag-electronica-es","tag-electronics-es","tag-home-assistant-es","tag-http-es","tag-internet-de-las-cosas-es","tag-internet-of-things-es","tag-iot-es","tag-python-es","tag-reconocimiento-de-voz-es","tag-smart-home-es","tag-unihiker-es","tag-voice-recognition-es","post-preview"],"_links":{"self":[{"href":"https:\/\/theroamingworkshop.cloud\/b\/wp-json\/wp\/v2\/posts\/2569","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/theroamingworkshop.cloud\/b\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/theroamingworkshop.cloud\/b\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/theroamingworkshop.cloud\/b\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/theroamingworkshop.cloud\/b\/wp-json\/wp\/v2\/comments?post=2569"}],"version-history":[{"count":12,"href":"https:\/\/theroamingworkshop.cloud\/b\/wp-json\/wp\/v2\/posts\/2569\/revisions"}],"predecessor-version":[{"id":2724,"href":"https:\/\/theroamingworkshop.cloud\/b\/wp-json\/wp\/v2\/posts\/2569\/revisions\/2724"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/theroamingworkshop.cloud\/b\/wp-json\/wp\/v2\/media\/2547"}],"wp:attachment":[{"href":"https:\/\/theroamingworkshop.cloud\/b\/wp-json\/wp\/v2\/media?parent=2569"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/theroamingworkshop.cloud\/b\/wp-json\/wp\/v2\/categories?post=2569"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/theroamingworkshop.cloud\/b\/wp-json\/wp\/v2\/tags?post=2569"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}