Quantcast
Channel: Domotique – pon.fr
Viewing all articles
Browse latest Browse all 66

DZVents : Alerte prévisions de pluie prochaines 60 minutes

$
0
0

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

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

Viewing all articles
Browse latest Browse all 66

Trending Articles