Last active
December 8, 2021 15:38
-
-
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
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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