Enigma 2 Set top Box Integration

In this subforum you can show projects you have made, or you are busy with. Please create your own topic.

Moderator: leecollings

Gelo5
Posts: 15
Joined: Friday 14 July 2017 20:30
Target OS: Raspberry Pi / ODroid
Domoticz version: Beta
Location: Poland
Contact:

Re: Enigma 2 Set top Box Integration

Post by Gelo5 »

2017-07-20 15:15:00.571 LUA: Start Enigma Check
2017-07-20 15:15:00.589 Error: EventSystem: in Enigma: [string "-- This script is used in conjunction with En..."]:136: bad argument #1 to 'sub' (string expected, got nil)
User avatar
lonebaggie
Posts: 86
Joined: Tuesday 31 January 2017 13:21
Target OS: Raspberry Pi / ODroid
Domoticz version: beta
Location: England
Contact:

Re: Enigma 2 Set top Box Integration

Post by lonebaggie »

Maybe a bug . Put the following characters into EnigmaStatus user variable 1|1
Gelo5
Posts: 15
Joined: Friday 14 July 2017 20:30
Target OS: Raspberry Pi / ODroid
Domoticz version: Beta
Location: Poland
Contact:

Re: Enigma 2 Set top Box Integration

Post by Gelo5 »

YES YES YES!!!!!!!!!!!!! but...... the data don't change on the desktop. Still OFF (Stutus, Programs)
Restart system an BINGo!!
Thank you for the help. Everything works!!!
This is my first Lua. I'm using Python.
THANK YOY VERY MUCH! Dziekuję.
User avatar
lonebaggie
Posts: 86
Joined: Tuesday 31 January 2017 13:21
Target OS: Raspberry Pi / ODroid
Domoticz version: beta
Location: England
Contact:

Re: Enigma 2 Set top Box Integration

Post by lonebaggie »

Good News . The EnigmaStatus should show if the box is on or off and channel currently being Viewed. I will fix the bug . Cannot manipulate strings in LUA if they are blank !!
Gelo5
Posts: 15
Joined: Friday 14 July 2017 20:30
Target OS: Raspberry Pi / ODroid
Domoticz version: Beta
Location: Poland
Contact:

Re: Enigma 2 Set top Box Integration

Post by Gelo5 »

Script does not see "+". For example Canal + HD, Planete+ HD, Canal+ Film HD etc...

EngmaList: CANAL+ HD
EnigmaStatus: f|CANAL HD

2017-07-20 17:47:00.607 LUA: EnigmaChannel is CANAL+ HD
2017-07-20 17:47:00.607 LUA: Channel changed to CANAL+ HD
2017-07-20 17:47:00.616 LUA: No Switch List Update
2017-07-20 17:47:00.732 LUA: Enigama Scan Start
2017-07-20 17:47:00.732 LUA: Channel CANAL HD not known
Gelo5
Posts: 15
Joined: Friday 14 July 2017 20:30
Target OS: Raspberry Pi / ODroid
Domoticz version: Beta
Location: Poland
Contact:

Re: Enigma 2 Set top Box Integration

Post by Gelo5 »

Last Beta (8197) does not update the switch status.
Edit:
Next Beta 3.8199 - Works again!
User avatar
lonebaggie
Posts: 86
Joined: Tuesday 31 January 2017 13:21
Target OS: Raspberry Pi / ODroid
Domoticz version: beta
Location: England
Contact:

Re: Enigma 2 Set top Box Integration

Post by lonebaggie »

yes bug in adding + to user variable Cannot add + via user interface or API. Can add + via LUA looking at issue :)
Gelo5
Posts: 15
Joined: Friday 14 July 2017 20:30
Target OS: Raspberry Pi / ODroid
Domoticz version: Beta
Location: Poland
Contact:

Re: Enigma 2 Set top Box Integration

Post by Gelo5 »

I resolved the problem by removing "+" from the list of programs. Instead Canal + HD is Canal HD etc ..
User avatar
lonebaggie
Posts: 86
Joined: Tuesday 31 January 2017 13:21
Target OS: Raspberry Pi / ODroid
Domoticz version: beta
Location: England
Contact:

Re: Enigma 2 Set top Box Integration

Post by lonebaggie »

fixed the bug its an issue with html same with spaces


Code: Select all

