{"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\/da\/blog\/administrirovanie\/vizualnoe-programmirovanie-dlya-sonoff-basic","title":{"rendered":"Visuelt programmering til Sonoff Basic","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Visuelt programmering til Sonoff Basic\" src=\"\/wp-content\/uploads\/2019\/05\/0682cb274648d8a8d16b17bced0116d7.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nEn artikel om, hvordan man kan omdanne en billig kinesisk enhed til en programmerbar logisk controller. En s\u00e5dan enhed kan bruges b\u00e5de til hjemmeautomatisering og som praktiske opgaver i skolens IT-undervisning.<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\n<em>For reference, som standard fungerer Sonoff Basic-programmet med en mobilapp via en kinesisk cloud-service; efter den foresl\u00e5ede modificering vil al videre interaktion med denne enhed v\u00e6re mulig i din browser.<\/em> <\/p>\n<h2>Afsnit I. Tilslutning af Sonoff til MGT24-tjenesten<\/h2>\n<p><\/p>\n<h3>Trin 1. Oprettelse af kontrolpanel<\/h3>\n<p>\nRegistrer dig p\u00e5 siden <noindex><a rel=\"nofollow\" href=\"http:\/\/mgt24.ru\">mgt24<\/a><\/noindex> (hvis du ikke allerede er registreret) og log ind med din konto.<br \/>\n<b class=\"spoiler_title\">Log ind<\/b><img decoding=\"async\" alt=\"Visuelt programmering til Sonoff Basic\" src=\"\/wp-content\/uploads\/2019\/05\/e9b310a7cb7d2da90ac8161407944a8c.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nFor at oprette et kontrolpanel til den nye enhed skal du klikke p\u00e5 knappen &#171;+&#187;.<br \/>\n<b class=\"spoiler_title\">Eksempel p\u00e5 oprettelse af panel<\/b><img decoding=\"async\" alt=\"Visuelt programmering til Sonoff Basic\" src=\"\/wp-content\/uploads\/2019\/05\/dc10d7009ea65c72714c2ccd2314ed0b.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nN\u00e5r panelet er oprettet, vil det vises i din liste over paneler.<\/p>\n<p>Under fanen \u201eInstallation\u201c, i det oprettede panel, find felterne \u201eEnheds-ID\u201c og \u201eAutorisationsn\u00f8gle\u201c, da disse oplysninger senere vil v\u00e6re n\u00f8dvendige, n\u00e5r du konfigurerer Sonoff-enheden.<br \/>\n<b class=\"spoiler_title\">Eksempel p\u00e5 fanen<\/b><img decoding=\"async\" alt=\"Visuelt programmering til Sonoff Basic\" src=\"\/wp-content\/uploads\/2019\/05\/f6cc6f1f469c6278c38c4c63288d9ba2.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h3>Trin 2. Genopgradering af enheden<\/h3>\n<p>\nVed hj\u00e6lp af v\u00e6rkt\u00f8jet <noindex><a rel=\"nofollow\" href=\"https:\/\/esp8266.ru\/download\/esp8266-utils\/XTCOM_UTIL.zip\">XTCOM_UTIL<\/a><\/noindex> overf\u00f8r firmwaren <noindex><a rel=\"nofollow\" href=\"http:\/\/mgt24.ru\/en\/docs\/firmware\/plc_basic.bin\">PLK Sonoff Basic<\/a><\/noindex> til enheden; du f\u00e5r brug for en USB-TTL-konverter. Her <noindex><a rel=\"nofollow\" href=\"https:\/\/esp8266.ru\/esp8266-obnovlenie-proshivki-xtcom_util\/\">instruktion<\/a><\/noindex> og <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_\">er en video-guide<\/a><\/noindex>.<\/p>\n<h3>Trin 3. Konfiguration af enheden<\/h3>\n<p>\nT\u00e6nd for enheden, n\u00e5r lysdioden lyser, skal du trykke p\u00e5 knappen og holde den nede, indtil lysdioden begynder at blinke j\u00e6vnt.<br \/>\nP\u00e5 dette tidspunkt vises et nyt wi-fi-netv\u00e6rk med navnet \u201ePLC Sonoff Basic\u201c, tilslut din computer til dette netv\u00e6rk.<br \/>\n<b class=\"spoiler_title\">Afsnit af lysdiodernes indikation<\/b><\/p>\n<p>Lysdiodeindikation<br \/>\nEnhedens status<\/p>\n<p>periodisk dobbeltblink<br \/>\ningen forbindelse til routeren<\/p>\n<p>lyser konstant<br \/>\nforbindelse til routeren er etableret<\/p>\n<p>periodisk j\u00e6vnt blink<br \/>\nwi-fi adgangspunkt-tilstand<\/p>\n<p>slukket<br \/>\ningen str\u00f8m<\/p>\n<p>\u00c5bn din internetbrowser og indtast teksten \u201e192.168.4.1\u201c i adressefeltet for at g\u00e5 til indstillingssiden for netv\u00e6rksparametre p\u00e5 enheden.<\/p>\n<p>Udfyld felterne som volgt:<\/p>\n<ul>\n<li>\u201eNetv\u00e6rksnavn\u201c og \u201eAdgangskode\u201c (for at forbinde enheden til din hjemme wi-fi-router).<\/li>\n<li>\u201eEnheds-ID\u201c og \u201eAutorisationsn\u00f8gle\u201c (til autorisering af enheden p\u00e5 MGT24-tjenesten).<\/li>\n<\/ul>\n<p>\n<b class=\"spoiler_title\">Eksempel p\u00e5 konfiguration af enhedens netv\u00e6rksparametre<\/b><img decoding=\"async\" alt=\"Visuelt programmering til Sonoff Basic\" src=\"\/wp-content\/uploads\/2019\/05\/47d02b3883ce3896157da4dcc4fe7f40.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nGem indstillingerne og genstart enheden.<br \/>\nHer <noindex><a rel=\"nofollow\" href=\"https:\/\/youtu.be\/XTzGJI7y7t8?t=376\">er en video-guide<\/a><\/noindex>.<\/p>\n<h3>Trin 4. Tilslutning af sensorer (valgfrit)<\/h3>\n<p>\nDen nuv\u00e6rende firmware underst\u00f8tter op til fire temperaturf\u00f8lere ds18b20. Her <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\">er en video-guide<\/a><\/noindex> er monteringen af sensorerne. Det ser ud til, at dette trin vil blive det mest udfordrende, da det kr\u00e6ver h\u00e5ndv\u00e6rksm\u00e6ssige evner og en loddekolbe.<\/p>\n<h2>Afsnit II. Visuel programmering<\/h2>\n<p><\/p>\n<h3>Trin 1. Oprettelse af scripts<\/h3>\n<p>\nI programmeringsmilj\u00f8et bruges <noindex><a rel=\"nofollow\" href=\"https:\/\/developers.google.com\/blockly\/\">Blockly<\/a><\/noindex>, som er let at l\u00e6re, s\u00e5 du beh\u00f8ver ikke v\u00e6re programm\u00f8r for at oprette enkle scripts.<\/p>\n<p>Jeg har tilf\u00f8jet specialiserede blokke til at l\u00e6se og skrive enhedens parametre. Adgang til enhver parameter sker via navn. For parametre fra fjernbetjente enheder bruges sammensatte navne: \u00abparameter@enhed\u00bb.<br \/>\n<b class=\"spoiler_title\">Rullemenu for parametre<\/b><img decoding=\"async\" alt=\"Visuelt programmering til Sonoff Basic\" src=\"\/wp-content\/uploads\/2019\/05\/6ba0f789a4d3e0a394f4773d2c401416.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Eksempel p\u00e5 et script til cyklisk t\u00e6nding og slukning af en belastning (1 Hz):<br \/>\n<img decoding=\"async\" alt=\"Visuelt programmering til Sonoff Basic\" src=\"\/wp-content\/uploads\/2019\/05\/66876fcb1d029b1a06098a8f2118bba7.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nEksempel p\u00e5 et script, der synkroniserer arbejdet mellem to separate enheder. Specificationen: rel\u00e6et p\u00e5 m\u00e5lenheden gentager arbejdet fra rel\u00e6et p\u00e5 den fjernbetjente enhed.<br \/>\n<img decoding=\"async\" alt=\"Visuelt programmering til Sonoff Basic\" src=\"\/wp-content\/uploads\/2019\/05\/a44e81ce1301c7908ac9fa7437785162.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nScript til termostaten (uden hysterese):<br \/>\n<img decoding=\"async\" alt=\"Visuelt programmering til Sonoff Basic\" src=\"\/wp-content\/uploads\/2019\/05\/0efa8a8f5e67f5ffd0812af5a2cececa.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nFor at oprette mere komplekse scripts kan man bruge variable, loops, funktioner (med argumenter) og andre strukturer. Jeg vil ikke g\u00e5 i detaljer her, der findes allerede en del <noindex><a rel=\"nofollow\" href=\"http:\/\/blockly.ru\/\">l\u00e6ringsmateriale om Blockly<\/a><\/noindex>.<\/p>\n<h3>Trin 2. Udf\u00f8relsesr\u00e6kkef\u00f8lge for scripts<\/h3>\n<p>\nScriptet k\u00f8rer i kontinuerlig tilstand, og s\u00e5 snart det n\u00e5r sin afslutning, starter det forfra. Der er to blokke, der midlertidigt kan pause udf\u00f8relsen af scriptet: \u00abdelay\u00bb og \u00abpause\u00bb.<br \/>\nBlokken \u00abdelay\u00bb bruges til millisekund- eller mikrosekundforsinkelser. Denne blok overholder strengt tidsintervallet og blokerer for hele enhedens drift. <br \/>\nBlokken \u00abpause\u00bb bruges til sekund\u00e6re (eller kortere) forsinkelser og blokerer ikke udf\u00f8relsen af andre processer i enheden.<br \/>\nHvis scriptet har en uendelig l\u00f8kke uden \u00abpause\u00bb, starter fortolkeren automatisk en lille pause.<br \/>\nVed udt\u00f6mning af den tildelte hukommelsesstak stopper fortolkeren udf\u00f8relsen af et s\u00e5dant ressourcekr\u00e6vende script (v\u00e6r forsigtig med rekursive funktioner).<\/p>\n<h3>Trin 3. Fejlfinding af scripts<\/h3>\n<p>\nFor debugging a script already loaded onto the device, you can run a step-by-step program trace. This is extremely useful when the script's behavior does not align with the author's intentions. In this case, tracing allows the author to quickly identify the source of the problem and correct the error in the script.<\/p>\n<p>Factorial calculation script in debug mode:<br \/>\n<img decoding=\"async\" alt=\"Visuelt programmering til Sonoff Basic\" src=\"\/wp-content\/uploads\/2019\/05\/ea6e23729fd530b79b89c9481e78bd64.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nThe debugging tool is quite simple and consists of three main buttons: 'start', 'step forward', and 'stop' (let's not forget about 'enter' and 'exit' from debug mode). In addition to step-by-step tracing, you can set a breakpoint on any block (by clicking on the block).<br \/>\nTo display the current parameter values (sensors, relays) on the monitor, use the 'print' block.<br \/>\nHer <noindex><a rel=\"nofollow\" href=\"https:\/\/youtu.be\/2mK6gvqe_18\">overview video<\/a><\/noindex> on using the debugger.<\/p>\n<h2>A section for the curious. What happens under the hood?<\/h2>\n<p>\nFor the scripts to work on the target device, a bytecode interpreter and an assembler with 38 instructions were developed. A specialized code generator was integrated into the blockly source code, which converts visual blocks into assembler instructions. Later, this assembler program is transformed into bytecode and sent to the device for execution.<br \/>\nThe architecture of this virtual machine is quite simple, and there is not much point in describing it; you will find many articles on designing basic virtual machines online.<br \/>\nI typically allocate 1000 bytes for the stack of my virtual machine; this is more than enough. Of course, deep recursions can exhaust any stack, but they are unlikely to find practical applications.<\/p>\n<p>The resulting bytecode is quite compact. For example, the bytecode for calculating the same factorial consists of only 49 bytes. Here is its visual representation:<br \/>\n<img decoding=\"async\" alt=\"Visuelt programmering til Sonoff Basic\" src=\"\/wp-content\/uploads\/2019\/05\/1c6a8b693cbf2131f1f1369d97ad034b.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nAnd here is its assembler program:<\/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>If the assembler representation has no practical value, the 'javascript' tab, on the other hand, provides a more familiar view than visual blocks:<\/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>N\u00e5r det kommer til ydeevne. Da jeg k\u00f8rte et simpelt blinkescript, fik jeg en 47 kHz firkantb\u00f8lge p\u00e5 oscilloskopet (ved en CPU-taktfrekvens p\u00e5 80 MHz).<br \/>\n<img decoding=\"async\" alt=\"Visuelt programmering til Sonoff Basic\" src=\"\/wp-content\/uploads\/2019\/05\/961a50c7ef269265443e078a1a81291a.jpg\" style=\"display:block;margin: 0 auto;\" \/><img decoding=\"async\" alt=\"Visuelt programmering til Sonoff Basic\" src=\"\/wp-content\/uploads\/2019\/05\/a416044b4cea01121e04e27ae7d1fef2.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nJeg betragter det som et godt resultat, i det mindste er denne hastighed n\u00e6sten ti gange hurtigere end <noindex><a rel=\"nofollow\" href=\"http:\/\/esp8266freq.blogspot.com\/2016\/12\/esp-speed-compare-in-lua-micropython.html\">Lua<\/a><\/noindex> og <noindex><a rel=\"nofollow\" href=\"https:\/\/www.espruino.com\/Performance\">Espruino<\/a><\/noindex>.<\/p>\n<h2>Afsluttende del<\/h2>\n<p>\nSammenfattende kan jeg sige, at brugen af scripts ikke kun giver os mulighed for at programmere logikken for en enkelt enhed, men ogs\u00e5 forbinder flere enheder til et samlet system, hvor nogle enheders adf\u00e6rd p\u00e5virker andre. <br \/>\nJeg vil ogs\u00e5 bem\u00e6rke, at den valgte metode til opbevaring af scripts (direkte i enhederne og ikke p\u00e5 serveren) g\u00f8r det nemmere at skifte allerede fungerende enheder til en anden server, for eksempel til en hjemmelavet Raspberry Pi, som her. <noindex><a rel=\"nofollow\" href=\"http:\/\/mgt24.ru\/en\/docs\/#!raspberry.md\">instruktion<\/a><\/noindex>.<\/p>\n<p><i>Det var alt, jeg vil gerne h\u00f8re r\u00e5d og konstruktiv kritik.<\/i><br \/>\n<br \/>Kilde: <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.3 - 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\/da\/blog\/administrirovanie\/vizualnoe-programmirovanie-dlya-sonoff-basic\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.3\" \/>\n\t\t<meta property=\"og:locale\" content=\"da_DK\" \/>\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\/da\/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\udd47Visuelt programmering for Sonoff Basic | ProHoster","description":"Artikel om, hvordan man f\u00e5r det billigste kinesiske apparat.","canonical_url":"https:\/\/prohoster.info\/da\/blog\/administrirovanie\/vizualnoe-programmirovanie-dlya-sonoff-basic","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"da_DK","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\/da\/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\/da\/wp-json\/wp\/v2\/posts\/33046","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/comments?post=33046"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/posts\/33046\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/media\/24803"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/media?parent=33046"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/categories?post=33046"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/tags?post=33046"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}