Browsed by
Tag: Loxone

Interkom pro LOXONE

Interkom pro LOXONE

Když jsem sháněl interkom pro komunikaci s LOXONE, tak jsem v první fázi zavrhnul originál LOXONE interkom.

Zavrhnul jsem ho z těchto důvodů:

  • vysoká cena (přes 35.000,-Kč)
  • žádné převratné funkce
  • kamera nic moc rozlišení

Další interkom o kterém jsem dlouho přemýšlel byl doorbird. Bohužel i tam mě příliš neoslovila cena, nicméně jsem již o něm uvažoval.

Pak jsem ale objevil řadu interkomů od firmy AKUVOX. Sám jsem si pořídil AKUVOX R20A (od dodavatele: https://www.businesscom.cz/) a k němu i štít proti dešti. O něm bude tedy dnešní článek včetně integrace do LOXONE.

Specifikace interkomu AKUVOX R20A

Charakteristika

  • Širokoúhlý fotoaparát: 120 °
  • PoE (IEEE802.3af, Power-over-Ethernet)
  • Obousměrná audio komunikace přes IP sítě s funkcí Echo Cancel
  • V souladu se standardem SIP pro snadnou integraci do všech ústředen s podporou SIP
  • Podpora ONVIF pro snadnou integraci s jakýmkoli kamerovým systémem

Vlastnosti

  • Materiál těla: slitina zinku
  • Kamera: 3 Mpx, automatické osvětlení
  • Tlačítko: 1 tlačítko volání
  • G-senzor (využívá se pro alarm)
  • Infračervený snímač
  • RS485
  • Čtečka RF karet: 13,56 MHz a 125 kHz
  • Výstupní relé: 2 výstupní relé pro otvírač dveří
  • IEEE 802.3af Power-over-Ethernet
  • 12V DC konektor (pokud nepoužíváte PoE)
  • Voděodolný a prachotěsný: IP65
  • Instalace: nástěnná nebo pod omítku
  • Rozměry při montáži na stěnu: 90x145x58mm
  • Rozměry při montáži pod omítku: 102×161,5x73mm

SIP

  • SIP v1 (RFC2543), SIP v2 (RFC3261)
  • Audio kodeky: G.711a, G.711μ, G.722, G.729
  • Video kodeky: H.264
  • Kvalita audio: Audio 7 kHz
  • Odrušení ozvěny
  • Rozpoznávání hlasové aktivity
  • Komfortní generátor šumu

Video

  • Rozlišení: až 720p
  • Maximální rychlost přenosu snímků: 720p – 30 snímků za sekundu
  • Vysoce intenzivní infračervené LED diody pro osvětlení obrazu v tmavých hodinách s vnitřním světelným senzorem
  • Kompatibilní s komponentami 3.PartyVideo, např. NVR

Vstup

  • Relé řízené individuálně tóny DTMF
  • Kamera je trvale funkční
  • Vyvážení bílé: auto
  • Režim automatického nočního LED osvětlení
  • Minimální osvětlení: 0.1LUX

Síť

  • Ethernetový port 1x 10/100 Mb/s
  • Podpora protokolů: IPv4, HTTP, HTTPS, FTP, SNMP, DNS, NTP, RTSP, RTP, TCP, UDP, ICMP, DHCP, ARP

Data použita z webu: https://www.businesscom.cz/detail/724/akuvox-r20a-mini-ip-video-intercom-se-cteckou-karet-na-pod-omitku.html

Důležité soubory k interkomu

Nyní pojďme k integraci do LOXONE

V první řadě potřebujete vytvořit síťové zařízení typu Uživatelsky definovaný interkom.

Vytvoření síťového zařízení – Uživatelsky definovaný interkom
Nastavení uživatelsky definovaného interkomu

Další je nastavení interkomu viz. obr níže

nastavení interkomu

Http URL: http://user:password@IP_MINISERVERU:80/dev/sps/io/vi1/Pulse user: uzivatel_miniserveru password: heslo_uzivatele IP_MINISERVERU: ip adresa miniserveru

Doporučuji vytvořit si nového uživatele LOXONE a omezit mu práva pouze na ten virtuální vstup pro zazvonění.

Virtuální výstup pro AKUVOX R20A

pro virtuální výstup pro AKUVOX přikládám šablonu VO na import přímo do LOXCFG.

Musíte si akorát nastavit správnou IP interkomu a taktéž v příkaze pro otevření (URL) relé 1/2 správné jméno a heslo uživatele.

Nastavení v interkomu R20A

V interkomu si povolte ovládání relé pomoví HTTP (menu Intercom > Relay) v části “Open Relay via HTTP” viz obrázek.

část nastavení pro povolení ovládání relé přes HTTP protokol

a nastavte si uživatelské jméno a heslo.

Blok ovládání dveří

Musíte nastavit přiřazený interkom, který jsme si výše nastavili a správně připojit virtuální vstup pro zazvonění a výstup pro otevření relé (Q1) a případně hlasitého zvonku doma (Qb).

Ještě přikládám na žádost video z reálného provozu interkomu.

Ukázka videa z interkomu – je vidět sněžení

Zasílání Card SN do LOXONE

Návod pro zasílání Card SN zaslal: @falda

Doplňuji ještě informaci pro zasílání sériového čísla (načteného čtečkou na interkomu) do LOXONE.

Do události Card v administraci Akuvox R20A se nastaví URL virtuálního vstupu v LOXONE http://username:password@IP/dev/sps/io/NazevVirtualnihoVstupu/$card_sn kde $card_sn je proměnná zvonku, čímž se posle na vstup LOXONE textový řetězec s kódem RFID čipu a ten pak vyhodnocuju Status blokem (viz schema). Hned po vyhodnoceni volám na ten virtuální vstup Reset RFID ClearCard http://username:password@IP/dev/sps/io/NazevVirtualnihoVstupu/Reset aby to bylo připraveno pro příští ověření. Jinak by tam zůstávala “viset” stará hodnota a pořád by se to vyhodnocovalo dokola.

Schema pro vyhodnocování Card SN.

RFID ověření je pak obecná informace, kterou můžu následně využít, nebo konkrétní personifikace podle osoby, jak už jsem psal.

Není to idelání, pokud někdo ztratí čip nebo přidám nový čip do Akuvoxu, tak musím změnit i vyhodnoceni ve Status bloku, ale to se naštěstí nestává tak často.

V tomhle je asi jediná přidaná hodnota u originál Loxone intercomu, že tam ta personifikace je integrována už v rámci uživatelů Loxone.

Aktualizace firmware interkomu

Soubory firmware:

Verze Hardware se pozná podle číslování na úvodní stránce

Ukázka verze firmware

Pokud je ve formátu 20.xx.x.xxx tak se jedná o verzi HW 2 a pokud je ve formátu 220.xx.x.xxx tak se jedná o verzi HW 3.

Stránky s aktuální FW jsou tady: https://www.akuvox.com/ProductsDisp.aspx?pid=11

Aktualizace: 06.04.2021 11:00 Firmware verze: 20.30.4.110 obsahoval nějaký bug a zamrzával interkom. Řešil jsem to cca 4 dny s technickou podporou (reagují opravdu rychle a spolehlivě) a po reportování logů atd. mi poslali novou aktualizaci FW:20.30.4.120. Přikládám novou verzi FW ke stažení.

Aktualizace 13.08.2021 10:05 Nyní je k dispozici další aktualizace firmware.

Loxone and Apple iOS shortcuts with NFC

Loxone and Apple iOS shortcuts with NFC

What is it?

This small article describes how to easily integrate Loxone with Apple iOS. There are two ways of achieving similar functionality.

1nd has been introduced on 16th December with latest Loxone app update and iOS 14.3.

2st is here since aegis and introduction of homebridge/Hoobs with loxoxe-ws.

 

1. iOS Shortcuts for Loxone

Update your iOS device, update the Loxone application. After update open the Loxone app and trigger any action you want. Updated version of iOS and app has now background service running to capture the Loxone activities (most probably via url which some of the others already using for QR generation).

1.1 Creation of the Shortcut

Go to Loxone App and trigger

1.2 Creation of the Shortcut

Go to shortcut and click +

Select Apps

Look for Loxone

Select the action you previously recorded/triggered in Loxone App

Thats it… you have a Shortcut for Loxone action!

1.3 Creation of NFC action

Install the RFID any where you want 🙂 125 kHz or 13Mhz Mifare (I believe both are supported). Both available on aliexpress for “nothing”

Go +

Create personal automation

Select NFC to scan the installed RFID chip

SCAN

Click Next

Select the previously created ShortCut to be executed when iPhone scans the RFID

Unselect the “Ask Before Running” if you want to execute the action without any re-confirmation

Just one small remark -> it is NOT needed to fully Unlock+Open the phone. In case of FaceID it is enough to have a look to phone so the lock symbol turns to “unlocked” and you can scan the RFID right away on “unlocked lock-screen”

2. iOS Home/HomeKit for Loxone

In case you have already Homebridge (loxone-ws, loxone-ws-adv, etccc in HOOBS or anywhere else) running, and everything tuned up with virtual switches reflected in Homekit/Homebridge you can run 1.3 but in stead of Loxone just select Home as application and select the accessory you want to trigger/change/ON/OFF with the NFC chip.

DONE 🙂

Univerzální notifikace díky Pushover

Univerzální notifikace díky Pushover

Služba/aplikace Pushover umožnuje snadné zasílání a přijímání notifikací z různých vlastních aplikací, skriptů či emailou. Lze ji tak použít nejen v Loxone či NodeRed, ale kdekoli jinde, kde si potřebujete zaslat info o nějakém stavu.

Klientská část aplikace, tzn. to, co Vám zobrazuje notifikace, je dostupná pro Android i iOs a dále pak pro desktop jako browser extension pro Chrome, Firefox i Safari.

Posílat notifikace pak můžete buď skrz REST API, nebo zasláním emailu na speciální emailovou adresu, nebo pomocí jednoho z mraky pluginů, které pushover nabízí (například IFTT, Zapier, Domoticz, Home Assistant a další).

Co se týká poplatků za používání a zasílání notifikací, myslím, že to mají nastaveno hodně rozumně. Neplatí se žádné měsíční poplatky (což fakt nesnáším), ale platí se jednorázový poplatek za každé zařízení, kde chcete notifikace dostávat.

Poplatek je přátelských $5USD za zařízení a platí pro neomezený počet příchozích zpráv od neomezeného počtu aplikací. Na vyzkoušení máte 7 dnů zdarma na každém zařízení.

To “Aplikací” je zde důležité. Při zasílání zpráv totiž můžete v administraci vytvořit několik různých typů aplikací, které mají svou ikonku, složku a nastavení a z ní pak posílat. Díky tomu si můžete notifikace v aplikaci pěkně kategorizovat.

Co se týká počtu odeslaných zpráv, tak každá aplikace může odeslat měsíčně 7500 zpráv zdarma. Pokud je potřeba více, je pak potřeba přejít z osobního účtu na “Team” účet a nabít si kredit. Pro vlastní potřeby jsou ale limity zdarma naprosto dostačující.

Teď už k samotné aplikaci a jak ji použít. Začněte registrací zde https://pushover.net/login, kde pak získáte přístup jak pro klientskou část (tzn. příjem notifikací), tak pro server-aplikaci k odesílání notifikací.

Na vyzkoušení funkčnosti je dobré začít emailem. Přidáme proto testovací emailový alias “Test email”, pro který dostaneme novou testovací emailovou schránku. V mém případě je to [email protected]  (nechávám ji zatím zapnutou, můžete mi psát vzkazy 🙂 ).

Pokud nyní zašlete jakýkoli email na tuto adresu, dorazí Vám to jako notifikace na všechny zaregistrované zařízení (připadně ta zařízení, které si v nastavení emailu zvolíte).

A na mobil či desktop Vám přijde zpráva takto:

Pomocí emailového propojení můžete zprovoznit notifikace v zařízeních, kde není možné REST API volání, případně si notifikovat emaily z Vaší emailové schránky. To hlavní je ale právě REST API.

Začněte tím, že si vytvoříte “Application token”. Ten se pak používá při odesílání zpráv skrz API. Zároveň, každá takto vytvořená aplikace má stránku se statistikama, kde vidíte, kolik jste toho poslali.

V mém případě jsem dostal API token ajz8xt2fmbsnpigyyjw67xeoxuhjbx, který budu používat v dalších ukázkách. Opět, token nechávám zatím zapnutý, takže mi můžete posílat zprávy. Když toho bude moc, tak ho pak zakážu :).

