DZVents : Alerte prévisions de pluie prochaines 60 minutes

Version 3 réécrite en dzvents du script prévision de pluie en lua
Prévision de pluie
le principe reste inchangé, récupérer via l’API non documentée de météo France les informations de précipitation de votre commune sur un device alert et/ou text.
pour trouver l’ID de votre ville deux solutions :

      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 en remplaçant nom_de_votre_ville par … le nom de votre ville

le script complet

--[[
alerteMeteoFrancePluie.lua
author/auteur = papoo
update/mise à jour = 28/04/2019
création = 09/03/2019
https://pon.fr/dzvents-alerte-previsions-de-pluie-prochaines-60-minutes
https://github.com/papo-o/domoticz_scripts/blob/master/dzVents/scripts/alerteMeteoFrancePluie.lua
https://easydomoticz.com/forum/viewtopic.php?f=17&t=5492

Principe : récupérer via l'API non documentée de météo France 
les informations de précipitation de votre commune sur un device alert et/ou text

--]]
--------------------------------------------
------------ Variables à éditer ------------
--------------------------------------------
local CityCode      = 870850-- 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 alert_device  = "Alerte Pluie"
local text_alert    = "Info Du Jour"

--------------------------------------------
----------- Fin variables à éditer ---------
--------------------------------------------
local scriptName        = 'météo France alerte pluie'
local scriptVersion     = '3.02'
local response = "meteoFrance_response"
return {
    on =        {       timer           =   { "every 5 minutes" },
                        httpResponses   =   {  response } },

    logging =   {   -- level    =   domoticz.LOG_DEBUG,
                    -- level    =   domoticz.LOG_INFO,             -- Seulement un niveau peut être actif; commenter les autres
                    -- level    =   domoticz.LOG_ERROR,            -- Only one level can be active; comment others
                    -- level    =   domoticz.LOG_MODULE_EXEC_INFO,
                    marker  =   scriptName..' v'..scriptVersion },

    execute = function(dz, item)

        local devAlert      = dz.devices(alert_device)

        local function logWrite(str,level)
            dz.log(tostring(str),level or dz.LOG_DEBUG)
        end
        local function seuilAlerte(level)
            if level == 0 or level == nil then return domoticz.ALERTLEVEL_GREY end
            if level == 1 then return dz.ALERTLEVEL_GREEN end
            if level == 2 then return dz.ALERTLEVEL_YELLOW end
            if level == 3 then return dz.ALERTLEVEL_ORANGE end
            if level == 4 then return dz.ALERTLEVEL_RED end
        end
        local function highLevel(mn, level, lastLevel, commentaire)
            if lastLevel == nil or level > lastLevel then
                text = commentaire
                lastMn = mn
                return mn, level, text
            else
                return lastMn, lastLevel, text
            end
        end

            local function ReverseTable(t)
                local reversedTable = {}
                local itemCount = #t
                for k, v in ipairs(t) do
                    reversedTable[itemCount + 1 - k] = v
                end
                return reversedTable
            end

        if item.isHTTPResponse then
            local prevision1heure        = item.json.niveauPluieText[1]
            logWrite("Prévisions de pluie pour la prochaine heure    : " .. prevision1heure    )
            logWrite("---------------------------------------------------")

            local dataCadran            = {}
            dataCadran = item.json.dataCadran
            local InfoNiveauPluieText   = {}
            local InfoNiveauPluie       = {}
            local InfoColor             = {}
            local lastLevel             = nil
            local level                 = nil
            local text                  = nil
            local mn                    = nil
            local lastMn                = nil
            local j                     = 60
            if dataCadran ~= nil then
            dataCadran = ReverseTable(dataCadran)
                for i, Result in ipairs( dataCadran ) do
                    InfoNiveauPluieText[i] = Result.niveauPluieText
                    InfoNiveauPluie[i] = Result.niveauPluie
                    InfoColor[i] = Result.color
                    logWrite("--- --- --- prévision à ".. j .. "  mn : "..  InfoNiveauPluieText[i].. " Niveau : "..  InfoNiveauPluie[i] .. " couleur :" ..  InfoColor[i])
                    lastMn, lastLevel, text = highLevel(j, InfoNiveauPluie[i], lastLevel, InfoNiveauPluieText[i])
                j = j-5
                end
                if text_alert ~= nil then
                dz.devices(text_alert).updateText(prevision1heure)
                else 
                text = text .. ' dans les ' .. lastMn .. ' prochaines minutes'
                end
                if alert_device ~= nil then
                    if devAlert.color ~= lastLevel or devAlert.lastUpdate.minutesAgo > 1440 then
                        logWrite('le device '.. devAlert.name ..' est à '.. tostring(devAlert.color) ..' et son texte est ' .. tostring(devAlert.text))
                        devAlert.updateAlertSensor(seuilAlerte(lastLevel), text)
                    elseif devAlert.text ~= text then
                        logWrite('le device '.. devAlert.name ..' est à '.. tostring(devAlert.color) ..' et son texte est ' .. tostring(devAlert.text))
                        devAlert.updateAlertSensor(seuilAlerte(lastLevel), text)
                    end
                end
                logWrite('level est à '.. tostring(level))
                logWrite('lastLevel est à '.. tostring(lastLevel))
                logWrite('contenu de text : '.. tostring(text))
                logWrite('lastMn est à '.. tostring(lastMn))

            end

        else

            local url = "http://www.meteofrance.com/mf3-rpc-portlet/rest/pluie/"..CityCode..".json"

            dz.openURL({
                  url = url,
                        method = "GET",
                        callback = response})
        end
    end
}

retrouver la dernière version de ce script sur



 Site Officiel :   github.com

2 thoughts on “DZVents : Alerte prévisions de pluie prochaines 60 minutes

  1. Come l’a indiqué BreizhCat sur github il s’agit d’un script dzvent il faut donc le déclarer comme tel

  2. Hello papoo, merci tout d’abord pour ce script, j’ai une petite question après avoir mis le script sur domoticz j’ai cette erreur « did not return a commandArray » pourriez vous m’aider svp merci

Laisser un commentaire