-- This script is used in conjuction with Enigma-Scan to maintain selector switch status with Enigma 2 settop boxes
--
-- This scripts scan the enigma 2 box to obtain current device state, and current current channel being views.
-- These  are stored in the EnigmaStatus user variable. 
--
-- This script  relies on a least 2 virtual switches being created an on/off switch (to turn on/off the Enigma2  box) and a selector switch.
-- Each selector switch and the off/on switch  must be pre-populated  with  the correct TV channels names  and action URL.
--
-- ********Setup Selector Switch Instructions**********
--
-- Run the following HHTP call against the Enigma2 set-top box will  obtain the correct information to populate the selector switch.
--
-- http://192.168.1.99/web/getallservices (where 192.168.1.99) is IP address of the Enigma 2 Box
--
-- This will return a complete list of all channels the Enigma 2 box recognises. 
-- Note the following information :-
--               <e2servicename>  
--               <e2servicereference> that matches the <e2servicename>. 
--              
-- Note due to limitation of selector switches they can only hold 10 levels. So create as many selector switches as required. 
-- Each selector switch can hold a different category of Channels Entertainment, MOvies , Music , etc.
--
-- The Selector level  in the selector switch must match the <e2servicename>  exactly.
-- The Selector action in the selector switch uses the following syntax http://192.168.1.91/web/zap?sRef=<e2servicereference>.
-- 
-- *********Setup On/Off switch instructions **************
--
-- to turn the Enigma2 box :-
--
--on            http://192.168.1.99/web/powerstate?newstate=4 (where 192.168.1.99 is the IP address of the Enigma2 box)
--off           http://192.168.1.91/web/powerstate?newstate=5
--
--
--
-- The script will also automatically  populate the EnigmaList(n) user variable(s) with the selector levels in the selector switch(es) created above. 
-- One EnigmaList(n) user variable for each selector switch created above.
--
-- The following user variables must be created before the script is run.
--
-- EnigmaParams  Multiple values to hold IP and switch details. Each value is  separated  by a |. 
--               The position in the parameter list determines the role of the value.
--
--               1 = * This is an optional value . If present will cause the script to delete and recreate the data
--                     in EnigmaList(n) user variable(s). Once updated the script will remove the "*" .                 
--               2 = Ip address of Enigma2 Box 
--               3 = On/Off switch IdX
--               4+ = IdX(es) of selector switch(es) which hold channel list. One list for each switch value specified.
--
--               Example 192.168.1.99|45|47|49|50 
--               Ip address,IdX of on/off switch that control Enigma2 power state,Idx of selector switches
--
--               Example *|192.168.1.99|45|47|49|50 as above but will cause EnigmaList(n) values to be regenerated 
--            
-- EnigmaList(n) Multiple variables to hold individual selector switch LevelNames. 
--               One User variable must be created for each selector switch defined.  
--               This is popuated by this script. 
-- EnigmaStatus  This holds the state of Enigma2 box and the current channel being viewed.Each value is seperated by a "|"
--               f = not in standby. t = is in standby
--
-- User variables are updated in a way other that other scripts (Enigma-Scan) can be triggered if any of the uservariables change.
-- If the EnigmaParams user variable is edited to start with a "*" this will trigger this script to update EnigmaChannel(*) with the 
-- contents of the selector switches defined above.
--
-- The Enigma-Scan script which is trigged from  this script will use the data in the user variables above to maintain the status
-- of the selector switches defined in EnigmaParams
--
-- Version 1.9



-- Setup Variables
commandArray = {}
Level = 0
http = require("socket.http")
json = (loadfile "/home/pi/domoticz/scripts/lua/JSON.lua")()
LevelNames = ""

-- Set functions

function lines(str)
  local t = {}
  local function helper(line) table.insert(t, line) return "" end
  helper((str:gsub("(.-)\r?\n", helper)))
  return t
end

function get(data,name)
    return data:match("<"..name..">(.-)</"..name..">")
end

function split(pString, pPattern)
    local Table = {}  
    local fpat = "(.-)" .. pPattern
    local last_end = 1
    local s, e, cap = pString:find(fpat, 1)
    while s do
        if s ~= 1 or cap ~= "" then
            table.insert(Table,cap)
        end
        last_end = e+1
        s, e, cap = pString:find(fpat, last_end)
    end
    if last_end <= #pString then
        cap = pString:sub(last_end)
        table.insert(Table, cap)
   end
   return Table
