-
Notifications
You must be signed in to change notification settings - Fork 0
各種仕様
ここでは部室の端末が提供するサーバ機能について,後々の機能追加のために,その仕様をまとめて記載します.
この記事の記載時現在,それまで部室扉に手動で行っていた部室の施錠状態の表示を,電子ペーパを部室扉に設置することで自動化しています.
電子ペーパの表示を多くのアプリケーションから変更するために,電子ペーパ制御用のサーバをPythonで記述しています.ここでは,他の追加アプリケーション開発者向けに電子ペーパ制御サーバの通信仕様を記載します.
電子ペーパ制御サーバはUDP5001番ポートで常時通信を待ち受けています.情報のやり取りはBOM無しUTF-8エンコードのJSON形式で行われます.以下に画像更新の一例を示します.
{
"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の画像を基底とし,指定された座標に指定された文字サイズで文字列を描画してから画面表示を更新するものです.このリクエストに対し,サーバが返す応答は以下のようになります.
{
"res": true,
"epddata": {
"imgpath": "disp-logo.png",
"txtlist": {
"line0": {
"text": "次回の定例会は",
"pos": [300, 280]
},
"line1": {
"text": "12月10日(月) 18:40-\n3号館3302教室",
"pos": [300, 320],
"size": 28
}
}
}
}
"res"で更新実行の結果(ここでは更新成功=true),"epddata"で現在の電子ペーパの設定を返しています.
電子ペーパを複数のアプリケーションから利用することを想定しているため,リクエストから必要に応じて"imgpath","txtlist"を省略することができます.省略された場合,以前の設定がそのまま引き継がれて画像更新が行われます.もし以前セットした文字列を削除したい場合,その文字列のキー(例えば"line1"など)に対して空のオブジェクト"line1": {}
を指定します.
もし現在の電子ペーパの設定のみを取得したい場合,空オブジェクトのリクエスト{}
を送信します.
上記通信を行うための簡単なPythonスクリプトを用意しているので,手動で更新する際などにご活用ください.
#!/usr/bin/env python3
import socket
import sys
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.settimeout(10)
addr = sys.argv[1].split(":")
if len(sys.argv) < 3: data = sys.stdin.buffer.read()
else: data = sys.argv[2].encode("utf-8")
sock.sendto(data, (addr[0], int(addr[1])))
print(sock.recvfrom(3072))
$ ./udpcli.py [address]:[port] [JSON text]
または$ cat [JSON file] | ./udpcli.py [address]:[port]
のようにしてJSONデータを送信できます.
各オブジェクトに対して設定できるパラメータの詳細は次のようになっています.
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