Browsed by
Tag: rele

Swifitch aneb vyrobte si wifi relé

Swifitch aneb vyrobte si wifi relé

Když jsem včera psal o tom, jak jsem přes zimu krásně nezvládl pohnout s žádnou elektronikou, úplně jsem zapoměl na jeden drobný úspěch.

Před nějakým časem se mi ozval jeden čtenář blogu, že spolu s kolegou navrhl a vyrobil zařízení Swifitch. On sám pak byl s náma i na minulém Loxone srazu, takže ho pár z Vás už i zná (především po jeho prezentaci, jak monitorovat přítomnost bluetooth na detekci blížící se manželky domů :)).

Zařízení samotné je takové wifi-relátko. Něco jako komerční sonoff, ale s důrazem na vyšší bezpečnost a nižší cenu :). Ačkoli sám razím teorii, že veškerá technologie má být v rozvaděči přes který je vše ovládáno, občas to prostě nejde. Nemluvím tu teď o hlavních světlech, žaluziích a dalších zařízeních, se kterýma člověk počítá už při stavbě. Spíše jde o ty drobné věci, které se třeba i s ročním nebo životním obdobím mění.

Například vánoční stromeček, osvětlení v okně, osvětlení prcka v pokoji nebo zvlhčovačka v ložnici. Prostě cokoli, co potřebujete automaticky zapínat a vypínat. Jasně, můžete mít každou zásuvku zvlášť ovládanou přes relé, ale je to většinou ekonomický nesmysl. Jenže pak nastanou chvíle, kdy by se to tak hodilo….

A na tyhle chvíle je tu zařízení Swifitch. Přivedete do něj 230V a ono se z něj jak samo napájí, tak přes wifi spíná výstupní 230V relé.

Konkrétně třeba ta zvlhčovačka v ložnici. Přes zimu máme dost suchý vzduch, ale pouštět zvhlčovačku každý den ručně je opruz. Navíc pak zbytečně běží až do rána, což je většinou zbytečné. Takže jsem použil Swifitch a přes Loxone naprogramoval automatické spouštění a vypínání. Krásné a elegantní řešení.

Navíc, swifitch si můžete postavit sami doma. Za pár korun (konkrétně cca 250kč), trochu času a šikovnosti máte supr zařízení na spínání čehokoli. Navíc se tím hezky procvičíte v pájení :)).

Já osobně jsem si z Aliexpressu a Seedstudia objednal materiál na 20ks. Je totiž skoro jedno, jestli objednáte 1ks, 10ks, nebo 20ks. Cenově vyjde výroba plošňáku + poštovné hodně podobně. A když už jsem se do toho tak opřel, rozhodl jsem se i vylepšit si pájecí stanici.

 

Na aliexpressu jsem objednal tuto . Cenově i s poštovným vyšla na 70USD a v čechách byla za týden. A musím říct, je fakt supr. Krom klasického pájení a možnosti nastavení přesné teploty má horký vzduch, který nepotřebujete, dokud ho nemáte. Jakmile ale jednou okusíte, tak nebudete chtít jinak. Super se s tím zatahujou izolační bužírky, opravují špatně připájené kontakty, nebo sundavají komponenty i celé čipy (například ESP čip z Wemos D1 desky).

Krom výše uvedeného je pak horký vzduch super na pájecí pastu. Nanesete pájeci pastu, ohřejete ji vzduchem a máte připájeny všechny kontakty krásně a čistě. S tím se teprve učím, ale je to jen o správném množství pasty a tepla.

Samotná výroba Swifitche je celkem snadná, objednáte plošnák a podle návodu ho osadíte komponentama. K naprogramování ESP čipu pak lze využít buď kontaktů přímo na plošnáku, nebo si z Wemos desky (ze které předtím sundáte ESP čip) uděláte programátor. Touto cestou jsem šel já.

A takhle pak vypadala moje první deska zkompletovaného swifitche. Pájení sice není na jedničku s hvězdičkou, ale já byl spokojen. A čím více jich vyrobíte, tím lepší to bude. Tady se musím zmínit o zajímavé chybě, kterou jsem během pájení udělal a kterou nebýt autora jsem zřejmě nevyřešil.

Na téhle fotce vidíte vedle sebe můj modrý a autorův červený plošňák. Jak můžete vidět, jsou naprosto identické, jenže ten jeho funguje a můj ne (překvapivě :)). Ani po třetí výměně ESP čipu (a tady se ten horkovzduch fakt hodil), desateru proměření a snad padesáti propájení všech kontaktů ten můj nefungoval stabilně.

Chvíli jel, pak najednou nekomunikoval, pak svítil, najednou ne, atd. A tak jsem udělal fotky obou ze všech stran a začli jsme řešit proč. Až při fakt důkladném ohledání jsme zjistili, že jsem otočil dva odpory o 90 stupňů. Kdo ví, co přesně to vlastně dělalo a jak to, že to vůbec fungovalo. Ale přitom taková blbost. A tady se fakt hodilo mít po ruce i funkční kus.

Po této opravě najednou začalo fungovat vše jak po másle. Nahrál jsem připravený firwmare, připojil jsem Swifitch na wifi a připojil ho k mému MQTT serveru.

Samotné propojení mezi MQTT a Loxone pak řeším opět přes NodeRED. V NodeRED mám udělaný HTTP endpoint, který Loxone zavolá s parametrem on/off na zapnutí/vypnutí daného swifitche.

A takto to pak vypadá v Loxone Configu:

Cest, jak získat swifitch, je několik. Můžete si ho celý objednat a postavit sami, jako jsem to udělal já. Jednoduše použijte nákupní seznam ze stránky https://github.com/ArnieX/swifitch/blob/master/README_CZ.md.

Případně můžete využít služby SeedStudio, které krom výroby samotného plošňáku nabízí i službu osazení všech komponentů. Zkušenost s tím nemám, ale tuto volbu jsem tam viděl.

A jako poslední, nejjednodušší cesta, je kontaktovat přímo autora. Ten hotové swifitche také prodává za cenu 1000kč včetně krabičky a nahraného firwmaru. Za vybrané peníze momentálně vyvíjí další, mnohem sofistikovanější zařízení, kterým by chtěl konkurovat samotnému Loxonu ( a prý se s ním pochlubí na dalším Loxone srazu).

Osobně si myslím, že zakoupení jednoho zařízení je dobrý způsob, jak ho za jeho práci podpořit a zároveň vám zakoupený kus hodně pomůže při výrobě dalších, jelikož máte vzorový kousek, se kterým můžete vše porovnávat.

Quido na steroidech

Quido na steroidech

Tak tu máme první velkou aktualizaci SW pro Papouchova Quida. Jak jsem v předchozích článcích, původně bylo implementováno vše jen pro vstupy, ale výstupy jsem neřešil. A protože už je zájem i o výstupy, nedalo se nic dělat a hurá k parodii na C jazyk nazývanou PicoC :).

Bohužel z mého odhadu, že to bude fik fik za hoďku hotové nakonec dost sešlo. První problém byl, že ovládat jednotlivé relé znamená mít spoustu dalších různých řídících paketů, což by obnášelo spoustu manuálního generování. Takže nezbylo než se zanořit ještě hloubš do dokumentace a napsat si vlastní generátor a podepisovač paketů.

Výhoda je, že už nemusím připravovat pro nové uživatele pakety ručně, nevýhoda byla, že to vzalo hromadu času. Krom samotné implementace to hlavně chtělo zavést už i nějaké testování, protože lazení v Loxone program editoru je naprosté peklo (jako třeba proč nefunguje ani blbá klávesa PageUp-PageDown je mi záhadou).

Takže jsem si rozběhal projekt ve Visual Studiu, namockoval Loxone metody tak, aby nic nedělali, ale program šel zkompilovat a pustil se do rozšiřování. Kromě samotného podepisování, které je plné bitových operací, to chtělo ještě nějaké parsery na vyčtení dat z IP adresy, výpočty bitů pro stavy relé a hromadu dalších věcí, které už nabouchat jen od boku není úplně bezpečné.

Takže krom toho, že to jde kompilovat ve VS, čímž eliminuju zdlouhavý proces přes Loxone, tak jsem tam udělal ještě sadu spousty testů, které všechny tyhle metody před nasazením do Loxonu otestují.

Co se začíná ukazovat jako dost komplikace je fakt, že celý progam musí být jen v jednom souboru. Žádné pěkné oddělení, žádné objekty, žádná struktura. Pěkně všechno pod sebou, navíc ideálně v globálních proměných osekaných na dřeň, aby to žralo co nejméně paměti.

Takže je to ošklivý špagety kód. Navíc ručně optimalizovaný tak, aby se nikde nealokovala žádná pamět, ale používal se sdílený buffer, aby to žralo co nejméně procesoru a hlavně to nepadalo a prošlo to i tím příšerným PicoC interpretem.

Když bylo vše naprogramováno, přišlo na řadu první testování v reálném prostředí. Bohužel to hned odhalilo druhý velký problém. Ukázalo se, že moje myšlenka se sdíleným kódem pro vstupy i výstupy je mimo a že to takto nepůjde.

Problém totiž je, že PicoC neumí asynchroní čtení ze streamu. Takže stream buď čte, ale pak je program blokován čekáním a čtením, nebo nečte, a pak se pakety zkrátka nezpracují.

Původně jsem to měl tak, že se vždy jen zjistilo, jestli jsou nová data, když ne, zjistilo se, jestli je na vstupech nějaká změna. A když ne, znova se zjistili data, …..

