Logo250

Začínáme studovat technologii zigbee

Každý začátek je těžký. Dnes se už obvykle začíná hledáním informací na internetu. Zkusil jsem to i já. A zjistil jsem, že se ve vyhledávači objevují nejčastěji dvě oblasti:

  • Komerční, tedy obchody nabízející produkty s technologií zigbee
  • Komunitní, kde se v převažujících případech mluví o systému Home Assistant

Obojí je fajn. Zorientujete se v tom, co lze koupit a za kolik a jak se potom tyto komponenty dají použít prostřednictvím programu Home Assistant. Home assistant (HA) je dnes už robustní systém, umožňující spoustu věcí. Pokud jste uživatel, který chce jen používat funkční zařízení, nebo se nanejvýš snažíte o uživatelské změny v nastavení HA, je HA určený právě vám a nepotřebujete nic víc. A věřte mi, že pro zvídavé duše je to rozsáhlá oblast pro studium.

Mě ale nezajímalo konkrétní využití technologie zigbee v praxi. Já jsem hledal technické informace o tom, jak se se sítí zigbee pracuje a jak bych si mohl napsat svůj program, který by uměl se zigbee věcmi komunikovat. A takové věci se hledají na internetu mnohem hůř. Právě proto, že vyhledávače jsou zahlceny komerčními e-shopy a informacemi kolem HA. Nakonec jsem měl ale štěstí a našel jsem pokusný projekt Malte Gruber - zigpy standalone. Tohle je přesně to, co jsem hledal. Bohužel v programovacím jazyku python. Když jsem začal studovat zdrojový text, zjistil jsem dvě nepříjemné věci:

  1. Jedná se o asynchronní programování
  2. Používají se příkazy Shellu, které fungují pouze v linuxu, ne v Shellu windows

Asynchronní programování znamená, že se na začátku programu spustí několik samostatných vláken, které si dál žijí svým vlastním životem. Pro začátečníka je tedy těžké se zorientovat v tom, co program v určitý konkrétní okamžik vlastně dělá a jak. Nutnost používat k testům počítač s linuxem mne také příliš nenadchla. Program používá knihovnu zigpy, která zastřešuje obecné vlastnosti technologie zigbee. Neobsahuje ale konkrétní komunikační rozhranní s koordinátorem, tedy rádiem, které vysílá / přijímá komunikaci v síti zigbee. Podle typu HW koordinátora se musí použít další doplňující knihovna. Pro moje zařízení SkyConnect nebo SOnOff je to knihovna bellows (POZOR: Existuje i knihovna bellow, která s technologií zigbee nemá nic společného). 

I když jsem v úvodním článku upozorňoval, že se nezabývám pythonem a nebudu zde zveřejňovat nic s knihovnou zigpy, u zdrojáku Malte Gruber jsem udělal výjimku, protože jsem na začátku nic lepšího neměl. A tak jsem jeho projekt upravil tak, aby šel spouštět z příkazového řádku windows. Výsledný program Zigbee01 najdete tady.  

Sériová komunikace - místo veškerého provozu

První nápad byl převést knihovnu zigpy do Delphi. Díky asynchronnímu programování jsem to brzy vzdal. Přesto studium knihovny zigpy a bellows může poskytnout spoustu užitečných informací. Mě ale zajímalo, jak to vlastně funguje všecho dohromady. Veškerá komunikace se soustředí na sériový port počítače, ke kterému je připojený koordinátor prostřednictvím USB (jeho konverzí na virtuální sériový port pomocí ovladače windows). Tímto místem musí procházet všechny příkazy pracující se zigbee zařízeními v síti. Proto jsem se soustředil na toto místo.

