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.

Pomohl Vám náš blog? Chcete nás podpořit? I málo udělá radost 😉
0 0 vote
Hodnocení články
Subscribe
Notify of
guest
36 Komentáře
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
Keany
Keany
1 year ago

Zdravím,

marně hledám, ale nevidím proč nevyužít standartní push notifikace od loxonu?

msk
msk
1 year ago

Klasika, zelena mrdka. A dik za tip na pushover.

msk
msk
Reply to  L
1 year ago

Good tesim sa (a potom si naimplementujem nieco vlastne nad dockerom tak ako mam zigbee, nech nemusim riesit nodepicored).

Jarda
Jarda
1 year ago

Bojuji ted taky s vyrtualnim vystupem.

Da se nejakym zpusobem predat textova hodnota jako parametr pro volani instrukci po zapnuti?

Priklad pouziti: Budicek Sonos

Mam pripraveny v Loxone string: Aktualni den, predpoved pocasi + uvitani.

Pomoci Sonos Api je mozne volat Text to Spech:

Zprava po spusteni:
Mistnost/say//cs/70

Hodnotu “” potrebuji nahradit prave vystupem ze statusu. (trigger pro vyrtualni vystup)

me2d09
Reply to  L
10 months ago

Já mám když odcházím z domu POST command:
“Home was armed. Enjoy your trip, temperature outside is degrees.”
Což funguje krásně – ale nejde tam vložit string, jde jen číselná hodnota. Posílám to teda na openhab REST api, který to láduje do Echo repráčku, ale to bude pro SONOS stejné. Složitější věci řeším přes vlastní Alexa skill nebou routine.

me2d09
Reply to  me2d09
10 months ago

Koukám, že to tu nebere ostré html závorky. POST COMMAND má být:
“Home was armed. Enjoy your trip, temperature outside is (v.1) degrees.”, kde nahradíte kulaté za ostré závorky. Virtuální výstup se pak netrigruje logickou jedničkou, ale analogovou hodnotou. Posílám jí tam přes Analogue memory block a ten trigruju tlačítkem (takže by to nefungovalo, kdyby předchozí teplota byla stejná jako ta aktuální, ale to mě netrápí).

Petr
Petr
11 months ago

Dneska taky řeším http výstup. Mám tam modul pro osvětlení, kde nastavím okruh na RGB a jako výstup chci použít virtual output. Problém je v tom, že jsem nenašel jako použít hodnoty co jdou do toho http request.

Mám rest servisu kam bych chtel poslat něco jako http://server/api/led1/{red}/{green}/{blue} a aby si to vzalo hodnotu co jde z toho bloku osvětlení.

Petr
Petr
Reply to  L
11 months ago

Cílové zařízení je moje api a to si upravím jak bude potřeba. Problém je jen, že nevím jak předat hodnoty.

https://www.screencast.com/t/dzQasTnSX1p

koldavideo
11 months ago

Nevím jak to přesně vypadá ale na RGB výstupu bloku osvětlení je celé číslo, které se přepočítává následovně:
%-hodnota červené + %-hodnota zelené*1000 + %-hodnota modré *1000000

Dusan
Dusan
Reply to  koldavideo
11 months ago

Je to %, alebo 0-255? Je to davno co som to skumal a nepamatam si to, mozno sa mi to pletie so zigbee.

Inak to cislo nemusis ani riesit matematicky, rozdelis to po 3 znaky a mas hotovo :D.

koldavideo
11 months ago

je to v procentech

Dusan
Dusan
Reply to  koldavideo
11 months ago

Mas pravdu. 0-255 bolo u ikea zigbee ledky. Nejaku dobu som bol nasrany ze svieti nejak slabo na deklarovanu wataz, nez som si neuvedomil, ze tam posielam 100 a nie 255 :D.

Petr Stepka
Petr Stepka
11 months ago

Ahoj,

díky všem za připomínky, už jsem to rozchodil.

do url jsem musel dát /api/led/rgb/ aby se posílala hodnota v URL, vypnout volbu použít jako digitální výstup.

potom už stačilo jen doplnit API a jede to !

https://www.screencast.com/t/5hJssWgsiXa
https://www.screencast.com/t/L2ymukKr

koubek
11 months ago

Chtěl bych ovládat přes Loxone presety kamery Hikvision. Z příkazového řádku to funguje bezvadně na Linuxu i na Win.
Ať dělám, co dělám, virtuální výstup se mi nedaří zprovoznit. Neví někdo, jak na to?
Takhle měním presety:
curl -X PUT –digest http://login:[email protected]/ISAPI/PTZCtrl/channels/1/presets/1/goto /ISAPI/PTZCtrl/channels/1/presets/1/goto 1 OK ok

koubek
Reply to  L
11 months ago

Jak se vkládají fotky ? Děkuji.

Petr Koubek
Petr Koubek
11 months ago

Postman jsem ještě nějak nepochopil, v Loxone nevím, kam dát autorizaci “digest”, jinak zde:
https://drive.google.com/file/d/1DJ-eRx7YYg0XOdwAf5fppuRsA8ac0JPQ/view?usp=sharing

Petr Koubek
Petr Koubek
Reply to  L
10 months ago

Děkuji, bohužel nevím kde vzít simulátor. Můžete mi poradit ? Přikládám obrázek Loxone monitoru.

https://drive.google.com/file/d/1w-oTeVXYH9BnT3sg4Sf3fMCJ-HCVrNUX/view?usp=sharing

Petr Koubek
Petr Koubek
Reply to  L
10 months ago

Děkuji, polepším se a potom dám vědět.

Petr Koubek
Petr Koubek
Reply to  Petr Koubek
10 months ago

Službu jsem použil, vypadá to, že Loxone odesílá co Hikvision chce, problém bude asi s tou autorizací digest.
zde je výpis:
https://drive.google.com/file/d/1xaWIFsWE8hDNkZWTj2qu-Sv57nZKO8RM/view?usp=sharing

Petr Koubek
Petr Koubek
10 months ago

Tak už se podařilo, kamera se točí na presety. Na podpoře Loxone mi napsali, že miniservery neumí autorizaci Digest, jenom Basic. Podrobnosti zde v linku:
https://drive.google.com/file/d/1xwhJQAixPtoeUj9xUBPQuqIRPghUuT7u/view?usp=sharing

me2d09
10 months ago

Já tohle řešil před půl rokem (dost podobně – api vyžadovalo json content type) ale na ten trik s mezerou jsem teda nepřišel. Díky!!

Sedtronic
8 months ago

Dobrej článek … ještě bych doplnil o další “tweak”, kdy je nutné např. jednotlivé hlavičky oddělovat pomocí Carriage return a Line Feed, tedy \r\n (např.\r\nContent-Type: application/json), pokud vkládám do příkazu proměnnou hlavičku.

Toto jsem řešil nedávno při nastavování ovládání robot. sekačky Bosch..

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