Vylepšení ovládání venkovních světel
20.10.2025
Intro
Dneska se dá koupit skoro všechno hotové. Ale mě víc baví dělat věci po svém. Nejde o to ušetřit nebo mít něco výjimečného — prostě mě baví ten proces. Když něco bastlím, vypnu hlavu (obrazně), zapojím ruce a sleduju, jak se z nápadu pomalu stává něco skutečného. Jasně, občas to nevypadá a nefunguje jako z obchodu. Ale je to moje. A to mi stačí.
A právě proto jsem se rozhodl pustit do úplně té nejstupidnější věci, jakou si člověk může vymyslet – do obyčejného ovládání světel. Něco, na co už existuje tuna chytrých IoT zařízení, aplikací a systémů, které umí víc, než bych kdy využil. Ale mě to prostě lákalo udělat si to po svém. Bez cloudu, bez aplikací, bez nutnosti registrovat se někde na druhém konci světa – jen pár drátů, mikrokontrolér a trocha trpělivosti.
Proč mi nevyhovuje stávající stav?
Máme v rámci domku čtyři venkovní světelné okruhy:
- Terasa - ovládá se dvěma vypínači venku a jedním z obývacího pokoje.
- Vchodové dveře - ovládá se dvěma vypínači venku a jedním z předsíně.
- Přístřešek parkovacích stání - ovládá se dálkovým ovladačem, resp. sadou relé + ovladač s Aliexpresu. Přístřešek se dodělával později než domek, takže se na to při stavbě nemyslelo.
- Zásuvka vánočního osvětlení - sice to není tak úplně světlo v pravém slova smyslu, ale během vánoc to svítí, takže vlastně tak trochu je :-) V rozvodnici se spíná časovým spínačem.
Všechna elektroinstalace u nás je „hloupá“, a to z jednoho prostého důvodu – snaha ušetřit při stavbě, kde se dalo. Nechtěl jsem platit hypotéku až do důchodu (tento problém je už naštěstí vyřešen :-) ) jen proto, abych měl v každé místnosti dotykový panel nebo světla připojená na internet. Jasně, technologicky by to bylo naprosto super, ale raději jsem se tehdy držel skromnosti a zvolil klasiku – kabel, vypínač a spotřebič. Nic, co by za deset let morálně zastaralo a já musel shánět náhradu za výrobce, který mezitím stihl zmizet z trhu.
Jenže od postavení přístřešku parkovacích stání mě štve jedna věc – světla se dají zapnout jen dálkovým ovladačem. Musím ho složitě hledat, místo toho, abych mohl operativně sáhnout po nejbližším venkovním vypínači a světla okamžitě rozsvítit. Zároveň se mi zatím nechce vrtat do fasády, instalovat další krabičku a tahat nové dráty.
A právě proto mě napadlo udělat ze stávajících „hloupých“ vypínačů chytré. A když už, proč se omezovat jen na to? Přidám dálkové ovládání na všechna světla, napojím je na MQTT brokera a světla půjdou ovládat i z mobilu. To zní jako plán :-)
Původní elektroinstalace
Na níže uvedeném obrázku je schéma původního stavu. Všechna svítidla jsou LEDková s příkonem mezi 15–25 W na kus. U vchodu a terasy jsou vývody od vypínačů vedeny přímo do rozvodnice, což velmi usnadňuje případnou změnu jejich funkce. Je to hlavně proto, že kabely ke všem svítidlům (a zásuvce pro vánoční osvětlení) vedou přes půdu, zatímco kabely od vypínačů jsou schované v předstěnách - tedy jiné trasy.
Nové elektroinstalace
Do rozvaděče byl instalován modul „spínače světel“, který obsahuje čtyři relé, napájecí zdroj a doplňkovou elektroniku. Celé zařízení je umístěno ve čtyřmodulové DIN lištové krabičce. Všechna venkovní světla jsou spínána vnitřními relé, zatímco nástěnné vypínače jsou připojeny na digitální vstupy (max. 12 V). Ke spínači světel je prostřednictvím sběrnice RS485 připojen také přijímač dálkových ovladačů. Světla jsou nově připojena pouze ja jeden jistič - proudově bohatě stačí - spotřeba všech světel včetně vánočního osvětlení je cca. 250W.
Spínač světel
Hardware
Základem je zapojení, které je umístěno v rozvodnici. Obsahuje 4 silové výstupy, 3 drátové vstupy, RS485 linku a samozřejmě možnost připojení na WiFi. Protože obrázek vydá za 1000 slov, tak tady je schéma.
Podrobnosti:
- 4 silové výstupy – čtyři relé umožňující spínat stávající světelné okruhy. V domácích zásobách (notně doplněných z Holic) jsem našel pár desítek relátek RAS. Obyčejné, ale pro tento účel naprosto dostačující. Napětí cívky je 12 V a jeden přepínací kontakt zvládá 10 A při 250 V AC, což je více než dostatečné i na špičky při zapnutí LED svítidel.
- 3 drátové vstupy – slouží k připojení stávajících vypínačů a jednoho vstupu do rezervy. Pomohly zde domácí zásoby optočlenů LTV815.
- RS485 linka na přijímač dálkového ovládání – možná trochu overkill, ale přijímač musí být zhruba 25 m od rozvodnice. Na tuto vzdálenost bych se bál přenášet běžný TTL signál kvůli rušení a napěťovým špičkám. RS485 je na toto více než vhodné a díky tomu, že mám doma spoustu MAX485, ATTINY85 a podobné drobotiny, nebyl problém jej implementovat.
- WiFi – pro připojení k MQTT brokerovi. Poslední roky jsem používal ESP8266 (konkrétně desku Wemos D1), která má ale pouze jeden UART, navíc připojený k USB/serial převodníku, což trochu komplikuje použití. Nakonec jsem objevil ESP32-C3 SuperMini, které tento problém elegantně řeší volným mapováním dalších hardwarových UARTů na libovolné GPIO piny. Navíc nabízí více použitelných GPIO, což výrazně usnadňuje připojení dalších vstupů a výstupů. Jedinou menší nevýhodou je slabší anténa, ale to se dá snadno vyřešit kouskem drátu vhodné délky – holt daň za kompaktní velikost desky.
- Napájení – zajišťuje externí zdroj na DIN lištu. Interně pak 5V step-down měnič s AP63300C. K sehnání všude možně v Číně nebo v ČR např. ZDE.
- Krabička – je typu Z108J, 4-modulová na DIN lištu z ABS. Dá se koupit různě, např. ZDE.
A zde je několik fotek hotového zařízení.
Firmware
Firmware je klasický (a poměrně primitivní) Arduino sketch - jen je pro přehlednost rozdělen do více souborů. Samozřejmě pro přeložení je potřeba do IDE doinstalovat podporu pro ESP32-C3 (esp32 / ESP32C3 Dev Module) a použité knihovny. U boardu je potřeba povolit "USB CDC On Boot", jinak nebude fungovat sériová konzole.
Soubory:
Podrobnosti:
- Relé jsou ovládána podle hodnot globálních proměnných releN_timer. Pokud je hodnota časovače větší než nula, relé je sepnuté. Pokud je rovna nule, relé se rozepne. Hodnota časovače se každou sekundu automaticky sníží o jedničku. Všechny možné vstupy – ať už fyzické vypínače, dálkové ovládání nebo MQTT zprávy – v podstatě pouze nastavují hodnotu příslušného časovače na určitou hodnotu. Tím se zároveň zajišťuje i automatický timeout, aby některá světla nezůstala svítit zbytečně dlouho nebo trvale. Například u světel parkovacích stání plně postačí nastavit časovač na 300 sekund – to je dost času na zaparkování, vystoupení a příchod domů. Poté se světla automaticky zhasnou.
- K jednotce jsou připojeny klasické vypínače, nikoli tlačítka. Obsluha v souboru lights_sw.ino zajišťuje detekci změn stavu — tedy přechod ze sepnutého na rozepnutý a naopak. Dokáže rozpoznat i dvojitou změnu stavu (rychlé cvak–cvak), což jsem využil pro ovládání světel parkovacích stání. Jedno přepnutí (cvak) zapíná nebo vypíná světlo nad vchodovými dveřmi. Dvojité přepnutí (rychlé cvak–cvak) pak ovládá světla parkovacích stání. Možností konfigurace a přizpůsobení je přitom celá řada.
- Vyhodnocování tlačítek z dálkových ovladačů je ještě o krok dál. Algoritmus v lights_rc.ino dokáže rozpoznat stisk (přechod z nestisknutého tlačítka na stisknuté), dokonaný stisk (stisk následovaný uvolněním), dvojitý dokonaný stisk a dlouhý stisk.
- Data o stisknutých tlačítkách na dálkových ovladačích se do spínače světel přenášejí pomocí sběrnice RS485. Na straně MCU se jedná o příjem přes UART, přičemž RX je připojen na pin 21. Přenos probíhá rychlostí 600 baudů, což je pomalé, ale přenáší se pouze jeden byte. Spodní čtyři bity tohoto byte odpovídají jednotlivým tlačítkům na ovladači (vždy 4 tlačítka), horní čtyři bity jsou jejich inverzí. Toto řešení slouží jako jednoduchá ochrana proti případným chybám přenosu (samozřejmě ve velmi malém rozsahu). Pokud by to do budoucna zlobilo, je možné přidat nějakou lepší metodu na zabezpečení.
- MQTT posílá do brokeru na topic "my-lights/data" JSON se stavy časovačů v intervalu 5 sekund. Na topic "my-lights/events" jsou odesílány události, co se právě děje – například sepnutí relé, stisk vypínače nebo dálkového ovladače. Jednotka zároveň sleduje topicy "my-lights/commands/N", kde zasláním čísla je možné nastavit hodnoty časovačů jednotlivých relé. Tuto funkci využívá jednoduchá webová aplikace (PWA), díky níž si na mobilu mohu rozsvěcet nebo zhasínat jakákoliv světla – tedy defakto měnit hodnoty časovačů.

