Browsed by
Category: Loxone

Články zabývající se Loxone problematikou

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.

Upgrade Zigbee

Upgrade Zigbee

Tak jsem si po delší době doma zase trochu zabastlil, dokonce i pájku oprášil, a tak bude dneska i článek :).

Přinucen okolnostmi jsem se musel rozhodnout, zda dát dohromady rozbitý zigbee2mqtt, nebo se dokopat a využít skvělého návodu od Budulínka a přemigrovat celé Zigbee na Tasmotu (donucen proto, že po dvou výpadcích proudu v noci a nouzovém vypnutí serveru se mi rozbil databázový soubor zigbee2mqtt a celá síť se rozpadla).

Bohužel, včera nebyl zřejmě můj den a tak do čehokoli jsem se z toho pustil, tak ani se skvělým návodem mi prostě nefungovalo vlastně nic 🙂

Začal jsem flashováním pomocí Tasmotou doporučeným adaptérem. No, tak ten ani zaboha. Nejprve jsem myslel, že jsem si blbě napájel piny na připojení kablíků, nebo že jsem někde zapojil něco špatně. Ale proste nic. Neustále chyba “Unexpected error: ESP Chip Auto-Detection failed: Failed to connect to Espressif device: No serial data received.”. Když ani několikáté přeměření a překontrolování nepomohlo, zkusil jsem druhý adaptér. Naštěstí jsem totiž tenkrát objednal dle návodu od Budulínka oba dva.

A světe div se, fungoval napoprvé. Takže ponaučení číslo jedna, nespoléhat na oficiálně doporučené adaptéry a brát radši oba 🙂

Připojení do sítě pomocí ethernetu prošlo napoprvé a tak jsem pokračoval v nahrávání firmwaru do už flashnutého zařízení. I to proběhlo dobře a už jsem začínal mít pocit, že už bude jen dobře….

Nebylo :). Po restartu zařízení zahlásilo “zigbee not available” a nazdar. Skvělý. Takže jsem rozbil něco cestou při flashování?

Takže znova flash zpátky původního firmware, znova pokus na nový firmware, stažení i beta firmware…. a nic. Furt to stejné.

Tak jsem šel do logů. V nich nic neříkající hláška “ZGB: timeout, goto 99”. Ok, takže se zigbee zařízení nestihne ohlásit včas? A tak zas půl hodiny googlení.

Trvalo to, inženýři z Tasmoty se to snažili velmi úspěšně maskovat a schovat, ale našel jsem to. Problém není v Zigbee zařízení :).

Problém je (a ukáže se v logu, když dáte maximální detaily logování), že Tasmota se nedokáže připojit k NTP time serverům a synchronizovat čas, a proto zakáže Zigbee… ok.

Takže pokračovalo kolečko, proč se vlastně nedokáže připojit. Ukázalo se, že nefunguje DNS překlad NTP adresy. Ale proč..

No, odpověď pak už byla vcelku snadná. Protože mi výpadek elektriky sestřelil nejen Zigbee2mqtt VM, ale také PiHole DNS server. Takže ten přestal fungovat a zatímco ostatní zařízení umějí pracovat i se sekundárním DNS, které mám nastaveno, tak Tasmota ne.

Takže jsem cestou ještě obnovil zálohy PiHole VM, opravil DNS resolver a pak už tasmota najela včetně Zigbee adaptéru. Párování a nastavení Tasmoty pak šlo už naštěstí jako po másle, takže jsem jen následoval zmiňované návody.

A to až do fáze, kdy jsem začal propojovat Tasmotu s Loxone. Nakonec jsem se rozhodl nepoužít přímé propojení pomoci UDP parsování v Loxone, jelikož když jsem viděl, kolik dat se do Loxone hrne a že každý virtuální vstup musí data znovu a znovu parsovat. Proto jsem se nakonec rozhodl využít NodeRED a data předzpracovat. Přeci jen mám jen původní miniserver a takto jsem ho spamovat úplně nechtěl. Ale o tom v dalším článku.

Závěrem už jen poděkování Budulínkovi za jeho návody, ušetřilo mi to určitě hromadu dalšího času a nervů, a hlavně, celý systém mi teď přijde o dost stabilnější než původní Zigbee2Mqtt.

Seznam odkazů na návody na Tasmotu:

Hydroponie pro každého řízená Loxone

Hydroponie pro každého řízená Loxone

…. tak teda, když ti to v těch trubkách roste dej to příště do celého skleníku ať se s tím nemusím zalévat !

Možná budou pro někoho motivací  slova mojí manželky, když “to” uviděla. Pro mne byla před rokem motivace vyzkoušet, jestli je hydroponie systému NFT tj. pěstování v periodicky tekoucím vodním roztoku vůbec k něčemu a funkční. No a protože jsem měl “nějaký volný” miniserver rozhodl jsem se pro jeho poněkud netradiční využití ovšem s tou podmínkou, že s ním “uřídím celou ptákovinu”. Na internetu najdete sousty článků a ještě více reklam s cílem prodat pěstírnu za “+” 15 tisíc. Základ najdete třeba tadyMůj první pokus stál na trubkách a čerpadle 1.270,- Kč a místo miniserveru můžete klidně použít časovač ke spínání stromečku co se někde každému nudí v šufleti.  Na fóru pak :” Hydroponie s Loxone ? ” .

První informace jak vybudovat hydroponii v jedné větě zní  takto  :

” Vezmi šedou trubku 110 mm, do ní vyvrtej s odstupem 250 mm otvory v jedné řadě průměr 68 mm do nich dej pěstební košíčky, jeden konec zacpi zátkou s otvorem pro 1/4″ trubku na druhý dej spojku 110 mm do ní  vlep přepadovou přepážku s odpadními a odtokovým otvorem, pokračuj zátkou-přechodkou na 40 mm trubku, tu strč do nádrže ve které bude čerpalo a 1/4″ PE trubkou to zaveď na druhý konec, čerpadlo roztoku dej na časovač, nalej vodu s živným roztokem, pH 5,9 nalaď regulátorem, dej tam předpěstované rostlinky a jen se dívej jak to roste.”

