Browsed by
Category: Loxone

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

Zigbee brána pomocí Raspbery PI

Zigbee brána pomocí Raspbery PI

Tak, úvod o Zigbee spolu s důvody, proč je tak úžasný, máme za sebou z minula  a dneska se pojďme podívat na samotné rozchození.

Co budem potřebovat

Na provoz vlastní Zigbee brány budete potřebovat buď Raspberry (doporučuju RaspPI novější než v1. Na té to sice běží, ale dost pomalu). A nebo nějaký NAS nebo linuxový stroj, kde Vám pojede například Docker.

Dále pak komponenty na výrobu Zigbee brány:

A případně nějaká čidla na vyzkoušení

Já jsem se nakonec vydal cestou Raspberry 3 B+ , protože se mi nepovedla Zigbee USB rozchodit pod ESXI (ten ho chybně identifikoval jako USB drive a celý tuhnul). Zatím mi na Raspberry běží jen zigbee2mqtt, ale výhledově ho chci zkusit rozchodit spolu s Loxberry.

Flashnutí CC2531 USB snifferu

Jako první krok je potřeba stáhnout Flash Programmer (verzi 1, nikoli v2). Je nutná registrace, která je ale zdarma. Dále pak nainstalovat CC Debugger driver (zatím jen instalujte, nic nezapojujte do PC).

Nyní propojte všechny tři zakoupené komponenty z prvního seznamu mezi sebou (CC Debugger – Downloader Cable — USB Sniffer). Z USB Snifferu je potřeba vyndat chráničku, která je na pinech nastrčená. Měli byste získat celek, který má na obou koncích USB koncovku.

Propojku na USB sniffer připojte tak, že červená linka na kabelech je na straně, kde není USB zásuvka.

Nyní připojte USB kabel z CC Debugeru a ověřte, že zařízení vidíte ve správci zařízení. Mně tento krok sám o sobe nefungoval a bylo potřeba ještě ručně nainstalovat driver ze souboru swrc212a.zip z podsložky cebal\win_64bit_x64.

Pokud ve správci zařízení vidíte CC Debugger, připojte i USB Sniffer. Takže budete mít oba USB porty zapojené.

Nyní na CC Debugeru zmáčněte tlačítko Reset, čímž by se měla kontrolka rozsvítit zeleně.

Spusťte aplikaci Flash Programmer, kde byste v horním seznamu měli vidět CC Debuger zařízení. Pokud nevidíte, znamená to, že Vám nefunguje výše zmíněný driver. Zkontrolujte ho a případně nainstalujte.

Stáhněte custom firmware pro USB Sniffer https://raw.githubusercontent.com/Koenkk/Z-Stack-firmware/master/coordinator/CC2531/bin/CC2531ZNP-Prod.hex (přes klik pravým tlačitkem a save as).

V aplikaci zvolte custom firmware a vyberte soubor stažený v předchozím kroku.

Odškrtněte “Retain IEEE address when reprogramming the chip” a stiskněte “Perform flash”.

Počkejte, než se USB sniffer zase rozsvítí zeleně. Tím poznáte, že je přeprogramování hotovo.

Aplikaci můžete ukončit a sniffer vyndat z Vašeho PC:

Pokud používáte Linux, nebo se chcete podívat na původní návod, tak ten je k dispozici zde: https://github.com/Koenkk/zigbee2mqtt/wiki/Getting-started

Instalace na Raspberry

Tady je postup vcelku primitivní a funguje přesně jak je popsáno zde: https://github.com/Koenkk/zigbee2mqtt/wiki/Running-the-bridge

Jako první krok odpojte CC Debugger a Downloader kabel a připojte USB Sniffer do Raspberry. Pak zjistěte, zda Vaše Raspberry vidí USB Sniffer. To zjistíte tak, že ve složce /dev uvidíte ttyACM0. Takže zkuste například

ls -l /dev/ttyACM0

Pro samotnou instalaci postupně spusťte kroky popsané na výše zmíněné stránce. Tzn:

sudo curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash -
sudo apt-get install -y nodejs git make g++ gcc
sudo git clone https://github.com/Koenkk/zigbee2mqtt.git /opt/zigbee2mqtt
sudo chown -R pi:pi /opt/zigbee2mqtt
cd /opt/zigbee2mqtt
npm install

Pokud se něco nepovede, zkuste zkontrolovat verze npm a verzi node dle popisu v gihubu. Mně vše fungovalo napoprvé.

Když budete mít nainstalováno, je potřeba ještě zigbee2mqtt nakonfigurovat. To se dělá v souboru /opt/zigbee2mqtt/data/configuration.yaml.

Konfiguraci proveďtě pomocí nástroje nano:

nano /opt/zigbee2mqtt/data/configuration.yaml

upravte MQTT bránu dle Vašeho nastavení a soubor uložte (CTRL+O a ukončete pomocí pomocí CTRL+X).

Nyní zigbee2mqtt spusťte a otestujte, že vše jede.

cd /opt/zigbee2mqtt
npm start

Měli byste vidět něco jako:

