前提条件
MacOS X El Capitanでは動作しません。
- iot-dataコマンドは、OpenSSL 1.0.1以上が必要となるため、この手順はEC2インスタンス上などで実施してください。
変数の設定(EC2)
export AWS_ACCESS_KEY_ID='アクセスキーID'
export AWS_SECRET_ACCESS_KEY='シークレットアクセスキーID'
IoTへの権限
AWS IoTに対してフル権限があること。
AWS CLIのバージョン
以下のバージョンで動作確認済
- AWS CLI 1.11.47
コマンド
aws --version
結果(例)
aws-cli/1.11.49 Python/2.7.10 Darwin/15.6.0 botocore/1.5.12
バージョンが古い場合は最新版に更新しましょう。
コマンド
sudo -H pip install -U awscli
ダミーデバイス(EC2)の構築済み
- 準備
=======
0.1. リージョンの決定
構築するリージョンを決めます。 (カレントユーザが利用するカレントリージ
ョンも切り変わります。)
コマンド(東京リージョンの場合)
export AWS_DEFAULT_REGION='ap-northeast-1'
0.2. プロファイルの確認
プロファイルが想定のものになっていることを確認します。
コマンド
aws configure list
結果(例)
Name Value Type Location
---- ----- ---- --------
profile administrator-prjz-mbp13 env AWS_DEFAULT_PROFILE
access_key ****************XXXX shared-credentials-file
secret_key ****************XXXX shared-credentials-file
region ap-northeast-1 env AWS_DEFAULT_REGION
AssumeRoleを利用している場合はprofileが ''と表示されます。 そ
れ以外のときにprofileが '' と表示される場合は、以下を実行して
ください。
変数の設定:
export AWS_DEFAULT_PROFILE=<IAMユーザ名>
0.3. モノ名の指定
変数の設定
IOT_THING_NAME='handson-thing-20170220'
1. 事前作業
2. Shadowの中でdummy内の変数を制御
2.1. Shadowの確認
変数の設定
FILE_OUTPUT='result-dummy-before.json'
コマンド
aws iot-data get-thing-shadow \
--thing-name ${IOT_THING_NAME} \
${FILE_OUTPUT} \
&& cat ${FILE_OUTPUT}
結果(例)
An error occurred (ResourceNotFoundException) when calling the GetThingShadow operation: No shadow exists with name: 'handson-thing-20170220'
2.2. Shadow作成
変数の設定
FILE_OUTPUT='result-dummy-01.json'
IOT_DATA_PAYLOAD='{"state":{"reported":{"wait_time":20, "signal":"green"}}}'
コマンド
echo ${IOT_DATA_PAYLOAD} | jsonlint
結果
{
"state": {
"reported": {
"wait_time": 20,
"signal": "green"
}
}
}
変数の確認
cat << ETX
IOT_THING_NAME: ${IOT_THING_NAME}
IOT_DATA_PAYLOAD: ${IOT_DATA_PAYLOAD}
FILE_OUTPUT: ${FILE_OUTPUT}
ETX
コマンド
aws iot-data update-thing-shadow \
--thing-name ${IOT_THING_NAME} \
--payload "${IOT_DATA_PAYLOAD}" \
${FILE_OUTPUT} \
&& cat ${FILE_OUTPUT}
結果(例)
{"state":{"reported":{"wait_time":20,"signal":"green"}},"metadata":{"reported":{"wait_time":{"timestamp":1487505988},"signal":{"timestamp":1487505988}}},"version":1,"timestamp":1487505988}
2.3. shadow update
変数の設定
FILE_OUTPUT='result-shadow-01.json'
IOT_DATA_PAYLOAD='{"state":{"desired":{"wait_time":20, "signal":"green"}}}'
コマンド
echo ${IOT_DATA_PAYLOAD} | jsonlint
結果
{
"state": {
"desired": {
"wait_time": 20,
"signal": "green"
}
}
}
変数の確認
cat << ETX
IOT_THING_NAME: ${IOT_THING_NAME}
IOT_DATA_PAYLOAD: ${IOT_DATA_PAYLOAD}
FILE_OUTPUT: ${FILE_OUTPUT}
ETX
コマンド
aws iot-data update-thing-shadow \
--thing-name ${IOT_THING_NAME} \
--payload "${IOT_DATA_PAYLOAD}" \
${FILE_OUTPUT} \
&& cat ${FILE_OUTPUT}
結果(例)
{"state":{"desired":{"wait_time":20,"signal":"green"}},"metadata":{"desired":{"wait_time":{"timestamp":1487506160},"signal":{"timestamp":1487506160}}},"version":2,"timestamp":1487506160}
2.4. shadowの確認
変数の設定
FILE_OUTPUT='result-shadow-after.json'
コマンド
aws iot-data get-thing-shadow \
--thing-name ${IOT_THING_NAME} \
${FILE_OUTPUT} \
&& cat ${FILE_OUTPUT}
結果(例)
{"state":{"desired":{"wait_time":20,"signal":"green"},"reported":{"wait_time":20,"signal":"green"}},"metadata":{"desired":{"wait_time":{"timestamp":1487506160},"signal":{"timestamp":1487506160}},"reported":{"wait_time":{"timestamp":1487505988},"signal":{"timestamp":1487505988}}},"version":2,"timestamp":1487506296}
2.5. ダミーデバイス (EC2)
コマンド(EC2)
cd ~/shadow/ \
&& python dummy_shadow.py
結果
start readConfig func
start connct shadow
shadow connect
satrt subscribe shadow
send currnet status to cloud-shadow
{"state":{"reported":{"wait_time":10, "signal":"green"}}}
ダミーデバイスのプログラム停止 (EC2)
Ctrl+Cでプログラムを停止します。
3. Shadowの変数でプログラムを終了させる(電源管理イメージ)
3.1. Thing名の変更
ここでは、Thing名を現時点で存在しない「handson-thing-20170220_power」に変更します。
変数の設定
IOT_THING_NAME="${IOT_THING_NAME}_power"
3.2. Shadow更新
変数の設定
FILE_OUTPUT='result-multi-01.json'
IOT_DATA_PAYLOAD='{"state":{"desired":{"power":"on"}}}'
コマンド
echo ${IOT_DATA_PAYLOAD} | jsonlint
結果
{
"state": {
"desired": {
"power": "on"
}
}
}
変数の確認
cat << ETX
IOT_THING_NAME: ${IOT_THING_NAME}
IOT_DATA_PAYLOAD: ${IOT_DATA_PAYLOAD}
FILE_OUTPUT: ${FILE_OUTPUT}
ETX
コマンド
aws iot-data update-thing-shadow \
--thing-name ${IOT_THING_NAME} \
--payload "${IOT_DATA_PAYLOAD}" \
${FILE_OUTPUT} \
&& cat ${FILE_OUTPUT}
結果(例)
{"state":{"desired":{"power":"on"}},"metadata":{"desired":{"power":{"timestamp":1487506888}}},"version":3,"timestamp":1487506888}
3.3. shadowの確認
変数の設定
FILE_OUTPUT='result-shadow-after.json'
コマンド
aws iot-data get-thing-shadow \
--thing-name ${IOT_THING_NAME} \
${FILE_OUTPUT} \
&& cat ${FILE_OUTPUT}
結果(例)
{"state":{"desired":{"wait_time":20,"signal":"green","power":"on"},"reported":{"wait_time":20,"signal":"green"},"delta":{"power":"on"}},"metadata":{"desired":{"wait_time":{"timestamp":1487506160},"signal":{"timestamp":1487506160},"power":{"timestamp":1487506888}},"reported":{"wait_time":{"timestamp":1487505988},"signal":{"timestamp":1487505988}}},"version":3,"timestamp":1487506913}
3.4. ダミーデバイス (EC2)
コマンド(EC2)
cd ~/shadow/ \
&& python multi_shadow.py
結果
start readConfig func
satrt subscribe power-shadow
start connct shadow tmp01_power
Send power on to shadow name
satrt subscribe config-shadow
start connct shadow tmp01
send currnet status to cloud-shadow
{"state":{"reported":{"wait_time":10, "signal":"green"}}}
ダミーデバイスのプログラム停止 (EC2)
Ctrl+Cでプログラムを停止します。