Browsed by
Author: L

NodeRED – více instancí

NodeRED – více instancí

Dnešní článek bude jen taková rychlovka na zamyšlení. Díky všem pokusům, co s NodeRED poslední dobou dělam, jsem se rozhodl vytvořit si dvě různé instance NodeRED.

Jedna je produkční, kde bude jen ostrý kód, který běží nonstop. Druhá pak bude developerská, kde budu testovat vše možné a kde bude v záložkách zůstávat i testovací bordel.

Díky docker-compose to není žádný problém. Každá instance používá svoje vlastní úložiště, zbytek mají obě instance naprosto totožné. Pro vývoj nových věcí tak používám developerskou instanci a pak pomocí import-export výsledek přenesu do produkční instance.

Můj aktuální kód pro NodeRED vypadá následovně:

FROM nodered/node-red

RUN npm install bufferutil 
RUN npm install utf-8-validate

RUN npm install node-red-node-smooth
RUN npm install node-red-dashboard
RUN npm install node-red-node-ui-list
RUN npm install node-red-contrib-zigbee2mqtt
RUN npm install node-red-contrib-loxone
RUN npm install node-red-contrib-tgr-jsonata
RUN npm install node-red-contrib-xiaomi-sensors

RUN npm audit fix

A to je pro dnešek vše. Přišlo mi to jako dobrý nápad a třeba to inspiruje i někoho dalšího. Příště pak mám v plánu pár ukázek napárování zigbee na Loxone, konkrétně Ikea pětitlačítko, které se mi zatím hodně líbí. Mám na něm v pracovně světla, žaluzie i plachtu pergoly. Dál pak Sonoff tlačítka a chytré zásuvky.

ZIGBEE – NodeRED a Loxone

ZIGBEE – NodeRED a Loxone

Tak jsem tu zas s dalším Zigbee článkem. Opět navazuje na mé předchozí trable s NodeRED. Dneska to bude o něco méně problémů, ale přeci jen tam jedna drobnost je :).

Dnešním pluginem, který bych chtěl představit, je node-red-contrib-loxone. Ten umožnuje napojení se na Loxone skrz Websocket přímo z NodeRED, takže není potřeba vytvářet žádné virtuální vstupy, složitě posílat UDP a nějak to na straně Loxone parsovat.

Plugin je postaven nad komponentou node-lox-ws-api od Alladdina, který se občas vyskytuje i tady u nás na fóru.

Co se týká funčnosti, komponenty fungují parádně. Umí ovládat v Loxone cokoli, co má svůj viditelný Uuid směrem do vizualizace (webové rozhraní či app). Pokud tedy chci cokoli ovládat, připravím si na to třeba tlačítko a na to se pak napojím z NodeRED.

Plugin opět umožnuje pomocí comboboxů snadný výběr prvků z Loxone, takže není potřeba někde lovit Uuidy prvků, ale jednoduše si člověk pomocí výběru místnost-kategorie-prvek může zvolit přesně co potřebuje.

Drobná nevýhoda je, že do prvku pak člověk musí poslat přesně data, která Loxone očekává. Není zde žádná mezivrstva, která by to udělala za Vás. To je ale pochopitelné, protože těch typů prvků je hromada a musel by zde Alladdin či Zigbee2Mqtt udržovat obrovský seznam všech příkazů. Je proto o dost snazší podívat se do dokumentace pro Websocket API a poslat správný příkaz přes msg.payload.

Jediné, co mi zlobí, tak jakmile je nakonfigurován Loxone miniserver pomocí tohoto pluginu, tak deploy projektu občas trvá i pár sekund. Netuším, jestli je chyba někde na straně Alladdina nebo tvůrce NodeRED pluginu, ale do logu to háže chybu “Close time out”. Jako kdyby se to při deploy nejprve snažilo ukončit spojení s Loxone, což se ale nepodaří do daného časového limitu.

Řešení zatím neznám, ale není to nic, co by bránilo používání. Jen holt občas deploy trvá cca 3-5sekund namísto pár milisekund.

ZIGBEE – NodeRED a Zigbee2MQTT podruhé

ZIGBEE – NodeRED a Zigbee2MQTT podruhé

Tak jsem tu s dalším článkem z mé Zigbee minisérie (i když jestli to půjde jako do teď, tak to bude větší série 🙂 ). V minulém článku jsem popisoval problém se Zigbee2MQTT díky staré verzi NodeREDu, dnes se podíváme na další komplikaci v Zigbee2MQTT.

Zigbee2MQTT podruhé

U Zigbee2MQTT ještě zůstaneme. Tentokrát ale (nakonec) ne u pluginu, ale u SW brány samotné. Dalším problémem, který se mi děl a který byl hodně špatný, bylo chybné opakování poslední zprávy při deploy projektu.

V praxi se to chovalo tak, že jsem stiskl zigbee tlačítko, to poslalo MQTT zprávu a provedlo například “toggle” příkaz na světle. Tzn. přehodilo stav ze zaplého do vyplého či naopak.

Problém ale nastal, když jsem udělal změnu v projektu a dal deploy. Po naběhnutí celého projektu se tento “toggle” (a i všechny ostatní) provedly znovu. To znamenalo, že se mi náhodně zapínaly a vypínaly světla či chytré zásuvky. Nic moc.