2018-12-04 17:12:03 INFO Starting zigbee-shepherd
2018-12-04 17:12:04 INFO zigbee-shepherd started
2018-12-04 17:12:04 INFO Currently 0 devices are joined:
2018-12-04 17:12:04 INFO Connecting to MQTT server at mqtt://mqtt.dum
2018-12-04 17:12:04 INFO zigbee-shepherd ready
2018-12-04 17:12:04 INFO Connected to MQTT server

Automatické spouštění po startu

Pokud chcete, aby se brána spouštěla automaticky při restartu Raspberry, je potřeba ještě zaregistrovat zigbee2mqtt jako service.

sudo nano /etc/systemd/system/zigbee2mqtt.service

Vložit:

[Unit]
Description=zigbee2mqtt
After=network.target

[Service]
ExecStart=/usr/bin/npm start
WorkingDirectory=/opt/zigbee2mqtt
StandardOutput=inherit
StandardError=inherit
Restart=always
User=pi

[Install]
WantedBy=multi-user.target

A opět uložit a ukončit (CTRL+O, CTRL+X).

Nyní službu nahoďtte a podívejte se, že běží

sudo systemctl start zigbee2mqtt
systemctl status zigbee2mqtt.service

a pak ji povolte jako automatickou

# Start zigbee2mqtt
sudo systemctl start zigbee2mqtt

# Show status
systemctl status zigbee2mqtt.service

A tady ještě několik užitečných příkazů, především pak ten poslední, pomocí kterého se můžete podívat na log zigbee2mqtt i když běží na pozadí (hodí se při párování dalších zařízení).

# Stopping zigbee2mqtt
sudo systemctl stop zigbee2mqtt

# Starting zigbee2mqtt
sudo systemctl start zigbee2mqtt

# View the log of zigbee2mqtt
sudo journalctl -u zigbee2mqtt.service -f

Celý návod je opět dostupný zde:https://github.com/Koenkk/zigbee2mqtt/wiki/Running-the-bridge . Stačí následovat krok za krokem.

Při prvním testování doporučuji zigbee2mqtt spustit jen z příkazové řádky (ne jako service). Lépe uvidíte, co se uvnitř děje.

Párování zařízení

Párování samotné je občas vcelku věda. Každé zařízení má totiž vlastní postup, jak vyvolat párovací proces. Zatím mám vyzkoušené jen výše uvedená zařízení, ale ostatní snad už budou podobné.

Na zigbee2mqtt wiki je opět článek o párování, ale ten mi pomohl jen částečně.

Samotný zigbee2mqtt provádí párování cca jednou za minutu. Je proto potřeba se jednak trefit do tohoto časového okna (info o párování vidíte v logu) a udržet párované zařízení online.

V případe Xiaomi teploměru šlo všechno hladce. Stačilo podržet tlačítko teploměru po dobu cca 5 sekund a nacházet se v blízkosti USB sniferu.

V případě Xiaomi cube to byl boj. Co totiž na webu nepíšou je, že zařízení usíná. Je tedy potřeba opravdu trefit párovací okno, nejprve držet párovací tlačítko cca 5sekund, kdy se 3x rozbliká modře dioda. Pak párovací tlačítko pustit a dioda blikne ještě jednou (tím pravděpodobně potvrzuje, že se rozjel párovací proces). A nyní je potřeba cca jednou za sekundu jen krátce zmáčknout tlačítko. Tím kostku udržujete vzhůru. Jakmile se kostka přihlásí v logu zigbee2mqtt, můžete zběsilého mačkání nechat.

A na závěr Ikea žárovka. Tam se pro změnu párování dělá střídavým zapínáním a vypínáním, navíc je potřeba mít USB Zigbee sniffer jen pár cm od žárovky, ideálně úplně na ní.

Na tyhle účely jsem si vyrobil kabel s vypínačem a objímkou, abych mohl žárovku pustit přímo vedle Raspberry. Poté, co žárovku umístíte k Zigbee Snifferu, je potřeba 6x zapnout a vypnout žárovku tak, že ji vždy jen na chviličku zapnete, aby se téměř nestihla rozsvítit a pak na delší dobu vypnete (cca 0.5s zapnout a třeba 1s vypnout). Po těchto šesti ji nechte buď zaplou, nebo dál blikejte.

Závěrem

Jak vidíte, párování není úplně snadné :). Ale s trochou cviku to už jde.

A to je pro dnešek vše. Návod už je docela dlouhý, ale přitom je myslím vcelku snadný. Příště pak bude následovat ukázka, jak z MQTT dostat data přes NodeRED až do Loxone.

PS:

Ještě jen doplním pár vět ohledně diskuze před minulým článkem. Co by se mi opravdu líbilo, je PLC Zigbee na DIN lištu. Aby to bylo zase hloupé a nahraditelné zařízení, stejně jako třeba Quido nebo jiná seriovka. Něco málo jsem našel, ale ceny nejsou moc příjemné. Pokud by někdo věděl, dejte vědět.

Automatizace závlahy – hardwareová část

Automatizace závlahy – hardwareová část