curl 
   --form-string "token=ajz8xt2fmbsnpigyyjw67xeoxuhjbx" 
   --form-string "user=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 
   --form-string "title=Test from curl" 
   --form-string "message=Its working" 
   https://api.pushover.net/1/messages.json

Poznámka: V závislosti na Vašem OS musí být buď celý na jenom řádku, nebo musí být nové řádky adekvátně esacapovány pomocí ^ či \.

Toto je curl příkaz, kterým pošlete notifikaci z příkazové řádky. Na zaslání používám aplikaci “curl“, která slouží k zasílání (nejen) webových požadavků, případně pak PostMan.

V samotném dotazu pak položka “token” je Vaše zaregistrovaná aplikace, položka “user” pak uživatelský klíč (User key) z hlavní obrazovky Vašeho pushover účtu. Title a message jsou nadpis a tělo samotné zprávy.

Kromě těchto základních položek je možné do notifikace předat pár dalších nastavení. Všechny jsou popsány v této dokumentaci. Můžete ke zprávě přiložit obrázek, můžete nastavit, na které konkrétní zařízení má zpráva jít. Dále pak můžete zprávě nastavit nějaký jiný zvuk či její prioritu (ty určují, jak budou zprávy na mobilu zobrazeny a zda se v době klidu má zahrát zvuk).

curl 
   --form-string "token=ajz8xt2fmbsnpigyyjw67xeoxuhjbx" 
   --form-string "user=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 
   --form-string "title=Test from curl" 
   --form-string "message=Its working" 
   --form-string "priority=1" 
   --form-string "sound=magic"
   https://api.pushover.net/1/messages.json

Takto třeba vypadá příkaz na zaslání prioritní zprávy s konkrétním zvukem. Na desktopu se pak zpráva ukáže takto:

Nyní se pojďme podívat, jak tyto notifikace poslat z aplikací, které umí provést REST API volání. Tzn. například Loxone nebo NodeRED.

Výše uvedený formát curlu je nám totiž zatím k ničemu, protože takto to do Loxone nedostaneme. Naštěstí umí Pushover i XML, JSON formát nebo “UrlEncoded” formát, o kterém se ale na první pohled v dokumentaci nedočtete.

Pojdmě si tyto formáty ukázat tentokrát v Postmanu. Jako první tento “UrlEncoded” formát. Použijeme “RAW” styl odeslání, abychom si museli sami vyplnit i HTTP hlavičky a tím si ověřili, že umíme vše vyplnit správně kvůli Loxone.

Do “Headers” je nutné vyplnit správně “Content-Type”. Toto zmiňuji proto, že Pushover tuto hlavičku striktně kontroluje a pokud hlavička nesedí s obsahem zprávy, tak zprávu ignoruje. Na tomto jsem se minule zasekl na několik hodin. Problém Loxonu totiž je, že i když ve virtuální výstupu posíláte XML či JSON, on to posílá jako “application/text” a Pushover to pak ignoruje.

