Page 1 sur 4

[LUA] Informations lunaire

Publié : 30 juin 2016, 22:08
par papoo
Ce script a pour but de remonter toutes ou partie des informations du site http://www.calendrier-lunaire.net/ sur domoticz
Les informations disponibles : Nom de la phase, Visibilité, Distance Lune Terre, l'age de la lune, prochaine éclipse lunaire,
Trajectoire, Constellation, Prochain périgée lunaire, Prochain apogée lunaire, Prochain noeud lunaire
2016-06-30 21_39_22-Domoticz.png
2016-06-30 21_39_22-Domoticz.png (9.71 Kio) Consulté 7961 fois

Code : Tout sélectionner

--[[
name : script_time_phase_lunaire.lua
auteur : papoo
version : 1.13
Mise à jour : 23/01/2017
date : 26/06/2016
Principe :
 Ce script a pour but de remonter toutes ou partie des informations du site http://www.calendrier-lunaire.net/ sur domoticz 
 Les informations disponibles : Nom de la phase, Visibilité, Distance Lune Terre, l'age de la lune, prochaine éclipse lunaire, 
 Trajectoire, Constellation, Prochain périgée lunaire, Prochain apogée lunaire, Prochain noeud lunaire
 
]]--
--------------------------------------------
------------ Variables à éditer ------------
-------------------------------------------- 

local debugging = false  		-- true pour voir les logs dans la console log Dz ou false pour ne pas les voir
local dz_phase = 720 			-- renseigner l'id du device (texte) phase lunaire associé si souhaité, sinon nil
local dz_visibilite = 721 		-- renseigner l'id du device(pourcentage) Visibilité associé  si souhaité, sinon nil
local dz_distance = nil 		-- renseigner l'id du device (texte) distance Lune - Terre associé si souhaité, sinon nil
local dz_age = nil 				-- renseigner l'id du device (texte) Age de la Lune associé si souhaité, sinon nil
local dz_eclipse = nil 			-- renseigner l'id du device (texte) prochaine éclipse lunaire associé si souhaité, sinon nil
local dz_trajectoire = nil		-- renseigner l'id du device (texte) Trajectoire associé si souhaité, sinon nil
local dz_constellation = nil	-- renseigner l'id du device (texte) Constellation associé si souhaité, sinon nil
local dz_perigee = nil 			-- renseigner l'id du device (texte) Prochain périgée lunaire associé si souhaité, sinon nil
local dz_apogee = nil 			-- renseigner l'id du device (texte) Prochain apogée lunaire associé si souhaité, sinon nil
local dz_noeud = nil 			-- renseigner l'id du device (texte) Prochain noeud lunaire associé si souhaité, sinon nil

--------------------------------------------
----------- Fin variables à éditer ---------
--------------------------------------------
local indexArray=0	
--------------------------------------------
---------------- Fonctions -----------------
-------------------------------------------- 
function voir_les_logs (s, debugging)
    if (debugging) then 
		if s ~= nil then
        print ("<font color='#f3031d'>".. s .."</font>")
		else
		print ("<font color='#f3031d'>aucune valeur affichable</font>")
		end
    end
end	
--------------------------------------------
-------------- Fin Fonctions ---------------
--------------------------------------------

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

--if (time.hour == 00 and time.min == 20) then -- tout les matins à 00h20
if (time.min == 20 and ((time.hour == 7) or (time.hour == 13) or (time.hour == 18))) then -- 3 éxecutions du script par jour à 7H20, 13h20 et 18H20
-- if time.hour%2 == 0 then -- toutes les deux heures
-- if (time.hour%1 == 0 and time.min == 10)  then -- Toutes les heures et 10 minutes
--if time.min%2 == 0 then -- Toutes les 2 minutes
print('script_time_phase_lunaire.lua')

		local fname ="horoscope.xml"
		os.execute("wget -q -O " .. fname .. " http://www.calendrier-lunaire.net/")
		
				local f = io.open(fname, "r")

			 if f == nil then
			 print("Error opening file '" .. fname .. "'.")
			 os.exit(1)
			 end
 
		local testHtml = f:read("*all")
					f:close()
