Hello,
merci pour la réponse super rapide
Alors je suis pas un grand spécialiste dzvents mais j'en ai déja un ou deux qui tournent correctement a coté, mais sur appel via blockly (et non sur timer).
Dzvents est bien activé.
Ma version beta est : 4.10619 avec dzvents 2.4.18
Le script est le suivant, copié collé via le téléphone c'est pas génial pour garder la mise en page...
(avec modifié dans le script uniquement : les idx des %, la clef et les coordonées. il faut peut être modifier autre chose?):
local proba_pluie_h = {}
proba_pluie_h[1]= 103
proba_pluie_h[2]= 104
proba_pluie_h[3]= nil
proba_pluie_h[4]= 105
proba_pluie_h[5]= nil
proba_pluie_h[6]= 106
proba_pluie_h[12]= 107
proba_pluie_h[24]= 108
proba_pluie_h[36]= nil
proba_pluie_h[48]= nil
return {
active = true,
on = { timer = { 'every 30 minutes' }, -- remember only 1000 requests by day, 30mn = 48 requests
httpResponses = { "DarkSky_Trigger" } -- Trigger the handle Json part
},
logging = {--level = domoticz.LOG_DEBUG,
level = domoticz.LOG_MODULE_EXEC_INFO,
marker = "Darksky Rain Probability v1.03 " },
data = { rainForecast = {initial = {} }, -- Keep a copy of last json just in case
},
execute = function(domoticz, item)
local DarkSkyAPIkey = domoticz.variables('api_forecast_io').value
local geolocalisation = domoticz.variables('Latitude').value..","..domoticz.variables('Longitude').value
local DarkSkyAPIkey = "MaclefAPI"
local geolocalisation = "Mes coordonnées" -- latitude,longitude
local Forecast_url = "
https://api.darksky.net/forecast/" -- url
local extraData = "?units=ca&exclude=currently,minutely,daily,alerts,flags"
local function debugMessage(message)
domoticz.log(message,domoticz.LOG_DEBUG)
end
if (item.isTimer) then
domoticz.openURL({
url = Forecast_url..DarkSkyAPIkey.."/"..geolocalisation..extraData,
callback = 'DarkSky_Trigger'
})
end
if (item.isHTTPResponse and item.ok) then
-- we know it is json but dzVents cannot detect this
-- convert to Lua
local json = domoticz.utils.fromJSON(item.data)
-- json is now a Lua table
if #item.data > 0 then
domoticz.data.rainForecast = domoticz.utils.fromJSON(item.data)
rt = domoticz.utils.fromJSON(item.data)
else
domoticz.log("Problem with response from DarkSky (no data) using data from earlier run",domoticz.LOG_ERROR)
rt = domoticz.data.rainForecast -- json empty. Get last valid from domoticz.data
if #rt < 1 then -- No valid data in domoticz.data either
domoticz.log("No previous data. are DarkSkyAPIkey and geolocalisation ok?",domoticz.LOG_ERROR)
return false
end
end
debugMessage("heure systeme")
debugMessage(os.date('%Y-%m-%d %H:%M:%S', time))
local now = tonumber(os.time(os.date("*t")))
j = 1
for i = 1,48 do
if now > tonumber(json.hourly.data[j].time) then
local h = domoticz.utils.round((now - tonumber(json.hourly.data[j].time)) / 3600,0)
j = j+h
debugMessage("j : "..j)
end
if proba_pluie_h
then
debugMessage("heure "..i)
debugMessage(os.date('%Y-%m-%d %H:%M:%S', json.hourly.data[j].time))
debugMessage(json.hourly.data[j].time)
debugMessage(json.hourly.data[j].precipProbability)
domoticz.devices(proba_pluie_h).updatePercentage(json.hourly.data[j].precipProbability*100)
end
if j == 48 then break end
j = j +1
end
end
end
}