{"id":610,"date":"2021-09-24T19:03:00","date_gmt":"2021-09-24T18:03:00","guid":{"rendered":"https:\/\/tricker.cz\/?p=610"},"modified":"2022-01-25T13:57:06","modified_gmt":"2022-01-25T12:57:06","slug":"vlastni-ovladani-chytre-zasuvky-s-firmwarem-tasmota","status":"publish","type":"post","link":"https:\/\/tricker.cz\/?p=610","title":{"rendered":"Vlastn\u00ed ovl\u00e1d\u00e1n\u00ed chytr\u00e9 z\u00e1suvky s firmwarem Tasmota"},"content":{"rendered":"\n<p>Del\u0161\u00ed dobu m\u011b tr\u00e1pilo nespolehliv\u00e9 sp\u00edn\u00e1n\u00ed chytr\u00e9ho bazmeku Vocolinc p\u0159es cloud aplikaci Smart life. V\u011bt\u0161ina chytr\u00fdch z\u00e1suvek je jenom n\u011bjak\u00fd rebranding t\u00e9ho\u017e, tak\u017ee koupit n\u011bco jin\u00e9ho nevypadalo jako ta spr\u00e1vn\u00e1 cesta. Obzvl\u00e1\u0161\u0165, kdy\u017e chci &#8222;jenom&#8220; ovl\u00e1dat jednu z\u00e1suvku, na kterou m\u00e1m zapojen\u00e9 \u010derpadlo a nechci \u0159e\u0161it integraci do chytr\u00e9 dom\u00e1cnosti.<\/p>\n\n\n\n<p>Podobn\u00e9 ud\u011bl\u00e1tko je teoreticky \u0161ikovn\u00e1 v\u011bc. V m\u00e9m p\u0159\u00edpad\u011b nechcete m\u00edt neust\u00e1le natlakovan\u00fd zal\u00e9vac\u00ed okruh z n\u00e1dr\u017ee. Tak\u017ee kdy\u017e jdete zal\u00e9vat, tak si zapnete na d\u00e1lku z\u00e1suvku s \u010derpadlem a je to. Pot\u0159ebujete p\u0159ecvaknout z pistole na rozst\u0159ikova\u010d? Aplikace \u0165uk, rozst\u0159ikova\u010d cvak, aplikace \u0165uk &#8211; a je to. Z jednoho m\u00edsta pohodln\u011b, bez dvoj\u00edho obch\u00e1zen\u00ed domu. To by bylo, aby lenost netla\u010dila pokrok kup\u0159edu.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/tricker.cz\/wp-content\/uploads\/2021\/09\/image-4.png\"><img decoding=\"async\" loading=\"lazy\" width=\"1024\" height=\"581\" src=\"https:\/\/tricker.cz\/wp-content\/uploads\/2021\/09\/image-4.png\" alt=\"\" class=\"wp-image-623\" srcset=\"https:\/\/tricker.cz\/wp-content\/uploads\/2021\/09\/image-4.png 1024w, https:\/\/tricker.cz\/wp-content\/uploads\/2021\/09\/image-4-300x170.png 300w, https:\/\/tricker.cz\/wp-content\/uploads\/2021\/09\/image-4-768x436.png 768w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/a><figcaption>Tropick\u00e1 vedra, kdy\u017e se nezal\u00e9v\u00e1.<\/figcaption><\/figure>\n\n\n\n<p>Bohu\u017eel to v praxi fungovalo jen z domova a jen n\u011bkdy. \u010casto se st\u00e1valo, \u017ee sice z\u00e1suvka byla v aplikaci on-line, ale po jej\u00edm zapnut\u00ed se nic nestalo a hodila se do off-linu. Sign\u00e1l na wi-fi p\u0159itom byl a z\u00e1suvka v s\u00edti tak\u00e9. Mimo domov (p\u0159es data\/jinou wif-fi) to bylo je\u0161t\u011b hor\u0161\u00ed. To si takhle zapnete rozst\u0159ikova\u010d a nem\u016f\u017eete to vypnout. P\u0159es Apple Watch to fungovalo je\u0161t\u011b h\u016f\u0159 &#8211; pravd\u011bpodobn\u011b se hodinky domlouvaj\u00ed s telefonem a ten a\u017e s cloudem. A to u\u017e je pro to, jak je ta aplikace ud\u011blan\u00e1, sci-fi.<\/p>\n\n\n\n<p>N\u00e1hodou jsem \u010dasem na e-shopu i4wifi v novink\u00e1ch narazil na to, \u017ee se d\u011bl\u00e1 chytr\u00e1 z\u00e1suvka s firmwarem Tasmota. Co\u017e je alternativa do chytr\u00fdch za\u0159\u00edzen\u00ed s velmi popul\u00e1rn\u00edm ESP \u010dipem. M\u016f\u017eete si to bu\u010f do z\u00e1suvky flashnout sami (co\u017e vy\u017eaduje fyzick\u00e9 rozebr\u00e1n\u00ed mnohdy lepen\u00fdch z\u00e1suvek, p\u00e1jen\u00ed, m\u00edt program\u00e1tor&#8230;), nebo po\u0159\u00eddit u\u017e n\u011bco flashnut\u00e9ho. Oni to p\u0159edt\u00edm skladem nem\u011bli, te\u010f ten <a href=\"https:\/\/www.i4wifi.cz\/cs\/260088-tinycontrol-tp29\">Tinycontrol TP29 maj\u00ed<\/a>. V srpnu mi \u0159ekli, \u017ee to bude mo\u017en\u00e1 a\u017e v prosinci, tak jsem na\u0161el a objednal alternativu <a href=\"https:\/\/www.amazon.de\/gp\/product\/B07SNGJ8GD\">od DeLocku z Amazonu<\/a> a byla za 3 dny doma (jen pozor na bezkol\u00edk vp\u0159edu a na \u017e\u00e1dnou d\u00edru na kol\u00edk vzadu!). Na \u010desk\u00fdch e-shopech je DeLock z\u00e1suvka tu a tam tak\u00e9 k m\u00e1n\u00ed, ale v popisu se p\u00ed\u0161e &#8222;je-li nahr\u00e1n firmware Tasmota, m\u016f\u017eete&#8230;&#8220; &#8211; tak j\u00e1 nev\u00edm, je nahr\u00e1n? \ud83d\ude00<\/p>\n\n\n\n<p>Po zapojen\u00ed z\u00e1suvky se p\u0159ipoj\u00edte na jej\u00ed wi-fi s\u00ed\u0165 a m\u016f\u017eete vyplnit \u00fadaje pro p\u0159ipojen\u00ed hned ke dv\u011bma bezdr\u00e1tov\u00fdm p\u0159\u00edstupov\u00fdm bod\u016fm, tak\u017ee se z\u00e1suvka p\u0159ipoj\u00ed ke druh\u00e9 s\u00edti, pokud bude ta prvn\u00ed nedostupn\u00e1. Samoz\u0159ejm\u011b za p\u0159edpokladu, \u017ee je v dosahu. Pozor na to, pokud m\u00e1 druh\u00e1 s\u00ed\u0165 jen slab\u00fd sign\u00e1l &#8211; m\u016f\u017ee se v\u00e1m st\u00e1t stejn\u011b jako m\u011b, \u017ee po v\u00fdpadku elekt\u0159iny nab\u011bhne ta vzd\u00e1len\u011bj\u0161\u00ed wi-fi d\u0159\u00edv, z\u00e1suvka se p\u0159ipoj\u00ed k n\u00ed a jej\u00ed odezva bude b\u00eddn\u00e1.<\/p>\n\n\n\n<p>Budete-li upgradovat stejn\u011b jako j\u00e1 pro lep\u0161\u00ed pocit na posledn\u00ed verzi Tasmoty (nen\u00ed to nutn\u00e9!), rozhodn\u011b postupujte podle n\u00e1vodu a jd\u011bte postupn\u011b po doporu\u010den\u00fdch verz\u00edch. Obzvl\u00e1\u0161\u0165 pozor budete-li upgradovat p\u0159es minimal verze, tak v\u017edy po minimal upgradn\u011bte na &#8222;plnotu\u010dnou&#8220; Tasmotu a n\u00e9 na dal\u0161\u00ed minimal. Dopadli byste stejn\u011b jako j\u00e1 &#8211; \u0161patn\u011b a s bricknutou z\u00e1suvkou.<\/p>\n\n\n\n<p>M\u00e1te Tasmotu p\u0159ipojenou do s\u00edt\u011b? Par\u00e1da! Pak m\u00e1te na jej\u00ed IP adrese takovouto str\u00e1nku:<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-full\"><a href=\"https:\/\/tricker.cz\/wp-content\/uploads\/2021\/09\/image-2.png\"><img decoding=\"async\" loading=\"lazy\" width=\"390\" height=\"549\" src=\"https:\/\/tricker.cz\/wp-content\/uploads\/2021\/09\/image-2.png\" alt=\"\" class=\"wp-image-612\" srcset=\"https:\/\/tricker.cz\/wp-content\/uploads\/2021\/09\/image-2.png 390w, https:\/\/tricker.cz\/wp-content\/uploads\/2021\/09\/image-2-213x300.png 213w\" sizes=\"(max-width: 390px) 100vw, 390px\" \/><\/a><\/figure><\/div>\n\n\n\n<p><br>Po kliknut\u00ed na &#8222;Toggle&#8220; z\u00e1suvka okam\u017eit\u011b sepne. Juch\u016f! U\u017e te\u010f si m\u016f\u017eete odkaz na str\u00e1nku ulo\u017eit do telefonu a dal\u0161\u00edch za\u0159\u00edzen\u00ed a sp\u00ednat si dle libosti. Pod Configuration si m\u016f\u017eete krom dal\u0161\u00edch v\u011bc\u00ed nastavit i \u010dasova\u010de. Par\u00e1da!<\/p>\n\n\n\n<p>Nicm\u00e9n\u011b do z\u00e1suvky se d\u00e1 pos\u00edlat <a href=\"https:\/\/tasmota.github.io\/docs\/Commands\/\">cel\u00e1 spousta p\u0159\u00edkaz\u016f<\/a>. Pro m\u011b by t\u0159eba bylo fajn z\u00e1suvku s \u010derpadlem zapnout jen na p\u00e1r minut, kdy\u017e tam je nasazen\u00fd ost\u0159ikova\u010d na tr\u00e1vn\u00edk. P\u0159edt\u00edm jsem musel doufat, \u017ee se mi p\u0159es Smart life poda\u0159\u00ed z\u00e1suvku nejen zapnout, ale i nastavit \u010dasova\u010d na vypnut\u00ed. A potom jsem nem\u011bl jak ov\u011b\u0159it, jestli je opravdu vypnuto, proto\u017ee za\u0159\u00edzen\u00ed se mohlo ukazovat jako offline po n\u00e1hodn\u011b dlouhou dobu a bohu\u017eel se tak \u010dasto d\u011blo.<\/p>\n\n\n\n<p>Tak\u017ee co si takhle ud\u011blat vlastn\u00ed ovl\u00e1dac\u00ed str\u00e1nku? V dom\u011b u\u017e b\u011b\u017e\u00ed Raspberry Pi Zero pro ode\u010det impulz\u016f z elektrom\u011bru, tak\u017ee webov\u00fd server je kam jednodu\u0161e um\u00edstit (co\u017e by \u0161lo i na Synology).<\/p>\n\n\n\n<p>Na Raspberry jsem tedy nainstaloval NGINX (znateln\u011b leh\u010d\u00ed ne\u017e Apache) + PHP a dal se do d\u00edla.<\/p>\n\n\n\n<p>Za chv\u00edli jsem m\u011bl webovku, kterou jsem lehce ostyloval a d\u00edky tomu, \u017ee m\u016f\u017eete Tasmot\u011b p\u0159es p\u0159\u00edkaz <a href=\"https:\/\/tasmota.github.io\/docs\/Commands\/#the-power-of-backlog\">Backlog<\/a> poslat s\u00e9rii toho, co se m\u00e1 prov\u00e9st (zapni, po\u010dkej xy \u010dasu, vypni), do\u0161lo i na mnou vysn\u011bn\u00e9 jednoklikov\u00e9 zapni na x minut.<\/p>\n\n\n\n<p>Str\u00e1nka na telefonu vypad\u00e1 takto:<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large is-resized\"><a href=\"https:\/\/tricker.cz\/wp-content\/uploads\/2021\/09\/image-3.png\"><img decoding=\"async\" loading=\"lazy\" src=\"https:\/\/tricker.cz\/wp-content\/uploads\/2021\/09\/image-3-487x1024.png\" alt=\"\" class=\"wp-image-613\" width=\"292\" height=\"615\" srcset=\"https:\/\/tricker.cz\/wp-content\/uploads\/2021\/09\/image-3-487x1024.png 487w, https:\/\/tricker.cz\/wp-content\/uploads\/2021\/09\/image-3-143x300.png 143w, https:\/\/tricker.cz\/wp-content\/uploads\/2021\/09\/image-3.png 621w\" sizes=\"(max-width: 292px) 100vw, 292px\" \/><\/a><\/figure><\/div>\n\n\n\n<p><br>Sta\u010d\u00ed ulo\u017eit jako odkaz na plochu &#8211; pro ten \u00fa\u010del jsem si vyrobil sexy retro ikonku:<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-full is-resized\"><a href=\"https:\/\/tricker.cz\/wp-content\/uploads\/2021\/09\/image-1.png\"><img decoding=\"async\" loading=\"lazy\" src=\"https:\/\/tricker.cz\/wp-content\/uploads\/2021\/09\/image-1.png\" alt=\"\" class=\"wp-image-611\" width=\"186\" height=\"186\" srcset=\"https:\/\/tricker.cz\/wp-content\/uploads\/2021\/09\/image-1.png 307w, https:\/\/tricker.cz\/wp-content\/uploads\/2021\/09\/image-1-300x300.png 300w, https:\/\/tricker.cz\/wp-content\/uploads\/2021\/09\/image-1-150x150.png 150w\" sizes=\"(max-width: 186px) 100vw, 186px\" \/><\/a><\/figure><\/div>\n\n\n\n<p><br>Jako dal\u0161\u00ed jsem cht\u011bl m\u00edt str\u00e1nku i v hodink\u00e1ch. Pro ten \u00fa\u010del sta\u010d\u00ed vytvo\u0159it zkratku, kter\u00e1 m\u00e1 otev\u0159\u00edt adresu Raspberry. To s iOS 15 a watchOS 8 p\u0159estalo fungovat, proto\u017ee jsem m\u011bl zkratku jako &#8222;Otev\u0159\u00edt URL&#8220; m\u00edsto &#8222;Zobrazit str\u00e1nku&#8220; &#8211; grr! P\u0159edt\u00edm to \u0161lo&#8230; te\u010f to nad\u00e1valo na &#8222;nem\u00e1m \u010d\u00edm otev\u0159\u00edt sch\u00e9ma http&#8220; (i https). Po t\u00e9to drobn\u00e9 \u00faprav\u011b to op\u011bt fr\u010d\u00ed a v hodin\u00e1ch d\u00e1m zkratku \u010cerpadlo a zobraz\u00ed se:<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large is-resized\"><a href=\"https:\/\/tricker.cz\/wp-content\/uploads\/2021\/09\/IMG_2026.jpg\"><img decoding=\"async\" loading=\"lazy\" src=\"https:\/\/tricker.cz\/wp-content\/uploads\/2021\/09\/IMG_2026-1024x1024.jpg\" alt=\"\" class=\"wp-image-614\" width=\"339\" height=\"339\" srcset=\"https:\/\/tricker.cz\/wp-content\/uploads\/2021\/09\/IMG_2026-1024x1024.jpg 1024w, https:\/\/tricker.cz\/wp-content\/uploads\/2021\/09\/IMG_2026-300x300.jpg 300w, https:\/\/tricker.cz\/wp-content\/uploads\/2021\/09\/IMG_2026-150x150.jpg 150w, https:\/\/tricker.cz\/wp-content\/uploads\/2021\/09\/IMG_2026-768x768.jpg 768w, https:\/\/tricker.cz\/wp-content\/uploads\/2021\/09\/IMG_2026.jpg 1280w\" sizes=\"(max-width: 339px) 100vw, 339px\" \/><\/a><\/figure><\/div>\n\n\n\n<p><br>Je to par\u00e1da! Nav\u00edc hodinky funguj\u00ed autonomn\u011b, tak\u017ee jsou to jedin\u00e9 co pot\u0159ebuju a m\u016f\u017eu si vesele ovl\u00e1dat kr\u00e1sn\u011b nap\u0159\u00edmo. Zabezpe\u010den\u00ed zven\u010d\u00ed \u0159e\u0161\u00edm VPN, ve vnit\u0159n\u00ed s\u00edti jen nestandardn\u00edm portem (je to pro m\u011b dosta\u010duj\u00edc\u00ed, ale je mo\u017en\u00e9 si v\u0161e zaheslovat).<\/p>\n\n\n\n<p>A nakonec k\u00f3d samotn\u00e9 str\u00e1nky:<\/p>\n\n\n\n<pre style=\"font-size:11px\">&lt;?php\n\n\/\/ IP address of power outlet with Tasmota firmware\n$ip = \"192.168.150.50\";\n\nif(isset($_GET&#91;'request']))\n{\n    echo \"&lt;div class='requestinfo'&gt;\";\n    echo \"Returned: &lt;b&gt;\" . request($ip, $_GET&#91;'request']) . \"&lt;\/b&gt;\";\n    echo \"&lt;\/div&gt;\";\n}\n\nfunction request($ip, $request)\n{\n    $request = str_replace(&#91;\" \", \";\"], &#91;\"%20\", \"%3B\"], $request);\n    $request = \"http:\/\/\" . $ip . \"\/cm?cmnd=\" . $request;\n\n    $ch = curl_init();\n    curl_setopt($ch, CURLOPT_URL, $request);\n    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);\n    $r = curl_exec($ch);\n    curl_close($ch);\n\n    return $r;\n}\n\n?&gt;\n&lt;html&gt;\n&lt;head&gt;\n&lt;title&gt;\u010cerpadlo&lt;\/title&gt;\n&lt;meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\"&gt;\n&lt;link rel=\"apple-touch-icon\" href=\"watering-pump.png\" \/&gt;\n\n&lt;style&gt;\n    body { font-size: 2rem; background: #282926; }\n    a { text-decoration: none; }\n    .button { margin: 5px auto; padding: 20px 0; color: darkgreen; border: 2px solid black; background: #f4ffc0; font-weight: bold; display: block; width: 95%; text-align: center; border-radius: 15px; }\n    .green { background: #198754; color: white }\n    .green:hover { background: #157347; }\n    .red { background: #DC3545; color: white; }\n    .red:hover { background: #BB2D3B; }\n    .info { background: #FFC107; color: black; }\n    .info:hover { background: #FFCA2C; }\n    .state { background: #4480b5; color: white; margin: 0 auto; padding: 5px 0; border: 2px solid black; font-weight: normal; display: block; width: 95%; text-align: center; border-radius: 15px; }\n    .state span { font-weight: bold }\n    .requestinfo { color: saddlebrown; background: lightblue; margin: 20px auto; padding: 20px; border: 2px solid #1e527f; text-align: center; width: 90%; }\n    hr { content: \"\"; clear: both; display: table; }\n&lt;\/style&gt;\n&lt;\/head&gt;\n\n&lt;body&gt;\n&lt;?php\n\n    \/\/ Is it ON or OFF?\n    $state = request($ip, \"Power\");\n    $state = json_decode($state, true);\n\n    if($state&#91;\"POWER\"] == \"ON\")\n    {\n        echo \"&lt;a href='?'&gt;&lt;div class='state'&gt;Stav: &lt;span&gt;Zap&lt;\/span&gt;nuto&lt;\/div&gt;&lt;\/a&gt;\";\n    }\n    else\n    {\n        echo \"&lt;a href='?'&gt;&lt;div class='state'&gt;Stav: &lt;span&gt;Vyp&lt;\/span&gt;nuto&lt;\/div&gt;&lt;\/a&gt;\";\n    }\n\n?&gt;\n&lt;p&gt;\n    &lt;a href='?request=Power on' class='button green'&gt;Zapnout&lt;\/a&gt;&lt;br&gt;\n    &lt;a href='?request=Power off' class='button red'&gt;Vypnout&lt;\/a&gt;&lt;br&gt;\n    &lt;a href='?request=Backlog Power on;Delay 600; Power off' class='button info'&gt;Na 1 minutu&lt;\/a&gt;&lt;br&gt;\n    &lt;a href='?request=Backlog Power on;Delay 1200; Power off' class='button info'&gt;Na 2 minuty&lt;\/a&gt;&lt;br&gt;\n    &lt;a href='?request=Backlog Power on;Delay 1800; Power off' class='button info'&gt;Na 3 minuty&lt;\/a&gt;&lt;br&gt;\n    &lt;a href='?request=Backlog Power on;Delay 2400; Power off' class='button info'&gt;Na 4 minuty&lt;\/a&gt;&lt;br&gt;\n    &lt;a href='?request=Backlog Power on;Delay 3000; Power off' class='button info'&gt;Na 5 minut&lt;\/a&gt;&lt;br&gt;\n    &lt;a href='?request=Backlog Power on;Delay 3600; Power off' class='button info'&gt;Na 6 minut&lt;\/a&gt;&lt;br&gt;\n&lt;\/p&gt;\n&lt;\/body&gt;\n&lt;\/html&gt;<\/pre>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Del\u0161\u00ed dobu m\u011b tr\u00e1pilo nespolehliv\u00e9 sp\u00edn\u00e1n\u00ed chytr\u00e9ho bazmeku Vocolinc p\u0159es cloud aplikaci Smart life. V\u011bt\u0161ina chytr\u00fdch z\u00e1suvek je jenom n\u011bjak\u00fd rebranding t\u00e9ho\u017e, tak\u017ee koupit n\u011bco jin\u00e9ho nevypadalo jako ta spr\u00e1vn\u00e1 cesta. Obzvl\u00e1\u0161\u0165, kdy\u017e chci &#8222;jenom&#8220; ovl\u00e1dat jednu z\u00e1suvku, na kterou&#8230; <a class=\"more-link\" href=\"https:\/\/tricker.cz\/?p=610\">Pokra\u010dovat ve \u010dten\u00ed &rarr;<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[3,24],"tags":[],"_links":{"self":[{"href":"https:\/\/tricker.cz\/index.php?rest_route=\/wp\/v2\/posts\/610"}],"collection":[{"href":"https:\/\/tricker.cz\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/tricker.cz\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/tricker.cz\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/tricker.cz\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=610"}],"version-history":[{"count":11,"href":"https:\/\/tricker.cz\/index.php?rest_route=\/wp\/v2\/posts\/610\/revisions"}],"predecessor-version":[{"id":638,"href":"https:\/\/tricker.cz\/index.php?rest_route=\/wp\/v2\/posts\/610\/revisions\/638"}],"wp:attachment":[{"href":"https:\/\/tricker.cz\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=610"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/tricker.cz\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=610"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/tricker.cz\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=610"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}