AN33 Domoticz ovládá NETIO zásuvky (HTTP JSON) | Chytré zásuvky NETIO ovládané pomocí WiFi a LAN
Tagy: 
User library

Automatizační systém Domoticz dokáže číst hodnoty měření a ovládat vypnutí/zapnutí jednotlivých elektrických zásuvek NETIO. Příklad lze použít pro NETIO 4All, PowerCable REST a další NETIO produkty, které podporují http JSON. Domoticz  je automatizační systém, který umožňuje nastavit, ovládat a monitorovat různá zařízení. Může běžet v Docker  kontejneru, ve FreeNas úložišti nebo na lokálním PC nebo například v RaspberryPi.

Můžeme Vám nějak pomoci?

Podporovaná zařízení: NETIO 4All, PowerPDU 4C, NETIO 4, PowerCable REST, PowerBOX 3Px, PowerPDU 4PS, PowerDIN 4Pz

 

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.

 

Po zvolení HARDWARE v menu se dostáváme k výběru zařízení, vybereme Dummy

 

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

 

Pojmenujeme Current1 a jako Sensor Type zvolte Ampere (1 Phase)

 

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.

 

Takto vytvořte všechny čtyři spínače, které máme potom v záložce SWITCHES.

 

A lze je dále upravovat, např. změnit ikonu

 

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&param=udevice&idx=26&nvalue=0&svalue=$val"

val=$(jq '.GlobalMeasure.OverallPowerFactor' netio.json)

curl "http://127.0.0.1:8080/json.htm?type=command&param=udevice&idx=32&nvalue=0&svalue=$val"

val=$(jq '.GlobalMeasure.Frequency' netio.json)

curl "http://127.0.0.1:8080/json.htm?type=command&param=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&param=udevice&idx=27&nvalue=0&svalue=$val"

val=$(jq  '.GlobalMeasure.TotalLoad' netio.json)

curl "http://127.0.0.1:8080/json.htm?type=command&param=udevice&idx=28&nvalue=0&svalue=$val"

val=$(jq  '.GlobalMeasure.TotalEnergy' netio.json)

curl "http://127.0.0.1:8080/json.htm?type=command&param=udevice&idx=29&nvalue=0&svalue=$val"

val=$(jq  '.GlobalMeasure.EnergyStart' netio.json)

curl "http://127.0.0.1:8080/json.htm?type=command&param=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&param=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&param=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&param=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&param=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&param=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&param=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&param=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&param=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&param=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&param=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&param=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&param=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&param=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&param=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&param=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&param=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&param=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&param=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&param=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&param=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.

https://www.domoticz.com/

Zeptejte se na cenu nebo technické parametry

Pro otestování zařízení použijte jméno/heslo demo/demo