Suivi en direct de la Station spatiale internationale

Lors de la rencontre des utilisateurs de Python Boston en octobre , nous avons réalisé ce projet simple mais amusant. Comme il s'agissait d'une rencontre axée sur le logiciel et non sur le matériel, mon objectif était de lire des données en temps réel déjà disponibles et de les analyser grâce au Ubidots .

J'ai eu la chance de découvrir ce service , rendu possible par Nathan Bergey, qui met à jour la position de l'ISS en temps réel. En consultant ces données en direct, nous pouvons mesurer la distance entre l'ISS et Boston, puis publier l'ensemble des données sur Ubidots

Une fois les données disponibles, une alerte peut être configurée pour se déclencher dès que la station se trouve à proximité :

Et pourquoi ne pas déclencher une URL HTTP qui allume une lumière à chaque fois que la station passe au-dessus de votre tête ?

Le code source est présenté ci-dessous. Vous pouvez y insérer votre propre clé API et identifiant de variable, modifier les coordonnées pour qu'elles correspondent à votre emplacement, et le système devrait alors fonctionner comme indiqué ci-dessus. Pour savoir comment envoyer un GeoPoint à l' API Ubidots consultez notre documentation .

Remarque : Ce script se contente de suivre la position de l’ISS et d’utiliser une formule standard pour calculer sa distance à un point précis sur Terre. Il ne tient pas compte des réelles possibilités d’observation, car celles-ci dépendent de nombreux facteurs, outre la proximité (par exemple, l’heure de la journée).

Vous avez une idée de projet pour suivre quelque chose en temps réel ?

Cliquez ici pour commencer

from ubidots import ApiClient import requests,time from math import * # Connexion à l'API Ubidots api = ApiClient('a21ebaf64e14d195c0044fcxxb9f6dab9d653af3') # Instanciation de la variable locale depuis Ubidots local_distance = api.get_variable('54ca7a2176254xxxfd4b9493f') def main(): while(1): # Récupération de la position actuelle de l'ISS req_iss = requests.get(' http://api.open-notify.org/iss-now.json ') dict = req_iss.json() latlong = dict['iss_position']; lat1 = latlong['latitude'] lon1 = latlong['longitude'] # Calcul de la distance au domicile lat2 = 50.085305 lon2 = -5.315853 d = getDistance(lat1,lon1,lat2,lon2) d = round(d,1) # Envoi de la valeur à Ubidots local_distance.save_value({'value':d,'context':{'lat':lat1,'lng':lon1}}) time.sleep(1) def getDistance(lat1,lon1,lat2,lon2): R = 6371; # Rayon de la Terre en km dLat = deg2rad(lat2-lat1); # deg2rad ci-dessous dLon = deg2rad(lon2-lon1); a = sin(dLat/2) * sin(dLat/2) + cos(deg2rad(lat1)) * cos(deg2rad(lat2)) * sin(dLon/2) * sin(dLon/2) c = 2 * atan2(sqrt(a), sqrt(1-a)); d = R * c ; # Distance en km retour d; def deg2rad(deg) : renvoie deg * (pi/180) si nom == ' main ' : main()