Původně jsem podezříval opět plugin Zigbee2Mqtt, jenže stejná chyba se děla i při použití základního MQTT prvku. Problém byl tudíž někde v MQTT samotném, případně v Zigbee2MQTT.

MQTT jako takové má vlastnost, že u každé zprávy lze zadat “retain” příznak. Zpráva s tímto příznakem se nejen pošle všem příjemcům v době zaslání, ale zároveň se její stav uchová a pošle se i všem novým posluchačům.

Vše tudíž vypadalo, že by to mohlo být ono. Ale proč se to děje. Podle dokumentace Zigbee2MQTT mají zprávy “retain” defaultně vypnutý (link zde) a v NodeREDu tento příznak taky nikde nenastavuji. Takže, WTF :).

Na pomoc jsem si tedy vzal MQTT Explorer, který je super věc na debugování podobných problémů. Lze realtime sledovat veškeré zprávy i jejich poslední stav. A v případě, kdy má zpráva příznak “Retain”, je tam zobrazen následovně:

No, a co byste řekli. Měl ho tam :). Takže někdo nějak posílal RETAINED zprávy, které zůstávaly viset v MQTT frontě a při restartu NodeRED programu se pak vždy vyhodnotily znovu.

Podobné chování se hodí například u okenních senzorů, či jiných prvků, kdy i po restartu potřebujete v NodeREDu nastavit poslední známý stav. Je to ale dost na h*** u tlačítek, kdy Vám to probliká celým domem :).

Nakonec se ukázalo, že chyba je v samotné Zigbee2MQTT konfiguraci. Z nějakého mně zatím nepochopitelného důvodu se všem nově napárovaným zařízením automaticky nastavuje i retain:true, příznak, ačkoli o tom dokumentace mlčí (NodeRED UI administrace toto nejde nastavit ani se nijak neukazuje). To bohužel pak zůsobuje výše popsané problémy, které mohou být pro spoustu uživatelů asi dost deprimující 🙂

Řešením tudíž je odmazat retain:true příznak z konfiguračního souboru configuration.yaml pro všechna zařízení, kde toto chování nedává smysl (defakto všude krom teploměrů a čidel).

Po odmazání je potřeba restartnout Zigbee2MQTT kontejner či službu, aby se nastavení znovu načetlo. Tím je problém vyřešen a už žádné samozapínání při restartu.

Ikea TRÅDFRI+ Zigbee + Loxone

Ikea TRÅDFRI+ Zigbee + Loxone

Dnes trochu atypicky jeden krátký (nakonec se mi to celkem protáhlo :)) post na přání z publika :). Byla tu prosba o návod na propojení Ikea tlačítka TRÅDFRI z Ikea do Loxone pomocí Zigbee2Mqtt.

A protože další připravené články se zabývají trochu jinými tématy, rozhodl jsem se návod sepsat teď narychlo ve formě nového článku.

Celé schéma aktuálně vypadá takto. Ten horní pravý control-out je příprava na ovládání výsuvné pergoly, ale protože pořád prší, ještě jsem to raději nezapojoval a netestoval :).

V levé části grafu je Zigbee2Mqtt IN prvek pojmenovaný IkeaRoundButton01 dle názvu zařízení v konfiguraci Zigbee2Mqtt.

Jeho nastavení je Server (Zigbee2MQTT server), device(což je toto tlačítko) a jako výstup si z prvku bereme kompletní payload, tzn celý JSON objekt s daty ze zigbee.

Druhý z leva je prvek SWITCH. V něm lze zadat jeden až n podmínek, které když jsou pravdivé, tak vyšle na odpovídající výstup daného znovu celý svůj vstup.

Tzn prvek nikterak neupravuje vstup, jen ho přepošle na jeden z výstupu dle toho, která podmínka je platná.

Poslední parametr určuje, zda se vyhodnocuje do prvního platného pravidla, nebo vždy všechny. Tzn pokud se nastaví “všechny”, může se aktivovat více než jeden výstup. V mém případě je to jedno, je platná vždy jen jedna podmínka.

K rozhodování, která akce byla na tlačítku provedena testuji JSON atribut msg.payload.action (nastaveno v “property” prvku switch). Pro získání těchto hodnot je nejjednodušší si na začátku napojit DEBUG prvek (ten zelný) přímo na Zigbee2MQTT IN prvek a sledovat co z něj chodí.

Jak jde vidět v debug výstupu, z Zigbee2MQTT IN prvku leze JSON, ve kterém je properta action, battery a linkquality. Nás pro toto rozhodování zajíma jen ta akce, proto msg.payload.action.

 

Třetím prvkem z leva je prvek EXCHANGE. Ten je trochu nešikovně pojmenovaný, protože je to defakto přiřazení do proměnné (připadně změna, smazání či prohození).

 

Lze opět nastavit jeden či více kroků, ale pro naše účely nyní stačí jen jeden. Do přijatého msg.payload (ve kterém se ve chvíli vstupu nachází ještě JSON objekt ze Z2M) přiřadíme úplně jiná data (konkrétně textový řetezec). A to konkrétně taková, kterým bude pro změnu rozumět node-red-contrib-Loxone (dokumentace k Loxone WS třeba zde).