To je děs, jak ten čas frčí. Koukám, že poslední článek je už zase měsíc starý. Ale bylo toho teď zas nějak moc. Pořádal jsem rozlučku, pak jsem dělal o týden později svědka a o další týden později jsme byli na týden u móóře. Konkretétně v Chorvatsku, kde se všichni asi už úplně zbláznili, protože zdražili na dvojnásobek a kvalitu služeb ještě zhoršili. No nic…

Ale k dnešnímu tématu. Už nějakou dobu mám hotovou závlahu po technologické stránce. Jen nějak furt nebyl čas a materiál na automatizaci. A tak jsem pořád chodil kroutit ventilama ručně :).

Něco málo z elektroniky jsem stihl ještě před dovolenou, ale první nasazení se nakonec uskutečnilo až dnes. Není to sice stále úplně hotové, ale už to umí zalévat a já to nebudu muset dělat ručně. Závlahu jsem postavil nad WemosD1 a relé boardem. Hlavice se mají ovládat pomocí 24V, ale stačí jim i 12V.

Bohužel, trochu jsem to nedomyslel s počtem okruhů. Ačkoli jich mám jen sedm, tak mám ještě dva vstupy (retenčka a vodovodní řad), což dělá celkem devět hlavic a tím pádem devět relé. No, takže 8-relé board byl málo. Takže 8+2 relátek. No a druhý problém byl s Wemosem. Devět výstupů se mi nepovedlo rozchodit. Výstup D4 je využívaný stavovou diodou a D8 mi stávkoval.

Takže bylo nutné nasadit wemosy dva :). Ale zase kdo to má, žejo, blbá závlaha řízená dvěma procesorama :).

O napájení se stará zdroj 12V/5A z Aliny (co jsem měřil, vypadá na tyhle účely dostatečně), k tomu pak DC-DC měnič na 12V-5V pro Wemosy a 12V přes relé na jednotlivé hlavice.

Vše pokusně pospojovat, ověřit funkčnost a otestovat, že se to do té krabičky nějak vejde :). Tou dobou jsem sice ještě nevěděl, jak to nakonec udělám, ale to mne nějak moc netrápilo a tak jsem pokračoval dál :).

Nakonec jsem koupil na relátka a Wemosy ještě o trochu vyšší krabičku a samostatné prostupky. Tou dobou jsem už tušil, jak asi komponenty v krabici rozmístím a tak jsem začal vrtat a skládat.

Abych nemusel všechno kompletovat v kuse až venku, připravil jsem si spoustu věcí pomocí různých spojek a konektorů. Takže jsem toho mohl většinu dodělat ještě u sebe v technické místnosti na stole a venku jsem pak už řešil “jen” konektory.

Tady jde vidět finální test komponent před kompletací krabičky. Nakonec jsem to vymyslel tak, že 8-relé board je přišroubovaný ke dnu krabice, zatímco 2-relé, 2x Wemos a DCDC měnič jsou přilepeny pomocí tavné pistole na bocích krabice.

Trochu jsem se bál, jak to bude držet a vypadat, ale je to naprosto supr. Pistole za pár dolarů z Aliny a kolik parády to udělalo.

Myslím, že by to mohlo držet navěky. Že dřív budu potřebovat něco vyměnit, než že by to pustilo. Oba Wemosy jsem si dal schválně USBčkem nahoru, protože ještě předpokládám update firmwaru (a updatu na dálku zas tak nevěřím).

Druhá krabička je pak o dost méně zajímavá. V ní je jen samotný zdroj, přívod 230V a odchozích 12V. Zatím mám zdroj připojený na klasickou 230V zásuvku, protože mne ještě čeká natahání elektriky ven přes chráničky, dozapojení v rozvaděči, atd. Takže zatím to mám napojené přes prodlužku (trošku na prasáka, no…).

A tady už jsou pak další fotky z dneška, kdy jsem se pustil do instalace venkovní části. Postupně jsem si ven zvládl vynosit tak polovinu dílny, jelikož mi furt něco chybělo.

Nejdřív jsem udělal konektory na ventily v levém boxu. To ještě šlo, protože délka kabelů od ventilů byla dostatečná. Takže akorát propojit s konektorem a trochu zpacifikovat jednotlivé kabely, aby v tom byl pořádek.

Horší to bylo v pravém boxu. Tam už kabely nedosáhly, takže jsem to musel prodlužovat a ještě pak napojovat na konektory. To byl fakt opruz.

A takhle pak vypadalo pozapojování ventilů k relátkům.

A tady už první testování. Kupodivu všechno fungovalo hned napoprvé.

Jediný zádrhel je, že když se krabičky zavřely a daly nalevo od ventilů, došel wifi signál. Takže musí být momentálně krabička s Wemosama těsně pod víkem šachty, aby byla online. To ale výhledově vyřeším tak, že dám na půdu ještě jeden Unify AP a nasměruju ho na zahradu. Tím bych měl pokrýt vše i pro další čidla/ovládání, které plánuju.

A takhle vypadá výsledek. Ten červený kabel vlevo je ta zmiňovaná prodlužka. Ta teď bude dočasně vše napájet, než udělám finální venkovní elektriku. Pro jistou je to ještě zabalené v igelitu a zatažené stříbrnou izolepou. A to je pro teď vše. Pak už následovalo ladění SW a propojení s Loxonem. O tom v dalším článku.

 