Nechci se tady zabývat hydroponií z pohledu “lodyh” toho najdete na netu mraky celkem pěkně ve videu od GARDENIX  ostatní si najdete i jinde jenže … nikdo vám neřekne všechno,  jen kousek pravdy a pak chce prodat řešení.

V první informaci je to co najdete všude  a teď to podstatné v druhé informaci :

” Spád trubky udělej 2-3 mm / 1 m ), nedělej delší sekce trubky v jednom sklonu více jak 4 m, spočítej si objem jedné trubky zaplněné na 85%, vynásob to počtem trubek obsluhovaných jedním čerpadlem (prostě jednu sadu  hydroponie ), vynásob to 2-3x a to je objem tvé nádrže, před odtok do nádrže dej vnitřní přepadovou přepážku, na časovači čerpadla nastav poměr “čerpá / pauza” 2,5 :1.” 

Jednoduché že ? takže asi takto vypadají přepážky :

Nádrž, ve které je vložena ještě přepadová komora, aby čidla pH, TDS a teploty byla v každém stavu cyklu čerpadla  hydroponie zaplněna vypadá takto:

Jen pozor přepad nesmí končit pod hladinou, ale musí volně po zakrytí poklopem padá voda do komory aby se kapalina provzdušnila. Druhý konec pak vypadá takto:

Vřele doporučuji dát tam ty kohouty, abyste mohli regulovat přítok do každé trubky zvlášť, taky je možné dát záložní paralelní čerpadlo z nádrže protože když se jedno zastaví nepřijdete na to hned a lodyhy vám takovou věc neodpustí, manželka prohlásí že “ten krám nefunguje” a máte po p… ( po pátkách samo zřejmě )!

Tak a tady pokud nasadíte stromečkový časovač můžete skončit. Ještě si koupíte pH a TDS měřák, pH regulátor ( kyselina fosforečná 60%) a pěstební roztoky např. URBAN Jungle  no a to je vše.

A nebo ! …. si s tím ještě trochu pohrajete…

Jaké parametry měřím a posílám do MS1  :

  • pH ( 0-10V analog vstup )
  • TDS nasycenost roztoku živinami ( 0-10V analog vstup )
  • teplota roztoku ( 0-10V analog vstup )

Co spínat z MS1:

  • čerpadlo roztoku ( 230 V relé )
  • LED osvětlení  pěstírny ( 230 V relé )
  • cirkulaci vzduchu v pěstírně = větráky mám dva ( 230 V relé )
  • dopouštění vody do nádrže mg. ventil ( 230 V relé )
  • peristaltické čerpadlo dávkování pH regulátoru ( 12 V relé )
  • růstový roztok Jungle A ( 12 V relé )
  • růstový roztok Jungle M ( 12 V relé )
  • růstový roztok Jungle B ( 12 V relé )

Což může vypadat třeba takto :

No a protože v pěstírně – skleníku mám i jiné řízení doporučuji ještě ovládat větrání ( 3 x okna motory ) podle teploty a vlhkosti vzduchu v pěstírně takže:  měřit teplotu vzduchu, vlhkost a intenzitu světla což provozuji přes starší instalaci a ESP32 modul takto:

Dále mám ještě krabičku a tři tlačítka na ruční spouštění cirkulačního čerpadla roztoku,  LED světla a impulzu dopouštění  10l  vody. Na analogových výstupech MS1 dva voltmetry 0-10V co mi ukazují  pH a TDS hodnoty …. je to v podstatě zbytečné, když  už to máte na mobilu v App, ale pro manželku to vyvolává dojem, že se ta p……. dá ovládat ( ptákovina samozřejmě !! ) .

Výsledek v jednotlivých fázích potom :

 

Pokud se týče Loxplánu, tak vůbec nebyla legrace nastavit regulaci pH protože regulátor ( kyselinu fosforečnou 60% )  můžete jen přidávat do roztoku. Princip je, že přepadová nádoba co jsou v ní čidla je předřazena hlavní nádobě, kam se teprve dopouští jednak voda tak regulátor tak i složky Jungle A-M-B. Jinak by to nefungovalo na celý obsah roztoku. Navíc dávku ( čas chodu ) peristaltického čerpadla musíte brzdit čím více se blížíte nastavené kýžené hodnotě . To by mělo být pH 5,9.

Loxplán neodpovídá zdaleka dvou dnům pokusů:

 

Další téma je dávkování jednotlivých složek JUNGLE roztoků a to tak, aby byla v nádrži správná koncentrace ( nastaveno 1200 jednotek ) a také podle toho v jaké fázi se pěstírna ( lodyhy )  nacházejí. To jsou režimy dávkování  RŮST / KVĚT / PLOD. Přepínané ručně v App ale na příští rok chystám kameru ( zatím je jen pro přehled a záznam ) s analýzou obrazu, tím budu vyhodnocovat fázi růstu a následně míchání poměru jednotlivých složek JUNGLE 🙂 . To teprve bude ta správná automatizace !

Zatím to vypadá takto :

V App jsou jednak hodnoty čidel, tak historie pH, TDS, teplot vlhkosti , doplňování vody atd… nějak takto:

Co se všechno dá v té p……. ( ptákovině !!! ) pěstovat  ?

Saláty, okurky, rajčata, papriky … zatím:

Aby se měly lodyhy typu okurky a rajčata po čem plazit vzhůru k LED panelům s růstovými světly mají tam natahány u stropu ocelová lanka a k mim připoutané provázky. Pro papriky pak slouží plůtek s bambusovými tyčkami.

Zbývá dodat že všechny rostliny na fotkách jsou samozřejmě pěstovány v pěstebníku se stejným roztokem JUNGLE ale v koncentracích zcela jiných….

Co dodat  ( ?) … to prostě ” musí bavit” a navíc, když odjedete na dovču stará se vám o lodyhy Loxone … jaké jsou s tím spojeny výhody ?

  • nediskutuje o tom co “by se mělo sadit do skelníku”
  • nevyjadřuje se ke způsobu zalévání rostlin
  • nenadává že se o skleník nestaráte
  • prostě se to toho ne…. !!!!!

Video na YouTube je zde:

