úterý 21. prosince 2021

TinyHA: pobočková telefonní ústředna (PBX)

Dnešní část TinyHA souvisí s domácí automatizací jen velice volně. Sice má připravený interface pro RS485 spojení se zbytkem systému, ale zatím jsem propojení nerealizoval. Co si budeme namlouvat, jedná se prakticky o hračku pro děti.

Na dovolené se syn shlédl v hotelovém telefonu, kterým by se (pokud by fungoval) dalo volat babičce do vedlejšího pokoje. Protože telefony na klasickou analogovou telefonní síť jsou snadno sehnatelné za pár korun (na Aukru cca 100Kč vč. poštovného), napadlo mě realizovat malou domácí telefonní ústřednu. Samozřejmě by šlo použít hotové profi řešení, ale to by jednak byl kanón na vrabce, druhak byly klasické ústředny zpravidla velmi žravé na elektřinu.

Velkou inspiraci jsem čerpal ze staršího článku na mcu.cz. Zásadním zjednodušením mé pětiportové varianty je "paralelka", jednotlivé okruhy tedy nejsou spojované, ale po zvednutí sluchátka se rovnou všichni účastníci připojují do sdíleného hovoru. Základní propojení je primitivní, jedná se o zdroje proudu pro jednotlivé linky spojené střídavou vazbou pro přenos hovorového signálu. Trošku větším oříškem je detekce zvednutí sluchátka a zejména vyzvánění.

Vyzvánění je klasicky řešeno střídavým napětím až 110V o frekvenci cca 20Hz, superponovaným na linkové napětí cca 60V stejnosměrných. Rovnou jsem zavrhl klasické staré telefony, předpokládám využití moderních, s "digitálním" vyzváněním a tónovou volbou. Podpora pulzní volby by byla záležitostí softwaru, kterou jsem ale neimplementoval.

Moderní telefony bez problémů pracují s linkovým napětím 24V, používám proudové napájení cca 20mA. Pro vyzvánění je využito střídavého napětí cca 80V o frekvenci 50Hz, které je tvořeno pomocí transformátoru a dvojčinného měniče. Vše je řízeno mikrokontrolérem AVR.

Vyzvánění je poměrně problematická záležitost a po několika neúspěšných experimentech s optotriaky jsem se rozhodl jít klasickou cestou s využitím inkurantních miniaturních relé, které jsou přímo určeny pro použití v komunikacích. Zvolené řešení funguje výborně. Detekce vyvěšení sluchátka je realizována pomocí AD převodníků mikrokontroléru. V klidovém stavu je úloha jednoduchá, trochu složitější je to při vyzvánění - je nutné synchronizovat AD převod se správnou půlvlnou 50Hz vyzváněcího napětí. Analogově by to byl oříšek, pro mikrokontrolér jednoduchá práce.

Pro detekci tónové volby je použit DTMF dekodér MT8870, osazený na modulu od Hadexu, lze sehnat i z Číny. Zdrojový kód lze najít v projektu TinyHA na Githubu, hlavní část stavového automatu je v souboru main.c. Mikrokontrolér se rozhoduje dle stavu (vyvěšení) jednotlivých linek a DTMF dekodéru. Dle potřeby generuje vyzváněcí napětí a tóny do sluchátek.

V klidu čeká na zvednutí libovolného sluchátka, následně začne generovat oznamovací tón. Po prvním DTMF vstupu nebo zvednutí dalšího telefonu přechází do stavu hovoru. Reaguje na DTMF volby *1 až *5 pro jednotlivé linky, generuje vyzváněcí napětí pro příslušný telefon a vyzváněcí tón do společného hovorového kanálu. Po zvednutí telefonu, zavěšení volajícího nebo dalším DTMF vstupu volání zruší. Pokud už je volaná linka vyvěšena, generuje obsazovací tón.

Celé zařízení je napájeno z bezpečných stejnosměrných 24V, otestováno jej mám zatím se čtyřmi telefony. Všechny přístroje s tónovou volbou fungovaly bez problémů včetně detekce zavěšení. S výhodou využívám dosud neobsazené Ethernetové Cat5e kabeláže do různých místností. Na jaře se chystám jednu linku zavést i na rozhlednu :-)


  

středa 15. prosince 2021

Pexeso pro elektroinženýry

Také vás rodina a přátelé drtí v pexesu, protože na to nemáte paměť? Tak tady je pomsta elektroinženýra - lahůdka jménem pouzdra integrovaných obvodů. Zaručeně zmate neznalé, byť zkušenější hráče. Ideální na krácení dlouhé chvíle mezi svátky či jako dárek pod stromeček :-)


 

úterý 31. srpna 2021

TinyHA: centrální jednotka s RPi Zero

