API
著作権とライセンスについて~
この文書は、オープンソースのMycodoプロジェクトをベースにしたAoTシステムのドキュメントです。
- Copyright (C) 2025 AoT
- Copyright (C) 2015–2022 Kyle T. Gabriel
GNU GPLv3ライセンスの下で配布されています。
REST API~
AoTはREST APIを提供しています(詳細はAPIエンドポイントのドキュメントを参照してください)。
APIとはApplication Programming Interfaceの略で、簡単に言えばプログラム同士が通信できるようにする一連のルールです。インターネットを通じて、データや機能を一貫した形式で公開します。
RESTはRepresentational State Transfer(表現状態転送)の略です。分散システムが一貫したインターフェースを公開する方法を説明するアーキテクチャパターンです。「REST API」という用語が使われるとき、一般にはHTTPプロトコル上のあらかじめ定められたURL群を通じてアクセスするAPIを指します。これらのURLはさまざまなリソースを表しており、そこでアクセスできる情報やコンテンツはJSON、HTML、音声ファイル、画像などとして返される場合があります。多くの場合、1つのリソースにはHTTPで実行できる1つ以上のメソッド(GET、POST、PUT、DELETE)があります。
認証~
APIキーは管理 → システム管理 → ユーザーでユーザーを編集し、APIキーを生成を選ぶと発行できます。キーは128バイトのランダムな値で、生成された瞬間に一度だけbase64エンコードされた文字列として表示されます — AoTはキー自体ではなく一方向ハッシュのみを保存するため、後から再表示することはできません。紛失した場合は新しく生成してください。詳しくはセキュリティを参照してください。
AoTは複数の認証方式に対応しています。すべてのAPIリクエストはHTTPS経由で行う必要があります。平文HTTP経由の呼び出しは失敗します。認証なしのAPIリクエストも失敗します。
Bashの例~
curlを使うことができますが、署名なしのSSL証明書を使えるように-kを付けるか、独自の証明書とドメインを使う必要があります。
curl -k -v -X GET "https://127.0.0.1/api/settings/users" -H "authorization: Basic YOUR_API_KEY" -H "accept: application/vnd.aot.v1+json"
curl -k -v -X GET "https://127.0.0.1/api/settings/users" -H "X-API-KEY: YOUR_API_KEY" -H "accept: application/vnd.aot.v1+json"
APIキーは?api_key=クエリパラメータとして渡すこともできますが、この方式は 非推奨であり、将来のリリースで削除される予定です:
# 非推奨 — 上記のいずれかのヘッダー方式を使ってください
curl -k -v -X GET "https://127.0.0.1/api/settings/users?api_key=YOUR_API_KEY" -H "accept: application/vnd.aot.v1+json"
クエリ文字列に入れたキーはWebサーバーのアクセスログ、リバースプロキシのログ、 Refererヘッダーに記録されるため、それらを閲覧できる人には事実上公開された 状態になります。この方式でのリクエストは非推奨の警告とともにログに記録され、 監査ログ(apikey.url_auth)にも残るため、廃止前に残っている利用箇所を洗い出せます。
Pythonの例(GET)~
import json
import requests
ip_address = '127.0.0.1'
api_key = 'YOUR_API_KEY'
endpoint = 'settings/inputs'
url = 'https://{ip}/api/{ep}'.format(ip=ip_address, ep=endpoint)
headers = {
'Accept': 'application/vnd.aot.v1+json',
'X-API-KEY': api_key
}
response = requests.get(url, headers=headers, verify=False)
print("レスポンスステータス: {}".format(response.status_code))
print("レスポンスヘッダー: {}".format(response.headers))
response_dict = json.loads(response.text)
print("レスポンス辞書: {}".format(response_dict))
Pythonの例(POST)~
import json
import requests
import urllib3
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
ip_address = '127.0.0.1'
api_key = 'YOUR_API_KEY'
endpoint = 'outputs/3f5a4806-c830-432d-b329-7821da8336e4'
url = 'https://{ip}/api/{ep}'.format(ip=ip_address, ep=endpoint)
data = {"state": True} # 出力をオンにします
headers = {
'Accept': 'application/vnd.aot.v1+json',
'X-API-KEY': api_key
}
response = requests.post(url, json=data, headers=headers, verify=False)
print("レスポンスステータス: {}".format(response.status_code))
print("レスポンスヘッダー: {}".format(response.headers))
response_dict = json.loads(response.text)
print("レスポンス辞書: {}".format(response_dict))
エラー~
AoTはAPIリクエストの成功・失敗を表すために、一般的なHTTPレスポンスコードを使用します。おおむね、2xx台のコードは成功を示します。4xx台のコードは、渡された情報が原因で失敗したエラーを示します(たとえば必須パラメータが欠けている、決済が失敗した、など)。5xx台のコードはAoTサーバー側のエラーを示します(こちらはまれです)。
プログラム側で処理できる4xxエラー(たとえばカードが拒否された場合など)には、報告された問題を簡潔に説明するエラーコードが含まれます。
エンドポイント~
APIのバージョンを判別するため、ベンダー固有のコンテンツタイプヘッダーを含める必要があります。バージョン1の場合、上記の例にもある通り "application/vnd.aot.v1+json" です。
https://{RASPBERRY_PI_IP_ADDRESS}/api にアクセスすると、お使いのAoTインストールにおける現在のAPIエンドポイントのドキュメントを確認できます。
最新のAPIバージョンのドキュメントはHTML形式でも公開されています: AoT API Documentation <https://aot-inc.github.io/AoT/aot-api.html>__
デーモン制御オブジェクト~
DaemonControl()~
class aot_client.DaemonControl (pyro_uri='PYRO:aot.pyro_server@127.0.0.1:9080', pyro_timeout=None)
aotクライアントオブジェクトは、aotデーモンと通信したりinfluxdbデータベースから情報を照会したりするためのメソッドを実装しています。
使用例:
パラメータ:
- pyro_uri - デーモンへの接続に使うPyro5のuriです。
- pyro_timeout - Pyro5のタイムアウト時間です。
controller_activate()~
controller_activate (controller_id)
コントローラーを有効化します。
パラメータ:
- controller_type - 有効化するコントローラーの種類です。指定できる値は "Function"、"Input"、"Output"、"PID"、"Trigger"、"Function" です。
- controller_id - 有効化するコントローラーの一意のIDです。
controller_deactivate()~
controller_deactivate (controller_id)
コントローラーを無効化します。
パラメータ:
- controller_type - 無効化するコントローラーの種類です。指定できる値は "Conditional"、"Input"、"Output"、"PID"、"Trigger"、"Function" です。
- controller_id - 無効化するコントローラーの一意のIDです。
get_condition_measurement()~
get_condition_measurement (condition_id)
条件付き機能の条件から測定値を取得します。
パラメータ:
- condition_id - コントローラーの一意のIDです。
get_condition_measurement_dict()~
get_condition_measurement_dict (condition_id)
条件付き機能の条件から測定値の辞書を取得します。
パラメータ:
- condition_id - コントローラーの一意のIDです。
input_force_measurements()~
input_force_measurements (input_id)
入力に測定を強制的に実行させます。
パラメータ:
- input_id - コントローラーの一意のIDです。
lcd_backlight()~
lcd_backlight (lcd_id, state)
LCDがこの機能に対応している場合に、そのバックライトのオン・オフを切り替えます。
パラメータ:
- lcd_id - コントローラーの一意のIDです。
- state - LCDバックライトの状態です。False(オフ)、True(オン)のいずれかです。
lcd_flash()~
lcd_flash (lcd_id, state)
LCDがこの機能に対応している場合に、バックライトの点滅を開始または停止します。
パラメータ:
- lcd_id - コントローラーの一意のIDです。
- state - LCD点滅の状態です。False(停止)、True(開始)のいずれかです。
lcd_reset()~
lcd_reset (lcd_id)
LCDを初期の起動状態にリセットします。画面を消去したり、表示の不具合を直したり、点滅を止めたりするのに使えます。
パラメータ:
- lcd_id - コントローラーの一意のIDです。
output_off()~
output_off (output_id, trigger_conditionals=True)
出力をオフにします。
パラメータ:
- output_id - 出力の一意のIDです。
- trigger_conditionals - 状態変化を監視しているコントローラーをトリガーするかどうかです。
output_on()~
output_on (output_id, output_type='sec', amount=0.0, min_off=0.0, trigger_conditionals=True)
出力をオンにします。
パラメータ:
- output_id - 出力の一意のIDです。
- output_type - 出力モジュールに送る出力タイプです(例: "sec"、"pwm"、"vol")。
- amount - 出力モジュールに送る量です。
- min_off - オンにした後、出力がオフのままでいなければならない最小時間です。
- trigger_conditionals - 状態変化を監視しているコントローラーをトリガーするかどうかです。
output_on_off()~
output_on_off (output_id, state, output_type='sec', amount=0.0,)
出力をオン・オフします。
パラメータ:
- output_id - 出力の一意のIDです。
- state - 出力をオンにするかオフにするかを示します。指定できる値は "on"、"off" です。
- output_type - 出力モジュールに送る出力タイプです(例: "sec"、"pwm"、"vol")。
- amount - 出力モジュールに送る量です。
output_sec_currently_on()~
output_sec_currently_on (output_id)
その出力がオンになっている継続時間を秒単位で取得します。
パラメータ:
- output_id - 出力の一意のIDです。
output_setup()~
output_setup (action, output_id)
出力をセットアップします(例: データベースから設定を読み込み/再読み込みする、ピンやクラスを初期化する、など)。
パラメータ:
- action - 出力に実行させるアクションです。指定できる値は "Add"、"Delete"、"Modify" です。
- output_id - 出力の一意のIDです。
output_state()~
output_state (output_id)
出力の状態を取得します。"on"、"off"、またはデューティサイクルの値を返します。
パラメータ:
- output_id - 出力の一意のIDです。
pid_get()~
pid_get (pid_id, setting)
PIDコントローラーのパラメータを取得します。
パラメータ:
- pid_id - コントローラーの一意のIDです。
- setting - 取得するオプションです。指定できる値は "setpoint"、"error"、"integrator"、"derivator"、"kp"、"ki"、"kd" です。
pid_hold()~
pid_hold (pid_id)
PIDコントローラーを保留状態にします。
パラメータ:
- pid_id - コントローラーの一意のIDです。
pid_mod()~
pid_mod (pid_id)
実行中のPIDコントローラーの変数を再読み込みまたは再初期化します。
パラメータ:
- pid_id - コントローラーの一意のIDです。
pid_pause()~
pid_pause (pid_id)
PIDコントローラーを一時停止状態にします。
パラメータ:
- pid_id - コントローラーの一意のIDです。
pid_resume()~
pid_resume (pid_id)
PIDコントローラーを再開状態にします。
パラメータ:
- pid_id - コントローラーの一意のIDです。
pid_set()~
pid_set (pid_id, setting, value)
実行中のPIDコントローラーのパラメータを設定します。
パラメータ:
- pid_id - コントローラーの一意のIDです。
- setting - 設定するオプションです。指定できる値は "setpoint"、"method"、"integrator"、"derivator"、"kp"、"ki"、"kd" です。
- value - 設定する値です。
module_function()~
module_function (controller_type, unique_id, button_id, args_dict, thread=True, return_from_function=False)
特定のモジュール(Input、Outputなど)のカスタム関数を直接実行します。これは主にセンサーのキャリブレーション作業に使われます。
パラメータ:
- controller_type: モジュールの種類です(例: "Input"、"Output")
- unique_id: モジュールの一意のIDです
- button_id: 実行する関数のIDです(例: "mid_calibrate"、"clear_calibrate")
- args_dict: 関数に渡すパラメータの辞書です
refresh_daemon_conditional_settings()~
refresh_daemon_conditional_settings (unique_id)
実行中の条件付き機能の設定を再読み込みします。
refresh_daemon_misc_settings()~
refresh_daemon_misc_settings ()
実行中のデーモンのその他の設定を、データベースの値から再読み込みします。
refresh_daemon_trigger_settings()~
refresh_daemon_trigger_settings (unique_id)
実行中のトリガーコントローラーの設定を再読み込みします。
check_daemon()~
check_daemon ()
デーモンの稼働状況を確認します。"GOOD" またはエラーメッセージを返します。
[!NOTE] AIエージェント向けの構造化されたAPI仕様は
ai_docs/api.jsonファイルにあります。