for instance in testHtml:gmatch("<body>(.-)</body>") do
local phase=instance:match('<strong>Nom de la phase : </strong>(.-)</li>')
local visibilite=instance:match('<strong>Visibilité : </strong>(.-)</li>')
local distance=instance:match('Terre : </strong>(.-)</li>')
local age=instance:match('<strong>Age de la Lune : </strong> (.-)</li>')
local eclipse=instance:match('lunaire : </strong> (.-)</a></li>')
local trajectoire=instance:match('Trajectoire : </strong>(.-)<img')
local constellation=instance:match('</span>Constellation : </strong>(.-)<img')
local perigee=instance:match('Prochain périgée lunaire : </strong>(.-)<img')
local apogee=instance:match('Prochain apogée lunaire : </strong>(.-)<img')
local noeud=instance:match('Prochain noeud lunaire : </strong>(.-)<img')

voir_les_logs("--- --- --- Nom de la phase : "..phase,debugging)
		  if dz_phase ~= nil and phase ~= nil then -- Mise à jour du devise phase si il existe
			 commandArray[indexArray] = {['UpdateDevice'] = dz_phase..'|0|'.. phase}
			 indexArray=indexArray+1
		  end
		  
voir_les_logs("--- --- --- Visibilité : "..visibilite,debugging)
		  if dz_visibilite ~= nil and visibilite ~= nil then -- Mise à jour du devise visibilité si il existe
			 visibilite = string.gsub (visibilite, " %%", "")	-- supprime le caractere % afin de ne recuperer que la valeur	  
			 commandArray[indexArray] = {['UpdateDevice'] = dz_visibilite..'|0|'.. visibilite}
			 indexArray=indexArray+1
		  end
		  
voir_les_logs("--- --- --- Distance Lune - Terre : "..distance,debugging)
		  if dz_distance ~= nil and distance ~= nil then -- Mise à jour du devise distance si il existe
			 commandArray[indexArray] = {['UpdateDevice'] = dz_distance..'|0|'.. distance}
			 indexArray=indexArray+1
		  end

voir_les_logs("--- --- --- Age de la Lune : "..age,debugging)
		  if dz_age ~= nil and age ~= nil then -- Mise à jour du devise age si il existe
			 commandArray[indexArray] = {['UpdateDevice'] = dz_age..'|0|'.. age}
			 indexArray=indexArray+1
		  end
voir_les_logs("--- --- --- Prochaine eclipse lunaire : "..eclipse,debugging)
		  if dz_eclipse ~= nil and eclipse ~= nil then -- Mise à jour du devise eclipse si il existe
			 commandArray[indexArray] = {['UpdateDevice'] = dz_eclipse..'|0|'.. eclipse}
			 indexArray=indexArray+1
		  end
voir_les_logs("--- --- --- Trajectoire : "..trajectoire,debugging)
		  if dz_trajectoire ~= nil and trajectoire ~= nil then -- Mise à jour du devise trajectoire si il existe
			 commandArray[indexArray] = {['UpdateDevice'] = dz_trajectoire..'|0|'.. trajectoire}
			 indexArray=indexArray+1
		  end
voir_les_logs("--- --- --- Constellation : "..constellation,debugging)
		  if dz_constellation ~= nil and constellation ~= nil then -- Mise à jour du devise constellation si il existe
			 commandArray[indexArray] = {['UpdateDevice'] = dz_constellation..'|0|'.. constellation}
			 indexArray=indexArray+1
		  end
voir_les_logs("--- --- --- Prochain périgée lunaire : "..perigee,debugging)
		  if dz_perigee ~= nil and perigee ~= nil then -- Mise à jour du devise perigee si il existe
			 commandArray[indexArray] = {['UpdateDevice'] = dz_perigee..'|0|'.. perigee}
			 indexArray=indexArray+1
		  end