Na screenshotu je příkaz “up”, který posílám do bloku žaluzií. Tím říkám Loxone, aby začal vytahovat žaluzie. Dále pak na základě tlačítka posílám také UpOff, kterým se vytahování vypíná (při uvolnění tlačítka), a down a DownOff na spuštění dolů.

Zároveň zasílám up/down také po kliku na tlačítka. Zatím testuju co je pohodlnější a rozhodně je to jen kliknout a dalším klikem případně vypnout. Takže dlouhé podržení bude pravděpodobně vysunutí pergoly, které nechci, aby se spustilo jen náhodným/omylným kliknutím.

Po kliknutí na prostřední tlačítko pak posílám příkaz “plus”, kterým se přepínají scény v prvku ovládání osvětlení. Kdyby to bylo klasické tlačítko, příkaz by byl “toggle”. Bohužel se mi nepodařilo u bloky ovládání osvětlení vynutit zapnutí/vypnutí konkrétního světla, funguje mi jen přepínání scén.

Posledním prvkem v pravo je pak samotné napojení na WebSocket Loxone. V tomto prvku se nastavuje cílový miniserver, místnost/kategorie a prvek, do kterého se příkaz má poslat.

Do tohoto prvku musíte poslat příkaz, který splňuje podmínky Loxone WS. Ten jsme si připravili v předchozím kroku v prvku Exchange. Vstup vypadá například takto: msg.payload = “plus”. (Jde o obyčejný string zaslaný na cílový prvek).

A to je vše. Pokud jste postupovali podle tohoto návodu, právě jste přijali kliknutí Ikea TRÅDFRI tlačkítka přes Zigbee síť transportovanou přes MQTT protokol do NodeRED, který pak data zkonvertoval do WebSocket příkazu poslaného do Loxone. Snadné, ne? :)).

Pro případné zájemce, zde je NodeRED projekt na celou tuto logiku (stačí dát import a přes clipboard vložit):