end

-- Start Program

-- Use function to move all params into tables
Vars = split(uservariables["EnigmaParams"],"|")
Status = split(uservariables["EnigmaStatus"],"|")
change = 0
On = Status[1]
Channel = Status[2]
-- Work out which table value holds the IP address. All params are shifted if the "*" params is used.
if Vars[1] == "*" then
    IP = Vars[2]
else
    IP = Vars[1]
end
print("Start Enigma Check")
-- Obtain powerstate of Enigma2 box
HttpPart = "http://" .. IP .. "/web/powerstate"
body = http.request(HttpPart)
-- If box is Off ( not in standby) script terminates
if body == nil then
    print ("Enigma is Off")
    return commandArray
end
row=lines(body)
Power = row[4]
Power = string.sub(Power, 1, 1)
On = string.sub (On, 1, 1)
-- check powerstate
if Power == On then
    print "No Power state change"
else
    print ("Powerstate changed" )
    if Power == "f" then
        change = 1
    end
    if Power == "t" then
       change = 1
    end
end
-- Get Current TV channel
HttpPart = "http://" .. IP .. "/web/subservices"
body = http.request(HttpPart)
if body == nil then
    print ("Enigma is Off")
    return commandArray
end
row=lines(body)
TChannel = get(row[5],"e2servicename")
-- Check Current Channel with Stored channel
if TChannel == Channel then
    print "Channel not Changed"
else
    print ("Channel changed from " .. Channel .. " to " .. TChannel)
    change = 1
end
-- If user variables different from current trigger Json to change user variable . This will trigger lua scripts
if change == 1 then
    TChannel=string.gsub(TChannel, " ", "%%20")
    TChannel=string.gsub(TChannel, "+", "%%2b")
    print ("New Value " .. TChannel)
    Param = (Power .. "|" .. TChannel)
    HttpPart=("curl 'http://127.0.0.1:8080/json.htm?param=updateuservariable&type=command&vname=EnigmaStatus&vtype=2&vvalue=" .. Param .. "' &")
    os.execute(HttpPart)
end
-- if "*" param used get SElector switch level lists and update user variables
if Vars[1] == "*" then
    for i=4,#Vars do  
        print ("Switch List Update Switch " .. Vars[i])
        HttpPart=("curl 'http://127.0.0.1:8080/json.htm?type=devices&rid=" .. Vars[i] .. "' &") 
        config=assert(io.popen(HttpPart))
        Sw = config:read('*all')
        config:close()
        SwData = json:decode(Sw)
        Level = SwData["result"][1]["LevelNames"]
        Var = ("Variable:EnigmaList" .. (i-3))
        commandArray[Var] = "*" .. (Vars[i] .. "|" .. string.sub(Level,5))
    end
    commandArray["Variable:EnigmaParams"] = string.sub(uservariables["EnigmaParams"], 3)
else
    print ("No Switch List Update")
end
return commandArray
Last edited by lonebaggie on Friday 11 August 2017 18:57, edited 1 time in total.
Gelo5
Posts: 15
Joined: Friday 14 July 2017 20:30
Target OS: Raspberry Pi / ODroid
Domoticz version: Beta
Location: Poland
Contact:

Re: Enigma 2 Set top Box Integration

Post by Gelo5 »

When i try to update (*|192.168.1.112|31|32|........)
Error: EventSystem: in Enigma: [string "-- This script is used in conjuction with Eni..."]:183: attempt to index global 'SwData' (a nil value)
and
2017-08-06 18:18:00.573 LUA: Start Enigma Check
2017-08-06 18:18:00.588 LUA: No Power state change
2017-08-06 18:18:00.606 LUA: Channel changed from TNT HD to Paramount Channel HD
2017-08-06 18:18:00.606 LUA: New Value Paramount%20Channel%20HD
2017-08-06 18:18:00.611 LUA: No Switch List Update

ver.1.8
2017-08-06 18:21:00.704 LUA: Enigama Scan Start
2017-08-06 18:21:00.705 LUA: Update Switch Paramount Channel HD With 39|02|80
User avatar
lonebaggie
Posts: 86
Joined: Tuesday 31 January 2017 13:21
Target OS: Raspberry Pi / ODroid
Domoticz version: beta
Location: England
Contact:

Re: Enigma 2 Set top Box Integration

Post by lonebaggie »

