[LUA] Prochain passage station ISS

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] Prochain passage station ISS

Message par papoo »

bonjour,
Un ami m'a récemment fait découvrir que l'on pouvez observer à l'oeil nu le passage de la station ISS dans le ciel de nos régions.
Cette station spatiale, qui orbite à 415 kilomètres d'altitude, se présente depuis le sol sous la forme d'un point brillant comme une étoile très lumineuse, se déplaçant en ligne droite. Le ciel par chez moi est truffé d'avions, mais contrairement à ceux-ci, la Station spatiale ne clignote pas.
Elle tourne à la vitesse de 8km/s et fait quinze fois le tour de la planète par jour. une API permet de connaitre ces passages, ainsi que la durée de visibilité, pour une géolocalisation donnée.
voila donc un script lua permettant de connaitre le prochain passage pour votre lieu de résidence.
2 options dans ce script : connaitre l'ensemble des passages, ou seulement ceux de nuit.
pour moi le prochain passage visible c'est :
iss.png
iss.png (13.1 Kio) Consulté 11522 fois

Code : Tout sélectionner

--[[ 
script_time_iss_localisation.lua
Téléchargez JSON.lua : http://regex.info/blog/lua/json et placez le dans le répertoire de vos scripts LUA
  
auteur : papoo
version : 1.20
maj : 17/08/2016
date : 06/08/2016
principe : Récuperer via l'API http://api.open-notify.org/ les informations du prochain passage de la station ISS prés de chez vous
ainsi que le temps où elle reste visible.
La station ISS se déplace d'OUEST en EST et fait un tour complet de la terre en 90 mn. 
il est possible d'apercevoir l'ISS à l'oeil nu, la nuit par temps clair,
ses panneaux solaires d'une taille avoisinant celle d'un terrain de foot réfléchissant la lumière du soleil.
Le script récupère l'heure de levé et couché du soleil disponible dans dz et n'affiche que les passages de nuits avec la variable periode déclarée en "night"
URL post : http://easydomoticz.com/forum/viewtopic.php?f=17&t=2310#p20936
]]--
--------------------------------------------
------------ Variables à éditer ------------
-------------------------------------------- 

local debugging = true  	-- true pour voir les logs dans la console log Dz ou false pour ne pas les voir
local iss_device = 736  	-- renseigner l'id du device text prochain passage ISS associé si souhaité, sinon nil
local iss_visibility = 737  -- renseigner l'id du device text durée de visibilité ISS associé si souhaité, sinon nil
local latitude = "45.8" 	-- latitude du logement
local longitude = "1.3" 	-- longitude du logement
local altitude = "357"		-- altitude du logement
local periode = "night"		-- all : l'ensemble des passages même en journée, night : seulement les passages après le couché et avant le levé du soleil
--------------------------------------------
----------- Fin variables à éditer ---------
-------------------------------------------- 
local indexArray=0
local passage = nil
print('script_time_iss_localisation.lua')
--------------------------------------------
---------------- 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	

function pairsByKeys (t, f)
  local a = {}
	for n in pairs(t) do table.insert(a, n) end
	  table.sort(a, f)
	  local i = 0      -- iterator variable
	  local iter = function ()   -- iterator function
		i = i + 1
		if a[i] == nil then return nil
		else return a[i], t[a[i]]
		end
	end
  return iter
end