Ačkoli formát “x-www-form-urlencoded” umožňuje zadat dotaz v relativně krátkém řetězci, není z mého pohledu ideální. Problém totiž je, že musíte ručně nahradit všechny speciální znaky jejich “encoded” variantama. Tzn. místo mezery musíte psát %20 a podobně.

Proto, na poslání dat z Loxonu se více hodí JSON formát, kde se o tyto věci nemusíte starat, ale zase je trochu delší samotný text k odeslání.

Namísto:

token=ajz8xt2fmbsnpigyyjw67xeoxuhjbx&user=xxxxxxxxxxxxx&message=HelloWorld

budeme posílat tento JSON.

{"message":"HelloWorld","token":"ajz8xt2fmbsnpigyyjw67xeoxuhjbx","user":"xxxxxxxxxxxxx"}

A spolu s tím musíme poslat i správnou hlavičku “Content-Type: application/json”

V Postmanu to pak bude vypadat takto

Tímto máme vytvořený a vyzkoušený požadavek na notifikaci. Toto opravdu vřele doporučuju všem, než se pustíte do samotného zadávání do Loxone. Protože jedna věc je rozchodit to v Postmanu, ale druhá věc pak rozchodit to v Loxone.

Pushover v Loxone

I když Vám to v Postmanu bude chodit, stále nemáte vyhráno. Spoustu věcí v Loxone nefunguje a hlavně, nemáte žádnou chybovou odezvu. Prostě se nic nestane.

Pojdmě na to. V Loxone vytvořte “virtuální výstup”, pojmenujte si ho třeba “Pushover Vystup”.

Hned tady číhá velké nebezpečí! Do virtuálního výstupu musíte zadat jeho adresu. POZOR, adresa nesmí obsahovat koncové lomítko, nebo celou URL adresu. Smí obsahovat pouze protokol + název serveru.

Tzn. správně je “http://api.pushover.net“, ale nikoli “http://api.pushover.net/” nebo “http://api.pushover.net/1/messages.json”. Právě jsem Vám ušetřil dvě hodiny trápení. Zamálo :).

Další krok je pak konfigurace samotného příkazu. Ukážeme si, jak odeslat data v obou formátech (url-encoded a json).

Tady těch nebezpečí číhá hned asi tak milión, tak pojdmě na to.

Nebezpečí číslo jedna. Instrukce při zapnutí MUSÍ začínat lomítkem. Pokud si myslíte, že Loxone umí toto lomítko doplnit (nebo použít v případě, že ho dáte do adresy v minulém kroku), jste na omylu. Tzn., instrukce musí být ve formátu “/1/messages.json“, nikoli “1/messages.json” či  “http://api.pushover.net/1/messages.json”. Další dvě hodiny trápení. You’re welcome!

Další lahůdka je “HTTP rozšíření při zapnutí”. Už jsem to psal minule, pod tímto názvem se skrývá odeslání HTTP hlaviček. Jak jsem psal, Loxone neumí rozeznat ani základní odesílané typy a proto je nutné Content-type odeslat ručně, jinak se s Vámi Pushover bavit nebude.

Tzn., do HTTP rozšíření při zapnutí vyplňtě “Content-Type: application/x-www-form-urlencoded“.

Dejte si pozor na to, že opravdu zkopírujete přesně jak to zde píšu. Pokud totiž zadáte “Content-Type:application/x-www-form-urlencoded” – tzn. bez mezery, jste opět v háji. Loxone totiž takto zadaný Content-Type ignoruje. Další dvě hodiny trápení ušetřeny.

Samotný HTTP Post příkaz pro zapnutí už naštěstí v případě Loxone další překvapení neskrývá. Zde už zadáte řetězec tak, jak jste si ho vyzkoušeli v Postmanu. Tzn. “token=ajz8xt2fmbsnpigyyjw67xeoxuhjbx&user=xxxxxxxxxxxxxxxxxxxxx&message=HelloWorld”

A do HTTP při zapnutí pak dejte POST.

Tím je hotovo. Pro JSON pak postupujte podobně:

Instrukce: /1/messages.json
Rozšíření: Content-Type: application/json
Příkaz: {"message":"helloworld","token":"adpddeny9puzybmr1de6vn11yyfc2w","user":"xxxxxxxxxxxxxxxxxx"}
HTTP při zapnutí/vypnutí: POST

Tím máte nakonfigurovaný virtuální výstup na zaslání zprávy při zapnutí/vypnutí. Bohužel, budete pravděpodobně potřebovat spoustu virtuální výstupů pro každý řetězec, který chcete z Loxone notifikovat. Není zde totiž příliš mnoho možností, jak takový JSON předpřipravit z dostupných parametrů a ten pak až odeslat.

Částečně se to dá suplovat pomocí prvku Stav, který umožnuje 4 vstupy a z nich vytvořit jeden textový výstup. Pomocí binárního multiplexoru/demultiplexoru jste schopni ze 4 vstupů udělat 16. Bohužel, v podání Loxone sice máme “Binární kódování”, ale už tak nějak neexistuje “Binární dekódování”.

Pushover v NodeRED

V NodeRED je situace s Pusoverem o dost jednodušší a vlastně to bude popis jen na pár řádků. Detekce Content-Type funguje automaticky, stejně tak se snadno zadává i URL dotazu.

Tady je request pro vložení do NodeRED, stačí jen vložit Váš user-key a token do vstupního JSON:

[{"id":"15258bfd.f63314","type":"inject","z":"2d78ae47.c1a9a2","name":"make request","topic":"","payload":"{\"message\":\"HelloWorld\",\"token\":\"ajz8xt2fmbsnpigyyjw67xeoxuhjbx\",\"user\":\"xxxxxxx\"}","payloadType":"json","repeat":"","crontab":"","once":false,"onceDelay":"","x":510,"y":580,"wires":[["e690ef61.8b0f9"]]},{"id":"e690ef61.8b0f9","type":"http request","z":"2d78ae47.c1a9a2","name":"","method":"POST","ret":"txt","paytoqs":false,"url":"http://api.pushover.net/1/messages.json","tls":"","proxy":"","x":710,"y":580,"wires":[["5b512352.6d2b2c"]]},{"id":"5b512352.6d2b2c","type":"debug","z":"2d78ae47.c1a9a2","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","x":930,"y":580,"wires":[]}]

JSON požadavek pro Pushover vložíme rovnou ze vstupního node jako Payload.JSON:

kde můžeme pěkně JSON rovnou i editovat:

Prostřední node – http request – pak nastavíme tak, aby se dotazoval na cílovou URL adresu Pushoveru (komplet adresa, server + URI):

A třetí node je pak už jen debug výstup, abychom viděli, co nám Pushover vrací jako odpověď.

A to je vše. Máme notifikace zprovozněné i z NodeRED a bolelo to o dost méně než v případě Loxone :).

A to je pro dnes vše. Věřím, že pro Notifikace najdete spoustu využití. Nemusí to být jen o notifikacích z domu samotného. Lze to použít i například pro notifikace z Arduin, které v domě a kolem něj dělají hromadu jiné práce, nebo třeba pro pracovní a hobby projekty, když se někde na serveru něco děje.

Navíc, díky možnosti vytvářet neomezené množství “aplikací” je snadné mít v notifikacích pořádek a využívat je i zpětně pro logování stavu domu.

Pokud si nastavíte, že notifikace nemá pípat (a tuším, že jde nastavit, že se ani na mobilu přímo neukáže v notifikacích), lze to použít i na logování třeba spínání kotle či topení rekuperace a pak se jen zpetně podívat, kdy se to dělo.