Na závěr děkuji všem co to dočetli až k tomuto řádku. Pokud bude zájem dám další článek nejen o HW hydroponie ale taky o tom čeho se vyvarovat při pěstování .

P.S. a výhru ze soutěžní otázky co to je :

vyhrává :  @_petr_  ! paprika je to a připravte se že kořenů je v trubkách opravdu dost a dost …  pokud máš zájem pošlu vzorce a nastavení do Loxplánu regulace pH

(c) Dalibor 2022

Jak ovládat MQTT z Loxone

Jak ovládat MQTT z Loxone

Dnešní článek je třetí z mé třídílné minisérie pro začátečníky o tom, jak propojit Loxone s externími systémy. Dnes to bude o komunikaci s MQTT. Předchozí dva se týkaly REST API a ModbusTCP. Všechny tři způsoby využití budu ukazovat na chytrých zásuvkách Netio, které tyto protokoly podporují.

V případě MQTT je to s Loxone trochu složitější. Bohužel Loxone nepodporuje MQTT napřímo (není to zřejmě v jejich ekonomickém zájmu), takže je potřeba si pomoci NodeRED aplikací. V té lze programovat dodatečnou logiku a pomocí například REST API komunikovat pak vůči Loxone.  V tomto článku se už nebudu zabývat základy NodeRED, jelikož jsem o nich psal návody ve starších článcích zde: Zigbee2MQTT a ve článku NodeRED – Propojení všeho se vším. Stejně tak nebudu extra vysvětlovat MQTT, připojení k němu či instalaci serveru, která je popsaná ve článku MQTT Message Broker a Propojení MQTT a Loxone.

 

Takto nějak vypadá cíl našeho dnešního snažení. Stejně jako v případě Modbusu a RESTu budeme implementovat zapnutí a vypnutí zásuvky, tentokrát pomocí MQTT (za pomocí NodeRED a REST API volání).

Podobně jako v případě ModbusTCP propojení začneme tím, že si vyzkoušíme fungování samotného MQTT protokolu a dostupnost cílového zařízení. V případě MQTT používám aplikaci MQTT Explorer, kde se můžete přípojit k Vašemu MQTT serveru a sledovat, jaké topicy jsou k dispozici a případně testovat odesílání topiců vlastních.

Abychom otestovali, že naše cílové zařízení (v tomto případě chytrá zásuvka) naslouchá MQTT zprávám, zkusíme odeslat zapínací příkaz. V tomto případě je to vystavení topicu netio/PowerCable-mqtt-8E/output/1/action s hodnotou 1. Konkrétní nastavení záleží vždy na cílovém zařízení a je potřeba postupovat dle dokumentace. Dokumentace k Netio MQTT zásuvkám je k dispozici zde.

Pokud nám zařízení po MQTT komunikuje, přejdeme do fáze dvě a tím je rozchození komunikace z NodeRED směrem k MQTT. Abychom opět nejprve otestovali základní funkčnost, uděláme si jednoduchý projekt, kde budeme mít dvě tlačítka, která nám budou posílat stav 1 a 0 směrem do MQTT.

Pro tyto účely vložíme prvek MQTT output, nastavíme mu cílový server a topic. Hodnota topicu se pak do MQTT Output node dostane z “Inject” prvku, do kterého nastavíme hodnoty 1 a 0. Dáme deploy na projektu a otestujeme, že po kliknutí na inject prvky se relé zapne či vypne.

Pokud opět funguje vše jak má, pokročíme dále. Testovací vstupy 1/0 si v projektu ponecháme a přídáme dva vstupní REST API pointy. Jednomu dáme adresu /netio/zasuvka/0 a druhému /netio/zasuvka/1. Tento vstup pak napojíme na template prvek, který bude posílat hodnotu 1 a 0 směrem do MQTT output prvku. Zároveň si HTTP vstup pošleme i na debug výstup a samotný HTTP požadavek ukončíme prázdnou odpovědí pomocí HTTP response.

Samozřejmě by to šlo celé udělat mnohem více elegantně, mít například jen jeden REST API vstup, akceptovat vstup ne přes GET, ale POST jako hodnotu 0/1, nebo dokonce třeba “device=1,state=0” a vstupní data rovnou parsovat a posílat směrem do MQTT output.  Cílem této ukázky je ale přehlednost a pokud bych do toho motal ještě parsovaní v Javascriptu, myslím, že by to přehlednosti úplně nepomohlo :).

Takto upravený projekt dáme opět uložit a vyzkoušíme. Pokud vše šlo podle plánu, můžeme nyní pomocí URL adresy vedoucí na náš NodeRed a přidáním “/netio/zasuvka/1” či “/netio/zasuvka/0”  zapínat a vypínat zařízení pověšené na MQTT.

A nyní už zbývá poslední krok, napojit Loxone na náš NodeRED API Restpoint. Tento postup je nyní už naprosto identický s tím, co bylo popisováno v prvním článku o komunikaci mezi Loxone a REST API. Proto to nyní vezmu trochu rychleji. Vytvoříme nový virtuální výstup, který nasměrujeme tentokrát směrem k NodeRED. V mém případě http://nodered.dum.

Do virtuálního výstupu přidáme “Příkaz virtuálního výstupu”, kterému dáme instrukci k zapnutí a vypnutí dle našeho nastavení v NodeRED. V mém případě “/netio/zasuvka/1” a “/netio/zasuvka/0”.

Takto připravený virtuální příkaz pak už jen opět vytáhneme do Loxone plánu a propojíme s tlačítkem. A tím máme cestu z Loxone k MQTT ukončenou.

Tentokrát byla bohužel cesta z Loxone do MQTT trochu složitější. Je to dáno tím, že Loxone úplně neuznává většinu nových formátu (MQTT, Zigbee,…) a razí si jen své proprietární technologie. Naštěstí tu ale máme možnost skrz RestAPI si z/do NodeRED dostat jakákoli data potřebujeme, takže přesto lze MQTT použít.

Jak ovládat Modbus TCP/IP z Loxone

Jak ovládat Modbus TCP/IP z Loxone

