I rewrote my denon script with my last experiences

I have a lot of valuelist(4) that i have to decode to make denon commands of it.
I have the script error free , but i know this is not going to work because of a not correct value of a variable.
For example
--elseif denon_mixer.state == 'video game' then SourceToSet3 = 'VIDEO+GAME';
is now adressed by checking a range
local mixer_states = {
movie = 'MOVIE',
stereo = 'STEREO',
mch_stereo = 'MCH_STEREO',
dolby_digital = 'DOLBY_DIGITAL',
music = 'MUSIC',
game = 'GAME',
pure_direct = 'PURE_DIRECT',
direct = 'DIRECT',
standaard = 'STANDARD',
simulation = 'SIMULATION',
auto = 'AUTO',
left='LEFT',
video_game = 'VIDEO_GAME',
rock_arena = 'ROCK_ARENA'
}
Problem 1. Dzvents does not accept a special character '+' like variable = 'VIDEO+GAME'. My denon needs this sign in the command.
So i change it temporary to solve the error.
Problem 2 My selection list also had video game as a value, but i think the space will be a problem.
This one can be solved by changing my selecting device item from video game to video_game. But just curious if this is easy to solve too (no main issue, i can add _ sign for spaces)
Code: Select all
return {
on = {devices = {'denon*' }},
execute = function(dz, item,info)
_G.logLevel = dz.helpers.get_logtype(dz) -- dz.log('debug test',dz.LOG_DEBUG) this will only make it to the log when LOG_DEBUG is set AND dz.log('blabla',dz.LOG_FORCE) -- this will allways make it tp the log
_G.logMarker = _G.moduleLabel -- marker wordt scriptnaam, _G.logMarker = info.scriptName is idem
local messageTable = {} -- log alles, 0 = niets, 1 dom, 2 global, 3 alles... evt per regel ook in te regelen
-- HIER START DE EXECUTIE
local denon_volume = dz.devices('denon_volume')
local denon_source = dz.devices('denon_source')
local denon_radio = dz.devices('denon_radio')
local denon_mixer = dz.devices('denon_mixer')
local ipdenon = '192.168.20.26'
local volume = -50
local SourceToSet1 = 'TUNER'
local SourceToSet2 = '009540'
local SourceToSet3 = 'STEREO'
local denon_cmd_1 = 'curl http://' .. ipdenon .. '/MainZone/index.put.asp?cmd0=' -- basiscommando
local denon_cmd_2 = 'curl http://' .. ipdenon .. '/Tuner/TUNER/index.put.asp?cmd0=' -- basiscommando
local volume_states = { fluister = -20, zacht = -10, medium = volume, hard = 10, extra = 20,}
local source_states = { Radio = 'TUNER', Tv = 'SAT/CBL', Sonos = 'CD', Kodi = 'MPLAY', Pc = 'GAME', Cast = 'BD'}
local radio_states = {Skyradio = '010440',Qmusic = '009540', Veronica = '009490', radio538 = '010500',West = '008890' } -- LET OP OORSPRONKELIJKE WAARDE WAS 538 nu radio538 !! dus nog aanpassen in de treklijst
local mixer_states = {
movie = 'MOVIE',
stereo = 'STEREO',
mch_stereo = 'MCH_STEREO',
dolby_digital = 'DOLBY_DIGITAL',
music = 'MUSIC',
game = 'GAME',
pure_direct = 'PURE_DIRECT',
direct = 'DIRECT',
standaard = 'STANDARD',
simulation = 'SIMULATION',
auto = 'AUTO',
left='LEFT',
video_game = 'VIDEO_GAME',
rock_arena = 'ROCK_ARENA'
}
-- LET OP: alle vars met spaties vervangen door _ en de + in MCH+STEREO ook vervangen door een _. Nu geen foutmeldingen, maar mn stereo gaat dit niet accepteren!
-- LET OP: alle vars met spaties vervangen door _ en de + in DOLBY+DIGITAL ook vervangen door een _. Nu geen foutmeldingen, maar mn stereo gaat dit niet accepteren!
-- LET OP: alle vars met spaties vervangen door _ en de + in PURE+DIRECT ook vervangen door een _. Nu geen foutmeldingen, maar mn stereo gaat dit niet accepteren!
-- LET OP: alle vars met spaties vervangen door _ en de + in VIDEO+GAME ook vervangen door een _ nu geen foutmeldingen, maar mn stereo gaat dit niet accepteren!
-- LET OP: alle vars met spaties vervangen door _ en de + in ROCK+ARENA door een _. Nu geen foutmeldingen, maar mn stereo gaat dit niet accepteren!
local function get_waarde(dev_state, waardebereik, defvalue ) -- haal waarde op voor een dev_state, doorzoek een waardebereik en geef bij geen hit defvalue terug
for i_state, i_waarde in pairs(waardebereik) do
if i_state == dev_state then return i_waarde end
end
return defvalue
end
if item.name == 'denon_volume' and string.upper(denon_volume.state) == 'UIT' then
os.execute (denon_cmd_1 .. 'PutZone_OnOff%2FOFF' ); -- zet denon uit
dz.helpers.globalMessage2(dz,item,info,messageTable,'add',' DENON UIT, denon is uitgezet',30)
elseif item.name == 'denon_volume' and string.upper(denon_volume.state) ~= 'UIT' then
os.execute (denon_cmd_1 .. 'PutZone_OnOff%2FON' ); -- zet denon aan
dz.helpers.globalMessage2(dz,item,info,messageTable,'add', ' DENON AAN, denon is aangezet',30) -- overtollig, dus op 0 gezet
elseif item.name ~= 'denon_volume' and string.upper(denon_volume.state) == 'UIT' then
denon_volume.switchSelector(20)
os.execute (denon_cmd_1 .. 'PutZone_OnOff%2FON' ); -- zet denon aan
dz.helpers.globalMessage2(dz,item,info,messageTable,'add', ' DENON AAN, denon is aangezet',30)
elseif item.name ~= 'denon_volume' and string.upper(denon_volume.state) ~= 'UIT' then
dz.helpers.globalMessage2(dz,item,info,messageTable,'add', ' DENON AAN, denon stond al aan',30) -- overtollig, dus op 0 gezet
else
dz.helpers.globalMessage2(dz,item,info,messageTable,'add', ' DENON ERROR: onbekend situatie, item_name= ' .. item.name .. ' ,settings: ' .. denon_volume.state .. '/' .. denon_source.state .. '/' .. denon_radio.state .. '/' .. denon_mixer.state .. '/',10)
end
if string.upper(denon_volume.state) ~= 'UIT' then -- alleen maar settings toepassen als device ook aan staat
--if denon_volume.state == 'fluister' then volume = volume -20
--elseif denon_volume.state == 'zacht' then volume = volume -10
--elseif denon_volume.state == 'medium' then volume = volume
--elseif denon_volume.state == 'hard' then volume = volume + 10
--elseif denon_volume.state == 'extra' then volume = volume + 20
--end
--os.execute (denon_cmd_1 .. 'PutMasterVolumeSet/' .. volume); --set volume
os.execute (denon_cmd_1 .. 'PutMasterVolumeSet/' .. get_waarde(denon_volume.state,volume_states , volume)); --set volume NOG TESTEN !!!!!!!
--if denon_source.state == 'Radio' then SourceToSet1 = 'TUNER'; -- zet source
--elseif denon_source.state == 'Tv' then SourceToSet1 = 'SAT/CBL';
--elseif denon_source.state == 'Sonos' then SourceToSet1 = 'CD';
--elseif denon_source.state == 'Kodi' then SourceToSet1 = 'MPLAY';
--elseif denon_source.state == 'Pc' then SourceToSet1 = 'GAME';
--elseif denon_source.state == 'Cast' then SourceToSet1 = 'BD';
--end
--os.execute (denon_cmd_1 .. 'PutZone_InputFunction%2F' .. (SourceToSet1) ); -- Denon wordt op source gezet
os.execute (denon_cmd_1 .. 'PutZone_InputFunction%2F' .. get_waarde(denon_source.state,source_states , SourceToSet1) ); -- Denon wordt op source gezet
--if denon_radio.state == 'Skyradio' then SourceToSet2 = '010440'; -- zet radio zender
--elseif denon_radio.state == 'Qmusic' then SourceToSet2 = '009540';
--elseif denon_radio.state == 'Veronica' then SourceToSet2 = '009490';
--elseif denon_radio.state == '538' then SourceToSet2 = '010500';
--elseif denon_radio.state == 'West' then SourceToSet2 = '008890';
--end
--os.execute (denon_cmd_2 .. 'PutTunerFrequency%2F' .. (SourceToSet2) .. '&cmd1=aspMainZone_WebUpdateStatus%2F' ); --zet radio zender
os.execute (denon_cmd_1 .. 'PutZone_InputFunction%2F' .. get_waarde(denon_radio.state,mixer_states , SourceToSet3) ); -- Denon wordt op source gezet
--if denon_mixer.state == 'stereo' then SourceToSet3 = 'STEREO';
--elseif denon_mixer.state == 'mch stereo' then SourceToSet3 = 'MCH+STEREO';
--elseif denon_mixer.state == 'dolby digital' then SourceToSet3 = 'DOLBY+DIGITAL';
--elseif denon_mixer.state == 'movie' then SourceToSet3 = 'MOVIE';
--elseif denon_mixer.state == 'music' then SourceToSet3 = 'MUSIC';
--elseif denon_mixer.state == 'game' then SourceToSet3 = 'GAME';
--elseif denon_mixer.state == 'pure direct' then SourceToSet3 = 'PURE+DIRECT';
--elseif denon_mixer.state == 'direct' then SourceToSet3 = 'DIRECT';
--elseif denon_mixer.state == 'standaard' then SourceToSet3 = 'STANDARD';
--elseif denon_mixer.state == 'simulation' then SourceToSet3 = 'SIMULATION';
--elseif denon_mixer.state == 'auto' then SourceToSet3 = 'AUTO';
--elseif denon_mixer.state == 'left' then SourceToSet3 = 'LEFT';
--elseif denon_mixer.state == 'video game' then SourceToSet3 = 'VIDEO+GAME';
--elseif denon_mixer.state == 'rock arena' then SourceToSet3 = 'ROCK+ARENA';
--end
--os.execute (denon_cmd_1 .. 'PutSurroundMode%2F' .. (SourceToSet3) .. '&cmd1=aspMainZone_WebUpdateStatus%2F' ); -- mixer
os.execute (denon_cmd_1 .. 'PutZone_InputFunction%2F' .. get_waarde(denon_mixer.state,radio_states , SourceToSet2) ); -- Denon wordt op source gezet
dz.helpers.globalMessage2(dz,item,info,messageTable,'add', ' DENON ' .. string.upper(denon_volume.state) .. ' ,settings: ' .. denon_volume.state .. '/' .. SourceToSet1 .. '/' .. SourceToSet2 .. '/' .. SourceToSet3 .. '/' .. tostring(volume),30)
end
dz.helpers.globalMessage2(dz,item,info,messageTable,'chg') -- dump
end
}