DZVents : mise en cache des données de l’API prevision_meteo.ch

Vous avez crée 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.
Soyez précis quant aux prérequis, les manips à faire pour que votre bijou fonctionne (des chmod ?, un apt-get à faire ...)
Décrivez précisément son fonctionnement
Placez votre code entre [Quote] et {/Quote]
Répondre
Doudy
Messages : 259
Enregistré le : 07 mai 2016, 17:23

Re: DZVents : mise en cache des données de l’API prevision_meteo.ch

Message par Doudy »

Jmrios a écrit :
06 avr. 2020, 19:04
(on ne perd pas ses données et tout fonctionne avec en prime la meteo) Aprés un mois de galere je dis Houffffff :lol:
Si tu as fait des modifications perso tu ne perd rien ?

;)
PI 3 = RFXCOM
PI 3 + Touchscreen 7" affichage Domoticz
RFXCOM 433
Domoticz Version: 2020.2 - Python Version: 3.7.3 - dzVents Version: 3.0.2

Jmrios
Messages : 12
Enregistré le : 25 mars 2020, 17:50

Re: DZVents : mise en cache des données de l’API prevision_meteo.ch

Message par Jmrios »

par Doudy » 07 avr. 2020, 08:52
Jmrios a écrit : ↑06 avr. 2020, 19:04
(on ne perd pas ses données et tout fonctionne avec en prime la meteo) Aprés un mois de galere je dis Houffffff :lol:
Si tu as fait des modifications perso tu ne perd rien ?
Le fait de réinstaller Domoticz entraîne la mise en place de la nouvelle version qui est 2020.1 avec quelques differences
- Dans l'oblet INTERRUPTEUR on a maintenant idx de chacun des objets
- Dans l'onglet Materiel en Zwave on a les 2 caractères de l'ID en surbrillance de l'objet (plus facile pour retrouver ses petits)
- C'est tout ce que j'ai pu repéré dans un premier temps

