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.