Make sure your level names and Idx numbers match your selector switches the error is in the code that updates the enigma lists . It is only called when you have * in the enigma params variable. I suspect you need to put the + back into your selector switch names
Gelo5
Posts: 15
Joined: Friday 14 July 2017 20:30
Target OS: Raspberry Pi / ODroid
Domoticz version: Beta
Location: Poland
Contact:

Re: Enigma 2 Set top Box Integration

Post by Gelo5 »

I changed the IP address from 192.168.1.254 to old 127.0.0.1 (line 171 and 178) in the script. And it works!!!! Sees the "+" sign. I do not know why but it works !!
Thank you for your hard work in making the script.
User avatar
lonebaggie
Posts: 86
Joined: Tuesday 31 January 2017 13:21
Target OS: Raspberry Pi / ODroid
Domoticz version: beta
Location: England
Contact:

Re: Enigma 2 Set top Box Integration

Post by lonebaggie »

IM an idiot :D . Testing with my IP address. 127.0.0.1 is a loopback address. So will work whatever you set Domoticz IP address to . Glad you worked it out. Will change the source. Thank you
mvroosmalen
Posts: 23
Joined: Saturday 03 December 2016 16:36
Target OS: Raspberry Pi / ODroid
Domoticz version:
Contact:

Re: Enigma 2 Set top Box Integration

Post by mvroosmalen »

Hi,

I have two questions:
1) I want to use two lists, one for radio and one for TV. will this work?
2) within one of the programs a % sign is used and seems to block the system, is that seen before (maually entering this in variable is not allowed)
(name is 100% TV)

Hope you can help me out.

Thanks

Mark
User avatar
lonebaggie
Posts: 86
Joined: Tuesday 31 January 2017 13:21
Target OS: Raspberry Pi / ODroid
Domoticz version: beta
Location: England
Contact:

Re: Enigma 2 Set top Box Integration

Post by lonebaggie »

Yes you can have two lists radio and TV. As long as the selector lists match the enigma should be OK. The % in the station name is causing a bug . I will see if I can fix :)
User avatar
lonebaggie
Posts: 86
Joined: Tuesday 31 January 2017 13:21
Target OS: Raspberry Pi / ODroid
Domoticz version: beta
Location: England
Contact:

Re: Enigma 2 Set top Box Integration

Post by lonebaggie »

Try this the % same error as the + and the space

Code: Select all

-- This script is used in conjuction with Enigma-Scan to maintain selector switch status with Enigma 2 settop boxes
--
-- This scripts scan the enigma 2 box to obtain current device state, and current current channel being views.
-- These  are stored in the EnigmaStatus user variable. 
--
-- This script  relies on a least 2 virtual switches being created an on/off switch (to turn on/off the Enigma2  box) and a selector switch.
-- Each selector switch and the off/on switch  must be pre-populated  with  the correct TV channels names  and action URL.
--
-- ********Setup Selector Switch Instructions**********
--
-- Run the following HHTP call against the Enigma2 set-top box will  obtain the correct information to populate the selector switch.
--
-- http://192.168.1.99/web/getallservices (where 192.168.1.99) is IP address of the Enigma 2 Box
--
-- This will return a complete list of all channels the Enigma 2 box recognises. 
-- Note the following information :-
--               <e2servicename>  
--               <e2servicereference> that matches the <e2servicename>. 
--              
-- Note due to limitation of selector switches they can only hold 10 levels. So create as many selector switches as required. 
-- Each selector switch can hold a different category of Channels Entertainment, MOvies , Music , etc.
--
-- The Selector level  in the selector switch must match the <e2servicename>  exactly.
-- The Selector action in the selector switch uses the following syntax http://192.168.1.91/web/zap?sRef=<e2servicereference>.
-- 
-- *********Setup On/Off switch instructions **************
--
-- to turn the Enigma2 box :-
--
--on            http://192.168.1.99/web/powerstate?newstate=4 (where 192.168.1.99 is the IP address of the Enigma2 box)
--off           http://192.168.1.91/web/powerstate?newstate=5
--
--
--
-- The script will also automatically  populate the EnigmaList(n) user variable(s) with the selector levels in the selector switch(es) created above. 
-- One EnigmaList(n) user variable for each selector switch created above.
--
-- The following user variables must be created before the script is run.
--
-- EnigmaParams  Multiple values to hold IP and switch details. Each value is  separated  by a |. 
--               The position in the parameter list determines the role of the value.
--
--               1 = * This is an optional value . If present will cause the script to delete and recreate the data
--                     in EnigmaList(n) user variable(s). Once updated the script will remove the "*" .                 
--               2 = Ip address of Enigma2 Box 
--               3 = On/Off switch IdX
--               4+ = IdX(es) of selector switch(es) which hold channel list. One list for each switch value specified.
--
--               Example 192.168.1.99|45|47|49|50 
--               Ip address,IdX of on/off switch that control Enigma2 power state,Idx of selector switches
--
--               Example *|192.168.1.99|45|47|49|50 as above but will cause EnigmaList(n) values to be regenerated 
--            
-- EnigmaList(n) Multiple variables to hold individual selector switch LevelNames. 
--               One User variable must be created for each selector switch defined.  
--               This is popuated by this script. 
-- EnigmaStatus  This holds the state of Enigma2 box and the current channel being viewed.Each value is seperated by a "|"
--               f = not in standby. t = is in standby
--
-- User variables are updated in a way other that other scripts (Enigma-Scan) can be triggered if any of the uservariables change.
-- If the EnigmaParams user variable is edited to start with a "*" this will trigger this script to update EnigmaChannel(*) with the 
-- contents of the selector switches defined above.
--
-- The Enigma-Scan script which is trigged from  this script will use the data in the user variables above to maintain the status
-- of the selector switches defined in EnigmaParams
--
-- Version 1.9



