Loxone – tipy&triky – jak získat UUID kteréhokoli prvku
Dneska (vlastně před chvilkou, a rovnou to píšu, protože jsem z toho fakt nadšen) se mi povedlu vskutku parádní kousek…. (a jestli mi někdo řekne, že jste to znali, nebo že to je někde popsáno, tak budu fakt naštvanej 😉 ).
Řešil jsem, jak propojit dohromady Roombu, MQTT, NodeRed, mé vlastní RoombaWalls a do toho Loxone. Cílem je, aby si Roomba uměla sama rozsvítit v dané místnosti a uměla si i sama zapnout virtuální zdi v okamžiku, kdy jsou potřeba.
Na rozsvěcení jsem se stále snažil zprovoznit Websockets (marně), Node-lox-mqtt-gateway (marně), případně pak nějak jednoduše přes virtuální HTTP vstupy/výstupy (lze, ale dost opruzoidně).
Až jsem se rozhodl trochu “blíž” podívat na Loxone webovou aplikaci, abych se podíval, jak vlastně oni komunikují s Loxonem. A tady jsem oběvil (alespoň pro mne) zlatý grál ;-).
Ačkoli v dokumentaci píší, že musíte definovat virtuální vstupy/výstupy pro komunikaci s venkem, není tomu tak úplně pravda. Stejně tak není pravda, že přes HTTP požadavek nelze zapnout napřímo dané světlo, aniž by člověk simuloval HW vstup Loxonu.
Je to totiž o tom, že každý prvek v LoxConfigu má vlastní Uuid. Tenhle Uuid zřejmě nejde zjistit v Loxone configu, teoreticky by asi šlo najít ho v Loxone programu v XML souboru, ale mnohem snáž to jde právě přes jejich web aplikaci.
Stačí otevřít aplikaci v Chrome, přes developer tools (F12) se podívat do záložky “Console” a zmáčknout tlačítko dle potřeby (nebo třeba kliknout na žaluzie, nebo cokoli jiného. A hle. Máte kompletní URL adresu s požadavkem, UUIDem tak, abyste daný příkaz mohli vykonat i odkudkoli jinde.
Tohle jsou třeba žaluzie. A není potřeba žádný debilní virtuální vstup navíc, není potřeba nic donastavovat v LoxConfigu a není potřeba se ani prosit na naprosto nekompetentní Loxone podpoře, kde jen tak mimochodem o adrese /jdev/sps/io nemají ani tušení, jelikož znají jen /dev/sps/io, pomocí které šahají jen na fyzické vstupy/výstupy HW, což je ale k programování dost nešikovné.
A takhle vypadá primitivní NodeRED program na rozsvícení světla. To šedé vlevo je prvek “Inject”, který generuje msg se zprávou “status”:”on”
A takhle pak vypadá HTTP request, pomocí kterého se posílá zpráva on/off do loxonu
A to je vše. A takto tím pádem jde ovládat cokoli uvnitř Loxone, aniž by se museloy na vše dělat virtuální vstupy tak, jak to doporučují EXPERTI z Loxone podpory.
PS: Jen tak mimochodem, NodeRED je masakr. Pokud by v Loxonu vytáhli hlavy ze svých pr*** a nabídli by NodeRED nativně jako nadstavbu, neměli by jejich systém naprosto konkurenci.
Díky kombinaci UUID bloků v LoxoneConfigu a programovacím možnostem NodeRED jdou efektivně naprogramovat věci, které by byly jinak nemožné (viz rozsvěcení místností dle průjezdy Roomby, ovládání virtuální zdí roomby jen když roomba jede,….)
Výborně Luďku, sice sám vůbec nerozumím tomu, co si tvořil a programoval (tedy obsahu, ne myšlence 🙂 ), ale mám obrovskou radost i za Tebe. Je vidět, že systém má obrovský potenciál a jen díky schopným lidem, myšleno TEBE, nikoli podporu, se my, budoucí stavebníci, nemáme bát vůbec o Loxonu do domu uvažovat. Těším se, až nastane doba fyzické instalace do našeho budoucího domova, a s články od Tebe čím dál tím víc. 😀
Loxone asi neunesl prozrazení svého know-how a raději vypnul web 😀 Od 19h se mi nedá zobrazit.
Mne uz to jede. Asi se z toho dostali 😉
A na tuto dokumentaci jste narazil?
Tam neco o jdev pisou, ale zatim jsem to nejak vic nestudoval
https://www.loxone.com/cscz/wp-content/uploads/sites/7/2016/09/loxone-api-communicating-with-the-miniserver.pdf?x47893
jojo, s tou jsem dneska tkay bojhoval. Tam je to psany zase pro websockets, ale uz nezminuji, ze to jde i pres http. Navic tam resi nejakou autentizaci pomoci vygenerovaneho klice, coz by uz byla komplikace navic. Toto jsem puvodne chtel pouzit s tim zminovanym nodejs lox-gateway, jenze tam jim zase zlobi pripojeni na mqtt ;-(
A jeste jedna zajimava vec je, ze se tam zminuji o UUIDech, ale uz nerikaji, jak by je clovek mel zjistit.
Takze klasika, clovek at si to dal zjisti sam. 🙂
Ale jinak, dobra prace, zas je to posun dal. 😉
Prijde mi to tak. Bohuzel sem ted zjistil, ze funguje jen nastavovani, ale vycitani mi pres to nejede, ackoli do prohlizece se to spravne promita. Takze zjistuju proc to ;-(
A na tento navod uz jste narazil?
Tam se neco o jdev pise, ale zatim jsem to nejak vic nestudoval.
https://www.loxone.com/cscz/wp-content/uploads/sites/7/2016/09/loxone-api-communicating-with-the-miniserver.pdf?x47893
Jj, už to jede.
To je teda objev jako sviňa 🙂
Už to čtu podruhé a chápu to dobře, že fakt stačí znát UUID a cokoliv co mám v aplikaci dokážu zapnout/vypnout “prach-obyčejným HTTP” požadavkem?
Presne tak. Nejen zapnout/vypnout, ale cokoli co jde delat pres webovou aplikaci. Takze pridat osvetleni, vytahnout zaluzie, shade-zaluzie,….
Proste cokoli jde naklikat, jde i volat pres http. Bohuzel mi ale zatim nejede nacitani stavu. Ackoli to vraci nejake hodnoty, tak treba u svetla to vraci furt “1”, at je zaple nebo vyple
chova se to zvlastne, protoze treba
jdev/sps/io/0e6f3276-00d7-0359-ffff01c79402a3b1/AI1 vrati 1
ale
jdev/sps/io/0e6f3276-00d7-0359-ffff01c79402a3b1 vrati 0
a pritom je to stejne ovladani osvetleni
A kdyz se za to uuid da /state
Dela to neco?
Ja ted nejsem u PC, tak to nemuzu otestovat.
vraci to stejnou hodnotu porad.
Napriklad kdyz mam svetlo a zavolam http://loxone.dum/jdev/sps/io/0e6f3276-00d7-0359-ffff01c79402a3b1/AI1/on
tak se rozsviti a vrati
{“LL”: { “control”: “dev/sps/io/0e6f3276-00d7-0359-ffff01c79402a3b1/AI1/on”, “value”: “1”, “Code”: “200”}}
kdyz dam ale http://loxone.dum/jdev/sps/io/0e6f3276-00d7-0359-ffff01c79402a3b1/AI1 (bez/on), tak se svetlo zhasne 😉 a vrati
{“LL”: { “control”: “dev/sps/io/0e6f3276-00d7-0359-ffff01c79402a3b1/AI1”, “value”: “1”, “Code”: “200”}}
a kdyz zvolam http://loxone.dum/jdev/sps/io/0e6f3276-00d7-0359-ffff01c79402a3b1 (bez/AI1/on), tak vraci
{“LL”: { “control”: “dev/sps/io/0e6f3276-00d7-0359-ffff01c79402a3b1”, “value”: “0.000”, “Code”: “200”}}
ale to vraci i kdyz je zaple.
zaroven zapnout jde pomoci
http://loxone.dum/dev/sps/io/0e6f3276-00d7-0359-ffff01c79402a3b1/AI1/on
ale take
http://loxone.dum/dev/sps/io/0e6f3276-00d7-0359-ffff01c79402a3b1/on
Zajimave, jak budu moct, tak si to taky vyzkousim a treba na neco prijdu 🙂
Aspon dle toho navodu jsem vycetl, jaky je rozdil mezi jdev a dev.
jj, to uz jsem taky nasel. spravne by /dev/ uz nemelo byt pouzivano a vraci XML format, zatimco jdev json a je to doporuceny zpusob
A to UUID odpovidalo cemu? Primo vystupu, vstupu nebo bloku tlacitka, ovladani osvetleni?
Podle toho co sem koukal do LoxConfigu (primo do toho XML), tak je to uuid toho bloku Ovladani osvetleni. Zkousel jsem to i na klasickem tlacitku, ale i to se chova uplne stejne.
Ok, tak jak se k tom dostanu, tak to vyzkousim taky na tom bloku. A uvidim 😉
Tak jsem si s tím teďka chvílí hrál a zkoušel jsem jak blok tlačítko, blok ovládání osvětlení, tak odkazovat se přímo na výstup.
tak u tlačítka vyčítání stavu funguje, když se pošle příkaz
/jdev/sps/io/uuid_bloku_tlačítka/all
jinak jak měli psané na netu, tak /state ani /astate vůbec nefungoval
Ale když jsem to stejné chtěl vyzkoušet u bloku ovládání osvětlení, tak tam mi nefungovalo vůbec nic.
Jenom příkazy
/on / off /AI1/on AI2/off
nebo
/1-8 pro konkrétní scénu
Tak jsem to začal zkoušet vyčítání stavů přímo z výstupu (připojeného na výstup AQ1-AQ12 bloku ovládání osvětlení)
A abych zjistil UUID toho HW výstupu nebo např. značky, tak jsem to musel použít do vizualizace
a pak teprv přes /data/loxAPP3.json se to UUID dalo najít.
A potom přes /jdev/sps/io/uuid_výstupu
už se hodnovy “value” ukazují správně.
Ale zas se mi nelíbilo, že pak takto všechny výstupy co chci vyčítat, tak je musím použít do vizualiace.
Ale místo UUID jde i použít jen název výstupu v Loxone configu a funguje to stejně. 😉
A ten UUID, kdyz se zjisti pres vizualizaci a pak ze z vizualizace schova, tak nefunguje? Podle me jsou ty uuidy vygenerovane v dobe pridani prvku do LoxConfigu a pak uz se nemeni ne?
Zkusim pak vecer jeste to tlacitko pres to /all, to jsem nezkousel. A mrknu i na ty uuidy, imho by mely drzet i po schovani
Tak to už jsem nezkoušel, ale mělo by to tak být, dokud se to nevymaže z programu, tak by to UUID mělo zůstat stejné.
Taky to můžu otestovat až večer, teď už se k tomu nedostanu.
Takže to funguje 😉
použil jsem UUID výstupu, který jsem nedal použít do vizualizace a hodnoty to vyčítá.
Ktery presne uuid berete pro ten vystup? Z tlacitka se mi to povedlo vycist pres http://loxone.dum/jdev/sps/io/0eec80eb-007d-f7db-ffff10b04d6bdd13/all
ale u toho ovladani osvetleni to z nej ne a ne vydolovat. Vzal jsem uuid osvetleni (pripadne nazev, ten funguje), a z nej /all sice vrati slozitejsi json, ale hodnoty nejsou ok.
Takze pres LoxonXml sem vzal ten xml element:
Type=”LightController” V=”112″ U=”0f17de6e-0287-7b40-ffff01c79402a3b1″ Title=”lighting_test” ….
z nej vystup AQ1 – Co K=”AQ1″ U=”0f17de6e-0287-7b31-ffff3b3f555d5864″
a z nej ten uuid. Takze volani http://loxone.dum/jdev/sps/io/0f17de6e-0287-7b31-ffff3b3f555d5864, ale to mi vraci {“LL”: { “control”: “dev/sps/io/0f17de6e-0287-7b31-ffff3b3f555d5864”, “value”: “”, “Code”: “404”}}
Dal jsem pak jeste nepochopil jak jste psal, ze jste zapl vystupy do vizualizace. Tam se da zapnout do vizualizace jen ten cely modul OvladaniOsvetleni ne?
A pak jen zajimavost, to co pouziva Loxone nejsou Uuidy, ackoli tomu tak rikaji. Kdyz se mrknete, tak treba pro vystupy AQ1-AQ13 jsou ty uuidy za sebou a lisi se jen v jednom cisle v prostrednim bloku. To by u spravneho Uuidu nikdy nemelo nastat.
Tak jedine co mne napada, co jste tim mozna myslel je, ze vycitate stavy te znacky, ale ne toho ovladace osvetleni. Protoze z nej to vydolovat proste nejde, ten tvrdi bud code 404,tzn nenalezeno, nebo vraci naprosty nesmysly
Je to tak ja vycital az HW vystup nebo znacku, kterou jsem pripojil na ty vystupy bloku ovladani osvetleni.
Na tom bloku se mi vubec nic nedarilo i pri /all to pri zapnuti ruznych svetel(vystupu AQ) tak hodnota byla “otaznik”
Jo, tak to jsme dosli ke stejnemu. Ja pak jeste zkousel vycitat pres uuidy primo tech AQ1-n, ale ty vraci 404 ze neexistuji. Pak by se dalo teoreticky jeste vycitat konkretni scena, ale to je zase k prdu, kdyz to nejde jako celek.
Moc nechapu, proc kdyz to maji docela dobre pripravene, proc pulka funguje a pulka ne. Pritom pres websockets by to vycitat melo jit vsechno, tak to uz by nemel byt problem dotahnout i to http. Nevim no.
Je to zajimave, ja zitra rano na to budu mit chvili cas, tak se jeste na to podivam, ale uz me moc nenapad ceho bych se mel jeste chytit, aby to fungovalo 🙂
Ja ted zkusil vsechny Uuidy z toho prvku, prokombinoval to s /state, /all, i /. ale nic. Prijde mi, jako by to proste meli blbe.
Dokonce jsem zkusil projit i vsechny aktualizacni soubory loxone, jeslti v nich nenajdu nejakej naznak adres, ze by treba krom /jdev/sps/io bylo jeste neco jinyho. Ale na nic jsem nenarazil (ale ani na tu /sps/io). Takze uz moc nevim. Chtelo by to zkusit ty websockets co umi, ale rozchodit NodeJS a sam neco napsat bude asi na dyl
Ja zitra zkusim i jine bloky, jestli nemaji chybu jen v tom jednom bloku nebo ve vice blocich, ktere maji vice ovladatelnych vystupu
Jj. ja uz toho budu muset pro dnesek nechat ;-).
Jeste jsem narazil na toto. V dokumentaci websockets je popis co umi ruzne zarizeni a v sekci LightCOntroller je toto
Ono to vypada, ze ani ty websockets neumi zapnout/zjistit konkretni svetlo. A mozna proto to neni doimplementovany ani v tom http. Pritom ale notifikace do webove LoxoneAplikace nejak dorazit musi, protoze to umi pri zmene spravne ukazat. Fakt mi prijde, ze to programuji nejaka prasata….
Tak jsem zkusil bloky Alarm a IRPT a po příkazu /all to hodnoty výstupů ukazuje.
v tom pripade, pojdme zkusit poprudit podporu 😉
Není to i tak trochu nebezpečné? Záleží teda jak se generují jednotlivé UUID a jestli můžu posílat pokusy kolikrát chci, pak stačí aby mi někdo hacknul domácí wifi a z ulice mi třeba zatopí na 30°C. A to se Loxone ohání jak to mají bezpečné…
je tam potreba se jeste autentizovat uzivatelem/heslem. Ale jestli ti nekdo hacke wifinu, tak i to ti dokazu precist, protoze tam neni zabezpeceni pres https, ale jen http. A i kdyby bylo https, tak i tak by se dalo hacknout ;-).
Z toho plyne ponauceni, ze v tve wifi nema nikdo co delat a podle toho musi byt nalezite chranena a idealne i izolovana od critical systemu 😉
Vzhladom na “zabezpecenie” celeho Loxone podla mna nema miniserver na verejne *1 dostupnej sieti vobec co robit a ked tak jedine za routerom s firewallom.
*1 myslim tym aj domacu wifi
Jen tak mimochodem, toto je docela vesele cteni na dobrou noc
http://www.securityfocus.com/archive/1/535543
Jeste sem to uplne nestudoval, ale je to imho nejaka nezavisla analyza zabezpeceni Loxone provedena pro nejakou firmu.
Ve zkratce, lze vzdalene pretizit, ukrast loginy, spustit na dalku cizi kod, ovladat na dalku dum, otevrit dvere, ziskat admin heslo majitele, ale i Loxone partneru….
Anglicky:
The Loxone smart home has multiple design and implementation flaws which
combined could be used by an attacker to:
1) remotely cause a denial of service condition which renders the smart
home unusable which would effectively disable any Loxone-controlled
alarm system,
2) steal the user’s credentials for the management interface and fully
control the smart home,
3) execute JavaScript code in the user’s browser for further attacks,
4) control arbitrary devices connected to the system, e.g. switch on/off
lights, remotely open doors or garages, disable alarm system, etc.,
5) gain access to admin passwords of Loxone partners (e.g. electricians
who are implementing the smart home solution at customers) and
completely take over other smart homes of the same Loxone partner!
To jen jak jsme se bavili o zabezpeceni ;-). Zkratka a dobre, Loxone musi byt uzavreno a drzeno v temne mistnosti bez pristupu k venkovnimu svetu.
No, ale to neni zdaleka vsechno. Pokud mas zapnuty loxone updaty, tak davas loxone handshake, ze ti tam muze poslat co chce, treba I cusom firmware, kterej po nabootovani odemkne vsechny zamky a rozsviti na chodbe – resil jsem s nima v zime nejaky crashe, ktery byly nakonec zpusobeny spatnou implementaci dns klienta v miniserveru. V prubehu tohohle cviceni, mi bez toho, aniz by mi to rekli vzdalene prekonfigurovali DNS servery (tim updaterem). Takze od ty doby si nedelam iluze a vzdalene jedine pres VPNku a miniserver ma zakaz komunikovat s cimkoliv na internetu.
Na Roombu jsem se jeste nedostal, ale taky ji to ceka 🙂
Tak přesbe s tim dns jsem mel taky problem a zapirali jak maly kluci. Kdykoli checkoval updatr (20min mam pocit) tak se v logu rozlil bordel a miniserver sel do kytek. Udelal reboot a za 20min znovu. Řešení byli presne jak pisete, zakazat veskerou komunikaci, což mi nešlo pres miniserver, takze jsem to udelal zakazanim na routeru a smerovabin loxone.com na 127.0.0.1
presne slo o to, ze updaty maji loxonaci na nejakym amazonackym boxu.
Normalni DNS odpovi na otazku
update.loxone.com –> s3-website.eu-central-1.amazonaws.com
coz miniserver (nevim jestli uz to neopravili) nerozdychal, protoze ocekaval primo IP adresu cile (tak vraci vysledek napr. google DNS 8.8.4.4)
Doma jsem mel peklo od drahe polovicky, protoze kazdych 20 minut se zhasly a rozsvitily svetla 🙂
reseni bylo vypnout automaticky updaty. Zafirewalloval jsem jen proto, ze se mi nelibilo, ze loxonaci muzou to zarizeni ovladat na dalku kdyz budou chtit.
Ja myslim ze zablokovat Loxone akukolvek komunikaciu von a z vonku dnu je uplne prve co musi clovek spravit pred produkcnym nasadenim. Pretoze u mna by to zhadzovalo este aj zasuvky – a to by WAF klesol do zapornych cisiel 😀 …
;-))) Jojo, je potreba eliminovat jakykoli potencialni problem co snizuje WAF 😉
jj, to je presne ten bug. kazdych 20min restart a s tim spojene zhasnuti/rozsviceni. Sem rad, ze sem nebyl jediny, komu to delalo
Super práce !!! No ale podle mě to bude fungovat do prvního upgrade od loxone. Toto by se dalo využít do vlastního grafického webového rozhraní – Room plan. 🙂
Myslel jsem floor plan 🙂
Ten floorplan by mel jit udelat i tak. Pořád maji oficiálně ty websockets. Jen je opruz to rozbehat, alr par knihoven na NodeJS jsem nasel (jen neumím v nodeJs… 🙂 )
Floorplan mám hotovy a funguje snad dobře. Hodím sem nekdy ukázku
a jak vycitate stavy? pres znacky? nebo naprimo pres ty url a jen pres to co jede?
http://pasteboard.co/k8ZkIoRj7.png
tady malá ukázka
Nějak ten odkaz nefunguje.
Když si ten odkaz zkopíruješ a otevřeš v novém okně webového prohlížeče, tak to funguje 🙂
zkus
Prosím Tě v čem jsi ten floor plan dělal?
Tak jsem si večer řek, že zkusím pomoci s tím vyčítáním stavů a prd, čuměl jsem do Wiresharka, kdy jsem měl otevřenou aplikaci v prohlížeči a na mobilu rozsvěcoval a zhasínal a jediný na co jsem přišel bylo to, že při změně stavu probíhá komunikace Loxone vs. web aplikace, takže Loxone dá prohlížeči vědět změnu stavu a ten to pozná (-což víme), ale nic kloudnýho jsem z těch paketů nevyčetl 🙁
to co leze od loxone do prohlizece jsou binarni bloby websocketu, popsane v ty api dokumentaci.
Tak proto jsem nic nevykoukal…
Založil jsem topik na foru https://www.vodnici.net/community/loxone-a-arduino/loxone-a-externi-komunikace-s-miniserverem/
Mohli bychom tu komunikaci přenést tam ? Aktuálně řeším několik problémů, které by se mohly hodit i ostatním.
Ten dotaz na foru je strasne obecny. To co resis ty je imho zaklad komunikace, ten je zdokumentovany. To co resime tady uz je ohejbani loxone do (pro nej) neprijemnych poloh 😉
Jasny, spis jsem chtel, aby komujikace byla na fóru a ne tady v blogu.
Děláme integraci s Control4, kde to je extra ohýbání 🙂
Další možnost je podívat se do vytvořené souborové zálohy – je to xmlko a uudi jsou tam také.
S rozchodenim node-lox-mqtt-gateway nebol problem. Napoji sa cez websocket na miniserver a umoznuje obojstrannu komunikaciu cez MQTT kamkolvek do sveta node-red nevynimajuc. Parada.
da se skrz toto API vycitat i teplota senzoru? nejak mi nedochazi jak ziskat UID senzoru 🙂 ovladani tlacitka funguje, ale senzor?
thx