voir_les_logs("--- --- --- Prochain apogée lunaire : "..apogee,debugging)
		  if dz_apogee ~= nil and apogee ~= nil then -- Mise à jour du devise apogee si il existe
			 commandArray[indexArray] = {['UpdateDevice'] = dz_apogee..'|0|'.. apogee}
			 indexArray=indexArray+1
		  end
voir_les_logs("--- --- --- Prochain noeud lunaire : "..noeud,debugging)
		  if dz_noeud ~= nil and noeud ~= nil then -- Mise à jour du devise noeud si il existe
			 commandArray[indexArray] = {['UpdateDevice'] = dz_noeud..'|0|'.. noeud}
			 indexArray=indexArray+1
		  end

end	
end -- if time
return commandArray

Re: LUA : Informations lunaire

Publié : 30 juin 2016, 22:38
par Neutrino
Tu deviens le roi du parsing ! :D
Merci pour ce script, belle réalisation !

Re: LUA : Informations lunaire

Publié : 30 juin 2016, 22:58
par papoo
Une fois que l'on a compris le truc ça devient super simple :D
Merci

Re: LUA : Informations lunaire

Publié : 02 juil. 2016, 17:57
par djam
Salut
Merci pour ce script . Pour les observations de la lune c"est parfait !

Je rencontre un problème pour remonter les infos sur les "devices". Avant de renseigner les ID tout va bien, je récupère bien les infos que je peux voir dans les logs .

Par contre après avoir renseigner les ID, j’obtiens un message d'erreur :
capt.PNG
capt.PNG (5.18 Kio) Consulté 13485 fois
Je doit louper une action ... :roll:

Re: LUA : Informations lunaire

Publié : 02 juil. 2016, 18:14
par papoo
la ligne 31

Code : Tout sélectionner

local indexArray=0
manquait
désolé
je viens de mettre à jour le script du premier post

Re: LUA : Informations lunaire

Publié : 02 juil. 2016, 18:22
par djam
;)
Parfait
Encore merci Papoo

Re: LUA : Informations lunaire

Publié : 04 juil. 2016, 01:15
par Pyrrhus
Merci beaucoup ! je teste dès que j'ai un peu de temps
En ce qui concerne le fichier horoscope.xml, qu'est-ce que je dois changer pour qu'il s'écrive dans /mnt/mon_nas/dossier au lieu de mon repertoire /home/pi ?

Re: LUA : Informations lunaire

Publié : 04 juil. 2016, 21:42
par papoo
modifier la ligne 60

Code : Tout sélectionner

      local fname ="horoscope.xml"
par

Code : Tout sélectionner

      local fname ="/mnt/mon_nas/dossier/horoscope.xml"

Re: LUA : Informations lunaire

Publié : 05 juil. 2016, 00:26
par Pyrrhus
Merci !

Re: LUA : Informations lunaire

Publié : 04 déc. 2016, 00:38
par ZIONIII
Voici ma modification, l'ensemble des données dans 1 seul device txt.
Et encore un grand Merci à papoo pour son travail et partage ;) .

Code : Tout sélectionner

--[[
name : script_time_phase_lunaire.lua
auteur : papoo
Modification : ZIONIII
version : 1.11 Bis (Tout dans 1 device txt)
Mise à jour : 03/12/2016
date : 26/06/2016
Principe :
 Ce script a pour but de remonter toutes ou partie des informations du site http://www.calendrier-lunaire.net/ sur domoticz 
 Les informations disponibles : Nom de la phase, Visibilité, Distance Lune Terre, l'age de la lune, prochaine éclipse lunaire, 
 Trajectoire, Constellation, Prochain périgée lunaire, Prochain apogée lunaire, Prochain noeud lunaire
 
]]--
-- ========================================================================
-- Variables à éditer
-- ========================================================================
local idx = 393                 -- renseigner l'id du device (texte)

