{"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\/sq\/blog\/administrirovanie\/vizualnoe-programmirovanie-dlya-sonoff-basic","title":{"rendered":"Programimi vizual p\u00ebr Sonoff Basic","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Programimi vizual p\u00ebr Sonoff Basic\" src=\"\/wp-content\/uploads\/2019\/05\/0682cb274648d8a8d16b17bced0116d7.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nNj\u00eb artikull mbi se si t\u00eb krijoni nj\u00eb kontrollues logjik t\u00eb programuesh\u00ebm nga nj\u00eb pajisje kineze t\u00eb lir\u00eb. Kjo pajisje do t\u00eb gjej\u00eb p\u00ebrdorim si n\u00eb automatizimin e sht\u00ebpis\u00eb ashtu edhe si nj\u00eb aktivitet praktik n\u00eb informatik\u00ebn shkollore.<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\n<em>Si p\u00ebr informacion, programi Sonoff Basic parazgjedhje funksionon me aplikacionin mobil p\u00ebrmes sh\u00ebrbimit t\u00eb ndotjes n\u00eb re kineze, pas modifikimit t\u00eb propozuar, t\u00eb gjitha nd\u00ebrveprimet e m\u00ebtejshme me k\u00ebt\u00eb pajisje do t\u00eb b\u00ebhen t\u00eb mundura n\u00eb shfletues.<\/em> <\/p>\n<h2>Kapitulli I. Lidhja e Sonoff me sh\u00ebrbimin MGT24<\/h2>\n<p><\/p>\n<h3>Hapi 1. Krijimi i panelit t\u00eb kontrollit<\/h3>\n<p>\nRegjistrohuni n\u00eb sitin <noindex><a rel=\"nofollow\" href=\"http:\/\/mgt24.ru\">mgt24<\/a><\/noindex> (n\u00ebse nuk jeni regjistruar ende) dhe hyni n\u00eb sistem me llogarin\u00eb tuaj.<br \/>\n<b class=\"spoiler_title\">Hyrja n\u00eb sistem<\/b><img decoding=\"async\" alt=\"Programimi vizual p\u00ebr Sonoff Basic\" src=\"\/wp-content\/uploads\/2019\/05\/e9b310a7cb7d2da90ac8161407944a8c.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n\u0427\u0442\u043e\u0431\u044b \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043f\u0430\u043d\u0435\u043b\u044c \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0434\u043b\u044f \u043d\u043e\u0432\u043e\u0433\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u043d\u0430\u0436\u043c\u0438\u0442\u0435 \u043d\u0430 \u043a\u043d\u043e\u043f\u043a\u0443 &#171;+&#187;.<br \/>\n<b class=\"spoiler_title\">Shembull i krijimit t\u00eb panelit<\/b><img decoding=\"async\" alt=\"Programimi vizual p\u00ebr Sonoff Basic\" src=\"\/wp-content\/uploads\/2019\/05\/dc10d7009ea65c72714c2ccd2314ed0b.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nPasi t\u00eb krijohet paneli, ai do t\u00eb shfaqet n\u00eb list\u00ebn e panellave tuaj.<\/p>\n<p>N\u00eb sked\u00ebn \u201cInstalimi\u201d t\u00eb panelit t\u00eb krijuar, gjeni fushat \u201cID e pajisjes\u201d dhe \u201c\u00c7el\u00ebsi i autorizimit\u201d, gjithashtu, kjo informacion do t\u00eb nevojitet p\u00ebr konfigurimin e pajisjes Sonoff.<br \/>\n<b class=\"spoiler_title\">Shembull i sked\u00ebs<\/b><img decoding=\"async\" alt=\"Programimi vizual p\u00ebr Sonoff Basic\" src=\"\/wp-content\/uploads\/2019\/05\/f6cc6f1f469c6278c38c4c63288d9ba2.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h3>Hapi 2. Riprogramimi i pajisjes<\/h3>\n<p>\nMe ndihm\u00ebn e utilitarit <noindex><a rel=\"nofollow\" href=\"https:\/\/esp8266.ru\/download\/esp8266-utils\/XTCOM_UTIL.zip\">XTCOM_UTIL<\/a><\/noindex> ngarkoni programimin <noindex><a rel=\"nofollow\" href=\"http:\/\/mgt24.ru\/en\/docs\/firmware\/plc_basic.bin\">PLC Sonoff Basic<\/a><\/noindex> p\u00ebr pajisjen, do t'ju nevojitet nj\u00eb konvertues USB-TTL. K\u00ebtu <noindex><a rel=\"nofollow\" href=\"https:\/\/esp8266.ru\/esp8266-obnovlenie-proshivki-xtcom_util\/\">udh\u00ebzimi<\/a><\/noindex> dhe <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_\">udht\u00ebzimi video<\/a><\/noindex>.<\/p>\n<h3>Hapi 3. Konfigurimi i pajisjes<\/h3>\n<p>\nSigurohuni q\u00eb pajisja t\u00eb ket\u00eb energji, pasi t\u00eb ndizet drita LED, shtypni butonin dhe mbajeni t\u00eb mbajtur derisa drita LED t\u00eb filloj\u00eb t\u00eb ndri\u00e7oj\u00eb rregullisht dhe me rit\u00ebm.<br \/>\nN\u00eb k\u00ebt\u00eb moment do t\u00eb shfaqet nj\u00eb rrjet t\u00eb ri wi-fi me emrin 'PLC Sonoff Basic', lidheni kompjuterin tuaj me k\u00ebt\u00eb rrjet.<br \/>\n<b class=\"spoiler_title\">Shpjegimi i treguesve LED<\/b><\/p>\n<p>Treguesi LED<br \/>\nGjendja e pajisjes<\/p>\n<p>drit\u00eb e \u00e7ift\u00ebzuar periodike<br \/>\nnuk ka lidhje me routerin<\/p>\n<p>ndri\u00e7on vazhdimisht<br \/>\nka lidhje me routerin<\/p>\n<p>ndri\u00e7im periodik dhe i rregullt<br \/>\nmodi i pik\u00ebs s\u00eb qasjes wi-fi<\/p>\n<p>\u00ebsht\u00eb fikur<br \/>\nnuk ka energji<\/p>\n<p>Hapni shfletuesin e internetit dhe shkruani n\u00eb shiritin e adres\u00ebs tekstin '192.168.4.1', kaloni n\u00eb faqen e konfigurimit t\u00eb parametrave t\u00eb rrjetit t\u00eb pajisjes.<\/p>\n<p>Plot\u00ebsoni fushat si m\u00eb posht\u00eb:<\/p>\n<ul>\n<li>\u2018Emri i rrjetit\u2019 dhe \u2018Fjal\u00ebkalimi\u2019 (p\u00ebr lidhjen e pajisjes me routerin tuaj t\u00eb sht\u00ebpis\u00eb wi-fi).<\/li>\n<li>\u2018ID e pajisjes\u2019 dhe \u2018\u00c7el\u00ebsi i Autorizimit\u2019 (p\u00ebr autorizimin e pajisjes n\u00eb sh\u00ebrbimin MGT24).<\/li>\n<\/ul>\n<p>\n<b class=\"spoiler_title\">Shembulli i konfigurimit t\u00eb parametrave t\u00eb rrjetit t\u00eb pajisjes<\/b><img decoding=\"async\" alt=\"Programimi vizual p\u00ebr Sonoff Basic\" src=\"\/wp-content\/uploads\/2019\/05\/47d02b3883ce3896157da4dcc4fe7f40.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nRuani konfigurimet dhe rinisni pajisjen.<br \/>\nK\u00ebtu <noindex><a rel=\"nofollow\" href=\"https:\/\/youtu.be\/XTzGJI7y7t8?t=376\">udht\u00ebzimi video<\/a><\/noindex>.<\/p>\n<h3>Hapi 4. Lidhja e sensor\u00ebve (opsionale)<\/h3>\n<p>\nVersioni aktual mb\u00ebshtet deri n\u00eb kat\u00ebr sensor\u00eb temperature ds18b20. K\u00ebtu <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\">udht\u00ebzimi video<\/a><\/noindex> p\u00ebr instalimin e sensor\u00ebve. M\u00eb duket se ky hap do t\u00eb jet\u00eb m\u00eb i v\u00ebshtir\u00eb, pasi do t\u00eb k\u00ebrkoj\u00eb nga ju duar t\u00eb sigurta dhe nj\u00eb llamarin\u00eb.<\/p>\n<h2>Kapita II. Programimi vizual<\/h2>\n<p><\/p>\n<h3>Hapi 1. Krijimi i skenar\u00ebve<\/h3>\n<p>\nSi mjedis programimi po p\u00ebrdoret <noindex><a rel=\"nofollow\" href=\"https:\/\/developers.google.com\/blockly\/\">Blockly<\/a><\/noindex>, mjedisi \u00ebsht\u00eb i leht\u00eb p\u00ebr t'u m\u00ebsuar, k\u00ebshtu q\u00eb p\u00ebr t\u00eb krijuar skenar\u00eb t\u00eb thjesht\u00eb nuk \u00ebsht\u00eb e nevojshme t\u00eb jeni programues.<\/p>\n<p>Kam shtuar blloqe t\u00eb specializuara p\u00ebr regjistrimin dhe leximin e parametrave t\u00eb paisjeve. Qasja n\u00eb \u00e7do parameter b\u00ebhet n\u00ebp\u00ebrmjet emrit. P\u00ebr parametrat e pajisjeve t\u00eb larg\u00ebta p\u00ebrdoren emra t\u00eb p\u00ebrb\u00ebr\u00eb: \u00abparametri@pajisja\u00bb.<br \/>\n<b class=\"spoiler_title\">Lista e r\u00ebnies s\u00eb parametrave<\/b><img decoding=\"async\" alt=\"Programimi vizual p\u00ebr Sonoff Basic\" src=\"\/wp-content\/uploads\/2019\/05\/6ba0f789a4d3e0a394f4773d2c401416.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Shembulli i skenarit t\u00eb ndezjes dhe fikjes ciklike t\u00eb ngarkes\u00ebs (1Hz):<br \/>\n<img decoding=\"async\" alt=\"Programimi vizual p\u00ebr Sonoff Basic\" src=\"\/wp-content\/uploads\/2019\/05\/66876fcb1d029b1a06098a8f2118bba7.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nShembulli i skenarit q\u00eb sinkronizon pun\u00ebn e dy pajisjeve t\u00eb ve\u00e7anta. K\u00ebshtu, releja e pajisjes s\u00eb synuar p\u00ebrs\u00ebrit pun\u00ebn e relees s\u00eb pajisjes s\u00eb larg\u00ebt.<br \/>\n<img decoding=\"async\" alt=\"Programimi vizual p\u00ebr Sonoff Basic\" src=\"\/wp-content\/uploads\/2019\/05\/a44e81ce1301c7908ac9fa7437785162.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nSkenari p\u00ebr termostat (pa histerezis):<br \/>\n<img decoding=\"async\" alt=\"Programimi vizual p\u00ebr Sonoff Basic\" src=\"\/wp-content\/uploads\/2019\/05\/0efa8a8f5e67f5ffd0812af5a2cececa.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nP\u00ebr t\u00eb krijuar skenar\u00eb m\u00eb t\u00eb nd\u00ebrlikuar, mund t\u00eb p\u00ebrdoren variabla, cikle, funksione (me argumente) dhe konstrukte t\u00eb tjera. Nuk do ta p\u00ebrshkruaj k\u00ebtu gjith\u00e7ka n\u00eb detaje, n\u00eb rrjet ekziston mjaft materiale <noindex><a rel=\"nofollow\" href=\"http:\/\/blockly.ru\/\">m\u00ebsimore mbi Blockly<\/a><\/noindex>.<\/p>\n<h3>Hapi 2. Rendi i ekzekutimit t\u00eb skenar\u00ebve<\/h3>\n<p>\nSkenari punon n\u00eb nj\u00eb mod\u00eb t\u00eb vazhdueshme, dhe sapo t\u00eb arrij\u00eb p\u00ebrfundimin e tij, ai fillon p\u00ebrs\u00ebri. N\u00eb k\u00ebt\u00eb rast, ekzistojn\u00eb dy blloqe q\u00eb mund t\u00eb ndalojn\u00eb p\u00ebrkoh\u00ebsisht pun\u00ebn e skenarit, \"delay\" dhe \"pause\".<br \/>\nBlloku \"delay\" p\u00ebrdoret p\u00ebr vonesa n\u00eb milisekonda ose mikrosekonda. Ky bllok e ruan rigorozisht intervalin e koh\u00ebs, duke bllokuar pun\u00ebn e t\u00eb gjith\u00eb pajisjes. <br \/>\nBlloku \"pause\" p\u00ebrdoret p\u00ebr vonesa n\u00eb sekonda (edhe m\u00eb pak) dhe nuk bllokon ekzekutimin e proceseve t\u00eb tjera n\u00eb pajisje.<br \/>\nN\u00ebse skenari p\u00ebrmban nj\u00eb cik\u00ebl t\u00eb pafund, brenda t\u00eb cilit nuk \u00ebsht\u00eb vendosur \"pause\", interpretuesi do t\u00eb iniciatoj\u00eb nj\u00eb pauz\u00eb t\u00eb vog\u00ebl vet\u00eb.<br \/>\nN\u00eb rast se p\u00ebrfundon staku i memorjes t\u00eb dedikuar, interpretuesi do t\u00eb ndaloj\u00eb ekzekutimin e nj\u00eb skenari t\u00eb till\u00eb t\u00eb k\u00ebrkuar (Kini kujdes me funksionet rekursive).<\/p>\n<h3>Hapi 3. Debugging i skenar\u00ebve<\/h3>\n<p>\nP\u00ebr t\u00eb debug-uar nj\u00eb skenar t\u00eb ngarkuar tashm\u00eb n\u00eb dispozitiv, mund t\u00eb filloni nj\u00eb nd\u00ebrprerje t\u00eb programit hap pas hapi. Kjo \u00ebsht\u00eb shum\u00eb e dobishme kur sjellja e skenarit nuk p\u00ebrputhet me at\u00eb q\u00eb kishte menduar autori. N\u00eb k\u00ebt\u00eb rast, nd\u00ebrprerja i lejon autorit t\u00eb gjej\u00eb shpejt burimin e problemit dhe t\u00eb korrigjoj\u00eb gabimin n\u00eb skenar.<\/p>\n<p>Skenari i llogaritjes s\u00eb faktorialit n\u00eb modalitetin e debug-imit:<br \/>\n<img decoding=\"async\" alt=\"Programimi vizual p\u00ebr Sonoff Basic\" src=\"\/wp-content\/uploads\/2019\/05\/ea6e23729fd530b79b89c9481e78bd64.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nMjetej i debugging \u00ebsht\u00eb shum\u00eb i thjesht\u00eb dhe p\u00ebrb\u00ebhet nga tre butona kryesor\u00eb: \"fillo\", \"hap nj\u00eb her\u00eb p\u00ebrpara\" dhe \"ndalo\" (gjithashtu mos harrojm\u00eb p\u00ebr \"hyrjen\" dhe \"daljen\" nga modaliteti i debugging). P\u00ebrve\u00e7 nd\u00ebrprerjes hap pas hapi, mund t\u00eb vendosni nj\u00eb pik\u00eb ndalimi n\u00eb \u00e7do bllok (duke klikuar me miun mbi bllokun).<br \/>\nP\u00ebr t\u00eb shfaqur n\u00eb monitor vlerat aktuale t\u00eb parameter\u00ebve (sensor\u00eb, rele) p\u00ebrdorni bllokun \"print\".<br \/>\nK\u00ebtu <noindex><a rel=\"nofollow\" href=\"https:\/\/youtu.be\/2mK6gvqe_18\">video prezantuese<\/a><\/noindex> rreth p\u00ebrdorimit t\u00eb debugger-it.<\/p>\n<h2>Nj\u00eb seksion p\u00ebr kurioz\u00ebt. \u00c7far\u00eb ndodh n\u00ebn kapak?<\/h2>\n<p>\nP\u00ebr q\u00eb skenar\u00ebt t\u00eb funksionojn\u00eb n\u00eb pajisjen e synuar, u zhvillua nj\u00eb interpretuese e kodit bajt dhe nj\u00eb asamble p\u00ebr 38 instruksione. N\u00eb kodin burimor blockly u inkuadrua nj\u00eb gjenerator kode i specializuar, i cili konverton blloqet vizuale n\u00eb instruksione asamble. M\u00eb pas, kjo program asamble transformohet n\u00eb kod bajt dhe d\u00ebrgohet n\u00eb pajisje p\u00ebr ekzekutim.<br \/>\nArkitektura e k\u00ebsaj majesh virtuale \u00ebsht\u00eb mjaft e thjesht\u00eb dhe nuk ka shum\u00eb kuptim ta p\u00ebrshkruajm\u00eb, n\u00eb internet do t\u00eb gjeni shum\u00eb artikuj p\u00ebr projektimin e makine virtualesh m\u00eb t\u00eb thjeshta.<br \/>\nP\u00ebr stakun e majesh virtuale zakonisht dedikoj 1000 bajt\u00eb, q\u00eb \u00ebsht\u00eb m\u00eb se e mjaftueshme. Natyrisht, rekurzionet e thella mund t\u00eb shpenzojn\u00eb \u00e7do stok, por \u00ebsht\u00eb e v\u00ebshtir\u00eb t\u00eb gjejm\u00eb nj\u00eb p\u00ebrdorim praktik p\u00ebr to.<\/p>\n<p>Kodi bajt i p\u00ebrfunduar \u00ebsht\u00eb mjaft kompakt. Si shembull, kodi bajt p\u00ebr llogaritjen e faktoriel\u00ebs \u00ebsht\u00eb vet\u00ebm 49 bajt. Kjo \u00ebsht\u00eb forma e tij vizuale e paraqitjes:<br \/>\n<img decoding=\"async\" alt=\"Programimi vizual p\u00ebr Sonoff Basic\" src=\"\/wp-content\/uploads\/2019\/05\/1c6a8b693cbf2131f1f1369d97ad034b.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDhe kjo \u00ebsht\u00eb programi i tij asamble:<\/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>N\u00ebse forma e paraqitjes me asmblere nuk ka ndonj\u00eb vler\u00eb praktike, ndryshe, skeda \"javascrit\" japin nj\u00eb pamje m\u00eb t\u00eb njohur sesa blloqet vizive:<\/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>Sa i p\u00ebrket performanc\u00ebs. Kur ekzekutova skenarin m\u00eb t\u00eb thjesht\u00eb t\u00eb ndri\u00e7imit, n\u00eb ekranin e oscilografit mora nj\u00eb meand\u00ebr 47kHz (me frekuenc\u00ebn e or\u00ebs s\u00eb procesorit 80MHz).<br \/>\n<img decoding=\"async\" alt=\"Programimi vizual p\u00ebr Sonoff Basic\" src=\"\/wp-content\/uploads\/2019\/05\/961a50c7ef269265443e078a1a81291a.jpg\" style=\"display:block;margin: 0 auto;\" \/><img decoding=\"async\" alt=\"Programimi vizual p\u00ebr Sonoff Basic\" src=\"\/wp-content\/uploads\/2019\/05\/a416044b4cea01121e04e27ae7d1fef2.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nMendoj se \u00ebsht\u00eb nj\u00eb rezultat i mir\u00eb, t\u00eb pakt\u00ebn, kjo shpejt\u00ebsi \u00ebsht\u00eb pothuajse dhjet\u00eb her\u00eb m\u00eb e shpejt\u00eb se sa <noindex><a rel=\"nofollow\" href=\"http:\/\/esp8266freq.blogspot.com\/2016\/12\/esp-speed-compare-in-lua-micropython.html\">Lua<\/a><\/noindex> dhe <noindex><a rel=\"nofollow\" href=\"https:\/\/www.espruino.com\/Performance\">Espruino<\/a><\/noindex>.<\/p>\n<h2>Pjesa p\u00ebrfundimtare<\/h2>\n<p>\nP\u00ebr t\u00eb p\u00ebrmbledhur, do t\u00eb them se p\u00ebrdorimi i skripteve na lejon jo vet\u00ebm q\u00eb t\u00eb programojm\u00eb logjik\u00ebn e funksionimit t\u00eb nj\u00eb pajisjeje t\u00eb ve\u00e7ant\u00eb, por gjithashtu na jep mund\u00ebsin\u00eb t\u00eb lidhemi disa pajisje n\u00eb nj\u00eb mekaniz\u00ebm t\u00eb vet\u00ebm, ku disa pajisje ndikojn\u00eb n\u00eb sjelljen e t\u00eb tjerave. <br \/>\nGjithashtu do t\u00eb ve\u00e7oja se m\u00ebnyra e zgjedhur e ruajtjes s\u00eb skripteve (drejt n\u00eb pajisjet vet\u00eb, jo n\u00eb server) e b\u00ebn m\u00eb t\u00eb thjesht\u00eb kalimin e pajisjeve q\u00eb tashm\u00eb funksionojn\u00eb n\u00eb nj\u00eb server tjet\u00ebr, p\u00ebr shembull n\u00eb nj\u00eb Raspberry n\u00eb sht\u00ebpi, k\u00ebtu <noindex><a rel=\"nofollow\" href=\"http:\/\/mgt24.ru\/en\/docs\/#!raspberry.md\">udh\u00ebzimi<\/a><\/noindex>.<\/p>\n<p><i>Kjo \u00ebsht\u00eb gjith\u00e7ka, do t\u00eb isha i lumtur t\u00eb d\u00ebgjoja k\u00ebshilla dhe kritika konstruktive.<\/i><br \/>\n<br \/>Burimi: <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.0.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 \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\" \/>\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\/sq\/blog\/administrirovanie\/vizualnoe-programmirovanie-dlya-sonoff-basic\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.0.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"sq_AL\" \/>\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 \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\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/sq\/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\udd47Programimi vizual p\u00ebr Sonoff Basic | ProHoster","description":"Nj\u00eb artikull n\u00eb lidhje me m\u00ebnyr\u00ebn se si t\u00eb krijoni nj\u00eb kontrollues logjik programuesh\u00ebm nga nj\u00eb pajisje kineze t\u00eb lir\u00eb. Kjo pajisje do t\u00eb gjej\u00eb p\u00ebrdorim si n\u00eb automatizimin e sht\u00ebpis\u00eb, ashtu edhe p\u00ebr aktivitete praktike n\u00eb l\u00ebnd\u00ebt e informatik\u00ebs n\u00eb shkoll\u00eb. P\u00ebr informacion, nga default, programi Sonoff Basic punon me aplikacionin mobil p\u00ebrmes nj\u00eb sh\u00ebrbimi n\u00eb cloud kinez, pas modifikimit t\u00eb propozumuar, \u00e7do bashk\u00ebveprim me k\u00ebt\u00eb pajisje do t\u00eb b\u00ebhet","canonical_url":"https:\/\/prohoster.info\/sq\/blog\/administrirovanie\/vizualnoe-programmirovanie-dlya-sonoff-basic","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"sq_AL","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 \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","og:url":"https:\/\/prohoster.info\/sq\/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\/sq\/wp-json\/wp\/v2\/posts\/33046","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/comments?post=33046"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/posts\/33046\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/media\/24803"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/media?parent=33046"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/categories?post=33046"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/tags?post=33046"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}