--------------------------------------------
-------------- Fin Fonctions ---------------
-------------------------------------------- 
commandArray = {}
now = os.date("*t")
--if (now.min == 10 and ((now.hour == 8) or (now.hour == 15) or (now.hour == 20))) then -- 3 éxecutions du script par jour à 8H10, 15h10 et 20H10
--if (now.min == 10 and now.hour == 20) then -- 1 éxecution du script par jour à 21H10
if now.min % 15 == 0 then  -- execution toutes les 15 minutes
	if periode ~= tostring("night") then
	passage = "1"
	else
	passage = "8"
	end
	if latitude ~= nil and longitude ~= nil and altitude ~= nil then

			 json = (loadfile "/home/pi/domoticz/scripts/lua/JSON.lua")()  -- For Linux
		  -- json = (loadfile "D:\\Domoticz\\scripts\\lua\\json.lua")()  -- For Windows
		  -- json = (loadfile "/volume1/@appstore/domoticz/var/scripts/lua/JSON.lua")()  -- For Synology

		local config=assert(io.popen('curl --connect-timeout 10 "http://api.open-notify.org/iss-pass.json?lat='.. latitude ..'&lon='.. longitude ..'&alt='.. altitude ..'&n='.. passage ..'"'))
		local location = config:read('*all')
		local jsonLocation = json:decode(location)
		config:close()

				local iss_Presence = nil
				local iss_duration = nil
	
		
		if jsonLocation ~= nil then 
			   for i, resultat in pairs(jsonLocation.response) do
				iss_Presence=resultat.risetime
				iss_duration = resultat.duration
					local iss_time = os.date("%H:%M", iss_Presence)
				iss_day = os.date("%d/%m/%Y", iss_Presence)
				iss_TimeInMinutes = (tonumber(os.date("%H", iss_Presence)) * 60) + tonumber(os.date("%M", iss_Presence)) -- conversion timestamp en minutes
				voir_les_logs("Timestamp Prochain passage ISS = ".. iss_Presence  .."; le ".. iss_day ..", Visibilite ISS = ".. iss_duration .."s",debugging)
			if periode ~= tostring("night") then
					voir_les_logs("Prochain passage ISS en minutes = ".. iss_TimeInMinutes,debugging)
					voir_les_logs("Visibilite ISS = ".. iss_duration .."s",debugging)					
						if iss_device ~= nil then
							commandArray[indexArray] = {['UpdateDevice'] = iss_device ..'|0|'.. tostring(iss_time)}
							indexArray=indexArray+1
						end		
						if iss_visibility ~= nil then
							commandArray[indexArray] = {['UpdateDevice'] = iss_visibility ..'|0|'.. tostring(iss_duration ..' secondes')}
							indexArray=indexArray+1
						end			
			else				
					if  iss_TimeInMinutes > timeofday['SunsetInMinutes']  or (iss_TimeInMinutes < timeofday['SunriseInMinutes'] and  iss_TimeInMinutes < timeofday['SunsetInMinutes'] )then  -- ISS non visible la journée, test si heure de passage aprés le coucher et avant le levé du soleil

					voir_les_logs("heure leve du soleil en minutes = ".. timeofday['SunriseInMinutes'],debugging)					
					voir_les_logs("Prochain passage ISS en minutes = ".. iss_TimeInMinutes,debugging)
					voir_les_logs("heure couche du soleil en minutes = ".. timeofday['SunsetInMinutes'],debugging)
					voir_les_logs("Prochain passage ISS = ".. iss_time,debugging)
					voir_les_logs("Visibilite ISS = ".. iss_duration .."s",debugging)					
						if iss_device ~= nil then
							commandArray[indexArray] = {['UpdateDevice'] = iss_device ..'|0|'.. tostring(iss_time) ..' le '..tostring(iss_day)}
							indexArray=indexArray+1
						end		
						if iss_visibility ~= nil then
							commandArray[indexArray] = {['UpdateDevice'] = iss_visibility ..'|0|'.. tostring(iss_duration ..' secondes')}
							indexArray=indexArray+1
						end	
					break 	
					else
					voir_les_logs("le prochain passage ISS = ".. iss_TimeInMinutes ..", sunrise (leve) : "..timeofday['SunriseInMinutes']..", sunset (couche) : "..timeofday['SunsetInMinutes'],debugging)
					end	
				end
			end
				
		else
					voir_les_logs("erreur lors de la recuperation des donnees de l'API",debugging)		
		end	
	else
					voir_les_logs("Il manque la latitude, la longitude ou l'altitude de votre lieu de residence",debugging)
	end
end