Loxone virtuální výstupy a jejich debugging

Loxone virtuální výstupy a jejich debugging

Tento článek bude o tom, jak správně nastavit virtuální vstupy a jak postupovat při ladění v případě, že se Loxone nechová tak jak bychom očekávali.

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.

Loxone – under the hood

Loxone – under the hood

Asi vsetci poznate ten pocit, ked ste ako deti mali dostat novu hracku a nevedeli ste sa dockat toho momentu, kedy ju konecne dostanete do ruk a zacnete sa hrat.

Ja som sa ako dieta na tieto momenty tesil dvojnasobne, lebo vzdy prve co som urobil bolo, ze som musel vsetko najskor rozobrat do posledneho srobiku a zistit ako to vnutri funguje. Po dlhej dobe som si konecne nasiel cas pozriet sa do utrob Loxonu aby som obnuchal ako to cele funguje a ake cipy “tikaju” v tych nasich drahocennych zariadeniach. Viem, ze na internete koluju informacie o procesore a niektorych dalsich cipoch pouzitych v Loxone miniserveri, ale nikde som nenasiel uceleny prehlad vratane fotiek a dokumentacie. Vsetky nasledujuce informacie povazujte za cisto informativne. Vychadzal som len z informacii co som nasiel na internete a tym, ze nie je verejne dostupna dokumentacia, ci schema zapojenia, su to len moje dohady.

Loxone miniserver:

 

Jadrom miniserveru (1) je procesor Atmel SAM9G20 od firmy Microchip. Procesor ma 32 bitovu architekturu s jadrom ARM926 a sekunduje mu 2×32 (dokopy 64MB) pamate SDRAM IM2516SDBATG (2).

  • Maximalna pracovna frekvencia 400Mhz
  • L1 cache 32KB instrukcie / 32KB data
  • hardverova MMU (pre beh OS)
  • 32bit pamatova zbernica
  • frekvencia pamate 166MHz
  • puzdro 217 BGA

Analogove vstupy obsluhuje prevodnik TV1544 (3), ktory podporuje rozlisenie 10bitov s casom konverzie 10us. Prevodnik pracuje v rozsahu 2,7-5,5V, preto predpokladam, ze vstupne napatie 0-10V je k nemu privedene cez presny napatovy delic. Samotny obvod je prepojeny s procesorom cez seriovu zbernicu SPI.

Analogove vystupy 0-10V su realizovane cez DAC prevodnik AD5724 (4) s casom prevodu 10us. Tento prevodnik komunikuje takisto cez rozhranie SPI.

Digitalne vystupy su realizovane pomocou rele HF33F, ktore su od procesora oddelene pomocou dvoch 4 kanalovych izolatorov Adum3401 (5) a spinane pomocou tranzistora.

Miniserver obsahuje aj obvod hodin RTC s kalendarom PCF2123 (7), ktory je isteny kapacitorom (9) 0,33F a je pripojeny k procesoru cez SPI rozhranie.

O ethernet komunikaciu 10 Base-T/100 Base-Tx sa stara transciever KSZ8081 (6), ktory ma nastarosti aj LED indikatory prenosu v konektore RJ-45 (10).

Jednotlive extensiony su k miniserveru pripojene pomocou CAN zbernice, kde podla informacii co som nasiel na internete pouziva Loxone vlastny komunikacny protokol. Kedze samotny procesor SAM9G20 neobsahuje periferiu CAN, bol pouzity obvod MCP2515 (8) s max prenosovou rychlostou 1Mbit/s. Pripojeny je cez rozhranie SPI.

Na doske sa pravdepodobne nachadza aj modifikovany JTAG konektor na pripadny debug procesora (11).

Loxone extension:

 

Vsetky extensiony ktore som mal k dispozicii (extension, 1-wire, modbus) pouzivaju ako hlavny riadiaci mikrokontroler LM3S2678 (1). Jedna sa o 32 bitovy mikrokontroler ARM s jadrom cortex M3.

  • maximalna pracovna frekvencia 50Mhz
  • 32KB SRAM
  • 128KB Flash
  • obsahuje hardverovu delicku a memory protection unit (MPU)

Vyhodou tejto rady je, ze maju v sebe integrovane Bosh CAN rozhranie, ktore loxone pouziva na komunikaciu s miniserverom cez Loxone link.

Rele, analogove vstupy a analogove vystupy pouzivaju rovnake zapojenie ako pri miniserveri. Na doske sa tiez nachadza pravdepodobne JTAG (2).

Z dovodu nizsieho poctu vstupno vystupnych pinov na mikrokontroleri su digitalne vstupy riesene cez dva obvody SN65HVS882 (3), ktore obsahuju serializer, current limiter, debouncer a toleranciu na vstupe do 34V. Tieto obvody su pravdepodobne zapojene do kaskady a k procesoru su pripojene cez SPI kompatibilne rozhranie.

1-Wire extension:

 

Tento extension obsahuje takisto riadiaci mikrokontroler  LM3S2678 (1). Okrem napajacej casti a LED diod (3), sa tu nachadza este ochrana proti ESD (electro static discharge). O komunikaciu po 1 wire zbernici sa stara obvod DS2480B (2), ktory komunikuje s hlavnym mikrokontrolerom cez seriovu linku UART.

Modbus extension:

Zaujimave je, ze tento extension obsahuje presne ten isty plosny spoj ako 1-Wire extension. Jediny rozdiel je, ze cez UART nie je k riadiacemu mikrokontroleru pripojeny obvod na riadenie 1-Wire zbernice, ale urovnovy prevodnik na zbernicu RS-485 s oznacenim sn65hvd08 (1). Predpokladam ze aj pri RS485 aj RS232 extensione bude pouzity rovnaky plosny spoj a hlavny rozdiel medzi jednotlivymi extensionmi je v pouzitom firmveri, ktory cely extension riadi.

PS: Ak mate niekto k dispozicii dalsie extensiony (relay, dimmer, …), kludne ich nafote a doplnte ich do tohoto clanku, mohli by sme ho postupne rozsirovat.

Integrace Rekuperace Thermwet Ventbox do Loxone pomocí Modbus TCP

Integrace Rekuperace Thermwet Ventbox do Loxone pomocí Modbus TCP

Po dlouhé a náročné cestě způsobené nejen nedostatkem dokumentace jsem nakonec úspěšně integroval rekuperaci ThermWet Ventbox (v mém případě Standard 400) do Loxone. Připravil jsem postup a šablonu. Integrace je řešena přes Modbus TCP, není tedy potřeba žádný zvláštní extension, stačí TCP spojení mezi Miniserverem a Ventboxem.

Požadavky:

  • Loxone Config 8.3 (předpokládám, že všechny 8.x a vyšší budou taky fungovat)
  • ThermWet Ventbox s firmwarem v2.13 (rovněž předpokládám, že i na vyšších); testováno na modelu 400 Standard. Nevím, jestli modely Basic mají podporu Modbus, prověřte před případným nákupem!
  • TCP/IP spojení mezi Loxone a Ventboxem

 

