Page 5 sur 5

Re: Prévision de pluie en lua

Publié : 11 oct. 2016, 10:00
par vil1driver
Probablement car tu n'as pas installé curl.
De plus dans le script il manque le chemin vers curl qu'il faudra ajouter comme ceci

Code : Tout sélectionner

local curl = 'chemin\vers\curl '-- ne pas oublier l'espace à la fin du chemin  
Et modifier cette ligne

Code : Tout sélectionner

local config=assert(io.popen('curl http://www.meteofrance.com/mf3-rpc-portlet/rest/pluie/'..CityCode..'.json'))
En ceci

Code : Tout sélectionner

local config=assert(io.popen(curl.. 'http://www.meteofrance.com/mf3-rpc-portlet/rest/pluie/'..CityCode..'.json'))

Re: Prévision de pluie en lua

Publié : 11 oct. 2016, 10:15
par stephdes
OK merci

J'ai mis ceci :

local debugging = true -- true pour voir les logs dans la console log Dz ou false pour ne pas les voir
local CityCode = 71xxx
local text_idx = 15 -- renseigner l'id du device text associé si souhaité, sinon nil
local rain_alert_idx = nil -- renseigner l'id du device alert associé si souhaité, sinon nil
local send_notification = 1 -- 0: aucune notification, 1: toutes, 2: précipitations faibles, modérées et fortes, 3: modérées et fortes, 4: seulement fortes
local curl = 'G:\\curl\\ ' -- ne pas oublier l'espace à la fin du chemin

et ceci :

now=os.date("*t")
if now.min % 1 == 0 then
print('script_time_meteofrance_pluie.lua')
json = (loadfile "G:\\Program Files (x86)\\Domoticz\\scripts\\lua\\JSON.lua")() -- For Linux
--json = (loadfile "D:\\Domoticz\\scripts\\lua\\json.lua")() -- For Windows


local indexArray=0


