Page 1 of 2
dzVents OpenURL json to LUA how to read
Posted: Saturday 02 March 2019 21:37
by snuiter
Hi,
I am trying to get the weatherdetails from the KNMI API via
http://weerlive.nl/api/json-data-10min. ... ,5.1124231
The result from the openurl is in the following format
- Spoiler: show
- { "liveweer": [{"plaats": "None", "temp": "0", "gtemp": "0", "samenv": "Gebruik een plaatsnaam of lat/lon-paar om het weerbericht op te vragen", "lv": "0", "windr": "0", "windms": "0", "winds": "0", "windk": "0", "windkmh": "0", "luchtd": "0", "ldmmhg": "0", "dauwp": "0", "zicht": "0", "verw": "0", "sup": "0", "sunder": "0", "image": "0", "d0weer": "0", "d0tmax": "0", "d0tmin": "0", "d0windk": "0", "d0windknp": "0", "d0windms": "0", "d0windkmh": "0", "d0windr": "0", "d0neerslag": "0", "d0zon": "0", "d1weer": "0", "d1tmax": "0", "d1tmin": "0", "d1windk": "0", "d1windknp": "0", "d1windms": "0", "d1windkmh": "0", "d1windr": "0", "d1neerslag": "0", "d1zon": "0", "d2weer": "0", "d2tmax": "0", "d2tmin": "0", "d2windk": "0", "d2windknp": "0", "d2windms": "0", "d2windkmh": "0", "d2windr": "0", "d2neerslag": "0", "d2zon": "0", "alarm": "0", "alarmtxt": "0"}]}
Now I am trying to retrieve the specific values from the output, I convert the JSON to a LUA table. Looking in the forum, internet and the dzVents wiki but not getting any value out of it.
Any ideas, this is the if loop in the script I am using? I have tried many formats but no luck, never any value in my output apart from the '-'
Appreciate your suggestions or hints in the right direction
- Spoiler: show
-
Code: Select all
if (item.isHTTPResponse) then
if (item.statusCode == 200) and (item.isJSON) then
domoticz.log('JSON was detected',domoticz.LOG_FORCE)
print("-----------------------------")
-- print(item.data)
print("-")
print("-")
print("-")
local a = domoticz.utils.fromJSON(item.data)
print(a)
print(a[3].value)
print("-")
print(a.liveweer.plaats)
for i,line in ipairs(a) do
print(line)
end
print("-")
print("-----------------------------")
-- domoticz.devices('testweer').updateText(someValue) -- update some device in Domoticz
else
domoticz.log('There was a problem handling the request', domoticz.LOG_ERROR)
domoticz.log(item, domoticz.LOG_ERROR)
end
Re: dzVents OpenURL json to LUA how to read
Posted: Saturday 02 March 2019 22:37
by waaren
snuiter wrote: ↑Saturday 02 March 2019 21:37
Hi, I am trying to get the weatherdetails from the KNMI API. Appreciate your suggestions or hints in the right direction
Have a look at this one
Code: Select all
-- knmi.lua
return {
on = { timer = { "every minute" },},
logging = {
level = domoticz.LOG_DEBUG,
marker = "KNMI"
},
execute = function(dz)
local function logWrite(str,level) -- Support function for shorthand debug log statements
dz.log(tostring(str),level or dz.LOG_DEBUG)
end
local testData = '{ "liveweer": [{"plaats": "None", "temp": "0", "gtemp": "0", "samenv": "Gebruik een plaatsnaam of lat/lon-paar om het weerbericht op te vragen", "lv": "0", "windr": "0", "windms": "0", "winds": "0", "windk": "0", "windkmh": "0", "luchtd": "0", "ldmmhg": "0", "dauwp": "0", "zicht": "0", "verw": "0", "sup": "0", "sunder": "0", "image": "0", "d0weer": "0", "d0tmax": "0", "d0tmin": "0", "d0windk": "0", "d0windknp": "0", "d0windms": "0", "d0windkmh": "0", "d0windr": "0", "d0neerslag": "0", "d0zon": "0", "d1weer": "0", "d1tmax": "0", "d1tmin": "0", "d1windk": "0", "d1windknp": "0", "d1windms": "0", "d1windkmh": "0", "d1windr": "0", "d1neerslag": "0", "d1zon": "0", "d2weer": "0", "d2tmax": "0", "d2tmin": "0", "d2windk": "0", "d2windknp": "0", "d2windms": "0", "d2windkmh": "0", "d2windr": "0", "d2neerslag": "0", "d2zon": "0", "alarm": "0", "alarmtxt": "0"}]}'
local rt = dz.utils.fromJSON(testData) -- convert complete json to table
local weer = rt.liveweer[1] -- liveweer is a key in table (or "associative array") rt and contains one or more subtables. You want the first one
for key, value in pairs(weer) do
logWrite(key .. ": " .. tostring(value))
end
end
}
Re: dzVents OpenURL json to LUA how to read
Posted: Sunday 03 March 2019 0:00
by snuiter
Thank you !! got it figured out now, and then it becomes so simple to use....
waaren wrote: ↑Saturday 02 March 2019 22:37
Have a look at this one
Code: Select all
-- knmi.lua
return {
on = { timer = { "every minute" },},
logging = {
level = domoticz.LOG_DEBUG,
marker = "KNMI"
},
execute = function(dz)
local function logWrite(str,level) -- Support function for shorthand debug log statements
dz.log(tostring(str),level or dz.LOG_DEBUG)
end
local testData = '{ "liveweer": [{"plaats": "None", "temp": "0", "gtemp": "0", "samenv": "Gebruik een plaatsnaam of lat/lon-paar om het weerbericht op te vragen", "lv": "0", "windr": "0", "windms": "0", "winds": "0", "windk": "0", "windkmh": "0", "luchtd": "0", "ldmmhg": "0", "dauwp": "0", "zicht": "0", "verw": "0", "sup": "0", "sunder": "0", "image": "0", "d0weer": "0", "d0tmax": "0", "d0tmin": "0", "d0windk": "0", "d0windknp": "0", "d0windms": "0", "d0windkmh": "0", "d0windr": "0", "d0neerslag": "0", "d0zon": "0", "d1weer": "0", "d1tmax": "0", "d1tmin": "0", "d1windk": "0", "d1windknp": "0", "d1windms": "0", "d1windkmh": "0", "d1windr": "0", "d1neerslag": "0", "d1zon": "0", "d2weer": "0", "d2tmax": "0", "d2tmin": "0", "d2windk": "0", "d2windknp": "0", "d2windms": "0", "d2windkmh": "0", "d2windr": "0", "d2neerslag": "0", "d2zon": "0", "alarm": "0", "alarmtxt": "0"}]}'
local rt = dz.utils.fromJSON(testData) -- convert complete json to table
local weer = rt.liveweer[1] -- liveweer is a key in table (or "associative array") rt and contains one or more subtables. You want the first one
for key, value in pairs(weer) do
logWrite(key .. ": " .. tostring(value))
end
end
}
Re: dzVents OpenURL json to LUA how to read
Posted: Saturday 09 March 2019 9:57
by pvklink
Hi @waaren, need your help again!
Wunderground has changed its ratings and i want to get rid of it. I use the temperature for managing a livingboat like a told before.
I just made an account with
http://weerlive.nl/api/json-data-10min. ... =Amsterdam and i can use it every 5 minutes for free!
Do you also have a dzvents version of the lua script ?
Re: dzVents OpenURL json to LUA how to read
Posted: Saturday 09 March 2019 10:57
by waaren
pvklink wrote: ↑Saturday 09 March 2019 9:57
Hi @waaren, need your help again!
Wunderground has changed its ratings and i want to get rid of it. I use the temperature for managing a livingboat like a told before.
I just made an account with
http://weerlive.nl/api/json-data-10min. ... =Amsterdam and i can use it every 5 minutes for free!
Do you also have a dzvents version of the lua script ?
Something like this ?
Code: Select all
local response = "KNMI_response"
return {
on = { timer = { "every 10 minutes" },
httpResponses = { response } },
logging = { level = domoticz.LOG_DEBUG, -- change to LOG_ERROR when script runs without problems
marker = "getTemperatures" },
execute = function(dz, item)
local apikey = "xxxxxxxxx"
local latitude = dz.settings.location.latitude -- replace with your latitude when not yet on dzVents V2.4.14
local longitude = dz.settings.location.longitude -- replace with your longitude when not yet on dzVents V2.4.14
local currentTemp = dz.devices(nnn) -- define as virtual sensor type Temperature or comment this line if not needed
local maxTemp = dz.devices(nnn) -- define as virtual sensor type Temperature or comment this line if not needed
local minTemp = dz.devices(nnn) -- define as virtual sensor type Temperature or comment this line if not needed
local windChill = dz.devices(nnn) -- define as virtual sensor type Temperature or comment this line if not needed
local function logWrite(str,level)
dz.log(tostring(str),level or dz.LOG_DEBUG)
end
if item.isHTTPResponse then
local weer = {}
weer = item.json.liveweer[1]
logWrite("Temperaturen voor : " .. weer.plaats )
logWrite("---------------------------------------------------")
logWrite("Huidige temperatuur : " .. weer.temp )
logWrite("Gevoels temperatuur : " .. weer.gtemp )
logWrite("Max temperatuur : " .. weer.d0tmax )
logWrite("Min temperatuur : " .. weer.d0tmin )
if maxTemp then maxTemp.updateTemperature(weer.d0tmax) end
if minTemp then minTemp.updateTemperature(weer.d0tmin) end
if currentTemp then currentTemp.updateTemperature(weer.temp) end
if windChill then windChill.updateTemperature(weer.gtemp) end
else
local url = "http://weerlive.nl/api/json-data-10min.php?key=" .. apikey .. "&locatie=" ..
latitude .. "," ..
longitude
dz.openURL({
url = url,
method = "GET",
callback = response})
end
end
}
Re: dzVents OpenURL json to LUA how to read
Posted: Saturday 09 March 2019 13:29
by pvklink
@waaren, thank you very much!
It works GREAAATTTT
now killing my wunderground.....
Re: dzVents OpenURL json to LUA how to read
Posted: Monday 11 March 2019 19:25
by pvklink
Hi, i added value "alarmtxt" and that wend well when there is an alarm.
But for now there isn't an alarm, and in that case the variable isnt even there in the list, instead of "alarmtxt": ""
Where do i put the check if the variable alarmtxt is available?
Code: Select all
-- { "liveweer": [{"plaats": "Amsterdam", "temp": "8.6", "gtemp": "4.3", "samenv": "Geheel bewolkt", "lv": "74", "windr": "ZW", "windms": "10", "winds": "5", "windk": "19.4", "windkmh": "36",
--"luchtd": "1008.5", "ldmmhg": "756", "dauwp": "4", "zicht": "16", "verw": "Kans op zware windstoten. Vanmiddag buien.", "sup": "07:06", "sunder": "18:36", "image": "bewolkt", "d0weer": "bewolkt",
-- "d0tmax": "9", "d0tmin": "5", "d0windk": "4", "d0windknp": "16", "d0windms": "8", "d0windkmh": "30", "d0windr": "W", "d0neerslag": "8", "d0zon": "0", "d1weer": "regen", "d1tmax": "5", "d1tmin": "5",
-- "d1windk": "3", "d1windknp": "8", "d1windms": "4", "d1windkmh": "15", "d1windr": "W", "d1neerslag": "90", "d1zon": "10", "d2weer": "regen", "d2tmax": "7", "d2tmin": "2", "d2windk": "3", "d2windknp": "10",
-- "d2windms": "5", "d2windkmh": "19", "d2windr": "W", "d2neerslag": "70", "d2zon": "30", "alarm": "1",
-- "alarmtxt": "Aan het einde van de ochtend en in de middag is er vooral bij buien kans op zware windstoten van 75-90 km/uur uit westelijke richtingen.
-- In de loop van de middag en vanavond neemt de wind van het westen uit af."}]}
-- http://weerlive.nl/api/json-data-10min.php?key=xxxxxxf&locatie=xxxxx,xxxxxx
local response = "KNMI_response"
return {
on = { timer = { "every 10 minutes" },
httpResponses = { response } },
logging = { level = domoticz.LOG_ERROR, -- change to LOG_ERROR when script runs without problems otherwise LOG_DEBUG
marker = "getTemperatures" },
execute = function(dz, item)
local apikey = "xxxxxxx"
local latitude = dz.settings.location.latitude
local longitude = dz.settings.location.longitude
local currentTemp = dz.devices('Strijp_temp') -- define as virtual sensor type Temperature or comment this line if not needed
local currentalarm = dz.devices('Weeralarm') -- define as virtual sensor type Temperature or comment this line if not needed
local function logWrite(str,level)
dz.log(tostring(str),level or dz.LOG_DEBUG)
end
if item.isHTTPResponse then
local weer = {}
weer = item.json.liveweer[1]
logWrite("Temperaturen voor : " .. weer.plaats )
logWrite("---------------------------------------------------")
logWrite("Huidige temperatuur : " .. weer.temp )
logWrite("Alarm : " .. weer.alarmtxt )
if currentTemp then currentTemp.updateTemperature(weer.temp) end
if currentalarm then currentalarm.updateText(weer.alarmtxt) end
else
local url = "http://weerlive.nl/api/json-data-10min.php?key=" .. apikey .. "&locatie=" ..
latitude .. "," ..
longitude
dz.openURL({
url = url,
method = "GET",
callback = response})
end
end
}
Re: dzVents OpenURL json to LUA how to read
Posted: Monday 11 March 2019 19:54
by waaren
pvklink wrote: ↑Monday 11 March 2019 19:25
Hi, i added value "alarmtxt" and that wend well when there is an alarm.
But for now there isn't an alarm, and in that case the variable isnt even there in the list, instead of "alarmtxt": ""
Where do i put the check if the variable alarmtxt is available?
changing line
Code: Select all
if currentalarm then currentalarm.updateText(weer.alarmtxt) end
to
Code: Select all
if currentalarm then currentalarm.updateText(weer.alarmtxt or "Geen alarm" ) end
should do it.
Re: dzVents OpenURL json to LUA how to read
Posted: Monday 11 March 2019 20:26
by pvklink
Hi,
remarkable that you can set n or statement in a place where a value is expected!
i was trying with:
if weer.alarmtxt ~= nil then
if currentalarm then currentalarm.updateText(weer.alarmtxt) end
end
but your solution is much better!
Re: dzVents OpenURL json to LUA how to read
Posted: Monday 11 March 2019 20:45
by waaren
pvklink wrote: ↑Monday 11 March 2019 20:26
remarkable that you can set an or statement in a place where a value is expected!
That is the way the "or" syntax works in most languages. Only if the left part of an "or" statement evaluates to false / nil; the right part is evaluated. If the left part evaluaties to anything else; the right part is ignored.
Re: dzVents OpenURL json to LUA how to read
Posted: Monday 11 March 2019 20:53
by pvklink
2019-03-11 20:50:01.643 Status: dzVents: Error (2.4.15): getTemperatures: An error occured when calling event handler DZ_weer
2019-03-11 20:50:01.643 Status: dzVents: Error (2.4.15): getTemperatures: ...i/domoticz/scripts/dzVents/generated_scripts/DZ_weer.lua:38: attempt to concatenate field 'alarmtxt' (a nil value)
i will try this :
if weer.alarmtxt ~= nil then
logWrite("Alarm : " .. weer.alarmtxt )
end
@update: this works! and now i also have a fine message when there is no warning, so thanks again!
Re: dzVents OpenURL json to LUA how to read
Posted: Monday 11 March 2019 20:59
by waaren
pvklink wrote: ↑Monday 11 March 2019 20:53
2019-03-11 20:50:01.643 Status: dzVents: Error (2.4.15): getTemperatures: ...i/domoticz/scripts/dzVents/generated_scripts/DZ_weer.lua:38: attempt to concatenate field 'alarmtxt' (a nil value)
you can do something similar there. Try
Code: Select all
logWrite("Alarm : " .. (weer.alarmtxt or "Geen weeralarm actief") )
Re: dzVents OpenURL json to LUA how to read
Posted: Monday 11 March 2019 21:13
by pvklink
oh, does that or also works in that place, i will change it!
Re: dzVents OpenURL json to LUA how to read
Posted: Thursday 02 January 2020 18:22
by Bitterbal
Hi all,
I started today with Domoticz so newbie question here.
I used the code from Waaren shown below, filled in my api key and saved it as .lua file in de Domoticz folder.
What I expected was an automatic update in my devices list with the weather information.
Nothing is happening. Do I need to add a dummy hardware device or something?
Still figuring out all the options of Domoticz.
Furthermore, the information I also wanted to get from the api is sun set and sun rise. How to include those?
Edit: I was looking for these parameters:
https://weerlive.nl/delen.php
sun set and sun rise is added to the code using the parameters mentioned in the link.
waaren wrote: ↑Saturday 09 March 2019 10:57
Something like this ?
Code: Select all
local response = "KNMI_response"
return {
on = { timer = { "every 10 minutes" },
httpResponses = { response } },
logging = { level = domoticz.LOG_DEBUG, -- change to LOG_ERROR when script runs without problems
marker = "getTemperatures" },
execute = function(dz, item)
local apikey = "xxxxxxxxx"
local latitude = dz.settings.location.latitude -- replace with your latitude when not yet on dzVents V2.4.14
local longitude = dz.settings.location.longitude -- replace with your longitude when not yet on dzVents V2.4.14
local currentTemp = dz.devices(nnn) -- define as virtual sensor type Temperature or comment this line if not needed
local maxTemp = dz.devices(nnn) -- define as virtual sensor type Temperature or comment this line if not needed
local minTemp = dz.devices(nnn) -- define as virtual sensor type Temperature or comment this line if not needed
local windChill = dz.devices(nnn) -- define as virtual sensor type Temperature or comment this line if not needed
local function logWrite(str,level)
dz.log(tostring(str),level or dz.LOG_DEBUG)
end
if item.isHTTPResponse then
local weer = {}
weer = item.json.liveweer[1]
logWrite("Temperaturen voor : " .. weer.plaats )
logWrite("---------------------------------------------------")
logWrite("Huidige temperatuur : " .. weer.temp )
logWrite("Gevoels temperatuur : " .. weer.gtemp )
logWrite("Max temperatuur : " .. weer.d0tmax )
logWrite("Min temperatuur : " .. weer.d0tmin )
if maxTemp then maxTemp.updateTemperature(weer.d0tmax) end
if minTemp then minTemp.updateTemperature(weer.d0tmin) end
if currentTemp then currentTemp.updateTemperature(weer.temp) end
if windChill then windChill.updateTemperature(weer.gtemp) end
else
local url = "http://weerlive.nl/api/json-data-10min.php?key=" .. apikey .. "&locatie=" ..
latitude .. "," ..
longitude
dz.openURL({
url = url,
method = "GET",
callback = response})
end
end
}
Re: dzVents OpenURL json to LUA how to read
Posted: Thursday 02 January 2020 22:05
by waaren
Bitterbal wrote: ↑Thursday 02 January 2020 18:22
I started today with Domoticz so newbie question here.
When not yet familiar with dzVents please start with reading
Get started Before implementing (~ 5 minutes). Special attention please for "In Domoticz go to Setup > Settings > Other and in the section EventSystem make sure the checkbox 'dzVents disabled' is not checked. Also make sure that in the Security section in the settings you allow 127.0.0.1 to not need a password. dzVents uses that port to send certain commands to Domoticz. Finally make sure you have set your current location in Setup > Settings > System > Location, otherwise there is no way to determine nighttime/daytime state.
I used the code from Waaren shown below, filled in my api key and saved it as .lua file in de Domoticz folder.
What I expected was an automatic update in my devices list with the weather information.
Nothing is happening. Do I need to add a dummy hardware device or something?
Yes you need to define dummy hardware with hardwareType: "Dummy (Does nothing, use for virtual switches only)" first and then create some virtual sensors as described in the script using the button on this hardware (on the hardware tab)
Re: dzVents OpenURL json to LUA how to read
Posted: Friday 03 January 2020 0:35
by Bitterbal
Thanks waaren for the link. I already set the settings you mentioned, but I made a mistake by placing the lua file in Domoticz\scripts instead of Domoticz\scripts\dzVents\scripts. I got it working now

Re: dzVents OpenURL json to LUA how to read
Posted: Sunday 30 August 2020 23:54
by jake
@waaren : I managed in the past succesfully to work with a json in my dzvents script. With the next one, I don't get it to work, even after digging around on the internet for help. I assume I don't have a 100% understanding of json <> lua tables.
When I put this in the browser:
http://user:[email protected]:8080/json ... :{booleans:[Player.HasAudio]},id:1}
than the response is: {"id":1,"jsonrpc":"2.0","result":{"Player.HasAudio":false}}
My code snippet is:
Code: Select all
if (device == testButton) then
domoticz.openURL({
url = 'http://user:[email protected]:8080/jsonrpc?request={jsonrpc:2.0,method:XBMC.GetInfoBooleans,params:{booleans:[Player.HasAudio]},id:1}',
method = 'GET',
callback = 'kodiIdleTimer'
})
elseif (device.isHTTPResponse and device.ok) then
-- we know it is json but dzVents cannot detect this
-- convert to Lua
local json = domoticz.utils.fromJSON(device.data)
-- json is now a Lua table
print("The result true or false from the request is ".. json.result.Player.HasAudio)
elseif (device.isHTTPResponse and device.ok == false) then
print("Response was not OK)
end
When I flip my testButton, the response in de domoticz log is:
attempt to index a nil value (field 'result')
I guess I have to do something with the Player.HasAudio, because it is on 1 level, but the 'dot' makes it look like the 'next level down'?
Re: dzVents OpenURL json to LUA how to read
Posted: Monday 31 August 2020 0:22
by waaren
jake wrote: ↑Sunday 30 August 2020 23:54
When I flip my testButton, the response in de domoticz log is: attempt to index a nil value (field 'result')
What do you see with this code snippet?
Code: Select all
if (device == testButton) then
domoticz.openURL({
url = 'http://user:[email protected]:8080/jsonrpc?request={jsonrpc:2.0,method:XBMC.GetInfoBooleans,params:{booleans:[Player.HasAudio]},id:1}',
method = 'GET',
callback = 'kodiIdleTimer'
})
elseif (device.isHTTPResponse and device.ok) then
-- we know it is json but dzVents cannot detect this
-- convert to Lua
local json = domoticz.utils.fromJSON(device.data)
-- json is now a Lua table
domoticz.log(device.data,domoticz.LOG_FORCE)
domoticz.utils.dumpTable(json)
print("The result true or false from the request is ".. json[1].result['Player.HasAudio'])
elseif (device.isHTTPResponse and device.ok == false) then
print("Response was not OK)
end
Re: dzVents OpenURL json to LUA how to read
Posted: Monday 31 August 2020 18:59
by jake
waaren wrote:jake wrote: ↑Sunday 30 August 2020 23:54
When I flip my testButton, the response in de domoticz log is: attempt to index a nil value (field 'result')
What do you see with this code snippet?
Code: Select all
if (device == testButton) then
domoticz.openURL({
url = 'http://user:[email protected]:8080/jsonrpc?request={jsonrpc:2.0,method:XBMC.GetInfoBooleans,params:{booleans:[Player.HasAudio]},id:1}',
method = 'GET',
callback = 'kodiIdleTimer'
})
elseif (device.isHTTPResponse and device.ok) then
-- we know it is json but dzVents cannot detect this
-- convert to Lua
local json = domoticz.utils.fromJSON(device.data)
-- json is now a Lua table
domoticz.log(device.data,domoticz.LOG_FORCE)
domoticz.utils.dumpTable(json)
print("The result true or false from the request is ".. json[1].result['Player.HasAudio'])
elseif (device.isHTTPResponse and device.ok == false) then
print("Response was not OK)
end
The force log learned me stuff:
Code: Select all
2020-08-31 18:14:57.112 Status: dzVents: !Info: {"error":{"code":-32700,"message":"Parse error."},"id":null,"jsonrpc":"2.0"}
2020-08-31 18:14:57.112 Status: dzVents: > jsonrpc: 2.0
2020-08-31 18:14:57.112 Status: dzVents: > error:
2020-08-31 18:14:57.112 Status: dzVents: > code: -32700
2020-08-31 18:14:57.112 Status: dzVents: > message: Parse error.
The result showed id:"null", while in the browser it is displayed as id: 1
This triggered me to put the " " back in the url: {"jsonrpc":"2.0","method":"XBMC.GetInfoBooleans","params":{"booleans":["Player.HasAudio"]},"id":1}
This improved the results in the log:
Code: Select all
2020-08-31 18:56:51.571 Status: dzVents: !Info: {"id":1,"jsonrpc":"2.0","result":{"Player.HasAudio":false}}
2020-08-31 18:56:51.571 Status: dzVents: > jsonrpc: 2.0
2020-08-31 18:56:51.571 Status: dzVents: > id: 1
2020-08-31 18:56:51.571 Status: dzVents: > result:
2020-08-31 18:56:51.571 Status: dzVents: > Player.HasAudio: false
2020-08-31 18:56:51.980 Status: EventSystem: Script event triggered: /home/pi/domoticz/dzVents/runtime/dzVents.lua
2020-08-31 18:56:51.571 Error: dzVents: Error: (2.5.7) An error occurred when calling event handler kodi3
2020-08-31 18:56:51.571 Error: dzVents: Error: (2.5.7) /home/pi/domoticz/scripts/dzVents/scripts/kodi3.lua:192: attempt to index a nil value (field '?')
Line 192 is:
Code: Select all
print("The result true or false from the request is ".. json[1].result['Player.HasAudio'])
UPDATE: well, well, I finally got it: I first 'tried' to change line 192 to json.result['Player.HasAudio']. This gave me the clue in the log:
Code: Select all
Error: (2.5.7) /home/pi/domoticz/scripts/dzVents/scripts/kodi3.lua:192: attempt to concatenate a boolean value (field 'Player.HasAudio
So i tried a different line of code on line 192 and finally with success:
if json.result['Player.HasAudio'] == false then print ("No audio is playing") end:
Code: Select all
2020-08-31 19:14:54.734 Status: dzVents: No audio is playing
2020-08-31 19:14:54.734 Status: dzVents: !Info: {"id":1,"jsonrpc":"2.0","result":{"Player.HasAudio":false}}
2020-08-31 19:14:54.734 Status: dzVents: > jsonrpc: 2.0
2020-08-31 19:14:54.734 Status: dzVents: > id: 1
2020-08-31 19:14:54.734 Status: dzVents: > result:
2020-08-31 19:14:54.734 Status: dzVents: > Player.HasAudio: false
Thanks for pointing me in the right direction
Although I can now continue my script, I would like to know out of curiosity how I could still show the 'false' in a log line, instead of domoticz failing with 'attempt to concatenate a boolean value'
Re: dzVents OpenURL json to LUA how to read
Posted: Monday 31 August 2020 20:08
by waaren
jake wrote: ↑Monday 31 August 2020 18:59
Although I can now continue my script, I would like to know out of curiosity how I could still show the 'false' in a log line, instead of domoticz failing with 'attempt to concatenate a boolean value'
You can with
Code: Select all
print("The result true or false from the request is ".. tostring(json.result['Player.HasAudio']))
or
Code: Select all
domoticz.log("The result true or false from the request is ".. tostring(json.result['Player.HasAudio']), domoticz.LOG_FORCE)