A Domoticz lényege az automatizálás lehetősége, mely a rendelkezésre álló szenzorok adatai alapján különböző vezérlőlogikák létrehozásában nyilvánul meg. Ezeket a Beállítás->Több lehetőség->Események alatti szinten (balra) találhatjuk meg:
Nem keverendő a "Több lehetőség" alatt (About felett) megjelenő Esemény ponttal, ami az eseménynaplót jelenti, ez utóbbinál csak megtekinteni tudjuk a bejövő adatokat, illetve a vezérlések sikeres/sikertelen lefutásának eredményét.. meg ha elírtunk valamit annak hibaüzenetét is. :)
Az "Event name" mezőben adjunk egy nevet a szabálynak, alatta kiválasztható a szkript kódolásának típusa, ami lehet:
1/ Blockly
A Google által kifejlesztett Blockly egy vizuális programozási segédeszköz, lehetővé teszi, hogy könnyen és gyorsan összekattintgassuk a rendszerbe már felvett eszközökhöz különféle feltételes vezérléseket.
Előnye, hogy nem lehet elírni az eszközök nevét, mivel csak kiválasztani lehet, hátránya, hogy némileg kötöttebbek a lehetőségek.
2/ Lua
A Lua már egy igazi szövegbevitelt igénylő programozás lehetőség, meglehetősen flexibilis, a commandArray nevű tömb elemein keresztül lehet a Domoticz-ban felvett eszközök számára utasításokat küldeni. Ezt használom jelenleg szinte kizárólag.
Ha a "Device" vagyis eszközszintű kezelést választjuk, akkor csak azokat az eszközöket sorolja fel az alapértelmezetten generált for deviceName,deviceValue ciklusban, amiknek változott az állapota. Ezt az - alapból két kötőjellel a sor elején kikommentezett - if (deviceName=='eszköznév') then feltételekkel vizsgálhatjuk, ahol a deviceValue értékétől függően végezhetünk további műveleteket.
A jobb lent látható "Show current states" segítségével megtekinthetjük minden eszköz aktuális állapotát, és hogy milyen értéket jelent ez pontosan - az összehasonlító operátorok számára.
Ha "Time" vagy időzített kezelést választunk, akkor nagyjából percenként fogja végrehajtani az itt elhelyezett kódokat, én ezzel szoktam lekapcsolni a világítást pl időzítve az utolsó mozgás idejétől.
Példa (Device alapú):
Előszobai világítás bekapcsolása mozgásra, ha sötét van (luxmérő), és nincs bekapcsolva a nappali világítása sem, mert az pl bevilágítja az előszobát is:
commandArray = {}
for deviceName,deviceValue in pairs(devicechanged) do
if (deviceName=='Előszoba mozgás') then
if deviceValue == "On" then
if (tonumber(otherdevices['Konyha fény']) < 1)
and (otherdevices['Előszoba világítás'] == 'Off')
and (otherdevices['Nappali világítás'] == 'Off') then
commandArray['Előszoba világítás']='On'
end
end
end
end
return commandArray
Van egy praktikus különbségszámító függvény, ami nem része az alap LUA motornak, ezért használatához be kell szúrni a kód elejére. (timedifference)
Ezzel már használható az alábbi mintakód (Time alapú), mely lekapcsolja a világítást, ha már több 300 másodperce nem mozgott senki arrafelé, és több mint 300 másodperce kapcsolták fel:
commandArray = {}
function timedifference(timestamp)
y, m, d, H, M, S =
timestamp:match("(%d+)-(%d+)-(%d+) (%d+):(%d+):(%d+)")
difference = os.difftime(os.time(),
os.time{year=y, month=m, day=d, hour=H, min=M, sec=S})
return difference
end
if (otherdevices['Előszoba világítás'] == "On") then
if (timedifference(otherdevices_lastupdate['Előszoba mozgás']) > 300)
and (timedifference(otherdevices_lastupdate['Előszoba világítás']) > 300) then
commandArray['Előszoba világítás']='Off'
end
end
return commandArray
Talán túlzásnak tűnik a dolog, mert ha nincs mozgás, ugyan hogy kapcsolták volna fel a világítást? Hát távoli paranccsal természetesen.
És akkor jöjjön némi automatizálási ízelítő: ("Device" Lua for ciklusába szúrandó az alábbi kódrészlet!)
if (deviceName=='Hálószoba világítás') then
if deviceValue == "Off" then
if (tonumber(otherdevices['Háló fény']) < 20) then
commandArray[1]={['Hálószoba LED szalag']='On'}
commandArray[2]={['Hálószoba LED szalag']='Off AFTER 30'}
end
if (timedifference(otherdevices_lastupdate['Nappali mozgás']) > 10)
and (otherdevices['Nappali mozgás'] == 'Off') then
if (otherdevices['Nappali világítás'] == 'On') then
commandArray['Nappali világítás']='Off'
end
end
end
end
return commandArray
A fenti kód a hálószobai világítás lekapcsolásakor felkapcsolja az ottani LED szalagot 30 másodpercre, ha 20 luxnál kevesebb a fény, majd megnézi, hogy mozog-e valaki a nappaliban, ha nem és megy ott a világítás, akkor azt is lekapcsolja. A commandArray-ban minden eszköznek egyszerre egy parancsot tudunk adni, a fenti példában látható, hogy A LED szalagnak egy másik tömbelemben adtam a második, időzített kikapcsolási parancsot, ezeket sorban hajtja végre. (azért kellett ez, mert az AFTER-nek másodpercben, a FOR-nak percben lehet megadni a paraméterét)
3/ DzVents
Továbbfejlesztett LUA szkriptelés, teljeskörűbb hozzáféréssel, mint a korábbi LUA esetében, jobban személyre szabható pl az időzített futtatás, globális felhasználói változók hozhatóak létre, stb. Meglehetősen kiforrott támogatással bír, és valóban komplex szabályok hozhatóak létre vele, mellyel még erősen ismerkedési fázisban vagyok.
4/ Python
Bár alapvetően a Python nyelvet jobban ismerem, mint a Luát, ennek támogatása a Domoticz-on belül viszonylag új, nem teljesen kiforrott és mivel a legtöbb szkriptemet már korábban megírtam Luában, még a Python-ra átállással várnék egy kicsit.
A bejegyzés trackback címe:
Kommentek:
A hozzászólások a vonatkozó jogszabályok értelmében felhasználói tartalomnak minősülnek, értük a szolgáltatás technikai üzemeltetője semmilyen felelősséget nem vállal, azokat nem ellenőrzi. Kifogás esetén forduljon a blog szerkesztőjéhez. Részletek a Felhasználási feltételekben és az adatvédelmi tájékoztatóban.
heyjoe 2018.06.08. 09:40:49
A posztjaid hatására én is beüzemeltem egy Domoticz-ot az Orange Pi-n, és nagyon tetszik.
Két kérdésem lenne, hátha tudsz segíteni:
a domoticz mqtt-ben mikor kell az svalue-t, és mikor az nvalue-t használni? Első tippre az svalue-ben megy a string, az nvalue-ben a szám, de ez nem igaz, hiszen sok eszköz küldi az svalueben a számszerű értékét.
A másik: hogyan tudnám azt figyelni, ha egy counter értéke az elmúlt fél órában változott (és ha igen, akkor egy kapcsoló értékét állítsa ON-ra)
eNeS 2018.06.08. 18:17:45
eNeS 2018.06.08. 18:26:39
heyjoe 2018.06.08. 21:38:37
Nagyon ügyes cucc ez a Domoticz, megkedveltem, bár még nem mindenhol tiszta a logikája (sokszor úgy érzem, hogy egymáshoz logikusan kapcsolódó funkciók szét vannak dobva, pl. az alaprajznál, de aztán megszokja az ember)
Most egyelőre ugyanabban a python scriptben vizsgálom, amiben a counternek küldöm az adatokat, de ki fogom próbálni az általad javasoltat.
Egyébként egy villámlás-számlálóhoz kell (www.domoticz.com/forum/viewtopic.php?f=4&t=17000), csak nem csupán számlálni akarom, hanem figyelmeztetni is magamat, hogy jön a gond :) De szépen jött is a jelzés az előbb a telefonra, hogy villámlott 30 km-s körzetben, szóval az alapok már jók.
Domoticz-en belül scriptelésre még csak a Blockly-t használtam, valahogy még a cronból indított python scripteknél jobban tudom, mikor-mi történik, de majd azért igyekszem a lehetőségeit jobban kihasználni.