[DzVents] Vigilance MétéoFrance V2

Vous avez créé un script LUA dont vous êtes fier, un .sh génial, un programme Python hors du commun, un Tuto, c'est ici que vous pouvez les partager.
papoo
Messages : 2029
Inscription : 10 janv. 2016, 11:29
Localisation : Limoges (87)
Contact :

Re: DZvents: vigilance météoFrance V2

Message par papoo »

Fais moi passer ta modif si tu le souhaites pour que je l’ajoutes
domoticz beta/RaspBerry PI3 stretch
https://pon.fr github
denis_brasseur
Messages : 898
Inscription : 24 déc. 2018, 17:05
Localisation : (26)

Re: DZvents: vigilance météoFrance V2

Message 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
Dernière modification par denis_brasseur le 14 juin 2020, 17:45, modifié 1 fois.
Pi3 + DD PiDrive - RFXtrx433 - AEON Labs ZW090
balajol
Messages : 864
Inscription : 13 nov. 2015, 18:54
Localisation : 62

Re: DZvents: vigilance météoFrance V2

Message 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é 5088 fois

Cdt
Bertrand
2024.6 PC Windows10 ; 2ème DEBIAN 10;DANFOSS LC13, Topp; Senseurs univ FIBARO FGBS001, Flood Sensor, ZMNHBD1 Flush 2 Relays ; FIBARO FGS222-FGS212;RFXCOM-RFXtrx433 USB 433.92MHz , Prises Phénix, Prises et Eclairage DI-O, SOMFY RTS,Sonoff ..
denis_brasseur
Messages : 898
Inscription : 24 déc. 2018, 17:05
Localisation : (26)

Re: DZvents: vigilance météoFrance V2

Message par denis_brasseur »

Effectivement, les commentaires du code sont erronées, commentaire et conseil sont de type alert.
Pi3 + DD PiDrive - RFXtrx433 - AEON Labs ZW090
papoo
Messages : 2029
Inscription : 10 janv. 2016, 11:29
Localisation : Limoges (87)
Contact :

Re: DZvents: vigilance météoFrance V2

Message par papoo »

maj effectuée
domoticz beta/RaspBerry PI3 stretch
https://pon.fr github
Dim33
Messages : 209
Inscription : 29 janv. 2017, 23:19

Re: DZvents: vigilance météoFrance V2

Message 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
NUC sous Ubuntu Server / RFXCom / Domoticz Version: 2020.2
denis_brasseur
Messages : 898
Inscription : 24 déc. 2018, 17:05
Localisation : (26)

Re: DZvents: vigilance météoFrance V2

Message 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
Pi3 + DD PiDrive - RFXtrx433 - AEON Labs ZW090
Dim33
Messages : 209
Inscription : 29 janv. 2017, 23:19

Re: DZvents: vigilance météoFrance V2

Message par Dim33 »

Ceci explique cela :
Domoticz : Version: 4.10717
dzVents Version: 2.4.19

Une MAJ s'impose.
NUC sous Ubuntu Server / RFXCom / Domoticz Version: 2020.2
balajol
Messages : 864
Inscription : 13 nov. 2015, 18:54
Localisation : 62

Re: DZvents: vigilance météoFrance V2

Message par balajol »

Re,
Ok Pour moi, pas d'erreurs..
Merci Papoo et Denis_brasseur ;)
Cdt
Bertrand
2024.6 PC Windows10 ; 2ème DEBIAN 10;DANFOSS LC13, Topp; Senseurs univ FIBARO FGBS001, Flood Sensor, ZMNHBD1 Flush 2 Relays ; FIBARO FGS222-FGS212;RFXCOM-RFXtrx433 USB 433.92MHz , Prises Phénix, Prises et Eclairage DI-O, SOMFY RTS,Sonoff ..
denis_brasseur
Messages : 898
Inscription : 24 déc. 2018, 17:05
Localisation : (26)

Re: DZvents: vigilance météoFrance V2

Message 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
Pi3 + DD PiDrive - RFXtrx433 - AEON Labs ZW090
Répondre