Dnešní článek je druhý ze série tří článků pro začátečníky o tom, jak propojit Loxone s externími systémy. Dnešní článek bude o komunikaci Modbus TCP/IP. Předchozí díl byl o REST API a příště bude ještě MQTT. Všechny tři způsoby využití budu ukazovat na chytrých zásuvkách Netio, které tyto protokoly podporují.

Modbus TCP/IP protokol je variace Modbus protokolu, který ke komunikaci používá klasický ethernet (TCP protokol) namísto klasického Modbusu RTU využívajícího RS485 nebo RS232. Z toho vyplývá, že ho pomocí Loxone lze ovládat bez nutnosti dokupovat Modbus extension.

 

Předtím, než se pustíme do samotného Loxone, začneme freeware aplikaci Modbus Master, kde si lze celou komunikaci vyzkoušet nanečisto, než přistoupíme k samotnému ovládání skrz Loxone.

Abychom mohli se zařízením skrz Modbus komunikovat, musíme znát adresy, na kterých zařízení čeká instrukce, případně, na kterých odesílá stavová data. Pro Netio chytré zásuvky je Modbus TCP/IP popsán v této dokumentaci.  Detailní návod, jak Modbus Master nastavit můžete najít také na stránkách Netia.

Pro sepnutí zásuvky číslo jedna potřebujeme tedy zapsat hodnotu 1 na adresu 101 do sekce 0x05 – Write Single Coil, pro vypnutí pak nastavíme hodnotu do stejné adresy.

Poté, co vyzkoušíme, že nám funguje komunikace mezi ModbusMasterem a samotným zařízením, je čas přejít do Loxon Configu. Toto otestování doporučují vždy před samotným nastavením do Loxone, protože se snadněji a rychleji dá vyzkoušet, že umíme správně se zařízením komunikovat.

Takto nějak vypadá cíl našeho dnešního snažení. Do sekce Netio tentokrát přibude tlačítko na zapnutí či vypnutí zásuvky skrz Modbus TCP/IP.

Začneme tím, že v Loxone Configu klikneme na sekci “Komunikace Miniserveru” a nahoře v menu klikneme na ikonku “Modbusserver”. Tím vytvoříme nový modbus server, který si pojmenujeme “Netio Modbus” a jako adresu mu nastavíme jeho IP adresu následovanou dvojtečkou a číslem portu (defaultně 502).

 

Do takto definovaného Modbus serveru nyní přidáme “Modbus zařízení”. A to kliknutím na ikonu “Senzory a aktory” a vybráním “Modbus zařízení”. Zařízení pojmenujeme třeba “NetioZásuvka”.

Do třetice pak do vloženého Modbus zařízení vložíme “Digitální aktor”. Digitální znamená, že nabývá hodnot jen 0 nebo jedna, zatímco analogový by nám dovolil nastavit libovolnou hodnotu do cílového zařízení.

Ve stromu vpravo (bod 1) vidíte, jak by mělo nakonfigurované Modbus zařízení vypadat. Máme NetioModbus server, do kterého je vložena NetioZasuvka zařízení, které má digitální aktor OnOff. Název tohoto aktoru můžeme nastavit opět libovolný a poté do IO adresy zadáme adresu, kterou jsme si dříve vyzkoušeli v aplikaci ModbusMaster a do Příkazu pak zadáme 0x05 – Write single coil.

Tím bychom měli mít Modbus komunikaci nastavenou a zbývá jen daný aktor vytáhnout do Loxon plánu, propojit s tlačítkem, uložit projekt do Loxone Miniserveru a vše vyzkoušet.

 

Jak vidíte, ani na ovládání přes Modbus TCP/IP není nic komplikovaného. Je vždy lepší si komunikaci vyzkoušet předem pomocí ModbusMasteru (nebo jiného SW klienta pro modbus) a až pak začít nastavovat do Loxone. Přeci jen má Loxone svá specifika a je dobré vědět, že zařízení i cílové porty fungují, jak očekáváme, a případný problém je tedy v nastavení v Loxone configu, než hledat naslepo zkoušet, proč to nejede a zda je problém v Loxone nebo ve špatné adrese 🙂

 

Jak ovládat REST Api (URL) z Loxone

Jak ovládat REST Api (URL) z Loxone

Dnešní článek je první ze série tří článků pro začátečníky o tom, jak propojit Loxone s externími systémy. Dnes to bude o komunikaci REST API (tzn volání URL adresy vzdáleného zařízení), příště nás pak čeká ovládání zařízení přes ModbusTCP a nakonec pak ovládání skrz MQTT (kde je nutné využít externí NodeRED na převod požadavku do MQTT formátu). Všechny tři způsoby využití budu ukazovat na chytrých zásuvkách Netio, které tyto protokoly podporují.

Pro ty, co neví, co je REST protokol, tak zjednodušeně řečeno je to volání nějaké URL adresy a zpracování takové odpovědi. Typ REST požadavku může být buď klasický GET (to je, jako když zadáte nějakou url adresu do prohlížeče), POST (což je, když se odesílá třeba formulář na webové stránce), nebo pak již konkrétnější příkazy PUT/DELETE/PATCH, které se používají při úpravách dat skrz REST protokol.

Pro naše potřeby nám bude nyní stačit GET, jelikož Netio podporuje nastavování napřímo skrz REST URL ve formátu http://IP_ADRESA/netio.cgi?pass=heslo&output1=3&delay1=2000.  Pokud bychom ale například chtěli nastavovat stav nikoli přes URL, ale přes JSON či XML, využili bychom příkazu POST, pomocí kterého bychom na adresu http://IP_ADRESA/netio.json posílali JSON soubor s instrukcí pro zapnutí. Jelikož se ale v Loxonu s JSON či XML nepracuje úplně nejlépe (rozuměj téměř nijak), zůstaneme raději u mnohem snazšího URL.

Takto nějak vypadá cíl našeho dnešního snažení. Krom samotného vypínače na zapnutí a vypnutí chytré zásuvky uděláme ještě tlačítko, které na 2 sekundy zásuvku zapne a poté zase vypne.

Jako první v Loxone Configu přidáme “Virtuální výstup”, který si pojmenujeme třeba NetioREST a zadáme mu Adresu http://192.168.1.98  (pozor, adresa nesmí končit lomítkem).

