Skip to content

Instantly share code, notes, and snippets.

@xopr
Last active December 8, 2021 15:38
Show Gist options
  • Save xopr/0583cbe8511be54b2586a95ab798ddd8 to your computer and use it in GitHub Desktop.
Save xopr/0583cbe8511be54b2586a95ab798ddd8 to your computer and use it in GitHub Desktop.
freeswitch lua script that allows a user to call in and change the lights
local socket = require 'socket'
local maxbuffer = 100
local pixels = 200
local espixelflutIp = '192.168.1.234'
local espixelflutPort = '1234'
local musicFile = '/mnt/nasi/Media/Muziek/L.E.D. There Be Light (Extended Mix).mp3'
udp = socket.udp()
udp:setpeername(espixelflutIp, espixelflutPort)
udp:settimeout(1)
udp:send('PX 199 FFFFFF')
-- Store the color
local R = 0
local G = 0
local B = 0
-- Current range is 'partial', toggle with '*'
local low = 85
local mid = 170
local hi = 255
local full = false
function playSong()
episode = num;
session:speak('Use keypad to set color.');
session:speak('Zero is off.');
session:speak('Star is toggle mode.');
freeswitch.consoleLog('info', 'Flutlight extension');
session:setInputCallback('parseInput', 'false');
session:streamFile(musicFile)
end
function parseInput(session, type, obj, arg)
if (type == 'dtmf') then
key = obj['digit']
if key == "1" then
R = low
session:speak('Red low');
elseif key == "2" then
R = mid
session:speak('Red medium');
elseif key == "3" then
R = hi
session:speak('Red high');
end
if key == "4" then
G = low
session:speak('Green low');
elseif key == "5" then
G = mid
session:speak('Green medium');
elseif key == "6" then
G = hi
session:speak('Green high');
end
if key == "7" then
B = low
session:speak('Blue low');
elseif key == "8" then
B = mid
session:speak('Blue medium');
elseif key == "9" then
B = hi
session:speak('Blue high');
end
if key == "0" then
session:speak('All lights off');
R = 0
G = 0
B = 0
end
-- Toggle mode
if key == "*" then
full = not full
if full then
low = 0
mid = 127
session:speak('Dual light level mode');
else
low = 85
mid = 170
session:speak('Triple light level mode');
end
end
local packet1 = ""
local packet2 = ""
for led = 1, 100 do
packet1 = packet1 .. string.format("PX %03d %02x%02x%02x", led, R, G, B )
end
for led = 101, 200 do
packet2 = packet2 .. string.format("PX %03d %02x%02x%02x", led, R, G, B )
end
udp:send( packet1 )
udp:send( packet2 )
end
end
session:answer()
session:setAutoHangup(false);
session:set_tts_params('flite', 'kal');
session:speak('Entering flutlight.');
while (session:ready()) do
os.execute('sleep 1');
playSong();
end
--udp:close()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment