シェルスクリプトでJSON の処理
sRemo-R3 で
温湿度や時刻を取得すると
JSONで返ってくるので
これをファイルに保存
なお、これだけでもAmazon Echo で操作することができるけど
自動処理させるのをやりたいので
センサーの代わりに使うことに
curl -H "Authorization: Bearer jgw5E82Ic6BISXjssK4xoKf36XeJIfjHgL53KD69" https://uapi1.sremo.net/user_api/av63hsbsyxq/get_thl > sremo.json
で
curl の結果を
sremo.json に保存
中身は
{"t":28,"h":45,"l":17}
となっている
シェルスクリプトで json を使うには
jq が必要なので
sudo apt-get install jq
でインストール
bashやshなどのsh系スクリプトでJSON形式のデータを読み込む【サンプルプログラムあり】
を参考に
まずはJSONデータの読み込み
## 1. JSONデータを取得 jsonData=`cat sremo.json` #echo $jsonData | jq '.t' temp=$(echo $jsonData | jq '.t') echo $temp
とすればJSONデータから温度の取り出しと表示ができる
ただし、この結果は文字列扱いのため
数値変換しないと if で操作ができない
jq の tonumberで数値変換が可能とのことだが
expr コマンドを使えば
bash で文字列を数値変換して実行可能
では数値変換による計算の例が載っている
では論理式での例が載っている
これを元に
## 1. JSONデータを取得 jsonData=`cat sremo.json` #echo $jsonData | jq '.t' temp=$(echo $jsonData | jq '.t') if [ 'expr $temp >= 25' ]; then curl -H "Authorization: Bearer APIアクセストークン" https://APIサーバ/user_api/sRemo識別子/send_sig?sig=画面番号-a-n-2-1-4-22 fi
とすれば気温が25度以上になれば
22度設定でエアコンが起動するという処理になる
同じように照度25以上なら消灯するようにするのなら
## 1. JSONデータを取得 jsonData=`cat sremo.json` illumi=$(echo $jsonData | jq '.l') if [ 'expr $illumi >= 25' ]; then curl -H "Authorization: Bearer APIアクセストークン" https://APIサーバ/user_api/sRemo識別子/send_sig?sig=画面番号-l-2 fi
というようにすれば消灯させることができる
こちらは後々人感センサーと合わせて処理すれば
退席したら照明を消すようなものを作成できる