Page 13 sur 20

Re: DZvents: vigilance météoFrance V2

Publié : 14 juin 2020, 09:37
par papoo
Fais moi passer ta modif si tu le souhaites pour que je l’ajoutes

Re: DZvents: vigilance météoFrance V2

Publié : 14 juin 2020, 11:21
par denis_brasseur
papoo a écrit : 14 juin 2020, 09:37 Fais moi passer ta modif si tu le souhaites pour que je l’ajoutes
Le script dans sa totalité

Code : Tout sélectionner

--[[
vigilanceMeteoFrance.lua
author/auteur = papoo
update/mise à jour = 13/06/2020
création = 28/04/2018
Principe : Ce script a pour but de remonter les informations de vigilance de météoFrance
Les informations disponibles sont :
- couleur vigilance météo (Rouge, Orange, Jaune, Vert)
- risque associé : vent violent, pluie-inondation, orages, inondations, neige-verglas, canicule, grand-froid, avalanche, vagues-submersion
Une vigilance peut ne pas être associée à  un risque. dans ce cas, affichage de la mention "vigilance météo".

URL forum : http://easydomoticz.com/forum/viewtopic.php?f=17&t=5492
URL blog : http://pon.fr/vigilance-meteofrance-v2/
URL github : https://github.com/papo-o/domoticz_scripts/blob/master/dzVents/scripts/vigilanceMeteoFrance.lua


--]]
--------------------------------------------
------------ Variables à éditer ------------
--------------------------------------------
local departement              = 26                   -- renseigner votre numéro de département sur 2 chiffres exemples : 01 ou 07 ou 87 
local alert_device             = 'Vigilance Météo'    -- renseigner le nom de l'éventuel device alert vigilance météo associé (dummy - alert)
local conseil_meteo            = 'Conseil Météo'     -- renseigner le nom de l'éventuel device alert Conseils Météo associé si souhaité, sinon nil 
local commentaire_meteo        = 'Commentaire Météo'                 -- renseigner le nom de l'éventuel device alert Commentaire Météo associé si souhaité, sinon nil