Les petits bobos de mon instal du a ce changement
- Onglet Plan -OK
- Page personnalisé - OK
- Onglet interrupteur, Scénario, Température, Météo, Mesures - OK
- Mes scripts lua - OK
- Mes fichiers audio - OK
- Le reboot automatique (crontab -e) - OK
- prevision météo - OK
- Les événements - 2 événements sur 30 étaient en Erreur (j'ai du les refaire, rien de bien grave)

Seul petit problème
Les icônes que j'ai créer ne remonte pas dans la liste déroulante onglet INTERRUPTEUR mais figure bien dans le dossier domoticz/www/images
Il y a peut être une nouvelle façon de procéder ?

Pour récupérer mes icônes, j'ai utilisé dans le dossier "images" les noms des icones qui ne me servaient pas (de la liste deroulante) pour les inscrire sur les miens. Et tout va bien

Si quelqu'un connait la procédure pour le faire normalement je suis a l’écoute, ou peut être que c'est un Bug ?

Jmrios
Messages : 12
Enregistré le : 25 mars 2020, 17:50

Re: DZVents : mise en cache des données de l’API prevision_meteo.ch

Message par Jmrios »

Re

Trop Naze pour mes icones j'avais oublié qu'il fallais completer le fichier domoticz/www/switch_icons.txt

Vraiment trop NAZE que je suis :arrow: :roll:
Donc ce fichier doit etre sauvegardé (Hi Hi j'avais déja prévu)
Pour le coup tout va bien

Moulins58
Messages : 55
Enregistré le : 17 févr. 2019, 20:41

Re: DZVents : mise en cache des données de l’API prevision_meteo.ch

Message par Moulins58 »

Bonjour,
Depuis deux jours, je me bats pour mettre la prévision météo sur mon Domoticz monitor, J'ai bien mis en place le script lua en modifiant mon IP et le port dans "domoticz/scripts/lua/". J'ai bien enregistré tous les icons dans le fichier "domoticz/www/monitor/icons/".

Mais rien ne fonctionne.
La page Météo, je la vois bien dans mon navigateur, mais vide. Si j'édite "frontpage_settings"je ne la vois pas.
J'ai fait la page 2 avec mes devices elle fonctionne
Je suis pas très pointu en programmation, et je pense que je loupe quelque chose dés le début.

Les questions que je pose, :
- Je n'ai pas trouvé ou entrer la clé API déjà.
- est-ce bien les scripts "lua" qu'il valait mettre "previsionMeteo.lua"
- pourquoi je ne trouve pas la page météo dans frontpage_settings.js.

Si quelqu'un pouvait me sortir de là!
Bon Dimanche
HL

Moulins58
Messages : 55
Enregistré le : 17 févr. 2019, 20:41

Re: DZVents : mise en cache des données de l’API prevision_meteo.ch

Message par Moulins58 »

Bonjour a tous.
je ne suis pas sure d'être au bon endroit.
Dans mes logs, j'ai ce message d'erreur de puis une semaine, je ne sais pas le corriger.

2020-04-25 08:50:00.271 Error: EventSystem: in /home/pi/domoticz/scripts/lua/script_time_meteofrance_pluie.lua: /home/pi/domoticz/scripts/lua/JSON.lua:808: HTML passed to JSON:decode(): <html>
2020-04-25 08:50:00.271 <head><title>302 Found</title></head>
2020-04-25 08:50:00.271 <body bgcolor="white">
2020-04-25 08:50:00.271 <center><h1>302 Found</h1></center>
2020-04-25 08:50:00.271 <hr><center>nginx</center>
2020-04-25 08:50:00.271 </body>
2020-04-25 08:50:00.271 </html>
2020-04-25 08:50:00.271

Quelqu'un pourrait-il venir a mon secours.
Bon weekend

Moulins58
Messages : 55
Enregistré le : 17 févr. 2019, 20:41

Re: DZVents : mise en cache des données de l’API prevision_meteo.ch

Message par Moulins58 »

Bonjour à tous.
J'avance,
J'ai mis en place ce script hier, après avoir galéré une semaine.
Ci-dessous le script:

Code : Tout sélectionner

--[[
previsionMeteo.lua
author/auteur = papoo
update/mise à jour = 04/10/2019
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
https://easydomoticz.com/forum/
https://easydomoticz.com/forum/viewtopic.php?f=17&t=8865&p=75038#p75038


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 jsonFile      = 'http://192.168.1.79:8080/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.79:8080/home/pi/domoticz/www/monitor/icons/prevision-meteo/' -- adresse local où sont stockés les icones

--------------------------------------------
----------- Fin variables à éditer ---------
--------------------------------------------
local scriptName        = 'Extraction prévisions météo'
local scriptVersion     = '1.01'
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
                --local latitude  = domoticz.settings.location.latitude
                local latitude  = '47.366285'
                logWrite('latitude : '..latitude)
                --local longitude = domoticz.settings.location.longitude
                local longitude = '-1.619198'
                logWrite('longitude : '..longitude)
                local url = "https://www.prevision-meteo.ch/services/json/lat="..latitude.."lng="..longitude

            domoticz.openURL({
                  url = url,
                        method = "GET",
                        callback = response})
        end
    end
}
Et dans les logs:

Code : Tout sélectionner

2020-04-27 07:42:04.069 Status: dzVents: Debug: Extraction prévisions météo v1.01: {"city_info":{"country":"--","elevation":"NA","latitude":"47.366285","longitude":"-1.619198","name":"NA","sunrise":"06:53","sunset":"21:14"},"current_condition":{"condition":"Stratus","condition_key":"stratus","date":"27.04.2020","hour":"08:00","humidity":98,"icon":"http://192.168.1.79:8080/home/pi/domoticz/www/monitor/icons/prevision-meteo/stratus.png","icon_big":"http://192.168.1.79:8080/home/pi/domoticz/www/monitor/icons/prevision-meteo/stratus-big.png","pressure":1004.6,"tmp":9,"wnd_dir":"E","wnd_gust":11,"wnd_spd":6},"fcst_day_0":{"condition":"Averses de pluie faible","condition_key":"averses-de-pluie-faible","date":"27.04.2020","day_long":"Lundi","day_short":"Lun.","hourly_data":{"0H00":{"APCPsfc":0,"CAPE180_0":"0.000","CIN180_0":0,"CONDITION":"Nuit nuageuse","CONDITION_KEY":"nuit-nuageuse","DPT2m":8.8,"HCDC":"0.00","HGT0C":2600,"ICON":"http://192.168.1.79:8080/home/pi/domoticz/www/monitor/icons/prevision-meteo/nuit-nuageuse.png","ISSNOW":0,"KINDEX":36,"LCDC":"0.00","MCDC":"0.00","PRMSL":1007.2,"RH2m":93,"TMP2m":9.9,"WNDCHILL2m":8.3,"WNDDIR10m":298,"WNDDIRCARD10":"NO","WNDGUST10m":18,"WNDSPD10m":11},"10H00":{"APCPsfc":0,"CAPE180_0":"0.000","CIN180_0":-4,"CONDITION":"Ensoleillé","CONDITION_KEY":"ensoleille","DPT2m":10.4,"HCDC":"0.00","HGT0C":2400,"ICON":"http://192.168.1.79:8080/home/pi/domoticz/www/monitor/icons/prevision-meteo/ensoleille.png","ISSNOW":0,"KINDEX":39,"LCDC":"0.00","MCDC":"0.00","PRMSL":1004.9,"RH2m":88,"TMP2m":12.5,"WNDDIR10m":321,"WNDDIRCARD10":"NO","WNDGUST10m":4,"WNDSPD10m":2},"11H00":{"APCPsfc":0,"CAPE180_0":"0.000","CIN180_0":0,"CONDITION":"Ensoleillé","CONDITION_KEY":"ensoleille","DPT2m":10.7,"HCDC":"0.00","HGT0C":2400,"ICON":"http://192.168.1.79:8080/home/pi/domoticz/www/monitor/icons/prevision-meteo/ensoleille.png","ISSNOW":0,"KINDEX":38,"LCDC":"0.00","MCDC":"0.00","PRMSL":1004.7,"RH2m":87,"TMP2m":12.8,"WNDDIR10m":267,"WNDDIRCARD10":"O","WNDGUST10m":10,"WNDSPD10m":6},"12H00":{"APCPsfc":0.1,"CAPE180_0":"0.000","CIN180_0":-8,"CONDITION":"Averses de pluie faible","CONDITION_KEY":"averses-de-pluie-faible","DPT2m":11.4,"HCDC":"0.00","HGT0C":2400,"ICON":"http://192.168.1.79:8080/home/pi/domoticz/www/monitor/icons/prevision-meteo/averses-de-pluie-faible.png","ISSNOW":0,"KINDEX":35,"LCDC":"0.00","MCDC":"0.00","PRMSL":1004.4,"RH2m":83,"TMP2m":14.3,"WNDDIR10m":297,"WNDDIRCARD10":"NO","WNDGUST10m":13,"WNDSPD10m":8},"13H00":{"APCPsfc":0.1,"CAPE180_0":"48.000","CIN180_0":-6,"CONDITION":"Averses de pluie faible","CONDITION_KEY":"averses-de-pluie-faible","DPT2m":12,"HCDC":"0.00","HGT0C":2400,"ICON":"http://192.168.1.79:8080/home/pi/domoticz/www/monitor/icons/prevision-meteo/averses-de-pluie-faible.png","ISSNOW":0,"KINDEX":37,"LCDC":"0.00","MCDC":"0.00","PRMSL":1003.9,"RH2m":76,"TMP2m":16.2,"WNDDIR10m":340,"WNDDIRCARD10":"N","WNDGUST10m":16,"WNDSPD10m":10},"14H00":{"APCPsfc":0.1,"CAPE180_0":"134.000","CIN180_0":-10,"CONDITION":"Averses de pluie faible","CONDITION_KEY":"averses-de-pluie-faible","DPT2m":12.1,"HCDC":"55.60","HGT0C":2300,"ICON":"http://192.168.1.79:8080/home/pi/domoticz/www/monitor/icons/prevision-meteo/averses-de-pluie-faible.png","ISSNOW":0,"KINDEX":37,"LCDC":"0.00","MCDC":"0.00","PRMSL":1003.6,"RH2m":75,"TMP2m":16.5,"WNDDIR10m":345,"WNDDIRCARD10":"N","WNDGUST10m":16,"WNDSPD10m":7},"15H00":{"APCPsfc":1.7,"CAPE180_0":"96.000","CIN180_0":0,"CONDITION":"Faiblement orageux","CONDITION_KEY":"faiblement-orageux","DPT2m":13.5,"HCDC":"0.00","HGT0C":2500,"ICON":"http://192.168.1.79:8080/home/pi/domoticz/www/monitor/icons/prevision-meteo/faiblement-orageux.png","ISSNOW":0,"KINDEX":34,"LCDC":"0.00","MCDC":"0.00","PRMSL":1002.5,"RH2m":89,"TMP2m":15.3,"WNDDIR10m":308,"WNDDIRCARD10":"NO","WNDGUST10m":29,"WNDSPD10m":18},"16H00":{"APCPsfc":2.4,"CAPE180_0":"68.000","CIN180_0":0,"CONDITION":"Faiblement orageux","CONDITION_KEY":"faiblement-orageux","DPT2m":13.7,"HCDC":"0.00","HGT0C":2500,"ICON":"http://192.168.1.79:8080/home/pi/domoticz/www/monitor/icons/prevision-meteo/faiblement-orageux.png","ISSNOW":0,"KINDEX":34,"LCDC":"0.00","MCDC":"0.00","PRMSL":1002.3,"RH2m":95,"TMP2m":14.5,"WNDDIR10m":292,"WNDDIRCARD10":"O","WNDGUST10m":32,"WNDSPD10m":19},"17H00":{"APCPsfc":1.6,"CAPE180_0":"22.000","CIN180_0":0,"CONDITION":"Averses de pluie faible","CONDITION_KEY":"averses-de-pluie-faible","DPT2m":13,"HCDC":"0.00","HGT0C":2400,"ICON":"http://192.168.1.79:8080/home/pi/domoticz/www/monitor/icons/prevision-meteo/averses-de-pluie-faible.png","ISSNOW":0,"KINDEX":34,"LCDC":"0.00","MCDC":"0.00","PRMSL":1002.2,"RH2m":95,"TMP2m":13.9,"WNDDIR10m":289,"WNDDIRCARD10":"O","WNDGUST10m":30,"WNDSPD10m":15},"18H00":{"APCPsfc":0.2,"CAPE180_0":"7.000","CIN180_0":0,"CONDITION":"Averses de pluie faible","CONDITION_KEY":"averses-de-pluie-faible","DPT2m":12.4,"HCDC":"0.00","HGT0C":2400,"ICON":"http://192.168.1.79:8080/home/pi/domoticz/www/monitor/icons/prevision-meteo/averses-de-pluie-faible.png","ISSNOW":0,"KINDEX":34,"LCDC":"0.00","MCDC":"0.00","PRMSL":1002.1,"RH2m":94,"TMP2m":13.4,"WNDDIR10m":308,"WNDDIRCARD10":"NO","WNDGUST10m":25,"WNDSPD10m":16},"19H00":{"APCPsfc":0.6,"CAPE180_0":"3.000","CIN180_0":0,"CONDITION":"Averses de pluie faible","CONDITION_KEY":"averses-de-pluie-faible","DPT2m":11.8,"HCDC":"0.00","HGT0C":2400,"ICON":"http://192.168.1.79:8080/home/pi/domoticz/www/monitor/icons/prevision-meteo/averses-de-pluie-faible.png","ISSNOW":0,"KINDEX":35,"LCDC":"0.00","MCDC":"0.00","PRMSL":1001.9,"RH2m":97,"TMP2m":12.3,"WNDDIR10m":297,"WNDDIRCARD10":"NO","WNDGUST10m":26,"WNDSPD10m":16},"1H00":{"APCPsfc":0,"CAPE180_0":"0.000","CIN180_0":0,"CONDITION":"Nuit nuageuse","CONDITION_KEY":"nuit-nuageuse","DPT2m":8.2,"HCDC":"0.00","HGT0C":2600,"ICON":"http://192.168.1.79:8080/home/pi/domoticz/www/monitor/icons/prevision-meteo/nuit-nuageuse.png","ISSNOW":0,"KINDEX":35,"LCDC":"0.00","MCDC":"0.00","PRMSL":1006.8,"RH2m":95,"TMP2m":9.1,"WNDCHILL2m":7.6,"WNDDIR10m":315,"WNDDIRCARD10":"NO","WNDGUST10m":17,"WNDSPD10m":10},"20H00":{"APCPsfc":0.7,"CAPE180_0":"3.000","CIN180_0":0,"CONDITION":"Averses de pluie faible","CONDITION_KEY":"averses-de-pluie-faible","DPT2m":11.7,"HCDC":"33.30","HGT0C":2400,"ICON":"htt
2020-04-27 07:42:04.070 Status: dzVents: Info: Extraction prévisions météo v1.01: ------ Finished previsionMeteo.lua
2020-04-27 07:42:04.070 Error: dzVents: Error: (3.0.1) Extraction prévisions météo v1.01: An error occurred when calling event handler previsionMeteo
2020-04-27 07:42:04.070 Error: dzVents: Error: (3.0.1) Extraction prévisions météo v1.01: ...e/pi/domoticz/scripts/dzVents/scripts/previsionMeteo.lua:131: attempt to index a nil value (global 'file')
Si quelqu'un avait une idée, Grand merci.

Répondre