Posts: 3
Threads: 1
Joined: Nov 2017
Reputation:
0
Hi,
Has anyone done a WLED integration? Tried searching the forums (and google), without luck. My goal is to use KNX+ LM visualization to control WLED (on/off, dim, color, effects).
I've also tried looking at other json scripts, but its quite difficult to understand with zero lua scripting knowledge...
The WLED page on json isn't very helpful ( https://kno.wled.ge/interfaces/json-api/)
WLED also support MQTT ( https://kno.wled.ge/interfaces/mqtt/), but that was even more difficult to understand
--Dan
Posts: 7836
Threads: 42
Joined: Jun 2015
Reputation:
450
Example for brightness control.
Attach an event script to 0..100% scale object. Change WLED_IP to your WLED device IP address.
Code: http = require('socket.http')
json = require('json')
ltn12 = require('ltn12')
url = 'http://WLED_IP/json/state'
value = event.getvalue()
data = json.encode({
on = value > 0,
bri = math.round(value * 2.55),
})
res, code = http.request({
url = url,
method = 'POST',
headers = {
['content-type'] = 'application/json',
['content-length'] = #data,
},
source = ltn12.source.string(data),
})
log(res, code)
Posts: 53
Threads: 10
Joined: May 2021
Reputation:
1
(20.05.2024, 20:43)danborge Wrote: Hi,
Has anyone done a WLED integration? Tried searching the forums (and google), without luck. My goal is to use KNX+ LM visualization to control WLED (on/off, dim, color, effects).
I've also tried looking at other json scripts, but its quite difficult to understand with zero lua scripting knowledge...
The WLED page on json isn't very helpful (https://kno.wled.ge/interfaces/json-api/)
WLED also support MQTT (https://kno.wled.ge/interfaces/mqtt/), but that was even more difficult to understand
--Dan
I have developed a pretty good library if you want. It just controls one segment though, but you can adapt it a little to control more than one
Posts: 3
Threads: 1
Joined: Nov 2017
Reputation:
0
21.05.2024, 18:05
(This post was last modified: 21.05.2024, 18:06 by danborge.)
(21.05.2024, 11:37)Andrea Becagli Wrote: (20.05.2024, 20:43)danborge Wrote: Hi,
Has anyone done a WLED integration? Tried searching the forums (and google), without luck. My goal is to use KNX+ LM visualization to control WLED (on/off, dim, color, effects).
I've also tried looking at other json scripts, but its quite difficult to understand with zero lua scripting knowledge...
The WLED page on json isn't very helpful (https://kno.wled.ge/interfaces/json-api/)
WLED also support MQTT (https://kno.wled.ge/interfaces/mqtt/), but that was even more difficult to understand
--Dan
I have developed a pretty good library if you want. It just controls one segment though, but you can adapt it a little to control more than one
Thanks, that would be great Got one segment on two different ESP32s, so its just what I'm looking for.
(21.05.2024, 07:24)admin Wrote: Example for brightness control.
Attach an event script to 0..100% scale object. Change WLED_IP to your WLED device IP address.
Code: http = require('socket.http')
json = require('json')
ltn12 = require('ltn12')
url = 'http://WLED_IP/json/state'
value = event.getvalue()
data = json.encode({
on = value > 0,
bri = math.round(value * 2.55),
})
res, code = http.request({
url = url,
method = 'POST',
headers = {
['content-type'] = 'application/json',
['content-length'] = #data,
},
source = ltn12.source.string(data),
})
log(res, code)
Thanks, I'll make a script and try this
Posts: 53
Threads: 10
Joined: May 2021
Reputation:
1
22.05.2024, 15:31
(This post was last modified: 22.05.2024, 15:37 by Andrea Becagli.)
There you go, I will attach the library i made. Sorry I am italian so most of the comments are in italian
Code: json = require('json')
http = require('socket.http')
wled_ctrl = {
defaults = {
debug_mode = false,
token = nil
}
}
--[[
Tutta la documentazione sulla Api puo essere ritrovata a https://kno.wled.ge/interfaces/json-api/.
Per usare questa libreria sará necessario creare degli oggetti a cui poi collegare uno script su evento
in cui richiamare le varie funzioni.
Es. indirizzo di gruppo 0/0/1 COMANDO ON-OFF WLED verra collegato allo script su evento
local on_off = event.getvalue()
wled = wled_ctrl:init({ip = {{IP}}, debug_mode = false})
wled:accensione(on_off, ga_stato)
]]--
----- CREAZIONE DELLA CLASSE WLED CONTROLLER -----
function wled_ctrl:init(params)
local n = setmetatable({}, { __index = wled_ctrl })
local k,v
-- set user parameters
n.params = params
for k, v in pairs(wled_ctrl.defaults) do
if n.params[ k ] == nil then
n.params[ k ] = v
end
end
return n
end
----- RICHIESTA POST HTTP GENERICA -----
function wled_ctrl:basic_post_req(body_req)
res, err = http.request({
url = 'http://'..self.params.ip..'/json/state',
method = "POST",
body = body_req,
headers = {["Content-Type"] = "text/plain"}
})
return res,err
end
----- ACCENSIONE -----
function wled_ctrl:accensione(valore, stato)
body1= '{"on":'..tostring(valore)..'}'
res,err = self:basic_post_req(body1)
if err == 200 then grp.write(stato, valore) end
if self.params.debug_mode and err ~= 200 then log("accensione - Error: "..tostring(err)) end
end
----- LUMINOSITA -----
function wled_ctrl:luminosita(valore, stato)
body1= '{"bri":'..tostring(math.floor(valore*2.55))..'}'
res,err = self:basic_post_req(body1)
if err == 200 then grp.write(stato, valore) end
if self.params.debug_mode and err ~= 200 then log("luminosita - Error: "..tostring(err)) end
end
----- COLORE -----
function wled_ctrl:colore(valore, stato)
hexcolor = string.format("%X",tostring(valore))
while hexcolor:len() < 6 do
hexcolor = "0"..hexcolor
end
log(hexcolor)
body1= '{"seg":[{"col":["'..hexcolor..'"]}]}'
res,err = self:basic_post_req(body1)
if err == 200 then grp.write(stato, valore) end
if self.params.debug_mode and err ~= 200 then log("colore - Error: "..tostring(err)) end
end
----- EFFETTI -----
function wled_ctrl:effetto(valore, stato)
body1= '{"seg":[{"fx":'..tostring(valore)..'}]}'
res,err = self:basic_post_req(body1)
if err == 200 then grp.write(stato, valore) end
if self.params.debug_mode and err ~= 200 then log("effetto - Error: "..tostring(err)) end
end
----- COLOR TEMP -----
function wled_ctrl:color_temp(valore, stato)
body1= '{"seg":[{"cct":'..tostring(valore)..'}]}'
res,err = self:basic_post_req(body1)
if err == 200 then grp.write(stato, valore) end
if self.params.debug_mode and err ~= 200 then log("color temp - Error: "..tostring(err)) end
end
----- PALETTE -----
function wled_ctrl:palette(valore, stato)
body1= '{"seg":[{"pal":'..tostring(valore)..'}]}'
res,err = self:basic_post_req(body1)
if err == 200 then grp.write(stato, valore) end
if self.params.debug_mode and err ~= 200 then log("palette - Error: "..tostring(err)) end
end
----- STATO -----
function wled_ctrl:stato()
res,err = self:basic_post_req('{}')
local info = json.decode(res)
if self.params.debug_mode then log("Response: "..tostring(res).." Error: "..tostring(err)) end
return {
accensione = info.state.on,
luminosita = info.state.bri,
colore =info.state.seg[1].col[1],
effetto = info.state.seg[1].fx,
palette = info.state.seg[1].pal
}
end
Posts: 3
Threads: 1
Joined: Nov 2017
Reputation:
0
(22.05.2024, 15:31)Andrea Becagli Wrote: There you go, I will attach the library i made. Sorry I am italian so most of the comments are in italian
Code: json = require('json')
http = require('socket.http')
wled_ctrl = {
defaults = {
debug_mode = false,
token = nil
}
}
--[[
Tutta la documentazione sulla Api puo essere ritrovata a https://kno.wled.ge/interfaces/json-api/.
Per usare questa libreria sará necessario creare degli oggetti a cui poi collegare uno script su evento
in cui richiamare le varie funzioni.
Es. indirizzo di gruppo 0/0/1 COMANDO ON-OFF WLED verra collegato allo script su evento
local on_off = event.getvalue()
wled = wled_ctrl:init({ip = {{IP}}, debug_mode = false})
wled:accensione(on_off, ga_stato)
]]--
----- CREAZIONE DELLA CLASSE WLED CONTROLLER -----
function wled_ctrl:init(params)
local n = setmetatable({}, { __index = wled_ctrl })
local k,v
-- set user parameters
n.params = params
for k, v in pairs(wled_ctrl.defaults) do
if n.params[ k ] == nil then
n.params[ k ] = v
end
end
return n
end
----- RICHIESTA POST HTTP GENERICA -----
function wled_ctrl:basic_post_req(body_req)
res, err = http.request({
url = 'http://'..self.params.ip..'/json/state',
method = "POST",
body = body_req,
headers = {["Content-Type"] = "text/plain"}
})
return res,err
end
----- ACCENSIONE -----
function wled_ctrl:accensione(valore, stato)
body1= '{"on":'..tostring(valore)..'}'
res,err = self:basic_post_req(body1)
if err == 200 then grp.write(stato, valore) end
if self.params.debug_mode and err ~= 200 then log("accensione - Error: "..tostring(err)) end
end
----- LUMINOSITA -----
function wled_ctrl:luminosita(valore, stato)
body1= '{"bri":'..tostring(math.floor(valore*2.55))..'}'
res,err = self:basic_post_req(body1)
if err == 200 then grp.write(stato, valore) end
if self.params.debug_mode and err ~= 200 then log("luminosita - Error: "..tostring(err)) end
end
----- COLORE -----
function wled_ctrl:colore(valore, stato)
hexcolor = string.format("%X",tostring(valore))
while hexcolor:len() < 6 do
hexcolor = "0"..hexcolor
end
log(hexcolor)
body1= '{"seg":[{"col":["'..hexcolor..'"]}]}'
res,err = self:basic_post_req(body1)
if err == 200 then grp.write(stato, valore) end
if self.params.debug_mode and err ~= 200 then log("colore - Error: "..tostring(err)) end
end
----- EFFETTI -----
function wled_ctrl:effetto(valore, stato)
body1= '{"seg":[{"fx":'..tostring(valore)..'}]}'
res,err = self:basic_post_req(body1)
if err == 200 then grp.write(stato, valore) end
if self.params.debug_mode and err ~= 200 then log("effetto - Error: "..tostring(err)) end
end
----- COLOR TEMP -----
function wled_ctrl:color_temp(valore, stato)
body1= '{"seg":[{"cct":'..tostring(valore)..'}]}'
res,err = self:basic_post_req(body1)
if err == 200 then grp.write(stato, valore) end
if self.params.debug_mode and err ~= 200 then log("color temp - Error: "..tostring(err)) end
end
----- PALETTE -----
function wled_ctrl:palette(valore, stato)
body1= '{"seg":[{"pal":'..tostring(valore)..'}]}'
res,err = self:basic_post_req(body1)
if err == 200 then grp.write(stato, valore) end
if self.params.debug_mode and err ~= 200 then log("palette - Error: "..tostring(err)) end
end
----- STATO -----
function wled_ctrl:stato()
res,err = self:basic_post_req('{}')
local info = json.decode(res)
if self.params.debug_mode then log("Response: "..tostring(res).." Error: "..tostring(err)) end
return {
accensione = info.state.on,
luminosita = info.state.bri,
colore =info.state.seg[1].col[1],
effetto = info.state.seg[1].fx,
palette = info.state.seg[1].pal
}
end
Thanks. I'll test this No problem with the Italian, google translate if its something I dont understand
Posts: 345
Threads: 77
Joined: Jun 2017
Reputation:
6
Hi,
long time ago I used very interesting project with ESP8266 and ws2812 LEDs. It was Tobias Blum's MC lighting project.
Some links I found below.
https://github.com/toblum/McLighting/
https://github.com/FabLab-Luenen/McLighting
https://hackaday.io/project/122568-mc-lighting
https://www.hackster.io/news/mclighting-...b1705a44de
Why I decided to mention it - you can very easy control yours WLED's over WiFi with mobile phone, and main - using your LM/SL/HL and just REST API commands - only one line string commands.
Possible to change WLED effects, colors, On/Off, Dimm etc. I also created color clock - at 7:00 all wleds are green, at night all are red etc
BR,
Alexander
|