[LUA] Informations lunaire

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.
papoo
Messages : 2029
Inscription : 10 janv. 2016, 11:29
Localisation : Limoges (87)
Contact :

[LUA] Informations lunaire

Message 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é 7963 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
Dernière modification par papoo le 07 juin 2019, 21:24, modifié 4 fois.
domoticz beta/RaspBerry PI3 stretch
https://pon.fr github
Neutrino
Messages : 2662
Inscription : 10 juil. 2015, 15:42
Localisation : Les Herbiers(85)

Re: LUA : Informations lunaire

Message par Neutrino »

Tu deviens le roi du parsing ! :D
Merci pour ce script, belle réalisation !
Ma maison à plein d'IP ! :mrgreen:
SAV Bonjour. Vous avez vidé le cache ?
papoo
Messages : 2029
Inscription : 10 janv. 2016, 11:29
Localisation : Limoges (87)
Contact :

Re: LUA : Informations lunaire

Message par papoo »

Une fois que l'on a compris le truc ça devient super simple :D
Merci
domoticz beta/RaspBerry PI3 stretch
https://pon.fr github
djam
Messages : 51
Inscription : 09 déc. 2015, 19:33

Re: LUA : Informations lunaire

Message 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é 13487 fois
Je doit louper une action ... :roll:
Z600 Ubuntu server --> Domoticz V3.8153 // Raspberry Pi --> Openelec
RFLink --> HomeEasy // Mysensors 2.0 --> Arduino Nano (x5) : T°C/H, Mouvement,Lux, Gaz
LMS --> "Squeezbox" (x5) // MiLight
Google HOME
papoo
Messages : 2029
Inscription : 10 janv. 2016, 11:29
Localisation : Limoges (87)
Contact :

Re: LUA : Informations lunaire

Message 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
domoticz beta/RaspBerry PI3 stretch
https://pon.fr github
djam
Messages : 51
Inscription : 09 déc. 2015, 19:33

Re: LUA : Informations lunaire

Message par djam »

;)
Parfait
Encore merci Papoo
Z600 Ubuntu server --> Domoticz V3.8153 // Raspberry Pi --> Openelec
RFLink --> HomeEasy // Mysensors 2.0 --> Arduino Nano (x5) : T°C/H, Mouvement,Lux, Gaz
LMS --> "Squeezbox" (x5) // MiLight
Google HOME
Pyrrhus
Messages : 130
Inscription : 11 juin 2015, 14:57

Re: LUA : Informations lunaire

Message 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 ?
papoo
Messages : 2029
Inscription : 10 janv. 2016, 11:29
Localisation : Limoges (87)
Contact :

Re: LUA : Informations lunaire

Message 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"
domoticz beta/RaspBerry PI3 stretch
https://pon.fr github
Pyrrhus
Messages : 130
Inscription : 11 juin 2015, 14:57

Re: LUA : Informations lunaire

Message par Pyrrhus »

Merci !
ZIONIII
Messages : 85
Inscription : 07 avr. 2016, 19:18

Re: LUA : Informations lunaire

Message 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
Rpbi2: Stretch Lite + Domoticz bêta + MyDomoAtHome + Monit
Passerelles: RFLINK (433Mhz;2,4Ghz;Wifi) + RFXCON 433Mhz + Razberry 1(Z-WAVE)
Milight,Sonde de température DIY, QUBINO - Fil Pilote ...
Répondre