{"id":33046,"date":"2019-10-31T21:50:27","date_gmt":"2019-10-31T18:50:27","guid":{"rendered":"https:\/\/prohoster.info\/blog\/vizualnoe-programmirovanie-dlya-sonoff-basic\/"},"modified":"2019-10-31T21:50:27","modified_gmt":"2019-10-31T18:50:27","slug":"vizualnoe-programmirovanie-dlya-sonoff-basic","status":"publish","type":"post","link":"https:\/\/prohoster.info\/es\/blog\/administrirovanie\/vizualnoe-programmirovanie-dlya-sonoff-basic","title":{"rendered":"Programaci\u00f3n visual para Sonoff Basic","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Programaci\u00f3n visual para Sonoff Basic\" src=\"\/wp-content\/uploads\/2019\/05\/0682cb274648d8a8d16b17bced0116d7.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nArt\u00edculo sobre c\u00f3mo convertir un dispositivo chino barato en un controlador l\u00f3gico programable. Este dispositivo encontrar\u00e1 aplicaci\u00f3n tanto en la automatizaci\u00f3n dom\u00e9stica como en actividades pr\u00e1cticas de inform\u00e1tica escolar.<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\n<em>Para su informaci\u00f3n, por defecto, el programa Sonoff Basic funciona con una aplicaci\u00f3n m\u00f3vil a trav\u00e9s de un servicio en la nube chino; despu\u00e9s de la modificaci\u00f3n propuesta, toda la interacci\u00f3n posterior con este dispositivo ser\u00e1 posible a trav\u00e9s del navegador.<\/em> <\/p>\n<h2>Secci\u00f3n I. Conexi\u00f3n de Sonoff al servicio MGT24<\/h2>\n<p><\/p>\n<h3>Paso 1. Creaci\u00f3n del panel de control<\/h3>\n<p>\nReg\u00edstrese en el sitio web <noindex><a rel=\"nofollow\" href=\"http:\/\/mgt24.ru\">mgt24<\/a><\/noindex> (si a\u00fan no est\u00e1 registrado) e inicie sesi\u00f3n con su cuenta.<br \/>\n<b class=\"spoiler_title\">Inicio de sesi\u00f3n<\/b><img decoding=\"async\" alt=\"Programaci\u00f3n visual para Sonoff Basic\" src=\"\/wp-content\/uploads\/2019\/05\/e9b310a7cb7d2da90ac8161407944a8c.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nPara crear un panel de control para un nuevo dispositivo, haga clic en el bot\u00f3n &#171;+&#187;.<br \/>\n<b class=\"spoiler_title\">Ejemplo de creaci\u00f3n de panel<\/b><img decoding=\"async\" alt=\"Programaci\u00f3n visual para Sonoff Basic\" src=\"\/wp-content\/uploads\/2019\/05\/dc10d7009ea65c72714c2ccd2314ed0b.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDespu\u00e9s de que el panel sea creado, aparecer\u00e1 en la lista de sus paneles.<\/p>\n<p>En la pesta\u00f1a \u00abInstalaci\u00f3n\u00bb del panel creado, encuentre los campos \u00abID del dispositivo\u00bb y \u00abClave de autorizaci\u00f3n\u00bb, esta informaci\u00f3n ser\u00e1 necesaria m\u00e1s adelante para la configuraci\u00f3n del dispositivo Sonoff.<br \/>\n<b class=\"spoiler_title\">Ejemplo de pesta\u00f1a<\/b><img decoding=\"async\" alt=\"Programaci\u00f3n visual para Sonoff Basic\" src=\"\/wp-content\/uploads\/2019\/05\/f6cc6f1f469c6278c38c4c63288d9ba2.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h3>Paso 2. Reprogramaci\u00f3n del dispositivo<\/h3>\n<p>\nCon la utilidad <noindex><a rel=\"nofollow\" href=\"https:\/\/esp8266.ru\/download\/esp8266-utils\/XTCOM_UTIL.zip\">XTCOM_UTIL<\/a><\/noindex> cargue el firmware <noindex><a rel=\"nofollow\" href=\"http:\/\/mgt24.ru\/en\/docs\/firmware\/plc_basic.bin\">PLC Sonoff Basic<\/a><\/noindex> en el dispositivo, para ello necesitar\u00e1 un convertidor USB-TTL. Aqu\u00ed <noindex><a rel=\"nofollow\" href=\"https:\/\/esp8266.ru\/esp8266-obnovlenie-proshivki-xtcom_util\/\">las instrucciones<\/a><\/noindex> y <noindex><a rel=\"nofollow\" href=\"http:\/\/mgt24.ru\/en\/docs\/#!sonoff.md#%D0%9F%D0%B5%D1%80%D0%B5%D0%BF%D1%80%D0%BE%D1%88%D0%B8%D0%B2%D0%BA%D0%B0_Sonoff_%D1%81_%D0%BF%D0%BE%D0%BC%D0%BE%D1%89%D1%8C%D1%8E_\">hay una instrucci\u00f3n en video<\/a><\/noindex>.<\/p>\n<h3>Paso 3. Configuraci\u00f3n del dispositivo<\/h3>\n<p>\nConecte el dispositivo a la alimentaci\u00f3n, despu\u00e9s de que el LED se encienda, presione el bot\u00f3n y mant\u00e9ngalo presionado hasta que el LED comience a parpadear de manera uniforme y peri\u00f3dica.<br \/>\nEn este momento aparecer\u00e1 una nueva red Wi-Fi llamada \u00abPLC Sonoff Basic\u00bb, conecte su computadora a esta red.<br \/>\n<b class=\"spoiler_title\">Interpretaci\u00f3n de la indicaci\u00f3n del LED<\/b><\/p>\n<p>Indicaci\u00f3n del LED<br \/>\nEstado del dispositivo<\/p>\n<p>parpadeo doble peri\u00f3dico<br \/>\nsin conexi\u00f3n con el enrutador<\/p>\n<p>se mantiene encendido<br \/>\nconexi\u00f3n establecida con el enrutador<\/p>\n<p>parpadeo uniforme peri\u00f3dico<br \/>\nmodo de punto de acceso Wi-Fi<\/p>\n<p>apagado<br \/>\nsin alimentaci\u00f3n<\/p>\n<p>Abra un navegador de Internet e introduzca en la barra de direcciones el texto \u00ab192.168.4.1\u00bb, acceda a la p\u00e1gina de configuraci\u00f3n de par\u00e1metros de red del dispositivo.<\/p>\n<p>Rellene los campos de la siguiente manera:<\/p>\n<ul>\n<li>\u00abNombre de la red\u00bb y \u00abContrase\u00f1a\u00bb (para vincular el dispositivo al enrutador Wi-Fi dom\u00e9stico).<\/li>\n<li>\u00abID del dispositivo\u00bb y \u00abClave de autorizaci\u00f3n\u00bb (para la autorizaci\u00f3n del dispositivo en el servicio MGT24).<\/li>\n<\/ul>\n<p>\n<b class=\"spoiler_title\">Ejemplo de configuraci\u00f3n de par\u00e1metros de red del dispositivo<\/b><img decoding=\"async\" alt=\"Programaci\u00f3n visual para Sonoff Basic\" src=\"\/wp-content\/uploads\/2019\/05\/47d02b3883ce3896157da4dcc4fe7f40.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nGuarde la configuraci\u00f3n y reinicie el dispositivo.<br \/>\nAqu\u00ed <noindex><a rel=\"nofollow\" href=\"https:\/\/youtu.be\/XTzGJI7y7t8?t=376\">hay una instrucci\u00f3n en video<\/a><\/noindex>.<\/p>\n<h3>Paso 4. Conexi\u00f3n de sensores (opcional)<\/h3>\n<p>\nEl firmware actual admite hasta cuatro sensores de temperatura ds18b20. Aqu\u00ed <noindex><a rel=\"nofollow\" href=\"http:\/\/mgt24.ru\/en\/docs\/#!sonoff.md#%D0%9F%D0%BE%D0%B4%D0%BA%D0%BB%D1%8E%D1%87%D0%B5%D0%BD%D0%B8%D0%B5_%D1%82%D0%B5%D1%80%D0%BC%D0%BE%D0%B4%D0%B0%D1%82%D1%87%D0%B8%D0%BA%D0%B0_ds18b20_%D0%BA_Sonoff,_%D0%BC%D0%BE%D0%BD%D1%82%D0%B0%D0%B6%D0%BD%D1%8B%D0%B5_%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D1%8B\">hay una instrucci\u00f3n en video<\/a><\/noindex> hay informaci\u00f3n sobre la instalaci\u00f3n de los sensores. Este paso puede ser el m\u00e1s complicado, ya que requerir\u00e1 de destreza manual y un soldador.<\/p>\n<h2>Secci\u00f3n II. Programaci\u00f3n visual<\/h2>\n<p><\/p>\n<h3>Paso 1. Creaci\u00f3n de guiones<\/h3>\n<p>\nSe utiliza como entorno de programaci\u00f3n <noindex><a rel=\"nofollow\" href=\"https:\/\/developers.google.com\/blockly\/\">Blockly<\/a><\/noindex>, un entorno que es f\u00e1cil de aprender, por lo que no es necesario ser programador para crear guiones simples.<\/p>\n<p>He a\u00f1adido bloques especializados para leer y escribir los par\u00e1metros del dispositivo. El acceso a cualquier par\u00e1metro se realiza por su nombre. Para los par\u00e1metros de dispositivos remotos se utilizan nombres compuestos: \u00abpar\u00e1metro@dispositivo\u00bb.<br \/>\n<b class=\"spoiler_title\">Lista desplegable de par\u00e1metros<\/b><img decoding=\"async\" alt=\"Programaci\u00f3n visual para Sonoff Basic\" src=\"\/wp-content\/uploads\/2019\/05\/6ba0f789a4d3e0a394f4773d2c401416.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Ejemplo de un guion de encendido y apagado c\u00edclico de carga (1 Hz):<br \/>\n<img decoding=\"async\" alt=\"Programaci\u00f3n visual para Sonoff Basic\" src=\"\/wp-content\/uploads\/2019\/05\/66876fcb1d029b1a06098a8f2118bba7.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nEjemplo de un guion que sincroniza el funcionamiento de dos dispositivos separados. Es decir, el rel\u00e9 del dispositivo objetivo repite el funcionamiento del rel\u00e9 del dispositivo remoto.<br \/>\n<img decoding=\"async\" alt=\"Programaci\u00f3n visual para Sonoff Basic\" src=\"\/wp-content\/uploads\/2019\/05\/a44e81ce1301c7908ac9fa7437785162.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nGuion para un termostato (sin hist\u00e9resis):<br \/>\n<img decoding=\"async\" alt=\"Programaci\u00f3n visual para Sonoff Basic\" src=\"\/wp-content\/uploads\/2019\/05\/0efa8a8f5e67f5ffd0812af5a2cececa.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nPara crear guiones m\u00e1s complejos, se pueden utilizar variables, ciclos, funciones (con argumentos) y otras construcciones. No detallar\u00e9 todo esto aqu\u00ed, ya que hay bastante <noindex><a rel=\"nofollow\" href=\"http:\/\/blockly.ru\/\">material did\u00e1ctico sobre Blockly<\/a><\/noindex>.<\/p>\n<h3>Paso 2. Orden de ejecuci\u00f3n de los guiones<\/h3>\n<p>\nEl guion se ejecuta de manera continua, y una vez que llega a su final, se reinicia. Hay dos bloques que pueden interrumpir temporalmente la ejecuci\u00f3n del guion: \u00abdelay\u00bb y \u00abpause\u00bb.<br \/>\nEl bloque \u00abdelay\u00bb se utiliza para retrasos en milisegundos o microsegundos. Este bloque mantiene estrictamente el intervalo de tiempo, bloqueando el funcionamiento de todo el dispositivo. <br \/>\nEl bloque \u00abpause\u00bb se utiliza para retrasos en segundos (o menos), y no bloquea la ejecuci\u00f3n de otros procesos en el dispositivo.<br \/>\nSi el guion contiene un bucle infinito sin un \u00abpause\u00bb dentro, el int\u00e9rprete iniciar\u00e1 autom\u00e1ticamente una peque\u00f1a pausa.<br \/>\nEn caso de agotarse la pila de memoria asignada, el int\u00e9rprete detendr\u00e1 la ejecuci\u00f3n de tal guion voraz (ten cuidado con las funciones recursivas).<\/p>\n<h3>Paso 3. Depuraci\u00f3n de guiones<\/h3>\n<p>\nPara depurar un script ya cargado en el dispositivo, se puede iniciar la trazabilidad del programa paso a paso. Esto es extremadamente \u00fatil cuando el comportamiento del script resulta ser diferente de lo que el autor pens\u00f3. En este caso, la trazabilidad permite al autor encontrar r\u00e1pidamente la fuente del problema y corregir el error en el script.<\/p>\n<p>Script para calcular el factorial en modo de depuraci\u00f3n:<br \/>\n<img decoding=\"async\" alt=\"Programaci\u00f3n visual para Sonoff Basic\" src=\"\/wp-content\/uploads\/2019\/05\/ea6e23729fd530b79b89c9481e78bd64.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nLa herramienta de depuraci\u00f3n es muy simple y consta de tres botones principales: \u00abiniciar\u00bb, \u00abun paso adelante\u00bb y \u00abdetener\u00bb (sin olvidar \u00abentrada\u00bb y \u00absalida\u00bb del modo de depuraci\u00f3n). Adem\u00e1s de la trazabilidad paso a paso, se puede establecer un punto de interrupci\u00f3n en cualquier bloque (haciendo clic con el rat\u00f3n sobre el bloque).<br \/>\nPara mostrar en el monitor los valores actuales de los par\u00e1metros (sensores, rel\u00e9s), utilice el bloque \u00abprint\u00bb.<br \/>\nAqu\u00ed <noindex><a rel=\"nofollow\" href=\"https:\/\/youtu.be\/2mK6gvqe_18\">video resumen<\/a><\/noindex> sobre el uso del depurador.<\/p>\n<h2>Secci\u00f3n para los curiosos. \u00bfQu\u00e9 hay debajo del cap\u00f3?<\/h2>\n<p>\nPara que los scripts funcionen en el dispositivo de destino, se desarroll\u00f3 un int\u00e9rprete de bytecode y un ensamblador con 38 instrucciones. En el c\u00f3digo fuente de blockly se integr\u00f3 un generador de c\u00f3digo especializado que convierte bloques visuales en instrucciones de ensamblador. Posteriormente, este programa ensamblador se transforma en bytecode y se env\u00eda al dispositivo para su ejecuci\u00f3n.<br \/>\nLa arquitectura de esta m\u00e1quina virtual es bastante simple y no tiene demasiado sentido describirla; en la red encontrar\u00e1 muchos art\u00edculos sobre el dise\u00f1o de m\u00e1quinas virtuales simples.<br \/>\nNormalmente asigno 1000 bytes para el stack de mi m\u00e1quina virtual, lo cual es m\u00e1s que suficiente. Por supuesto, las recursiones profundas pueden agotar cualquier stack, pero dif\u00edcilmente tendr\u00e1n una aplicaci\u00f3n pr\u00e1ctica.<\/p>\n<p>El bytecode final resulta ser bastante compacto. Como ejemplo, el bytecode para calcular el mismo factorial consta de solo 49 bytes. Esta es su forma visual de presentaci\u00f3n:<br \/>\n<img decoding=\"async\" alt=\"Programaci\u00f3n visual para Sonoff Basic\" src=\"\/wp-content\/uploads\/2019\/05\/1c6a8b693cbf2131f1f1369d97ad034b.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nY este es su programa en ensamblador:<\/p>\n<pre><code class=\"javascript\">shift -1\nldi 10\ncall factorial, 1\nprint\nexit\n:factorial\nld_arg 0\nldi 1\ngt\nje 8\nld_arg 0\nld_arg 0\nldi 1\nsub\ncall factorial, 1\nmul\nret\nldi 1\nret\n<\/code><\/pre>\n<p>Si la forma de presentaci\u00f3n en ensamblador no tiene un valor pr\u00e1ctico, por el contrario, la pesta\u00f1a \u00abjavascrit\u00bb ofrece una apariencia m\u00e1s familiar que los bloques visuales:<\/p>\n<pre><code class=\"javascript\">function factorial(num) {\n  if (num &gt; 1) {\n    return num + factorial(num - 1);\n  }\n  return 1;\n}\n\nwindow.alert(factorial(10));\n<\/code><\/pre>\n<p>En cuanto al rendimiento. Al ejecutar un simple script de parpadeo, obtuve una onda cuadrada de 47 kHz en la pantalla del osciloscopio (con una frecuencia de reloj del procesador de 80 MHz).<br \/>\n<img decoding=\"async\" alt=\"Programaci\u00f3n visual para Sonoff Basic\" src=\"\/wp-content\/uploads\/2019\/05\/961a50c7ef269265443e078a1a81291a.jpg\" style=\"display:block;margin: 0 auto;\" \/><img decoding=\"async\" alt=\"Programaci\u00f3n visual para Sonoff Basic\" src=\"\/wp-content\/uploads\/2019\/05\/a416044b4cea01121e04e27ae7d1fef2.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nConsidero que es un buen resultado, al menos esta velocidad es casi diez veces m\u00e1s r\u00e1pida que la de <noindex><a rel=\"nofollow\" href=\"http:\/\/esp8266freq.blogspot.com\/2016\/12\/esp-speed-compare-in-lua-micropython.html\">Lua<\/a><\/noindex> y <noindex><a rel=\"nofollow\" href=\"https:\/\/www.espruino.com\/Performance\">Espruino<\/a><\/noindex>.<\/p>\n<h2>Parte final<\/h2>\n<p>\nEn resumen, dir\u00e9 que el uso de scripts no solo nos permite programar la l\u00f3gica de funcionamiento de un dispositivo individual, sino que tambi\u00e9n brinda la posibilidad de conectar varios dispositivos en un solo mecanismo, donde unos dispositivos influyen en el comportamiento de otros. <br \/>\nTambi\u00e9n se\u00f1alar\u00e9 que el m\u00e9todo elegido para almacenar los scripts (directamente en los dispositivos y no en el servidor) simplifica el cambio de dispositivos ya en funcionamiento a otro servidor, como un Raspberry en casa, aqu\u00ed <noindex><a rel=\"nofollow\" href=\"http:\/\/mgt24.ru\/en\/docs\/#!raspberry.md\">las instrucciones<\/a><\/noindex>.<\/p>\n<p><i>Eso es todo, estar\u00e9 encantado de escuchar consejos y cr\u00edticas constructivas.<\/i><br \/>\n<br \/>Fuente: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/436272\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0421\u0442\u0430\u0442\u044c\u044f \u043e \u0442\u043e\u043c, \u043a\u0430\u043a \u0438\u0437 \u0434\u0435\u0448\u0451\u0432\u043e\u0433\u043e \u043a\u0438\u0442\u0430\u0439\u0441\u043a\u043e\u0433\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u0443\u0435\u043c\u044b\u0439 \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440. \u0422\u0430\u043a\u043e\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u043d\u0430\u0439\u0434\u0451\u0442 \u0441\u0432\u043e\u0451 \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u043a\u0430\u043a \u0432 \u0434\u043e\u043c\u0430\u0448\u043d\u0435\u0439 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0446\u0438\u0438, \u0442\u0430\u043a \u0438 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0437\u0430\u043d\u044f\u0442\u0438\u0439 \u043f\u043e \u0448\u043a\u043e\u043b\u044c\u043d\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0442\u0438\u043a\u0435. \u0414\u043b\u044f \u0441\u043f\u0440\u0430\u0432\u043a\u0438, \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 Sonoff Basic \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0441 \u043c\u043e\u0431\u0438\u043b\u044c\u043d\u044b\u043c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435\u043c \u0447\u0435\u0440\u0435\u0437 \u043a\u0438\u0442\u0430\u0439\u0441\u043a\u0438\u0439 \u043e\u0431\u043b\u0430\u0447\u043d\u044b\u0439 \u0441\u0435\u0440\u0432\u0438\u0441, \u043f\u043e\u0441\u043b\u0435 \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0435\u043c\u043e\u0439 \u043f\u0435\u0440\u0435\u0434\u0435\u043b\u043a\u0438, \u0432\u0441\u0451 \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u0435 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 \u0441 \u044d\u0442\u0438\u043c \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e\u043c \u0441\u0442\u0430\u043d\u0435\u0442 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":24803,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-33046","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.2 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u0421\u0442\u0430\u0442\u044c\u044f \u043e \u0442\u043e\u043c, \u043a\u0430\u043a \u0438\u0437 \u0434\u0435\u0448\u0451\u0432\u043e\u0433\u043e \u043a\u0438\u0442\u0430\u0439\u0441\u043a\u043e\u0433\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/es\/blog\/administrirovanie\/vizualnoe-programmirovanie-dlya-sonoff-basic\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.2\" \/>\n\t\t<meta property=\"og:locale\" content=\"es_ES\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u0412\u0438\u0437\u0443\u0430\u043b\u044c\u043d\u043e\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0434\u043b\u044f Sonoff Basic | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u0421\u0442\u0430\u0442\u044c\u044f \u043e \u0442\u043e\u043c, \u043a\u0430\u043a \u0438\u0437 \u0434\u0435\u0448\u0451\u0432\u043e\u0433\u043e \u043a\u0438\u0442\u0430\u0439\u0441\u043a\u043e\u0433\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/es\/blog\/administrirovanie\/vizualnoe-programmirovanie-dlya-sonoff-basic\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2019-10-31T18:50:27+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2019-10-31T18:50:27+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Programaci\u00f3n visual para Sonoff Basic | ProHoster","description":"Art\u00edculo sobre c\u00f3mo a partir de un dispositivo chino barato.","canonical_url":"https:\/\/prohoster.info\/es\/blog\/administrirovanie\/vizualnoe-programmirovanie-dlya-sonoff-basic","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"es_ES","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u0412\u0438\u0437\u0443\u0430\u043b\u044c\u043d\u043e\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0434\u043b\u044f Sonoff Basic | ProHoster","og:description":"\u0421\u0442\u0430\u0442\u044c\u044f \u043e \u0442\u043e\u043c, \u043a\u0430\u043a \u0438\u0437 \u0434\u0435\u0448\u0451\u0432\u043e\u0433\u043e \u043a\u0438\u0442\u0430\u0439\u0441\u043a\u043e\u0433\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430.","og:url":"https:\/\/prohoster.info\/es\/blog\/administrirovanie\/vizualnoe-programmirovanie-dlya-sonoff-basic","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2019-10-31T18:50:27+00:00","article:modified_time":"2019-10-31T18:50:27+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"33046","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":"2026-01-21 13:45:19","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-03-01 02:47:29","updated":"2026-01-21 13:45:19","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/posts\/33046","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/comments?post=33046"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/posts\/33046\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/media\/24803"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/media?parent=33046"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/categories?post=33046"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/tags?post=33046"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}