-- Setup Variables
commandArray = {}
Level = 0
http = require("socket.http")
json = (loadfile "/home/pi/domoticz/scripts/lua/JSON.lua")()
LevelNames = ""

-- Set functions

function lines(str)
  local t = {}
  local function helper(line) table.insert(t, line) return "" end
  helper((str:gsub("(.-)\r?\n", helper)))
  return t
end

function get(data,name)
    return data:match("<"..name..">(.-)</"..name..">")
end

function split(pString, pPattern)
    local Table = {}  
    local fpat = "(.-)" .. pPattern
    local last_end = 1
    local s, e, cap = pString:find(fpat, 1)
    while s do
        if s ~= 1 or cap ~= "" then
            table.insert(Table,cap)
        end
        last_end = e+1
        s, e, cap = pString:find(fpat, last_end)
    end
    if last_end <= #pString then
        cap = pString:sub(last_end)
        table.insert(Table, cap)
   end
   return Table
end

-- Start Program

-- Use function to move all params into tables
Vars = split(uservariables["EnigmaParams"],"|")
Status = split(uservariables["EnigmaStatus"],"|")
change = 0
On = Status[1]
Channel = Status[2]
-- Work out which table value holds the IP address. All params are shifted if the "*" params is used.
if Vars[1] == "*" then
    IP = Vars[2]
else
    IP = Vars[1]
end
print("Start Enigma Check")
-- Obtain powerstate of Enigma2 box
HttpPart = "http://" .. IP .. "/web/powerstate"
body = http.request(HttpPart)
-- If box is Off ( not in standby) script terminates
if body == nil then
    print ("Enigma is Off")
    return commandArray
end
row=lines(body)
Power = row[4]
Power = string.sub(Power, 1, 1)
On = string.sub (On, 1, 1)
-- check powerstate
if Power == On then
    print "No Power state change"
else
    print ("Powerstate changed" )
    if Power == "f" then
        change = 1
    end
    if Power == "t" then
       change = 1
    end
end
-- Get Current TV channel
HttpPart = "http://" .. IP .. "/web/subservices"
body = http.request(HttpPart)
if body == nil then
    print ("Enigma is Off")
    return commandArray
end
row=lines(body)
TChannel = get(row[5],"e2servicename")
-- Check Current Channel with Stored channel
if TChannel == Channel then
    print "Channel not Changed"
else
    print ("Channel changed from " .. Channel .. " to " .. TChannel)
    change = 1
end
-- If user variables different from current trigger Json to change user variable . This will trigger lua scripts
if change == 1 then
    TChannel=string.gsub(TChannel, " ", "%%20")
    TChannel=string.gsub(TChannel, "+", "%%2b")
    TChannel=string.gsub(TChannel, "%%", "%%25")
    print ("New Value " .. TChannel)
    Param = (Power .. "|" .. TChannel)
    HttpPart=("curl 'http://192.168.1.254:8080/json.htm?param=updateuservariable&type=command&vname=EnigmaStatus&vtype=2&vvalue=" .. Param .. "' &")
    os.execute(HttpPart)
