Modification Plugins DarkSky
Modification Plugins DarkSky
Bonjour à tous,
J'essai de trouver une solution pour modifier la quantité de refresh du plugin DarkSky. Car pour moi inutile de refresh toutes les 5 minutes.
Avez vous une idées du fichier qui serait à modifier? J'ai vu dans mes recherches que certains parlait de fichier cpp mais impossible de trouver le moindre fichier avec cette extension...
J'essai de trouver une solution pour modifier la quantité de refresh du plugin DarkSky. Car pour moi inutile de refresh toutes les 5 minutes.
Avez vous une idées du fichier qui serait à modifier? J'ai vu dans mes recherches que certains parlait de fichier cpp mais impossible de trouver le moindre fichier avec cette extension...
Re: Modification Plugins DarkSky
Hello
je n'ai pas la réponse directe à cette question.
J'ai fait un script pour faire ce que fait le plugin et je peux donc choisir la fréquence d'exécution
https://www.domoticz.com/forum/viewtopi ... 57#p202657
Et aussi ajouter des champs ou en supprimer selon les besoins...
Il faut créer les dummy devices avant de lancer le script
je n'ai pas la réponse directe à cette question.
J'ai fait un script pour faire ce que fait le plugin et je peux donc choisir la fréquence d'exécution
https://www.domoticz.com/forum/viewtopi ... 57#p202657
Et aussi ajouter des champs ou en supprimer selon les besoins...
Il faut créer les dummy devices avant de lancer le script
Re: Modification Plugins DarkSky
Merci 
Je vais garder ça sous la main et continuer d'approfondir si je trouve une solution avec l'origine, c'est vrai que le refresh d'origine est lourd quand meme
Je vais garder ça sous la main et continuer d'approfondir si je trouve une solution avec l'origine, c'est vrai que le refresh d'origine est lourd quand meme
Re: Modification Plugins DarkSky
Bon du coup j'ai abandonné l'idée de modifier le plugins original
J'ai mis ton script en place, au début dans la mauvaise section
mais la maintenant il est bien fonctionnel dans les dzevents mais j'ai un retour bizzare :/
Il m'indique NO JSON. Pourtant quand j'ouvre l'url j'atterri bien sur la page JSON avec toutes les infos.
As-tu eu deja ce problème?
J'ai mis ton script en place, au début dans la mauvaise section
Code : Tout sélectionner
2020-03-17 13:46:00.589 Status: dzVents: Info: Meteo: ------ Start internal script: Darksky:, trigger: every 1 minutes
2020-03-17 13:46:00.590 Status: dzVents: !Info: Meteo: *** Request url
2020-03-17 13:46:00.590 Status: dzVents: Debug: Meteo: OpenURL: url = https://api.darksky.net/forecast/XxXxX/47.199,2.5744?lang=fr&units=si&exclude=minutely,daily
2020-03-17 13:46:00.590 Status: dzVents: Debug: Meteo: OpenURL: method = GET
2020-03-17 13:46:00.590 Status: dzVents: Debug: Meteo: OpenURL: post data = nil
2020-03-17 13:46:00.590 Status: dzVents: Debug: Meteo: OpenURL: headers = nil
2020-03-17 13:46:00.590 Status: dzVents: Debug: Meteo: OpenURL: callback = getDarkSkyForecast
2020-03-17 13:46:00.590 Status: dzVents: Info: Meteo: ------ Finished Darksky
2020-03-17 13:46:00.591 Status: EventSystem: Script event triggered: /home/pi/domoticz/dzVents/runtime/dzVents.lua
2020-03-17 13:46:01.484 Status: dzVents: Info: Handling httpResponse-events for: "getDarkSkyForecast
2020-03-17 13:46:01.484 Status: dzVents: Info: Meteo: ------ Start internal script: Darksky: HTTPResponse: "getDarkSkyForecast"
2020-03-17 13:46:01.485 Status: dzVents: !Info: Meteo: *** Response...
2020-03-17 13:46:01.485 Status: dzVents: Error (2.4.19): Meteo: NO JSON ???
2020-03-17 13:46:01.485 Status: dzVents: Info: Meteo: ------ Finished Darksky As-tu eu deja ce problème?
Re: Modification Plugins DarkSky
je n'ai jamais eu ce type de problème.
Peut-être faut-il avoir des versions de dz et de DzVents récentes (je ne sais plus la version mini, mais au moins la dernière stable)
J'ai Version: 4.11605 et dzVents Version: 2.5.5
En plus le système de log est un peu particulier dans ce script...
Il faudrait mettre:
J'obtiens au callback
Peut-être faut-il avoir des versions de dz et de DzVents récentes (je ne sais plus la version mini, mais au moins la dernière stable)
J'ai Version: 4.11605 et dzVents Version: 2.5.5
En plus le système de log est un peu particulier dans ce script...
Il faudrait mettre:
Code : Tout sélectionner
local debug=1
et
logging = {
level = domoticz.LOG_FORCE,
Code : Tout sélectionner
2020-03-18 12:15:36.804 Status: dzVents: Info: ------ Start internal script: Meteo_V0R9e: HTTPResponse: "getDarkSkyForecast"
2020-03-18 12:15:36.844 Status: dzVents: !Info: Meteo_V0R9e: *** Response...
2020-03-18 12:15:36.845 Status: dzVents: triggerObject ok
2020-03-18 12:15:36.845 Status: dzVents: trigger: getDarkSkyForecast
2020-03-18 12:15:36.845 Status: dzVents: callback: getDarkSkyForecast
2020-03-18 12:15:36.845 Status: dzVents: statusCode: 200
2020-03-18 12:15:36.845 Status: dzVents: JSON :-)
Re: Modification Plugins DarkSky
Version domoticz à jour avec la version4.10717 et à première vu dzVents en 2.4.19 donc ça devrait être bon 
J'ai trouvé quelque infos en mettant la version 2.4.19 je vais fouiner et voir tout ça
Juste un truc dans dzVents y'a un truc spécial à choisir ? All, Minimal, .... ?
J'ai trouvé quelque infos en mettant la version 2.4.19 je vais fouiner et voir tout ça
Juste un truc dans dzVents y'a un truc spécial à choisir ? All, Minimal, .... ?
Re: Modification Plugins DarkSky
pas d'importance car de toute façon tu supprimes tout pour coller le script.Juste un truc dans dzVents y'a un truc spécial à choisir ? All, Minimal, .... ?
Pour la version, devrait être ok car ce script existe depuis avant
Re: Modification Plugins DarkSky
Bon c'est dans le script que un problème apparait :/
J'ai essayé le script de papoo et tout se déroule parfaitement. Mais dans le tiens, le fichier qui se créer dans /domoticz/scripts/dzVents/data n'enregistre pas les information dedans.
Je ne comprend pas mon problème de configuration et ce genre de script n'est pas ma tasse de thé
J'ai activé tous les détails de log dans dzvents. Le dernier "OpenURL" est écrit bizarrement c'est normal ?
J'ai essayé le script de papoo et tout se déroule parfaitement. Mais dans le tiens, le fichier qui se créer dans /domoticz/scripts/dzVents/data n'enregistre pas les information dedans.
Je ne comprend pas mon problème de configuration et ce genre de script n'est pas ma tasse de thé
Code : Tout sélectionner
2020-03-18 15:54:00.168 Status: dzVents: Debug: - Timer
2020-03-18 15:54:00.210 Status: dzVents: Info: Meteo: ------ Start internal script: Darksky:, trigger: every 1 minutes
2020-03-18 15:54:00.211 Status: dzVents: !Info: Meteo: *** Request url
2020-03-18 15:54:00.211 Status: dzVents: url: https://api.darksky.net/forecast/XXXxxxXXX/49.199,3.5744?lang=fr&units=si&exclude=minutely,daily
2020-03-18 15:54:00.211 Status: dzVents: Debug: Meteo: OpenURL: url = https://api.darksky.net/forecast/8318429d3fd1b90f9b7173ed9e3a13a7/47.199,2.5744?lang=fr&units=si&exclude=minutely,daily
2020-03-18 15:54:00.211 Status: dzVents: Debug: Meteo: OpenURL: method = GET
2020-03-18 15:54:00.211 Status: dzVents: Debug: Meteo: OpenURL: post data = nil
2020-03-18 15:54:00.211 Status: dzVents: Debug: Meteo: OpenURL: headers = nil
2020-03-18 15:54:00.211 Status: dzVents: Debug: Meteo: OpenURL: callback = getDarkSkyForecast
2020-03-18 15:54:00.212 Status: dzVents: Info: Meteo: ------ Finished Darksky
2020-03-18 15:54:00.212 Status: dzVents: Debug: Commands sent to Domoticz:
2020-03-18 15:54:00.212 Status: dzVents: Debug: - OpenURL = {["method"]="GET", ["URL"]="https://api.darksky.net/forecast/8318429d3fd1b90f9b7173ed9e3a13a7/47.199,2.5744?lang=fr&units=si&exclude=minutely,daily", ["_trigger"]="getDarkSkyForecast"}
2020-03-18 15:54:00.212 Status: dzVents: Debug: =====================================================
Dernière modification par Ghislain le 19 mars 2020, 15:02, modifié 1 fois.
Re: Modification Plugins DarkSky
curieux le script de papoo, il est écrit "we know it is json but dzVents cannot detect this"
et ensuite il décortique tout à la main...
enlève le test, ça passera pê...
Un problème de configuration de domoticz?
Sur le site en anglais, d'autres ont utilisé mon script, donc il peut fonctionner
Pareil pour les log détaillées
Debug: - OpenURL = {["_trigger"]="getDarkSkyForecast", ["method"]="GET", ["URL"]
Je ne sais pas quoi te dire pour te dépanner, ouvrir un case sur le site anglais le support est plus réactif car plus de monde!
Redémarrer domoticz, recopier le script de nouveau au cas où qqch de vérolé
Ma dernière version
et ensuite il décortique tout à la main...
enlève le test, ça passera pê...
Un problème de configuration de domoticz?
Sur le site en anglais, d'autres ont utilisé mon script, donc il peut fonctionner
Pareil pour les log détaillées
Debug: - OpenURL = {["_trigger"]="getDarkSkyForecast", ["method"]="GET", ["URL"]
Je ne sais pas quoi te dire pour te dépanner, ouvrir un case sur le site anglais le support est plus réactif car plus de monde!
Redémarrer domoticz, recopier le script de nouveau au cas où qqch de vérolé
Ma dernière version
Code : Tout sélectionner
--[[ Script to get some values from darksky API and calculate rain expectation for next hours
Meteo
from https://www.domoticz.com/forum/viewtopic.php?t=22090 (Cloud cover from darksky by aleph0)
to read: https://darksky.net/dev/docs
extract from several emails with DarkSky support to understand their data:
<<precipProbability is the probability of any precipitation at all in the corresponding hour,
while *precipIntensity* is the expected amount of precipitation.
Technically *precipIntensity* is a rate, but it is per hour, so the number is also the expected amount for the hour for which it's reported>>
<<for the next 24 hours, you simply want to sum precipIntensity for each hour,
since it is the expected precipitation amount per hour for those hours>>
<<Regarding the probabilities for "current" conditions:
think of the probabilities as representing our uncertainty about events rather than a direct probability of an event occurring.
Because there are not stations at every location in the world and their data is not perfect, even historical observations have some uncertainty>>
05/05/2019> V0R9e: windspeed not updated ; code added to set the windspeed
]]--
local debug=0
local TIME_INTERVAL = {'every 5 minutes at civildaytime', 'every 15 minutes at civilnighttime'} -- 30/08/2019
local coord='47.444521,2.145379' -- latitude,longitude
local api_key='4fc221ca7fexx230xxfaeda13ae30b6c' -- darkSky secret key
local TEST = 203 -- a dummy switch for testing w/o waiting minutes / remove comment to use
-- Devices to update with API result
local dev_temp_hum_baro = 299 -- dummy receive Temp+Hum+Baro / Type Temp + Humidity + Baro
local dev_temperature = 300 -- dummy receive temperature / Type Temp
local dev_rain = 301 -- dummy receive rain in mm / Type Rain
local dev_rainExp = 366 -- dummy receive rain in mm / Type Rain
local dev_humidity = 302 -- dummy receive humidity / Type Humidity
local dev_barometer = 303 -- dummy receive pressure / SubType Barometer
local dev_wind = 298 -- dummy receive wind measures (Vent+Temp+Ressentie) / Type Wind
-- to choose between custom and %. With custom you could choose the icon!
local dev_cloudCoverPerCent = 339 -- or nill / dummy receive cloudCover / SubType Percentage -- to choose between custom and %
local dev_cloudCover = 309 -- or nill / dummy receive cloudCover / SubType Custom Sensor with unit = % -- With custom you could choose the icon!
local dev_uvIndex = 306 -- dummy receive uvIndex / Type UV
local dev_visibility = 310 -- dummy receive visibility / SubType Visibility
local dev_ozone = 308 -- dummy receive ozone / SubType Custom Sensor
-- Devices to update with calculation with API result
local dev_rain1h = 317 -- dummy receive 1h expected rain in mm / Custom sensor (mm)
local dev_rain12h = 318 -- dummy receive 12h expected rain in mm / Custom sensor (mm)
local dev_rain24h = 319 -- dummy receive 24h expected rain in mm / Custom sensor (mm)
HTTPCALLBACK = 'getDarkSkyForecast'
return {
active = true,
logging = {
level = domoticz.LOG_DEBUG, -- Select one of LOG_DEBUG, LOG_INFO, LOG_ERROR, LOG_FORCE to override system log level
},
on = {
devices = {TEST},
timer = {'every 5 minutes between 50 minutes before sunrise and 50 minutes after sunset',
'every 15 minutes between 50 minutes after sunset and 50 minutes before sunrise'},
httpResponses = {HTTPCALLBACK}
},
data = {
lastRain = {initial=nill },
lastRainExp = {initial=nill }
},
execute = function(dz, triggerObject)
_G.logMarker = _G.moduleLabel -- set logmarker to scriptname
local LOG_LEVEL = dz.LOG_DEBUG -- LOG_INFO, LOG_DEBUG, LOG_ERROR, LOG_FORCE
-- /// Functions start \\\
local function string2Epoch(dateString) -- seconds from epoch based on stringdate (used by string2Date) -- Assuming a date pattern like: yyyy-mm-dd
local pattern = '(%d+)-(%d+)-(%d+)'
local runyear, runmonth, runday= dateString:match(pattern)
local convertedTimestamp = os.time({year = runyear, month = runmonth, day = runday})
return convertedTimestamp
end
local function string2Date(str,fmt) -- convert string from json into datevalue
if fmt then
return os.date(fmt,string2Epoch(str))
end
return os.date(' %A %d %B, %Y',string2Epoch(str)):gsub(' 0',' ')
end
local function round(num, dec)
if num == 0 then
return 0
else
local mult = 10^(dec or 0)
return math.floor(num * mult + 0.5) / mult
end
end
local function humidity_status(humidity_val) -- humidity in %
local status = dz.HUM_NORMAL
if humidity_val > 69 then status = dz.HUM_WET
elseif humidity_val < 30 then status = dz.HUM_DRY
elseif humidity_val < 45 then status = dz.HUM_NORMAL
else status = dz.HUM_COMFORTABLE
end
return status
end
local function THBForecast_calc(icon_val)
local THBForecast_val = dz.BARO_NOINFO
if icon_val == "" or icon_val == "wind" then THBForecast_val = dz.BARO_NOINFO
elseif icon_val == "clear-day" or icon_val == "clear-night" then THBForecast_val = dz.BARO_SUNNY
elseif icon_val == "partly-cloudy-day" or icon_val == "partly-cloudy-night" then THBForecast_val = dz.BARO_PARTLYCLOUDY
elseif icon_val == "sleet" or icon_val == "fog" or icon_val == "cloudy" then THBForecast_val = dz.BARO_CLOUDY
elseif icon_val == "rain" or icon == "snow" then THBForecast_val=dz.BARO_RAIN
end
if debug == 1 then
print('icon_val: ' .. icon_val)
print('THBForecast_val: ' .. THBForecast_val)
end
return THBForecast_val
end
local function baroForecast_calc(icon_val) -- to improve
local baroForecast_val = dz.BARO_NOINFO
if icon_val == "wind" then baroForecast_val = dz.BARO_UNSTABLE
elseif icon_val == "clear-day" or icon_val == "clear-night" then baroForecast_val = dz.BARO_SUNNY
elseif icon_val == "partly-cloudy-day" or icon_val == "partly-cloudy-night" then baroForecast_val = dz.BARO_STABLE
elseif icon_val == "sleet" or icon_val == "fog" or icon_val == "cloudy" then baroForecast_val = dz.BARO_CLOUDY
elseif icon_val == "rain" or icon == "snow" then baroForecast_val=dz.BARO_UNSTABLE
end
if debug == 1 then
print('icon_val: ' .. icon_val)
print('baroForecast_val: ' .. baroForecast_val)
end
return baroForecast_val
end
local function TempChill_calc(Temp_val, WindSpeed_kmh_val) -- https://fr.wikipedia.org/wiki/Température_ressentie#Froid_ressenti
local TempChill_val = Temp_val
if (Temp_val ~= nil and WindSpeed_kmh_val ~= nil and Temp_val <= 10) then
if (WindSpeed_kmh_val > 4.8) then
local Pow_WindSpeed = math.pow(WindSpeed_kmh_val, 0.16)
local Pow_WindSpeed = math.pow(WindSpeed_kmh_val, 0.16)
TempChill_val = 13.12 + 0.6215 * Temp_val + (0.3965 * Temp_val - 11.37) * Pow_WindSpeed
elseif WindSpeed_kmh_val >= 0 then
TempChill_val = Temp_val + 0.2 * (0.1345 * Temp_val - 1.59) * WindSpeed_kmh_val
end
end
return round(TempChill_val,1)
end
local function windDirection_calc(windBearing_val) -- Wind direction calculation
if (windBearing_val < 11.25) then wind_direction_val = 'N'
elseif (windBearing_val >= 11.25 and windBearing_val < 33.75) then wind_direction_val = 'NNE'
elseif (windBearing_val >= 33.75 and windBearing_val < 56.25) then wind_direction_val = 'NE'
elseif (windBearing_val >= 56.25 and windBearing_val < 78.75) then wind_direction_val = 'ENE'
elseif (windBearing_val >= 78.75 and windBearing_val < 101.25) then wind_direction_val = 'E'
elseif (windBearing_val >= 101.25 and windBearing_val < 123.75) then wind_direction_val = 'ESE'
elseif (windBearing_val >= 123.75 and windBearing_val < 146.25) then wind_direction_val = 'SE'
elseif (windBearing_val >= 146.25 and windBearing_val < 168.75) then wind_direction_val = 'SSE'
elseif (windBearing_val >= 168.75 and windBearing_val < 191.25) then wind_direction_val = 'S'
elseif (windBearing_val >= 191.25 and windBearing_val < 213.75) then wind_direction_val = 'SSW'
elseif (windBearing_val >= 213.75 and windBearing_val < 236.25) then wind_direction_val = 'SW'
elseif (windBearing_val >= 236.25 and windBearing_val < 258.75) then wind_direction_val = 'WSW'
elseif (windBearing_val >= 258.75 and windBearing_val < 281.25) then wind_direction_val = 'W'
elseif (windBearing_val >= 281.25 and windBearing_val < 303.75) then wind_direction_val = 'WNW'
elseif (windBearing_val >= 303.75 and windBearing_val < 326.25) then wind_direction_val = 'NW'
elseif (windBearing_val >= 326.25 and windBearing_val < 348.75) then wind_direction_val = 'NNW'
else wind_direction_val = 'N'
end
return wind_direction_val
end
-- \\\ Functions end ///
if (triggerObject.isDevice or triggerObject.isTimer) then -- triggerObject.isDevic for testing only
local darkSkyUrl = 'https://api.darksky.net/forecast/'..api_key..'/'..coord..'?lang=fr&units=si&exclude=minutely,daily' -- alerts to get sources, nearest-station, units
dz.log('*** Request url', LOG_LEVEL)
if debug==1 then
print('url: ' .. darkSkyUrl)
end
dz.openURL({url = darkSkyUrl, method = 'GET', callback = HTTPCALLBACK})
elseif (triggerObject.isHTTPResponse) then
dz.log('*** Response...', LOG_LEVEL)
if (triggerObject.ok) then
if debug==1 then
print('triggerObject ok')
print('trigger: ' .. triggerObject.trigger)
print('callback: ' .. triggerObject.callback)
print('statusCode: ' .. triggerObject.statusCode)
end
if (triggerObject.isJSON) then
local currently_time = os.date('%x %X', triggerObject.json.currently.time)
if debug==1 then
print ('JSON :-)')
print ('latitude: ' ..triggerObject.json.latitude)
print ('longitude: ' ..triggerObject.json.longitude)
print ('timezone: ' ..triggerObject.json.timezone)
print('time UNIX: '.. triggerObject.json.currently.time)
print('time: '.. currently_time)
end
--[[ to do once to know - need to add flag
print('nearest-station: '.. triggerObject.json.flags["nearest-station"])
print('units: '.. triggerObject.json.flags.units)
local sourceId
for i in pairs(triggerObject.json.flags.sources) do
print('sources '.. i .. ": " .. triggerObject.json.flags.sources[i])
end
]]--
local nillCount = 0 -- to count nill values from dark Sky
local nillCountH = 0 -- to count nill values from dark Sky (hourly data)
-- Variables to calcule rain forecast
local hourlyPrecipIntensity = {initial={}}
local hourlyPrecipExpectation = {initial={}}
local hourlyTime= {initial={}}
local h1PrecipExpectation = 0
local h12PrecipExpectation = 0
local h24PrecipExpectation = 0
local h1PrecipMax = 0
local h12PrecipMax = 0
local h24PrecipMax = 0
-- Retrieve values from dz in case of nill values from json
local dz_rainRate = dz.devices(dev_rain).rainRate
local dz_rain = dz.devices(dev_rain).rain
local dz_rainExp = dz.devices(dev_rainExp).rain
if dz.data.lastRain == nill then
dz.data.lastRain = dz_rain
if debug == 2 then
print('dz.data.lastRain nill: ' .. dz.data.lastRain)
end
else
if debug == 2 then
print('dz.data.lastRain NOT nill: ' .. dz.data.lastRain)
end
end
if dz.data.lastRainExp == nill then
dz.data.lastRainExp = dz_rainExp
if debug == 2 then
print('dz.data.lastRainExp nill: ' .. dz.data.lastRainExp)
end
else
if debug == 2 then
print('dz.data.lastRainExp NOT nill: ' .. dz.data.lastRainExp)
end
end
local dz_humidity = dz.devices(dev_humidity).humidity
local dz_temperature = dz.devices(dev_temperature).temperature
local dz_dewPoint = dz.devices(dev_temp_hum_baro).dewPoint
local dz_pressure = dz.devices(dev_barometer).barometer
local dz_baroForecast = dz.devices(dev_barometer).forecast
local dz_THBForecast = dz.devices(dev_barometer).forecast
local dz_windBearing = dz.devices(dev_wind).direction
local dz_windSpeed_ms = dz.devices(dev_wind).speed
local dz_windGust_ms = dz.devices(dev_wind).gust
local dz_windChill = dz.devices(dev_wind).chill
if debug==1 then
print(' ')
print('dz values from devices')
print('dz_rainRate: ' .. dz_rainRate)
print('dz_rain: ' .. dz_rain)
print('dz_humidity: ' .. dz_humidity)
print('dz_temperature: ' .. dz_temperature)
print('dz_dewPoint: ' .. dz_dewPoint)
print('dz_pressure: ' .. dz_pressure)
print('dz_baroForecast: ' .. dz_baroForecast)
print('dz_THBForecast: ' .. dz_THBForecast)
print('dz_windBearing: ' .. dz_windBearing)
print('dz_windSpeed_ms: ' .. dz_windSpeed_ms)
print('dz_windGust_ms: ' .. dz_windGust_ms)
print('dz_windChill: ' .. dz_windChill)
print(' ')
print('Dark Sky values')
print('precipIntensity: ' .. triggerObject.json.currently.precipIntensity)
print('precipProbability: ' .. triggerObject.json.currently.precipProbability)
print('humidity: ' .. triggerObject.json.currently.humidity)
print('temperature: ' .. triggerObject.json.currently.temperature)
print('pressure: ' .. triggerObject.json.currently.pressure)
print('icon: ' .. triggerObject.json.currently.icon)
print('windSpeed: ' .. triggerObject.json.currently.windSpeed)
print('windBearing: ' .. triggerObject.json.currently.windBearing)
print('windGust: ' .. triggerObject.json.currently.windGust)
print('windChill: ' .. triggerObject.json.currently.apparentTemperature)
print('dewPoint : ' .. triggerObject.json.currently.dewPoint)
print('cloudCover: ' .. triggerObject.json.currently.cloudCover)
print('uvIndex: ' .. triggerObject.json.currently.uvIndex)
print('visibility: ' .. triggerObject.json.currently.visibility)
print('ozone: ' .. triggerObject.json.currently.ozone)
end
-- get with values from json and if not nill, update the devices with Dark Sky values ; if nill keep dz values
local hum_status = '' --
local Time = require('Time')
local now = Time()
local nowSecondsSinceMidnight = now.secondsSinceMidnight
if triggerObject.json.currently.precipIntensity ~= nill and triggerObject.json.currently.precipIntensity >= 0 then
local lastRainUpdateInSec = dz.devices(dev_rain).lastUpdate.secondsAgo
local lastRainExpUpdateInSec = dz.devices(dev_rainExp).lastUpdate.secondsAgo
-- rain sensor is the total rain of the day
-- precipIntensity is for 1 hour, so 3600 seconds, for the last update I took the part for the elapsed time)
if lastRainUpdateInSec <= nowSecondsSinceMidnight then -- the last update was yesterday
dz.data.lastRain = dz.data.lastRain + triggerObject.json.currently.precipIntensity / 3600 * lastRainUpdateInSec
else dz.data.lastRain = triggerObject.json.currently.precipIntensity / 3600 * lastRainUpdateInSec
end
dz_rain = round(dz.data.lastRain, 1)
if triggerObject.json.currently.precipProbability ~= nill and triggerObject.json.currently.precipProbability >=0 then
if lastRainExpUpdateInSec <= nowSecondsSinceMidnight then -- the last update was yesterday
dz.data.lastRainExp = dz.data.lastRainExp + triggerObject.json.currently.precipIntensity / 3600 * lastRainExpUpdateInSec * triggerObject.json.currently.precipProbability
else dz.data.lastRainExp = triggerObject.json.currently.precipIntensity / 3600 * lastRainExpUpdateInSec * triggerObject.json.currently.precipProbability
end
dz_rainExp = round(dz.data.lastRainExp, 1)
else nillCount = nillCount + 1
end
if debug == 2 then
print('secondsSinceMidnight: ' .. nowSecondsSinceMidnight)
print('rain last update: ' .. lastRainUpdateInSec)
print("precipIntensity: " .. triggerObject.json.currently.precipIntensity)
print('precipProbability: ' .. triggerObject.json.currently.precipProbability)
print("lastRain: " .. dz.data.lastRain)
print('dz_rain: ' .. dz_rain)
print("lastRainExp: " .. dz.data.lastRainExp)
print('dz_rainExp: ' .. dz_rainExp)
end
dz_rainRate = round(triggerObject.json.currently.precipIntensity * 100,0)
else
nillCount = nillCount + 1
dz.log('Error currently.precipIntensity ' .. triggerObject.json.currently.precipIntensity, dz.LOG_ERROR)
end -- else dz value is kept
dz.devices(dev_rain).updateRain(dz_rainRate,dz_rain)
dz.devices(dev_rainExp).updateRain(dz_rainRate,dz_rainExp)
if triggerObject.json.currently.humidity ~= nill then
dz_humidity = triggerObject.json.currently.humidity*100
local hum_status = humidity_status(dz_humidity) dz.devices(dev_humidity).updateHumidity(dz_humidity, hum_status)
else nillCount = nillCount + 1
end
if triggerObject.json.currently.temperature ~= nill then
dz_temperature = round(triggerObject.json.currently.temperature,1) dz.devices(dev_temperature).updateTemperature(dz_temperature)
else nillCount = nillCount + 1
end
if triggerObject.json.currently.pressure ~= nill then
dz_pressure = round(triggerObject.json.currently.pressure,0)
else nillCount = nillCount + 1
end
if triggerObject.json.currently.icon ~= nill then
dz_baroForecast = baroForecast_calc(triggerObject.json.currently.icon)
else nillCount = nillCount + 1
end
dz.devices(dev_barometer).updateBarometer(dz_pressure, dz_baroForecast)
if triggerObject.json.currently.windBearing ~= nill then
dz_windBearing = triggerObject.json.currently.windBearing
else nillCount = nillCount + 1
end
local wind_direction = windDirection_calc(dz_windBearing)
if debug==1 then
print ('dz_windBearing: ' .. dz_windBearing)
print('wind_direction: ' .. wind_direction)
end
if triggerObject.json.currently.windSpeed ~= nil then
dz_windSpeed_ms = round(triggerObject.json.currently.windSpeed,1)
else nilCount = nilCount + 1
end
if triggerObject.json.currently.windGust ~= nill then
dz_windGust_ms = round(triggerObject.json.currently.windGust,1)
else nillCount = nillCount + 1
end
if triggerObject.json.currently.apparentTemperature ~= nill then
tempChill = round(triggerObject.json.currently.apparentTemperature,1)
else nillCount = nillCount + 1
end
if triggerObject.json.currently.icon ~= nill then
dz_THBForecast = THBForecast_calc(triggerObject.json.currently.icon)
else nillCount = nillCount + 1
end
dz.devices(dev_wind).updateWind(dz_windBearing, wind_direction, dz_windSpeed_ms, dz_windGust_ms, dz_temperature,tempChill)
dz.devices(dev_temp_hum_baro).updateTempHumBaro(dz_temperature,dz_humidity,hum_status,dz_pressure,dz_THBForecast)
if triggerObject.json.currently.dewPoint ~= nill then
dz_dewPoint = round(triggerObject.json.currently.dewPoint,1)
dz.devices(dev_temp_hum_baro).dewPoint = triggerObject.json.currently.dewPoint -- doesn't work !? :-(
else nillCount = nillCount + 1
end
if triggerObject.json.currently.cloudCover ~= nill then
if dev_cloudCover ~= nill then
dz.devices(dev_cloudCover).updateCustomSensor(triggerObject.json.currently.cloudCover*100)
end
if dev_cloudCoverPerCent ~= nill then
dz.devices(dev_cloudCoverPerCent).updatePercentage(triggerObject.json.currently.cloudCover*100)
end
else nillCount = nillCount + 1
end
if triggerObject.json.currently.uvIndex ~= nill then
dz.devices(dev_uvIndex).updateUV(triggerObject.json.currently.uvIndex)
else nillCount = nillCount + 1
end
if triggerObject.json.currently.visibility ~= nill then
dz.devices(dev_visibility).updateVisibility(triggerObject.json.currently .visibility)
else nillCount = nillCount + 1
end
if triggerObject.json.currently.ozone ~= nill then
dz.devices(dev_ozone).updateCustomSensor(round(triggerObject.json.currently.ozone))
else nillCount = nillCount + 1
end
if debug==1 then
print(' ')
print('dz values from devices')
print('dz_rainRate: ' .. dz_rainRate)
print('dz_rain: ' .. dz_rain)
print('dz_humidity: ' .. dz_humidity)
print('dz_temperature: ' .. dz_temperature)
print('dz_dewPoint: ' .. dz_dewPoint)
print('dz_pressure: ' .. dz_pressure)
print('dz_baroForecast: ' .. dz_baroForecast)
print('dz_THBForecast: ' .. dz_THBForecast)
print('dz_windBearing: ' .. dz_windBearing)
print('dz_windSpeed_ms: ' .. dz_windSpeed_ms)
print('dz_windGust_ms: ' .. dz_windGust_ms)
print('dz_windChill: ' .. dz_windChill)
print(' ')
end
-- Rain forecast calculation --
for i = 1, 25 do -- walk the hourly result for 24 hours (maxi = 49)
if triggerObject.json.hourly.data[i].precipIntensity ~= nill then
hourlyPrecipIntensity[i] = triggerObject.json.hourly.data[i].precipIntensity
hourlyPrecipExpectation[i] = hourlyPrecipIntensity[i]
if i == 1 then -- for the next hour
h1PrecipExpectation = hourlyPrecipExpectation[i]
h1PrecipMax = triggerObject.json.hourly.data[i].precipIntensity
end
if i < 13 then -- for the next 12 hours
h12PrecipExpectation = h12PrecipExpectation + hourlyPrecipExpectation[i]
if h12PrecipMax < triggerObject.json.hourly.data[i].precipIntensity then
h12PrecipMax = triggerObject.json.hourly.data[i].precipIntensity
end
end
h24PrecipExpectation = h24PrecipExpectation + hourlyPrecipExpectation[i]
if h24PrecipMax < triggerObject.json.hourly.data[i].precipIntensity then
h24PrecipMax = triggerObject.json.hourly.data[i].precipIntensity
end
if triggerObject.json.hourly.data[i] ~= nill then
hourlyTime[i] = os.date('%x %X', triggerObject.json.hourly.data[i].time)
else hourlyTime[i] = 0
nillCountH = nillCountH + 1
hourlyPrecipExpectation[i] = 0
end
else nillCountH = nillCountH + 1
hourlyPrecipIntensity[i] = 0
hourlyPrecipExpectation[i] = 0
end
if debug==1 then
print( i .. ' ' .. hourlyTime[i] .. ' precipIntensity: ' .. hourlyPrecipIntensity[i] .. ' expectation: ' .. hourlyPrecipExpectation[i])
end
end
h1PrecipMax = round((h1PrecipMax*100),-1)
h12PrecipMax = round((h12PrecipMax*100),-1)
h24PrecipMax = round((h24PrecipMax*100),-1)
h1PrecipExpectation = round(h1PrecipExpectation,1)
h12PrecipExpectation = round(h12PrecipExpectation,1)
h24PrecipExpectation = round(h24PrecipExpectation,1)
if debug==1 then
print('h1PrecipMax: ' .. h1PrecipMax .. ' h1PrecipExpectation: ' .. h1PrecipExpectation)
print('h12PrecipMax: ' .. h12PrecipMax .. ' h12PrecipExpectation: ' .. h12PrecipExpectation)
print('h24PrecipMax: ' .. h24PrecipMax .. ' h24PrecipExpectation: ' .. h24PrecipExpectation)
end
dz.devices(dev_rain1h).updateCustomSensor(h1PrecipExpectation)
dz.devices(dev_rain12h).updateCustomSensor(h12PrecipExpectation)
dz.devices(dev_rain24h).updateCustomSensor(h24PrecipExpectation)
if debug==1 then
print('h1PrecipExpectation rounded: ' .. h1PrecipExpectation)
print('h12PrecipExpectation rounded: ' .. h12PrecipExpectation)
print('h24PrecipExpectation rounded: ' .. h24PrecipExpectation)
end
if nillCount == 0 and nillCountH == 0 then
dz.log('Meteo Dark Sky end OK', LOG_LEVEL)
else dz.log('Meteo Dark Sky end KO : ' .. nillCount .. ' / ' .. nillCountH, dz.LOG_ERROR) -- number of values not present in the jason
end
else dz.log('NO JSON ???' , dz.LOG_ERROR)
end
else dz.log('Response KO !!!' , dz.LOG_ERROR)
end
else dz.log('Error triggerObject !!!' , dz.LOG_ERROR)
end
end
}Re: Modification Plugins DarkSky
script basique à tester en direct du modèle
pour moi ça renvoie la latitute sans erreur
Code : Tout sélectionner
return {
on = {
devices = {203},
httpResponses = {
'trigger' -- must match with the callback passed to the openURL command
}
},
execute = function(dz, item)
if (item.isDevice) then
dz.openURL({
url = 'ton url qui renvoie un json',
method = 'GET',
callback = 'trigger', -- see httpResponses above.
})
print('call')
end
if (item.isHTTPResponse) then
if (item.statusCode == 200) then
if (item.isJSON) then
print('lat ' .. item.json.latitude)
end
else
dz.log('There was a problem handling the request', dz.LOG_ERROR)
dz.log(item, dz.LOG_ERROR)
end
end
end
}
Dernière modification par hestia le 20 mars 2020, 12:50, modifié 1 fois.