[{"id":"c333e3da.bfcd3","type":"zigbee2mqtt-in","z":"4e77380b.b5af18","name":"","server":"4dd4dc36.2cc704","friendly_name":"IkeaButtonRound01","device_id":"0x842e14fffea3ff09","state":"0","outputAtStartup":true,"x":210,"y":240,"wires":[["20102bbc.6f9cb4","9fb1f206.7c05c"]]},{"id":"20102bbc.6f9cb4","type":"switch","z":"4e77380b.b5af18","name":"","property":"payload.action","propertyType":"msg","rules":[{"t":"eq","v":"brightness_up_click","vt":"str"},{"t":"eq","v":"brightness_up_hold","vt":"str"},{"t":"eq","v":"brightness_up_release","vt":"str"},{"t":"eq","v":"brightness_down_click","vt":"str"},{"t":"eq","v":"brightness_down_hold","vt":"str"},{"t":"eq","v":"brightness_down_release","vt":"str"},{"t":"eq","v":"toggle","vt":"str"}],"checkall":"false","repair":false,"outputs":7,"x":450,"y":240,"wires":[["be2577c2.997838"],["be2577c2.997838"],["3373d424.306ccc"],["c3e9d441.d0f198"],["c3e9d441.d0f198"],["9ce742fe.a0b25"],["97d7dcbb.f8e2a","fe05d856.cb7ef8"]],"outputLabels":["","","","","","","toggle"]},{"id":"c3e9d441.d0f198","type":"change","z":"4e77380b.b5af18","name":"","rules":[{"t":"set","p":"payload","pt":"msg","to":"down","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":700,"y":200,"wires":[["f96c30e8.7c3f2"]]},{"id":"9ce742fe.a0b25","type":"change","z":"4e77380b.b5af18","name":"","rules":[{"t":"set","p":"payload","pt":"msg","to":"DownOff","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":700,"y":240,"wires":[["f96c30e8.7c3f2"]]},{"id":"be2577c2.997838","type":"change","z":"4e77380b.b5af18","name":"","rules":[{"t":"set","p":"payload","pt":"msg","to":"up","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":700,"y":120,"wires":[["f96c30e8.7c3f2"]]},{"id":"3373d424.306ccc","type":"change","z":"4e77380b.b5af18","name":"","rules":[{"t":"set","p":"payload","pt":"msg","to":"UpOff","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":700,"y":160,"wires":[["f96c30e8.7c3f2"]]},{"id":"f96c30e8.7c3f2","type":"loxone-control-out","z":"4e77380b.b5af18","name":"","miniserver":"33d50a38.be2cc6","control":"160f9394-0337-d464-ffff3b22d8e2f329","x":910,"y":180,"wires":[]},{"id":"97d7dcbb.f8e2a","type":"change","z":"4e77380b.b5af18","name":"","rules":[{"t":"set","p":"payload","pt":"msg","to":"plus","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":700,"y":280,"wires":[["38ab62ac.e8c79e","68c1752.9451b8c"]]},{"id":"38ab62ac.e8c79e","type":"loxone-control-out","z":"4e77380b.b5af18","name":"","miniserver":"33d50a38.be2cc6","control":"0e6f3276-00d7-0359-ffff01c79402a3b1","x":910,"y":280,"wires":[]},{"id":"c8d1c8cf.917108","type":"comment","z":"4e77380b.b5af18","name":"Ikea 5-ovladac pracovna","info":"","x":210,"y":80,"wires":[]},{"id":"d7dee6f.2f79718","type":"loxone-control-out","z":"4e77380b.b5af18","name":"","miniserver":"33d50a38.be2cc6","control":"160f9394-0337-d464-ffff3b22d8e2f329","x":910,"y":80,"wires":[]},{"id":"9fb1f206.7c05c","type":"debug","z":"4e77380b.b5af18","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":460,"y":360,"wires":[]},{"id":"fe05d856.cb7ef8","type":"debug","z":"4e77380b.b5af18","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":720,"y":360,"wires":[]},{"id":"68c1752.9451b8c","type":"debug","z":"4e77380b.b5af18","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":960,"y":360,"wires":[]},{"id":"4dd4dc36.2cc704","type":"zigbee2mqtt-server","z":"","name":"zigbee","host":"host-mosquitto","mqtt_port":"1883","mqtt_username":"","mqtt_password":"","tls":"","usetls":false,"base_topic":"zigbee2mqtt"},{"id":"33d50a38.be2cc6","type":"loxone-miniserver","z":"","host":"x.x.x.x","port":"80","enctype":"2","active":true,"keepalive":"30000"}]

 

ZIGBEE – NodeRED a Zigbee2MQTT

ZIGBEE – NodeRED a Zigbee2MQTT

Jak jsem slíbil v minulém článku, dnes bude další pokračování o mé Zigbee cestě. A musím říct, že nepokračovala úplně vesele. Dost jsem se zasekl na NodeREDu, protože se vše chovalo opravdu značně náhodně.

Následující dva tři články tak budou postupně představení několika super komponent a zároveň i návod, jak řešit případné problémy. Dnes začnu s pluginem Zigbee2MQTT do NodeRED.

Zigbee2MQTT

První věc, která mi v NodeRED udělala opravdu radost, je plugin node-red-contrib-zigbee2mqtt, který je vlastně takový MQTT na steroidech.  Ten velmi usnadňuje integraci zigbee do Loxone. Je to plugin psaný přímo pro potřeby Zigbee2Mqtt bráně, takže rozumí jeho příkazům a umí tak nabídnout spoustu užitečných věcí.

Jednak nabízí pohodlné volby zařízení. Takže namísto odchytávání konkrétní MQTT zprávy si jen v comboboxu vyberete jedno ze svých zařízení (plugin se umí dotazovat Zigbee2Mqtt, takže má přehled o tom, jaké zařízení máte v Zigbee2Mqtt nakonfigurované).

Druhým benefitem je pak automatická konverze přijatých dat do Json objektu a v případě podporovaných zařízení dokonce extrakce konkrétní hodnoty z Json objektu přímo do výstupního msg.payload.

K tomu umí u každého zařízení přímo v NodeREDu ukázat stav baterie, aktuální zpracování zprávy a pár dalších zajímavých stavů. Až potud super. Kdyby vše fungovalo :).

Bohužel, v mém případě se tenhle plugin ze začátku choval tak, že zpracoval každou druhou až třetí zprávu a zbytek ignoroval. Původně jsem podezříval Xiaomi kostku, ale když to samé začly dělat i nově koupené vypínače, bylo jasno.

Zkusil jsem tedy dát vedle sebe jak tenhle Zigbee2Mqtt prvek, tak klasický MQTT. A podezření se potvrdilo. Ve výpisu nahoře jde vidět, že v MQTT je 5x přijatá zpráva a až po šesté je přijata také Zibee2Mqtt komponentou. Zkoušel jsem googlit, psal jsem na github, ale nikde jsem nenašel důvod, proč to zlobí (krom jedné zmínky v githubu, že autor používá nějakou starší mqtt komponentu interně, ale to nevypadalo na zdroj problémů).

Nakonec mě napadlo, že problém bude možná ve verzi NodeRED. Jak jsem zjistil, tak ačkoli používám Docker a oficiální NodeRED image, neměl jsem poslední verzi. Což bylo dost zvláštní.

Bohužel, inženýři z NodeRED se rozhodli pro opravdu vypečený tah. Původně se Docker container s NodeRED jmenoval nodered/node-red-docker, což jim už asi přestalo znít cool, takže repositář nechali ve staré verzi a založili nový, kde jsou další updaty. Ten se nyní jmenuje nodered/node-red. Bezva ne?

Takže pokud někdo používáte Dockerovaný NodeRED, zkontrolujte si repositáře. Dost dobře se totiž může stát, že používáte už obsolete pre-stable verzi 0.20.8 namísto aktuální 1.1.3. Po updatu na aktuální verzi a kompletní rebuild všech kontejnerů a promazání všech cachí začal i Zigbee2Mqtt plugin fungovat jak má. Tím byl vyřešen problém Zigbee2Mqtt.

Moštobraní

Moštobraní

Když už dnes nemáme Loxone sraz, tak sem hodím aspoň zase jeden post z naší zahrady. Letos jsme měli docela hodně jablek, tak jsme je chtěli nechat vymoštova a pasterizovat.

Bohužel, pravděpodobně v jediné moštárně v rozumném okolí, kde pasterizaci a balení do bagů dělají, začali opravovat železniční přejezd a tak se k nim nedá vůbec dostat. A to jsme zjistili ve chvíli, kdy jsme měli půl stromu sklepaného a sesbíraného v pytlích :).

Takže přišel na řadu plán B, který zahrnoval i dlouho plánovanou koupi druhého mrazáku :)).

Moštoval jsem nakonec pár vesnic vesnice vedle nás, kde jsme z jednoho stromu nakonec vymáčkli 100l moštu. S odvozem samotným problém úplně nebyl, protože máme kanystry už z dřívějška, problém ale byly nějaké PET flašky, ve kterých bychom mošt do mrazáku dali. 100l už totiž není vůbec málo :).

Nakonec se mi povedlo sehnat na druhé straně Brna firmu, co prodává PETky za 5kč jednu – což je na jedné straně fakt hrozná cena, bohužel na té druhé straně je to jedno z nejlevnějších, protože jinak jsou firmy schopné si říct i o 10kč za kus (bral jsem 40ks). Takže jsem ještě ten den po domoštování upaloval přes celé Brno, abych stihl lahve koupit a druhý den jsme je mohli stočit a zamrazit.

Druhý den jsme pak dopoledne trávili stáčením do flašek. K malé domácí moštárně to už určitě nemělo daleko :).

 

A tady už jsou fešáci v novém mrazáku. Jelikož místa v domě už nebylo mnoho, nemohli jsme koupit ten největší pultový mrazák. Tím pádem padla volba na střední velikost, která se ještě rozumně vešla pod schody do špajzu tak, aby šel mrazák otvírat. Jde o Zanussi ZCAN14FW1 se 140l objemem, což vyšlo vcelku akorát na letošní úrodu.

Už teď ovšem vedeme vášnivé debaty o tom, kam dáme přístí rok další mrazák, protože tenhle bude stoprocentně opět plný “nezbytnými” věcmi a mošt nebude kam dát :).

Zigbee hrátky – seriál na pokračování

Zigbee hrátky – seriál na pokračování

Dnešní článek bude pravděpodobně první z více článků o zprovozňování Zigbee v našem domě. Konečně mám zase trošku času a hlavně mi po měsíci dorazil nový Zigbee stick CC2652, který zdá se být o dost lepší než jeho předchůdce.

Věřím, že se díky tomu konečně dostanu se Zigbee do stavu, kdy ho plnohodnotně zaintegruji do našeho domu. A o tom bude tato série článků.

Psal jsem o tom párkrát na fóru, že jsem objednal nový USB stick CC2652 na Zigbee. Vzal jsem ho z Tindie, kde jednak měl dorazit relativně rychle, a pak je už naflashovaný přímo na potřeby Zigbee2Mqtt.

Píšu měl, protože byl nějaký problém s německou poštou, která prodejci vrátila mraky zásilek poškozených a on musel vše testovat a posílat znovu. Díky tomu se vše protáhlo na měsíc a něco. Naštěstí jsem na to stejně neměl čas, ani pomyšlení, takže mě to zas tak netrápilo. Za normálních okolností má dorazit do týdne.

Výhod téhle CC2652 oproti původní CC2531, na kterou jsem psal recenzi a návod na flashování, je hned několik (původní návod a recenze zde). Zaprvé, není potřeba kupovat flashovací HW a složitě stick flashovat, protože prodejce má už vše připraveno. Zadruhé, je plně kompatabilní se Zigbee 3.0, zvládne až 100 zařízení, má externí anténu a celkově lepší dosah. A zatřetí, což pro mne bylo nejdůležitější, USB stick splňuje pravděpodobně vše, co takový USB stick má splňovat a je kompatabilní nejen s RaspPI, ale také s ESXI systémem pro virtualizaci serverů.

Všechny tyto výhody pro mě znamenají, že nebudu muset provozovat RaspPI, ale stick mi poběží virtualizovaný na serveru, kde provozuji i ostatní Docker instance na správu domu. To ovšem neznamená, že by neběžel v NAS či RaspPI. Tam samozřejmě funguje také.

Tento návod se proto bude zmiňovat i o ESXI, který by mohl být i pro někoho dalšího zajímavý. Pokud byste potřebovali návod na RaspPI, postupujte dle původního návodu, jen vynecháte flashovaní a začnete sekcí “Instalace na Raspberry”. Návod zde: https://www.vodnici.net/2018/12/vlastni-zigbee-brana-pomoci-raspbery-pi/.

Zároveň se od dob prvního návodu změnilo/rozšířilo pár komponent na Zigbee správu, takže i o těch budu postupně psát, k tomu přihodím pár Docker a Docker-compose konfigurací, které budu aktuálně pro Zigbee síť používat. A na závěr pak přijde samotná implementace do Loxone, kde to bude opět vyžadovat NodeRED a nějaký ideálně univerzálnější kód, který bude překládat Zigbee na Loxone. Uvidíme.

ESXI

Začneme u ESXI virtuálního stroje. ESXI samotný zde moc popisovat nebudu, ve zkratce jde o “trochu” robustnější VM Ware virtuální stroje běžící na vyhrazeném hardware. Pro potřeby testování jsem si udělal nový Docker VM, kde budou veškeré testy probíhat a kam pak postupně zmigruji i ostatní docker kontejnery s chytrou domácností.

Zigbee stick do virtuálního stroje přidáme jako klasický USB device, s tím že se v pořádku i pro ESXI hlásí jako “cc2652rb stick”:

Po přidání uložíme a nahodíme stroj. S původním USB stickem CC2531 toto nebylo možné. Stick ihned po zasunutí do serveru způsobil kompletní vytuhnutí celého ESXI OS a tím i všech virtuálních strojů. Takže fungoval spíš jako takovy USB killer :).

Zigbee stick

Další rozdíl oproti původnímu sticku je, že se hlásí jako /dev/ttyUSB0 a ne /dev/ttyACM0. Toto je dost zásadní změna, protože je potřeba ručně upravit konfiguraci v Zigbee2Mqtt data/configuration.yaml aby ho Z2M našel.

Docker

Pro základní testování sticku si přes docker-compose rozbíhám následující docker containery:

V případě MQTT používám defaultní kontajner, do NodeRED jsem si postupně přidal pár dalších knihoven a Zigbee2MQTT opět v defaultním nastavení, jen s vlastním konfigem.

DockerFile pro NodeRED mi aktuálně vypadá nějak takto. Přidávám komponenty pro dashboard a Zigbee2Mqtt podporu a pár dalších, které jsou potřebné pro M2T Admin rozhraní na lepší správu Zigbee sítě.

FROM nodered/node-red-docker

RUN npm install bufferutil
RUN npm install utf-8-validate
RUN npm audit fix

RUN npm install node-red-node-smooth
RUN npm install node-red-dashboard
RUN npm install node-red-node-ui-list
RUN npm install node-red-contrib-zigbee2mqtt

Samotný DockerCompose na provázání těchto tří kontejnerů pak může vypadat třeba takto:

  dum-mosquitto:
    build: mosquitto
    container_name: dum-mosquitto
    restart: always
    ports:
    - "1883:1883"
    - "9001:9001"
    network_mode: bridge
  
  dum-nodered:
    build: nodeRed
    container_name: dum-nodered
    restart: always
    ports:
      - "1880:1880"
      - "60000-61000:60000-61000/udp"
    network_mode: bridge
    links:
    - dum-mosquitto
    - dum-zigbee

  dum-zigbee:
    container_name: dum-zigbee
    image: koenkk/zigbee2mqtt
    volumes:
      - ./zigbee/data:/app/data
      - /run/udev:/run/udev:ro
    devices:
      - /dev/ttyUSB0:/dev/ttyACM0
    restart: always
    network_mode: bridge
    privileged: true
    links:
    - dum-mosquitto

Více Docker jako takový rozbírat nebudu, psal jsem o něm opět ve dřívějších článcích a zbytečně by to prodlužovalo tuhle sérii. Navíc článků na základy dockeru je na internetu všude spousta 🙂

Zprovoznění

Po dokonfigurování dockeru a ESXI přichází na řadu oživení celého systému. Tady musím říct, že až na zádrhel se správným názvem zařízení ttyUSB0 vs ttyACM0 fungovalo vše hned napoprvé.

Pro testování jsem použil už dříve nakoupené a zmiňované Xiaomi teploměry, kostku a žárovku a dále Zigbee OnOff Controller. Napárování proběhlo hned napoprvé a to i přesto, že všechny zařízení byly původně spárované s původním USB stickem.

Bohužel, jako jediné vstupní zařízení mám momentálně Xiaomi kostku a ta mi prostě zlobí. Problém není v signálu, ale v kostce samotné. Občas pohyb/změnu detekuje a občas ne. Musím proto sehnat nějaké Zigbee tlačítka, která budem po domě na různé dočasné funkce používat (nyní konkrétně tlačítko vedle kojícího křesla na rozsvícení/zhasnutí lampičky 🙂 ).

Pro NodeRED jsem našel nové administrační rozhraní sloužící k lepší správě Zigbee2MQTT sítě včetně možnosti vykresit pěkný graf zigbee sítě:

A taky nové prvky pro NodeRED na snazší bagrování dat z Zigbee2MQTT. Dříve bylo pořeba zpracovávat přímo MQTT parametry, nyní už existují připravené prvky, kdy si člověk může spoustu věcí vyklikat a lezou z toho jen konkrétní zigbee data:

O tomhle už ale zase příště, protože je toho spoustu, co to umí, a chtěl bych se tomu věnovat víc detailně.  Zároveň je to momentláně vše, co mám u sebe rozchozeno. Až seženu tlačítka (zkusím něco z CZ i z Ali, kde to bude na dýl), tak chci zkusit už reálné rozmístění po domě, vyzkoušet dosahy a hlavně udělat už nějaký dlouhodobý systém jak v NodeRED, tak v Loxone, jak Zigbee integrovat. A o tom všem v dalších článcích 🙂

PS: Pokud by měl někdo zájem o předchozí USB stick CC2531 (v RaspPI funguje bez problému) včetně Downloader Cable a CC DEbugger Zigbee emulatoru, tak ho rád prodám. Je plně funkční. Původní cena 26USD, nechám za 400kč vše, pošlu kdyžtak zásilkovnou.

PS2: Tak jsem objednal pár dalších zigbee zařízení na testování. Konkrétně:

Tak jsme kompletní

Tak jsme kompletní

Asi jste si všimli, že poslední dobou sem neměl na blog moc čas. Vrcholili totiž přípravy na release dalšího Vodníka.

A v sobotu, v 18:00 jsme náš vodnický tým zkompletovali:). Nový přírustek se jmenuje Matěj a váží 3,6 kg a měří 52 cm.

Nezbývá než mu popřát do života hromadu úspěchů a alespoň trochu ho zapít 🙂

Severní zeď, díl Osmsetpadesátýšestý

Severní zeď, díl Osmsetpadesátýšestý

Tak pojďme už ty články o severní zdi a truhlíkách konečně dorazit. Stále mi to ve frontě visí hromada fotek, kde se Vám chci pochlubit, jak moc jsem šikovný, tak hurá na to :).