Zde musím znovu zdůraznit, že používám koordinátora SkyConnect s ovladačem CP210x Universal Windows Driver nebo SOnOff s ovladačem CH343SER. Ovladače jsou funkční i pro Win7. Protokol, který se v tomto případě používá ke komunikaci přes seriový port, se jmenuje EmberZNet Serial Protocol (EZSP) a je podrobně popsán v dokumentaci UG100: EZSP Reference Guide . Pro jistotu jsem tento dokument uložil i do svého archivu. Všechny následující informace tedy platí pro toto rozhraní. Zkusil jsem sledovat komunikaci sériového portu pomocí běžně dostupných programů. K tomu bylo potřeba stanovit komunikační parametry portu. Nakonec jsem našel tyto údaje:

  • Rychlost [baud]: 115200
  • Parita: None
  • StopBits: 1
  • DataBits: 8
  • Flow control: RTS / CTS

Poslední údaj Flow Control je důležitý v případě, že použijete seriový kabel na propojení 2 počítačů. Je potřeba, aby měl zapojené vodiče RTS / CTS. To znamená, že běžné kabely obsahující pouze 3 dráty (Rx, Tx, Zem) nelze použít. Musí to být kabel nejlépe "full" se zapojenými všemi piny, nebo minimálně podle následujícího obrázku (nezkoušel jsem, mám full verzi).

Null modem

Obr. 01 - Null modem

Brzy jsem zjistil, že komunikace je pro mne zcela nesrozumitelná. Bylo potřeba použít program, který by rozumněl probíhající komunikaci a byl schopen dešifrovat jednotlivé instrukce. To byla pro mne výzva a proto jsem se pustil do jeho napsání. Tak vznikl program ManEZSP, tedy Man-In-The-Middle The EmberZNetSerialProtocol. Je to program, který přenáší data z jednoho seriového portu do druhého a současně vše zaznamenává do logu. Schematicky jsem situaci pro logování rozkreslil na následujícím obrázku.

 02schemaThumb

Obr. 02 - Sestava pro logování komunikace EZSP

Na prvním počítači PC1 je umístěn program, který umí komunikovat s koordinátorem. Pro začátek třeba konzolový program (CLI) Malte Gruber, moje úprava Malte Gruber pro windows Zigbee01, ale i Home Assistant nebo cokoli jiného. V tomto počítači stačí jen jeden seriový port Com1. K němu ale není připojený přímo koordinátor, ale propojovací kabel. Na druhém počítači PC2 je umístěn program ManEZSP. Zde musí být dva seriové porty. V jednom je koordinátor, druhým je přes kabel připojen PC1. Nejprve spustíme na PC2 program ManEZSP. Potom spustíme na prvním počítači konzolový program. Veškerá komunikace se přenáší ke koordinátoru a zpět přes logovací program, který data zaznamená do souboru. Vzhled programu je na následujícím obrázku.

03manezspThumb

Obr. 03 - Vzhled programu ManEZSP

Nejprve nastavíme oba porty. Obsah polí Description se zobrazí v záhlaví logu. Nastavení portů lze uložit do souboru ManEZSP.ini. Pak už můžeme spustit logování tlačítkem Start. Do logu se na jeden řádek nejprve vypíšou surová data tak jak protékají portem. Za ně se vypíše dekódovaná verze. Informace o tom, jak se mají data interpretovat, je v souboru Ins.xml. Tento soubor zatím neobsahuje všechny instrukce EZSP (je jich moc), ale jen ty, na které jsem narazil během logování. Program je jen experiment, kterému chybí spousta věcí. Třeba ochrana před chybami. Ale pro první představu se dá použít. Program si můžete stáhnout v sekci Ke stažení/Programy. Zatím neobsahuje zdrojový text, protože ten je dost divoký. Ale pokud někdo projeví zájem, mohu jej učesat a zveřejnit. Dále zde najdete jeden z mých prvních logů ukazující, co můžete od programu očekávat. Uvedený soubor obsahuje standardní inicializaci koordinátora a následné párování jednoho zařízení. 

Žádné komentáře

Zanechat komentář

Odpověď na Some User