Dále pak přidáme “Příkaz virtuálního výstupu” do vytvořeního virtuálního výstupu. Ten si pojmenujeme třeba OnOff a vyplníme instrukci při zapnutí a vypnutí (pozor, musí začínat lomítkem).  Příkaz k zapnutí/vypnutí má formát/netio.cgi?pass=Heslo&output_CISLO_VYSTUPU=STAV_VYSTUPU (podrobná dokumentace zde).

Krom samotného on/off pak přidáme ještě druhý příkaz na zapnutí zásuvky jen na 2 sekundy. To se dělá tak, že jako stav výstupu nastavíme hodnotu 3 a přidáme parametr “delay”. Přidáme tedy další “virtuální příkaz”, pojmenujeme ho třeba “Pulse” a jako instrukci pro zapnutí dáme /netio.cgi?pass=heslo&output1=3&delay1=2000. V tomto případě nebudeme dávat instrukci pro vypnutí, jelikož o vypnutí se postará zásuvka sama.

Takto vytvořené virtuální příkazy si pak nataháme do samotného Loxone plánu, kde je propojíme s tlačítkem a vypínačem. V případě On/off necháme tlačítko v režimu “vypínač”, zatímco v případě pulzního sepnutí nastavíme režim “tlačítko”.

A takto pak vypadá samotné zapínání/vypínání přes vypínač či tlačítko.

Jak vidíte, ovládání přes REST API není nic komplikovaného. Co bohužel v případě Loxone trochu komplikované je, je správně zadat ovládací URL. Více o tom, co všechno se může pokazit a jak takové chyby odladit jsem psal v dřívějším článku “Loxone virtuální vystupy a jejich debugging”.

 

Jak pomalý je Loxone? Hodně!

Jak pomalý je Loxone? Hodně!

K dnešnímu článku mne motivovaly události posledních dnů, kdy jsem ladil můstek mezi Loxone a Quidem. Níže popsané zkušenosti jsou s původním miniserverem verze 1. U verze 2 je mnohem silnější čtyřjádrový procesor s mnohem větším množstvím paměti a tak není s výkonem ani můstkem žádný problém.

Ovšem problém je to, že Loxone diky updatům stále více a více zhoršuje výkonnost miniserveru verze 1. To, že se s každou verzí snižuje výkon o cca 1-2%, je bohužel už známý a otestovaný fakt.

Ačkoli primárně řeším výkonnost PicoC kódu, tak problém už zdaleka není jen v bloku “Program” a případně mém můstku. Problém je už také s originálními Loxone extensions, kde přestávají fungovat například dvoukliky. A bohužel, jak ukážu v dnešním článku, problém už je tak velký, že se začínají rozsynchronizovávat i stavy prvků.

A o tom chci dneska psát. Je to něco, nad čím jsem strávil poslední dva týdny několik desítek hodin.

Problém začal vcelku nevinně. Jeden z uživatelů mého můstku reportoval, že když zkusí zapnout/vypnout více relé najednou, občas nezmění stav všech relé jak by mělo. Zdálo se to jako nesmysl.

Jako první jsem tipoval chyby v UDP či chybný Quido modul. Jenže tím to nebylo. Chovalo se tak více modulů a UDP pakety po prověření ve Wiresharku chodily správně.

Tak že by chyba v programu? Vždyť můstek mezi Loxone a Quidem již používají desítky lidí a nikdo doposud problém nehlásil a to mám zprávy, že jsou i tací, co na to pověsí třeba 3x-4x 2/32 Quido modul, tzn. ovládají 128 relátek skrz můstek a bez problémů.

A tak jsem hledal dál. Dokonce jsem volal do Papoucha, povedlo se mi spojit s hlavním vývojářem Quida, se kterým jsem si opravu pěkně pokecal. Navzájem jsme si sdělili chyby, o kterých víme, dokonce mám příslib, že bude snad i slíbená změna ve firmware na zrychlení vstupů. Jenže s tímto náhodným spínáním si ani u nich nevěděli rady.

A tak jsem do můstku dodělal další logování výstupů (defaultně vypnuto), abych přesně trasoval, co se z Loxone odešle. A tady, když se udělalo víc zapnout/vypnout operací, se začaly ukazovat chyby. Loxone občas odesílal naprosto jiná data, než jaká měl vzhledem k Loxconfigu mít.

Není možné, zdálo se. Jedno tlačítko, ze kterého vede 32 propojení na 8 logických členů AND, které pak vedou na jednotlivé vstupy v programu. Jak to, že když zmáčknu tlačítko, do programu jsou nastaveny různé hodnoty, a ne vždy samé 1 či 0?

Že by chyba v programu? Nebo PicoC? A jak to, že to na verzi 8.1.11.11 nedělá? A tak jsem hledal dál.

PicoC nabízí na práci se vstupy/výstupy programu jen pár funkcí. Funkci getinputevent(), která vrátí počet změněných vstupů programu a funkci getinput(n), která vrátí stav daného vstupu.

Program samotný nedělá v tomto ohledu nic složitého. Jelikož PicoC ani Loxone neumožnuje nějaké event-driven programování, neboli čekat na to, až se něco stane, je potřeba periodicky zjišťovat, že se na vstupu něco změnilo. To se dělá jednoduše takto:

Když se něco změní, funkce jednorázově vrátí pomocí getinputevent() seznam vstupů, kde se změna stala. Když se pak zavolá tato funkce znova, vrátí zase 0 do té doby, než se změní něco dalšího.

A tady je zakopaný pes. Teda, v případě Loxone asi spíš stádo bernardýnů.

Loxone je totiž už tak pomalý, že nezvládá v reálném čase nastavit stavy z tlačítka na všechny vstupy programu. To vede k situacím, kdy celá vnitřní logika Loxone je v naprosto nesynchronních a náhodných stavech, když část vstupů je již nastavena při stisku na 1, zatímco jiná část na 0.

A v okamžiku, kdy se program zeptá, co se na vstupech změnilo, Loxone vrátí jen tu část, která již nastavena je. Ačkoli je tedy všude nastavená binární 1, Loxone vrátí náhodně 0101101001… A co je horší, když už Loxone konečně milostivě donastaví i zbylé stavy, funkce getinputevent() již tyto změny nedetekuje. Tváří se, že už žádná další změna nenastala.