Propojení dat z MQTT do Loxone pomocí HTTP vstupů

Propojení dat z MQTT do Loxone pomocí HTTP vstupů

Jak jsem psal v minulém článku, kde jsem bojoval s BigClownem, poslední fáze propojení (a vlastně i ta nejdůležitejší), je dostat data ze senzorů, která je posílají přes MQTT protokol do Loxone.

Není to nic složitého, ale napoprvé může člověk v několika místech narazit. V rámci článku budu předpokládat, že už máte nainstalovaný a rozchozený nějaký MQTT server (například Mosquitto) a že už Vám běhá NodeRED (třeba v NASu, RaspPI,…). Pokud ještě nemáte, mrkněte na moje články o NodeRED a Mosquitto, kde je instalace a použití popsáno.

Jako zdroj dat budu používat data z BigClown senzorů. Stejně tak jdou ale data simulovat napřímo pomocí příkazové řádku a příkazu mosquitto_pub. 

mosquitto_pub.exe -h dockerserver.dum -t node/kit-co2-monitor:0/co2-meter/1:0/concentration -m 10000

Takže například tímto příkazem simulujeme čidlo CO2 monitoru na zařízení s IDčkem 0 a posíláme data “concentration” s hodnotou 10000ppm (takže vlastně smrtící dávka :)) ).

A teď už k samotnému NodeRED. Abychom mohli data z MQTT přijmout a zpracovat, vložíme prvek Input – mqtt.

 

Po rozkliknutí prvku mqtt můžeme zadat několik vlastností. Name slouží jen k pojmenování v rámci diagramu, QoS je priorita služeb, která nás nezajímá. A pak Topic. Jako topic zadáme buď absolutní název topicu, nebo nějakou jeho masku. Maska funguje tak, že namísto jedné úrovně zadáme znak +, nebo místo více úrovní znak #. Takže pokud chceme chytat všechny zprávy, týkající se senzoru nula, může maska vypadat takto:

Pokud máme dvě zařízení, můžeme buď masku ještě více zobecnit, nebo přidat dva MQTT inputy a každému přiřadit jinou masku topicu. Já šel druhou cestou, jelikož se mi to více hodilo při ladění a testování.

Tím bychom měli data v NodeRED. Nyní musíme vyřešit, jak data předat do Loxonu. Jsou vlastně dvě cesty. Jedna je data do Loxonu nastavit, druhá pak nechat Loxone, aby si o data řekl. Dneska popíšu cesta, aby si o data Loxone řekl. Z tohoto důvodu si musíme data někam v NodeRED uložit a pak na základě Loxone dotazu mu hodnoty sdělit.

Přidáme další dva prvky do našeho projektu. Tím prvním je prvek Debug. Ten slouží k tomu, že cokoli se do něj pošle, to on ukáže v debug okně. Ideální na ladění a ověření, že data z MQTT přicházejí. Náš testovací příkaz z mosquitto_pub se v NodeRED debugu zobrazí takto:

 

Druhý prvek je Function. Díky ní můžeme v NodeRED psát vlastní JavaScriptové funkce a pracovat s datama. V mém případě jsem si ji pojmenoval DataBuffer a to proto, že ukládá do bufferu všechny hodnoty z MQTT pro pozdější využití.

var dataObjectName;
if ( msg.topic.indexOf("kit-co2-monitor:0") != -1)
  dataObjectName = "BCG-data0";
else
  dataObjectName = "BCG-data1";

var dataObject = flow.get(dataObjectName);
if ( typeof(dataObject) == "undefined" )  
  dataObject = {};

var currentdate = new Date(); 
dataObject.lastModification = "" + currentdate.getFullYear() + (currentdate.getMonth() + 1) + currentdate.getDate() + currentdate.getHours() + currentdate.getMinutes();

if ( msg.topic.indexOf("humidity") != -1)
    dataObject.humidity = msg.payload;

if ( msg.topic.indexOf("temperature") != -1)
    dataObject.temperature = msg.payload;
    
if ( msg.topic.indexOf("pressure") != -1)
    dataObject.pressure = msg.payload;
    
if ( msg.topic.indexOf("altitude") != -1)
    dataObject.altitude = msg.payload;

if ( msg.topic.indexOf("concentration") != -1)
    dataObject.concentration = msg.payload;

if ( msg.topic.indexOf("voltage") != -1)
    dataObject.voltage = msg.payload;

flow.set(dataObjectName, dataObject);

msg = null;
return msg;

Program funguje tak, že nejprve zjistí, ze kterého čidla data přišla. To udělá tak, že v názvu Topicu vyhledá text “kit-co2-monitor:0”. Když tam text je, je to monitor0, když ne, je to monitor1. Název topicu je uložen v msg.topic.