end
-- if "*" param used get SElector switch level lists and update user variables
if Vars[1] == "*" then
    for i=4,#Vars do  
        print ("Switch List Update Switch " .. Vars[i])
        HttpPart=("curl 'http://127.0.0.1:8080/json.htm?type=devices&rid=" .. Vars[i] .. "' &") 
        config=assert(io.popen(HttpPart))
        Sw = config:read('*all')
        config:close()
        SwData = json:decode(Sw)
        Level = SwData["result"][1]["LevelNames"]
        Var = ("Variable:EnigmaList" .. (i-3))
        commandArray[Var] = "*" .. (Vars[i] .. "|" .. string.sub(Level,5))
    end
    commandArray["Variable:EnigmaParams"] = string.sub(uservariables["EnigmaParams"], 3)
else
    print ("No Switch List Update")
end
return commandArray
Have just added another string substitution to allow the % to be parsed correctly in the HTML call back to Domoticz user variable . Note the double %% as % is an escape character
Spoiler: show
TChannel=string.gsub(TChannel, "%%", "%%25")
Let me know if this works have no TV listing in the UK with % in the title to test
Last edited by lonebaggie on Monday 06 November 2017 20:21, edited 2 times in total.
mvroosmalen
Posts: 23
Joined: Saturday 03 December 2016 16:36
Target OS: Raspberry Pi / ODroid
Domoticz version:
Contact:

Re: Enigma 2 Set top Box Integration

Post by mvroosmalen »

Thanks

The problem is that Domoticz doesnot accept % in the UserVariables so I replaced the % by _ and using:
TChannel = get(row[5],"e2servicename")
TChannel=string.gsub(TChannel, "%%", "_")
in the Enigma lua script. I need to change the script so it fill the UserVariables without %...

Update:
Added additional code between (bold)
Level = SwData["result"][1]["LevelNames"]
Level = string.gsub(Level, "%%", "_") --Replace % by _
Var = ("Variable:EnigmaList" .. (i-3))
This solved the % problem for domoticz

:D
Mark
User avatar
lonebaggie
Posts: 86
Joined: Tuesday 31 January 2017 13:21
Target OS: Raspberry Pi / ODroid
Domoticz version: beta
Location: England
Contact:

Re: Enigma 2 Set top Box Integration

Post by lonebaggie »

Glad you got it working. I also had issues with the User-variable interface in Domoticz not accepting certain escape chars.

Im looking at converting these scripts to DzVents .As DzVents has it own Global variables.
kofec
Posts: 53
Joined: Friday 16 September 2016 14:16
Target OS: Raspberry Pi / ODroid
Domoticz version:
Contact:

Re: Enigma 2 Set top Box Integration

Post by kofec »

If some want. Ihave created python plugin for Domoticz. Any comment are welcome.

https://github.com/kofec/Domoticz-Enigma2
mvroosmalen
Posts: 23
Joined: Saturday 03 December 2016 16:36
Target OS: Raspberry Pi / ODroid
Domoticz version:
Contact:

Re: Enigma 2 Set top Box Integration

Post by mvroosmalen »

Hi
Tried to install https://github.com/kofec/Domoticz-Enigma2, but Domoticz-Enigma2 is not present in the list of hardware??? Installed Python-3 (both) and tested with latest beta....3.8775.

Any idea's?? The log doesn't show any errors or warnings.

Its now visible as Enigma2 with kodi remote?? is this correct?

the following errors are noted:
2017-12-10 20:54:26.838 Error: (Enigma2) failed to load 'plugin.py', Python Path used was '......domoticz/plugins/Domoticz-Enigma2/:/usr/lib/python3.4/:/usr/lib/python3.4/plat-arm-linux-gnueabihf:/usr/lib/python3.4/lib-dynload'.
2017-12-10 20:54:26.838 Error: (VuPlus) Module Import failed, exception: 'ImportError'
2017-12-10 20:54:26.839 Error: (VuPlus) Module Import failed: ' Name: xmltodict'
2017-12-10 20:54:26.839 Error: (VuPlus) Error Line details not available.

Mark
Post Reply

Who is online

Users browsing this forum: No registered users and 1 guest