Postup:

  1. Stáhněte si zazipovanou šablonu – MB_ThermWet_Ventbox_213 (aktualizace 2.15 dole), rozbalte ji do
    C:\ProgramData\Loxone\Loxone Config X.Y\Templates\Comm\
  2. V rozšířeném nastavení Ventboxu si zvolte nenulovou adresu jednotky (např. 5), Loxone totiž Ventboxáckou implicitní adresu 0 nepodporuje:

  3. V Loxone Configu zvolte ve stromě periferií Projekt – Miniserver – Miniserver communication, následně na liště přidejte Modbus server:
  4. Nově přidaný Modbus server pojmenujte a vyplňte adresu ve formátu
    [IP adresa Ventboxu]:502


    Prodleva po spuštění 120s je volitelná

  5. Aplikujte nainstalovanou šablonu (pokud není v seznamu vidět, restartuje Loxone Config) – ve stromě vybrat nově přidaný Modbus server, v liště Sensors and Actuators, Device Templates a konečně Thermwet Ventbox:
  6. Zadejte Modbus adresu zvolenou v kroku 2
  7. 1. část hotova, můžete vytáhnout senzory na stránku, uložit, spustit Live View a zkontrolovat vyčítané údaje:
  8. Aby se dal zcela ovládat výkon Ventboxu, je potřeba jej přepnout do automatického režimu (všechny ostatní režimy totiž příkazy z nadřazeného systému (=Loxone) přebíjí):
  9. Dále je potřeba v celém plánovači automatického režimu ve Ventboxu nastavit vypnuto (bílý čtvereček). To je proto, že sejde-li se víc požadavků (plánovač, nadřazený systém, …), Ventbox použije maximální hodnotu. Nastavte tedy úplně všude (ve všech dnech, 0-24) vypnuto:

    Díky tomu bude platit, že pokud v Loxone nastavíte požadovaný výkon 0, jednotka se vypne.
  10. Aktory – Ventbox očekává od nadřazeného systému refresh hodnot nejpozději každých 15s, jinak přejde do defaultu. Nastavte tedy u zvolených aktorů periodu znovuodesílání 5s. Pro test přiveďte konstantní hodnotu do aktoru. Například zde 100:

    Výsledek je vidět na webovém rozhraní:

    Alternativně si můžete potřebné refreshe řídit sami generátorem pulzů a analogovou pamětí:

Dostal jsem zprávu, že se chystá verze 2.14, která by měla umět mimo jiné přímé ovládání zapnuto/vypnuto, přetlak, Bypass, rozsah letního režimu, … Pokusím se zaktualizovat šablonu, jakmile bude k dispozici.

Nakonec je to rovnou 2.15, zatím nijak zvlášť otestovaná šablona zde: MB_ThermWet_Ventbox_215.zip

Aleš Berka (Aleq)

Integrace Hormann UAP1 do Loxone

Integrace Hormann UAP1 do Loxone

Integrace garážových vrat Hörmann přes modul UAP1 do Loxone vyžaduje lehce komplexnější řešení než přímé napojení na povely vrata nahoru, případně vyčítání polohy vrat. Je to nedostatečné, protože logika Loxone prvku Garážových vrat je jiná, než jak se chová UAP1. Příklad – vrata jedou nahoru: pokud v Loxone stisknu podruhé nahoru, prvek zastaví otevírání. UAP1 ne, při druhém impulzu stejným směrem nerušeně pokračuje dál. Ještě horší to bylo při změně směru. Jedou-li vrata nahoru a stisknu v Loxone dolů, Loxone zastaví – stejně jako UAP1. Jedou-li vrata ale zrovna dolů, chápe to UAP1 zřejmě jako reakci na možné nebezpečí, vrata nezastaví, ale rovnou je začne otevírat. Ovládací prvek Loxone v této situaci zastaví. Jednoduché zapojení a konfigurace v Loxone funguje spolehlivě pouze z výchozích poloh.

Řešení (díky Chrispiemu z loxforum.com [1] za nápad) je použít 3. výstup pro nouzové zastavení (a blokování jakéhokoliv dalšího pohybu) v UAP1 na kontaktech 12-13. Je potřeba dávat pozor na to, že tento kontakt je obrácený – tj. je-li sepnuto (ON v Loxone), tak vrata fungují normálně. V momentě, kdy se tento kontakt rozpojí, vrata svůj pohyb zastaví. Přímé napojení na negovaný AND obou výstupů (nahoru a dolů) z ovládacího prvku zafunguje, znefunkční ale ovládání zvenku (mimo Loxone), např. dálkové ovládání. Pokud totiž vrata zrovna nejedou, kontakt nouzového zastavení (= Reset) bude přerušený a vrata blokovaná. Řešením je vyslat pouze opačný impulz (krátce rozpojit) po ukončení pohybu (tj. jakmile není žádný výstup na Qo a Qc). To zastaví a resetne pohon. Impulz musí být kratší než Motor lock (konfigurovatelné v ovládacím prvku garážových vrat v Loxone), jinak by to mohlo blokovat i další příkazy.

Loxone Config:

Ovládací prvek garážových vrat je nutno přepnout na DIRECT (Connection Type) – aby byl výstup Qo či Qc trvale sepnutý během požadovaného pohybu. Implicitní chování je totiž pouze posílat impulzy.

Vstupy UAP1:
– UAP1 příkaz otevřít (15-20) – Q4 na screenshotu
– UAP1 příkaz zavřít (17-20) – Q2 na screenshotu
– UAP1 povoleno (12-13) – Q7 na screenshotu; negovaný výstup – jeho rozpojením zastavíme a a po dobu rozpojení zakážeme pohyb vrat

Výstupy UAP1:
– UAP1 signalizující vrata kompletně otevřená (01) – AI3 na screenshotu
– UAP1 signalizující vrata kompletně zavřená (02) – AI2 na screenshotu
(Volitelné) UAP1 signalizující vrata v pohybu (03), AI4 na screenshotu. Pro tuto funkci je ale nutno nastavit položku 29 v konfiguračním menu na pohonu Supramatic – přidat tam tu tečku. Viz návod k pohonu.

Poznámka:
V mém případě došly digitální vstupy, proto jsou použity analogové (přepnuté na digitální). Vy samozřejmě použijte digitální (Ix), máte-li je volné.

 

Aleš Berka (Aleq)

Read More Read More

MBUSD – sw modbus gateway jako náhrada za Modbus extension

MBUSD – sw modbus gateway jako náhrada za Modbus extension

Úvod

Pokud potřebujete v Loxone komunikovat se zařízeníma pomocí Modbus RTU protokolu, máte několik možností, jak daný problém vyřešit. Buď koupit drahý Modbus extension, nebo si koupit převodník Modbus RTU <-> TCP, nebo využít svého domácího servříku a zprovoznit sw gateway. S ohledem na cenu a kybernetickou bezpečnost je volba jasná. Sw gateway, která má otevřený zdrojový kod. K provozování budeme potřebovat nějaký stroj s linuxem a převodník USB-RS485. V našem návodu použijeme stroj s nainstalovaným Debianem. Není třeba instalovat grafické prostředí – zbytečně zabírá operační paměť a reálně ho vůbec nepotřebujeme. Převodník propojíme se zařízeníma, ze kterých chcete číst, připadně zapisovat modbus registry a zasuneme do USB portu linuxového stroje. Pokud doma ještě nemáme linuxový server, může posloužit i obyčejné raspbery, banán, orange, … Převodník USB-RS485 se dá koupit na Aliexpressu od jednoho do několika $.

Update 31.03.2018: Nově jsem vytvořil plugin do LoxBerry, takže kdo má LoxBerry, tak pouze nainstaluje plugin a má hotovo. Konfigurace je jednoduchá přes Webové rozhraní pluginu. http://www.loxwiki.eu/display/LOXBERRY/Modbus+Gateway

MBUSD

Nyní nainstalujeme potřebné náležitosti, stáhneme MBUSD a provedeme kompilaci:

sudo -s
apt-get install git linux-headers-`uname -r` build-essential uucp eclipse-cdt-autotools
cd /usr/local/src/
git clone https://github.com/3cky/mbusd.git mbusd.git
cd mbusd.git
mkdir -p build && cd build
cmake -DCMAKE_INSTALL_PREFIX=/usr ..
make
make install