Centrálním mozkem celého systému je Raspberry Pi Zero W. Dnes už bych asi vše řešil embedded cestou s vhodnou bránou připojenou k hlavnímu serveru (což je u mě historický thin klient od HP s Debianem), nicméně dříve jsem místo něj měl jen NAS, takže samostatné řešení bylo vhodnější.

K RPi Zero jsem navrhl "hat". V uvozovkách proto, že rozšiřující hat destičky obvykle přidávají nějakou funkci či rozšíření a jsou maličké. Můj "hat" je víc než dvojnásobný než RPi Zero a vytahuje z GPIO konektoru vše myslitelné. Je na něm spínaný zdroj, oddělené vstupy, reléové výstupy, budič pro linku RS485, konektor pro SPI a I2C rozhraní, EEPROM paměť a řadič pro 1wire sběrnici. Bohužel UART na RPi nemá možnost řízení směru nutného pro RS485, proto je tato funkce realizována časovačem 555. Funguje spolehlivě pro jednu nastavenou rychlost komunikace, v případě změny se musí upravit časová konstanta.

Veškerá datová kabeláž se sbíhá v jedné místnosti, miniaturní serverovně neboli "špajzce". Pro propojení jsem využil levné patch panely po 8 pozicích, s postupným rozšiřováním na současných 16 pozic a RPi modul plus další drobnosti. Vše je spojeno zařezávacími konektory Krone. Jejich nacvaknutí je při použití správného nástroje snadné, spolehlivost výborná. Tedy dokud neřešíte stejně jako já problém dvou drátů v jedné svorce, to se sice dá, ale spolehlivost je rapidně horší.

Ne všechna kabeláž vede přes RPi, např. zvonek je nezávislý a do RPi vede jen jako vstup pro záznam událostí. Plexi kryt se ukázal jako nutnost před průzkumnými operacemi mých dětí.

Co tedy běží na samotném RPi Zero? Klasický Raspbian Lite (resp. nověji Raspberry Pi OS Lite), na kterém je systemd, apache, php, sqlite3, rrdtool. Prakticky vše je naskriptováno v php, což rozhodně není ideální řešení - mnohem vhodnější by byl např. python, jenže php jsem uměl a tak to bylo nejjednodušší k použití. Tedy aspoň jsem si to myslel, než jsem začal řešit problémy se sériovým portem...

Základní web je udělaný s využitím Bootstrapu, což je velká výhoda z hlediska jeho použitelnosti jak na PC, tak na mobilech. Data vhodná pro prezentaci formou grafů se ukládají do RRD databází, ze kterých se pak generují grafy v rámci cronu.

GPIO jsou inicializovány skriptem tinyha-init po startu. Následně se spustí na pozadí další skripty. Skript tinyha-busupdate zajišťuje komunikaci po RS485 a periodicky se dotazuje všech možných slave zařízení, aby z nich mohl generovat grafy a prezentovat jejich aktuální stav. Skript tinyha-doorbell čeká na hranu signálu tlačítka zvonku, aby mohl zalogovat událost (aneb konec věčných hádek, zda pošťačka zvonila či ne). Skript tinyha-onewire slouží ke sběru teplot z čidel připojených na 1wire sběrnici. Skript tinyha-pingupdate jednou za čas pingne přes síť (no dobře, přes wifinu, protože RPi Zero nemá ethernet) všemožná zařízení v domácí síti a aktualizuje jejich online stav. Skript tinyha-nibeupdate slouží k připojení do Nibe API, díky kterému můžu monitorovat stav tepelného čerpadla.




  


 


pátek 16. července 2021

TinyHA: digitální vstupy a výstupy

Množství zařízení se dá spínat přímo, bez relativně složité komunikace po sběrnici. Pro spínání čekoholiv jsem vytvořil jednoduchý DPS s relé, nejčastěji na 24V, některé jsou ale i na 12V a 5V. Každé relé je opět v "mističce" vytvořené 3D tiskem a zalité nehořlavým epoxidem.

A co tedy relátka spínají? Otevírání vrat garáže (paralelně k ovládacímu tlačítku), topné žebříky v koupelnách (přímo 230V v zásuvce), část venkovního osvětlení, aktivace blokování ohřevu TUV, čerpadlo v retenční nádrži, do budoucna je v plánu inteligentní cirkulace TUV.

Venkovní osvětlení je specialitka - je to vlastně převážně dekorace, tedy LED pásek na pár místech a nízkopříkonová LED bodovka namířená na jeden ze stromů, který je vidět z ulice. Spíná se se západem slunce a vypíná ve 23h. A zároveň se sepnutím je odblokování PIR čidlo pro detekci pohybu osob v okolí vstupních dveří, které následně přes další relé spíná klasické venkovní osvětlení. Tím je zajištěno, že i s levným PIR čidlem nesvítím uprostřed noci, když kolem projde kočka.

