En este tutorial aprenderemos a rastrear la ubicación GPS de la Estación Espacial Internacional (ISS) utilizando Python y Ubidots. Estaremos consultando este servicio hecho posible por Nathan Bergey, que actualizará la nube de Ubidots con la posición de la ISS en tiempo real. Luego, con los datos de posición en bruto proporcionados, exploraremos cómo medir distancias y triangular ubicaciones con el software en la nube de Ubidots.
¡Envía datos a la nube de Ubidots y crea un mapa en tu Dashboard para rastrear la Estación Espacial Internacional en tiempo real!
Desde el Terminal de tu Computadora
Requests: HTTP para Humanos
Requests es una biblioteca popular de Python que simplifica la realización de solicitudes HTTP. Para comenzar, instalaremos los paquetes de Python usando pip:
$ pip install requests
Enviando datos a Ubidots para visualización
Crea y ejecuta un script de Python en el terminal de tu computadora:
$ nano iss_tracking_ubidots.py
Luego copia y pega el siguiente código en tu terminal; asignando tu TOKEN de Ubidots y las coordenadas de ubicación donde se indica en el código. Para más información, consulta la Referencia de la API REST de Ubidots.
NOTA: Este script solo rastrea la posición de la ISS y utiliza una fórmula estándar para calcular su distancia a un punto específico en la tierra. No refleja oportunidades de avistamiento reales, ya que esto depende más de variables climáticas y de tiempo que simplemente de la proximidad (es decir, ubicación relativa a ti).
import requestsimport timefrom math import *TOKEN = 'xxxxxxxx' # Asigna tu TOKEN de UbidotsDEVICE_LABEL = 'iss' # Asigna la etiqueta del dispositivo deseadaVARIABLE_LABEL = "distance"BASE_URL = 'http://industrial.api.ubidots.com/api/v1.6/devices/'# Asigna tus coordenadas de hogarLAT_HOME = 42.361145LNG_HOME = -71.057083def get_iss_position(): # Obtener la posición actual de la ISS req_iss = requests.get('http://api.open-notify.org/iss-now.json') dict = req_iss.json() lat_lng = dict['iss_position'] # guardar la posición actual de la ISS en nuevas variables lat_iss = float(lat_lng['latitude']) lng_iss = float(lat_lng['longitude']) return lat_iss, lng_issdef deg2rad(deg): return deg * (pi/180)def getDistance(lat_iss, lng_iss, lat_home, lng_home): R = 6371 # Radio de la tierra en km dLat = deg2rad(lat_home-lat_iss) # deg2rad abajo dLng = deg2rad(lng_home-lng_iss) a = sin(dLat/2) * sin(dLat/2) + cos(deg2rad(lat_iss)) * \ cos(deg2rad(lat_home)) * sin(dLng/2) * sin(dLng/2) c = 2 * atan2(sqrt(a), sqrt(1-a)) d = R * c # Distancia en km a Casa return ddef build_payload(variable_label, value, lat_iss, lng_iss): # Construir la carga útil a enviar payload = {variable_label: value, "position": { "value": 1, "context": {"lat": lat_iss, "lng": lng_iss}}} return payloaddef send_ubidots(device_label, payload): # Hacer la solicitud HTTP a Ubidots url = "{0}{1}/?token={2}".format(BASE_URL, device_label, TOKEN) status = 400 attempts = 0 while status >= 400 and attempts <= 5: req = requests.post(url, json=payload) status = req.status_code attempts += 1 response = req.json() return responsedef main(device_label, variable_label, lat_home, lng_home): # Obtener la posición actual de la ISS lat_iss, lng_iss = get_iss_position() # Calcular la distancia en KM a Casa distance = getDistance(lat_iss, lng_iss, lat_home, lng_home) distance = round(distance, 1) # Construir la carga útil a enviar payload = build_payload(variable_label, distance, lat_iss, lng_iss) # Enviar la solicitud HTTP a Ubidots response = send_ubidots(device_label, payload) return responseif __name__ == '__main__': while True: try: response = main(DEVICE_LABEL, VARIABLE_LABEL, LAT_HOME, LNG_HOME) print("respuesta json del servidor: \n{0}".format(response)) except: pass time.sleep(1)
Una vez que el código se haya completado con tu TOKEN de Ubidots y coordenadas, presiona CONTROL + O y ENTER para guardar. Para salir del editor de Python, presiona CONTROL + X y regresa al terminal de la computadora.
NOTA: Este script está rastreando la posición de la ISS y utilizando una fórmula estándar para calcular su distancia a un punto específico en la tierra. Esto no reflejará oportunidades de avistamiento reales, ya que depende de más que simplemente la proximidad (es decir, la hora del día y el clima).
Ahora, de vuelta en el terminal de la computadora, ejecutemos el script y confirmemos nuestro trabajo. Pega y ejecuta el siguiente script en el terminal de tu computadora.
python iss_tracking_ubidots.py
Si tiene éxito, tu terminal comenzará a informar respuestas del servidor de inmediato.
Para visualizar tu trabajo en Ubidots, ve a la pestaña de Gestión de Dispositivos de tu cuenta y visualiza el dispositivo creado :)