X
Zigbee, tasmota a NodeRed

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.

Pomohl Vám náš blog? Chcete nás podpořit? I málo udělá radost 😉
Become a patron at Patreon!
5 1 vote
Hodnocení články
Subscribe
Notify of
guest

20 Komentáře
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
Aleq
2 years ago

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.

vita_k
2 years ago
Reply to  L

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ě.

msk
msk
2 years ago
Reply to  L

🙂

_Petr_
2 years ago

Pěkný článek, jen škoda, že obrázky nejdou zvětšit.

_Petr_
2 years ago
Reply to  L

teď je to dokonalý 😉

Díky

vita_k
2 years ago
Reply to  L

jeste posledni obrazek. Ale to je detail.

vita_k
1 year ago
Reply to  L

jeste jsou spatne prvni dva odkazy. Ale kdyz clovek chce, tak se tam dostane 🙂

Lukáš K.
Guest
Lukáš K.
1 year ago

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?

pavka28
1 year ago

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í

pavka28
1 year ago
Reply to  L

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

pavka28
1 year ago
Reply to  L

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.

pavka28
1 year ago
Reply to  L

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

20
0
Would love your thoughts, please comment.x
()
x