シェルスクリプトでJSON の処理

シェルスクリプトで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 で文字列を数値変換して実行可能

bashで文字列を数値に変換して数値計算する方法

では数値変換による計算の例が載っている

【 expr 】コマンド――計算式や論理式を評価する

では論理式での例が載っている

これを元に

## 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

というようにすれば消灯させることができる

こちらは後々人感センサーと合わせて処理すれば
退席したら照明を消すようなものを作成できる

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です