Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Cadangan kontak dengan ephemeris khusus
Gambaran umum
Saat menggunakan ephemeris khusus (TLE, OEM, atau elevasi azimuth), Anda dapat memesan kontak menggunakan API. ReserveContact Bagian ini menjelaskan dua alur kerja umum untuk pemesanan kontak dan pertimbangan penting untuk memastikan penjadwalan kontak berhasil.
AWS Ground Station antena adalah sumber daya bersama di antara banyak pelanggan. Ini berarti bahwa meskipun jendela kontak muncul tersedia saat Anda mencantumkan kontak, pelanggan lain mungkin memesannya sebelum Anda melakukannya. Oleh karena itu, penting untuk memverifikasi bahwa kontak Anda mencapai SCHEDULED negara setelah reservasi dan menerapkan pemantauan yang tepat untuk perubahan status kontak.
penting
Untuk ephemeris elevasi azimuth, satelliteArn parameter dapat dihilangkan dari ReserveContact permintaan, dan Anda harus memberikan ID ephemeris. trackingOverrides Untuk ephemeris TLE dan OEM, Anda masih perlu menyediakan. satelliteArn
Alur kerja reservasi kontak
Ada dua alur kerja utama untuk memesan kontak dengan ephemeris khusus:
-
List-then-reserve alur kerja: Daftar pertama jendela kontak yang tersedia menggunakan ListContacts, lalu pilih dan pesan jendela tertentu. Pendekatan ini berguna ketika Anda ingin melihat semua peluang yang tersedia sebelum membuat pilihan.
-
Alur kerja reservasi langsung: Langsung pesan kontak untuk jendela waktu tertentu tanpa terlebih dahulu mencantumkan kontak yang tersedia. Pendekatan ini berguna ketika Anda sudah mengetahui waktu kontak yang Anda inginkan atau bekerja dengan jadwal yang telah ditentukan.
Kedua alur kerja valid dan pilihannya tergantung pada kebutuhan operasional Anda. Bagian berikut memberikan contoh dari setiap pendekatan.
Alur kerja 1: Daftar kontak yang tersedia lalu pesan
Alur kerja ini pertama-tama menanyakan jendela kontak yang tersedia, lalu mencadangkan jendela tertentu. Ini berguna ketika Anda ingin melihat semua peluang yang tersedia sebelum membuat pilihan.
Contoh: Daftar dan cadangan dengan ephemeris elevasi azimuth
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")
Contoh: Daftar dan pesan dengan TLE ephemeris
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")
Alur kerja 2: Reservasi kontak langsung
Alur kerja ini secara langsung mencadangkan kontak tanpa mencantumkan jendela yang tersedia terlebih dahulu. Pendekatan ini berguna ketika Anda sudah mengetahui waktu kontak yang Anda inginkan atau menerapkan penjadwalan otomatis.
Contoh: Reservasi langsung dengan ephemeris elevasi azimuth
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']}")
Contoh: Reservasi langsung dengan TLE ephemeris
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']}")
Memantau perubahan status kontak
Setelah memesan kontak, penting untuk memantau statusnya untuk memastikannya berhasil bertransisi ke SCHEDULED dan diberi tahu tentang masalah apa pun. AWS Ground Station memancarkan peristiwa ke Amazon EventBridge untuk semua perubahan status kontak.
Status kontak mengikuti siklus hidup ini:
-
SCHEDULING- Kontak sedang diproses untuk penjadwalan -
SCHEDULED- Kontak berhasil dijadwalkan dan akan dieksekusi -
FAILED_TO_SCHEDULE- Kontak tidak dapat dijadwalkan (status terminal)
Untuk informasi selengkapnya tentang status kontak dan siklus hidup, lihat. Memahami siklus hidup kontak
Menerapkan pemantauan status kontak dengan EventBridge
Untuk memantau perubahan status kontak secara real-time, Anda dapat mengatur EventBridge aturan Amazon yang memicu fungsi Lambda setiap kali kontak Ground Station berubah status. Pendekatan ini lebih efisien dan terukur daripada polling status kontak.
Langkah-langkah implementasi
-
Buat fungsi Lambda untuk memproses peristiwa perubahan status kontak
-
Buat EventBridge aturan yang cocok dengan peristiwa perubahan status kontak Ground Station
-
Tambahkan fungsi Lambda sebagai target aturan
Contoh penangan fungsi Lambda
Untuk contoh lengkap fungsi Lambda yang memproses peristiwa perubahan status kontak, lihat GroundStationCloudWatchEventHandlerLambda sumber daya dalam templat. AquaSnppJpssTerraDigIF.yml CloudFormation Template ini tersedia di bucket Amazon S3 orientasi AWS Ground Station pelanggan. Untuk petunjuk tentang mengakses template ini, lihat Menyatukannya bagian dari contoh titik akhir aliran data.
EventBridge konfigurasi aturan
EventBridge Aturan harus menggunakan pola peristiwa berikut untuk mencocokkan semua perubahan status kontak Ground Station:
{ "source": ["aws.groundstation"], "detail-type": ["Ground Station Contact State Change"] }
Untuk memfilter hanya untuk status tertentu (misalnya, kegagalan), Anda dapat menambahkan filter detail:
{ "source": ["aws.groundstation"], "detail-type": ["Ground Station Contact State Change"], "detail": { "contactStatus": [ "FAILED_TO_SCHEDULE", "FAILED", "AWS_FAILED", "AWS_CANCELLED" ] } }
Untuk petunjuk mendetail tentang cara membuat EventBridge aturan dengan target Lambda, lihat Membuat aturan yang bereaksi terhadap peristiwa di EventBridge Panduan Pengguna Amazon.
Menyiapkan EventBridge aturan untuk otomatisasi
Anda dapat membuat EventBridge aturan untuk merespons perubahan status kontak secara otomatis. Contoh:
-
Kirim pemberitahuan saat kontak gagal menjadwalkan
-
Memicu fungsi Lambda untuk menyiapkan sumber daya saat kontak masuk
PREPASS -
Penyelesaian kontak log untuk tujuan audit
Untuk informasi rinci tentang pengaturan EventBridge aturan untuk AWS Ground Station acara, lihatOtomatisasi AWS Ground Station dengan Acara.
Praktik terbaik dan pertimbangan
Menangani konflik penjadwalan
Karena AWS Ground Station antena adalah sumber daya bersama, jendela kontak yang muncul tersedia ListContacts mungkin dipesan oleh pelanggan lain sebelum Anda dapat memesannya. Untuk menangani ini:
-
Selalu periksa status kontak setelah reservasi
-
Terapkan logika coba lagi dengan jendela waktu alternatif
-
Pertimbangkan untuk memesan kontak jauh sebelumnya jika memungkinkan
-
Gunakan EventBridge acara untuk memantau
FAILED_TO_SCHEDULEstatus
Waktu validasi Ephemeris
Ingatlah bahwa ephemeris harus dalam ENABLED keadaan sebelum Anda dapat menggunakannya untuk memesan kontak. Proses validasi biasanya memakan waktu beberapa detik hingga beberapa menit tergantung pada jenis dan ukuran ephemeris. Selalu verifikasi status ephemeris sebelum mencoba memesan kontak.
Pertimbangan waktu kontak
Saat menggunakan ephemeris khusus:
-
Pastikan ephemeris Anda mencakup seluruh durasi kontak
-
Pertimbangkan waktu kedaluwarsa ephemeris saat menjadwalkan kontak masa depan
Perbedaan API menurut tipe ephemeris
ReserveContactAPI berperilaku berbeda tergantung pada tipe ephemeris:
| Jenis Ephemeris | SatellitEarn Diperlukan | TrackingOverrides Diperlukan |
|---|---|---|
| TLE | Ya | Tidak (opsional) |
| OEM | Ya | Tidak (opsional) |
| Ketinggian Azimuth | Tidak (opsional) | Ya |