Minule jsme skončili u hotových truhlíků naplněných kompostem a hlínou, to dneska, to to bude o dost zajímavější. Pustil jsem se totiž po delší době zase do zednické a rozhodl se natáhnout si severní zeď lepidlem sám.

Původně jsem to chtěl nechat udělat nějakého řemeslníka. Jenže, ten šikovný, co nám dělal schody, dlažbu, obklady a spoustu dalšího, se rozbil. Na cokoli, co jsem potřeboval, jsem ho naháněl stokrát, když už dorazil, po pár hodinách práce ho buď něco strašně bolelo, nebo to bolelo jeho manželku, nebo mu zrovna přivezli stavební materiál, nebo nějaká jiná výmluva. Po čase jsme si z něj už dělali srandu, že má lexikon výmluv. Kdykoli mu člověk zavolal, vytáhl z klobou naprosto nečekanou vyhovorku. Pokaždé novou, originální a většinou ještě více morbidní nebo absurdní :).

Tahání zdi do lepidla jsem sice ještě předtím nedělal, ale nemůže na tom nic být, ne? Tak jsem zkoukl pár videí a pustil se do toho, Ze začátku mi to nešlo vůbec, tahal jsem to sem a tam a už zamokra vypadal výsledek všelijak. To jsem postupně vypiloval, zjistil jak, odkud a kam tahat a už se to zlepšilo. Ale problém mi pořád dělalo vracení se. Člověk se u téhle práce musí odprostit od opravování toho, kde už byl. VŽDYCKY, VŽDYCKY, VŽDYCKY to tim totiž jen zhorší…. vždycky.

