121 lines
4.1 KiB
Lua
121 lines
4.1 KiB
Lua
require "scripts/lua/functions"
|
|
|
|
-- URL du fichier JSON
|
|
local weather_url = "http://api.openweathermap.org/data/2.5/weather?q=La%20gacilly,fr&APPID=feba3f4d926db3b358a25ec782bd1c8b&lang=FR&units=metric"
|
|
local forecast_url = "http://api.openweathermap.org/data/2.5/forecast?q=La%20gacilly,fr&APPID=feba3f4d926db3b358a25ec782bd1c8b&lang=FR&units=metric"
|
|
|
|
time=os.time()
|
|
seconds=tonumber(os.date('%S',time))
|
|
minutes=tonumber(os.date('%M',time))
|
|
heures=tonumber(os.date('%H',time))
|
|
jour=tonumber(os.date('%w',time))
|
|
mois=tonumber(os.date('%M',time))
|
|
|
|
local function forecast(pressure)
|
|
-- pressureForecast = tonumber(forecast)
|
|
|
|
if (pressure == 0) then
|
|
pressureForecast = 0
|
|
elseif (pressure > 1030) then
|
|
pressureForecast = 1
|
|
elseif ((pressure > 1010) and (pressure <= 1030)) then
|
|
pressureForecast = 2
|
|
elseif ((pressure > 990) and (pressure <= 1010)) then
|
|
pressureForecast = 3
|
|
elseif ((pressure > 970) and (pressure <= 990)) then
|
|
pressureForecast = 4
|
|
end
|
|
return pressureForecast
|
|
end
|
|
|
|
local function updateBarometerDevice(deviceId, temperature, humidity, pressure, cloud)
|
|
local svalue = string.format("%.1f;%d;%d;%d;%d;", temperature, humidity, humidity, pressure, cloud)
|
|
local url = domoticzURL..'/json.htm?type=command¶m=udevice&idx='..deviceId..'&svalue='..svalue
|
|
print(url)
|
|
result = os.execute(curl..'"'..url..'" &')
|
|
print(result)
|
|
end
|
|
|
|
commandArray = {}
|
|
|
|
if minutes == 0 and heures == 8 then
|
|
if mois == 2 and jour == 1 then
|
|
sendNotification('Changement d\'angle#Passer l\'angle des panneaux à 60°!')
|
|
end
|
|
if mois == 3 and jour == 1 then
|
|
sendNotification('Changement d\'angle#Passer l\'angle des panneaux à 45°!')
|
|
end
|
|
if mois == 4 and jour == 24 then
|
|
sendNotification('Changement d\'angle#Passer l\'angle des panneaux à 30°!')
|
|
end
|
|
if mois == 8 and jour == 19 then
|
|
sendNotification('Changement d\'angle#Passer l\'angle des panneaux à 45°!')
|
|
end
|
|
if mois == 10 and jour == 13 then
|
|
sendNotification('Changement d\'angle#Passer l\'angle des panneaux à 60°!')
|
|
end
|
|
end
|
|
|
|
if minutes % 10 == 0 then
|
|
local jsonContent = getJSONContent(weather_url)
|
|
|
|
local devices = decodeJSON(jsonContent)
|
|
printTableAsTree(devices)
|
|
|
|
local nuage = 0
|
|
local pluie_1h = 0
|
|
local main = searchKeyInTable("main", devices['weather'])
|
|
print('main='..main)
|
|
local nuage = searchKeyInTable("all", devices['clouds'])
|
|
|
|
print("pluie " .. pluie_1h)
|
|
print("Nuage " .. nuage)
|
|
|
|
updateDeviceValue(1159, ';'..pluie_1h)
|
|
updateDeviceValue(1160, nuage)
|
|
|
|
local temp_min = searchKeyInTable("temp", devices)
|
|
local humidity = searchKeyInTable("humidity", devices)
|
|
local pressure = searchKeyInTable("pressure", devices)
|
|
local cloud = searchKeyInTable("all", devices)
|
|
local forecast = forecast(pressure)
|
|
|
|
updateBarometerDevice(1157, temp_min, humidity, pressure, forecast)
|
|
|
|
local temp = searchKeyInTable("temp", devices)
|
|
local feels_like = searchKeyInTable("feels_like", devices)
|
|
local deg = searchKeyInTable("deg", devices)
|
|
local speed = searchKeyInTable("speed", devices) * 10
|
|
local gust = searchKeyInTable("gust", devices) * 10
|
|
local angle = searchKeyInTable("deg", devices['wind'])
|
|
local compass = convertirAngle(angle)
|
|
|
|
-- print("deg"..tostring(deg))
|
|
updateDeviceValue(1158, string.format("%d;%s;%.1f;%.1f;%.1f;%.1f", deg, compass, speed, gust, temp, feels_like))
|
|
end
|
|
|
|
if heures % 3 == 0 and minutes == 26 then
|
|
local jsonContent = getJSONContent(forecast_url)
|
|
--print(jsonContent)
|
|
local data = decodeJSON(jsonContent)
|
|
|
|
-- Extraire les 6 premières valeurs du champ "all"
|
|
local cloud_values = {}
|
|
for i = 1, math.min(6, #data.list) do
|
|
table.insert(cloud_values, data.list[i].clouds.all)
|
|
end
|
|
|
|
-- Afficher les valeurs extraites
|
|
local somme = 0
|
|
for i, value in ipairs(cloud_values) do
|
|
print("Cloud coverage for point " .. i .. ": " .. value)
|
|
somme = somme + tonumber(value)
|
|
end
|
|
local moyenne = somme / 6
|
|
print("Cloud coverage average".. tostring(moyenne))
|
|
updateDeviceValue(1199, tostring(moyenne))
|
|
|
|
end
|
|
|
|
return commandArray
|