Zigbee, tasmota a NodeRed
Dnešní článek je pokračování mého minulého o migraci ze Zigbee2Mqtt na Tasmotu.https://www.vodnici.net/2022/09/upgrade-zigbee/ . Jak jsem avizoval na závěr minulého článku, postupoval jsem podle návodů od Budulínka až do fáze, kdy jsem potřeboval dostat data z/do Loxone. Jelikož při více zařízeních je už z Tasmota logu dat opravdu hodně, nechtěl jsem svůj miniserver v1 tímto úplně zatěžovat, protože mám určitou představu, jak je asi v miniserveru parsování UDP vstupů optimalizováno a jak funguje :).
Můj plán nakonec byl odchýlit se od přímého napojení na Loxone a využít NodeRed, zároveň se ale vyvarovat MQTT protokolu, který mi na Zigbee přijde krajně nevhodný. Cílem tedy bylo parsovat UDP pakety na úrovni NodeREDu a pak už zpracovaná data dostávat do loxone přes Nodered-contrib-loxone. (Teda, původně jsem si říkal, že by mohl být přímo nějaký plugin na Tasmotu pro NodeRED). Ale od toho jsem velmi rychle upustil, když jsem zjistil, že je postavený opět nad MQTT namísto UDP).
A tak jsem začal vymýšlet, jak si to v NodeRED udělat tak, abych měl co nejméně duplicitního kódu, ideálně mít samostatně část na zpracovaní dat z/do Tasmoty a pak už v ostatních záložkách jen využívat takto předpřipravené prvky. Po chvíli hraní si jsem nakonec vymyslel systém pomocí nodu link-in a link-out, které umí předávat předpřipravené msgs mezi vzdálenými prvky.
Výsledek je, že mám dva typy link-in prvků, jeden, do kterého můžu vkládat předřipravenou zprávu ve formátu { device: XXX, data1:x1, data2:x2 } a druhý, ze kterého už lezou naparsovaná data z Tasmoty v podobném formátu.
Takto například konvertuju 0/1 hodnotu z Loxone control-in prvku do Tasmota formátu { "device": "MiSmartPlug01", "Power":"1" }
.
To hlavní kouzlo se ale skrývá na poslední záložce. Zde mám dva transformační “programy”. První přijímá UDP záznamy z Logu tasmoty a pomocí JS funkce je rozparsuje a vyrobí z ních JSON objekt zmíněný v předchozím odstavci. Pomocí funkce switch pak tento objekt pošlu na konkrétní link-out. Toto by šlo řešit i tak, že se to pošle na univerzální link-out, ale znamenalo by to pak u každého využití testovat, zda jde o správu určenou danému prvku. Takže mi přišlo lepší si to rozházet už tady a posílat na konkrétně pojmenované výstupy.
Podobně pak funguje i druhý program, který pak naopak ze vstupních objektů udělá příkaz pro tasmotu ve formátu /cm?ZbSend {….} a pošle ho přes HTTP Api do Tasmoty.
A to je veškerá magie :). Díky tomu mohu mít logiku na Tasmotu strčenou bokem na serveru, kde je výkonu násobně více a parsování logů je tam hračka, a předzpracovaná data jsou pak elegantně poslaná do Loxone. Jasně, je potřeba ten NodeRED mezikrok, ale to mi osobně nevadí, naopak, spousta věcí se mi zde dělá lépe, než psát ručně dokola pofidérní parsovací stringy Loxone, které mi přijdou, že ne vždy fungují tak, jak bych čekal :).
Na závěr pak ještě jedno zamyšlení. Možná jste si všimli, že v programu pro ovladače ikea je každý udělaný trochu jinak. Zatímco ovladač pracovny je udělaný tak, že spíná univerzální vstupy vytvořené i v Loxone a až tam se napojuje na logiku, tak ovladač z ložnice je napojený na prvky Loxone napřímo.
Stále totiž hledám nějaký “nejlepší” způsob jak Loxone s ostatními zařízeními propojovat a toto je jeden z pokusů. Zatím musím říct, že první varianta mi přijde lepší. Sice to znamená vytváření vstupů/výstupů i na straně Loxone, ale dává to celému systému takovou lepší kulturu. Je pěkně oddělěno NodeRED zpracování dat, které komunikuje jen s konkrétními vstupy v Loxone na nějakém centrálním místě a až v Loxone se pak těmto vstupům dává konkrétní funkce.
Díky tomu se pak v celém LoxConfigu lépe orientuje a hlavně i po čase, když člověk hledá kde/co se proč děje, tak je to na jednom místě. Zatímco když do toho šahá NodeRED napřímo, je občas dost složíté dohledat, proč se něco zrovna seplo.
Tak to jen takový poznatek na závěr. Klidně napište, jestli máte ještě nějaký jiný sýstém organizace nebo k jakým závěrům jste po čase využívání došli vy.
Ahoj,
proč je vlastně MQTT na Zigbee krajně nevhodný? Zigbee nepoužívám, mám ale několik věcí na MQTT a připadá mi to jako smysluplná věc.
Díky,
A.
Z meho pohledu je to overkill, kdy ty misto abys ihned obdrzel info o kliku, napriklad pres ten UDP, tak ta zprava jde do nejake message queue, pak z ni se znova nacita, pak se zas zpracovava atd.
navic imho mqtt neni na tisice zprav, ale spis stavove zpravy.
Bohuzel, druha strana mince je, ze to vypada, ze TasmotaUDP je ve finale pomalejsi nez Zigbe2mqtt predchozi reseni ;-(. U svetel/zasuvek to nevadi, ale hodne to pozoruju u zaluzii.
zatimco driv sem pres zibgee+ikea ovladac byl schopny nastavit presne polohu lamely, tak ted je to jen o “otevrit” a “zavrit”, protoze nic mezi tim ovladacem netrefim.
Uz sem to trochu googlil a vypada to, ze s tim ma obecne tasmota dlouhodobe problem. Coz me trochu stve, protoze jinak to nastaveni a vsechno je dobre.
Takze mozna budu zkouset i neco dalsiho.
Pokud by s tim nebylo možno nic udělat, tak to dáš zpátky na původní řešení? Já jsem připraven na obě – víceméně.
Uz jsem zpet ;-). Jen sem jeste nemel cas napsat clanek. Nakonec se ukazalo,ze nejlepsi reseni je update posledni verze na zigbee2mqtt, ktera pridava i UI a dalsi veci, navic jr brutaaaaalne rychla, a to vcetne mqtt.
Takze jsem se MQTT uz vnitrne omlouval a mam ho zase rad, protoze nyni zigbe2mqtt (me puvodni reseni) vcetne mqtt je nasobne rychlejsi nez tasmota a i rychlejsi nez bylo driv.
jinak kluci na foru jeste naslu zpusob, jak vyuzit zigbe2mqtt spolu s tasmotou pres UDP. Tohle reseni je rychlejsi nez klasicka tasmota, ale stale pomalejsi nez ciste zigbe2mqtt reseni.
🙂
Pěkný článek, jen škoda, že obrázky nejdou zvětšit.
staci rict…. 😉 Fixnuto
teď je to dokonalý 😉
Díky
bohuzel neni, viz moje odpoved Aleqovi ;-). Uvidime, zda s tim neco pujde udelat.
jeste posledni obrazek. Ale to je detail.
jeste jsou spatne prvni dva odkazy. Ale kdyz clovek chce, tak se tam dostane 🙂
opraveno, tvuj post sem nejak prehlidl, sry
Ahoj, nefunguje mi odkaz na předchozí článek co je uveden v prvním odstavci textu.
Ještě jsem se chtěl zeptat – co je obsahem set msg.payload elementů, které jdou pak do Loxone?
link oprven, diky
ohledne msg.payload, tam jde napriklad jen prikaz “pulse”. Ono to nejde primo do loxone, ale do toho loxone-nodered prvku a ten to pak konvertuje.
Ahoj všem včera jsem rozchodil ZIGBBEE2MQTT v dockeru s HACKnutou bránou od LIDLU ( SGWZ 1 A2) .
ZIGBBEE2MQTT běží v dockeru na serveru (SYNOLOGY NAS) – zapnuto místo USB – TCP zařízení
SGWZ 1 A2 stačí připojit kdekoliv síti
teď testuji odezvy a rychlost odesílání
ja si snad tu lidl branu budu muset taky poridit, slysim o ni ted ze strasne moc stran 😉
výhoda je že nejsi vázanej na USB já to začal řešit ve chvíli kdy RasPI a USBCC2652 nestíhaly číst
to se mi presne libi, ze bych to nemusel hnat pres USB v serveru ;-). Ale posledni pokus s tasmotou dopadl bidne, tak uz se trochu bojim.
Dej pak vedet jak rychle to realne je, zda je to na urovni USB reseni, nebo treba i rychlejsi
Vyzkousim presne jako sem zkousel Tasmotu která zkončila v šupliku:
KOUPIL sem ty nový Lidl zásuvky co měří spotřebu.
Dal sem posílat “power” po 10 vteřinách a zahltil tím jak RasPi tak i Tasmotu.
Tasmota se restartovala nepravidelně.
RasPi zase pak nestíhalo zpravovávat tlačítka co mám na žaluzie a ventilator u krbu.
Na žaluziích je krásně vidět rychlost odezvy na click.
Zatim man na Lidl Hubu testovací tlačítko a jede to stejně rychle jako na USB. Uvidíme až zapnu zásuvky a zahltím.
Testovaní bude pokračovat po horách. Přístí tyden lyžujeme.
Ahoj,
Tak první test po dovče:
1 ) zapnul jsem obě zásuvky z LIDLU ať posílají data každých 5 sekund ( Tasmota i USB dongle na Z2M to zahlcovalo a tlačítka měla dlouhou odezvu)
2) po 3 hodinách to vypadá že to stabilně jede
3) rychlost mi přijde stená jako na Ź2M+USB
Jak jsem psal vše mi běží na Synology na dockerech:
a ) Z2M
b) Eclipse MQTT
c) NODE-RED —- > LOXONE WEBSOCKET
nechám to běžet den , dva a uvidíme jak to bude stabilní a postupně připáruju další device,
aktuálně jich mám asi 30