ive set them to show the color changes at 0, 50% and 100% but when running their color is relative to actual cpu% 
--[[
led conky
in conkyrc
lua_load /path/to/sciptname.lua
lua_draw_hook_pre led
TEXT
]]
require 'cairo'
function conky_led()
if conky_window == nil then return end
local cs = cairo_xlib_surface_create(conky_window.display, conky_window.drawable, conky_window.visual, conky_window.width, conky_window.height)
cr = cairo_create(cs)
local updates=tonumber(conky_parse('${updates}'))
if updates>5 then
--#########################################################################################################
--call like so
-- led(xposition,yposition,radius,getcolor(tonumber(conky_parse("${conky variable you want to show}"))))
--only works for % outputs at moment
led(100,30,15,getcolor(tonumber(conky_parse("${cpu cpu0}"))))
led(135,30,10,getcolor(tonumber(conky_parse("${cpu cpu1}"))))
led(165,30,10,getcolor(tonumber(conky_parse("${cpu cpu2}"))))
--#########################################################################################################
end-- if updates>5
cairo_destroy(cr)
cairo_surface_destroy(cs)
cr=nil
end-- end main function
function getcolor(num)
local cv=num
local str,stg,stb,sta=0,1,0,1
local mr,mg,mb,ma=1,1,0,1
local fr,fg,fb,fa=1,0,0,1
--for i=0,nd do
if cv<50 then
colr=((mr-str)*(cv/(50)))+str
colg=((mg-stg)*(cv/(50)))+stg
colb=((mb-stb)*(cv/(50)))+stb
cola=((ma-sta)*(cv/(50)))+sta
elseif cv>=50 then
colr=((fr-mr)*((cv-(50))/(50)))+mr
colg=((fg-mg)*((cv-(50))/(50)))+mg
colb=((fb-mb)*((cv-(50))/(50)))+mb
cola=((fa-ma)*((cv-(50))/(50)))+ma
else
colr=br
colg=bg
colb=bb
cola=ba
end
--end
return colr,colg,colb
end
function led (centerx,centery,radius2,xred,xgreen,xblue)
--button middle
cairo_set_source_rgba (cr,xred,xgreen,xblue,1)
cairo_arc(cr,centerx,centery,radius2,0,2*math.pi)
cairo_fill (cr)
--outer ring
pat = cairo_pattern_create_radial(
centerx,--center 1 x
centery,--center 1 y
0,--center 1 radius
centerx,--center 2 x
centery,--center 2 y
radius2--radius 2
)
cairo_pattern_add_color_stop_rgba (pat, 0, 0, 0, 0, 0);
cairo_pattern_add_color_stop_rgba (pat, 0.7, 0, 0, 0, 0.2)
cairo_pattern_add_color_stop_rgba (pat, 0.85, 0, 0, 0, 0);
cairo_pattern_add_color_stop_rgba (pat, 1, 0, 0, 0, 0.2);
cairo_set_source (cr, pat);
cairo_arc (cr, centerx, centery, radius2, 0, 2 * math.pi);
cairo_fill (cr);
cairo_pattern_destroy (pat);
--inner flat
cairo_set_source_rgba (cr,xred,xgreen,xblue,1)
cairo_arc(cr,centerx,centery,radius2*0.7,0,2*math.pi)
cairo_fill (cr)
--center top offset
pat = cairo_pattern_create_radial(
centerx,--center 1 x
centery,--center 1 y
radius2/2.5,--center 1 radius
centerx,--center 2 x
centery,--center 2 y
radius2*0.7--radius 2
)
cairo_pattern_add_color_stop_rgba (pat, 0, 0, 0, 0, 0);
cairo_pattern_add_color_stop_rgba (pat, 1, 0, 0, 0, 0.2);
cairo_set_source (cr, pat);
cairo_arc (cr, centerx, centery, radius2*0.7, 0, 2 * math.pi);
cairo_fill (cr);
cairo_pattern_destroy (pat);
--center white spot
pat = cairo_pattern_create_radial(
centerx,--center 1 x
centery,--center 1 y
radius2/50,--center 1 radius
centerx,--center 2 x
centery,--center 2 y
(radius2*0.7)*0.6--radius 2
)
cairo_pattern_add_color_stop_rgba (pat, 0, 1, 1, 1, 1);
cairo_pattern_add_color_stop_rgba (pat, 1, 1, 1, 1, 0);
cairo_set_source (cr, pat);
cairo_arc (cr, centerx, centery, (radius2*0.7)*0.6, 0, 2 * math.pi);
cairo_fill (cr);
cairo_pattern_destroy (pat);
--overlay
pat = cairo_pattern_create_radial(
centerx-(radius2/2),--center 1 x
centery-(radius2/1.3),--center 1 y
0,--center 1 radius
centerx-(radius2/1.9),--center 2 x
centery-(radius2/1.9),--center 2 y
radius2*1.75--radius 2
)
cairo_pattern_add_color_stop_rgba (pat, 0, 1, 1, 1, 0.6);
cairo_pattern_add_color_stop_rgba (pat, 1, 1, 1,1, 0);
cairo_set_source (cr, pat);
cairo_arc (cr, centerx, centery, radius2+(radius2/20), 0, 2 * math.pi);
cairo_fill (cr);
cairo_pattern_destroy (pat);
end
It's hard to find something if you don't know what you're looking for.
I have a blog, it's mostly about conky and lua stuff... go
here.