local config=assert(io.popen(curl.. 'http://www.meteofrance.com/mf3-rpc-port ... de..'.json'))
local location = config:read('*all')
config:close()
local jsonLocation = json:decode(location)


local niveauPluieText={}
niveauPluieText = jsonLocation.niveauPluieText

Re: Prévision de pluie en lua

Publié : 11 oct. 2016, 10:17
par stephdes
et j'obtiens ceci :

2016-10-11 10:16:00.133 Error: EventSystem: in G:\Program Files (x86)\Domoticz\scripts\lua\script_time_meteofrance_pluie.lua: ...)\Domoticz\scripts\lua\script_time_meteofrance_pluie.lua:50: attempt to index local 'jsonLocation' (a nil value)




Je me demande si ce n'est pas la version du JSON.lua qui pose problème

(c'est la dernière du 16/09)

Re: Prévision de pluie en lua

Publié : 11 oct. 2016, 11:05
par vil1driver
ça devrait selon moi plutôt ressembler à ceci

Code : Tout sélectionner

local curl = 'G:\\curl-7.50.3-win32-mingw\\bin\\curl.exe '
https://bintray.com/artifact/download/v ... 2-mingw.7z

Re: Prévision de pluie en lua

Publié : 11 oct. 2016, 12:03
par stephdes
Oh punaise Vil1driver tu es trop fort !!!

J'ai passé beaucoup de temps dessus sans succès !!!

Je n'avais pas télécharger le bon curl... Nickel ! je te remercie vivement !!!

En même temps, l'histoire du curl je ne l'avais lu nulle part...

Re: Prévision de pluie en lua

Publié : 01 oct. 2017, 16:17
par jml
Bonjour,

Voici ma version de ce script.

La nouveauté est qu'il calcule dans combien de minutes il va pleuvoir et qu'il l'annonce par synthèse vocale. Pour cela, il s'exécute toutes les 5 minutes.

Et le script est là : https://github.com/jmleglise/mylittle-d ... nPluie.lua

et utilise la librairie : https://github.com/jmleglise/mylittle-d ... My_Library

Code : Tout sélectionner

--[[   
~/domoticz/scripts/lua/script_time_PrevisionPluie.lua

OBJET :
Annonce dans combien de minutes il va pleuvoir, basé sur l'API de prévision pluie dans l'heure de météofrance :
- sur un device Alert : "Pluie forte dans 15 minutes"
- par mail
- par pushNotification
- par annonce Vocale : Je vous dérange pour vous prévenir qu'une pluie 'forte' est annoncée par météo france dans '35' minutes.

REQUIS :
device type : Alert , Nom :"Alerte Pluie dans l'heure"

ORIGIN  :
https://easydomoticz.com/prvision-pluie/
https://easydomoticz.com/forum/viewtopic.php?f=10&t=1991

API :
http://www.meteofrance.com/mf3-rpc-portlet/rest/pluie/920630
http://www.meteofrance.com/mf3-rpc-portlet/rest/lieu/facet/pluie/search/rueil-malmaison

FONCTIONNEMENT :
Toutes les 5 minutes , interroge l'API meteoFrance de prévision de pluie dans l'heure

Parcours les 12 cadrans :
Trouve l'heure de la 1er pluie
Trouve l'intensité la plus forte de l'heure 
Avec   jsonPrevision.dataCadran[n].niveauPluie
    1 = Pas de précipitation
    2=faible
    3=modéré
    4=forte

met à jour le device : "Alerte Pluie dans l'heure"
alerte par :  mail, push notif, synthese vocale
Annonce vocale : seulement une annonce vocale , toutes les 3heures.

]]--
-- --------------------------------
------ Paramètres à éditer ------
--------------------------------
local CITY_CODE = 920630  -- Le code de votre ville est l'ID retourné par cette URL : http://www.meteofrance.com/mf3-rpc-portlet/rest/lieu/facet/pluie/search/nom de votre ville
local RAIN_ALERT_IDX = 137  -- renseigner l'id du device alert associé si souhaité, sinon nil
local NOTIFICATION_PUSH = true
local NOTIFICATION_MAIL = true
local NOTIFICATION_VOCAL = true
local EMAIL = 'leglise@xxxx.com'  -- adresse mail, séparées par ; si plusieurs

---------------------------------------------------------------------------
--Fonctions
---------------------------------------------------------------------------
package.path = package.path .. ';' .. '/home/pi/domoticz/scripts/lua/?.lua'
My = require('My_Library')

---------------------------------------------------------------------------
commandArray = {}
now = os.date("*t")
if now.min % 5 == 0 then
    print('--- --- --- script_time_meteofrance_pluie.lua ---')
    json = (loadfile "/home/pi/domoticz/scripts/lua/JSON.lua")()

    local config = assert(io.popen('curl http://www.meteofrance.com/mf3-rpc-portlet/rest/pluie/' .. CITY_CODE .. '.json'))
    local fileContent = config:read('*all')
    config:close()
    local jsonPrevision = json:decode(fileContent)

    rainLevel = 0
    when = 0
    data = jsonPrevision.dataCadran
    for i = 1, 12 do
        if data[i].niveauPluie > 1 and when == 0 then
            -- Find the first time that the rain is announced
            when = i
        end
        if data[i].niveauPluie > rainLevel then
            -- Find the maximum level of rain announced
            rainLevel = data[i].niveauPluie
        end
    end
    
    if rainLevel == 0 then
        commandArray[#commandArray + 1] = { ['SendEmail'] = 'Domoticz Anomalie#' .. os.date("%H:%M") .. ' -- Anomalie dans le script : script_time_PrevisionPluie.lua<br> L\'Api de meteoFrance renvoie un JSON inattendu. niveauPluie n\'est pas correct (devrait être de 1 à 4)<br>Contenu du Json : -------------<br>' .. fileContent .. '#' .. EMAIL }
    elseif rainLevel == 1 then
        if otherdevices_svalues["Alerte Pluie dans l\'heure"] ~= "Pas de pluie dans l\'heure" then
            -- Don't update the device if there is no change. (so that don't change the timestamp of the devie)
            commandArray[#commandArray + 1] = { ['UpdateDevice'] = RAIN_ALERT_IDX .. "|1|Pas de pluie dans l\'heure" }
        end
    else
        if when == 1 then
            whenText = " maintenant"
        else
            whenText = " dans " .. tostring(when * 5) .. " minutes"
        end

        if rainLevel == 2 then
            rainLevelText = "légère"
        elseif rainLevel == 3 then
            rainLevelText = "modérée"
        elseif rainLevel == 4 then
            rainLevelText = "forte"
        end

        commandArray[#commandArray + 1] = { ['UpdateDevice'] = RAIN_ALERT_IDX .. '|' .. rainLevel .. '|Pluie ' .. rainLevelText .. whenText }
        if My.Time_Difference(otherdevices_lastupdate["Alerte Pluie dans l\'heure"]) > 3 * 60 * 60 then
            if NOTIFICATION_VOCAL == true and now.hour > 8 and now.hour <= 20 then
                My.Speak("Je vous dérange pour vous prévenir qu\'une pluie " .. rainLevelText .. " est annoncée par méteo france" .. whenText, "normal")
            end
            if NOTIFICATION_PUSH == true then
                commandArray[#commandArray + 1] = { ['SendNotification'] = 'Alerte Pluie#Pluie ' .. rainLevelText .. whenText }
            end
            if (DEBUG_MODE) then
                commandArray[#commandArray + 1] = { ['SendEmail'] = 'JSON Alerte Pluie#' .. os.date("%H:%M") .. ' -- Api de meteoFrance <br>Contenu du Json : -------------<br>' .. fileContent .. '#' .. EMAIL }
            end
        end
    end
end --if now.min
return commandArray