Page 1 of 1
Espeasy led dimming
Posted: Saturday 25 November 2017 17:14
by thecosmicgate
At the moment I got Espeasy running with a led strip . But the dimming is only possible using the HTTP URL code. But if possible I want to use the slider from domoticz to set between 0 - 100% . I looked at the script used by Quindor with his led solution but I can't get to work.
Is there some other solution for this ?
Thnx a lot
Sent from my SM-G935F using Tapatalk
Re: Espeasy led dimming
Posted: Sunday 14 January 2018 23:14
by MikeF
Try this:
Code: Select all
-- LED dimmer script script using ESPEasy
commandArray = {}
DomDevice = 'ESP_dimmer';
IP = 'xxxx';
PIN = "xx";
if devicechanged[DomDevice] then
if(devicechanged[DomDevice]=='Off') then
print ("OFF dim = "..uservariables['dimmer']);
CalcValue = 0;
else if(devicechanged[DomDevice]=='On') then
DomValue = uservariables['dimmer'];
print ("ON dim = "..uservariables['dimmer']);
CalcValue = DomValue;
else
print("Other");
DomValue = otherdevices_svalues[DomDevice];
CalcValue = math.floor(DomValue / 100 * 1023);
commandArray['Variable:dimmer'] = tostring(CalcValue);
print ("dim Level = "..uservariables['dimmer']);
end
end
runcommand = "curl 'http://" .. IP .. "/control?cmd=PWM," ..PIN.. "," .. CalcValue .. "'";
os.execute(runcommand);
print("PWM value= "..CalcValue);
end
return commandArray
Save this as a lua script (e.g., script_device_dimmer.lua) - change the x's to the IP address and GPIO pin number of your ESPeasy.
Set up a dummy device in Domoticz (initially as a switch, then change it to a dimmer) called 'ESP_dimmer', and a user variable called 'dimmer' (this will store and restore the dimmer value when you switch off / on).
You should then be able to control your LED from the slider of your Domoticz device.
Re: Espeasy led dimming
Posted: Wednesday 28 March 2018 17:54
by robatbentley
Sorry for being a bit dumb here, but what is actually loaded onto the 8266 (in my case an E12)? Is it an instance of ESPEasy or some LUA code?
I also tried using Quindors solution, got it working but stopped working some months later. Fixed the problem in the code loaded onto the 8266 but failed again more recently and don't have the coding skills to debug it all over again. ...so looking for a more resilent solution.
Sure I've missed some key element of this solution, but think I've managed all the rest of it.
My config...
Filename: script_device_LampDimmer.lua
...with PIN = "04"; (for GPI04 or pin D2)
Domoticz user variable called dimmer (string)
ESPEasy device "Switch" connected to Domoticz Idx. ...and controller to Domoticz.
Anything I've missed? ...as not seeing any PWM on pin D2 (GPI04) using scope.
Re: Espeasy led dimming
Posted: Wednesday 28 March 2018 22:43
by robatbentley
Been playing around with this solution and beginning to understand it a bit more. ...and looks like my problems is that I don't have curl installed as just setting the cmd http into a browser produces PWM wave form on my scope. Do a bit more tomorrow and get back to this forum.
Re: Espeasy led dimming
Posted: Wednesday 28 March 2018 23:44
by MikeF
If you're getting a PWM waveform (on pin 4) suggests that you've got ESPeasy running on your E12, and it's acting on the http command correctly (see the GPIO section of ESPeasy command reference here:
https://www.letscontrolit.com/wiki/index.php/GPIO).
The lua example I posted uses curl to send the http command; I'm running Domoticz on a Raspberry Pi - got no experience of using Domoticz (or curl) on Windows, I'm afraid.
Re: Espeasy led dimming
Posted: Thursday 29 March 2018 14:48
by robatbentley
Thanks Mike.
Made some progress and have installed curl on my windows 10 (64bit).
The curl commands (via cmd window) work fine now. i.e. The scope shows the PWM changing as requested.
However, the next stumbling block seems to be the "os.execute(runcommand);" as it just doesn't seem to be doing anything at all. i.e. Scope does not see any changes to PWM when selecting dimming settings from Domoticz switch device. No errors in the Domoticz log.
Does os.execute need any special installations of config to be used?
Any suggestions would be really useful.
Re: Espeasy led dimming
Posted: Friday 30 March 2018 19:13
by robatbentley
Mike,
Sounds like I may have to move into the R-Pi solution to get this working. Do you mind letting me know what your setup is...?
Not sure what OS to consider for this R-Pi, Domoticz, curl, os-execute etc system. Linux, Ubunto or Raspbian...?
Thanks, Rob
Re: Espeasy led dimming
Posted: Friday 30 March 2018 21:17
by madrian
Create a dummy slider, name it "LED".
In /domoticz/scripts/lua/ put:
script_device_LED.lua
Code: Select all
commandArray = {}
vals = {8,8,9,16,25,36,49,64,81,100,121,144,169,196,225,256,289,324,361,400,441,484,529,576,625,676,729,841,900,961,1023,1023}
DomDevice = 'LED'
IP = '192.168.1.73'
Port = '43333'
LEDtarget = 'LED1_target='
Fadetimer = 'Fadetimer='
FadeTime1 = '2000'
if devicechanged[DomDevice] then
print("dev " .. devicechanged[DomDevice]);
if(devicechanged[DomDevice]=='Off') then
DomValue = 0;
print ("Turning off " .. DomDevice);
runcommand = "echo " .. (Fadetimer) .."" .. (FadeTime1) .. "," .. (LEDtarget) .. "0 | socat - TCP:" .. (IP) .. ":" .. (Port) .. " ";
print (runcommand);
os.execute(runcommand);
return commandArray
else
DomValue = (otherdevices_svalues[DomDevice]);
end
CalcValue = vals[DomValue+1];
print ("Value received from Domoticz was " .. (DomValue) .." ");
print ("Calculated value for ESP is " .. (CalcValue) .." ");
if(CalcValue<0) then CalcValue=0; end
print ("Dimming " .. (DomDevice) .. " to " .. (CalcValue) .. " ");
runcommand = "echo " .. (Fadetimer) .."" .. (FadeTime1) .. "," .. (LEDtarget) .. "" .. (CalcValue) .. " | socat - TCP:" .. (IP) .. ":" .. (Port) .. " ";
print (runcommand);
os.execute(runcommand);
end
return commandArray
Check if you have "socat" installed. It's better than anything, because it's not freezing Domoticz while sending the command.
Re: Espeasy led dimming
Posted: Wednesday 16 May 2018 9:49
by ledfreak3d
i use this one just uses one scripts for all the easyesp lights
local lights = {
['Aqua Dimmer R/W'] = {ip = '192.168.1.91', pin = '4', rgb = false},
['Aqua Dimmer B/W'] = {ip = '192.168.1.91', pin = '12', rgb = false},
['Keuken-Warm'] = {ip = '192.168.1.40', pin = '5', rgb = false},
['Keuken-Wit'] = {ip = '192.168.1.40', pin = '14', rgb = false},
['Blokhut'] = {ip = '192.168.1.58', pin = '14', rgb = false},
['Lampjes'] = {ip = '192.168.1.58', pin = '4', rgb = false},
['Trap'] = {ip = '192.168.1.57', pin = '14', rgb = false},
['Test'] = {ip = '192.168.1.25', red = '15', grn = '13', blu = '12', rgb = true}
}
function setlight (ip, pin, dvalue)
os.execute("curl 'http://" .. ip.. "/control?cmd=PWM,".. pin .."," .. tostring(dvalue) .. ",1028'")
end
commandArray = {}
for deviceName,deviceValue in pairs(devicechanged) do
if (lights[deviceName]) then
if (deviceValue == 'Off') then
dvalue = 0 ;
elseif (deviceValue == 'On') then
dvalue = 1024
else
inputValue = tonumber(otherdevices_svalues[deviceName])
curve = 1.5848931924611
normalizedCurVal = (inputValue - 1.0) / 99.0
rangedValue = (math.pow(normalizedCurVal, curve) * 1023.0) + 1.0
dvalue = math.ceil(rangedValue)
end
if (lights[deviceName]['rgb']) then
setlight(lights[deviceName]["ip"], lights[deviceName]["red"], dvalue)
setlight(lights[deviceName]["ip"], lights[deviceName]["grn"], dvalue)
setlight(lights[deviceName]["ip"], lights[deviceName]["blu"], dvalue)
else
setlight(lights[deviceName]["ip"], lights[deviceName]["pin"], dvalue)
end
end
end
return commandArray
Re: Espeasy led dimming
Posted: Wednesday 10 February 2021 21:48
by Rub87
Hmm, bij mij lukt op een of andere manier de "pairs" operator niet.
Code: Select all
[string "--..."]:42: bad argument #1 to 'pairs' (table expected, got nil)
Re: Espeasy led dimming
Posted: Wednesday 10 February 2021 21:50
by jvdz
Guess you are running it as Time event and not only as Device event?
Re: Espeasy led dimming
Posted: Wednesday 10 February 2021 22:26
by Rub87
ok, that was the issue..
When using a normal dimmer value the script works as it should. I tested with rgb and then the output value is either 0, 1024 or if you want to make a color it outputs always 476 no matter which color is selected
After a bit of struggle this now seems to work well for me. I am using the PCA9685 so I need to write each color separate to the ESP..
Code: Select all
local devicename
devicename = 'Carport'
return {
on = {devices = {devicename}},
execute = function(domoticz, device)
local kleur
local brightness
local state
kleur = domoticz.devices(devicename).getColor()
brightness = domoticz.devices(devicename).level
state = domoticz.devices(devicename).state
local rood
local blauw
local groen
if (state == 'Off') then
os.execute('curl "http://10.0.1.19/control?cmd=PCAPWM,0,0"')
os.execute('curl "http://10.0.1.19/control?cmd=PCAPWM,1,0"')
os.execute('curl "http://10.0.1.19/control?cmd=PCAPWM,2,0"')
else
brightness = brightness/25
rood = domoticz.utils.round(kleur.r * brightness,0)
groen = domoticz.utils.round(kleur.g * brightness,0)
blauw = domoticz.utils.round(kleur.b * brightness,0)
os.execute('curl "http://10.0.1.19/control?cmd=PCAPWM,0,'..blauw..'"')
os.execute('curl "http://10.0.1.19/control?cmd=PCAPWM,1,'..groen..'"')
os.execute('curl "http://10.0.1.19/control?cmd=PCAPWM,2,'..rood..'"')
print ("R = " ..rood.. ", G = " ..groen.. ", B = "..blauw);
end
end
}
Re: Espeasy led dimming
Posted: Wednesday 25 September 2024 20:42
by eferemen
Hi,
I set up everything as you described and variable "dimmer" does not update as I move the dimmer slider. When updated manually, with json link everything seems to work fine. Where is my mistake? Which variable type should i choose? String?
MikeF wrote: ↑Sunday 14 January 2018 23:14
Try this:
Code: Select all
-- LED dimmer script script using ESPEasy
commandArray = {}
DomDevice = 'ESP_dimmer';
IP = 'xxxx';
PIN = "xx";
if devicechanged[DomDevice] then
if(devicechanged[DomDevice]=='Off') then
print ("OFF dim = "..uservariables['dimmer']);
CalcValue = 0;
else if(devicechanged[DomDevice]=='On') then
DomValue = uservariables['dimmer'];
print ("ON dim = "..uservariables['dimmer']);
CalcValue = DomValue;
else
print("Other");
DomValue = otherdevices_svalues[DomDevice];
CalcValue = math.floor(DomValue / 100 * 1023);
commandArray['Variable:dimmer'] = tostring(CalcValue);
print ("dim Level = "..uservariables['dimmer']);
end
end
runcommand = "curl 'http://" .. IP .. "/control?cmd=PWM," ..PIN.. "," .. CalcValue .. "'";
os.execute(runcommand);
print("PWM value= "..CalcValue);
end
return commandArray
Save this as a lua script (e.g., script_device_dimmer.lua) - change the x's to the IP address and GPIO pin number of your ESPeasy.
Set up a dummy device in Domoticz (initially as a switch, then change it to a dimmer) called 'ESP_dimmer', and a user variable called 'dimmer' (this will store and restore the dimmer value when you switch off / on).
You should then be able to control your LED from the slider of your Domoticz device.