Pokud by někdo z Vás začal tento problém mít, je v můstku fix. Oprava spočívá v tom, že v případě, že Loxone detekuje změnu, tak se při dalším cyklu (po 100ms) natvrdo načtou znovu všechny vstupy (i když Loxone tvrdí, že k žádné změně nedošlo) a stav všech výstupů se znovu pošle do Quida. Díky tomu se nejpozději do 100ms opraví stav všech relátek. Bohužel, oprava může způsobit delší prodlevu při rychlém zapínání a vypínání relé. Takže nastavení c_resend_all_outputs používat až jako poslední možnost.

Jak jsem ale psal, nejde jen o můstek. Toto celé totiž znamená, že pokud máte složitější Loxconfig, může se dost dobře stát, že se Vám vše začne chovat úplně náhodně. Protože namísto toho, aby hodnoty na jednotlivých blocích byly v konzistentním stavu, může se stát, že část vstupů je již aktualizována a část ne.

Výstup na AND prvku vpravo může mít hodnotu FALSE i v případě, že je tlačítko zapnuto.

V extrému si to představte třeba tak, že přenos mezi bloky nahoře (každý čára) trvá 1 sekundu. Pokud na dané cestě bude více prvků, do cílové čáry (v tomto případě AND prvek) se spodní signál dostane o 2s dřív než signál na horní cestě, který jde přes dva NOT prvky.

Jenže díky tomu, jak je už stav pomalý, Loxone vyhodnotí AND nejprve tak, že I1=false a I2=true a za další 2sekundy pak I1=true, ale I2=false (protože tlačítko není stisknuto celé 2s, ale třeba méně). Tím pádem se může stát, že v logice budete vyhodnocovat nekompletní stavy, které Vám způsobí třeba chybné topení, vypnutí kritických relátek a kdovíco ještě.

Jak jsem psal, není to problém konkrétní verze Loxconfigu. Je to problém všech nových verzí Loxconfigu. Každá verze více a více zpomaluje Váš miniserver. Pro srovnání. Verze 8.1.11.11 zvládne v PicoC odbavit stovky událostí za sekundu. Ten stejný program nasazený na poslední verzi Loxconfigu (aktuálně 10.3.11.27) jich zvládne 1.5/sekundu.  Ano, jeden a půl!.

Bohužel, na toto nemáte téměř šanci přijít. Když se Vám začnou věci chovat divně, těžko budete předpokládat, že je to způsobeno tím, že už je Loxone tak pomalý, že nezvládá ani elementární věci, jako je nastavování stavů prvků.

Dobře si proto rozmyslete, jestli opravdu potřebujete každou další zpackanou verzi, kterou Loxone vydá. Každá další verze totiž znamená, že se Vám celý Váš dům více a více zpomaluje. A nejde jen o to, jestli používáte můj můstek mezi Loxone a Quidem. To stejné se týká Vás, kdo používáte třeba dvouklik tlačítka na originálních Loxone komponentách (což je vcelku elementární věc), nebo třeba těch z Vás, kdo máte složitější Loxplany.

PS: Všechny výše uvedené změny jsou již dostupné v nové verzi můstku (verze v17). Verze je jako vždy ke stažení v Dropboxu.

 

Netio – chytré zásuvky

Netio – chytré zásuvky

V dnešním článku se chci podívat na první ze tří krabiček, které jsem dostal od firmy Netio k ostestování. Jsou to tři chytré zásuvky PowerCable REST, MQTT a Modbus. Jak názvy napovídají, první se ovládá pomocí REST protokolu (tzn http/https požadavky), druhá pomocí MQTT a třetí pomocí Modbus (Modbus over ethernet).

Zásuvky krom vzdáleného zapnutí/vypnutí umí měřit i aktuální zátěž, spotřebu, frekvenci a pár dalších veličin (přehled všech veličin zde).

Čeho si všimnete ihned po rozbalení je mohutnost celého provedení. Kabel má v průměru 8.5mm a je z opravdu pevého materiálu. Stejně tak obě koncovky jsou z pevného trvdého plastu a samotné pouzdro na relátka a elektroniku působí rovněž velmi bytelně.

Díky této robustnosti slibuje zařízení maximální spínaný proud 16A, tzn 3600W (celá specifikace dole na stránce zde). Už i z těchto hodnot jde vidět, že zařízení nekonkuruje levným dálkovým relé na spínání lampiček, ale cílí na spínání vysokoodběrových zařízení, jako jsou například těžební rigy, servery, elektro patrony či jiné vysokoodběrové zařízení.

Zprovoznění samotného zařízení je vcelku snadné. Při prvním zapnutí do sítě stisknete drobné malé tlačítko na krabičce (ideálně kancelářskou sponkou), čím zařízení přepnete do Wifi AP (Access point) režimu. To znamená, že zařízení začne na chvíli dělat wifi síť, na kterou se můžete připojit například pomocí mobilu a pomocí webového formuláře v něm nastvíte připojovací údaje do Vaší domácí wifi.

 

Po nakonfigurování a ověření funkčnosti wifi se pak zásuvka přepne z AP režimu zpět do jejího provozního režimu a provede připojení k Vaši síti. Od této chvíle je pak dostupná pod svou IP adresou stejně jako jakékoli jiné zařízení, co doma máte.

Po prvním připojení k zařízení doporučuji změnit heslo. Zařízení má tovární nastavení admin:admin, což nepovažuju úplně za šťastné. Vzhledem k tomu, že zařízení zná své vlastní sériové číslo (používá ho jako identifikaci AP sítě), tak by mohlo být výchozí heslo například toto sériové číslo. Tím by se alespoň částečně zamezilo případnému průniku do zařízení.

Krom změny hesla či přidání dalších uživatelů se v rozhraní nachází záložky pro nastavení aktuálního data a času, změnu wifi sítě, update firmware, různá nastavní zařízení.

Poslední záložka je pak log akcí, které zařízení provedlo. To mi přijde jako hodně dobrý nápad. Umožní to lepší hledání problému v případě, kdy se spínání nebude chovat dle očekávání.