return commandArray
Dernière modification par papoo le 17 août 2016, 21:20, modifié 2 fois.
domoticz beta/RaspBerry PI3 stretch
https://pon.fr github
patrice
Messages : 1720
Inscription : 22 sept. 2014, 21:51

Re: LUA : Prochain passage station ISS

Message par patrice »

Bonjour
Ah oui bien vu , je me contentais de l'appli sur mon smartphone, mais la en effet c'est plutot pas mal de centraliser ça avec une meteo ou couverture nuagueuse
Merci pour l'idée et pour le script
Raspberry pi 3, Dongle RfxCom et Zigate +, plugin de pipiche, Volets Roulants profalux, contrôle d'éclairage, détecteurs de présence, alarme incendie, pilotage livebox ...
Objectif : WAF > 1
vil1driver
Messages : 5661
Inscription : 30 janv. 2015, 11:07
Localisation : Rennes (35)

Re: LUA : Prochain passage station ISS

Message par vil1driver »

Salut,

+1

Encore un joli script merci.
MAJ = VIDER LE CACHE(<-Clicable)
/!\Les mises à jour de Domoticz sont souvent sources de difficultés, ne sautez pas dessus
modules.lua

Un ex domoticzien
Fredok
Messages : 90
Inscription : 12 août 2016, 15:04

Re: LUA : Prochain passage station ISS

Message par Fredok »

Très bon j'adore ...
Opi
RFXCOM
RFLINK 433 & 315
Mysensors
Wifi & Mqtt
EspEasy - Tasmota
Zigate+
deennoo
Messages : 4036
Inscription : 25 janv. 2015, 02:00

Re: LUA : Prochain passage station ISS

Message par deennoo »

Merci j'ai pu la voir pour la première fois hier soir au soleil rasant, s'en ai suivit une soirée transat étoiles.
De quoi se faire Plaisir et essayer d'aider...
http://www.domo-attitude.fr
glybra
Messages : 95
Inscription : 05 avr. 2015, 12:58

Re: LUA : Prochain passage station ISS

Message par glybra »

bonjour a tous,
pour moi le script ne fonctionne pas..
voici le message d erreur dans mes logs..

2016-08-15 14:00:11.183 Error: EventSystem: in /home/pi/domoticz/scripts/lua/script_time_iss_localisation.lua: ...pi/domoticz/scripts/lua/script_time_iss_localisation.lua:109: attempt to call a nil value

Si quelqu un peut m'aider, merci d'avance
papoo
Messages : 2029
Inscription : 10 janv. 2016, 11:29
Localisation : Limoges (87)
Contact :

Re: LUA : Prochain passage station ISS

Message par papoo »

as tu téléchargé le fichier JSON.lua comme décrit au début du script?
Téléchargez JSON.lua : http://regex.info/blog/lua/json et placez le dans le répertoire de vos scripts LUA
ensuite lignes 109 à 111 du script tu peux décommenter (en enlevant les -- devant) la ligne qui correspond à ton installation
pense à commenter la ligne 109 si tu décommente la 110 ou la 111

Code : Tout sélectionner

			 json = (loadfile "/home/pi/domoticz/scripts/lua/JSON.lua")()  -- For Linux
		  -- json = (loadfile "D:\\Domoticz\\scripts\\lua\\json.lua")()  -- For Windows
		  -- json = (loadfile "/volume1/@appstore/domoticz/var/scripts/lua/JSON.lua")()  -- For Synology
domoticz beta/RaspBerry PI3 stretch
https://pon.fr github
glybra
Messages : 95
Inscription : 05 avr. 2015, 12:58

Re: LUA : Prochain passage station ISS

Message par glybra »

merci papoo,
mais toujours la meme erreur !!
papoo
Messages : 2029
Inscription : 10 janv. 2016, 11:29
Localisation : Limoges (87)
Contact :

Re: LUA : Prochain passage station ISS

Message par papoo »

