Smart blaze REST APIリファレンス#
REST APIを使用して仮想マシン(VM)を制御できます。これにより、コマンドラインまたはカスタムスクリプトから、VMのライフサイクルの管理、イメージのアップロード、ネットワーク設定の構成が可能になります。
すべてのAPIエンドポイントには、カメラのIPアドレス経由でアクセスします。
情報
置換 ${cameraip} カメラの実際のIPアドレスを入力します。
認証#
Smart blaze REST APIは、不正アクセスから保護するためにチャレンジ・レスポンスメカニズムを使用したセッションベースの認証を使用します。デフォルトのパスワードはカメラごとに異なり、カメラのラベルに記載されています。
すべてのAPIエンドポイント(以下を除く) /loginには、セッションCookieによる認証が必要です。認証には次の3つのステップが含まれます。
- ログインチャレンジの取得 にGETリクエストを送信することによる
/login - チャレンジレスポンスの計算 チャレンジからのナンスを使用
- チャレンジレスポンスの送信 認証を完了するため
ログインチャレンジの取得#
エンドポイント: /login
メソッド: GET
レスポンス: 非表示のフォームフィールドにナンスを含むHTMLページ
チャレンジレスポンスの計算#
チャレンジレスポンスは次のように計算する必要があります。
ここで:
nonceこれはログインチャレンジから得られた値です。passwordはあなたの平文パスワードです。- SHA256は小文字の16進数文字列を生成します。
例(シェルを使用):
# Get the nonce from the login page
NONCE=$(curl -s http://${cameraip}/login | grep -oP 'id="challenge-nonce"[^>]*value="\K[^"]+')
# Your password
PASSWORD="blaze-oh-yeah"
# Compute password hash
PASSWORD_HASH=$(echo -n "$PASSWORD" | sha256sum | awk '{print $1}')
# Compute challenge response
RESPONSE=$(echo -n "${NONCE}:${PASSWORD_HASH}" | sha256sum | awk '{print $1}')
チャレンジレスポンスの送信#
エンドポイント: /login
メソッド: POST
コンテンツタイプ: application/x-www-form-urlencoded
パラメータ:
| パラメーター | タイプ | 必須 | 説明 |
|---|---|---|---|
challenge_response | String | はい | 計算されたチャレンジレスポンス(SHA256 16進数文字列) |
応答: 成功時はメインページにリダイレクトします。失敗時はエラーとともにログインページを返します。
例:
curl -c cookies.txt -b cookies.txt -X POST http://${cameraip}/login \
-d "challenge_response=${RESPONSE}"
認証成功後、以降のすべてのAPIリクエストにセッションクッキーを含めます:
認証完了の例#
完全なシェルスクリプトの例は次のとおりです:
#!/bin/bash
CAMERA_IP="192.168.1.123"
PASSWORD="blaze-oh-yeah"
# Get login challenge
echo "Getting login challenge..."
NONCE=$(curl -s -c cookies.txt http://${CAMERA_IP}/login | \
grep -oP 'id="challenge-nonce"[^>]*value="\K[^"]+')
if [ -z "$NONCE" ]; then
echo "Failed to get login challenge"
exit 1
fi
# Compute challenge response
PASSWORD_HASH=$(echo -n "$PASSWORD" | sha256sum | awk '{print $1}')
RESPONSE=$(echo -n "${NONCE}:${PASSWORD_HASH}" | sha256sum | awk '{print $1}')
# Login
echo "Logging in..."
curl -s -b cookies.txt -c cookies.txt -X POST http://${CAMERA_IP}/login \
-d "challenge_response=${RESPONSE}" > /dev/null
# Now you can make authenticated API calls
echo "Making authenticated API call..."
curl -b cookies.txt -X POST http://${CAMERA_IP}/vm/restart
echo "Done"
セキュリティ機能#
- チャレンジレスポンス認証: ネットワーク経由でのパスワードの送信を防ぎます。
- レートリミット: ブルートフォース攻撃を防ぐため、ログイン失敗回数に制限が設けられます。
- セッションセキュリティ:
- HTTP-only クッキー(JavaScriptからはアクセス不可)
- SameSite=Strict クッキーポリシー
- 60秒のチャレンジタイムアウト
- パスワードの保存: パスワードはSHA256ハッシュとしてのみ保存されます。
ユーザーはWebインターフェースからカスタムパスワードを設定できます。
セッションのログアウト#
ログアウトしてセッションをクリアするには:
エンドポイント: /logout
メソッド: POST
API エンドポイント#
情報
以下にリストされているすべてのエンドポイントには認証が必要です。まず次のエンドポイントを使用して認証を行い、 /login リクエストにセッションクッキーを含める必要があります。詳細は 認証 セクションを参照してください。
簡潔にするため、以下の例では認証ステップを省略したAPI呼び出しを示しています。実際には、認証を行った後、curlコマンドに -b cookies.txt を含めてください。
VM制御用APIコール#
VMの再起動#
仮想マシンを再起動します。
エンドポイント: /vm/restart
メソッド: POST
応答: メインページにリダイレクトします
例:
VMの起動#
仮想マシンを起動します。
エンドポイント: /vm/start
メソッド: POST
応答: メインページにリダイレクトします
例:
VMの停止#
仮想マシンを停止します。
エンドポイント: /vm/stop
メソッド: POST
応答: メインページにリダイレクトします
例:
VM構成用APIコール#
IP設定の構成#
VMのネットワーク設定(DHCPまたは静的IP)を構成します。
エンドポイント: /vm/ip
メソッド: POST
コンテンツタイプ: application/x-www-form-urlencoded
パラメータ:
| パラメーター | タイプ | 必須 | 説明 |
|---|---|---|---|
mode | String | はい | ネットワークモード: "DHCP" または "Manual" |
address | String | 条件付き | CIDR表記のIPアドレス(例: "192.168.1.127/24")。次の場合に必須: mode です。 "Manual". |
gateway | String | いいえ | ゲートウェイIPアドレス(例: "192.168.1.1")。省略する場合は空のままにします。 |
dns0 | String | いいえ | プライマリDNSサーバーのアドレス(例: "8.8.8.8")。省略する場合は空のままにします。 |
dns1 | String | いいえ | セカンダリDNSサーバーのアドレス。省略する場合は空のままにします。 |
応答: メインページにリダイレクトします
情報
このエンドポイントは、ネットワーク構成の変更を適用するためにVMを一時的に停止します。
例:静的IPの構成#
curl -X POST http://${cameraip}/vm/ip \
-d "mode=Manual" \
-d "address=192.168.1.127/24" \
-d "gateway=192.168.1.1" \
-d "dns0=8.8.8.8" \
-d "dns1=8.8.4.4"
例:DHCPの有効化#
curl -X POST http://${cameraip}/vm/ip \
-d "mode=DHCP" \
-d "address=192.168.1.127/24" \
-d "gateway=" \
-d "dns0=" \
-d "dns1="
VM設定の更新#
VMの動作設定を行います。
エンドポイント: /vm/settings
メソッド: POST
コンテンツタイプ: application/x-www-form-urlencoded
パラメータ:
| パラメーター | タイプ | 必須 | 説明 |
|---|---|---|---|
wait_console | String | いいえ | コンソール待機モードを有効にする: "on" または "true"。無効にするには、省略するか他の値を設定します。 |
応答: メインページにリダイレクトします
例:
イメージ管理#
利用可能なイメージの一覧表示#
インストールされているすべてのVMイメージを、アクティブ状態およびサイズとともに一覧表示します。
エンドポイント: /vm/images
メソッド: GET
応答: イメージオブジェクトのJSON配列
応答フィールド:
| Field | タイプ | 説明 |
|---|---|---|
name | String | イメージの名前 |
is_active | Boolean | このイメージが現在アクティブかどうかを示します。 |
size | String | イメージのディスクサイズ(人間が読み取り可能な形式、例: "1.2G") |
例:
応答:
[
{"name": "debian-arm64-min", "is_active": true, "size": "1.2G"},
{"name": "custom-app", "is_active": false, "size": "2.4G"}
]
VMイメージのアップロード状況の確認#
アーカイブを転送する前に、VMイメージをアップロードできるかどうかを確認します。これにより、アップロードエンドポイントと同じチェックを使用して、ファイル名、.tar.gz拡張子、イメージ名、上書きの制約、および利用可能なストレージ容量が検証されます。
エンドポイント: /vm/check_image_uploadable
メソッド: POST
コンテンツタイプ: application/json
リクエストフィールド:
| Field | タイプ | 必須 | 説明 |
|---|---|---|---|
filename | String | はい | .tar.gz拡張子を含むアーカイブの名前 |
size | Integer | はい | バイト単位のアーカイブサイズ |
overwrite | Boolean | いいえ | 既存の非アクティブなイメージの置き換えを許可します。デフォルト: false |
成功レスポンス:
同じ名前を持つ非アクティブなイメージが存在する場合、および overwrite です。 false:
{
"success": false,
"error": "Image 'debian-arm64-8GB' already exists.",
"needs_confirmation": true
}
その他のバリデーションエラーの返り値:
例:
curl -X POST http://${cameraip}/vm/check_image_uploadable \
-H "Content-Type: application/json" \
-d '{"filename":"debian-arm64-8GB.tar.gz","size":2147483648,"overwrite":false}'
情報
チェックが成功しても、イメージ名やストレージ容量は予約されません。アップロードエンドポイントでこれらのチェックが再度実行されます。アーカイブの内容とファイル形式のバリデーションは、アーカイブのアップロード後でのみ行われます。
VMイメージのアップロード#
新しいVMイメージのアーカイブをアップロードします。アーカイブには、rootfsファイルとカーネルファイルが含まれている必要があります。
エンドポイント: /vm/image
メソッド: POST
コンテンツタイプ: multipart/form-data
パラメータ:
| パラメーター | タイプ | 必須 | 説明 |
|---|---|---|---|
file | ファイル | はい | VMイメージアーカイブ(.tar.gz形式) |
overwrite | クエリ | いいえ | 次のように設定: "true" 同じ名前を持つ既存のイメージを上書きします。デフォルト: "false" |
set_active | クエリ | いいえ | 次のように設定: "true" アップロードしたイメージを即座に有効化します(VMが再起動します)。以下に設定します: "false" 有効化せずにアップロードします。デフォルト: "true" |
サポートされているアーカイブの内容:
アップロードするアーカイブには、以下が含まれている必要があります:
- rootfsファイル:
rootfs.qcow2,rootfs.img、またはrootfs.raw - カーネルファイル:
kernel
詳細については、VM Image Structureを参照してください。
レスポンス: JSON
成功レスポンス:
エラーレスポンス:
情報
いつ set_active=true (デフォルト)、このエンドポイントはアップロードおよび有効化のプロセス中に一時的にVMを停止します。 set_active=falseの場合、実行中のVMに影響を与えることなく、イメージのアップロードと保存のみが行われます。
例:新しいイメージのアップロードと有効化(デフォルト)#
応答:
例:有効化せずにアップロード#
応答:
例:アップロード失敗(イメージが存在する)#
応答:
例:既存のイメージの上書きと有効化#
例:有効化せずに既存のイメージを上書き#
curl -F "file=@debian-arm64-8GB.tar.gz" "http://${cameraip}/vm/image?overwrite=true&set_active=false"
アクティブなイメージの選択#
アクティブなVMイメージを、インストール済みの別のイメージに変更します。
エンドポイント: /vm/select_image
メソッド: POST
コンテンツタイプ: application/x-www-form-urlencoded
パラメータ:
| パラメーター | タイプ | 必須 | 説明 |
|---|---|---|---|
image_name | String | はい | アクティブ化するイメージの名前 |
応答: メインページにリダイレクトします
情報
このエンドポイントは、アクティブなイメージを切り替えるためにVMを一時停止します。
例:
VMイメージの削除#
インストール済みのVMイメージを削除します。
エンドポイント: /vm/delete_image
メソッド: POST
コンテンツタイプ: application/x-www-form-urlencoded
パラメータ:
| パラメーター | タイプ | 必須 | 説明 |
|---|---|---|---|
image_name | String | はい | 削除するイメージの名前 |
応答: メインページにリダイレクトします
情報
現在アクティブなイメージは削除できません。まず別のイメージを選択してください。
例:
VMイメージの名前変更#
インストール済みのVMイメージの名前を変更します。
エンドポイント: /vm/rename_image
メソッド: POST
コンテンツタイプ: application/x-www-form-urlencoded
パラメータ:
| パラメーター | タイプ | 必須 | 説明 |
|---|---|---|---|
old_image_name | String | はい | イメージの現在の名前 |
new_image_name | String | はい | イメージの新しい名前 |
応答: メインページにリダイレクトします
情報
アクティブなイメージの名前を変更する場合、このエンドポイントはVMを一時停止します。
例:
curl -X POST http://${cameraip}/vm/rename_image \
-d "old_image_name=debian-arm64-8GB" \
-d "new_image_name=my-custom-vm"
システムメンテナンス#
ファクトリーリセット#
VMを出荷時設定にリセットします。これにより、すべてのカスタムVMイメージが削除され、元のrootfsとカーネルが復元され、VMの設定がリセットされます。
エンドポイント: /vm/factory_reset
メソッド: POST
レスポンス: JSON
成功レスポンス:
エラーレスポンス:
情報
このエンドポイントはVMを一時停止し、すべてのユーザーデータを削除します。使用には十分注意してください。
例:
応答:
エラーハンドリング#
JSONを返すAPIエンドポイントには、以下のものが含まれます。 success フィールド:
true:操作が正常に完了しました。false:操作が失敗しました。詳細については、errorフィールドを確認してください。
一部のエラーレスポンスには、追加のフィールドが含まれる場合があります。
needs_confirmation:設定対象:true操作に明示的な確認が必要な場合(既存のイメージの上書きなど)。
一般的な使用例#
カスタムVMイメージのアップロードとアクティブ化#
#!/bin/bash
CAMERA_IP="192.168.1.123"
PASSWORD="blaze-oh-yeah" # Replace with your camera's password
IMAGE_FILE="my-custom-vm.tar.gz"
# Authenticate
NONCE=$(curl -s -c cookies.txt http://${CAMERA_IP}/login | \
grep -oP 'id="challenge-nonce"[^>]*value="\K[^"]+')
PASSWORD_HASH=$(echo -n "$PASSWORD" | sha256sum | awk '{print $1}')
RESPONSE=$(echo -n "${NONCE}:${PASSWORD_HASH}" | sha256sum | awk '{print $1}')
curl -s -b cookies.txt -c cookies.txt -X POST http://${CAMERA_IP}/login \
-d "challenge_response=${RESPONSE}" > /dev/null
# Upload and activate the image archive (default behavior)
RESULT=$(curl -b cookies.txt -F "file=@${IMAGE_FILE}" http://${CAMERA_IP}/vm/image)
echo "$RESULT"
# The VM will automatically restart with the new image
アクティブ化せずにVMイメージをアップロード#
#!/bin/bash
CAMERA_IP="192.168.1.123"
PASSWORD="blaze-oh-yeah" # Replace with your camera's password
IMAGE_FILE="backup-vm.tar.gz"
# Authenticate (authentication code omitted for brevity, see above)
# Upload the image without activating it (VM keeps running)
RESULT=$(curl -b cookies.txt -F "file=@${IMAGE_FILE}" \
"http://${CAMERA_IP}/vm/image?set_active=false")
echo "$RESULT"
# The image is now stored but not active. You can activate it later using /vm/select_image
インストール済みイメージの切り替え#
# Authenticate (see above for full authentication example)
# Then select a different image
curl -b cookies.txt -X POST http://${cameraip}/vm/select_image \
-d "image_name=debian-arm64-base"
ダイレクト接続用の静的IPの構成#
# Authenticate first, then configure network
curl -b cookies.txt -X POST http://${cameraip}/vm/ip \
-d "mode=Manual" \
-d "address=192.168.1.200/24" \
-d "gateway=192.168.1.1" \
-d "dns0=8.8.8.8" \
-d "dns1="
VMイメージのデプロイの自動化#
#!/bin/bash
CAMERA_IP="192.168.1.123"
PASSWORD="blaze-oh-yeah" # Replace with your camera's password
IMAGE_FILE="production-vm.tar.gz"
# Function to authenticate
authenticate() {
echo "Authenticating..."
NONCE=$(curl -s -c cookies.txt http://${CAMERA_IP}/login | \
grep -oP 'id="challenge-nonce"[^>]*value="\K[^"]+')
if [ -z "$NONCE" ]; then
echo "Failed to get login challenge"
return 1
fi
PASSWORD_HASH=$(echo -n "$PASSWORD" | sha256sum | awk '{print $1}')
RESPONSE=$(echo -n "${NONCE}:${PASSWORD_HASH}" | sha256sum | awk '{print $1}')
curl -s -b cookies.txt -c cookies.txt -X POST http://${CAMERA_IP}/login \
-d "challenge_response=${RESPONSE}" > /dev/null
return 0
}
# Authenticate
if ! authenticate; then
echo "Authentication failed"
exit 1
fi
# Upload VM image without activating it
echo "Uploading VM image to camera..."
RESPONSE=$(curl -s -b cookies.txt -F "file=@${IMAGE_FILE}" \
"http://${CAMERA_IP}/vm/image?set_active=false")
if echo "$RESPONSE" | grep -q '"success":true'; then
echo "Upload successful!"
else
echo "Upload failed:"
echo "$RESPONSE"
exit 1
fi
# Activate the uploaded image
echo "Activating new VM image..."
IMAGE_NAME="${IMAGE_FILE%.tar.gz}"
curl -s -b cookies.txt -X POST http://${CAMERA_IP}/vm/select_image \
-d "image_name=${IMAGE_NAME}"
echo "VM is restarting with new image."
情報
このスクリプトは、VM内を含め、カメラへのネットワークアクセスを持つ任意のシステムから実行できます。VMから実行した場合、スクリプトは新しいイメージをアップロードし、アクティベーション後にVMは新しいイメージで再起動します。これにより、VMの自己アップデートが可能になります。
VM Control Web Interface#
インタラクティブな管理を行うには、Smart blaze VM ControlのWebインターフェイスにアクセスしてください:
Webインターフェイスは、以下のタスクを実行するためのグラフィカルユーザーインターフェイスを提供します。
- VMステータスの表示
- VMのライフサイクルの制御(開始/停止/再起動)
- ネットワーク設定の構成
- VMイメージのアップロードと管理
- ディスク使用量の監視
- パスワードの変更
情報
Webインターフェースでは、REST APIと同じ認証メカニズムが使用されます。
詳細情報#
- 初期セットアップと構成の詳細については、Getting Startedを参照してください。