Po úspěšné kompilaci můžeme vyzkoušet spuštěním příkazu mbusd s patřičnými parametry. Použil jsem následující:

sudo mbusd -d -p /dev/ttyUSB0 -s 9600 -P 502 -v2

kde:

  • /dev/ttyUSB0 je port na kterém máte převodník
  • 9600 je přenosová rychlost RS485 a tedy i modbus zařízení (tu je třeba mít stejnou s tou, která je na zařízeních – většina zařízení ji umožňuje měnit)
  • 502 je TCP Port
  • V2 je úroveň ukecanosti logu

Parametry si upravíte podle svých potřeb.

Příkaz mbusd –help vyjede komplexnější popis, nicméně vám pravděpodobně bude stačit to, co jsem uvedl.
Při ladění je dobré využít parametr -d, který zabrání spuštění na pozadí, případně můžete zvýšit ukecanost až na -v9.

Autoři dodělali podporu systemd, takže lze všechno krásně provozovat jako 1 – n služeb.
Službu spustíte příkazem sudo systemctl start [email protected] kde ttyUSBx je port s převodníkem. Služba se spustí s konfigurací dle /etc/mbusd/mbusd-ttyUSBx.conf
Příklad konfigurace s převodníkem jako ttyUSB0:

sudo nano /etc/mbusd/mbusd-ttyUSB0.conf

Vložíme a uložíme:

########## Serial port settings #############

# Serial port device name
device = /dev/ttyUSB0

# Serial port speed
speed = 9600

# Serial port mode
mode = 8n1

# RS-485 data direction control type (addc, rts, sysfs_0, sysfs_1)
trx_control = addc

# Sysfs file to use to control data direction
# trx_sysfile =

############# TCP port settings #############

# TCP server port number
port = 502

# Maximum number of simultaneous TCP connections
maxconn = 32

# Connection timeout value in seconds
timeout = 60

######### Request/response settings #########

# Maximum number of request retries
retries = 3

# Pause between requests in milliseconds
pause = 100

# Response wait time in milliseconds
wait = 500

Po uložení spustíme službu a nastavíme její automatické spouštění:

sudo systemctl start [email protected]
sudo systemctl enable [email protected]

A analogicky stejně si můžeme vytvořit n dalších slžeb pro další převodníky třeba s jinými paremetry v konfiguračním souboru.
Je třeba pamatovat, že co služba, to samostatný převodník.

V loxone je třeba přidat modbus server. Stoupnete si na Komunikace Miniserveru a kliknete na ikonku Modbusserver.
Vyplníte název – např.: MBUSD
Adresa – <IP_stroje_s_mbusd>:<port_mbusd> (např.: 192.168.1.10:502)
Čekající doba startu jsem dal 5
Timeout jsem dal 500

Dále již zbývá pouze vložit modbus zařízení a jeho senzory (čtení), případně aktory (zápisy), nebo vybrat z předdefinovaných zařízení.

Já čtu elektroměry Eastron SDM630 (třífázový) a SDM120 (jednofázový). Loxone má SDM630 předdefinovaný a SDM120 funguje na tu samou konfiguraci, akorát si vyházíte senzory pro 2. a 3. fázi. Oproti použití s Modbus extension jsem ve všech senzorech elektroměru musel zaškrtnout parametr Pořadí registru. SDM630 se dá na Aliexpressu koupit za necelých 80$, SDM120 za 22$. Pozor, vyrábí se i verze bez modbus!

Autor článku: Zmáťa

Logování – vzdálený syslog

Logování – vzdálený syslog

Úvod

Loxone nabízí možnost využití vzdáleného logu, tedy odesílání zpráv logu do logu na jiném zařízení. Výhoda je jasná – logování na SD kartu Loxone snižuje životnost SD karty a navíc na vzdáleném stroji si můžete log analyzovat. K tomu, aby šlo vzdálený log využít, potřebujeme nějaký stroj s Linuxem, nainstalovaným balíčkem rsyslog, webovým serverem s PHP (volitelně s databází). V našem návodu použijeme stroj s nainstalovaným Debianem. Není třeba instalovat grafické prostředí – zbytečně zabírá operační paměť a reálně ho vůbec nepotřebujeme. Já osobně používám virtuální server na svém domácím serveru.

LoxBerry plugin

Od 4.4.2018 je celé řešení k dispozici jako plugin Syslog Server do LoxBerry.

Rsyslog

V Debianu by měl být rsyslog defaultně nainstalovaný. Pokud není, nainstaluje se pomocí:

sudo apt-get install rsyslog

Následně provedeme konfiguraci:

sudo nano /etc/rsyslog.conf

Odkomentujeme řádky týkající se přístupu přes UDP a TCP:

# provides UDP syslog reception
$ModLoad imudp
$UDPServerRun 514
# provides TCP syslog reception
$ModLoad imtcp
$InputTCPServerRun 514

Dále pak zakomentujeme řádek s definicí formátu datumu, abychom měli plný timestamp:

#
# Use traditional timestamp format.
# To enable high precision timestamps, comment out the following line.
#
#$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat

Dále vytvoříme konfiguraci pro Loxone:

sudo nano /etc/rsyslog.d/loxone.conf

A vložíme do ní konfiguraci přesměrování zpráv z Loxone do samostatného Log souboru.
192.168.1.10 nahradíme adresou Loxone miniserveru:

# změnit skupinu vytvořeného logu na www-data, aby ji mohl číst LogAnalyzer
$FileGroup www-data

# zpracuj zprávy z Loxone do separátního souboru
:fromhost-ip, isequal, "192.168.1.10" /var/log/loxone.log
& ~
# pouze zprávy odjinud než z Loxone budou pokračovat dál

# Vrátit skupinu pro ostatní Logy na default
$FileGroup adm

Restartujeme Rsyslog:

sudo service rsyslog restart

Nastavení Loxone

V Loxone Configu si ve stromu rozbalíme položku Miniserveru, stoupneme na “Zprávy” a klikneme na ikonku Logger. Tím vložíme nový Logger. Přidělíme mu jméno dle libosti a adresu /dev/syslog/<ip_log_serveru>
Pak již běžně přiřazujeme Logger

Analyzování

Adiscon Log Analyzer

K provozování potřebujeme nainstalovat na logserver webserver a php:
(pokud používáte již existující stroj s PHP, zkontrolujte, že máte v apache2 nainstalovaný a aktivovaný mode php; na čisté instalaci se vše provede samo)

sudo apt-get install apache2 php

Stáhneme z oficiálních stránek: http://loganalyzer.adiscon.com/ Cestu za příkazem wget samozřejmě změníme na aktuální. Adekvátně k tomu pak všechny příkazy s loganalyzer-4.1.6 upravit na adekvátní název souboru / adresáře.
Pak rozbalíme a obsah adresáře src zkopírujeme do /var/www/loganalyzer
Pak změníme vlastníka:

wget http://download.adiscon.com/loganalyzer/loganalyzer-4.1.6.tar.gz
sudo tar -xvzf loganalyzer-4.1.6.tar.gz
sudo rm loganalyzer-4.1.6.tar.gz
sudo mkdir /var/www/loganalyzer
sudo cp -r loganalyzer-4.1.6/src/* /var/www/loganalyzer
sudo chown -Rv www-data:www-data /var/www/loganalyzer

Nyní si zkonfigurujeme webserver pro loganalyzer. Vytvoříme soubor /etc/apache2/conf-available/loganalyzer.conf:

sudo nano /etc/apache2/conf-available/loganalyzer.conf

a vložíme do něho následující:

Alias /loganalyzer "/var/www/loganalyzer/"

<Directory /var/www/loganalyzer/>
  Options +FollowSymlinks
  AllowOverride All
  Satisfy Any

 <IfModule mod_dav.c>
  Dav off
 </IfModule>

 SetEnv HOME /var/www/loganalyzer
 SetEnv HTTP_HOME /var/www/loganalyzer

</Directory>

Uděláme link pro aktivaci a restartneme webserver:

sudo ln -s /etc/apache2/conf-available/loganalyzer.conf /etc/apache2/conf-enabled/loganalyzer.conf
sudo service apache2 restart

Upravíme parser “misc” pro potřeby Loxone. Jedná se o upravený standardní parser pro syslog. Pro každý ze sedmi typů řádku v syslogu jsem přidal MESSAGETYPE Loxone1 – 7, aby bylo jednoduché určit, která část parseru je případně třeba upravit. V současné době je upravena Loxone2 a Loxone6 – to je log s jednoduchým datumem a precisním datumem, oba odpovídající tomu, co mi posílá Loxone. Pokud se někomu objeví jiný MESSAGETYPE, je třeba odladit další část parseru

sudo nano /var/www/loganalyzer/classes/logstreamlineparsermisc.class.php

A celý obsah nahradíme tímto:

<?php
/*
        *********************************************************************
        * LogAnalyzer - http://loganalyzer.adiscon.com
        * -----------------------------------------------------------------     *
        * Loxone Smart Home Miniserver Log Parser Class 
        *********************************************************************
*/

// --- Avoid directly accessing this file! 
if ( !defined('IN_PHPLOGCON') )
{
        die('Hacking attempt');
        exit;
}
// --- 

// --- Basic Includes
require_once($gl_root_path . 'classes/enums.class.php');
require_once($gl_root_path . 'include/constants_errors.php');
require_once($gl_root_path . 'include/constants_logstream.php');
// --- 


class LogStreamLineParsermisc extends LogStreamLineParser {
//      protected $_arrProperties = null;

        // Constructor
        public function __construct () {
                return; // Nothing
        }
        public function LogStreamLineParsermisc() {
                self::__construct();
        }

        /**
        * ParseLine
        *
        * @param arrArguments array in&out: properties of interest. There can be no guarantee the logstream can actually deliver them.
        * @return integer Error stat
        */
       public function ParseLine($szLine, &$arrArguments)
        {
                // Sample (Syslog): Mar 10 14:45:44 debandre anacron[3226]: Job `cron.daily' terminated (mailing output)
                if ( preg_match("/(...)(?:.|..)([0-9]{1,2} [0-9]{1,2}:[0-9]{1,2}:[0-9]{1,2}) ([a-zA-Z0-9_\-\.]{1,256}) ([A-Za-z0-9_\-\/\.]{1,32})\[(.*?)\]:(.*?)$/", $szLine, $out ) )
                {
                        $arrArguments[SYSLOG_MESSAGETYPE] = 'Loxone1';
                        // Copy parsed properties!
                        $arrArguments[SYSLOG_DATE] = GetEventTime($out[1] . " " . $out[2]);
                        $arrArguments[SYSLOG_HOST] = $out[3];
                        $arrArguments[SYSLOG_SYSLOGTAG] = $out[4];
                        $arrArguments[SYSLOG_PROCESSID] = $out[5];
                        $arrArguments[SYSLOG_MESSAGE] = $out[6];
                }
                // Sample (Syslog): Mar 10 14:45:39 debandre syslogd 1.4.1#18: restart
                else if ( preg_match("/(...)(?:.|..)([0-9]{1,2} [0-9]{1,2}:[0-9]{1,2}:[0-9]{1,2}) ([a-zA-Z0-9_\-\.]{1,256}) ([A-Za-z0-9_\-\/\.]{1,32}):(.*?)$/", $szLine, $out ) )
                {
                        $arrArguments[SYSLOG_MESSAGETYPE] = 'Loxone2';
                        $loxone = $out[3]. ';'. $out[4].':'.  $out[5]. $out[6];
                        $loxone = str_replace(': ',':',$loxone);
                        $loxone = str_replace('#015','',$loxone);
                        $loxone = str_replace('#01','',$loxone);
                        $loxout = explode(';',$loxone);
                        // Copy parsed properties!
                        $arrArguments[SYSLOG_DATE] = GetEventTime($loxout[0]. ' '. $loxout[1]);
                        $arrArguments[SYSLOG_PROCESSID] = $loxout[2];
                        $arrArguments[SYSLOG_MESSAGE] = $loxout[3];
                }
                // Sample (Syslog): Mar 10 14:45:39 debandre syslogd restart
                else if ( preg_match("/(...)(?:.|..)([0-9]{1,2} [0-9]{1,2}:[0-9]{1,2}:[0-9]{1,2}) ([a-zA-Z0-9_\-\.]{1,256}) ([A-Za-z0-9_\-\/\.]{1,32}) (.*?)$/", $szLine, $out ) )
                {
                        $arrArguments[SYSLOG_MESSAGETYPE] = 'Loxone3';
                        // Copy parsed properties!
                        $arrArguments[SYSLOG_DATE] = GetEventTime($out[1] . " " . $out[2]);
                        $arrArguments[SYSLOG_HOST] = $out[3];
                        $arrArguments[SYSLOG_SYSLOGTAG] = $out[4];
                        $arrArguments[SYSLOG_MESSAGE] = $out[5];
                }
                // Sample (Syslog): Mar 7 17:18:35 debandre exiting on signal 15
                else if ( preg_match("/(...)(?:.|..)([0-9]{1,2} [0-9]{1,2}:[0-9]{1,2}:[0-9]{1,2}) (.*?) (.*?)$/", $szLine, $out ) )
                {
                        $arrArguments[SYSLOG_MESSAGETYPE] = 'Loxone4';
                        // Copy parsed properties!
                        $arrArguments[SYSLOG_DATE] = GetEventTime($out[1] . " " . $out[2]);
                        $arrArguments[SYSLOG_HOST] = $out[3];
                        $arrArguments[SYSLOG_MESSAGE] = $out[4];
                }
                // Sample (RSyslog): 2008-03-28T11:07:40+01:00 localhost rger: test 1
                else if ( preg_match("/([0-9]{4,4}-[0-9]{1,2}-[0-9]{1,2}T[0-9]{1,2}:[0-9]{1,2}:[0-9]{1,2}.[0-9]{1,2}:[0-9]{1,2}) (.*?) (.*?):(.*?)$/", $szLine, $out ) )
                {
                        $arrArguments[SYSLOG_MESSAGETYPE] = 'Loxone5';
                        // Copy parsed properties!
                        $arrArguments[SYSLOG_DATE] = GetEventTime($out[1]);
                        $arrArguments[SYSLOG_HOST] = $out[2];
                        $arrArguments[SYSLOG_SYSLOGTAG] = $out[3];
                        $arrArguments[SYSLOG_MESSAGE] = $out[4];
                }
                // Sample (RSyslog): 2017-10-24T10:37:48.680031+02:00 2017-10-24 10:37:50;Kotel - spínání;Off#015
                else if ( preg_match("/([0-9]{4,4}-[0-9]{1,2}-[0-9]{1,2}T[0-9]{1,2}:[0-9]{1,2}:[0-9]{1,2}\.[0-9]{1,6}.[0-9]{1,2}:[0-9]{1,2}) (.*?) (.*?):(.*?)$/", $szLine, $out ) )
                {
                        $arrArguments[SYSLOG_MESSAGETYPE] = 'Loxone6';
                        $loxone = $out[2]. ';'. $out[3].':'.  $out[4]. $out[5];
                        $loxone = str_replace(': ',':',$loxone);
                        $loxone = str_replace('#015','',$loxone);
                        $loxone = str_replace('#01','',$loxone);
                        $loxout = explode(';',$loxone);
                        // Copy parsed properties!
                        $arrArguments[SYSLOG_DATE] = GetEventTime($loxout[0]. ' '. $loxout[1]);
                        $arrArguments[SYSLOG_PROCESSID] = $loxout[2];
                        $arrArguments[SYSLOG_MESSAGE] = $loxout[3];
                }
                // Sample: 2008-03-28T15:17:05.480876+01:00,**NO MATCH**
                else if ( preg_match("/([0-9]{4,4}-[0-9]{1,2}-[0-9]{1,2}T[0-9]{1,2}:[0-9]{1,2}:[0-9]{1,2}\.[0-9]{1,6}.[0-9]{1,2}:[0-9]{1,2}),(.*?)$/", $szLine, $out ) )
                {
                        $arrArguments[SYSLOG_MESSAGETYPE] = 'Loxone7';
                        // Some kind of debug message or something ...
                        $arrArguments[SYSLOG_DATE] = GetEventTime($out[1]);
                        $arrArguments[SYSLOG_MESSAGE] = $out[2];
                }
                else
                {
                        if ( isset($arrArguments[SYSLOG_MESSAGE]) && strlen($arrArguments[SYSLOG_MESSAGE]) > 0 ) 
                                OutputDebugMessage("Unparseable syslog msg - '" . $arrArguments[SYSLOG_MESSAGE] . "'", DEBUG_ERROR);
                }

                // If SyslogTag is set, we check for MessageType!
                if ( isset($arrArguments[SYSLOG_SYSLOGTAG]) )
                {
                        if ( strpos($arrArguments[SYSLOG_SYSLOGTAG], "EvntSLog" ) !== false ) 
                                $arrArguments[SYSLOG_MESSAGETYPE] = IUT_NT_EventReport;
                }

                // Return success!
                return SUCCESS;
        }


}
?>