No, dojel jsem to do konce, připravený na to, že tam nějaké drobné kosmetické vady budou. A nechal jsem to uschnout. Když jsem to ráno ale viděl, začal jsem litovat toho, že jsem se do toho pustil. Hele, bylo to fakt hnusný. Asi jsem měl radši tomu druhému řemeslníkovi těch 10.000Kč za těch pár metrů dát. Tohle bylo fakt čiré zoufalství.

A tak jsem zase googlil a někde během toho hledání jsem si vzpoměl na řemeslníka číslo jedna, který vlastně vždycky říkal, že se první vrstva má ignorovat a že to vždycky musí dělat na dvě vrstvy. Ha! V tom je zřejmě ten trik.

A tak jsem zlomil svou nenávist ke zdi, k lepidlu i hladítku a pustil se zas do toho. Namíchal jsem řidší směs a začal nanášet a vyhlazovat druhou vrstvu.

A co Vám budu povídat, najednou jsem si připadal jak naexpovaný profík Pan Zedník level 100 :). Krásná hladká stěna, práce šla pěkně od ruky a všechny nerovnosti uspokojivě mizely.

Takhle jsem dotáhl celou zeď a opět jí nechal zaschnout. A důležité pravidlo, neopravovat co už je uděláno. Otřepky a jiné nerovnosti nechat být, protože….. tady dády dá…. se to pak opraví v dalším kole. A to konkrétně touto brusnou technologickou věcí, která nevím, jak se přesně jmenuje :).

