I am trying to create code to get data from 2 Windy wind stations to send it to 2 domoticz dummy wind devices in the same script. If I create 1 script independently for each WS there is no problem, it works. But with a single script I am not managing to update the last dummy wind device.
This is my code:
Code: Select all
local scriptVar = 'WindyStation'
return
{
on =
{
timer =
{
'every 1 minutes',
},
httpResponses =
{
scriptVar,
},
},
logging =
{
level = domoticz.LOG_DEBUG,
marker = 'WindyStation',
},
execute = function(dz, item)
local dznumber = 0
local urlData = 0
local count = 0
local controls = -- control table
{
{
Rota = true, -- conditions
post ='https://node.windy.com/obs/measurement/v2/ad-LERT/7/1?',
device = 644
},
{
Faro = true,
post = 'https://node.windy.com/obs/measurement/v2/ad-LPFR/7/1?',
device = 645
},
}
local function post(getData)
dz.openURL(
{
url = urlData,
method = 'GET',
callback = scriptVar, -- httpResponses above.
})
return
end
local function walkConditions(type)
for key, value in ipairs(controls) do
if value[type] then
urlData= value.post
post(getData)
end
end
end
if item.isTimer then
walkConditions('Rota')
walkConditions('Faro')
elseif item.json then
for key, value in ipairs(controls) do
dznumber = value.device
local rt = item.json.data.temp
for _, rec in ipairs(rt) do
count = count + 1
end
dz.log("number of records: "..count , dz.LOG_DEBUG )
local temperature = item.json.data.temp[count] - 273.15
local windspeed = item.json.data.wind[count]
local winddir = item.json.data.windDir[count]
--local windgust = item.json.data.gust[count]
local wind_directionString = 0
local c = 11.25
if winddir <= 0 + c then
wind_directionString = "N"
elseif winddir <= 22.5 + c then
wind_directionString = "NNE"
elseif winddir <= 45 + c then
wind_directionString = "NE"
elseif winddir <= 67.5 + c then
wind_directionString = "ENE"
elseif winddir <= 90 + c then
wind_directionString = "E"
elseif winddir <= 112.5 + c then
wind_directionString = "ESE"
elseif winddir <= 135 + c then
wind_directionString = "SE"
elseif winddir <= 157.5 + c then
wind_directionString = "SSE"
elseif winddir <= 180 + c then
wind_directionString = "S"
elseif winddir <= 202.5 + c then
wind_directionString = "SSW"
elseif winddir <= 225 + c then
wind_directionString = "SW"
elseif winddir <= 247.5 + c then
wind_directionString = "WSW"
elseif winddir <= 270 + c then
wind_directionString = "W"
elseif winddir <= 292.5 + c then
wind_directionString = "WNW"
elseif winddir <= 315 + c then
wind_directionString = "NW"
else
wind_directionString = "NNW"
end
local wind = dz.devices(dznumber)
wind.updateWind(winddir, wind_directionString,windspeed,0,temperature,0)
dz.log("temperature: "..temperature .."ºC" , dz.LOG_DEBUG )
dz.log("wind: "..windspeed * 1.94 .."knots" , dz.LOG_DEBUG)
dz.log("winddir: "..winddir .."º" , dz.LOG_DEBUG)
end
end
end
}
Code: Select all
2021-03-09 09:29:00.270 Status: dzVents: Info: WindyStation: ------ Start internal script: windy_stations2:, trigger: "every 1 minutes"
2021-03-09 09:29:00.270 Status: dzVents: Debug: WindyStation: OpenURL: url = https://node.windy.com/obs/measurement/v2/ad-LERT/7/1?
2021-03-09 09:29:00.270 Status: dzVents: Debug: WindyStation: OpenURL: method = GET
2021-03-09 09:29:00.270 Status: dzVents: Debug: WindyStation: OpenURL: post data = nil
2021-03-09 09:29:00.271 Status: dzVents: Debug: WindyStation: OpenURL: headers = nil
2021-03-09 09:29:00.271 Status: dzVents: Debug: WindyStation: OpenURL: callback = WindyStation
2021-03-09 09:29:00.271 Status: dzVents: Debug: WindyStation: OpenURL: url = https://node.windy.com/obs/measurement/v2/ad-LPFR/7/1?
2021-03-09 09:29:00.271 Status: dzVents: Debug: WindyStation: OpenURL: method = GET
2021-03-09 09:29:00.271 Status: dzVents: Debug: WindyStation: OpenURL: post data = nil
2021-03-09 09:29:00.271 Status: dzVents: Debug: WindyStation: OpenURL: headers = nil
2021-03-09 09:29:00.271 Status: dzVents: Debug: WindyStation: OpenURL: callback = WindyStation
2021-03-09 09:29:00.271 Status: dzVents: Info: WindyStation: ------ Finished windy_stations2
2021-03-09 09:29:01.203 Status: dzVents: Info: WindyStation: ------ Start internal script: windy_stations2: HTTPResponse: "WindyStation"
2021-03-09 09:29:01.264 Status: dzVents: Debug: WindyStation: number of records: 351
2021-03-09 09:29:01.279 Status: dzVents: Debug: WindyStation: Processing device-adapter for Rota LERT: Wind device adapter
2021-03-09 09:29:01.280 Status: dzVents: Debug: WindyStation: temperature: 11.0ºC
2021-03-09 09:29:01.280 Status: dzVents: Debug: WindyStation: wind: 3.88knots
2021-03-09 09:29:01.280 Status: dzVents: Debug: WindyStation: winddir: 60º
2021-03-09 09:29:01.280 Status: dzVents: Debug: WindyStation: number of records: 702
2021-03-09 09:29:01.280 Status: dzVents: Info: WindyStation: ------ Finished windy_stations2
2021-03-09 09:29:01.526 Status: dzVents: Info: WindyStation: ------ Start internal script: windy_stations2: HTTPResponse: "WindyStation"
2021-03-09 09:29:01.581 Status: dzVents: Debug: WindyStation: number of records: 347
2021-03-09 09:29:01.582 Status: dzVents: Info: WindyStation: ------ Finished windy_stations2
2021-03-09 09:29:01.280 Error: dzVents: Error: (3.1.1) WindyStation: An error occurred when calling event handler windy_stations2
2021-03-09 09:29:01.280 Error: dzVents: Error: (3.1.1) WindyStation: ...cz/scripts/dzVents/generated_scripts/windy_stations2.lua:74: attempt to perform arithmetic on a nil value (field '?')
2021-03-09 09:29:01.582 Error: dzVents: Error: (3.1.1) WindyStation: An error occurred when calling event handler windy_stations2
2021-03-09 09:29:01.582 Error: dzVents: Error: (3.1.1) WindyStation: ...cz/scripts/dzVents/generated_scripts/windy_stations2.lua:80: attempt to compare nil with number