{"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\/ro\/blog\/administrirovanie\/vizualnoe-programmirovanie-dlya-sonoff-basic","title":{"rendered":"Programare vizual\u0103 pentru Sonoff Basic","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Programare vizual\u0103 pentru Sonoff Basic\" src=\"\/wp-content\/uploads\/2019\/05\/0682cb274648d8a8d16b17bced0116d7.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nUn articol despre cum s\u0103 transformi un dispozitiv chinezesc ieftin \u00eentr-un controler logic programabil. Un astfel de dispozitiv \u00ee\u0219i va g\u0103si aplica\u021bia at\u00e2t \u00een automatizarea de acas\u0103, c\u00e2t \u0219i ca activitate educa\u021bional\u0103 \u00een cadrul orelor de informatic\u0103.<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\n<em>Ca informa\u021bie, \u00een mod implicit, programul Sonoff Basic func\u021bioneaz\u0103 cu aplica\u021bia mobil\u0103 prin intermediul serviciului cloud chinezesc; dup\u0103 modificarea propus\u0103, toate interac\u021biunile ulterioare cu acest dispozitiv vor fi posibil\u0103 \u00een browser.<\/em> <\/p>\n<h2>Sec\u021biunea I. Conectarea Sonoff la serviciul MGT24<\/h2>\n<p><\/p>\n<h3>Pasul 1. Crearea unui panou de control<\/h3>\n<p>\n\u00cenregistra\u021bi-v\u0103 pe site-ul <noindex><a rel=\"nofollow\" href=\"http:\/\/mgt24.ru\">mgt24<\/a><\/noindex> (dac\u0103 nu sunte\u021bi deja \u00eenregistra\u021bi) \u0219i conecta\u021bi-v\u0103 la contul dumneavoastr\u0103.<br \/>\n<b class=\"spoiler_title\">Autentificare<\/b><img decoding=\"async\" alt=\"Programare vizual\u0103 pentru Sonoff Basic\" src=\"\/wp-content\/uploads\/2019\/05\/e9b310a7cb7d2da90ac8161407944a8c.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nPentru a crea un panou de control pentru un nou dispozitiv, ap\u0103sa\u021bi pe butonul &#171;+&#187;.<br \/>\n<b class=\"spoiler_title\">Exemplu de creare a unui panou<\/b><img decoding=\"async\" alt=\"Programare vizual\u0103 pentru Sonoff Basic\" src=\"\/wp-content\/uploads\/2019\/05\/dc10d7009ea65c72714c2ccd2314ed0b.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDup\u0103 ce panoul va fi creat, acesta va ap\u0103rea \u00een lista panourilor dumneavoastr\u0103.<\/p>\n<p>\u00cen tab-ul \u201eInstalare\u201d al panoului creat, c\u0103uta\u021bi c\u00e2mpurile \u201eID dispozitiv\u201d \u0219i \u201eCheia de autorizare\u201d; aceste informa\u021bii vor fi necesare la configurarea dispozitivului Sonoff.<br \/>\n<b class=\"spoiler_title\">Exemplu de tab<\/b><img decoding=\"async\" alt=\"Programare vizual\u0103 pentru Sonoff Basic\" src=\"\/wp-content\/uploads\/2019\/05\/f6cc6f1f469c6278c38c4c63288d9ba2.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h3>Pasul 2. Reprogramarea dispozitivului<\/h3>\n<p>\nUtiliz\u00e2nd utilitarul <noindex><a rel=\"nofollow\" href=\"https:\/\/esp8266.ru\/download\/esp8266-utils\/XTCOM_UTIL.zip\">XTCOM_UTIL<\/a><\/noindex> \u00eenc\u0103rca\u021bi firmware-ul <noindex><a rel=\"nofollow\" href=\"http:\/\/mgt24.ru\/en\/docs\/firmware\/plc_basic.bin\">PLC Sonoff Basic<\/a><\/noindex> \u00een dispozitiv; pentru aceasta, ve\u021bi avea nevoie de un convertor USB-TTL. Aici <noindex><a rel=\"nofollow\" href=\"https:\/\/esp8266.ru\/esp8266-obnovlenie-proshivki-xtcom_util\/\">instruc\u021biunea<\/a><\/noindex> \u0219i <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_\">un videoclip instruc\u021bional<\/a><\/noindex>.<\/p>\n<h3>Pasul 3. Configurarea dispozitivului<\/h3>\n<p>\nAplica\u021bi alimentarea la dispozitiv; dup\u0103 ce LED-ul s-a aprins, ap\u0103sa\u021bi butonul \u0219i men\u021bine\u021bi-l ap\u0103sat p\u00e2n\u0103 c\u00e2nd LED-ul \u00eencepe s\u0103 clipeasc\u0103 uniform.<br \/>\n\u00cen acel moment, va ap\u0103rea o nou\u0103 re\u021bea wi-fi numit\u0103 \u201ePLC Sonoff Basic\u201d; conecta\u021bi computerul la aceast\u0103 re\u021bea.<br \/>\n<b class=\"spoiler_title\">Decodificarea indica\u021biei LED<\/b><\/p>\n<p>Indica\u021bia LED<br \/>\nStarea dispozitivului<\/p>\n<p>clipe\u0219te de dou\u0103 ori periodic<br \/>\nf\u0103r\u0103 conexiune la router<\/p>\n<p>lumineaz\u0103 continuu<br \/>\nconexiune stabilit\u0103 cu router-ul<\/p>\n<p>clipe\u0219te uniform periodic<br \/>\nmodul de acces point wi-fi<\/p>\n<p>stins<br \/>\nf\u0103r\u0103 alimentare<\/p>\n<p>Deschide\u021bi un browser de internet \u0219i introduce\u021bi \u00een bara de adrese textul \u201e192.168.4.1\u201d; accesa\u021bi pagina de set\u0103ri a parametrilor re\u021belei dispozitivului.<\/p>\n<p>Completa\u021bi c\u00e2mpurile astfel:<\/p>\n<ul>\n<li>\u201eNumele re\u021belei\u201d \u0219i \u201eParola\u201d (pentru a conecta dispozitivul la router-ul wi-fi de acas\u0103).<\/li>\n<li>\u201eID dispozitiv\u201d \u0219i \u201eCheia de autorizare\u201d (pentru autorizarea dispozitivului pe serviciul MGT24).<\/li>\n<\/ul>\n<p>\n<b class=\"spoiler_title\">Exemplu de set\u0103ri ale parametrilor re\u021belei dispozitivului<\/b><img decoding=\"async\" alt=\"Programare vizual\u0103 pentru Sonoff Basic\" src=\"\/wp-content\/uploads\/2019\/05\/47d02b3883ce3896157da4dcc4fe7f40.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nSalva\u021bi set\u0103rile \u0219i reporni\u021bi dispozitivul.<br \/>\nAici <noindex><a rel=\"nofollow\" href=\"https:\/\/youtu.be\/XTzGJI7y7t8?t=376\">un videoclip instruc\u021bional<\/a><\/noindex>.<\/p>\n<h3>Pasul 4. Conectarea senzorilor (op\u021bional)<\/h3>\n<p>\nFirmware-ul curent suport\u0103 p\u00e2n\u0103 la patru senzori de temperatur\u0103 ds18b20. Aici <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\">un videoclip instruc\u021bional<\/a><\/noindex> g\u0103si\u021bi informa\u021bii despre montarea senzorilor. Se pare c\u0103 acest pas va fi cel mai dificil, deoarece va necesita dexteritate manual\u0103 \u0219i un fier de lipit.<\/p>\n<h2>Partea II. Programarea vizual\u0103<\/h2>\n<p><\/p>\n<h3>Pasul 1. Crearea scenariilor<\/h3>\n<p>\nCa mediu de programare se folose\u0219te <noindex><a rel=\"nofollow\" href=\"https:\/\/developers.google.com\/blockly\/\">Blockly<\/a><\/noindex>, mediu u\u0219or de \u00eenv\u0103\u021bat, astfel \u00eenc\u00e2t pentru a crea scenarii simple nu este nevoie s\u0103 fi\u021bi programator.<\/p>\n<p>Am ad\u0103ugat blocuri specializate pentru citirea \u0219i scrierea parametrilor dispozitivului. Accesul la orice parametru se face dup\u0103 nume. Pentru parametrii dispozitivelor la distan\u021b\u0103 se folosesc nume compuse: \u201eparametru@dispozitiv\u201d.<br \/>\n<b class=\"spoiler_title\">Lista derulant\u0103 a parametrilor<\/b><img decoding=\"async\" alt=\"Programare vizual\u0103 pentru Sonoff Basic\" src=\"\/wp-content\/uploads\/2019\/05\/6ba0f789a4d3e0a394f4773d2c401416.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Exemplu de scenariu pentru activarea \u0219i dezactivarea ciclic\u0103 a unei sarcini (1Hz):<br \/>\n<img decoding=\"async\" alt=\"Programare vizual\u0103 pentru Sonoff Basic\" src=\"\/wp-content\/uploads\/2019\/05\/66876fcb1d029b1a06098a8f2118bba7.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nExemplu de scenariu care sincronizeaz\u0103 func\u021bionarea a dou\u0103 dispozitive separate. Anume, releul dispozitivului \u021bint\u0103 replic\u0103 activitatea releului dispozitivului la distan\u021b\u0103.<br \/>\n<img decoding=\"async\" alt=\"Programare vizual\u0103 pentru Sonoff Basic\" src=\"\/wp-content\/uploads\/2019\/05\/a44e81ce1301c7908ac9fa7437785162.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nScenariul pentru termostat (f\u0103r\u0103 histerezis):<br \/>\n<img decoding=\"async\" alt=\"Programare vizual\u0103 pentru Sonoff Basic\" src=\"\/wp-content\/uploads\/2019\/05\/0efa8a8f5e67f5ffd0812af5a2cececa.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nPentru a crea scenarii mai complexe, se pot folosi variabile, bucle, func\u021bii (cu argumente) \u0219i alte construc\u021bii. Nu voi detalia totul aici, pe internet sunt deja destule <noindex><a rel=\"nofollow\" href=\"http:\/\/blockly.ru\/\">materiale educa\u021bionale despre Blockly<\/a><\/noindex>.<\/p>\n<h3>Pasul 2. Ordinea de executare a scenariilor<\/h3>\n<p>\nScenariul func\u021bioneaz\u0103 \u00een mod continuu, iar odat\u0103 ce ajunge la final, se relanseaz\u0103. Exist\u0103 dou\u0103 blocuri care pot suspenda temporar func\u021bionarea scenariului: \u201edelay\u201d \u0219i \u201epause\u201d.<br \/>\nBlocul \u201edelay\u201d este folosit pentru \u00eent\u00e2rzieri \u00een milisecunde sau microsecunde. Acest bloc respect\u0103 strict intervalul de timp, bloc\u00e2nd func\u021bionarea \u00eentregului dispozitiv. <br \/>\nBlocul \u201epause\u201d este folosit pentru \u00eent\u00e2rzieri de c\u00e2teva secunde (poate chiar mai pu\u021bin), \u0219i nu blocheaz\u0103 executarea altor procese \u00een dispozitiv.<br \/>\nDac\u0103 scenariul con\u021bine un ciclu infinit, f\u0103r\u0103 a include un \u201epause\u201d \u00een interiorul s\u0103u, interpretul va ini\u021bia automat o mic\u0103 pauz\u0103.<br \/>\n\u00cen cazul \u00een care stiva de memorie alocat\u0103 se epuizeaz\u0103, interpretul va opri executarea unui astfel de scenariu \u201efoarte consumator\u201d (fi\u021bi aten\u021bi cu func\u021biile recursive).<\/p>\n<h3>Pasul 3. Depanarea scenariilor<\/h3>\n<p>\nPentru depanarea unui script deja \u00eenc\u0103rcat \u00een dispozitiv, se poate porni urm\u0103rirea programului pas cu pas. Acest lucru este extrem de util atunci c\u00e2nd comportamentul scriptului nu este a\u0219a cum a inten\u021bionat autorul. \u00cen acest caz, urm\u0103rirea permite autorului s\u0103 g\u0103seasc\u0103 rapid sursa problemei \u0219i s\u0103 corecteze eroarea din script.<\/p>\n<p>Scriptul de calcul al factorialului \u00een modul de depanare:<br \/>\n<img decoding=\"async\" alt=\"Programare vizual\u0103 pentru Sonoff Basic\" src=\"\/wp-content\/uploads\/2019\/05\/ea6e23729fd530b79b89c9481e78bd64.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nInstrumentul de depanare este foarte simplu \u0219i const\u0103 din trei butoane principale: \u00abstart\u00bb, \u00abun pas \u00eenainte\u00bb \u0219i \u00aboprire\u00bb (s\u0103 nu uit\u0103m de \u00abintrare\u00bb \u0219i \u00abie\u0219ire\u00bb din modul de depanare). Pe l\u00e2ng\u0103 urm\u0103rirea pas cu pas, se poate stabili un punct de oprire pe orice bloc (clic pe bloc).<br \/>\nPentru a afi\u0219a pe monitor valorile curente ale parametrilor (senzori, relee), utiliza\u021bi blocul \u00abprint\u00bb.<br \/>\nAici <noindex><a rel=\"nofollow\" href=\"https:\/\/youtu.be\/2mK6gvqe_18\">video de prezentare<\/a><\/noindex> despre utilizarea debugger-ului.<\/p>\n<h2>Sec\u021biune pentru curio\u0219i. Ce se afl\u0103 sub capot\u0103?<\/h2>\n<p>\nPentru ca scripturile s\u0103 func\u021bioneze pe dispozitivul \u021bint\u0103, a fost dezvoltat un interpret de bytecode \u0219i un asamblor cu 38 de instruc\u021biuni. \u00cen codul surs\u0103 blockly a fost integrat un generator de cod specializat care converte\u0219te blocurile vizuale \u00een instruc\u021biuni de asamblare. Ulterior, acest program de asamblare este transformat \u00een bytecode \u0219i trimis dispozitivului pentru execu\u021bie.<br \/>\nArhitectura acestei ma\u0219ini virtuale este destul de simpl\u0103 \u0219i nu are sens s\u0103 o descriem \u00een detaliu, pe internet ve\u021bi g\u0103si multe articole despre proiectarea celor mai simple ma\u0219ini virtuale.<br \/>\nPentru stiva ma\u0219inii mele virtuale, obisnuiesc s\u0103 aloc 1000 de bytes, ceea ce este suficient. Desigur, recursiile profunde pot epuiza orice stiv\u0103, dar este pu\u021bin probabil s\u0103 aib\u0103 vreo aplicabilitate practic\u0103.<\/p>\n<p>Bytecode-ul final este destul de compact. Ca exemplu, bytecode-ul pentru calculul aceluia\u0219i factorial este de doar 49 de bytes. Aceasta este forma sa vizual\u0103 de prezentare:<br \/>\n<img decoding=\"async\" alt=\"Programare vizual\u0103 pentru Sonoff Basic\" src=\"\/wp-content\/uploads\/2019\/05\/1c6a8b693cbf2131f1f1369d97ad034b.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n\u0218i aceasta este programul s\u0103u de asamblare:<\/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>Dac\u0103 forma de asamblare nu are o valoare practic\u0103, atunci tab-ul \u00abjavascript\u00bb, dimpotriv\u0103, ofer\u0103 o form\u0103 mai familiar\u0103 dec\u00e2t blocurile vizuale:<\/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>\u00cen ceea ce prive\u0219te performan\u021ba. C\u00e2nd am rulat cel mai simplu scenariu al luminii intermitente, pe ecranul osciloscopului am ob\u021binut un meandru de 47 kHz (la o frecven\u021b\u0103 de ceas a procesorului de 80 MHz).<br \/>\n<img decoding=\"async\" alt=\"Programare vizual\u0103 pentru Sonoff Basic\" src=\"\/wp-content\/uploads\/2019\/05\/961a50c7ef269265443e078a1a81291a.jpg\" style=\"display:block;margin: 0 auto;\" \/><img decoding=\"async\" alt=\"Programare vizual\u0103 pentru Sonoff Basic\" src=\"\/wp-content\/uploads\/2019\/05\/a416044b4cea01121e04e27ae7d1fef2.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nConsider c\u0103 acesta este un rezultat bun, cel pu\u021bin aceast\u0103 vitez\u0103 este aproape de zece ori mai rapid\u0103 dec\u00e2t <noindex><a rel=\"nofollow\" href=\"http:\/\/esp8266freq.blogspot.com\/2016\/12\/esp-speed-compare-in-lua-micropython.html\">Lua<\/a><\/noindex> \u0219i <noindex><a rel=\"nofollow\" href=\"https:\/\/www.espruino.com\/Performance\">Espruino<\/a><\/noindex>.<\/p>\n<h2>Partea final\u0103<\/h2>\n<p>\n\u00cen concluzie, a\u0219 spune c\u0103 utilizarea scenariilor ne permite nu doar s\u0103 program\u0103m logica de func\u021bionare a unui dispozitiv individual, ci \u0219i s\u0103 conect\u0103m mai multe dispozitive \u00eentr-un singur mecanism, unde unele dispozitive influen\u021beaz\u0103 comportamentul altora. <br \/>\nDe asemenea, voi men\u021biona c\u0103 metoda aleas\u0103 de stocare a scenariilor (direct \u00een dispozitive, nu pe server) faciliteaz\u0103 trecerea dispozitivelor func\u021bion\u00e2nd deja pe un alt server, de exemplu, pe un Raspberry acas\u0103, aici <noindex><a rel=\"nofollow\" href=\"http:\/\/mgt24.ru\/en\/docs\/#!raspberry.md\">instruc\u021biunea<\/a><\/noindex>.<\/p>\n<p><i>\u00cenchei aici, a\u0219 fi bucuros s\u0103 aud sugestii \u0219i critici constructive.<\/i><br \/>\n<br \/>Sursa: <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.1 - 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\/ro\/blog\/administrirovanie\/vizualnoe-programmirovanie-dlya-sonoff-basic\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.2.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"ro_RO\" \/>\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\/ro\/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\udd47Programare vizual\u0103 pentru Sonoff Basic | ProHoster","description":"Articol despre cum s\u0103 transforme un dispozitiv chinezesc ieftin.","canonical_url":"https:\/\/prohoster.info\/ro\/blog\/administrirovanie\/vizualnoe-programmirovanie-dlya-sonoff-basic","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"ro_RO","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\/ro\/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\/ro\/wp-json\/wp\/v2\/posts\/33046","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/comments?post=33046"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/posts\/33046\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/media\/24803"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/media?parent=33046"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/categories?post=33046"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/tags?post=33046"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}