[DzVents] DarkSky et probabilité de pluie

Vous avez créé un script LUA dont vous êtes fier, un .sh génial, un programme Python hors du commun, un Tuto, c'est ici que vous pouvez les partager.
Pyrrhus
Messages : 130
Inscription : 11 juin 2015, 14:57

Re: DZVents : DarkSky et probabilité de pluie

Message par Pyrrhus »

De retour,
bo ben j'avance pas... mon encodage était bien en utf8 sans BOM, j'ai fait un chmod +x mais toujours la même erreur. J'ai essayer de copié-coller dans le gestionnaire d'évènement, mais toujours la même erreur... Par contre, que veux-tu dire par déclarer le script en Time ? Je n'ai pas trouvé de réponse dans google.
papoo
Messages : 2029
Inscription : 10 janv. 2016, 11:29
Localisation : Limoges (87)
Contact :

Re: DZVents : DarkSky et probabilité de pluie

Message par papoo »

dzventsTimer.png
dzventsTimer.png (10.56 Kio) Consulté 5206 fois
domoticz beta/RaspBerry PI3 stretch
https://pon.fr github
Pyrrhus
Messages : 130
Inscription : 11 juin 2015, 14:57

Re: DZVents : DarkSky et probabilité de pluie

Message par Pyrrhus »

OK alors il y a un problème: dans le gestionnaire d'évènement je n'ai pas de choix en dzvent, le menu déroulant est bloqué sur (ALL) et la flèche est grisé.
Je n'ai vu le choix Time que dans les menus "LUA" et "Python".
J'ai quand même essayé de copier coller le script dans LUA en le déclarant Time, et là nouveau message:

Code : Tout sélectionner

Error: EventSystem: in Darksky: [string "--[[ darksky.lua for [ domoticzVents >= 2.4 ]..."]:60: attempt to index global 'domoticz' (a nil value)
la ligne 60 c'est

Code : Tout sélectionner

level    =   domoticz.LOG_DEBUG,
J'y comprend rien....
Si tu pouvais juste me donner la requête curl pour obtenir la probabilité de pluie pour 1h, 6h et 12h, je pourrais me débrouiller en bash ;)
papoo
Messages : 2029
Inscription : 10 janv. 2016, 11:29
Localisation : Limoges (87)
Contact :

Re: DZVents : DarkSky et probabilité de pluie

Message par papoo »

vérifie dans Réglages, Paramètres, Autres que DZvents est bien activé, tout en bas.
Tu as quelle version de domoticz?
domoticz beta/RaspBerry PI3 stretch
https://pon.fr github
Pyrrhus
Messages : 130
Inscription : 11 juin 2015, 14:57

Re: DZVents : DarkSky et probabilité de pluie

Message par Pyrrhus »

Dzvent est bien activé. J'utilise domoticz 3.8153.
papoo
Messages : 2029
Inscription : 10 janv. 2016, 11:29
Localisation : Limoges (87)
Contact :

Re: DZVents : DarkSky et probabilité de pluie

Message par papoo »

ce n'est pas la derniere stable
je ne t'ai pas demandé ta version de dzvents?
ce script ne fonctionne qu'avec les versions supérieures a la 2.4 de dzvents (comme indiqué en début de script)

la requete pour obtenir les infos de l'api est

Code : Tout sélectionner

https://api.darksky.net/forecast/NumerodAPI/latitude;longitude/?units=ca&exclude=currently,minutely,daily,alerts,flags
domoticz beta/RaspBerry PI3 stretch
https://pon.fr github
Pyrrhus
Messages : 130
Inscription : 11 juin 2015, 14:57

Re: DZVents : DarkSky et probabilité de pluie

Message par Pyrrhus »

Effectivement tout s'explique ! Ma version de dzvent est 2.2.
Je n'ai pas la derniére version de domoticz car ça m'obligerait a passer sous Stretch. Comme il est déconseillé de mettre à jour mais plutot de partir sous un systéme tout neuf, il faudrait que je réinstalle tout (il n'y a pas que domoticz qui tourne sur mon Pi)
De plus d'apres ce que j'ai lu la mise à jour vers domoticz 4 a été catastrophique pour beaucoup de personnes.... je sais qu'un jour ou l'autre je serai obligé de mettre à jour mon systéme... mais tant que je peux l'éviter :oops:
Merci pour ton aide en tout cas. Je n'ai plus qu'a trouver la formule pour parser le résultat du curl en fonction de l'heure avec jq.
Loky31200
Messages : 144
Inscription : 05 mars 2019, 10:13

Re: DZVents : DarkSky et probabilité de pluie

Message par Loky31200 »

Bonjour,

Merci pour le srcipt :)

J'ai essayé de mettre ca en place mais mes % ne se mettent pas à jour...

Création du script directement sous domoticz en dzvents "timer" en modifiant la clef et en mettant les Idx des dummys type %, mais il ne se passe rien. Je n'ai pas non plus d'indication dans les logs d'une erreur quelconque (j'ai laissé le niveau de log par défaut, peut être une faute de ma part).

Je suis sur la Béta de Domoticz si cela peut jouer.

Une idée sur l'étape que j'ai raté?
papoo
Messages : 2029
Inscription : 10 janv. 2016, 11:29
Localisation : Limoges (87)
Contact :

Re: DZVents : DarkSky et probabilité de pluie

Message par papoo »

est-ce ton premier script dzvents?
quelle est ta version beta?
dans Réglages > Paramètres > Autres
tout en bas de page, DZvents est il bien activé?
2019-04-25 11_55_26-Window.png
2019-04-25 11_55_26-Window.png (2.85 Kio) Consulté 5045 fois
pourrais tu nous mettre une copie de ton script modifié (en occultant ton api)?
domoticz beta/RaspBerry PI3 stretch
https://pon.fr github
Loky31200
Messages : 144
Inscription : 05 mars 2019, 10:13

Re: DZVents : DarkSky et probabilité de pluie

Message par Loky31200 »

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
}
Répondre