Jako druhý krok pak vezme (a nebo vytvoří, pokud ještě neexistuje) objekt z flow contextu (jedná se o objekt sdílený v rámci jednoho projektu/záložky, nikoli celého NodeRED), do kterého hodnoty uložíme. Tím, že se jedná o flow objekt, budou data dostupná i v jiném prvku “Function”. Rozdíl mezi contextem, flow contextem a global contextem vysvětlen zde.

Následně pak už jen zjistíme, jaký typ hodnoty nám vlastně přišel a uložíme si ji do odpovídající proměnné v našem datovém objektu. K tomu si ještě uložíme informaci o tom, kdy jsme obdrželi poslední změnu hodnot z daného čidla. A to proto, abychom mohli monitorovat, kdy naposledy čidlo komunikovalo.

A tady je drobná obtíž s Loxonem. Bohužel, HTTP Inputs v Loxonu neumí textové hodnoty (debilní co), takže je potřeba to poslat jako číslo. Proto si poskládám číslo ala 201718121822, což znamena 2017-18-12 18:22.

Takže hodnoty máme uložené a nyní musíme naučit NodeRED, aby byl schopný hodnoty servírovat dál. Na to má naprosto super prvek Input – http. Pomocí něj si nadefinujete, na jakých URL adresách má nodeRED poslouchat a jaká data vracet. Takže například chceme, aby na adrese http://nodered.dum/bigclown/kit0 se vracely hodnoty z prvního čidla, na adrese http://nodered.dum/bigclown/kit1 pak z druhého čidla.

Jednoduché, že? Tímto jsme ho právě naučili poslouchat na zvolené adrese. Teď mu ještě nějak musíme předat data. Proto přidáme opět prvek Function a spojíme ho s obouma vstupama a zároveň výstup funkce spojíme s prvkem Output – http response. Ten je k tomu, aby se pro daný http požadavek vrátila nějaká data.

Jednoduché, elegantní :). Zbývá už jen napsat funkci DataGetter, která vezme uložená data z flow contextu a vrátí je na výstup:

var dataName;
if ( msg.req.originalUrl == "/bigclown/kit0" )
    dataName = "BCG-data0";
else
    dataName = "BCG-data1";

var dataObject = flow.get(dataName);

msg.payload = 
    "lastUpdate=" + dataObject.lastModification  +
    " humidity=" + dataObject.humidity +
    " temperature=" + dataObject.temperature +
    " pressure=" + dataObject.pressure +
    " altitude=" + dataObject.altitude +
    " concentration=" + dataObject.concentration +
    " voltage=" + dataObject.voltage;
    
return msg;

Ta funguje tak, že z originalUrl zjistíme, jaká data máme vrátit (jeslti čidlo 0 nebo 1). Data pak získáme pomoci flow.get() a sestavíme z nich textový řetězec v podobě name=value name1=value1….., který pak následně vrátíme jako msg.payload. V objekt msg pak data jdou do http-response, a zobrazí se jako http odpověď. Takže když pak zavoláme adresu http://nodered.dum/bigclown/kit0, jako odpověď získáme toto:

A tím jsme s NodeRED skončili. Data máme z MQTT načtena a umíme je vystavit dál. Zbývá už jen naučit Loxone si o data říct. Do projektu v Loxone Configu přidáme dva HTTP Virtuální vstupy,

které si pojmenujeme třeba BigClown kit 0 a BigClown kit 1.

A každému příkazu zadáme dotazovací url. V mém případě již zmiňovaný http://nodered.dum/bigclown/kit0 http://nodered.dum/bigclown/kit1

Do těchto virtuálních vstupů pak přidáme jednotlivé HTTP příkazy. Pro každou načítanou hodnotu jeden příkaz:

A každému příkazu řekneme, jak má hodnotu z textového řetězce vyparsovat, jak se má hodnota vypisovat, na kolik má být desetinných míst, jednotku, …

Takto například vypadá CO2 čidlo. Má rovnou zapnutou i statistiku, která se zaznamenává jednou za 10minut jakožto průměr hodnot. Parsování se provádí pomocí příkazu “concentration=\v”, je na jedno desetinné místo s jednotkou ppm (pomocí <v.1> ppm).

A to je vše. Tím máme hodnoty v Loxone :). Pro zajímavost, hodnoty Tepota/vlhkost jsou hodnoty z čidel od Sedtronicu, zatímco hodnoty z BigClowna jsou ty s označením “kit0”. Teplota i vlhkost se trošku liší, jelikož čidla Sedtronic jsou pod vypínačem ve zdi, zatímco čidlo BigClownu je vedle postele na stolku. Jde na tom občas hezky vidět, jak se rychleji zahřeje vzduch, než cihla :).

A to je pro teď vše. Příště zkusím dát dohromady ještě návod za pomoci virtuální vstupů. To zatím ještě nemám, protože mne to napadlo až teď při psaní článku :). Myslím, že by to také mělo také jít. Jen je otázka, jeslti nad tím půjdou i statistiky a další věci.

Pokus s Patreonem – podpořte nás

Pokus s Patreonem – podpořte nás

Po sérii pěti článků o zámkové dlažbě tu máme malou odbočku. Tentokrát se týká provozu našeho blogu a Vašeho případného zapojení 🙂