Jenže, v okamžiku, kdy se zjišťovali vstupy, tak se třeba nenačetlo, že člověk pustil tlačítko žaluzie, a tak žaluzie sjížděla vesele dál. Nebo nezaregistroval stistknutí, nebo otevření okna,… Protože když nečetl, paket zůstal nevyslyšen.

A bohužel, toto nijak vyřešit nejde. Pročetl jsem dokumentaci, pročetl diskuze, a je to prostě tak. Takže jediné řešení jsou dvě smyčky. Jedna co načítá data z Papoucha, druhý co načítá vstupy z Loxonu.

A když dvě smyčky, tak dva Loxone programy. Takže pokud někdo budete chtít využít obě funkce, je nutné použít dva samostatné bloky. Když jen jednu z nich, druhý se použít nemusí.

A aby se program dobře nastavoval i distribuoval, je to udělané tak, že je program jeden a ten stejný a jen pomocí přepínače se nastavuje, jestli se má chovat jako Relé můstek nebo můstek pro Vstupy.

Celé nastavení programu tak nyní vypadá takto

char * c_remote_listen_address = "/dev/udp/192.168.1.254/10001";
char * c_remote_write_address = "/dev/udp/192.168.1.254/10002";
//pocet rele
unsigned int c_relays_count = 3;
//automaticky refreshnout stav vstupu pro pripad, ze se ztratil UDP paket s notifikaci (treba otevrene okno)
unsigned int c_auto_refresh_every_sec = 60;
//jak casto se detekuji vstupy kvuli rele. Cim mene, tim vice se bude zatezovat miniserver
unsigned int c_relay_check_period_msec = 100;
//rezim 0-INPUTS [digitalni vstupy], 1-OUTPUTS [rele]
unsigned int quido_bridge_mode = 1;

Jak je vidět, zmizelo nastavení paketů, to se dělá dynamicky. Jediné co je potřeba, je správně zadat IP adresu a počet relé, které Quido má (při větším čísle než kolik jich je k dispozici pak nefunguje žádné!). Jako poslední nastavení Nově pak jsou nastavení rezimu INPUTS a OUTPUTS a konstanta, která určuje, jak často se mají vstupy kontrolovat.

To je totiž další vykutálenost Loxonu. Namísto, aby se dalo říct “čekej, než se vstup změní”, tak se musí dělat “už se změnilo?”,”už?”,”už?”,… A čim častěji se ptá, tím víc to žere prostředky. A když se taková smyčka pustí bez uspání, žere 100% procesoru.

Takže jsem jako výchozí nastavil 100ms. Pokud by to bylo někomu málo, může si to vytunit, ale s rizikem, že to bude žrát více prostředků Loxonu. Imho si myslím, že 100ms je dostatečný fofr.

Co se týká blokového zapojení v Loxone configu, tak k tomu můžu říct jen jediné. Loxone programátoři by se nad sebou měli zamyslet a dodělat logické chybějící bloky. Nehápu, proč když Loxone nabízí Binární dekodér, nemá i logický protikus binární kodér. Nechápu, proč když se zeptám na podpoře, tak jim přijde logická odpověd “použijte vzorec”. A nechápu, proč když už doprd… mám použít vzorec, tak proč vzorec nemá aspoň osm vstupů, ale jen čtyři, takže to práci pekelně komplikuje.

Ale ok. Jedno přísloví říká, že na všechno je potřeba se koukat ne jako na problém, ale jako na příležitost, a tak jsem se té příležitosti chopil a poskládal to ze vzorců.

Samotné využití a napojení na reálný dům je pak už hodně jednoduché. Na vstupy vzorce se přivede 0 nebo 1 a vzorce spolu s programem dle toho zapnout dané relé. Pokud na vstup přivedete cokoli víc než 1, výsledek je random a nejspíš se nestane vůbec nic. Je to proto, že ve vzorci převádím binární 0 a 1 na číslo a třeba taková 2 v tom udělá dost brajgl :).

Níže je video ukázka jak to funguje, především pak rychlost. Podle mě je suprová ;-). Nedokážu si předtavit, že byste dokázali klikat rychleji, než kolik můstek zvládá Quida (Papoucha) ovládat.

Momentálně probíhá testování v mém domě, kdy se jednak testuje původní část na vstupy pomocí žaluzií a stavů oken. Výstupy pak testuju jen napojenou diodou v rozvaděči, protože jsem takto narychlo neměl žádný siloproud, co bych tam zapojil a přepojovat rozvaděč se mi nechtělo.

Pokud půjde všechno jak má, tak novou verzi pustím do světa do konce týdne. Odvážným majitelům předchozí verze klidně poskytnu dříve, ale jen na vlastní riziko :).