Tou se totiž pak krásně vše zabrousí, takže výsledkem je opravdu hezká (téměř) hladká zeď.

Opět po zachnutí přišlo na řadu natření. Na to jsme koupili klasickou fasádní barvu. Ale jen samotnou barvu, bez jakéhokoli zrna, abych to nemusel ještě točit. Ono lepidlo stejně nějaký trochu vzor zanechalo, takže to jakous-takous strukturu má.

V okamžiku natírání už mi bylo dávno jasné, že by se to o dost lépe dělalo, když by tam ty truhlíky ještě nebyly :). Jenže, znáte to, jak to chodí. Aby se mohlo udělat A, musí se udělat B, kvůli kterému se musí udělat C. A tak bylo potřeba se rychle zbavit kompostu a proto se musely udělat truhlíky a proto se holt zeď natahovala a natírala až pak.

To, jak dlouho mi trvalo sepsat tenhle článek asi nejlépe ilustruje tato fotka. Tou dobou byla má drahocená těhotná žena ještě vlastně vcelku štíhlé figury oproti tomu, jakou Věstonickou postavu má nyní, jen pár dnů před porodem :). No, jsou to skoro tři měsíce, co mi tu ty fotky leží. Hrůza, stydím se :).

Během malování pak soused sundal dřevěné výplně, aby se mohly sloupky z boku natřít. Říkal, že mu tam ta bílá ladí a že jestli mi to neva, tak bych to natřel celé. Jasně že nevadilo, dělalo se to pak o dost lépe, než obkreslovat každé prkno :).

