De meest simple is een globale functie maken in Domoticz:
------------------------------------------------------------------------ -- -- RGB kleuren doorlopen, dit wordt gedaan in 360 stappen, elke seconde een stap. -- Dus er is 360 seconden nodig en dat is 6 minuten. -- Roep haar dus 1 keer in de 6 minuten aan. -- -- domoticz is de data van de omgeving -- idx is het id van de lamp -- brightnessay is helderheid 0 .. 100 -- -- Return waarde is true -- -- Let op: de lamp wordt ook elke seconde aangezet (door setHue(). Als je -- via de UI de lamp uitzet .... na 1 seconde gaat ze weer aan. -- ------------------------------------------------------------------------ RGBwalkthrough = function (domoticz, idx, brightness) local min = 0 local max = 359 for hue = min, max, 1 do -- setHue(hue, brightness, isWhite) -- -- hue: 0 .. 359 (360 is gelijk aan 0) -- brightness: 0 .. 100 -- isWhite: true voor witte lamp, false voor RGB -- domoticz.devices(idx).setHue(hue, brightness, false).afterSec(hue) end return true end,
En dan een dzVents – Timer script maken:
return { on = { timer = { 'every 6 minutes', } }, logging = { level = domoticz.LOG_INFO, marker = 'RGBDoorlopen', }, execute = function(domoticz, timer) local dg = require ("Global") -- domoticz.log('Timer event was triggered by ' .. timer.trigger, domoticz.LOG_INFO) -- os.execute("/usr/local/bin/telegramsend RGBDoorlopen") local boekenkast = dg.helpers.RGBwalkthrough(domoticz, 2005,60) local opluidspreker = dg.helpers.RGBwalkthrough(domoticz, 2002,60) end }
In bovenstaand voorbeeld zijn er twee lampen, 2002 en 2005
Het geheel wordt in 360 stappen doorlopen, dus 6 minuten. Wil je wat kleinere stappen dan is het ff wat meer prutsen. De lampen zullen continu van kleur veranderen. Uitzetten gaat niet, tenzij je een ouderwets schakelaartje gebruikt voor elke lamp of op een andere manier de lamp van het stroom haalt.
(Bash) Script met LUA Variabelen
In dit voorbeeld zijn er twee RGB LED lampen met Idx 1779 en 1780.
Er zijn 5 user variabelen. 3 (type integer) voor de kleur: ROOD, GROEN, BLAUW en 1 (type integer) voor de commit van de kleuren: CommitRGB en een user variable (integer) HELDERHEID om de helderheid te zetten.
Er is een scriptje op de domoticz server (in bijvoorbeeld /usr/local/bin/loopRGB):
#!/bin/bash CURL=curl CURLOPTS="--silent" ADDRESS=domoticz:8080 MAX=255 SLEEPTIME=1 # Counters for the for loops R1UP="0 1 2" R1DOWN="2 1 0" R2UP="0 1 2 3 4 5 6 7 8 9" R2DOWN="9 8 7 6 5 4 3 2 1 0" R3UP="0 1 2 3 4 5 6 7 8 9" R3DOWN="9 8 7 6 5 4 3 2 1 0" function SetRGB () { r=$1 g=$2 b=$3 # # eerst de kleuren zetten # ${CURL} ${CURLOPTS} \ ${ADDRESS}/json.htm?type=command\¶m=updateuservariable\&vname=ROOD\&vtype=0\&vvalue=${r} 2>/dev/null 1>/dev/null ${CURL} ${CURLOPTS} \ ${ADDRESS}/json.htm?type=command\¶m=updateuservariable\&vname=GROEN\&vtype=0\&vvalue=${g} 2>/dev/null 1>/dev/null ${CURL} ${CURLOPTS} \ ${ADDRESS}/json.htm?type=command\¶m=updateuservariable\&vname=BLAUW\&vtype=0\&vvalue=${b} 2>/dev/null 1>/dev/null # # en nu de commit # je hoeft geen waarde te veranderen. Een waarde erin zetten is genoeg :) # ${CURL} ${CURLOPTS} \ ${ADDRESS}/json.htm?type=command\¶m=updateuservariable\&vname=CommitRGB\&vtype=0\&vvalue=1 2>/dev/null 1>/dev/null } # # Let the PA know we started # /home/pi/bin/telegramsend domoticz: loopRGB started # # We need to keep looping and looping :) # # The service /etc/systemd/system/loopRGB.service is watching us # while true do # Red to Yellow 255 0+ 0 for R1 in ${R1UP} do for R2 in ${R2UP} do for R3 in ${R3UP} do VAR100=$((${R1}*100)) VAR10=$((${R2}*10)) VARVALUE=$((${VAR100}+${VAR10}+${R3})) if [ ${VARVALUE} -le ${MAX} ] ; then { SetRGB 255 ${VARVALUE} 0 sleep ${SLEEPTIME} } else { # we are at 256, get out break 3 } fi done done done # Yellow to Lime 255- 255 0 for R1 in ${R1DOWN} do for R2 in ${R2DOWN} do for R3 in ${R3DOWN} do VAR100=$((${R1}*100)) VAR10=$((${R2}*10)) VARVALUE=$((${VAR100}+${VAR10}+${R3})) #VARVALUE=$(($R1*100+$R2*10+$R3)) if [ ${VARVALUE} -le ${MAX} ] ; then { SetRGB ${VARVALUE} 255 0 sleep ${SLEEPTIME} } fi done done done # Lime to Aqua 0 255 0+ for R1 in ${R1UP} do for R2 in ${R2UP} do for R3 in ${R3UP} do VAR100=$((${R1}*100)) VAR10=$((${R2}*10)) VARVALUE=$((${VAR100}+${VAR10}+${R3})) #VARVALUE=$(($R1*100+$R2*10+$R3)) if [ ${VARVALUE} -le ${MAX} ] ; then { SetRGB 0 255 ${VARVALUE} sleep ${SLEEPTIME} } else { # we are at 256, get out break 3 } fi done done done # Aqua to Blue 0 255- 255 for R1 in ${R1DOWN} do for R2 in ${R2DOWN} do for R3 in ${R3DOWN} do VAR100=$((${R1}*100)) VAR10=$((${R2}*10)) VARVALUE=$((${VAR100}+${VAR10}+${R3})) #VARVALUE=$(($R1*100+$R2*10+$R3)) if [ ${VARVALUE} -le ${MAX} ] ; then { SetRGB 0 ${VARVALUE} 255 sleep ${SLEEPTIME} } fi done done done # Blue to Fuchsia 0+ 0 255 for R1 in ${R1UP} do for R2 in ${R2UP} do for R3 in ${R3UP} do VAR100=$((${R1}*100)) VAR10=$((${R2}*10)) VARVALUE=$((${VAR100}+${VAR10}+${R3})) #VARVALUE=$(($R1*100+$R2*10+$R3)) if [ ${VARVALUE} -le ${MAX} ] ; then { SetRGB ${VARVALUE} 0 255 sleep ${SLEEPTIME} } else { # we are at 256, get out break 3 } fi done done done # Fuchsia to Red 255 0 255- for R1 in ${R1DOWN} do for R2 in ${R2DOWN} do for R3 in ${R3DOWN} do VAR100=$((${R1}*100)) VAR10=$((${R2}*10)) VARVALUE=$((${VAR100}+${VAR10}+${R3})) #VARVALUE=$(($R1*100+$R2*10+$R3)) if [ ${VARVALUE} -le ${MAX} ] ; then { SetRGB 255 0 ${VARVALUE} sleep ${SLEEPTIME} } fi done done done done # forever exit 0
Dit scriptje veranderd de ROOD/GROEN/BLAUW/CommitRGB waardes, slaapt daarna even en daarna veranderd ….
Er is een systemd service loopRGB in /etc/systemd/system/loopRGB.service
[Unit] Description=Service to loop RGB colours for Domoticz After=domoticz.service [Service] User=pi Group=pi Type=simple WorkingDirectory=/tmp ExecStart=/usr/local/bin/loopRGB ExecReload=/bin/kill -HUP $MAINPID Restart=on-abort [Install] WantedBy=multi-user.target
Start deze service via:
sudo systemctl start loopRGBsudo systemctl enable loopRGBsudo systemctl status loopRGB
Maak ook een dzVents – Variable sciprt aan:
return { on = { variables = { 'CommitRGB', }, }, logging = { level = domoticz.LOG_INFO, marker = 'CommitRGB', }, execute = function(domoticz, variable) --domoticz.log('Variable ' .. variable.name .. ' was changed', domoticz.LOG_INFO) local dz = domoticz local r = domoticz.variables('ROOD').value -- 0..255 local g = domoticz.variables('GROEN').value -- 0..255 local b = domoticz.variables('BLAUW').value -- 0..255 local bright = domoticz.variables('HELDERHEID').value -- 0..100 local mode = 4 -- color mode -- 0=illegal, -- 1=white Valid fields: none, -- 2=White with color temperature. Valid fields: t, -- 3=Color. Valid fields: r, g, b, -- 4=Custom (color + white). Valid fields: r, g, b, cw, ww, depending on device capabilities local temp = 0 -- temperatuur 0 (cold)..255(warm) local cw = 0 -- cold white level 0..255 local ww = 0 -- warm white level 0..255 (also used as level for monochrome white) -- ALS de kamer verlichtings schakelaar 'On' is dan verzend de kleur code en helderheid -- ANDERS ze de keukenlampen uit if dz.devices(1668).state == 'On' then dz.devices(1779).setColor(r, g, b, bright) -- Keukenlamp RGB Rechts dz.devices(1780).setColor(r, g, b, bright) -- Keukenlamp RGB Links else dz.devices(1779).switchOff() dz.devices(1780).switchOff() end -- domoticz.log('r= ' .. r .. ' g= ' .. g .. ' b= ' .. b .. ' ', domoticz.LOG_INFO) end }
Elke keer als de CommitRGB variable veranderd, wordt dit script getriggerd.
De lampen zullen continu van kleur veranderen. Uitzetten gaat niet, tenzij je een ouderwets schakelaartje gebruikt voor elke lamp of op een andere manier de lamp van het stroom haalt.