local debugging = false  		-- true pour voir les logs dans la console log Dz ou false pour ne pas les voir
-- ========================================================================
-- Fin Variables à éditer
-- ========================================================================

--======================================================================== 
--Fonctions
--========================================================================
function voir_les_logs (s)
    if (debugging) then 
		if s ~= nil then
        print ("<font color='#f3031d'>".. s .."</font>");
		else
		print ("<font color='#f3031d'>aucune valeur affichable</font>");
		end
    end
end	
 
--======================================================================== 
-- Fin Fonctions
--========================================================================
 
commandArray = {}
time = os.date("*t")
 
if (time.hour == 00 and time.min == 20) then -- tout les matins à 00h20
--if (time.min == 20 and ((time.hour == 7) or (time.hour == 13) or (time.hour == 20))) then -- 3 éxecutions du script par jour à 7H20, 13h20 et 18H20
-- if time.hour%2 == 0 then -- toutes les deux heures
-- if (time.hour%1 == 0 and time.min == 10)  then -- Toutes les heures et 10 minutes
-- if time.min%2 == 0 then -- Toutes les 2 minutes
print('script_time_phase_lunaire.lua')
 
		local fname ="horoscope.xml"
		os.execute("wget -q -O " .. fname .. " http://www.calendrier-lunaire.net/")
		
				local f = io.open(fname, "r")
 
			 if f == nil then
			 print("Error opening file '" .. fname .. "'.")
			 os.exit(1)
			 end
 
		local testHtml = f:read("*all")
					f:close()
for instance in testHtml:gmatch("<body>(.-)</body>") do
local phase=instance:match('<strong>Nom de la phase : </strong>(.-)</li>')
local visibilite=instance:match('<strong>Visibilité : </strong>(.-)</li>')
local distance=instance:match('Terre : </strong>(.-)</li>')
local age=instance:match('<strong>Age de la Lune : </strong> (.-)</li>')
local eclipse=instance:match('lunaire: </strong> (.-)</a></li>')
local trajectoire=instance:match('Trajectoire : </strong>(.-)<img')
local constellation=instance:match('</span>Constellation : </strong>(.-)<img')
local perigee=instance:match('Prochain périgée lunaire : </strong>(.-)<img')
local apogee=instance:match('Prochain apogée lunaire : </strong>(.-)<img')
local noeud=instance:match('Prochain noeud lunaire : </strong>(.-)<img')
 
-- logs
voir_les_logs("--- --- --- Nom de la phase : "..phase,debugging)
voir_les_logs("--- --- --- Visibilité : "..visibilite,debugging)
voir_les_logs("--- --- --- Distance Lune - Terre : "..distance,debugging)
voir_les_logs("--- --- --- Age de la Lune : "..age,debugging)
voir_les_logs("--- --- --- Prochaine eclipse lunaire : "..eclipse,debugging)
voir_les_logs("--- --- --- Trajectoire : "..trajectoire,debugging)
voir_les_logs("--- --- --- Constellation : "..constellation,debugging)
voir_les_logs("--- --- --- Prochain périgée lunaire : "..perigee,debugging)
voir_les_logs("--- --- --- Prochain apogée lunaire : "..apogee,debugging)
voir_les_logs("--- --- --- Prochain noeud lunaire : "..noeud,debugging)

-- textDeviceIdx
visibilite = string.gsub (visibilite, " %%", "")	-- supprime le caractere % afin de ne recuperer que la valeur
texte = phase
        .." ; Visi. "..visibilite
        .." ; Dist. "..distance
        .." ; Age: "..age
        .." ; Ecli. "..eclipse
        .." ; Traj. "..trajectoire
        .." ; Const. "..constellation
        .." ; Péri. "..perigee
        .." ; Apo. "..apogee
        .." ; noeud "..noeud
   end
   commandArray[idx]={['UpdateDevice'] = idx..'|0|' .. texte}
  
end -- if time
return commandArray