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