Po tom, co jsme psali o poděkování za víno, které nám dorazilo minulý týden, jsem dostal dalších několik mailů s díky a příslibem tekutého moku. Kromě toho dorazilo také několik podnětů, jak by se dala taková podpora lépe realizovat.

Read More Read More

Elektroměrový ráj, díl druhý

Elektroměrový ráj, díl druhý

Tak jsem dneska dodělal zbytek elektroměrů. A co Vám budu vyprávět, je to paráda 😉

Užitečnost a funkčnost původní instalace jsme ověřili už několikrát, naposledy pak o víkendu, kdy si I. nebyla jistá, jestli vypla varnou desku s připravovaným jídlem pro malého. A samozřejmě si na to vzpoměla ve chvíli, kdy jsme byli už daleko od domova.

Zatímco postaru bychom se museli buď okamžitě otočit a jet zpátky, případně se stresovali po zbytek výletu, tentokrát stačilo jen mrknout na spotřebu varné desky a byl klid ;-).

Drobná nevýhoda 22 ks elektroměrů je, že potřebují 22 vstupů :). A ačkoli se Quido zatím stále drží, zbývá na něm už posledních 20 vstupů. A pak mne čeká další nákup ;-). Na druhou stranu, za tu cenu je to pecka. Kupovat to od Loxonu, tak si sakra rozmyslím každý elektroměr.

Zároveň si musím znovu pochválit tiskárnu na štítky. Díky ní mám všechno pěkně popsané a parádně se v tom orientuje. Jediné na co jsem nepřišel a co asi ta moje neumí je, aby se dal nastavit určitý rozměr a natisknout sérii štítků v kuse oddělených čárou (jako je to o patro níž na jističích, když to dělal p. Hruban). Ale co, stála jen 700, tak má holt omezení.

Pro elektroměry jsem v Loxone configu už vyhradil samostatnou stránku, a i tak je tam docela tlačka :)).

Ještě chci udělat ukazatel “celková známá spotřeba”, abych krom celkové spotřeby domu viděl,kolik jsou spotřebiče co jsou monitorované a kolik ty ostatní. Kdyby mi náhodou někde něco utíkalo, tak ať o tom vím.

A poslední novinka, dorazil mi multimetr z Aliexpressu. Za 29USD (~700Kc), automatické nastavení rozsahů, měří od základních věcí po teplotu, tranzistory, diody, kondenzátory, frekvence a kdo ví co ještě. U nás cena tak 1800Kč +.

Testoval jsem ho zatím jen dneska, ale přijde mi fakt supr (až na tu “lososovou” barvu ochraného krytu. Dalo by se říct, že je dost ošklivá 😉 ). Ale jinak měří supr, rozsahy zvládá měnit pěkně a rychle, teploměr funguje taky parádně.

Bugfix na kritickou chybu v Quido-Loxone můstku

Bugfix na kritickou chybu v Quido-Loxone můstku

Jak jsem už avizoval v Loxone hospodě, můj program pro spojení Quida a Loxone měl (ačkoli u Vás ještě má 😉 ) v sobě kritickou chybu.

Kritická je z toho pohledu, že když na ni dojde, dokáže sežrat 100% CPU Loxonu, přestanou fungovat všechny vstupy/výstupy a ještě to pekelně zpomalí celý Loxone systém. Být to od korporátu, budou tvrdit, že je to jen glitch, žádný velký problém 😉

Naštěst (ačkoli během fixování spíš bohužel) se chyba objeví tak jednou za měsíc a to jen když pořádně nakládáte Loxonu i Quidu, do toho si hrajete se síťovou kabeláží a občas zrestartujete router.

To je asi i důvod, proč mi to nikdo kupoduvi neomlátil o hlavu. Fix byl jednoduchý, stačilo restartnout Loxone a zase to fakt dlouho fungovalo. Nevýhoda byla, že každý pokus o opravu chyby znamenal upravit Loxone program a čekat.

Ale nakonec se podařilo. Chyba byla způsobená tím, že když se rozpadlo spojení mezi Loxone a Quidem, tak jsou tam opravné mechanismy co spojení opět navážou a získají aktuální data pro vstupy.

Jenže, v určité situaci se navázání spojení nepovedlo a namísto toho, aby se vynulovaly pointery na spojení, zůstaly plné. No, a pak už následoval kolotoč, kdy se neustále dokola spojovalo-ověřovalo-posílalo-spojovalo-ověřovalo-posílalo-…. a to pořád.

Naštěstí, stačilo přidat quido_udp_stream_read = NULL;, aby se spojení správně znova navázalo. A od té doby běhá vše jak má.

Testuju to u sebe momentálně cca 3 týdny, simuloval jsem mu výpadky a vše ok. Tak doufám, že to bylo ono 🙂

Kde stažení je aktualizace v Dropboxu tam, kde byl i původní program. Že je to správná verze poznáte tak, že v hlaviččce je Verze 25.1.2017 (v10).

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

Aktualizace můstku Quido-Loxone

Aktualizace můstku Quido-Loxone