Až po tuto část článku je vše stejné u všech tří zařízení. Všechny tři mají stejné webové rozhraní i konfiguraci a rozdíl je jen v záložce “M2M API Protocols”. Zde pak probíhá konfigurace jednotlivých protokolů.

V případě REST verze zásuvky si lze vybrat mezi XML API, JSON API a URL API. Zatímco první dvě zmíněné vyžadují sestavení ovládacího příkazu ve formě XML či JSON, třetí umožňuje ovládat zásuvku jen na základě URL adresy. Trochu nevýhoda je, že URL režim nenabízí možnost čtení stavových hodnot. V případě, kdy chce člověk číst stavy, je potřeba využít XML nebo JSON.

Druhá zásuvka ve verzi Modbus pak nabízí ovládání skrz Telnet či skrz Modbus over Ethernet.

Třetí zásuvke ve verzi MQTT pak nabízí přípojení přes MQTT-Flex nebo Netio Push. Z toho, co jsem pochopil dle dokumentace, tak MQTT-Flex je konfigurační nástavba nad MQTT, která umožní snažší nastavení ve formátu JSON, zatímco Netio-Push umožnuje periodické zasílání stavu zásuvky na uvedenou URL adresu.

Další věc, kterou musím pochválit, je dokumentace k zařízení i jednotlivým formátům. Málokdy se vidí, aby měly zařízení takto detailní a přehlednou dokumetnaci ke všemu, co zásuvky nabízí. V dokumentaci a stejně tak i ve webovém rozhraní jsou ke všem formátům i různé ukázky, jak zařízení ovládat, jak provést zapnutí, ukázka výstupního formátu, atd.

Jediné, co mi ohledně těchto tří zásuvek vrtá hlavou, je, proč jsou to vlastně tři typy, a ne jen jeden.

Ze SW pohledu si myslím, že by bylo možné nacpat všechny formáty dohromady a nechat tak uživatele, ať si formát zvolí a případně i v průběhu času změní dle potřeby. Krom tří hlavních formátů je to pak ale ještě jedna věc. Například MQTT verze umožňuje Netio-Push notifikace, což znamená periodické zasílání stavu zásuvek ve formátu Json nebo Xml.

Jenže toto umožňuje jen MQTT verze. Proč to neumožnuje i REST verze, kde v případě URL adresy by to naprosto elegantně vyřešilo chybějící možnost dotazování se na stav? Stejně tak si dovedu představit, že člověk začne na REST protokolu a později by chtěl přejít například na Modbus, což bohužel takto není možné. Pokusím se zjistit více přímo od firmy Netio.

A tím bych pro dnešek skončil. V příštím článku ukážu propojení všech tří zásuvek s Loxone. Ať už napřímo, nebo v případě JSON api či MQTT prostřednictvím NodeRED.

 


Edit:

Od firmy Netio jsem dostal možnost nabídnout slevu na případný nákup jejich zařízení. Pokud byste chtěli, zadejte kód “20procent” do nákupního formuláře k získání slevy 20% ;-).

Link na eshop https://shop.netio.eu/, sleva platí do konce ledna 2020.

Loxone virtuální výstupy a jejich debugging

Loxone virtuální výstupy a jejich debugging

Původně měl být dnešní článek o integraci služby Pushover s Loxone. Služba pushover umožnuje zasílat notifikace na libovolné zařízení (mobil/desktop) z libovolných služeb a aplikací. Jenže, jak už je u Loxone zvykem, ani toto se neobešlo bez několika hodin testování a ladění. Takže to bude zase jeden z dalších “Miluji Loxone – nesnáším Loxone” článků.

Článek totiž bude o celé té několikahodinové cestě, kdy jsem hledal, proč zas Loxone nefunguje tak, jak by člověk očekával. A když už sem s tím bojoval, přišlo mi to zajímavé na sepsání i pro ostatní. A tak tento článek bude nejen o tom, jak je s Loxone občas složité pořízení, ale hlavně o tom, jaké nástroje a programy použít, abyste tyto problémy dokázali vyřešit.

Ukážu, jak ladit virtuální http výstupy, na co si dát při jejich použití pozor a jak otestovat, jestli je chyba u Vás nebo v Loxone. A o Pushover notifikacích bude až další článek.

Co byste měli jako první při vytváření HTTP virtuálního výstupu otestovat je, zda máte vlastně správně cílovou URL a parametry. Úplně nejjednodušší je vyzkoušet to přes command-line příkaz curl


curl http://api.pushover.net/1/messages.json -d "token=xxxxx&message=helloworld&user=xxxxx"

{"status":1,"request":"719ea7ef-f62d-456e-bb09-0708f24605b7"}

S curl je to sice rychlé, ale občas může být příprava takového příkazu trochu složitější. A tak je lepší použít něco sofistikovanějšího, jako například Postman (aplikace je zdarma).

V Postmanu si můžete snadno připravit celý cílový request, spustit ho a vidět i pěkně naformátovanou odezvu na takový požadavek. Na obrázku nahoře jde vidět request do Pushoveru.

Postman toho umí mnohem víc než jen odesílat požadavky. Můžete si takové požadavky ukládat a zpětně se k nim vracet, dělat si kolekce příkazů, umožňuje dokonce automatické testovaní nad takovými požadavaky, atd. Já sám tam mám takto uložené všechny možné API requesty, takže když se po čase potřebuji k něčemu vrátit, hned vidím, jak mají požadavky vypadat.

Toto je špatně, v adrese nesmí být celá URL adresa, ale jen protokol + adresa serveru.

