Page 1 sur 2

Covid-19

Publié : 20 mars 2020, 17:51
par totof60
Bonjour à tous

Je vous propose un petit script pour afficher les données sur cette saloperie de virus. :oops:

Ce script est réalisé depuis un script de Papoo que j'ai modifié à l'arrache ! ( j'ai honte !)

Principe :

le script va questionner une API qui recense les données sur les cas de Covid-19
l'API vient du site : https://lab.isaaclin.cn/nCoV/en
dans les LOG on retrouve les données : guéris, cas confirmés, et décédés

D'un naturel optimiste j'ai choisi d'afficher dans Domoticz les Guéris :P

On peut changer le pays en notant le nom du pays en Anglais.

En premier on créra un device dummy de type custom sensor

Image

Le code à mettre dans l'editeur de domoticz (Lua script time):

Code : Tout sélectionner

--[[
/home/pi/domoticz/scripts/lua/script_time_covid.lua
auteur : totof60
date de création : 20/03/2020
Date de mise à jour : 20/03/2020

Ce script est réalisé depuis un script de Papoo que j'ai modifié à l'arrache ! ( j'ai honte !)

Principe : 

le script va questionner une API qui recense les données sur les cas de Covid-19
l'API vient du site : https://lab.isaaclin.cn/nCoV/en
dans les LOG on retrouve les données : guéris, cas confirmés, et décédés

D'un naturel optimiste j'ai choisi d'afficher dans Domoticz les Guéris



/!\attention/!\
si vous souhaitez utiliser ce script dans l'éditeur interne, pour indiquer le chemin complet vers le fichier JSON.lua, il vous faudra changer la ligne 
json = assert(loadfile(luaDir..'JSON.lua'))()
par 
json = assert(loadfile('/le/chemin/vers/le/fichier/lua/JSON.lua'))()
exemple :
json = assert(loadfile('/home/pi/domoticz/scripts/lua/JSON.lua'))()
la reconnaissance automatique du chemin d'exécution de ce script ne fonctionnant pas dans l'éditeur interne
--]]
--------------------------------------------
------------ Variables à éditer ------------
-------------------------------------------- 

local debugging = true  			        -- true pour voir les logs dans la console log Dz ou false pour ne pas les voir
local script_actif = true                   -- active (true) ou désactive (false) ce script simplement
local delai = 59                            -- délai d'exécution de ce script en minutes de 1 à 59 (délai entre deux appels à l'API)
local url_info_covid = "https://lab.isaaclin.cn/nCoV/api/area?latest=1&provinceEng="   -- Adresse de l'API 
local pays = "France"                       --pays en Anglais , pour la liste voir le site : https://lab.isaaclin.cn/nCoV/api/provinceName?lang=en
local covid_idx = 192   -- idx du materiel

                                           
                                            
                                            --------------------------------------------
----------- Fin variables à éditer ---------
--------------------------------------------
--------------------------------------------
------------- Autres Variables -------------
--------------------------------------------
local nom_script = 'Infos Covid-19'
local version = '0.1'


curl = '/usr/bin/curl -m 5 '		 	-- ne pas oublier l'espace à la fin

-- chemin vers le dossier lua
	if (package.config:sub(1,1) == '/') then
		 luaDir = debug.getinfo(1).source:match("@?(.*/)")
	else
		 luaDir = string.gsub(debug.getinfo(1).source:match("@?(.*\\)"),'\\','\\\\')
	end
	json = assert(loadfile('/home/pi/domoticz/scripts/lua/JSON.lua'))()						-- chargement du fichier JSON.lua
--------------------------------------------
----------- Fin Autres Variables -----------
--------------------------------------------	
--------------------------------------------
---------------- Fonctions -----------------
-------------------------------------------- 
function voir_les_logs (s, debugging)
    if (debugging) then 
		if s ~= nil then
        print (s)
		else
		print ("aucune valeur affichable")
		end
    end
end	

--------------------------------------------
-------------- Fin Fonctions ---------------
--------------------------------------------
commandArray = {}
time = os.date("*t")

if script_actif == true then
    if ((time.min-1) % delai) == 0 then -- toutes les xx minutes en commençant par xx:01    
        voir_les_logs("=========== ".. nom_script .." (v".. version ..") ===========",debugging)
       
        --=========== Lecture json ===============--

        local config = assert(io.popen(curl..' "'.. url_info_covid ..pays.. '"')) 
        --end
        local blocjson = config:read('*all')
        config:close()
        local jsonValeur = json:decode(blocjson)
        if jsonValeur then
            local curedCount = jsonValeur.results[1].curedCount
             local confirmedCount = jsonValeur.results[1].confirmedCount
             local deadCount = jsonValeur.results[1].deadCount
             
            if curedCount ~= nil then voir_les_logs("--- --- --- Guéris : "..curedCount,debugging) end
            if confirmedCount ~= nil then voir_les_logs("--- --- --- Cas confirmés : "..confirmedCount,debugging) end
            if deadCount ~= nil then voir_les_logs("--- --- --- Décédés : "..deadCount,debugging) end
           
          if covid_idx ~= nil then commandArray[#commandArray+1] = {['UpdateDevice'] = covid_idx ..'|0|'.. jsonValeur.results[1].curedCount} end
           
                      

        else
            voir_les_logs("--- --- --- aucun résultat à décoder",debugging)
        end --if jsonValeur
    -- ====================================================================================================================	

    voir_les_logs("======== Fin ".. nom_script .." (v".. version ..") ==========",debugging)        
    end --if time       
end -- if script_actif
--end

return commandArray
Le resultat :

Image



Attention si vous n'avez pas de remontées de l'api ; ça arrive c'est un petit hébergeur qui maintient les données.

Edit: une autre source avec ce script modifié
https://easydomoticz.com/forum/viewtopi ... 833#p79833

Attention pour les puristes il y certainement plein d'erreur dans mon script !!

Gardez le moral ; il y en a qui survivent !! :D

Pour ceux qui veulent l’icône:

Re: Covid-19

Publié : 21 mars 2020, 10:42
par Doudy
Hello,

Merci pour le script
J'ai essayé plusieurs liens d'après leur page
https://lab.isaaclin.cn/nCoV/en
mais

Internal Server Error
The server encountered an internal error and was unable to complete your request. Either the server is overloaded or there is an error in the application.


:(

Re: Covid-19

Publié : 22 mars 2020, 07:53
par totof60
Oui

Comme je l’ai dit le site peut être surchargé

Pour ma part la dernière remontée date du 21 à 17 heure

Edit: dernière remontée le 22 à 10 heure

Je regarde pour trouver un autre site avec api décodable en Json

Re: Covid-19

Publié : 22 mars 2020, 11:53
par Doudy
Merci
;)

Re: Covid-19

Publié : 22 mars 2020, 16:07
par manu663

Re: Covid-19

Publié : 22 mars 2020, 17:05
par totof60
Merci je suis sur une autre piste avec le site :
https://wuhan-coronavirus-api.laeyoung. ... edu/latest
qui me renvoi ça :

Code : Tout sélectionner

[{"countryregion":"France","lastupdate":"2020-03-22T15:42:00.003Z","location":{"lat":47.8004,"lng":3.5666},"countrycode":{"iso2":"FR","iso3":"FRA"},"confirmed":14431,"deaths":562,"recovered":12}]
Mais je n'arrive pas à trouver la bonne syntaxe pour récupérer les infos.

Code : Tout sélectionner

local recovered = jsonValeur.recovered
Si quelqu'un peut svp m'aiguiller pour la syntaxe

Re: Covid-19

Publié : 22 mars 2020, 17:36
par totof60
Je me réponds à moi même
la bonne syntaxe.

Code : Tout sélectionner

local recovered = jsonValeur[1].recovered

Re: Covid-19

Publié : 22 mars 2020, 18:35
par totof60
Script modifié avec une nouvelle source
https://systems.jhu.edu/

Le retour du nombre de guéris est beaucoup moins optimiste !
Edit: elles sont maintenant les mêmes
Mais les autres données sont identiques à l'ensemble des données mondiales.

Inutile de faire tourner le script toutes les minutes ; j'ai donc modifié pour faire une requête une fois par jour.

N’hésitez pas à me faire des retours, les améliorations sont les biens venues

Code : Tout sélectionner

--[[
/home/pi/domoticz/scripts/lua/script_time_covid19.lua
auteur : totof60
date de création : 22/03/2020
Date de mise à jour : 22/03/2020

Ce script est réalisé depuis un script de Papoo que j'ai modifié à l'arrache ! ( j'ai honte !)

Principe : 

le script va questionner une API qui recense les données sur les cas de Covid-19
l'API vient du site : https://systems.jhu.edu/
dans les LOG on retrouve les données : guéris, cas confirmés, et décédés

d'un naturel optimiste j'ai choisi d'afficher dans Domoticz les Guéris



/!\attention/!\
si vous souhaitez utiliser ce script dans l'éditeur interne, pour indiquer le chemin complet vers le fichier JSON.lua, il vous faudra changer la ligne 
json = assert(loadfile(luaDir..'JSON.lua'))()
par 
json = assert(loadfile('/le/chemin/vers/le/fichier/lua/JSON.lua'))()
exemple :
json = assert(loadfile('/home/pi/domoticz/scripts/lua/JSON.lua'))()
la reconnaissance automatique du chemin d'exécution de ce script ne fonctionnant pas dans l'éditeur interne
--]]
--------------------------------------------
------------ Variables à éditer ------------
-------------------------------------------- 

local debugging = true  			        -- true pour voir les logs dans la console log Dz ou false pour ne pas les voir
local script_actif = true                   -- active (true) ou désactive (false) ce script simplement
local heure           = 20		    	    -- (0-24) heure de relevée
local minute          = 2                  -- (00-59)minutes de relevée
local url_info_covid = "https://wuhan-coronavirus-api.laeyoung.endpoint.ainize.ai/jhu-edu/latest?iso3="   -- Adresse de l'API 
local pays = "FRA"                       --Nom pays en iso à 3 lettres
local covid_idx = 192   -- idx du materiel

                                           
                                            
                                            --------------------------------------------
----------- Fin variables à éditer ---------
--------------------------------------------
--------------------------------------------
------------- Autres Variables -------------
--------------------------------------------
local nom_script = 'Infos Covid-19'
local version = '0.2'


curl = '/usr/bin/curl -m 5 '		 	-- ne pas oublier l'espace à la fin

-- chemin vers le dossier lua
	if (package.config:sub(1,1) == '/') then
		 luaDir = debug.getinfo(1).source:match("@?(.*/)")
	else
		 luaDir = string.gsub(debug.getinfo(1).source:match("@?(.*\\)"),'\\','\\\\')
	end
	json = assert(loadfile('/home/pi/domoticz/scripts/lua/JSON.lua'))()						-- chargement du fichier JSON.lua
--------------------------------------------
----------- Fin Autres Variables -----------
--------------------------------------------	
--------------------------------------------
---------------- Fonctions -----------------
-------------------------------------------- 
function voir_les_logs (s, debugging)
    if (debugging) then 
		if s ~= nil then
        print (s)
		else
		print ("aucune valeur affichable")
		end
    end
end	

--------------------------------------------
-------------- Fin Fonctions ---------------
--------------------------------------------
commandArray = {}
time = os.date("*t")

if script_actif == true then
    
if (time.min == minute and time.hour == heure) then  --heure de relevé  
        voir_les_logs("=========== ".. nom_script .." (v".. version ..") ===========",debugging)
       
        --=========== Lecture json ===============--
        --local pays = FRA
        
        local config = assert(io.popen(curl..' "'.. url_info_covid .. pays .."&onlyCountries=true"..'"'))
        --end
        local blocjson = config:read('*all')
        config:close()
        local jsonValeur = json:decode(blocjson)
        if jsonValeur then
            local recovered = jsonValeur[1].recovered
             local confirmed = jsonValeur[1].confirmed
             local deaths = jsonValeur[1].deaths
             
            if recovered ~= nil then voir_les_logs("--- --- --- Guéris : "..recovered,debugging) end
            if confirmed ~= nil then voir_les_logs("--- --- --- Cas confirmés : "..confirmed,debugging) end
            if deaths ~= nil then voir_les_logs("--- --- --- Décédés : "..deaths,debugging) end
           
          if covid_idx ~= nil then commandArray[#commandArray+1] = {['UpdateDevice'] = covid_idx ..'|0|'.. jsonValeur[1].recovered} end
           
                      

        else
            voir_les_logs("--- --- --- aucun résultat à décoder",debugging)
        end --if jsonValeur
    -- ====================================================================================================================	

    voir_les_logs("======== Fin ".. nom_script .." (v".. version ..") ==========",debugging)        
    end --if time       
end -- if script_actif
--end

return commandArray
Image

Re: Covid-19

Publié : 23 mars 2020, 09:18
par totof60
manu663 a écrit : 22 mars 2020, 16:07 Si ça peut aider ...
https://github.com/bibaldo/MMM-COVID19
Ça fonctionne plutôt bien sur mon miroir magique

Re: Covid-19

Publié : 01 avr. 2020, 14:34
par totof60
Wouha !! plus de mille vues !

Des retours , des remarques ?

Merci d'avance