Nějak jsem úplně zapoměl veřejně oznámit novou aktualizaci na můj program pro propojení Quida (Papoucha) a Loxone. Díky tomu ale můžu po několika týdnech testování s klidným svědomím říct, že opravdu funguje vše jak má a nemusíte se případně bát aktualizovat :-).

Ovládání relátek na Quidovi

Nová verze obsahuje několik novinek. Tou první, hlavní, je možnost ovládat relátka na Quidovi. Relátka lze ovládat na všech modulech Quida, které relátka mají. Tzn jak na modulu 100/3, tak až po modul 2/32. Vše v ethernet verzi.

Drobná komplikace během vývoje nastala v omezení Loxonu zpracovávat operace asynchroně. Jelikož toto Loxone (PicoC) neumí, nelze zároveň poslouchat sockety a zároveň je odesílat. Z toho vyplívá, že v okamžiku spínání relé nemusí dorazit info o uvolnění tlačítka, což mělo za důsledek dost náhodné chování žaluzií 😉

Z tohoto důvodu je potřeba použít zvlášť komponentu “Loxone program” pro vstupy a zvlášť pro výstupy.  PicoC jako takový je stejný, jen se v hlavičce programu nastaví, zda obsluhuje vstupy nebo výstupy. Pokud vstupy nebo výstupy nepotřebujete, stačí použít jen jeden program takový, který potřebujete.

Relátka se ovládají přes připravené Loxone bloky. Na každý vzorec lze připojit až 4 vstupy pro relé a ty jsou pak napojeny na jeden společný Loxone program, který z nastavených hodnot relé sepne nebo rozepne.

Automaticky generované pakety

Druhá novinka je kompletní předělání vnitřností programu tak, abych už nemusel generovat ručně pakety, ale aby si program vše dělal sám. Na jednu stranu to ulehčí konfiguraci, na druhou stranu to dost zkomplikovalo SW. Bohužel, jelikož se každé relé spíná vždy jiným příkazem, nebylo zbytí. Jinak bych musel generovat až 40 paketů pro každého uživatele zvlášť, a to by mi mrdlo.

Díky tomu se ale i hodně zjednodušilo nastavení celého programu. Stačí zadat jen IP a port pro Loxone a pro Quida, nastavit režim programu (0/1 vstupy/výstupy) a hotovo.

Paměťová i procesorová optimalizace programu

Třetí novinka je, že je celý Loxone program zkomprimovaný. Jelikož už byl díky všem rozšířením a komentářům opravdu dlouhý, napsal jsem si komprimátor tak, aby z kódu zmizely všechny zbytečné komentáře a dlouhé názvy a program tak v Loxonu nezabíral zbytečně pamět (a i parser PicoC má tím pádem méně práce), takže program celkově méně zatěžuje Loxone.

Vypnutí zbytečných výstupů do logu

Poslední novinkou je pak odstranění některých výpisů do logu Loxone configu. Ty jsem tam měl z doby ladění a zůstaly i u některých z Vás. Bohužel, když se tam nechaly nějakou dobu, dokázaly pár MB dat v logu udělat. Pokud by se to týkalo i Vás, můžete logy promazat přes FTP přímo v Loxonu.

A to je vše

Tím končí soupis změn z aktuální verze. Pro ty z Vás, kteří si už program koupili, tak je aktualizace dostupná ve sdílené Dropbox složce tak jako dřív. Je aktualizovaný jak program, tak Loxone projekt, kde ve dvou záložkách najdete schéma pro vstupy a výstupy.

Pokud ještě program nemáte, ale čekali jste třeba právě na výstupy, neváhejte se mi ozvat na email [email protected]. Cena zůstává stále stejná, ačkoli je program opět o několik řádů vylepšený 😉

PS: Zároveň jsem aktualizoval i návod na původní stránce o Papouchovi – https://www.vodnici.net/2016/10/loxone-propojeni-s-modulem-quido-od-papoucha/

 

 

NodeRED – Propojení všeho se vším, od Arduina po Loxone

NodeRED – Propojení všeho se vším, od Arduina po Loxone

Jak jsem psal v předchozím článku, MQTT i NodeRed instaluji na Ubuntu linuxu. Jde ale rozběhat třeba i na Raspberry Pi  nebo Turrisu (OpenWRT).

Instalace NodeRED je relativně jednoduchá. Do ubuntu jsem musel nejprve doinstalovat aplikaci npm (což jsem zjistil, že je balíčkovací služba pro javascript) a následně pak pomocí npm aplikace nainstalovat NodeRED.

sudo apt-get install npm
sudo npm install -g --unsafe-perm node-red

Po samo-doinstalování obrovského množství dalších navazujícíh balíků měl začít fungovat příkaz `node-red`. Ale prdlajs. Takže další postup pak byl:

sudo apt-get install nodejs-legacy
node -v
##v4.2.6

sudo apt-get install npm
npm -v
##3.5.2

sudo npm install -g --unsafe-perm node-red node-red-admin

Dál bylo potřeba otevřít firewall port 1880, který node-red používá pro komunikaci

sudo ufw allow 1880
##Rules updated
##Rules updated (v6)

A pak už node-red konečně naběhl.

node-red

Welcome to Node-RED
===================

