<% -- CyberData Intercom Configuration File Template local values = ... xml = require("LuaXml") local InitFile = "/var/www/provisioning/htdocs/CyberData/init.cfg" local function findSection(xmlobj, name) -- Cannot use xmlobj:find() because we don't want recursion for i,s in ipairs(xmlobj) do if s:tag() == name then return s end end return null end local function findOrAppendSection(xmlobj, name) return findSection(xmlobj, name) or xmlobj:append(name) end local function setValue(xmlobj, name, value) if value then findOrAppendSection(xmlobj, name)[1] = value end end local function yesno(xmlobj, name, value) if value ~= nil then if (value == false) then value = "No" elseif (value == true) then value = "Yes" end setValue(xmlobj, name, value) end end -- Load the initial config local init_cfg local res, err = pcall(function() init_cfg = xml.load(InitFile) end) if not res and err then init_cfg = xml.new("specific") end -- -- if values.device then local clocksettings = findOrAppendSection(init_cfg, "ClockSettings") setValue(clocksettings, "NTPServer", values.device.sntpserver) setValue(clocksettings, "NTPTimezone", values.device.timezone) end -- if values.reg1 then local sipsettings = findOrAppendSection(init_cfg, "SIPSettings") if values.device then setValue(sipsettings, "SIPServer", values.device.registrar) end setValue(sipsettings, "SIPUserID", values.reg1.extension) setValue(sipsettings, "SIPAuthID", values.reg1.extension) setValue(sipsettings, "SIPAuthPassword", values.reg1.password) -- These parameters are used by CyberData Intercom setValue(sipsettings, "DialoutExtension0", values.reg1.hotlinedestination) setValue(sipsettings, "DialoutID0", values.reg1.callerid) end -- if values.device then local DeviceSettings = findOrAppendSection(init_cfg, "DeviceSettings") -- These parameters are used by CyberData Intercom and CyberData Paging Zone Controller setValue(DeviceSettings, "AdminPassword", values.device.adminpassword) -- These parameters are used by CyberData Intercom setValue(DeviceSettings, "SpeakerVolume", values.device.cyberspeakervolume) setValue(DeviceSettings, "RingVolume", values.device.cyberringvolume) setValue(DeviceSettings, "MicGain", values.device.cybermicgain) yesno (DeviceSettings, "ActivateRelayWithDTMF", values.device.activaterelaywithdtmf) setValue(DeviceSettings, "DTMFActivationCode", values.device.dtmfactivationcode) setValue(DeviceSettings, "DTMFActivationDuration", values.device.dtmfactivationduration) yesno (DeviceSettings, "ActivateRelayDuringRing", values.device.activaterelayduringring) yesno (DeviceSettings, "ActivateRelayDuringCall", values.device.activaterelayduringcall) yesno (DeviceSettings, "AutoAnswerIncomingCalls", values.device.autoanswerincomingcalls) -- These parameters are used by CyberData Paging Zone Controller yesno (DeviceSettings, "BypassDTMF", values.device.bypassdtmf) yesno (DeviceSettings, "BeepOnInitialization", values.device.beeponinitialization) yesno (DeviceSettings, "BeepBeforePage", values.device.beepbeforepage) end -- -- These parameters are used by CyberData Paging Zone Controller if values.device then local ZoneSettings = findOrAppendSection(init_cfg, "ZoneSettings") yesno(ZoneSettings, "BypassDTMF", values.device.bypassdtmf) end -- Loop through Parameter Groups looking for 'zone' params for pg, pg_t in pairs(values) do -- Is it of the form zoneXX ? local num = string.match(pg, 'zone(%d%d)') if num then local ZoneSettings = findOrAppendSection(init_cfg, "ZoneSettings") yesno(ZoneSettings, 'Zone'..num..'Port1', pg_t.pagingport1) yesno(ZoneSettings, 'Zone'..num..'Port2', pg_t.pagingport2) yesno(ZoneSettings, 'Zone'..num..'Port3', pg_t.pagingport3) yesno(ZoneSettings, 'Zone'..num..'Port4', pg_t.pagingport4) end end -- -- These parameters are used by CyberData Intercom if values.device then local ButtonSettings = findOrAppendSection(init_cfg, "ButtonSettings") yesno (ButtonSettings, "PlayToneWhileRelayActive", values.device.playtonewhilerelayactive) end -- -- These parameters are used by CyberData Intercom if values.device then local SensorSettings = findOrAppendSection(init_cfg, "SensorSettings") yesno (SensorSettings, "SensorNormallyClosed", values.device.sensornormallyclosed) setValue (SensorSettings, "SensorTimeout", values.device.sensortimeout) yesno (SensorSettings, "SensorFlashLED", values.device.sensorflashled) yesno (SensorSettings, "SensorActivateRelay", values.device.sensoractivaterelay) yesno (SensorSettings, "SensorPlayLocally", values.device.sensorplaylocally) yesno (SensorSettings, "SensorCall", values.device.sensorcall) setValue (SensorSettings, "SensorDialOutExtension", values.device.sensordialoutextension) setValue (SensorSettings, "SensorDialOutID", values.device.sensordialoutid) yesno (SensorSettings, "SensorRepeat", values.device.sensorrepeat) yesno (SensorSettings, "SensorPlayRemotely", values.device.sensorplayremotely) end -- init_cfg:save("TEST-cyberdata.xml") print(init_cfg) %>