local display_conseils         = true              -- true pour voir les conseils sans condition, false seulement en cas de vigilance dans le département sélectionné
local display_commentaire      = true                 -- true pour voir les commentaires sans condition, false seulement en cas de vigilance dans le département sélectionné
--------------------------------------------
----------- Fin variables à éditer ---------
--------------------------------------------
local scriptName        = 'Vigilance météo France'
local scriptVersion     = '2.01'
local response = "vigilance_meteoFrance"
return {
    active = true,
    on =        {       timer           =   { "every minute"},
                        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, _ , round = dz.devices(alert_device), dz.utils._, dz.utils.round

        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 dz.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 risqueTxt(nombre)
          if nombre == 1 then return "vent violent" 
          elseif nombre == 2 then return "pluie-inondation" 
          elseif nombre == 3 then return "orages" 
          elseif nombre == 4 then return "inondations" 
          elseif nombre == 5 then return "neige-verglas" 
          elseif nombre == 6 then return "canicule" 
          elseif nombre == 7 then return "grand-froid" 
          elseif nombre == 8 then return "avalanche"
          elseif nombre == 9 then return "vagues-submersion"
            else return "Vigilance Météo" end
        end
        local function EnumClear(Text)   -- replace the last character
            a=string.len(Text)
            b=string.sub(Text,a,a)
            if b=="," or b==" " then Text=string.sub(Text,1,a-1) end
            a=string.len(Text)
            b=string.sub(Text,a,a)
            if b=="," or b==" " then Text=string.sub(Text,1,a-1) end
            return Text
        end

        if (item.isHTTPResponse and item.trigger == response) then
            local abr = dz.utils.fromXML(item.data,"erreurXML") 
            local dv = abr.CV.DV
            local textAlert = ""
            local vigilanceColor = ""
            local conseil = ""
            local commentaire = ""
			
	local vconseil = abr.CV.EV.VCONSEIL 
	for i, result in pairs(vconseil) do
		if vconseil[i].texte then
			conseil = vconseil[i].texte
		end
	end
			
	local vcommentaire = abr.CV.EV.VCOMMENTAIRE 
		for i, result in pairs(vcommentaire) do
			if vcommentaire[i].texte then
				commentaire = vcommentaire[i].texte
			end
		end
			
	for i, departements in ipairs(dv) do
		for _, result in pairs(departements) do
                    --logWrite(result.dep)
                    --logWrite(result.coul)
			if tonumber(result.dep) == departement then 
                        logWrite("departement : "..result.dep)
                        logWrite("Couleur vigilance : "..result.coul)
                        vigilanceColor = tonumber(result.coul)
                        if dv[i].risque then 
                            risques = dv[i].risque
                            for _, risque in pairs(risques) do 
                                for _, risqueDep in pairs(risque) do
                                --print_r(risqueDep)
                                    if risqueDep.val and (type(risqueDep) == "table") then 
                                        logWrite(risqueDep.val)
                                        logWrite(risqueTxt(tonumber(risqueDep.val)))
                                        textAlert = textAlert .. risqueTxt(tonumber(risqueDep.val)) .. ", "
                                    else
                                        logWrite(risqueDep)
                                        textAlert = risqueTxt(tonumber(risqueDep))
                                    end
                                end
                            end
                        end
                    end
                end
            end

            text = EnumClear(textAlert)
            logWrite("------ vigilance ".. vigilanceColor .. " " .. text .. " pour le département " .. departement,dz.LOG_INFO)

            if alert_device ~= nil then
                if devAlert.color ~= vigilanceColor or devAlert.lastUpdate.minutesAgo > 1440 then
                    devAlert.updateAlertSensor(seuilAlerte(vigilanceColor), text)
                elseif devAlert.text ~= text then
                    devAlert.updateAlertSensor(seuilAlerte(vigilanceColor), text)
                end
            end

		-- ====================================================================================================================   
		-- Conseil météo     
		-- ====================================================================================================================         

			if conseil_meteo ~= nil then
				if (conseil ~= nil and vigilanceColor > 1) or (conseil ~= nil and display_conseils == true) then -- Mise à our du devise texte conseil météo si il existe
					if dz.devices(conseil_meteo).text ~= conseil then dz.devices(conseil_meteo).updateAlertSensor(seuilAlerte(vigilanceColor), conseil) end
				elseif (conseil == nil) or (conseil ~= nil and display_conseils == false) then -- Mise à  jour du devise texte conseil météo si il existe même s'il n'y a pas de conseil disponible
					if dz.devices(conseil_meteo).text ~= 'Aucun conseil disponible' then dz.devices(conseil_meteo).updateAlertSensor(seuilAlerte(vigilanceColor), 'Aucun conseil disponible') end
				end
			end
		-- ====================================================================================================================   
		-- Commentaire météo     
		-- ====================================================================================================================        
			if commentaire_meteo ~= nil then
				if (commentaire ~= nil and vigilanceColor > 1) or (commentaire ~= nil and display_commentaire == true) then -- Mise à jour du devise texte commentaire météo si il existe
					if dz.devices(commentaire_meteo).text ~= commentaire then dz.devices(commentaire_meteo).updateAlertSensor(seuilAlerte(vigilanceColor), commentaire) end
				elseif (commentaire == nil) or (commentaire ~= nil and display_commentaire == false) then -- Mise à  jour du devise texte commentaire météo si il existe même s'il n'y a pas de commentaire disponible
					if dz.devices(commentaire_meteo).text ~= 'Aucun commentaire disponible' then dz.devices(commentaire_meteo).updateAlertSensor(seuilAlerte(vigilanceColor), 'Aucun commentaire disponible') end
				end
			end
		-- ====================================================================================================================   

		-- ====================================================================================================================
        else
            local url = "http://vigilance2019.meteofrance.com/data/NXFR33_LFPW_.xml"
            dz.openURL({
                  url = url,
                        method = "GET",
                        callback = response})
        end
    end
}
Edit : 'Conseil Météo' et 'Conseil Météo' sont de type alert et non pas text

Re: DZvents: vigilance météoFrance V2

Publié : 14 juin 2020, 11:57
par balajol
Bonjour denis_brasseur,
Dans cette dernière version, Le device Alert se met correctement à jour, mais erreur sur Conseils et Commentaire (text)
Les noms dans le sript ont bien été modifiés pour correspondre aux miens.

Code : Tout sélectionner

--------------------------------------------
------------ Variables à éditer ------------
--------------------------------------------
local departement              = 62                   -- renseigner votre numéro de département sur 2 chiffres exemples : 01 ou 07 ou 87 
local alert_device             = 'Alerte_vigi_meteo'    -- renseigner le nom de l'éventuel device alert vigilance météo associé (dummy - alert)
local conseil_meteo            = 'Conseils_Météo'     -- renseigner le nom de l'éventuel device texte Conseils Météo associé si souhaité, sinon nil 
local commentaire_meteo        = 'Commentaire_Météo'                 -- renseigner le nom de l'éventuel device texte Commentaire Météo associé si souhaité, sinon nil

local display_conseils         = true              -- true pour voir les conseils sans condition, false seulement en cas de vigilance dans le département sélectionné
local display_commentaire      = true                 -- true pour voir les commentaires sans condition, false seulement en cas de vigilance dans le département sélectionné
--------------------------------------------
----------- Fin variables à éditer ---------
--------------------------------------------
local scriptName        = 'Vigilance météo France'
local scriptVersion     = '2.01'
local response = "vigilance_meteoFrance"
return {

erreur_Text_Meteo.PNG
erreur_Text_Meteo.PNG (43.15 Kio) Consulté 5105 fois

Cdt
Bertrand

Re: DZvents: vigilance météoFrance V2

Publié : 14 juin 2020, 12:17
par denis_brasseur
Effectivement, les commentaires du code sont erronées, commentaire et conseil sont de type alert.

Re: DZvents: vigilance météoFrance V2

Publié : 14 juin 2020, 17:44
par papoo
maj effectuée

Re: DZvents: vigilance météoFrance V2

Publié : 14 juin 2020, 18:46
par Dim33
Bonjour,

Script implémenté mais avec des erreurs :

Code : Tout sélectionner

2020-06-14 18:44:00.532 Status: dzVents: Info: Handling httpResponse-events for: "vigilance_meteoFrance
2020-06-14 18:44:00.532 Status: dzVents: Info: Vigilance météo France v2.02: ------ Start external script: vigilanceMeteoFrance.lua: HTTPResponse: "vigilance_meteoFrance"
2020-06-14 18:44:00.533 Status: dzVents: Error (2.4.19): Vigilance météo France v2.02: An error occured when calling event handler vigilanceMeteoFrance
2020-06-14 18:44:00.533 Status: dzVents: Error (2.4.19): Vigilance météo France v2.02: ...omoticz/scripts/dzVents/scripts/vigilanceMeteoFrance.lua:82: attempt to call field 'fromXML' (a nil value)
2020-06-14 18:44:00.533 Status: dzVents: Info: Vigilance météo France v2.02: ------ Finished vigilanceMeteoFrance.lua

Re: DZvents: vigilance météoFrance V2

Publié : 14 juin 2020, 19:21
par denis_brasseur
fromXML a été implémenté dans la version 2.5.1 de dzvents.
Quelle est ta version de domoticz et de dzvents ?
CONFIGURATION => A PROPOS

Re: DZvents: vigilance météoFrance V2

Publié : 14 juin 2020, 19:25
par Dim33
Ceci explique cela :
Domoticz : Version: 4.10717
dzVents Version: 2.4.19

Une MAJ s'impose.

Re: DZvents: vigilance météoFrance V2

Publié : 14 juin 2020, 19:45
par balajol
Re,
Ok Pour moi, pas d'erreurs..
Merci Papoo et Denis_brasseur ;)
Cdt
Bertrand

Re: DZvents: vigilance météoFrance V2

Publié : 15 juin 2020, 05:52
par denis_brasseur

Code : Tout sélectionner

if devAlert.color ~= vigilanceColor or devAlert.lastUpdate.minutesAgo > 1440 then
	devAlert.updateAlertSensor(seuilAlerte(vigilanceColor), text)
elseif devAlert.text ~= text then
	devAlert.updateAlertSensor(seuilAlerte(vigilanceColor), text)
end
Le device alert_device est censé s'actualiser si
- sa couleur est différente de la valeur de vigilanceColor (devAlert.color ~= vigilanceColor)
ou
- toute les 24 h (devAlert.lastUpdate.minutesAgo > 1440)
ou
-la valeur de devAlert.text ~= text

Chez moi, pour la 3eme condition, devAlert.text est égale à 'orage', text est vide (normal, pas d'alerte pour mon département), donc mise à jour du device a chaque exécution du script

Pourquoi devAlert.text remonte t-il la valeur 'orage', alors que le device indique 'normal', la valeur 'orage' datant de hier matin ?
Son état actuel est 1, sa valeur actuelle est '1/orages'
Je ne comprend d'ailleurs pas d'ou provient 'devAlert', il est uniquement déclaré comme une variable

Code : Tout sélectionner

local devAlert, _ , round = dz.devices(alert_device), dz.utils._, dz.utils.round