9 Dec 15:41:14 - [info] Node-RED version: v0.15.2
9 Dec 15:41:14 - [info] Node.js version: v4.2.6
9 Dec 15:41:14 - [info] Linux 4.4.0-53-generic x64 LE
9 Dec 15:41:14 - [info] Loading palette nodes
9 Dec 15:41:14 - [warn] ------------------------------------------------------
9 Dec 15:41:14 - [warn] [rpi-gpio] Info : Ignoring Raspberry Pi specific node
9 Dec 15:41:14 - [warn] ------------------------------------------------------
9 Dec 15:41:14 - [info] Settings file : /home/dev/.node-red/settings.js
9 Dec 15:41:14 - [info] User directory : /home/dev/.node-red
9 Dec 15:41:14 - [info] Flows file : /home/dev/.node-red/flows_home-server.json
9 Dec 15:41:14 - [info] Creating new flow file
9 Dec 15:41:14 - [info] Server now running at http://127.0.0.1:1880/
9 Dec 15:41:14 - [info] Starting flows
9 Dec 15:41:14 - [info] Started flows

Další krok je nastavení, aby se NodeRED spouštěl sám po startu. To už nebudu popisovat, protože bych jen kopíroval návod, podle kterého jsem postupoval. Ten jde najít v tomto super článku (bod 3 a dál).

Použití NodeRED

Tak jo, nainstalované to je, co teď s tím dál ;-). Vraťme se k naší ukázce z minulého článku o MQTT. V levym okně máme příkaz na poslání zprávy přes kanál(topic) hello/world. V pravém okně nahoře je pak příjemce této zprávy, abychom viděli, že vše funguje.

V pravo dole pak nasloucháme nové zprávě “bye/world”. Jak jde vidět z následujících screenshotů, při poslání zprávy na “hello/world” se tato zpráva ukáže i na “bye/world”. Jak to?

Protože NodeRED ;-). Jako první jsem pro otestování funkčnosti NodeRED a jeho napojení na MQTT udělal jednoduché přeposlání přijaté zprávy z jednoho kanálu na druhý.

A takhle to vypadá v NodeRED. Vlevo je MQTT consumer, nastavený tak, aby naslouchal topic hello/world

V pravo pak MQTT publisher, který přijatou zprávu pošle po kanálu (topicu) bye/world.

Dole pak mám ještě debug výstup, který zobrazuje přijaté zprávy.

A co loxone, jde to propojit?

No jasně! ;-). Pro testování jsem použil zatím jen REST Api loxone, ale NodeRED podporuje i websockets, navíc jsou pro Loxone už naprogramované přímo rozšíření pro NodeRED (viz dále).

Nyní nám ale pro jednoduchý test stačí RestAPI. Upravíme diagram tak, aby po přijetí jakékoli zprávy v topicu hello/world se nám rozsvítilo (nebo zhaslo) světlo v pracovně. To je cool ne? 😉

Samotné nastavení HTTP požadavku vypadá nějak takto. Nic složitého, jen se zavolá HTTP GET na adrese /dev/sps/io/WebApiTest/PulseDown.

Co se týká URL adresy, tak Loxone dokumentace stojí za starou bačkoru. Podle návodu by měla být adresa /prikaz/control/hodnota, coz ale /dev/sps/io/INPUT/PRIKAZ rozhodne není.

Touto url říkáme, že chceme na virtuální vstup “WebApiTest” poslat Impuls Down-Up. V Loxonu tak musíme tento virtuální vstup vytvořit a propojit se světlem.

A to je všechno. Nyní, kdykoli se objeví zpráva, světlo se přepne. Naprostá paráda. Nevím jak vy ostatní, ale já jsem nadšen. Těch možností, k čemu se to využít, je totiž neomezeně. Díky kombinaci NodeRED+Loxone tak jde do Loxonu dostat spoustu nových dat, od Arduino senzorů, dat z externích databází až po informace z Twitteru, Email nebo cokoli jiného vás jen napadne.

Co dál

NodeRED má obrovskou komunitu a kromě základních bloků (Nodes) má parádní knihovn dalších rozšíření – http://flows.nodered.org/. Jsou tam například i bloky na komunikaci s Modbus, KNX nebo Loxone.

Nyní to chce pořádně vyzkoušet a pohrát si s tím víc. V základu mám ověřeno, že vše funguje. Nyní zkusím zprovoznit nad Arduinem nějaký ten senzor a přes MQTT-NodeRed ho posílat do Loxonu. A uvidíme, jak to bude šlapat. Co jsem zatím testoval, tak problémy žádné, ale běží mi to jen chvilku.

Pokud ale vše pojede opravdu jak má a bude to 100% stabilní, vidím v tom obrovský potenciál. Navíc v případě, že by Loxone pokračoval se svými gestapáckými manýry a ještě více uzavíral jeho systém, tak se takto dá udělat kompletní rozšíření a defakto z architektury “Loxone je ten hlavní” udělat “NodeRED je ten hlavní” a Loxone mít jen jako podružný systém.

Použité linky

forumlink
Link na diskuzní fórum o Loxonu a Arduinu