Po natření jsem se pak pustil zpět do obkládání truhlíku. To už byla vcelku pohodová práce. Nařezat a přišroubovat pár prken, to šlo dobře. Až na to horko, to si pamatuju, že bylo hrozné.

Po dokončení obložení jsme pak s I. už jen dotáhli závlahu a zasadili koupené rostlinky (tou dobou jsme ještě netušili, že nám víc než polovinu sežerou všudepřítomní slimáci, grrrr.)

Finální úkon pak bylo naprogramování dalších okruhů automatické závlahy v Loxone, ale to už byla opravdu jen taková třešínka na dortu :).

Truhlíky na severní zdi

Truhlíky na severní zdi

Poslední dobou jsem pořád ve strašném skluzu s článkama. Musím říct, že psát článku během stavby bylo o dost snažší :). To člověk řešil jen tu stavbu a večer pak sesmolil článek a usnul. Teď, i když něco přes víkend udělám, tak pak řeším milión dalších věcí a dětí a než se k článku dostanu, je o 14 dní později :).

No, takže dneska takto zpět k naší severní zdi. Naposledy jsem o ni tady na blogu psal tady, kdy zeď byla ještě jen holé ztracené bednění a truhlíky byly ve stavu dřevěné konstrukce.

Takhle nějak to tenkrát vypadalo. Když to porovnám s dneškem, tak fakt rozdíl :). A teď už ale co bylo dál…

Jako první usazení připravených rámů na staré cihly a vyrovnání do roviny. Jako další pak vyplnění celého obvodu polystyrenem. Jednak aby to v zimě úplně nepromrzlo a jednak proto, aby se tlak hlíny rozložil více do prostoru a na obkladová prkna pak tlačil méně. Je to vyzkoušeno u truhlíků na západě, tak proč to měnit :).

Polystyreny jsem k rámu chytil klasickou pěnou z pistole, co jsem doma našel. Část je dělaná dokonce Illbruck vzduchotěsnou pěnou :). Sice byla už 3 roky po expiraci, ale držela pořád dobře.

Jinak kdyby vás zajímalo, proč jsou tam ty OSB desky, tak v době, kdy sem polystyreny dělal, tu foukalo jak na větrné hůrce. Takže dříve než pěna vytvrdla, lítala deska už dávno někde vzadu za domem. Takže jsem k trohlíkům narychlo uchytil zbytky OSB desek, aby tam tolik neprofukovalo.

Když byly dodělané polystyreny, připravil jsem rozvody pro závlahu. To jsem minule podcenil, takže tentokrát jsem si připravil do každého truhlíku vývod a rozvody samotné jsou dole u země. Na hlavní spodní rozvod jsem použil zbytky všeho, co jsem tady našel.

Takže část je tahaná ve 32mm průměru, část ve dvacítce. Nahoru nad úroven hlíny v truhlíku pak vylézají už všude 20mm, které přes koleno redukuju na finální 16mm, ve které je pak všude roztažena kapková hadice.

Po rozvodech následovalo obložení truhlíků. Opět jsem volil 12cm vysoké a 2cm tlusté hoblované prkna. Dělá se s tím dobře a moc to nestojí. Je mi jasné, že to nepřežije na věky, ale 10-15 let by to zvládnout mělo (díky impregnačnímu nátěru snad déle). Prkna nejsou položená přímo na zemi, je tam cca 2cm mezera. I to snad pomůže.

Další pak následovalo udělání vodotěsných van. Použil jsem zase igelitový rukáv, ale příště bych asi zkusil nějakou nopku. Nejsem si jist, co igelit za pár let udělá. Nopka by byla asi ještě odolnější.

Spodek jsem opět nechal otevřený, aby přebytečná vlhkost mohla odcházet do spodní půdy. Asi by se nic extra nestalo, kdyby to bylo uzavřeno, ale přijde mi to takto lepší. Zároveň jsem na spodek nedával žádné pletivo, protože tu extra problém s krtkama nebo nějakou jinou havětí nemáme (a v tu chvíli se mi to už ani nechtělo řešit 🙂 ).

Jako výplň na spodek truhlíků jsem použil bordel hlínu, co mi zbyla po kultivační akci před domem (tam jsem to celé zryl a srovnal, protože jak tam stávaly různé kontejnery,  tak tam byly vyjeté příšerné koleje a špatně se to sekalo), spolu s se zbytky ošklivé hlíny tady za domem a do toho pak kompost.

Do cca poloviny přišel tenhle bordel mix, nad polovinu se pak pokračovalo už jen čistým kompostem.

Tím jsme opět zlikvidovali veškerý kompost. který ještě místy nebyl ani úplně dodělaný. To ale v truhlíkách nijak nevadí, on tam postupně dojede. A ze spoustu věcí se i rozjedou nové rostlinky. Tentokrát nám takto vyrostlo pár rajčat, několik brambor a dýně :).

A tady pak už dodělaná poslední vrstva hezké hnědé hlíny. Ačkoli byly truhlíky naplněné až po okraj, dneska už je tam cca 20cm vidět igelit. Celé to bylo hodně vzdušné a díky dešťům si to hodně rychle sedá.

A tím dnešní článek skončím. Příště pak bude následovat finalizace závlahy, zdi samotné, obložení truhlíku dřevem zeshora a samozřejmě sadba rostlinek.