

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
<a name="reserving-contacts-with-custom-ephemeris"></a>

## Ikhtisar
<a name="w2aac28c19b3"></a>

 Saat menggunakan ephemeris khusus (TLE, OEM, atau elevasi azimuth), Anda dapat memesan kontak menggunakan API. [ReserveContact](https://docs.aws.amazon.com/ground-station/latest/APIReference/API_ReserveContact.html) 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
<a name="w2aac28c19b5"></a>

 Ada dua alur kerja utama untuk memesan kontak dengan ephemeris khusus: 

1. *List-then-reserve alur kerja:* Daftar pertama jendela kontak yang tersedia menggunakan [ListContacts](https://docs.aws.amazon.com/ground-station/latest/APIReference/API_ListContacts.html), lalu pilih dan pesan jendela tertentu. Pendekatan ini berguna ketika Anda ingin melihat semua peluang yang tersedia sebelum membuat pilihan.

1. *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
<a name="w2aac28c19b7"></a>

 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
<a name="w2aac28c19b7b5"></a>

```
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
<a name="w2aac28c19b7b7"></a>

```
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
<a name="w2aac28c19b9"></a>

 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
<a name="w2aac28c19b9b5"></a>

```
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
<a name="w2aac28c19b9b7"></a>

```
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
<a name="w2aac28c19c11"></a>

 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](contacts.lifecycle.md) 

### Menerapkan pemantauan status kontak dengan EventBridge
<a name="w2aac28c19c11c11"></a>

 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
<a name="w2aac28c19c11c11b5"></a>

1. Buat fungsi Lambda untuk memproses peristiwa perubahan status kontak

1. Buat EventBridge aturan yang cocok dengan peristiwa perubahan status kontak Ground Station

1. Tambahkan fungsi Lambda sebagai target aturan

#### Contoh penangan fungsi Lambda
<a name="w2aac28c19c11c11b7"></a>

 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](examples.pbs-data-dataflow-endpoint.md#examples.pbs-dataflow-endpoint.putting-it-together) bagian dari contoh titik akhir aliran data. 

#### EventBridge konfigurasi aturan
<a name="w2aac28c19c11c11b9"></a>

 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](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-create-rule.html) di EventBridge Panduan Pengguna Amazon. 

### Menyiapkan EventBridge aturan untuk otomatisasi
<a name="w2aac28c19c11c13"></a>

 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`
+ Log penyelesaian kontak untuk tujuan audit

 Untuk informasi rinci tentang pengaturan EventBridge aturan untuk AWS Ground Station acara, lihat[Otomatisasi AWS Ground Station dengan Acara](monitoring.automating-events.md). 

## Praktik terbaik dan pertimbangan
<a name="w2aac28c19c13"></a>

### Menangani konflik penjadwalan
<a name="w2aac28c19c13b3"></a>

 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: 

1. Selalu periksa status kontak setelah reservasi

1. Terapkan logika coba lagi dengan jendela waktu alternatif

1. Pertimbangkan untuk memesan kontak jauh-jauh hari jika memungkinkan

1. Gunakan EventBridge acara untuk memantau `FAILED_TO_SCHEDULE` negara

### Waktu validasi Ephemeris
<a name="w2aac28c19c13b5"></a>

 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
<a name="w2aac28c19c13b7"></a>

 Saat menggunakan ephemeris khusus: 
+ Pastikan ephemeris Anda mencakup seluruh durasi kontak
+ [Untuk ephemeris elevasi azimuth, verifikasi bahwa sudut menjaga antena di atas situs menutupi seluruh kontak](https://docs.aws.amazon.com/ground-station/latest/ug/locations.site-masks.html)
+ Pertimbangkan waktu kedaluwarsa ephemeris saat menjadwalkan kontak masa depan

### Perbedaan API menurut tipe ephemeris
<a name="w2aac28c19c13b9"></a>

 `ReserveContact`API 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 | 