[LUA] Vigilance MétéoFrance

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.
Moulins58
Messages : 134
Inscription : 17 févr. 2019, 20:41

Re: LUA: vigilance météoFrance

Message par Moulins58 »

Bonsoir, merci de la réponse , hélas, je ne suis pas bon, je n'ai pas compris le débogage .
Pour mon problème, ou dois-je mettre le "print" puisque que c'est marqué la ligne 38 :"attempt to index a nil value (Global 'domoticz').
Si vous pouviez me guider , Merci.
Keros
Messages : 6638
Inscription : 23 juil. 2019, 20:57

Re: LUA: vigilance météoFrance

Message par Keros »

Sans voir ton code, il est difficile de t'aider.

La fonction Print permet d'envoyer des informations dans les logs de DomoticZ. Le script utilise des variables pour fonctionner et en fonctionnement normal, on ne les voit pas. L'idée est de faire print("nom-de-la-variable = "..nom-de-la-variable) pour faire afficher dans les logs les informations qu'elle contient.

J'ai également écrit un guide pour débuter en programmation (voir ma signature). Ça pourra également t'aider à comprendre.
Comment bien utiliser le forum : Poser une question, Mettre un script, un fichier, une image ou des logs
Mes petits guides : Débuter en programmation, Le débogage, Le choix de matériel, Les sauvegardes
Ma présentation - Mes Tutos
Moulins58
Messages : 134
Inscription : 17 févr. 2019, 20:41

Re: LUA: vigilance météoFrance

Message par Moulins58 »

Bonsoir, et merci pour la réponse.
Ci-joint mon script vigilance météo france.

Code : Tout sélectionner

