-
Notifications
You must be signed in to change notification settings - Fork 0
各種仕様
ここでは部室の端末が提供するサーバ機能について,後々の機能追加のために,その仕様をまとめて記載します.
この記事の記載時現在,それまで部室扉に手動で行っていた部室の施錠状態の表示を,電子ペーパを部室扉に設置することで自動化しています.
電子ペーパの表示を多くのアプリケーションから変更するために,電子ペーパ制御用のサーバをPythonで記述しています.ここでは,他の追加アプリケーション開発者向けに電子ペーパ制御サーバの通信仕様を記載します.
電子ペーパ制御サーバは8081番ポートでHTTPリクエストを待ち受けています.通信には常にBOMなしUTF-8エンコードのJSON形式が用いられます.
更新は/update
にPOSTPUTメソッドでリクエストします.送信する設定データはPOSTパラメータのdata
に格納します.以下に画像更新の一例を示します.
現在の最新のmasterブランチでの実装はPOSTメソッドになっていますが,PUTメソッドへの移行を予定しています.PUTメソッドへの移行後もPOSTメソッドでのリクエストを受け付ける実装を予定しています.
{
"imgpath": "disp-logo.png",
"txtlist": {
"line0": {
"text": "次回の定例会は",
"pos": [300, 280]
},
"line1": {
"text": "12月10日(月) 18:40-\n3号館3302教室",
"pos": [300, 320],
"size": 28
}
}
}
このJSONデータでは,サーバ側にある./img/disp-logo.pngの画像を基底とし,指定された座標に指定された文字サイズで文字列を描画してから画面表示を更新しています.このリクエストに対し,サーバが返す応答は以下のようになります.
{
"status": true,
"data": {
"imgpath": "disp-logo.png",
"txtlist": {
"line0": {
"text": "次回の定例会は",
"pos": [300, 280]
},
"line1": {
"text": "12月10日(月) 18:40-\n3号館3302教室",
"pos": [300, 320],
"size": 28
}
}
}
}
"status"で更新実行の結果(ここでは更新成功=true),"data"で現在の電子ペーパの設定を返しています.
電子ペーパを複数のアプリケーションから利用することを想定しているため,リクエストから必要に応じて"imgpath","txtlist"を省略することができます.省略された場合,以前の設定がそのまま引き継がれて画像更新が行われます.もし以前セットした文字列を削除したい場合,その文字列のキー(例えば"line1"など)に対して空のオブジェクト"line1": {}
を指定します.
もし現在の電子ペーパの設定のみを取得したい場合,/status
にGETメソッドでアクセスします.これについては次節も参照してください.
各オブジェクトに対して設定できるパラメータの詳細は次のようになっています.
root :: Object
├- imgpath :: String
│ 画像ファイル名../img/[imgpath]を参照する.
└- txtlist :: Object
│ テキストオブジェクトのリスト.
└- "key" :: Object
│ テキストオブジェクトに対するキー.
│ アプリケーション側で識別用に自由に設定する.
├- text :: String
│ 表示するテキスト.
├- pos :: [Int]
│ テキストの描画開始(左上)座標.[x, y]で記述.
├- size :: Int
│ テキストの大きさ.デフォルト: 36
└- font :: String
フォントファイル名.TrueTypeのみ利用可能.
./img/fonts/[font]を参照する.
デフォルト: ipaexg.ttf
現在は追加でipaexm.ttf(明朝体)が利用可能
/status
にGETメソッドでアクセスすることで、設定を変更することなく現在の設定を取得することができます.形式は上記と同様,
{
“status”: bool,
“data”: Object
}
となります.