Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.
Riserva i contatti con effemeridi personalizzate
Panoramica di
Quando si utilizzano effemeridi personalizzate (TLE, OEM o elevazione azimutale), è possibile prenotare i contatti utilizzando l'API. ReserveContact Questa sezione descrive due flussi di lavoro comuni per la prenotazione dei contatti e considerazioni importanti per garantire una corretta pianificazione dei contatti.
AWS Ground Station le antenne sono risorse condivise tra più clienti. Ciò significa che anche se appare disponibile una finestra di contatto quando elenchi i contatti, un altro cliente potrebbe prenotarla prima di te. Pertanto, è fondamentale verificare che il contatto raggiunga SCHEDULED lo stato dopo la prenotazione e implementare un monitoraggio adeguato delle modifiche allo stato del contatto.
Importante
Per le effemeridi con elevazione azimutale, il satelliteArn parametro può essere omesso dalla ReserveContact richiesta ed è necessario fornire trackingOverrides l'ID dell'effemeride. Per le effemeridi TLE e OEM, è comunque necessario fornire il. satelliteArn
Flussi di lavoro per la prenotazione dei contatti
Esistono due flussi di lavoro principali per la prenotazione dei contatti con effemeridi personalizzate:
-
List-then-reserve flusso di lavoro: prima elenca le finestre di contatto disponibili utilizzando ListContacts, quindi seleziona e prenota una finestra specifica. Questo approccio è utile quando si desidera visualizzare tutte le opportunità disponibili prima di effettuare una selezione.
-
Flusso di lavoro di prenotazione diretta: prenota direttamente un contatto per una finestra temporale specifica senza prima elencare i contatti disponibili. Questo approccio è utile quando si conosce già l'orario di contatto desiderato o si lavora con orari predeterminati.
Entrambi i flussi di lavoro sono validi e la scelta dipende dai requisiti operativi. Le sezioni seguenti forniscono esempi di ciascun approccio.
Flusso di lavoro 1: Elenca i contatti disponibili, quindi prenota
Questo flusso di lavoro richiede innanzitutto le finestre di contatto disponibili, quindi riserva una finestra specifica. Ciò è utile quando si desidera visualizzare tutte le opportunità disponibili prima di effettuare una selezione.
Esempio: elenco e riserva con effemeridi di elevazione azimutale
import boto3 from datetime import datetime, timezone import time # Create AWS Ground Station client ground_station_client = boto3.client("groundstation") # Create azimuth elevation ephemeris print("Creating azimuth elevation ephemeris...") ephemeris_response = ground_station_client.create_ephemeris( name="AzEl Ephemeris for Contact", ephemeris={ "azEl": { "groundStation": "Ohio 1", "data": { "azElData": { "angleUnit": "DEGREE_ANGLE", "azElSegmentList": [ { "referenceEpoch": "2024-03-15T10:00:00Z", "validTimeRange": { "startTime": "2024-03-15T10:00:00Z", "endTime": "2024-03-15T10:15:00Z", }, "azElList": [ {"dt": 0.0, "az": 45.0, "el": 10.0}, {"dt": 180.0, "az": 50.0, "el": 15.0}, {"dt": 360.0, "az": 55.0, "el": 20.0}, {"dt": 540.0, "az": 60.0, "el": 25.0}, {"dt": 720.0, "az": 65.0, "el": 30.0}, {"dt": 900.0, "az": 70.0, "el": 35.0}, ], } ], } }, } }, ) ephemeris_id = ephemeris_response["ephemerisId"] print(f"Created ephemeris: {ephemeris_id}") # Wait for ephemeris to become ENABLED while True: status = ground_station_client.describe_ephemeris(ephemerisId=ephemeris_id)[ "status" ] if status == "ENABLED": print("Ephemeris is ENABLED") break elif status in ["INVALID", "ERROR"]: raise RuntimeError(f"Ephemeris failed: {status}") time.sleep(5) # List available contacts print("Listing available contacts...") contacts = ground_station_client.list_contacts( # Note: satelliteArn is omitted for azimuth elevation ephemeris groundStation="Ohio 1", missionProfileArn="arn:aws:groundstation:us-east-2:111122223333:mission-profile/example-profile", startTime=datetime(2024, 3, 15, 10, 0, 0, tzinfo=timezone.utc), endTime=datetime(2024, 3, 15, 10, 15, 0, tzinfo=timezone.utc), statusList=["AVAILABLE"], ephemeris={"azEl": {"id": ephemeris_id}}, ) if contacts["contactList"]: # Reserve the first available contact contact = contacts["contactList"][0] print(f"Reserving contact from {contact['startTime']} to {contact['endTime']}...") reservation = ground_station_client.reserve_contact( # Note: satelliteArn is omitted when using azimuth elevation ephemeris missionProfileArn="arn:aws:groundstation:us-east-2:111122223333:mission-profile/example-profile", groundStation="Ohio 1", startTime=contact["startTime"], endTime=contact["endTime"], trackingOverrides={ "programTrackSettings": {"azEl": {"ephemerisId": ephemeris_id}} }, ) print(f"Reserved contact: {reservation['contactId']}") else: print("No available contacts found")
Esempio: elenca e prenota con effemeridi TLE
import boto3 from datetime import datetime, timedelta, timezone import time # Create AWS Ground Station client ground_station_client = boto3.client("groundstation") satellite_id = "12345678-1234-1234-1234-123456789012" satellite_arn = f"arn:aws:groundstation::111122223333:satellite/{satellite_id}" # Create TLE ephemeris print("Creating TLE ephemeris...") ephemeris_response = ground_station_client.create_ephemeris( name="TLE Ephemeris for Contact", satelliteId=satellite_id, enabled=True, expirationTime=datetime.now(timezone.utc) + timedelta(days=7), priority=1, # Higher priority than default ephemeris ephemeris={ "tle": { "tleData": [ { "tleLine1": "1 25994U 99068A 24075.54719794 .00000075 00000-0 26688-4 0 9997", "tleLine2": "2 25994 98.2007 30.6589 0001234 89.2782 18.9934 14.57114995111906", "validTimeRange": { "startTime": datetime.now(timezone.utc), "endTime": datetime.now(timezone.utc) + timedelta(days=7), }, } ] } }, ) ephemeris_id = ephemeris_response["ephemerisId"] print(f"Created ephemeris: {ephemeris_id}") # Wait for ephemeris to become ENABLED while True: status = ground_station_client.describe_ephemeris(ephemerisId=ephemeris_id)[ "status" ] if status == "ENABLED": print("Ephemeris is ENABLED") break elif status in ["INVALID", "ERROR"]: raise RuntimeError(f"Ephemeris failed: {status}") time.sleep(5) # List available contacts print("Listing available contacts...") start_time = datetime.now(timezone.utc) + timedelta(hours=1) end_time = start_time + timedelta(days=1) contacts = ground_station_client.list_contacts( satelliteArn=satellite_arn, # Required for TLE/OEM ephemeris groundStation="Hawaii 1", missionProfileArn="arn:aws:groundstation:us-west-2:111122223333:mission-profile/example-profile", startTime=start_time, endTime=end_time, statusList=["AVAILABLE"], ) if contacts["contactList"]: # Reserve the first available contact contact = contacts["contactList"][0] print(f"Reserving contact from {contact['startTime']} to {contact['endTime']}...") reservation = ground_station_client.reserve_contact( satelliteArn=satellite_arn, # Required for TLE/OEM ephemeris missionProfileArn="arn:aws:groundstation:us-west-2:111122223333:mission-profile/example-profile", groundStation="Hawaii 1", startTime=contact["startTime"], endTime=contact["endTime"], # Note: trackingOverrides is optional for TLE/OEM # The system will use the highest priority ephemeris automatically ) print(f"Reserved contact: {reservation['contactId']}") else: print("No available contacts found")
Flusso di lavoro 2: prenotazione diretta dei contatti
Questo flusso di lavoro riserva direttamente un contatto senza prima elencare le finestre disponibili. Questo approccio è utile quando si conosce già l'orario di contatto desiderato o si sta implementando una pianificazione automatica.
Esempio: prenotazione diretta con effemeridi di elevazione azimutale
import boto3 from datetime import datetime, timezone import time # Create AWS Ground Station client ground_station_client = boto3.client("groundstation") # Define contact window contact_start = datetime(2024, 3, 20, 14, 0, 0, tzinfo=timezone.utc) contact_end = datetime(2024, 3, 20, 14, 15, 0, tzinfo=timezone.utc) # Create azimuth elevation ephemeris for the specific contact time print("Creating azimuth elevation ephemeris...") ephemeris_response = ground_station_client.create_ephemeris( name="Direct Contact AzEl Ephemeris", ephemeris={ "azEl": { "groundStation": "Ohio 1", "data": { "azElData": { "angleUnit": "DEGREE_ANGLE", "azElSegmentList": [ { "referenceEpoch": contact_start.isoformat(), "validTimeRange": { "startTime": contact_start.isoformat(), "endTime": contact_end.isoformat(), }, "azElList": [ {"dt": 0.0, "az": 45.0, "el": 10.0}, {"dt": 180.0, "az": 50.0, "el": 15.0}, {"dt": 360.0, "az": 55.0, "el": 20.0}, {"dt": 540.0, "az": 60.0, "el": 25.0}, {"dt": 720.0, "az": 65.0, "el": 30.0}, {"dt": 900.0, "az": 70.0, "el": 35.0}, ], } ], } }, } }, ) ephemeris_id = ephemeris_response["ephemerisId"] print(f"Created ephemeris: {ephemeris_id}") # Wait for ephemeris to become ENABLED while True: status = ground_station_client.describe_ephemeris(ephemerisId=ephemeris_id)[ "status" ] if status == "ENABLED": print("Ephemeris is ENABLED") break elif status in ["INVALID", "ERROR"]: raise RuntimeError(f"Ephemeris failed: {status}") time.sleep(5) # Directly reserve the contact print(f"Reserving contact from {contact_start} to {contact_end}...") reservation = ground_station_client.reserve_contact( # Note: satelliteArn is omitted for azimuth elevation missionProfileArn="arn:aws:groundstation:us-east-2:111122223333:mission-profile/example-profile", groundStation="Ohio 1", startTime=contact_start, endTime=contact_end, trackingOverrides={"programTrackSettings": {"azEl": {"ephemerisId": ephemeris_id}}}, ) print(f"Reserved contact: {reservation['contactId']}")
Esempio: prenotazione diretta con effemeridi TLE
import boto3 from datetime import datetime, timedelta, timezone import time # Create AWS Ground Station client ground_station_client = boto3.client("groundstation") satellite_id = "12345678-1234-1234-1234-123456789012" satellite_arn = f"arn:aws:groundstation::111122223333:satellite/{satellite_id}" # Define contact window (based on predicted pass) contact_start = datetime(2024, 3, 21, 10, 30, 0, tzinfo=timezone.utc) contact_end = datetime(2024, 3, 21, 10, 42, 0, tzinfo=timezone.utc) # Create TLE ephemeris print("Creating TLE ephemeris...") ephemeris_response = ground_station_client.create_ephemeris( name="Direct Contact TLE Ephemeris", satelliteId=satellite_id, enabled=True, expirationTime=contact_end + timedelta(days=1), priority=1, ephemeris={ "tle": { "tleData": [ { "tleLine1": "1 25994U 99068A 24080.50000000 .00000075 00000-0 26688-4 0 9999", "tleLine2": "2 25994 98.2007 35.6589 0001234 89.2782 18.9934 14.57114995112000", "validTimeRange": { "startTime": (contact_start - timedelta(hours=1)).isoformat(), "endTime": (contact_end + timedelta(hours=1)).isoformat(), }, } ] } }, ) ephemeris_id = ephemeris_response["ephemerisId"] print(f"Created ephemeris: {ephemeris_id}") # Wait for ephemeris to become ENABLED while True: status = ground_station_client.describe_ephemeris(ephemerisId=ephemeris_id)[ "status" ] if status == "ENABLED": print("Ephemeris is ENABLED") break elif status in ["INVALID", "ERROR"]: raise RuntimeError(f"Ephemeris failed: {status}") time.sleep(5) # Directly reserve the contact print(f"Reserving contact from {contact_start} to {contact_end}...") reservation = ground_station_client.reserve_contact( satelliteArn=satellite_arn, # Required for TLE ephemeris missionProfileArn="arn:aws:groundstation:us-west-2:111122223333:mission-profile/example-profile", groundStation="Hawaii 1", startTime=contact_start, endTime=contact_end, # Note: trackingOverrides is optional for TLE # The system will use the highest priority ephemeris automatically ) print(f"Reserved contact: {reservation['contactId']}")
Monitoraggio delle modifiche allo stato dei contatti
Dopo aver prenotato un contatto, è importante monitorarne lo stato per assicurarsi che passi correttamente SCHEDULED e ricevere una notifica di eventuali problemi. AWS Ground Station invia eventi ad Amazon EventBridge per tutte le modifiche allo stato dei contatti.
Gli stati di contatto seguono questo ciclo di vita:
-
SCHEDULING- Il contatto è in fase di elaborazione per la pianificazione -
SCHEDULED- Il contatto è stato pianificato con successo e verrà eseguito -
FAILED_TO_SCHEDULE- Impossibile programmare il contatto (stato del terminale)
Per ulteriori informazioni sugli stati e sul ciclo di vita dei contatti, consulta. Comprendi il ciclo di vita dei contatti
Implementazione del monitoraggio dello stato dei contatti con EventBridge
Per monitorare i cambiamenti dello stato dei contatti in tempo reale, puoi impostare una EventBridge regola Amazon che attiva una funzione Lambda ogni volta che un contatto di Ground Station cambia stato. Questo approccio è più efficiente e scalabile rispetto al polling dello stato del contatto.
Passaggi dell’implementazione
-
Crea una funzione Lambda per elaborare gli eventi di modifica dello stato dei contatti
-
Crea una EventBridge regola che corrisponda agli eventi di modifica dello stato dei contatti di Ground Station
-
Aggiungi la funzione Lambda come obiettivo per la regola
Esempio di gestore di funzioni Lambda
Per un esempio completo di una funzione Lambda che elabora gli eventi di modifica dello stato dei contatti, consulta la GroundStationCloudWatchEventHandlerLambda risorsa nel modello. AquaSnppJpssTerraDigIF.yml CloudFormation Questo modello è disponibile nel bucket Amazon S3 per l'onboarding AWS Ground Station del cliente. Per istruzioni sull'accesso a questo modello, consulta la Mettendolo insieme sezione dell'esempio di endpoint del flusso di dati.
EventBridge configurazione delle regole
La EventBridge regola deve utilizzare il seguente schema di eventi per far corrispondere tutte le modifiche allo stato dei contatti della Ground Station:
{ "source": ["aws.groundstation"], "detail-type": ["Ground Station Contact State Change"] }
Per filtrare solo in base a stati specifici (ad esempio, guasti), puoi aggiungere un filtro di dettaglio:
{ "source": ["aws.groundstation"], "detail-type": ["Ground Station Contact State Change"], "detail": { "contactStatus": [ "FAILED_TO_SCHEDULE", "FAILED", "AWS_FAILED", "AWS_CANCELLED" ] } }
Per istruzioni dettagliate sulla creazione di EventBridge regole con target Lambda, consulta Creazione di regole che reagiscono agli eventi nella Amazon EventBridge User Guide.
Impostazione EventBridge delle regole per l'automazione
È possibile creare EventBridge regole per rispondere automaticamente alle modifiche dello stato dei contatti. Ad esempio:
-
Invia notifiche quando un contatto non riesce a pianificare
-
Attiva le funzioni Lambda per preparare le risorse quando un contatto entra
PREPASS -
Registra i completamenti dei contatti a scopo di controllo
Per informazioni dettagliate sull'impostazione EventBridge delle regole per AWS Ground Station gli eventi, vedere. Automatizza AWS Ground Station con gli eventi
Best practice e considerazioni
Gestione dei conflitti di pianificazione
Poiché le AWS Ground Station antenne sono risorse condivise, una finestra di contatto che appare disponibile in ListContacts potrebbe essere prenotata da un altro cliente prima che tu possa prenotarla. Per gestire questa situazione:
-
Controlla sempre lo stato del contatto dopo la prenotazione
-
Implementa la logica dei tentativi con finestre temporali alternative
-
Valuta la possibilità di prenotare i contatti con largo anticipo, quando possibile
-
Usa EventBridge gli eventi per
FAILED_TO_SCHEDULEmonitorare gli stati
Tempi di convalida delle effemeridi
Ricorda che le effemeridi devono essere presenti prima di ENABLED poterle utilizzare per prenotare i contatti. Il processo di convalida richiede in genere da pochi secondi a qualche minuto a seconda del tipo e della dimensione delle effemeridi. Verifica sempre lo stato delle effemeridi prima di tentare di prenotare i contatti.
Considerazioni sulla tempistica dei contatti
Quando si utilizzano effemeridi personalizzate:
-
Assicurati che le tue effemeridi coprano l'intera durata del contatto
-
Per le effemeridi con elevazione azimutale, verificate che gli angoli mantengano l'antenna sopra la maschera del sito per tutto il contatto https://docs.aws.amazon.com/ground-station/latest/ug/locations.site-masks.html
-
Considera i tempi di scadenza delle effemeridi quando pianifichi i contatti futuri
Differenze API per tipo di effemeridi
L'ReserveContactAPI si comporta in modo diverso a seconda del tipo di effemeridi:
| Tipo di effemeride | SatellitEarn obbligatorio | Tracciamento delle sostituzioni obbligatorie |
|---|---|---|
| TEGOLA | Sì | No (opzionale) |
| OEM | Sì | No (opzionale) |
| Elevazione azimutale | No (opzionale) | Sì |