--[[
vigilanceMeteoFrance.lua
author/auteur = papoo
update/mise à jour = 09/08/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              = 44                   -- renseigner votre numéro de département sur 2 chiffres exemples : 01 ou 07 ou 87 
local alert_device             = 'Vigilance Meteo'    -- renseigner le nom de l'éventuel device alert vigilance météo associé (dummy - alert)
local conseil_meteo            = "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 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.06'
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
                                    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 = textAlert .. risqueTxt(tonumber(risqueDep)) .. ", "
                                        logWrite(textAlert)
                                    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
}


J'ai bien pris note des tutos et guides et j'y passe une partie de la journée en ce moment (c'est l'hiver) mais avant de pouvoir appliquer il va falloir un peu de temps.

Encore merci.

Edit Keros : Il y des balises avec le bouton </> qui permettent de mettre le script directement dans le corps du message.

Ce qui donne pour ton script :

Code : Tout sélectionner

--[[
vigilanceMeteoFrance.lua
author/auteur = papoo
update/mise à jour = 09/08/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              = 44                   -- renseigner votre numéro de département sur 2 chiffres exemples : 01 ou 07 ou 87 
local alert_device             = 'Vigilance Meteo'    -- renseigner le nom de l'éventuel device alert vigilance météo associé (dummy - alert)
local conseil_meteo            = "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 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.06'
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
                                    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 = textAlert .. risqueTxt(tonumber(risqueDep)) .. ", "
                                        logWrite(textAlert)
                                    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 Moulins58 le 30 janv. 2021, 17:47, modifié 2 fois.
Keros
Messages : 6638
Inscription : 23 juil. 2019, 20:57

Re: LUA: vigilance météoFrance

Message par Keros »

Pardon excuse-moi, ton souci est un peu plus compliquer dans le sens où ton script planterait sur domoticz.LOG_INFO,.
C'est juste la ligne de base pour écrire dans les logs :roll:

Est-ce que tu as d'autres scripts qui fonctionnent ? En lua et en DZvents ?

Tu peux nous en dire un peu plus sur ton installation : version de DomoticZ, version d'OS, version de Python ? C'est une nouvelle installation ?
Comment bien utiliser le forum : Poser une question, Mettre un script, un fichier, une image ou des logs
Mes petits guides : Débuter en programmation, Le débogage, Le choix de matériel, Les sauvegardes
Ma présentation - Mes Tutos
Moulins58
Messages : 134
Inscription : 17 févr. 2019, 20:41

Re: LUA: vigilance météoFrance

Message par Moulins58 »

Bonjour, et encore milles excuses pour mon manque de savoir, j'ai déjà beau appris depuis mon 2 ans.
Ma configuration est la suivante: Domoticz 2020.2 est installé sur un Raspberry-Pi3+ et un disque SSD de 120Go.
Version Raspbian GNU/linux 10 (buster).
Version Python 2.7.16
En matériel :
Plugin Linky (dernière version) fonctionne très bien après plusieurs mois de galère.
MQTT client Gateway.With Lan Interface (Arrêté) ne fonctionne pas .
1_Wire (system)
Motherboard sensors (Domoticz_Pi)
Dunny
Darksky prévision météo
RFxCom 433,92 Mz Version Pro XL 1:1034

En dispositifs ils sont :
    15 sondes Météo 433Mz
      14 relais 433Mz type Lighting 1
        3 prise 433 MZ type Lighting 2
          2 contacteur de porte type Lighting 2
            2 modules wifi hauteur de cuve
              1 sonde température Wire
                7 devices général prévision météo
                  1 P1 Smart Meter Linky Conso
                    6 devices données du Raspberry (température - CPU_Usage-Etc.)
                      1 détecteur de fumée 433Mz
                        1 CM180 Compteur Energie
                          4 Dévices virtual vigilance météo (ce qui est mon problème)

                          En scripts Lua:
                            Script_time_vigilance_meteofrance.lua (le problème)
                              meteo actuelle.lua
                                XmlParser.lua
                                  Xml2lua.lua
                                    Script_time_demo.lua
                                      Script_device_demo.lua
                                        json.lua
                                          xmltest.lua
                                            xmlSimple.lua

                                            dossier lua/xmlhandler:
                                              tree.lua
                                                print.lua
                                                  dom.lua

                                                  Dossier dzvents :
                                                    Prevision Meteo.lua

                                                    Voila, le détail de mon installation.

                                                    Bonne journée.
                                                    Keros
                                                    Messages : 6638
                                                    Inscription : 23 juil. 2019, 20:57

                                                    Re: LUA: vigilance météoFrance

                                                    Message par Keros »

                                                    Ton script Prévision Météo en Dzvent fonctionne ? Tu peux nous le poster ? Je voudrais voir ce qu'il peut y avoir comme différence avec ton script de vigilance météo.
                                                    Comment bien utiliser le forum : Poser une question, Mettre un script, un fichier, une image ou des logs
                                                    Mes petits guides : Débuter en programmation, Le débogage, Le choix de matériel, Les sauvegardes
                                                    Ma présentation - Mes Tutos
                                                    Moulins58
                                                    Messages : 134
                                                    Inscription : 17 févr. 2019, 20:41

                                                    Re: LUA: vigilance météoFrance

                                                    Message par Moulins58 »

                                                    Ok,ll fonctionne super bien.

                                                    le voici !

                                                    Code : Tout sélectionner

                                                    --[[
                                                    previsionMeteo.lua
                                                    author/auteur = papoo
                                                    update/mise à jour = 31/03/2020
                                                    création = 18/08/2019
                                                    https://pon.fr/dzvents-mise-en-cache-des-donnees-de-lapi-prevision_meteo-ch
                                                    https://github.com/papo-o/domoticz_scripts/blob/master/dzVents/scripts/previsionMeteo.lua
                                                    https://easydomoticz.com/forum/viewtopic.php?f=17&t=8865
                                                    encodage UTF8 sans BOM
                                                    Principe : Le site prevision-meteo.ch subit de nombreux ralentissements, rendant aléatoire l'affichage des prévisions météo sur monitor
                                                    https://pon.fr/prevision-meteo-a-3-jours/
                                                    Ce script permet la récupération des données via l'API, la modification du chemin d'accès aux icones afin de les stocker en local.
                                                    Si les données sont inaccessibles lors de l'appel de l'API, les données précédentes ne sont pas écrasées, permettant le fonctionnement continue de la page météo
                                                    Téléchargez les 36 icones météo dans le dossier dédié de monitor /home/pi/domoticz/www/monitor/icons/prevision-meteo/
                                                    https://www.prevision-meteo.ch/style/images/icon/ensoleille.png
                                                    https://www.prevision-meteo.ch/style/images/icon/nuit-claire.png
                                                    https://www.prevision-meteo.ch/style/images/icon/ciel-voile.png
                                                    https://www.prevision-meteo.ch/style/images/icon/nuit-legerement-voilee.png
                                                    https://www.prevision-meteo.ch/style/images/icon/faibles-passages-nuageux.png
                                                    https://www.prevision-meteo.ch/style/images/icon/nuit-bien-degagee.png
                                                    https://www.prevision-meteo.ch/style/images/icon/brouillard.png
                                                    https://www.prevision-meteo.ch/style/images/icon/stratus.png
                                                    https://www.prevision-meteo.ch/style/images/icon/stratus-se-dissipant.png
                                                    https://www.prevision-meteo.ch/style/images/icon/nuit-claire-et-stratus.png
                                                    https://www.prevision-meteo.ch/style/images/icon/eclaircies.png
                                                    https://www.prevision-meteo.ch/style/images/icon/nuit-nuageuse.png
                                                    https://www.prevision-meteo.ch/style/images/icon/faiblement-nuageux.png
                                                    https://www.prevision-meteo.ch/style/images/icon/fortement-nuageux.png
                                                    https://www.prevision-meteo.ch/style/images/icon/averses-de-pluie-faible.png
                                                    https://www.prevision-meteo.ch/style/images/icon/nuit-avec-averses.png
                                                    https://www.prevision-meteo.ch/style/images/icon/averses-de-pluie-moderee.png
                                                    https://www.prevision-meteo.ch/style/images/icon/averses-de-pluie-forte.png
                                                    https://www.prevision-meteo.ch/style/images/icon/couvert-avec-averses.png
                                                    https://www.prevision-meteo.ch/style/images/icon/pluie-faible.png
                                                    https://www.prevision-meteo.ch/style/images/icon/pluie-forte.png
                                                    https://www.prevision-meteo.ch/style/images/icon/pluie-moderee.png
                                                    https://www.prevision-meteo.ch/style/images/icon/developpement-nuageux.png
                                                    https://www.prevision-meteo.ch/style/images/icon/nuit-avec-developpement-nuageux.png
                                                    https://www.prevision-meteo.ch/style/images/icon/faiblement-orageux.png
                                                    https://www.prevision-meteo.ch/style/images/icon/nuit-faiblement-orageuse.png
                                                    https://www.prevision-meteo.ch/style/images/icon/orage-modere.png
                                                    https://www.prevision-meteo.ch/style/images/icon/fortement-orageux.png
                                                    https://www.prevision-meteo.ch/style/images/icon/averses-de-neige-faible.png
                                                    https://www.prevision-meteo.ch/style/images/icon/nuit-avec-averses-de-neige-faible.png
                                                    https://www.prevision-meteo.ch/style/images/icon/neige-faible.png
                                                    https://www.prevision-meteo.ch/style/images/icon/neige-moderee.png
                                                    https://www.prevision-meteo.ch/style/images/icon/neige-forte.png
                                                    https://www.prevision-meteo.ch/style/images/icon/pluie-et-neige-melee-faible.png
                                                    https://www.prevision-meteo.ch/style/images/icon/pluie-et-neige-melee-moderee.png
                                                    https://www.prevision-meteo.ch/style/images/icon/pluie-et-neige-melee-forte.png
                                                    --]]
                                                    --------------------------------------------
                                                    ------------ Variables à éditer ------------
                                                    --------------------------------------------
                                                    
                                                    local jsonFile      = '/home/pi/domoticz/www/monitor/prevision-meteo.json' -- nom du fichier (et son chemin complet) contenant les données de l'API
                                                    local iconsPath     = 'http://192.168.1.--:8080/monitor/icons/prevision-meteo/' -- adresse local où sont stockés les icones
                                                    --local city          = '-----'  -- nil si vous souhaitez utiliser les coordonnées de latitude/longitude 
                                                    --------------------------------------------
                                                    ----------- Fin variables à éditer ---------
                                                    --------------------------------------------
                                                    local scriptName        = 'Extraction prévisions météo'
                                                    local scriptVersion     = '1.02'
                                                    local response = "prevision-meteo_response"
                                                    return {
                                                        active = true,
                                                        on =        {       timer           =   { "every 6 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(domoticz, item)
                                                    
                                                            local function logWrite ( str, level)  -- afficher le contenu d'un tableau
                                                                local logTableWrite_cache = {}
                                                                local function sub_logTableWrite(str, indent)
                                                                    if (logTableWrite_cache[tostring(str)]) then
                                                                        domoticz.log(indent.."*"..tostring(str), level or domoticz.LOG_DEBUG)
                                                                    else
                                                                        logTableWrite_cache[tostring(str)]=true
                                                                        if (type(str)=="table") then
                                                                            for pos,val in pairs(str) do
                                                                                if (type(val)=="table") then
                                                                                    --domoticz.log(indent.."["..tostring(pos).."] - ["..tostring(str).."] => {", level or domoticz.LOG_DEBUG)
                                                                                    domoticz.log(indent.."["..tostring(pos).."] => {", level or domoticz.LOG_DEBUG)
                                                                                    sub_logTableWrite(val,indent..string.rep(" ",string.len(pos)+8))
                                                                                    domoticz.log(indent..string.rep(" ",string.len(pos)+6).."}", level or domoticz.LOG_DEBUG)
                                                                                elseif (type(val)=="string") then
                                                                                    domoticz.log(indent.." "..pos..' = "'..val..'"', level or domoticz.LOG_DEBUG)
                                                                                    --domoticz.log(indent..pos..' => "'..val..'"', level or domoticz.LOG_DEBUG)
                                                                                else
                                                                                    domoticz.log(indent.." "..pos.." = "..tostring(val), level or domoticz.LOG_DEBUG)
                                                                                    --domoticz.log(indent..pos.." = "..tostring(val), level or domoticz.LOG_DEBUG)
                                                                                end
                                                                            end
                                                                        else
                                                                            domoticz.log(indent..tostring(str), level or domoticz.LOG_DEBUG)
                                                                        end
                                                                    end
                                                                end
                                                                if (type(str)=="table") then
                                                                    domoticz.log("["..tostring(str).."] => {", level or domoticz.LOG_DEBUG)
                                                                    sub_logTableWrite(str,"  ")
                                                                    domoticz.log("}", level or domoticz.LOG_DEBUG)
                                                                else
                                                                    sub_logTableWrite(str,"  ")
                                                                end
                                                                print()
                                                            end
                                                    
                                                            if (item.isHTTPResponse and item.trigger == response) then
                                                                if (not item.isJSON) then
                                                                    logWrite('Last http response was not what expected. Trigger: '..item.trigger,domoticz.LOG_ERROR)
                                                                else
                                                                    local contents = domoticz.utils.toJSON(item.json)
                                                                    contents = contents:gsub('https://www(.?)prevision(.?)meteo(.?)ch/style/images/icon/', iconsPath) 
                                                                    logWrite(contents)
                                                                    if contents then
                                                                        file = io.open(jsonFile, "w+")
                                                                        file:write( contents )
                                                                        io.close( file )
                                                                        --file:close()
                                                                        logWrite('ecriture des données dans le fichier '..jsonFile)
                                                                    end
                                                                end
                                                    
                                                            else
                                                                if city ~= nil then 
                                                                    url = "https://www.prevision-meteo.ch/services/json/"..city
                                                                else
                                                                    local latitude  = domoticz.settings.location.latitude
                                                                    -- local latitude  = '----'
                                                                    logWrite('latitude : '..latitude)
                                                                    local longitude = domoticz.settings.location.longitude
                                                                    -- local longitude = '----'
                                                                    logWrite('longitude : '..longitude)
                                                                    url = "https://www.prevision-meteo.ch/services/json/lat="..latitude.."lng="..longitude
                                                                end
                                                    
                                                                domoticz.openURL({
                                                                      url = url,
                                                                            method = "GET",
                                                                            callback = response})
                                                            end
                                                        end
                                                    }
                                                    Bonne après-midi
                                                    Dernière modification par Moulins58 le 30 janv. 2021, 17:58, modifié 2 fois.
                                                    Keros
                                                    Messages : 6638
                                                    Inscription : 23 juil. 2019, 20:57

                                                    Re: LUA: vigilance météoFrance

                                                    Message par Keros »

                                                    Ne mets pas ton script en pièce jointe, on ne peut pas le lire sur le forum. Obliger de le télécharger, le dézipper ...

                                                    Il y a un bouton </ > qui permet de placer des balises autour de ton code pour qu'il s'affiche dans un petit cadre blanc. Je t'invite à modifier ton message précédent et à retirer tes coordonnées GPS ;)

                                                    Tu as fait un comparatif entre les deux scripts ? La partie Logging est complètement commentée. Tu as essayé :

                                                    Code : Tout sélectionner

                                                        -- 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 },
                                                    Comment bien utiliser le forum : Poser une question, Mettre un script, un fichier, une image ou des logs
                                                    Mes petits guides : Débuter en programmation, Le débogage, Le choix de matériel, Les sauvegardes
                                                    Ma présentation - Mes Tutos
                                                    Moulins58
                                                    Messages : 134
                                                    Inscription : 17 févr. 2019, 20:41

                                                    Re: LUA: vigilance météoFrance

                                                    Message par Moulins58 »

                                                    Merci pour l'info, j'ai bien enregistré

                                                    J'ai dé-commenté la ligne erreur, a force de chercher, je les avais toutes commentées

                                                    Code : Tout sélectionner

                                                    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 },
                                                    
                                                    j'ai la même erreur.
                                                    Keros
                                                    Messages : 6638
                                                    Inscription : 23 juil. 2019, 20:57

                                                    Re: LUA: vigilance météoFrance

                                                    Message par Keros »

                                                    Est-ce que tu as essayé ce que je t'ai dit plus haut ? > Commenter toutes les lignes correspondantes à la fonction logging ?
                                                    Comment bien utiliser le forum : Poser une question, Mettre un script, un fichier, une image ou des logs
                                                    Mes petits guides : Débuter en programmation, Le débogage, Le choix de matériel, Les sauvegardes
                                                    Ma présentation - Mes Tutos
                                                    Répondre