Il faudrait nous en dire un petit peu plus sur ton problème, sur ta configuration, ...
tu utilise la console lua (réglages=>événements) pour ton script lua ou un fichier dans le répertoire scripts?
tu es sous linux/raspberry, windows, synology,...?
As tu nommé ton fichier en le commençant par script_time => script_time_NOM_DE_TON_SCRIPT.lua? est il en encodé en UTF-8 sans BOM?
As tu téléchargé et placé dans le répertoire scripts (sous raspberry => ~/domoticz/scripts/lua/) le fichier JSON.lua à télécharger ici => http://regex.info/blog/lua/json
en mettant la variable debugging à true
debugging = true
en début de script, as tu des erreurs dans ton fichier log ?
Image
Avec éventuellement une capture d'écran de l'erreur dans les logs
domoticz beta/RaspBerry PI3 stretch
https://pon.fr github
glybra
Messages : 95
Inscription : 05 avr. 2015, 12:58

Re: LUA : Prochain passage station ISS

Message par glybra »

voici mes logs


2016-08-15 17:45:00.508 LUA: --- --- --- unite distance= mi, unite pression = in, unite vitesse = mph, unite temperature = F
2016-08-15 17:45:00.508 LUA: --- --- --- Ville = Saint-Malo, Pays = France, Region = Brittany
2016-08-15 17:45:00.508 LUA: --- --- --- Temperature Ressentie = 21.1, direction du vent = 20, vitesse du vent = 29
2016-08-15 17:45:00.508 LUA: --- --- --- humidite = 79, pression = 1017.0
2016-08-15 17:45:00.508 LUA: --- --- --- lever soleil =7:3 am, coucher soleil = 9:20 pm
2016-08-15 17:45:00.508 LUA: --- --- --- Temperature = 21.7
2016-08-15 17:45:00.509 EventSystem: Script event triggered: /home/pi/domoticz/scripts/lua/script_time_yahoo.lua
2016-08-15 17:45:00.706 LUA: (PING) ping success note2
2016-08-15 17:45:01.713 LUA: (PING) ping fail NAS
2016-08-15 17:45:01.762 LUA: (PING) ping fail
2016-08-15 17:45:01.851 LUA: script_time_iss_localisation.lua
2016-08-15 17:45:01.851 Error: EventSystem: in /home/pi/domoticz/scripts/lua/script_time_iss_localisation.lua: ...pi/domoticz/scripts/lua/script_time_iss_localisation.lua:109: attempt to call a nil value
2016-08-15 17:45:02.575 Hardware Monitor: Fetching data (System sensors)
2016-08-15 17:45:32.599 Hardware Monitor: Fetching data (System sensors)
2016-08-15 17:45:32.737 (rfxtrx) Temp + Humidity (leo)
2016-08-15 17:45:40.627 (meteo Under) Temp + Humidity + Baro (aeroport)
2016-08-15 17:45:40.630 (meteo Under) Wind (aeoroport)
2016-08-15 17:45:40.632 (meteo Under) Rain (aeroport)
2016-08-15 17:45:52.423 (rfxtrx) Energy (Unknown)
2016-08-15 17:45:54.901 (rfxtrx) Temp + Humidity (magali)
2016-08-15 17:46:00.694 LUA: (PING) ping success note2
2016-08-15 17:46:01.707 LUA: (PING) ping fail NAS
2016-08-15 17:46:01.761 LUA: (PING) ping fail
2016-08-15 17:46:01.773 LUA: script_time_iss_localisation.lua
2016-08-15 17:46:02.636 Hardware Monitor: Fetching data (System sensors)
2016-08-15 17:46:32.660 Hardware Monitor: Fetching data (System sensors)
2016-08-15 17:46:33.738 (rfxtrx) Temp + Humidity (leo)
2016-08-15 17:46:53.900 (rfxtrx) Temp + Humidity (magali)
2016-08-15 17:47:00.523 LUA: (PING) ping success note2
2016-08-15 17:47:01.537 LUA: (PING) ping fail NAS
2016-08-15 17:47:01.593 LUA: (PING) ping fail
2016-08-15 17:47:01.617 LUA: script_time_iss_localisation.lua
2016-08-15 17:47:02.698 Hardware Monitor: Fetching data (System sensors)
2016-08-15 17:47:32.721 Hardware Monitor: Fetching data (System sensors)
2016-08-15 17:47:34.740 (rfxtrx) Temp + Humidity (leo)
2016-08-15 17:47:52.901 (rfxtrx) Temp + Humidity (magali)
2016-08-15 17:48:01.184 LUA: (PING) ping fail NAS
2016-08-15 17:48:01.242 LUA: (PING) ping fail
2016-08-15 17:48:01.342 LUA: (PING) ping success note2
2016-08-15 17:48:01.367 LUA: script_time_iss_localisation.lua
2016-08-15 17:48:02.760 Hardware Monitor: Fetching data (System sensors)
2016-08-15 17:48:32.784 Hardware Monitor: Fetching data (System sensors)
2016-08-15 17:48:35.742 (rfxtrx) Temp + Humidity (leo)
2016-08-15 17:48:51.901 (rfxtrx) Temp + Humidity (magali)
2016-08-15 17:48:52.426 (rfxtrx) Energy (Unknown)
2016-08-15 17:49:01.438 LUA: (PING) ping fail NAS
2016-08-15 17:49:01.565 LUA: (PING) ping success note2
2016-08-15 17:49:01.620 LUA: (PING) ping fail
2016-08-15 17:49:01.646 LUA: script_time_iss_localisation.lua
2016-08-15 17:49:02.822 Hardware Monitor: Fetching data (System sensors)
2016-08-15 17:49:32.846 Hardware Monitor: Fetching data (System sensors)
2016-08-15 17:49:36.742 (rfxtrx) Temp + Humidity (leo)
2016-08-15 17:49:50.901 (rfxtrx) Temp + Humidity (magali)
2016-08-15 17:50:00.195 LUA: script_time_yahoo.lua
2016-08-15 17:50:01.123 LUA: --- --- --- unite distance= mi, unite pression = in, unite vitesse = mph, unite temperature = F
2016-08-15 17:50:01.123 LUA: --- --- --- Ville = Saint-Malo, Pays = France, Region = Brittany
2016-08-15 17:50:01.123 LUA: --- --- --- Temperature Ressentie = 21.1, direction du vent = 20, vitesse du vent = 29
2016-08-15 17:50:01.123 LUA: --- --- --- humidite = 79, pression = 1017.0
2016-08-15 17:50:01.123 LUA: --- --- --- lever soleil =7:3 am, coucher soleil = 9:20 pm
2016-08-15 17:50:01.123 LUA: --- --- --- Temperature = 21.7
2016-08-15 17:50:01.173 EventSystem: Script event triggered: /home/pi/domoticz/scripts/lua/script_time_yahoo.lua
2016-08-15 17:50:02.186 LUA: (PING) ping fail NAS
2016-08-15 17:50:02.379 LUA: (PING) ping success note2
2016-08-15 17:50:02.427 LUA: (PING) ping fail
2016-08-15 17:50:02.440 LUA: script_time_iss_localisation.lua
2016-08-15 17:50:02.884 Hardware Monitor: Fetching data (System sensors)
2016-08-15 17:50:32.908 Hardware Monitor: Fetching data (System sensors)
2016-08-15 17:50:37.744 (rfxtrx) Temp + Humidity (leo)
2016-08-15 17:50:49.901 (rfxtrx) Temp + Humidity (magali)
2016-08-15 17:50:52.425 (rfxtrx) Energy (Unknown)
2016-08-15 17:51:01.498 LUA: (PING) ping fail NAS
2016-08-15 17:51:01.555 LUA: (PING) ping fail
2016-08-15 17:51:01.669 LUA: (PING) ping success note2
2016-08-15 17:51:01.695 LUA: script_time_iss_localisation.lua


je suis sur un pi3.domoticz version beta
Répondre