Podporovaná zařízení: NETIO 4All, PowerPDU 4C, NETIO 4, PowerCable REST, PowerBOX 3Px, PowerPDU 4PS, PowerDIN 4Pz, PowerBOX 4Kx, PowerPDU 8QS
Co to je Domoticz
Domoticz (https://www.domoticz.com) je malý systém domácí automatizace, který umožní monitorovat a konfigurovat různá zařízení. Například světla, spínače, různé senzory a měřidla (teplota, srážky, vítr, ultrafialové (UV) záření, spotřeba / výroba elektřiny, spotřeba plynu, spotřeba vody, …).
Oznámení / upozornění lze ze systému zasílat na jakékoli mobilní zařízení.
Domoticz je bezplatný a open source. Může být použit na Raspberry Pi, Windows, Linux, Mac OS X a vestavěných zařízeních. Systém je navržen pro provoz v různých operačních systémech. Uživatelské rozhraní je škálovatelné webové rozhraní HTML5 a je automaticky upraveno pro stolní a mobilní zařízení. Domoticz je kompatibilní se všemi prohlížeči. První vydání Domoticze bylo v prosinci 2012.
Co popisuje AN33
Příklad AN33 popisuje konfiguraci automatizačního systému Domoticz pomocí shell skriptů, které používají protokolu http get k přenosu netio.json souborů ze zásuvek NETIO. Tento příklad používá součásti os linux jako časovač cron pro spouštění skriptů a utility jq a bc pro parsovaní a přepočet údajů.
- V systému Domoticz lze vytvořit dashboard, na kterém se budou zobrazovat údaje naměřené zásuvkami NETIO.
- Pomocí spínačů sw lze jednotlivé elektrické zásuvky ovládat (vypni/zapni) a tak ovládat jakékoliv spotřebiče na 110/230V.
Domoticz má zabudovanou vlastnost ovládat spínače např. za rozbřesku nebo od soumraku či úsvitu nebo také spínače různě spřáhnout. Také je zde možnost vykonat nějakou akci např. spustit skript, což se nám hodí a můžeme poslat protokolem http post příkaz zásuvce NETIO, která jej vykoná.
Aby se hodnoty v dashboardu aktualizovaly vytvořte skript, který pomocí protokolu http get stáhne aktuální stav zásuvek NETIO v podobě souboru netio.json. Tento skript necháme operačním systémem spustit každou minutu a pokaždé co přepneme nějaký spínač sw 1-4.
Domoticz nainstalujeme pomocí příkazu:
curl -L install.domoticz.com | sudo bash
Instalátor nainstaluje Domoticz a nastaví jej jako službu spouštěnou při startu.
Dále budeme potřebovat utility jq a bc, nainstalujeme příkazem:
sudo apt-get install jq bc
Nyní se můžeme pustit do tvorby dashboardu.
Otevřete webový prohlížeč http://127.0.0.1:8080 (na stroji kde běží Domoticz). Z jiného počítače zadejte IP stroje s Domoticz.
Pojmenujeme dm1 a stiskneme ADD.
Zvolte Create virtual sensor - každý spínač musí mít svůj dummy protějšek, tzn. vytvoříme ještě dm2 dm3 dm4
Takto postupně vytvořte celý dashboard, pro napětí použijeme Voltage, pro výkon Usage, jako počítadlo kwh je zde Counter. Pro účinník (TruePF) a frekvenci je tu Custom Sensor, pro údaj energy start je použito Text.
Vytvořené sensory máme nyní pod záložkou UTILITY.
Stisknutím hvězdičky povolte zobrazení v dashboardu.
Spínače vytvořte v záložce SWITCHES volba MANUAL LIGHT/SWITCH.
Nastavení NETIO 4x chytrých zásuvek
Ve webovém rozhraní zařízení v sekci M2M API Protocols - JSONAPI , je třeba povolit JSON API.
Nastavte Username a Password pro READ-WRITE.
READ-WRITE přihlašovací údaje fungují pro čtení i zápis. V obou HTTP Request blocích (POST i GET) lze použít tytéž READ-WRITE přihlašovací údaje.
Pro uložení stiskněte tlačítko SaveChanges. Po uložení dojde k restartu zařízení (cca 1 minuta).
NETIO JSON http(s) protokol
Aktuální stav zásuvky v okamžiku čtení (0 / 1) je uveden v proměnné State. Tato proměnná je určena pro čtení i zápis, pokud není proměnná Action uvedena vůbec, nebo je nastavena na hodnotu 6.
Pokud je proměnná Action v odeslaném souboru netio.json nastavena na jinou hodnotu než 6, dostane přednost a hodnota nastavená v proměnné State bude ignorována.
Akce které lze aplikovat na každý výstup (elektrickou zásuvku)
NETIO elektrické zásuvky používají ve všech M2M protokolech stejné akce, které lze vykonávat na jednotlivých zásuvkách. Do každého výstupu lze například zapsat akci typu Toggle=přepni na druhý stav, nebo ShortOff=vypni na několik sekund.
Proměnná Action je ale určena pouze pro zápis hodnoty, nelze z ní číst aktuální stav elektrické zásuvky.
- 0 = Vypnutí výstupu (Off)
- 1 = Zapnutí výstupu (On)
- 2 = Vypnutí výstupu na krátkou dobu (shortOff)
- 3 = Zapnutí výstupu na krátkou dobu (short On)
- 4 = Přepnutí výstupu z jednoho stavu do druhého (toggle)
- 5 = Ponechání stavu výstupu (no change)
- 6 = Ignorováno
Hodnota 6 v tagu Action znamená, ignoruj číslo akce a zapiš hodnotu v proměnné “State” kde se vyskytuje pouze 0 nebo 1. Viz dokumentace k M2M JSON.
Ukázka JSON souboru pro změnu stavu (4 = Toggle / přepnutí) výstupu číslo 1:
{
"Outputs": [{
"ID": 1,
"Action": 4
}]
}
Implementace v Domoticz
Ovládání NETIO zásuvek z Domoticz realizujeme v AN33 pomocí dvojice skriptů pro každou ze zásuvek tj. setnetio11.sh a setnetio10.sh pro zapnutí a vypnutí zásuvky č.1.
Otevřte terminál stroje s běžícím Domoticz a v naší domovské složce najdete:
/domoticz/scripts/
Vytvořte první skript:
nano setnetio11.sh
#!/bin/bash
curl -X POST -H "Content-Type: application/json" -d '{"Outputs":[{"ID":1,"Action":1}]}' http://netio-ip:8080/netio.json
sleep 1
/home/uživatel/domoticz/scripts/gentab.sh
exit 0
Uložte a vytvořte druhý skript :
nano setnetio10.sh
#!/bin/bash
curl -X POST -H "Content-Type: application/json" -d '{"Outputs":[{"ID":1,"Action":0}]}' http://netio-ip:8080/netio.json
sleep 1
/home/uživatel/domoticz/scripts/gentab.sh
exit 0
Takto to zopakujte pro všechny zásuvky pouze měníme hodnotu ID tj. :
nano setnetio20.sh
#!/bin/bash
curl -X POST -H "Content-Type: application/json" -d '{"Outputs":[{"ID":2,"Action":0}]}' http://netio-ip:8080/netio.json
sleep 1
/home/uživatel/domoticz/scripts/gentab.sh
exit 0
Nezapomeňte změnit netio-ip a uživatele také upravit práva pro spouštění všech osmi skriptů:
chmod +x setnetio10.sh
.
.
chmod +x setnetio41.sh
Nyní vytvořte skript:
nano gentab.sh
#!/bin/bash # Tímto stáhneme z Netio zásuvky aktuální stav výstupů a naměřené hodnoty, uložíme do souboru netio.json # Zde uvádím funkční adresu online dema, dle potřeby změnte na vaší IP Netio zásuvky wget -q -O netio.json http://netio-4all.netio-products.com:8080/netio.json # # Ze souboru netio.json vybereme hodnotu Voltage # val=$(jq '.GlobalMeasure.Voltage' netio.json) # # A zobrazíme ji v panelu s IDX 26 # curl "http://127.0.0.1:8080/json.htm?type=command¶m=udevice&idx=26&nvalue=0&svalue=$val" val=$(jq '.GlobalMeasure.OverallPowerFactor' netio.json) curl "http://127.0.0.1:8080/json.htm?type=command¶m=udevice&idx=32&nvalue=0&svalue=$val" val=$(jq '.GlobalMeasure.Frequency' netio.json) curl "http://127.0.0.1:8080/json.htm?type=command¶m=udevice&idx=30&nvalue=0&svalue=$val" # # # Vybereme hodnotu TotalCurrent , domoticz udává proud v A , Netio v mA je nutný přepočet # vall=$(jq '.GlobalMeasure.TotalCurrent' netio.json) # # celkový proud v mA vydělíme 1000 s přesností na 3 desetinná místa # val=$(bc <<< "scale=3;$vall/1000") curl "http://127.0.0.1:8080/json.htm?type=command¶m=udevice&idx=27&nvalue=0&svalue=$val" val=$(jq '.GlobalMeasure.TotalLoad' netio.json) curl "http://127.0.0.1:8080/json.htm?type=command¶m=udevice&idx=28&nvalue=0&svalue=$val" val=$(jq '.GlobalMeasure.TotalEnergy' netio.json) curl "http://127.0.0.1:8080/json.htm?type=command¶m=udevice&idx=29&nvalue=0&svalue=$val" val=$(jq '.GlobalMeasure.EnergyStart' netio.json) curl "http://127.0.0.1:8080/json.htm?type=command¶m=udevice&idx=31&nvalue=0&svalue=$val" vall=$(jq '.Outputs[] | select(.ID==1) | .Current ' netio.json) val=$(bc <<< "scale=3;$vall/1000") curl "http://127.0.0.1:8080/json.htm?type=command¶m=udevice&idx=6&nvalue=0&svalue=$val" val=$(jq '.Outputs[] | select(.ID==1) | .Load ' netio.json) curl "http://127.0.0.1:8080/json.htm?type=command¶m=udevice&idx=15&nvalue=0&svalue=$val" val=$(jq '.Outputs[] | select(.ID==1) | .Energy ' netio.json) curl "http://127.0.0.1:8080/json.htm?type=command¶m=udevice&idx=14&nvalue=0&svalue=$val" val=$(jq '.Outputs[] | select(.ID==1) | .PowerFactor ' netio.json) curl "http://127.0.0.1:8080/json.htm?type=command¶m=udevice&idx=22&nvalue=0&svalue=$val" vall=$(jq '.Outputs[] | select(.ID==2) | .Current ' netio.json) val=$(bc <<< "scale=3;$vall/1000") curl "http://127.0.0.1:8080/json.htm?type=command¶m=udevice&idx=9&nvalue=0&svalue=$val" val=$(jq '.Outputs[] | select(.ID==2) | .Load ' netio.json) curl "http://127.0.0.1:8080/json.htm?type=command¶m=udevice&idx=16&nvalue=0&svalue=$val" val=$(jq '.Outputs[] | select(.ID==2) | .Energy ' netio.json) curl "http://127.0.0.1:8080/json.htm?type=command¶m=udevice&idx=17&nvalue=0&svalue=$val" val=$(jq '.Outputs[] | select(.ID==2) | .PowerFactor ' netio.json) curl "http://127.0.0.1:8080/json.htm?type=command¶m=udevice&idx=23&nvalue=0&svalue=$val" vall=$(jq '.Outputs[] | select(.ID==3) | .Current ' netio.json) val=$(bc <<< "scale=3;$vall/1000") curl "http://127.0.0.1:8080/json.htm?type=command¶m=udevice&idx=10&nvalue=0&svalue=$val" val=$(jq '.Outputs[] | select(.ID==3) | .Load ' netio.json) curl "http://127.0.0.1:8080/json.htm?type=command¶m=udevice&idx=19&nvalue=0&svalue=$val" val=$(jq '.Outputs[] | select(.ID==3) | .Energy ' netio.json) curl "http://127.0.0.1:8080/json.htm?type=command¶m=udevice&idx=18&nvalue=0&svalue=$val" val=$(jq '.Outputs[] | select(.ID==3) | .PowerFactor ' netio.json) curl "http://127.0.0.1:8080/json.htm?type=command¶m=udevice&idx=24&nvalue=0&svalue=$val" vall=$(jq '.Outputs[] | select(.ID==4) | .Current ' netio.json) val=$(bc <<< "scale=3;$vall/1000") curl "http://127.0.0.1:8080/json.htm?type=command¶m=udevice&idx=13&nvalue=0&svalue=$val" val=$(jq '.Outputs[] | select(.ID==4) | .Load ' netio.json) curl "http://127.0.0.1:8080/json.htm?type=command¶m=udevice&idx=20&nvalue=0&svalue=$val" val=$(jq '.Outputs[] | select(.ID==4) | .Energy ' netio.json) curl "http://127.0.0.1:8080/json.htm?type=command¶m=udevice&idx=21&nvalue=0&svalue=$val" val=$(jq '.Outputs[] | select(.ID==4) | .PowerFactor ' netio.json) curl "http://127.0.0.1:8080/json.htm?type=command¶m=udevice&idx=25&nvalue=0&svalue=$val" # # No a zbývá zaktualizovat stav zásuvek, který se mohl změnit např. zásahem do webového rozhraní Netio # val=$(jq '.Outputs[] | select(.ID==1) | .State ' netio.json) curl "http://127.0.0.1:8080/json.htm?type=command¶m=udevice&idx=2&nvalue=$val" val=$(jq '.Outputs[] | select(.ID==2) | .State ' netio.json) curl "http://127.0.0.1:8080/json.htm?type=command¶m=udevice&idx=3&nvalue=$val" val=$(jq '.Outputs[] | select(.ID==3) | .State ' netio.json) curl "http://127.0.0.1:8080/json.htm?type=command¶m=udevice&idx=4&nvalue=$val" val=$(jq '.Outputs[] | select(.ID==4) | .State ' netio.json) curl "http://127.0.0.1:8080/json.htm?type=command¶m=udevice&idx=5&nvalue=$val" exit 0
Nezapomeňte změnit většinu IDx dle vašeho číslování a práva na spouštění:
chmod +x gentab.sh
IDX zjistíte v SETUP>DEVICES
Periodické čtení stavu zásuvek
Nyní nechte skript gentab.sh spouštět každou minutu:
V terminálu spustíme jako uživatel
crontab –e
Otevře se editor a v něm zakomentovaný návod, na první prázdnou řádku zadejte následující:
* * * * * /home/uživatel/domoticz/scripts/gentab.sh
Uložte.
Hotovo, nyní by se měl skript spustit každou minutu.
Nastavení sw spínačů
Ještě je nutno zadat do každého spínače hodnoty OnAction a OffAction:
Kdybyste chtěli využít funkce jako shortOff / shortOn / Toggle přidejte náležité dummy dm4 – dm8 a vytvořte skripty:
nano shortoff1.sh
#!/bin/bash
curl -X POST -H "Content-Type: application/json" -d '{"Outputs":[{"ID":1,"Action":2}]}' http://netio-ip:8080/netio.json
exit 0
Uložte, nastavte práva pro spouštění:
chmod +x shortoff1.sh
Pro funkci toggle bude nutné hodnoty panelů znovu aktualizovat a skript toggle4.sh by vypadal takto:
#!/bin/bash
curl -X POST -H "Content-Type: application/json" -d '{"Outputs":[{"ID":4,"Action":4}]}' http://netio-ip:8080/netio.json
sleep 1
/home/uživatel/domoticz/scripts/gentab.sh
exit 0
V menu SWITCHES vytvoříme další spínač a jako Switch Type zvolíme Push On Button
Potom spínač ShortOff1 zeditujte a do pole OnAction zadejte script://shortoff1.sh
Výsledek v Dashboardu pak vypadá takto:
Dotykem na jedno tlačítko lze např. restartovat nezbedný počítač zapojený do zásuvky č. 1
Shrnutí
Naznačený postup lze v systému Domoticz použít pro všechny NETIO zásuvky, které podporují http JSON.