コンテンツにスキップ

Web API リファレンス

FBSAT59 は REST API と WebSocket を外部ツール統合用に公開しています。

ベース URL

http://localhost:8080/api

またはローカルネットワーク上のリモートマシンから:

http://192.168.x.x:8080/api  (あなたの IP に置き換え)

REST エンドポイント

すべての衛星を取得

GET /satellites

レスポンス

[
  {
    "norad_cat_id": 25544,
    "name": "ISS (ZARYA)",
    "status": "alive",
    "uplink_mhz": 144.39,
    "downlink_mhz": 145.80,
    "updated_at": "2024-01-15T10:30:00Z"
  },
  ...
]

NORAD ID で衛星を取得

GET /satellites/{norad_id}

GET /satellites/25544  (ISS)

今後のパスを取得

GET /satellites/{norad_id}/passes?days=7

レスポンス

[
  {
    "aos": "2024-01-15T12:45:00Z",
    "los": "2024-01-15T13:15:00Z",
    "max_elevation_deg": 72,
    "duration_seconds": 1800,
    "quality": "excellent"
  },
  ...
]

トランスミッターを取得

GET /satellites/{norad_id}/transmitters

レスポンス

[
  {
    "uuid": "satnogs-12345",
    "downlink_mhz": 145.800,
    "uplink_mhz": 144.390,
    "mode": "FM",
    "ctcss_tone": 67.0,
    "description": "ISS Voice Repeater"
  },
  ...
]

現在のステータスを取得

GET /status

レスポンス

{
  "version": "0.3.50",
  "uptime_seconds": 3600,
  "location": {
    "latitude": 35.6762,
    "longitude": 139.6503,
    "elevation_m": 35
  },
  "rig_connected": true
}


WebSocket 接続

WebSocket 経由でリアルタイム追尾データ:

WS /ws/tracking

接続

ws = new WebSocket('ws://localhost:8080/ws/tracking');

ws.onmessage = (event) => {
  const data = JSON.parse(event.data);
  console.log(data);
};

受信データ(毎 1~2 秒)

{
  "satellites": [
    {
      "norad_id": 25544,
      "name": "ISS",
      "azimuth_deg": 247.5,
      "elevation_deg": 34.2,
      "range_km": 1234,
      "velocity_kmps": 7.65,
      "is_visible": true
    },
    ...
  ]
}


使用例

Python

import requests

# ISS の次の 7 日間のパスを取得
resp = requests.get('http://localhost:8080/api/satellites/25544/passes?days=7')
passes = resp.json()

for pass_data in passes:
    print(f"AOS: {pass_data['aos']}, Max Elevation: {pass_data['max_elevation_deg']}°")

JavaScript

// 送信機周波数を取得
fetch('http://localhost:8080/api/satellites/25544/transmitters')
  .then(r => r.json())
  .then(transmitters => {
    transmitters.forEach(tx => {
      console.log(`${tx.description}: ${tx.downlink_mhz} MHz`);
    });
  });

Bash

# すべての衛星を取得
curl http://localhost:8080/api/satellites | jq '.[] | .name'

# ISS パスを取得
curl "http://localhost:8080/api/satellites/25544/passes?days=7" | jq '.'

レート制限

  • 認証不要(ローカルネットワークのみ)
  • レート制限なし
  • WebSocket:1~2 Hz 更新レート

エラーレスポンス

404 見つかりません

{
  "error": "Satellite not found",
  "norad_id": 99999
}

400 不正なリクエスト

{
  "error": "Invalid date format",
  "detail": "Use ISO 8601 format (YYYY-MM-DD)"
}

統合アイデア

  • Wavelog 統合:TLE、パス時刻をインポート
  • カスタム追尾ダッシュボード:リアルタイム Web アプリ
  • ロガーボット:QSO 更新を Slack/Discord に投稿
  • モバイルアプリ:リモート衛星追尾用クライアント

ソースコード

API サーバー:src/web/api.py(FastAPI)

あなたのニーズに合わせて自由に拡張またはカスタマイズできます!


次のステップ