Loxone – tipy&triky – jak získat UUID kteréhokoli prvku

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,….)

Pomohl Vám náš blog? Chcete nás podpořit? I málo udělá radost 😉

61 thoughts on “Loxone – tipy&triky – jak získat UUID kteréhokoli prvku

  1. 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. 😀

        1. 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 ;-(

            1. 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 ;-(

  2. 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?

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

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

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

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

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

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

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

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

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

                    4. Takže to funguje 😉

                      použil jsem UUID výstupu, který jsem nedal použít do vizualizace a hodnoty to vyčítá.

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

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

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

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

                    9. 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 🙂

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

                    11. Ja zitra zkusim i jine bloky, jestli nemaji chybu jen v tom jednom bloku nebo ve vice blocich, ktere maji vice ovladatelnych vystupu

                    12. 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 https://dl.dropboxusercontent.com/u/11355235/ShareX/2017/01/2017-01-09_20-27-03.png

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

  3. 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é…

    1. 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 😉

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

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

        1. 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 🙂

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

            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.

              1. 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 😀 …

              2. jj, to je presne ten bug. kazdych 20min restart a s tim spojene zhasnuti/rozsviceni. Sem rad, ze sem nebyl jediny, komu to delalo

  4. 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. 🙂

    1. 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… 🙂 )

  5. 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 🙁

    1. 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 😉

      1. 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í 🙂

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

Leave a Reply

Your email address will not be published. Required fields are marked *