V okamžiku, kdy máte dotaz otestovaný přes Postmana, přichází ta pekelná část. Rozchodit to v Loxone. A tak vytvoříte virtuální výstup a začnete zadávat. První pokus, do kolonky pojmenované “adresa” zadáte url adresu a ono se nic neděje. Loxone žádnou chybu neukáže, ale ani se nic nestane. Co teď? (konkrétní důvod této chyby je, že v kolonce adresa nesmí být adresa. Logické ne? Musí tam být jen protokol + server, tzn správně je https://api.pushover.net).

 

Toto je ukázka, jak ne. V adrese nesmí být koncové lomítko!

Předtím, než ukážu, jak přesně takovéhle chyby ladit, ukážu ještě jednu chybu, se kterou Vás Loxone obšťastní. Pokud totiž zadáte adresu serveru zakončenou lomítkem, můžete se jít také zahrabat. Opět se nic nestane, nebude nic fungovat, ale žádnou chybu Vám Loxone neukáže. Jediná správná varianta je správně je https://api.pushover.net

 

Tak, ale teď už k samotnému lazení. Snažíte se volat službu, u které nevíte, jestli jede správně, a snažíte se to volat z Loxone, kde víte, že bude určitě nějaký zádrhel. Řešením je použít službu, která Vám přesně ukáže, co (a jestli vůbec) z Loxone něco odchází. Tou službou je například https://requestbin.com/.

Na hlavní stránce si založte “Request bin”, pro který dostanete unikatání URL adresu, například https://enn9obu94ky0s.x.pipedream.net. Na tuto adresu nyní můžete nasměrovat výstup z Loxone a kdykoli něco Loxone odešle, vy uvidíte přesný tvar toho, co z něj vylezlo 🙂

Tím si jednak otestujete, že vlastně vůbec něco leze (což v případě prvních dvou ukázek špatně zadané url se vůbec neděje) a dále si ověříte, zda posílá data tak, jak jste si mysleli (což se také dost často neděje). Ukažme si to na příkladu.

Zajímalo Vás například někdy, co znamená “HTTP rozšíření při zapnutí” ? Nebo si nejste jisti tím, co znamená “Instrukce při zapnutí”? Nebo jak se odešle “Post příkaz při zapnutí”? Tak přesně k tomu je dobrý RequestBin (protože od specialistů z Loxone se v aplikaci ani dokumentaci nic kloudného nedozvíte).

Zde pak vidíte, co vlastně takto nakonfigurovaný výstup odešle. Najednou je jasné, že “HTTP rozšíření” jsou vlastně HTTP hlavičky (by je asi zabilo, kdyby to tam napsali), že POST příkaz se odešle jako POST s “náhodným” Content-type text/xml a že instrukce je URI adresa připojená za protokol+server zadaný u virtuálního výstupu. Zde máte zároveň také možnost zjistit, že například instrukce pro zapnutí MUSÍ začínat lomítkem, jinak se opět nic neodešle (protože pro Loxone je problém toto lomítko v případe absence doplnit).

Bohužel, v této ukázce pak vězí ještě jeden zakopaný pes. A tím je právě Content-Type. Ačkoli Vám Loxone umožní zadávat hlavičky, pokud zadáte Content-Type:application/json, tak ho Loxone vesele ignoruje. To Vás ale bohužel přivádí do míst, kam ani slunce nesvítí.

Ačkoli je do “HTTP rozšíření při zapnutí” aka HTTP hlaviček zadán “Content-type:application/json” a ačkoli je v POST příkazu zadán validní JSON příkaz, ta zelená věc zvaná Miniserver to odešle jako text/xml. No není to roztomilé? Je to roztomilé. A díky tomu Vám Pushover prostě fungovat nebude. A dost se divím, že člověk ještě nedostane od Pushoveru BAN za to, že je idiot :).

Ale tím stále nekončíme. Po hodině googlování a testování jsem najednou zjistil, že jsem schopný z Loxone odeslat příkaz v požadovaném content-type. Ptáte se jak? Nejprve se vrátím k curl. Jak vidíte, toto je odeslání stejného požadavku, o které se také snažím z Loxone. A jak vidíte, Content-type je zadán přesně tak, jako v Loxone. A jak můžete vidět na dalším obrázku, pokud to odešlu z curl, do RequestBINu to přijde v pořádku.

A nyní, screenshot z Loxone, kde už najednou příkaz zázračně funguje:

Vidíte ten markantní rozdíl? Vidíte, proč to najednou funguje? Že ne? Nedivím se Vám :). Důvodem je MEZERA za dvoujtečkou u content-type. Ačkoli nic takového dle standardu není potřeba a ačkoli to ani curl, ani postman nevyžaduje, u Loxonu to potřeba je. Pokud uděláte za dvoutečku mezeru, najednou Vám do RequestBinu začne chodit toto:

To je pecka, co? Přišel jsem na to jen díky uplné náhodě, že jsem testoval jiný problém, a tím je poslání více hlaviček. Narazil jsem na loxforu na tuto ukázku,

HTTP extensions for ON : host: 192.168.0.226\r\nContent-Type: application/json
HTTP POST command for ON : {“on”: true}
HTTP method for ON : PUT
same for OFF…

kde psali, že jim to jede a tak jsem začal zjišťovat, kde je zakopán pes. A to mě přivedlo k té mezeře. Takže, content type se odesílá, data se odesílají, jenže Pushover stále nejede.

Všechno už sedí 1:1 mezi Loxone i Postmanem a Loxone stále neodesílá. Je teda čas na hardcore-debugging. Přesunuju se i s notebookem do technické a připojuju se do fyzicky izolované sítě s Loxone (a Quidem). Pomoci Loxconfigu -> Diagnostika -> Debug-Info -> Síť – začínám odchytávat síťové pakety.

Výsledek na sebe nenechá dlouho čekat. Po odeslání požadavku na https://api.pushover.net z nějakého záhadného důvodu nefunguje SSL. A ačkoli na RequestBinu je rovněž https a tam to jede, takže asi zase nějaká specialita Loxonu. Naštěstí má pushover i http verzi, která sice není extra bezpečná (protože lze odchytit co za zprávy na ni budu posílat), ale na obecné notifikace typu “dveře otevřeny” mi to nevadí. Pokud by to byl problém, řešením by bylo přeposílat to přes NodeRED, který by přijal text a udělal z něj https Pushover notifikaci. Uvidíme, možná v příštím článku ukážu oba postupy.

A to je pro dnešek vše. Krásné čtyři hodiny strávené s Loxone jen proto, že nemají pořádné logy, neumějí pořádně notifikovat chyby a neumí si poradit ani se základní validací parametrů v Loxconfigu. Bomba.