Na závěr provedeme konfiguraci. Spustíme v prohlížeči http://<log_server>/loganalyzer Načte se stránka Critical Error occured, s odkazem Click here to Install Adiscon LogAnalyzer! Kliknete na “here” a spustí se průvodce. Během konfigurace zvolíme Logline type na Miscellaneous Logfiles a Syslog file na náš Log soubor z Loxone.
Konfigurace se uloží do souboru /var/www/loganalyzer/config.php Pokud chceme udělat celý proces konfigurace znovu, stačí tento soubor vymazat a znovu jít na stránku. Po konfiguraci je třeba pro podporu českých znaků změnit v config.php parametr $CFG[‘HeaderDefaultEncoding’] na ENC_UTF8 .

Autor článku: Zmáťa

Použití NFC po 1-Wire sběrnici (DS2401)

Použití NFC po 1-Wire sběrnici (DS2401)

Další zajímavý projekt postavený na Arduinu, který bych zde rád představil, integruje čtení NFC karet.

Zdrojové kódy

http://jirin.deso.cz/NFC_to_1-Wire/

Video tutoriál

Potřebný hardware

Pro výrobu toho modulu budete potřebovat Arduino, doporučuji Pro Mini či Nano kvůli velikosti (lze je bez problémů strčit do krabice).


Odkazy na zakoupení:
https://www.aliexpress.com/wholesale?SearchText=arduino+pro+mini+5v+atmega328
https://www.aliexpress.com/wholesale?SearchText=arduino+nano

Další důležitá věc je čtečka NFC karet, tento projekt je postaven na PN532:

Odkaz na Aliexpress: https://www.aliexpress.com/wholesale?SearchText=pn532

Zapojení

Arduino je potřeba s čtečkou propojit pomocí 6ti drátů.

  • VCC čtečky jde na 5 V Arduina
  • GND čtečky jde na GND Arduina
  • SS čtečky => pin D9 Arduina
  • MOSI čtečky => pin D10 Arduina
  • MISO čtečky => pin D11 Arduina
  • SCK čtečky => D12 Arduina

Čtečku je nutné přepnout do SPI módu pomocí malých přepínačů:

Dále jsou používány piny D4–D8, ale záleží na tom, jaké módy se rozhodnete používat (zmíněno níže). Zde je standardní stav, pokud jsou povoleny všechny módy a piny nejsou změněny:

  • D8 – 1-Wire výstup (připojit na 1-Wire extension)
  • D7 – pulzní výstup
  • D6 – načtena neznámá karta
  • D5 – načtena validní karta
  • D4 – čtečka je v učícím se režimu + notifikace o nově naučené kartě (připojit na notifikační diodu)

Módy, možnosti použití

Je možné využívat 4 různých módů, které lze libovolně kombinovat.

ONE_WIRE_MODE

Tento mód je víceméně primární, kvůli kterému byla aplikace původně vyvinuta. Pokud je povolen, tak se Arduino po načtení karty vydává za DS1990 / DS2401 1-Wire zařízení. Při použití Mifare Classic (4 byty) se vyplní byty 2 a 3 hodnotou 0x00, pro Mifare Ultralight (7 bytů) je nutné přeskočit jeden byte, takže se vynechá první. Simulované 1-Wire zařízení lze zachytit pomocí Loxone 1-W extension, ale třeba také i pomocí UDP 1-W gateway.

PULSE_MODE

Pokud je tento mód aktivován dochází k pulzu na pinu 7. Důvod proč byl uveden byl požadavek na identifikaci specifické čtečky (při použití více čteček).

DB_MODE

Pomocí tohoto módu si můžete do Arduina definovat svoje karty. Jsou využívány piny 5 a 6, kdy se podle toho, jestli je načtena známá či neznámá karta, pošle pulz na jeden z nich. Takto vydefinované karty lze pak použít v následujícím „učícím se“ módu jako tzv. master karty.

LEARNING_MODE

Tento mód je nutné provozovat s předchozím (DB_MODE). Funguje tak, že je možné Arduino učit nové karty, bez toho, aby bylo nutné pokaždé do modulu nahrát nový sketch s aktualizovaným seznamem karet. Postup učení je následující:

  1. Na čtečku se přiloží master karta (definovaná v DB_MODE)
  2. Po 10ti vteřinách se rozsvítí notifikační dioda (výstup D4)
  3. Během 60 sekund je nutné na čtečku přiložit novou kartu
  4. Dojde k trojbliku diody a v tento okamžik je karta uložena do EEPROM

Vzhledem k limitu velikosti EEPROM je maximální limit 100 karet.

Zapnutí / vypnutí módů

Logiku sketche lze jednoduše ovlivnit pomocí řádků:

#define ONE_WIRE_MODE
#define PULSE_MODE
#define DB_MODE
#define LEARNING_MODE

Pokud chcete použít kupříkladu jen 1-Wire móde upravte tyto řádky na:

#define ONE_WIRE_MODE
//#define PULSE_MODE
//#define DB_MODE
//#define LEARNING_MODE

Použití v Loxone

NFC karty se vydávají za běžné DS1990 / DS2401 1-Wire zařízení a podle toho s nimi i Loxone pracuje. Stačí aktivovat 1-Wire monitor, přiložit kartu a přidat si ji jako nové zařízení.

S pulzními výstupy pak lze pracovat jako s každým jiným digitálním vstupem v Loxonu.

Další vývoj

Do budoucna uvažuji o verzi s rolling codes (do EEPROM a kartu se budou zapisovat náhodná čísla, která musí odpovídat).

Dále se zde určitě objeví i velmi příbuzný projekt, který s systémy řízení přístupů také velmi souvisí – klávesnice, která se také bude vydávat za DS1990 / DS2401. Bude ji tak možné velmi jednoduše integrovat, třeba i v jednom projektu s touto NFC čtečkou.

Autor článku a projektu: Jiří Jaša, http://www.deso.cz