Systém mám dále několik digitálních vstupů. Detekce otevření vrat garáže (magnetická kontakt), spoušť domovního zvonku (takže existuje záznam, kdy kdo zazvonil - ano, pošťačka tvrdila, že tedy s tím dopisem byla... a já vím 100%, že ne), detekce externího napájení (kvůli výpadku elektřiny). Vše je připojeno na GPIO centrální řídicí jednotky, což je Raspberry Pi Zero W. O něm ale podrobněji příště.

Zvonek má příjemný gong dostatečné intenzity, jedná se o model z Aliexpressu s přidaným DCDC konvertorem. PIR senzor je typ Panlux SL2400/C. Požadavkem byla černá barva. Elektronika všech levných kusů je plus mínus stejná, snímač a obvod BISS0001 nebo jeho klony. Rozdíl je ale v zakrabičkování, které je pro funkci dost důležité - samotné moduly z Číny se chovaly hrozně, senzor od Panluxu díky krabičce o dost lépe. Část čočky obvykle zalepím gafou, aby zorné pole zabíralo jen to, co má. Elektroniku PIR snímače jsem z poloviny vyházel. Místo 230V a relé na výstupu jsem nechal nízkonapěťové napájení a otevřený kolektor, takže je vše připojené UTP kabelem, který vede do vhodného místa. Relé na 230V spínající světla je umístěno v jedné z instalačních šachet uvnitř domu.

pátek 11. června 2021

TinyHA: žaluzie

Venkovní žaluzie byly na dům jasnou volbou vč. elektrického pohonu. V základní verzi se jedná o Somfy J4 WT, což je chytrý motorek, pro 230V napájení využívá dvou různých vodičů - nahoru a dolů. Kromě toho umožňuje nastavovat doraz, programovací mód se spustí připojením napětí na obě napájení po danou minimální dobu.

Elektroniku jsem se rozhodl umístit do hlubokých instalačních krabic pod ovládací tlačítka. Řešení jsem chtěl autonomní, tedy nouzově funkční i při selhání rozšiřující elektroniky. Nakonec je koncept navržený tak, že pomocí optočlenů snímá stisk ovládacího tlačítka a pomocí relé ho dále přemosťuje. V nejjednodušším případě tedy po detekci dostatečně dlouhého stisku "přidrží" relátkem tlačítko stisknuté po dalších několik desítek sekund, než žaluzie sjede nebo vyjede kompletně. Bez napájení stále fungují tlačítka manuálně.

  

U každého okna mám pod omítkou vedený kablík k magnetickému senzoru pro detekci otevření, což je další vstup, který do elektroniky vede. Celá elektronika je umístěna v miniaturní vaničce vytvořené na 3D tiskárně, která je následně zalita nehořlavou epoxidovou hmotou. Těchto rozšířených tlačítek je po domě cca 10ks, ke každé žaluzii jedno. Dále jsem vyrobil jedno speciální, které slouží k hromadnému ovládání všech 5ks žaluzií v obýváku+kuchyni, to není připojené na 230V, ale pouze na sběrnici.

 

Firmware je funkcí trochu komplikovaný, protože musí reagovat na různé kombinace stavů - např. když žaluzie jedou nahoru a stiskne se tlačítko dolů, zastaví. Když se drží krátce (pod nastavenou dobu), nedělá nic. Když dlouze, sepne příslušné relé a podrží ho po specifikovaný čas. Když přijme odpovídající povel po sběrnici, simuluje stisk tlačítka. Možností je poměrně hodně a jsou docela dobře vidět v main.c.

Každá žaluzie má přiřazeno vlastní adresovací ID a dále volitelně skupinové ID, na které reaguje. Jedná se vlastně o jednoduchý multi-master systém, kdy mastery na sběrnici je buď řídicí jednotka (v této fázi projektu ještě neexistovala) nebo dedikované ovládací tlačítko. Ostatní tlačítka pak vystupují jako slave, odpovídají pouze na jim adresované dotazy.

pondělí 22. března 2021

TinyHA: základní koncepce

Před několika lety jsme dokončovali stavbu rodinného domu, kde máme mimo jiné nainstalovány venkovní žaluzie Climax s pohonem Somfy J4 WT. A to byl první impuls ke zvažování vlastního bastl řešení. Originální ovládání mi přišlo předražené, mechanické řešení spínače s aretací pak příliš primitivní. Rozhodl jsem se, že ovládání žaluzií vyřeším vlastním systémem, který bude zapojený paralelně k ABB žaluziovým tlačítkům a stane se základem budoucí domácí automatizace. Každá žaluzie má tedy vlastní ovládací tlačítko v hluboké podomítkové krabici. A při tahání elektroinstalace jsme všechny krabice kromě 230V rozvodu prosmyčkovali Cat5e kabelem.

