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
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 una finestra di contatto appare disponibile quando si elencano 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 di elevazione azimutale, il satelliteArn parametro può essere omesso dalla ReserveContact richiesta ed è necessario fornire l'ID delle effemeridi. trackingOverrides Per le effemeridi TLE e OEM, è comunque necessario fornire il. satelliteArn
Contatta i flussi di lavoro di prenotazione
Esistono due flussi di lavoro principali per la prenotazione di 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 conosci già l'orario di contatto desiderato o lavori 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 e poi 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: elenca e prenota 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 con contatto
Questo flusso di lavoro prenota 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 automatizzata.
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 che venga informato 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- Il contatto non può essere pianificato (stato del terminale)
Per ulteriori informazioni sugli stati e sul ciclo di vita dei contatti, vedere. Comprendi il ciclo di vita dei contatti
Implementazione del monitoraggio dello stato di contatto 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 Ground Station cambia stato. Questo approccio è più efficiente e scalabile rispetto al sondaggio 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
-
Aggiungere 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 dei AWS Ground Station clienti. Per istruzioni sull'accesso a questo modello, consulta la Mettendolo insieme sezione relativa all'esempio dell'endpoint dataflow.
EventBridge configurazione delle regole
La EventBridge regola deve utilizzare il seguente schema di eventi per corrispondere a tutte le modifiche dello stato dei contatti di 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 obiettivi 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. Esempio:
-
Invia notifiche quando un contatto non riesce a pianificare
-
Attiva le funzioni Lambda per preparare le risorse quando entra un contatto
PREPASS -
Registra i completamenti dei contatti a scopo di controllo
Per informazioni dettagliate sull'impostazione delle EventBridge 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 questo problema:
-
Controlla sempre lo stato del contatto dopo la prenotazione
-
Implementa la logica dei tentativi con finestre temporali alternative
-
Prendi in considerazione 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 attive prima di poterle utilizzare per prenotare i ENABLED 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 effemeridi coprano l'intera durata del contatto
-
Prendi in considerazione i tempi di scadenza delle effemeridi quando pianifichi contatti futuri
Differenze tra le API in base al tipo di effemeridi
L'ReserveContactAPI si comporta in modo diverso a seconda del tipo di effemeridi:
| Tipo di effemeridi | È richiesto SatelliteArn | TrackingOverrides obbligatorio |
|---|---|---|
| TEL | Sì | No (opzionale) |
| OEM | Sì | No (opzionale) |
| Elevazione azimutale | No (opzionale) | Sì |