Till en QA vill jag hämta datat "cloud_area_fraction" (från "API.met.no"). Jag kan hämta och läsa väderdata från tex. "OpenWeather", men från API.met.no där ligger datan mer "nedbäddad", och det är det jag inte får kläm på hur man läser ut denna.
Raderna i koden nedan ser ut så här, men det funkar inte, men hur skall jag skriva?
if data.properties.timeseries.data.instant.details and properties.timeseries.data.instant.details.cloud_area_fraction then
self:updateProperty("Temperature", data.properties.timeseries.data.instant.details.cloud_area_fraction)
self:updateView("labelTemperature", "text", tostring(data.properties.timeseries.data.instant.details.cloud_area_fraction) .. " %")
Här är sökvägen i JSON-filen
Code: Select all
-- Sample plugin for handling data from https://met.no/
-- To setup this plugin fill proper Latitude, Longitude and Altitude
function QuickApp:fetchWeatherData()
local address = string.format("https://api.met.no/weatherapi/locationforecast/2.0/complete?lat=%s&lon=%s&altitude=%s", self.lat, self.long, self.alt)
self:debug("connecting:", address)
self.http:request(address, {
options={
method = 'GET'
},
success = function(response)
----- print(response.data)
local data = json.decode(response.data)
if data then
self:onWatherDataReceived(data)
end
end,
error = function(error)
self:debug('error: ' .. json.encode(error))
end
})
fibaro.setTimeout(60 * 60 * 1000, function()
self:fetchWeatherData()
end)
end
-- parse response
function QuickApp:onWatherDataReceived(data)
self:debug("Start update data")
if data.properties.timeseries.data.instant.details and properties.timeseries.data.instant.details.cloud_area_fraction then
self:updateProperty("Temperature", data.properties.timeseries.data.instant.details.cloud_area_fraction)
self:updateView("labelTemperature", "text", tostring(data.properties.timeseries.data.instant.details.cloud_area_fraction) .. " %")
end
self:debug("End update data")
end
function QuickApp:onInit()
self:debug("onInit")
self.lat = self:getVariable("Latitude")
self.long = self:getVariable("Longitude")
self.alt = self:getVariable("Altitude")
self.http = net.HTTPClient({timeout=3000})
self:fetchWeatherData()
end