[DzVents] Données Météo Weather Visual Crossing
-
pierre78@dom
- Messages : 23
- Inscription : 23 sept. 2019, 20:34
Re: [DzVents] Données Météo Weather Visual Crossing
Bonsoir à tous et bon week-end d'avance !
Petite question pour les experts...
ma ville contient un apostrophe, cela perturbe donc le script...
j'ai essayé de l'indiquer dans local Localite ou de l'indiquer directement dans l'adresse de l'url, même résultat.
voici l'adresse correcte qui fonctionne sur le site:
https://www.visualcrossing.com/weather-history/bois d'arcy
Merci d'avance.
Cordialement
Petite question pour les experts...
ma ville contient un apostrophe, cela perturbe donc le script...
j'ai essayé de l'indiquer dans local Localite ou de l'indiquer directement dans l'adresse de l'url, même résultat.
voici l'adresse correcte qui fonctionne sur le site:
https://www.visualcrossing.com/weather-history/bois d'arcy
Merci d'avance.
Cordialement
Raspberry PI3b+
-1 clé ZIGBEE2mQTT
-HONEYWELL 4 détecteurs feu
-AQARA 4 détecteurs fuite /4 capteurs température/5 capteurs fenêtre (2 pr alarme)
-PHILIPS HUE 3 dimmer/3 MOTIONS/6 ampoules blanc/3 bandes LED RGB
-SONOFF basic / POW r2
-SONOS 4 PLAY1
-1 clé ZIGBEE2mQTT
-HONEYWELL 4 détecteurs feu
-AQARA 4 détecteurs fuite /4 capteurs température/5 capteurs fenêtre (2 pr alarme)
-PHILIPS HUE 3 dimmer/3 MOTIONS/6 ampoules blanc/3 bandes LED RGB
-SONOFF basic / POW r2
-SONOS 4 PLAY1
Re: [DzVents] Données Météo Weather Visual Crossing
Des choses à essayer :
- \'
- '''
- "'"
Comment bien utiliser le forum : Poser une question, Mettre un script, un fichier, une image ou des logs
Mes petits guides : Débuter en programmation, Le débogage, Le choix de matériel, Les sauvegardes
Ma présentation - Mes Tutos
Mes petits guides : Débuter en programmation, Le débogage, Le choix de matériel, Les sauvegardes
Ma présentation - Mes Tutos
-
pierre78@dom
- Messages : 23
- Inscription : 23 sept. 2019, 20:34
Re: [DzVents] Données Météo Weather Visual Crossing
merci beaucoup !!!
c'est donc : \'
bon weekend

c'est donc : \'
bon weekend
Raspberry PI3b+
-1 clé ZIGBEE2mQTT
-HONEYWELL 4 détecteurs feu
-AQARA 4 détecteurs fuite /4 capteurs température/5 capteurs fenêtre (2 pr alarme)
-PHILIPS HUE 3 dimmer/3 MOTIONS/6 ampoules blanc/3 bandes LED RGB
-SONOFF basic / POW r2
-SONOS 4 PLAY1
-1 clé ZIGBEE2mQTT
-HONEYWELL 4 détecteurs feu
-AQARA 4 détecteurs fuite /4 capteurs température/5 capteurs fenêtre (2 pr alarme)
-PHILIPS HUE 3 dimmer/3 MOTIONS/6 ampoules blanc/3 bandes LED RGB
-SONOFF basic / POW r2
-SONOS 4 PLAY1
Re: [DzVents] Données Météo Weather Visual Crossing
Salut BernardC
Je commence a tester ton script, mais j'ai besoin d'autre aide, ton script ne fonctionne pas seul, n'est ce pas ?
Je commence a tester ton script, mais j'ai besoin d'autre aide, ton script ne fonctionne pas seul, n'est ce pas ?
BernardC a écrit : 02 mai 2023, 19:31 j'ai fais une fonction générique suivant la durée de la probabilité demandée:Code : Tout sélectionner
--======================Probabilité Pluie MAJ 4/5/2023=============================== local function lectProb(duree,v) -- duree--durée en H de la probabilité -- V données JSON local Time = require('Time') local now = Time() local Heure = now.hour+1 -- heure de debut + 1 pour index local J = 1 --init jour local Prob,ResulProb =0,0 for i = Heure,Heure + duree do H= i if i > 24 then J =2 H = i-24 end if i > 48 then J =3 H = i-48 end Prob= v.days[J].hours[H].precipprob if Prob> ResulProb then ResulProb = Prob end end return (ResulProb ) end --================================================================================
Domoticz Stable V4.9700 sur Synology DSM 6.2 / 2 x RFlink V48.4 - 433.92MHz(Dio/Chacon) & 433.42MHz(RTS) / Script en LUA & Blocky
Re: [DzVents] Données Météo Weather Visual Crossing
Le morceau de script cité est une fonction à rajouter au script.
Comment bien utiliser le forum : Poser une question, Mettre un script, un fichier, une image ou des logs
Mes petits guides : Débuter en programmation, Le débogage, Le choix de matériel, Les sauvegardes
Ma présentation - Mes Tutos
Mes petits guides : Débuter en programmation, Le débogage, Le choix de matériel, Les sauvegardes
Ma présentation - Mes Tutos
Re: [DzVents] Données Météo Weather Visual Crossing
Salut @Keros et @BernardC ,
Pourriez-vous svp mettre le code complet ?
pour les prévisions pluie a 1H ?
Je pense que aussi ca va aider beaucoup de monde.
merci.
Pourriez-vous svp mettre le code complet ?
pour les prévisions pluie a 1H ?
Je pense que aussi ca va aider beaucoup de monde.
merci.
Domoticz Stable V4.9700 sur Synology DSM 6.2 / 2 x RFlink V48.4 - 433.92MHz(Dio/Chacon) & 433.42MHz(RTS) / Script en LUA & Blocky
Re: [DzVents] Données Météo Weather Visual Crossing
Bonjour,
Voici le code complet avec une prévision 2 jours et 1 jour
Cordialement,
Bernard
Voici le code complet avec une prévision 2 jours et 1 jour
Cordialement,
Bernard
Code : Tout sélectionner
--[[ --[[ ~/home/pi/domoticz/scripts/dzVents/scripts/weathervisualcrossing.lua
author : gso
: modifié pour weathervisualcrossing par BernardC
MAJ : 8/06/2023
création : 24/03/2023
Principe :
lien pour inscription à weather visual crossing:
https://www.visualcrossing.com/sign-up
lien pour récupérer la clé:
https://www.visualcrossing.com/account
requête type pour remplacer DarkSky API pour La localitée "Le Mans" dans Sarthe
https://weather.visualcrossing.com/VisualCrossingWebServices/rest/services/timeline/Le%20Mans/today?unitGroup=metric&include=fcst%2Ccurrent&key=<votre cle API>&options=nonulls&contentType=json
}
]]--
local scriptName = 'weather.visualcrossing'
local scriptVersion = '1.2.1'
--[[**********************************************
-- les 2 variables à renseigner
-- suivant utilisateur
--**********************************************]]--
local Localite = 'Le%Mans'
local apiKey = '<votre clé API>'
--**********************************************
--**********************************************
-- MAJ le 8/6/2023 enlevé "unitGroup=metric&maxDistance=20000" de la requête
local uri = 'https://weather.visualcrossing.com/VisualCrossingWebServices/rest/services/timeline/'..Localite..'?&include=days%2Ccurrent%2Chours&key='..apiKey..'&contentType=json'
local prefix = 'WVC'
--======================Probabilité Pluie MAJ le 4/5/2023==============================
local function lectProb(duree,v)
-- duree--durée en H de la probabilité
-- V données JSON
local Time = require('Time')
local now = Time()
local Heure = now.hour+1 -- heure de debut + 1 pour index
local J = 1 --init jour
local Prob,ResulProb =0,0
for i = Heure,Heure + duree - 1 do -- 1 à 24 -> durée -1
H= i
if i > 24 then J =2 H = i-24 end
if i > 48 then J =3 H = i-48 end
Prob= v.days[J].hours[H].precipprob
if Prob> ResulProb then ResulProb = Prob end
end
return (ResulProb )
return (ResulProb )
end
--================================================================================
--=================================================================================================================================================================
--= -- devices idx (à modifier en conséquence), fonction de maj donnée devices domoticz
--=================================================================================================================================================================
local StMeteo = {
--Temp=Humidity+Baro Barométre
{idx = 'Barometre', cde = function (dz, idx, v)
local clouds = v.currentConditions.cloudcover
local baro = dz.BARO_NOINFO
if v.currentConditions.precipprob >= 0.3 then baro = dz.BARO_RAIN-- probability of precipitation for tomorrow
elseif clouds >= 75 then baro = dz.BARO_CLOUDY
elseif clouds >= 25 then baro = dz.BARO_PARTLYCLOUDY -- et pas BARO_PARTLY_CLOUDY comme dans le wiki ??
else baro = dz.BARO_SUNNY
end
dz.devices(idx).updateTempHumBaro(v.currentConditions.temp,v.currentConditions.humidity,dz.HUM_COMPUTE,v.currentConditions.pressure,baro)
-- test print('user var'..dz.uservariables('Mem_Debit_Eau').value)
end },
-- UV corrigé erreur "dz.devices(198)" en "dz.devices(idx)" le 8/6/2023
{idx = 'UV', cde = function (dz, idx, v) dz.devices(idx).updateUV(v.currentConditions.uvindex) end },
-- Couverture nuageuse
{idx = 'Couverture nuageuse', cde = function (dz, idx, v) dz.devices(idx).updatePercentage(v.currentConditions.cloudcover) end },
-- Visibilité en (km)
{idx = 'Visibilite', cde = function (dz, idx, v) dz.devices(idx).updateVisibility(v.currentConditions.visibility) end },
-- Pluie MAJ le 25/04/2023
{idx = 'Pluie', cde = function (dz, idx, v)
--lecture des dernieres valeurs rainRate et compteur rain à partir de sValue
--devices(idx).rain fournit la pluie réelle d'aujourd'hui (pas le compteur )
local f_rainValTable = dz.utils.stringSplit(dz.devices(idx).sValue,';')
local rain = f_rainValTable[2]
if v.currentConditions.precip == nil then v.currentConditions.precip = f_rainValTable[1]/100 end
local Time = require('Time')
local now = Time()
if dz.devices(idx).lastUpdate.secondsAgo <= now.secondsSinceMidnight then --incrémentation compteur pluie
rain = rain + ( v.currentConditions.precip * dz.devices(idx).lastUpdate.secondsAgo / 3600 )
else -- la dernière mise à jour date d'hier
rain = v.currentConditions.precip * dz.devices(idx).lastUpdate.secondsAgo/ 3600
end
--(hauteur en mm * 100 par heure, le compteur est total en mm)
dz.devices(idx).updateRain(v.currentConditions.precip*100, rain)
end },
-- Vent en m/s
{idx = 'Vent', cde = function (dz, idx, v)
if v.currentConditions.windgust == nil then v.currentConditions.windgust = v.days[1].windgust end
degrees = v.currentConditions.winddir
local quadrants = {"NNE","NE","ENE","E","ESE","SE","SSE","S","SSW","SW","WSW","W","WNW","NW","NNW"}
local quad = 'N'
if degrees <= 348.75 and degrees > 11.25 then quad = quadrants[tonumber(math.floor((degrees - 11.25) / 22.5)+1)] end
dz.devices(idx).updateWind(degrees, quad, v.currentConditions.windspeed/3.6, v.currentConditions.windgust/3.6, v.currentConditions.temp, v.currentConditions.feelslike)
-- bearing(°), direction(N S NNW..), speed(m/s), gust(m/s), temperature(°C), chill(°C) 287.00;WNW;78;135;10.5;9.8
-- vitesse vent/3,6 pour adapter l'affichage, les données reçu sont en Km/H
end },
--quantité d'énergie solaire reçue en W/m² ajout d'un capteur virtuel "rayonnement solaire" le 35/04/2023
{idx = 'Soleil', cde = function (dz, idx, v) dz.devices(idx).updateRadiation(v.currentConditions.solarradiation) end },
--Proba Pluie 2 Jours ajout d'un capteur virtuel "Poucentage le 2/05/2023 lectProb(Nbre H proba pluie,JSON)
{idx = 'Proba Pluie 2J', cde = function (dz, idx, v) dz.devices(idx).updatePercentage(lectProb(48,v)) end },
--[[ -- devices à modifier pour l'ajout
-- Snow
{idx = 0, cde = function (dz, idx, v)
if v.current.snow ~= nil then dz.devices(idx).updateRain(v.current.snow['1h']*100, v.daily[1].snow)
elseif v.daily[1] ~= nil then dz.devices(idx).updateRain(0, v.daily[1].snow)
else dz.devices(idx).updateRain(0, 0) end
end }, --rate in mm * 100 per hour, counter is total in mm)
-- Meteo
{idx = 979, cde = function (dz, idx, v)
local txt = v.current.weather[1].description..' ('..v.current.weather[1].main..' - '..v.current.weather[1].id..')'
dz.devices(idx).updateText(txt)
end },
-- Moon
{idx = 989, cde = function (dz, idx, v)
-- local dt = os.date("%a %d %b à %X", v.daily[1].dt) -- UTC
local moonrise = os.date("%Hh%M", v.daily[1].moonrise) -- UTC
local moonset = os.date("%Hh%M", v.daily[1].moonset) -- UTC
local p = v.daily[1].moon_phase*100 -- 0 and 1 are 'new moon', 0.25 is 'first quarter moon', 0.5 is 'full moon' and 0.75 is 'last quarter moon'.
if p==0 or p==100 then phase = "Nouvelle Lune ?"
elseif p<25 then phase = "Premier Croissant ?"
elseif p==25 then phase = "Premier Quartier ?"
elseif p<50 then phase = "Gibeuse Croissante ?"
elseif p==50 then phase = "Pleine Lune ?"
elseif p<75 then phase = "Gibeuse Décroissante ?"
elseif p==75 then phase = "Dernier Quartier ?"
elseif p<100 then phase = "Dernier Croissant ?"
end
-- luminosity
p = 2*p
if p>100 then p = 200-p end
local txt = "Lever à "..moonrise.."\nCoucher à "..moonset.."\nPhase : "..phase.." ("..p.."%)"
dz.devices(idx).updateText(txt)
end },
-- Moon Phase (%)
{idx = 988, cde = function (dz, idx, v)
dz.devices(idx).updatePercentage(v.daily[1].moon_phase*100)
end },
-- Alerts
--,"alerts":[{"sender_name":"METEO-FRANCE","event":"Moderate thunderstorm warning","start":1680321640,"end":1680386400,"description":"Moderate damages may occur, especially in vulnerable or in exposed areas and to people who carry out weather-related activities.","tags":["Thunderstorm"]}]}
{idx = 987, cde = function (dz, idx, v)
if v.alerts ~= nil then
local txt = ''
for k, alert in ipairs(v.alerts) do
local from = os.date("%a %d %b à %X", alert['start'])
local to = os.date("%a %d %b à %X", alert['end'])
txt = txt..k..'. '..alert.event.."\n"
txt = txt..' du '..from.."\n"
txt = txt..' au '..to.."\n"
txt = txt..alert.description.."\n"
-- txt = txt..alert.sender_name -- Meteo France
txt = txt..' tags : '..table.concat(alert.tags, ', ')..'\n\n'
end
-- updateAlertSensor(level, text): Function. Level can be domoticz.ALERTLEVEL_GREY, ALERTLEVEL_GREEN, ALERTLEVEL_YELLOW, ALERTLEVEL_ORANGE, ALERTLEVEL_RED. Supports command options.
dz.devices(idx).updateAlertSensor(dz.ALERTLEVEL_RED, txt)
dz.notify('Alerte Météo', txt, dz.PRIORITY_HIGH) -- notify(subject, message, priority, sound) domoticz.PRIORITY_LOW, PRIORITY_MODERATE, PRIORITY_NORMAL, PRIORITY_HIGH, PRIORITY_EMERGENCY
else
dz.devices(idx).updateAlertSensor(dz.ALERTLEVEL_GREEN, "Pas d'alerte")
end
end },
]]--
}--==============================================================Fin de déclaration des devices météo =====================================================================
-- LOOP
return {
active = true, -- false,
on = {
timer = { "every 5 minutes" },
httpResponses = { "OWMcallback" }, -- correspond au caractère générique de rappel
},
logging = {
level = domoticz.LOG_ERROR, domoticz.LOG_INFO, --, domoticz.LOG_DEBUG, domoticz.LOG_MODULE_EXEC_INFO
marker = '-- '..scriptName..' v'..scriptVersion
},
-- LOOP
execute = function(dz, triggerItem)
local function errorMessage(message,notify) -- Ajouter une entrée au journal et notifier à tous les sous-systèmes
dz.log(message, dz.LOG_ERROR)
if notify then
-- dz.notify(message) -- notify(subject, message, priority, sound): Fonction. Envoi d’une notification (Prowl). La priorité sera choisie entre domoticz.PRIORITY_LOW, PRIORITY_MODERATE, PRIORITY_NORMAL, PRIORITY_HIGH, PRIORITY_EMERGENCY
end
end
-- MAIN
if triggerItem.isTimer then
local url = uri
dz.openURL({
url = url,
method = "GET",
callback= 'OWMcallback'
}).afterSec(1)
end
if triggerItem.isHTTPResponse then
if triggerItem.ok and triggerItem.isJSON then
local resultsTable = triggerItem.json
print('reception de weathervisualcrossing')
if resultsTable ~= nil and resultsTable.currentConditions ~= nil then
for k, d in ipairs(StMeteo) do
if d['idx'] ~= 0 then --0
d.cde(dz, d['idx'], resultsTable)
end
end
end
else
errorMessage("Probleme avec la reponse de weathervisualcrossing", false)
end
end
end --execute
}
Dernière modification par BernardC le 10 juin 2023, 13:11, modifié 3 fois.
Re: [DzVents] Données Météo Weather Visual Crossing
Hello,
Merci pour le script, c'est vraiment sympa de l'avoir partagé
A tout hasard est ce qu'il serait possible de faire quelque chose de similaire à la fonction pour la proba de pluie mais pour la prévision de vent à x heures ?
J'ai fait ca pour la valeur à 1h :
Bizarrement si je copie colle en modifiant pour passer a une prévision à 2h j'ai une erreur...
Quelqu'un saurait faire un petite fonction aussi propre que pour la pluie?
D'ailleurs pour la pluie j'ai l'impression que les probas s'additionnent au lieu d'être celle de l'heure considérée non ?
Merci pour le script, c'est vraiment sympa de l'avoir partagé
A tout hasard est ce qu'il serait possible de faire quelque chose de similaire à la fonction pour la proba de pluie mais pour la prévision de vent à x heures ?
J'ai fait ca pour la valeur à 1h :
Code : Tout sélectionner
{idx = 'Vent dans 1 heure', cde = function (dz, idx, v)
local Time = require('Time')
local now = Time()
H=now.hour+1
dz.log("vent pour H=1")
if v.days[1].hours[H].windgust == nil then v.days[1].hours[H].windgust = v.days[1].windgust end
degrees = v.days[1].hours[H].winddir
local quadrants = {"NNE","NE","ENE","E","ESE","SE","SSE","S","SSW","SW","WSW","W","WNW","NW","NNW"}
local quad = 'N'
if degrees <= 348.75 and degrees > 11.25 then quad = quadrants[tonumber(math.floor((degrees - 11.25) / 22.5)+1)] end
dz.devices(idx).updateWind(degrees, quad, v.days[1].hours[H].windspeed/3.6, v.days[1].hours[H].windgust/3.6, v.days[1].hours[H].temp, v.days[1].hours[H].feelslike)
-- bearing(°), direction(N S NNW..), speed(m/s), gust(m/s), temperature(°C), chill(°C) 287.00;WNW;78;135;10.5;9.8
-- vitesse vent/3,6 pour adapter l'affichage, les données reçu sont en Km/H
end }, Quelqu'un saurait faire un petite fonction aussi propre que pour la pluie?
D'ailleurs pour la pluie j'ai l'impression que les probas s'additionnent au lieu d'être celle de l'heure considérée non ?
-
OlivierBer
- Messages : 12
- Inscription : 26 oct. 2019, 15:20
Re: [DzVents] Données Météo Weather Visual Crossing
Merci pour ce script BernardC ! J'ai pu remplacer mes éléments DarkSky et garder l'historique.
Tu as une petite erreur ligne 71 dans ta version 1.1 où tu références le device 198 au lieu de noter "idx" ; c'est ton device UV perso. Une fois avoir remplacé le 198 par idx, le script passe sans erreur.
pierre78@dom, écris dans le script Bois d'Arcy" avec le code "Bois%20d%27Arcy". Cela devrait normalement fonctionner.
C'est la façon d'encoder les caractères spéciaux (https://www.urlencoder.org/)
Tu as une petite erreur ligne 71 dans ta version 1.1 où tu références le device 198 au lieu de noter "idx" ; c'est ton device UV perso. Une fois avoir remplacé le 198 par idx, le script passe sans erreur.
pierre78@dom, écris dans le script Bois d'Arcy" avec le code "Bois%20d%27Arcy". Cela devrait normalement fonctionner.
C'est la façon d'encoder les caractères spéciaux (https://www.urlencoder.org/)
Re: [DzVents] Données Météo Weather Visual Crossing
Merci beaucoup pour cet excellent script !!! ça m'enlève une sacrée épine du pied!
Par contre, il y a effectivement un problème sur les probabilités de pluie. Avec Darksky je gérais mon arrosage automatique en fonction des probabilités de pluie et j'avais donc besoin des proba à 1h, 5h, 12h et 24h. J'ai donc modifié le script de BernardC afin de retrouver ces 4 probabilités et aujourd'hui, les quatre affichent 47.6%. Etrange non?
Par contre, il y a effectivement un problème sur les probabilités de pluie. Avec Darksky je gérais mon arrosage automatique en fonction des probabilités de pluie et j'avais donc besoin des proba à 1h, 5h, 12h et 24h. J'ai donc modifié le script de BernardC afin de retrouver ces 4 probabilités et aujourd'hui, les quatre affichent 47.6%. Etrange non?
Domoticz 2022.1/RFlink V1.1_R48/ prises: DIO, SCS/caméras IP/station météo Auriol/sondes Oregon/PIR/ZK1PA/Relevé compteur Gaz/téléinfo EDF/Mysensors:RGB-3D,Temp.,IR/Arrosage autonome/Google home/ ESP: IR,Temp.,relai,distance,OLED/Withings Ws30