[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.
alpin38
Messages : 64
Inscription : 02 juil. 2015, 11:14

Re: LUA: vigilance météoFrance V2

Message par alpin38 »

Slt Papoo
je pense avoir trouver l'origine de mon probleme , je pense qu'il viens de la

local rid = assert(io.popen("/usr/bin/curl -m5 http://vigilance.meteofrance.com/data/NXFR33_LFPW_.xml"))

mon domoticz tourne sur mon nas (TS251) et je n'ai pas curl apparement , donc si un proqnap sais comment faire , je suis preneur de la solution

@+
fableo
Messages : 38
Inscription : 10 nov. 2017, 17:36

Re: LUA: vigilance météoFrance V2

Message par fableo »

dokho a écrit : 12 oct. 2018, 11:52 Bonjour,

Je viens de mettre à jour vers la version V2 de ce script et j'ai une erreur dans les logs:

Code : Tout sélectionner

Error: EventSystem: in /home/domoticz/domoticz/scripts/lua/script_time_vigilance_meteo.lua: ...icz/domoticz/scripts/lua/script_time_vigilance_meteo.lua:82: ')' expected near '"); -- '"'
la ligne en question est:

Code : Tout sélectionner

value = string.gsub(value, "\"", """); -- '"' -> """
Suis je le seul à rencontrer ce problème ?

Merci.
Bonjour,
je viens d'installer le script et j'ai exactement le même message que Dokho. J'ai converti le fichier en UTF8-BOM mais ca ne régle pas le pbl.

J'ai réglé le problème en modifiant comme suit:
ligne 82 = value = string.gsub(value, "\"", "\""); -- '"' -> """
ligne 99 = value = string.gsub(value, "\"", "\"");

A toute fin utile. ;)
balajol
Messages : 864
Inscription : 13 nov. 2015, 18:54
Localisation : 62

Re: LUA: vigilance météoFrance V2

Message par balajol »

Bonjour,
Merci Fableo (etPapoo bien entendu )
J'avais l'erreur:
Error: EventSystem: in script_time_vigilance_meteofrance_V2_20180303lua: [string "--[[ ..."]:82: ')' expected near '"); -- '"'

La Modification des deux lignes 82 et 99 m'ont permis de faire tourner le script sans erreur.
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 ..
Euton
Messages : 137
Inscription : 18 sept. 2019, 09:33

Re: LUA: vigilance météoFrance V2

Message par Euton »

Bonsoir,

Sauf erreur de ma part le script « script_time_vigilance_meteofrance_v2.lua« ne fonctionne plus correctement depuis que météo france à changer son site d’alerte météo.

Es ce que Papoo pourrait voir le problème ?

Merci d’avance
Domoticz version : 2024.7 (build 16178)
dzVents Version: 3.1.8
Python version : 3.11.2

Raspberry Pi OS : v12 (Bookworm)

Avec Domoticz depuis 28/11/2015
denis_brasseur
Messages : 898
Inscription : 24 déc. 2018, 17:05
Localisation : (26)

Re: LUA: vigilance météoFrance V2

Message par denis_brasseur »

Meme constat depuis le 4 juin, plus de remonté d'information depuis le script.
L'url http://vigilance.meteofrance.com/data/NXFR33_LFPW_.xml est toujours active, mais je suppose que le format des données à changé.
papoo, tu peux faire quelque chose ?
Pi3 + DD PiDrive - RFXtrx433 - AEON Labs ZW090
papoo
Messages : 2029
Inscription : 10 janv. 2016, 11:29
Localisation : Limoges (87)
Contact :

Re: LUA: vigilance météoFrance V2

Message par papoo »

vais regarder
domoticz beta/RaspBerry PI3 stretch
https://pon.fr github
papoo
Messages : 2029
Inscription : 10 janv. 2016, 11:29
Localisation : Limoges (87)
Contact :

Re: LUA: vigilance météoFrance V2

Message par papoo »

je l'ai passé en DZvents

Code : Tout sélectionner

--[[
vigilanceMeteoFrance.lua
author/auteur = papoo
update/mise à jour = 17/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              = 39                   -- 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" --'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" --'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.05'
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 = 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 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 = ""

            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)
            if text == '' then text = 'Aucune vigilance' end
            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 (merci denis_brasseur )
        -- ====================================================================================================================         
            if conseil_meteo ~= nil then
                local vconseil = abr.CV.EV.VCONSEIL 
                if vconseil and (type(vconseil) == "table") then 
                    for i, result in pairs(vconseil) do
                        if vconseil[i].texte then
                            conseil = vconseil[i].texte
                        end
                    end
                else conseil = 'Aucun conseil disponible'
                end
                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 (merci denis_brasseur )
        -- ====================================================================================================================        
            if commentaire_meteo ~= nil then
                local vcommentaire = abr.CV.EV.VCOMMENTAIRE
                if vcommentaire and (type(vcommentaire) == "table") then 
                    for i, result in pairs(vcommentaire) do
                        if vcommentaire[i].texte then
                            commentaire = vcommentaire[i].texte
                        end
                    end
                else commentaire = 'Aucun commentaire disponible'
                end
                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
}

Dernière modification par papoo le 17 juin 2020, 22:30, modifié 5 fois.
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 »

Voici dans le xml les résulats de mon département :

Code : Tout sélectionner

<DV dep="26" coul="2">
<risque val="3"/>
</DV>
Le code s'éxécute et remonte bien le niveau de vigilance.
dzVents: Info: Vigilance météo France v2.0: vigilance 2 pour le département 26

Code : Tout sélectionner

if dv[i].risque then 
ne remonte pas la valeur risque
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 »

c'est corrigé, à vouloir absolument afficher plusieurs risques, j'en avais oublié de tester quand il n'y en a qu'un. désolé
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 »

Ca fonctionne, merci papoo ;)
J'ai ajouté l'affichage de Conseil Météo et Commentaire Météo comme dans le script précédent
<EV dateinsert="20200614060000" dateprevue="20200615060000" daterun="20200614060000" echeance="24" noversion="1" producteur="DP" typeprev="1" crueint="99,2A,2B,22,74">
<VCONSEIL texte="Crues/Orange- Renseignez-vous avant d'entreprendre vos déplacements et soyez très prudents. Respectez, en particulier, les déviations mises en place.- Ne vous engagez en aucun cas, à pied ou en voiture, sur une voie immergée.- Dans les zones habituellement inondables, mettez en sécurité vos biens susceptibles d'être endommagés et surveillez la montée des eaux."/>
<VCOMMENTAIRE texte="Crue importante sur l'Allier entre l'Alagnon et la Dore."/>
</EV>
Pi3 + DD PiDrive - RFXtrx433 - AEON Labs ZW090
Répondre