Tím byl dán základní stavební prvek TinyHA - drátová sběrnice, fyzicky realizovaná "venkovním" Cat5e kabelem - jeden pár pro rozvod napájení 24V, druhý pro RS485 sběrnici, zbývající dva volné. Napětí 24V bylo zvoleno jako kompromis mezi co nejnižšími úbytky na nezanedbatelně dlouhém vedení a snadnou dostupností DC/DC spínaných zdrojů. Sběrnice RS485 byla jasná volba, je to jediné široce rozšířené rozhraní, které zvládne divokou kombinaci hvězdicové a stromové topologie bez impedančních zakončení, s rozumnou spolehlivostí a přijatelnou cenou.

Pro komunikaci jsem si navrhl jednoduchý vlastní protokol s adresací, který popíšu později. Celková koncepce je nepříliš striktní master-slave, který prakticky umožňuje multi-master s využitím náhodného přístupu na sběrnici (Aloha). Prakticky to funguje tak, že celé TinyHA má jeden centrální bod, postavený na Raspberry Pi Zero W na desce s rozhraními, který je umístěný v místě vyústění všech kabelů (moje miniserverovna kombinovaná se špajzkou). Jednotlivé nódy jsou pak slave zařízení, které pouze odpovídají na dotazy. Výjimkou je ovládací tlačítko pro sdružené řízení žaluzií v obýváku, které při stisku povel vysílá samo, stává se z něj tedy na okamžik další master.

Elektronika zařízení je postavená na AVR a obvykle zabudovaná v podomítkové krabici, není tedy přístupná pro přeprogramování. Pro tento účel jsem si upravil jednoduchý bootloader, který umožňuje aktualizovat firmware a přitom využívat adresu nódu uloženou v EEPROM paměti. Mohu tedy bez rozpojení sběrnice selektivně aktualizovat pouze vybraná zařízení.

Ovládání žaluzií, o kterém budu podrobněji psát příště, bylo první realizovanou částí. To proto, že stát u tlačítka a držet ho dvě minuty než žaluzie sjede až dolů, je fakt otrava, takže mě to donutilo dokončit ovládání poměrně rychle :-) Postupně ale přibývaly další části systému TinyHA: výstupní relé (pro otevírání garáže, spínání topných žebříků, venkovní osvětlení, pokles TUV apod.), vstupy (teplotní čidla na 1-wire sběrnici, senzor otevření vrat garáže, indikace domovního zvonku atd.), centrální jednotka s Raspberry Pi (sběr dat, webové rozhraní pro ovládání, grafy), ePaper panel (grafické zobrazení aktuálních teplot, grafy historie, měření kvality ovzduší CO2, předpověď počasí), měření objemu vody v retenční nádrži pomocí ultrazvukového dálkoměru, průtokoměr vody na zalévání, reimplementace Lidl zvonku, jednotka zálohovaného napájení miniserverovny a pár dalších kousků, které se teprve tvoří.

pátek 12. března 2021

Vzkříšení blogu

Po mnoha letech jsem se rozhodl, že se pokusím opět po kouskách publikovat své výtvory veřejně. Zaručeně to bude nesourodé, nepravidelné a neúplné... zkrátka žádné návody, ale jen myšlenky a podklady pro další bastlení!

V záloze mám především už relativně rozsáhlý systém domácí automatizace TinyHA. Podstatné zdrojáky jsem zveřejnil na Githubu, ale chce to ještě doplnit hodně popisování a navíc je to živý projekt, na kterém průběžně pracuji. Základní myšlenka TinyHA je, že vzniká "lepením", tedy bez důkladného plánu na počátku, co vše má systém umět. Přesný opak toho, co dělám v práci. Aktuálně obsahuje hromadu AVR, nějaké ESP32, řídicí Raspberry Pi Zero, hromadu relátek a pár set metrů Cat5e kabeláže, zaomítané a natahané všemožně po baráku i kolem.

Z dalších zajímavých projektů bych jmenoval vývoj elektroniky SSTV kamery pro nanosatelity - cubesat PSAT2 (aktuálně v provozu) a pocketqube Hades (čeká na start). Sledovat obrázky z vesmíru, vyfocené čínskou kamerou za pár dolarů a zpracované komplet vlastním hardwarem a firmwarem, je úžasné. A abych nezapomněl, podařilo se mi také znovu kompletně zprovoznit své památeční Atari 800XL!