
（距離検知の構成）

モニタ装置
My IOTサービス
Automate
	ペット見守りサーバ側のアクション
	※こっち側では学習情報を元にアクセションを選択してモニタ装置に指示を出すが、今回は簡単のために、指定距離に達したらアクションを行うようにする(２段階？)
	モニタ装置側のアクションは？



（イベントの流れ）

モニタ装置                                              Myサーバ側
　距離採取
	   -> MQTT -> in_topic -> MQTT -> Automate  -> distance_check.py
				   	   
							判定など。。。。

							   (1)通知         -> slackへのメッセージ送信
	   <-      <- out_topic <-      <-          <-     (2)アクション
　Automate
     スピーカーやライト操作コマンド実行




（設定やプログラム）


１、トピック

  in_topic
	アプリID/MONITOR/monitor

  out_topic
	アプリID/MONITOR/event



２、近づきモニタ

　センサーから取得したデータを送る
　前回送信から変化がなければ送らない
　　※本当は送ってハートビートにした方が良いかと思うが、通信料削減を優先。　　MQTTでクライアント切断を検知してsubscriber側でイベントを受けられるといいけど。できたっけ？


３、Myサーバへの送信データ形式(JSN)
{
	{"ID":"装置ID", "TYPE":"DISTANCE", "DISTANCE":距離(cm)}
}



４、MyサーバAutomate
　距離センサーのデータを拾って、指定閾値を超えた場合にイベントを送る

	Automateのconfig.json用のactions設定
	実行コマンド
	実行コマンドの設定ファイル


"actions":[{"base":"./CMD/", "in_broker":"127.0.0.1:1883", "in_topic":"ペット見守り/MONITOR/monitor", "out_broker":"127.0.0.1:1883", "out_topic":"ペット見守り/MONITOR/event", "commands":["distance_check.py"],"retry_max":0,"retry_interval":30}]


５、distance_check.py


環境変数MYSERVER_AUTOMATE_CONFIG_PATHで設定ファイルの配置場所を設定しないとならない。
export MYSERVER_AUTOMATE_CONFIG_PATH=`pwd`/


・設定ファイル読み込み
・メッセージ解析
・レベル判定
・アクション実行
　メッセージ送信の場合はここでslack.py実行
　アクション指示の場合はMQTTメッセージpublish



６、アクション指示側の設定

distance_check.configの書式
{
	"ID":＜モニタ装置ID＞,
	"DISTANCE":[＜閾値1＞,＜閾値2＞,＜閾値3＞],
	"CRITICAL":[{"TARGET":＜ターゲット＞,"OPTION":＜オプション＞}],
	"WARNING":[{"TARGET":＜ターゲット＞,"OPTION":＜オプション＞}],
	"NORMAL":[{"TARGET":＜ターゲット＞,"OPTION":＜オプション＞}]
}

閾値1	緊急レベル：緊急レベルのアクション指示
閾値2	警戒レベル：警戒レベルのアクション指示
閾値3	安全レベル：ここまで離れたら警戒/緊急を解除

例)
警戒レベルではメッセージを送る
緊急レベルでは警報を鳴らす
とか。。。

＜TARGET＞
MESSAGE
SOUND

MESSAGE以外のターゲットは１つだけ指定可能。
最大で、MESAGE+他の２アクションのみ。

MESSAGEはslackにメッセージを送る
パラメータは"token channel"

SOUNDはモニタ装置側で音を鳴らす
パラメータは秒数

（設定例）
{
}





７、アクション指示(JSON)
{
	{"ID":"装置ID", "TYPE":"ACTION", "TARGET":ターゲット, "OPTION":オプション}
}

IDはアクションを実行する装置IDを指定する。
TYPEは"ACTION"固定。
TARGETは操作対象を指定する。
OPTIONはコマンドに渡すオプション文字列



＜ターゲットの例＞
 TARGET        OPTION            説明
-----------+--------------+---------------------------------------------------------------------------------------+
 SOUND       -|秒数         スピーカから音を鳴らす
                            秒数指定がある場合は指定時間、ない場合はサウンドファイルの最後まで

 LIGHT       ON|OFF|秒数    LEDを点灯する
                            ON:点灯、OFF:消灯、秒数:指定秒数だけ点灯

 PICTURE     送信先URL|-    写真を撮り、送信先URLにPOSTする
-----------+--------------+---------------------------------------------------------------------------------------+
	



８、アクション実行側の設定

distance.pyでは、
・測距
・測距メッセージのpublish
・アクションメッセージのsubscribeおよびアクション実行
を行う。



９、アクション実行側の設定

フォーマット
distance_config.json
{
	"ACTIONS":[{"TARGET":＜ターゲットを識別する文字列＞,"COMMAND":＜実行するコマンド＞},...],
	"CMDDIR":＜コマンドパス＞
}

設定例
{
	"ACTIONS":[{"TARGET":"SOUND","COMMAND":"sound.sh"},
		   {"TARGET":"LIGHT","COMMAND":"light.sh"},
		   {"TARGET":"PICTURE","COMMAND":"photo.py"}]
	]
}


※モニタ装置側の設定ファイルは以下の通り
　ここの、
	client_id
	APP
	mqtt_broker
	interval
　を使って、距離取得プログラムからMQTT Brokerに情報を送る


{
        "APP":"ペット見守り",
        "client_id":"RASPI_MON1",
        "work_dir":"/home/pi/CQ/work",
        "interval": 180,
        "storage_url":"http://192.168.2.8:3000/storage/",
        "mqtt_broker":"192.168.2.8:1883",
        "pic_size":[1920, 1080]
}