Přijímač dálkového ovládání
Hardware
Přijímač dálkového ovládání převádí stav stisknutého tlačítka na data, které následně odeslá hlavní jednotce přes RS485. Žádná chytristika, pouze jeden byte a 4 bity se stavy tlačítek.
Podrobnosti:
-
RX480E – přijímač dálkových ovladačů s čipem EV1527. U něj lze nastavit různé režimy, já zvolil ten, který u spárovaného dálkového ovladače kopíruje stav tlačítka na odpovídající výstup. Pokud je tlačítko stisknuto, na daném výstupním pinu je logická 1, jinak logická 0. V ČR je k sehnání např. ZDE.
A zde je několik fotek modelu a hotového přijímače.
Firmware
Firmware je také klasický Arduino sketch jen s tím rozdílem, že musí být do MCU nahrán "pomocí programátoru." A předím se musí nastavit "fuses" tak, aby MCU běžel na 1MHz s interním oscilátorem apod.
Soubory:
Podrobnosti:
- Program je napsán tak, že MCU většinu času „chrápe“ :-). Probouzí se přerušením od WDT každé dvě sekundy, přečte stavy vstupů z přijímače dálkového ovladače, odešle byte přes RS485 spínači světel a opět usne. Pokud se však na dálkovém ovladači stiskne libovolné tlačítko, MCU se okamžitě probudí a začne tuto informaci vysílat v intervalu 50 ms. Po uvolnění tlačítek se MCU vrátí do původního „letargického“ režimu. Cílem bylo ušetřit elektřinu, ale ukázalo se, že přijímač dálkového ovladače má spotřebu kolem 2.5 mA. MCU v probuzeném stavu necelý jeden. Takže celková úspora jeho uspáváním není zase tak zásadní.
- K přenosu je využito SW UARTU, resp. jen jeho vykostěná část odesílající jeden byte rychlostí 600 baudů. Ve spodní částu byte jsou stavy tlačítek DO a v horní pak jejich inverze. Není to bůhvíjaká ochrana, ale zatím vše funguje zcela bez chyb.
Ke stažení
Schémata a desky