API で取得した Nature Remo E lite のデータをテキストファイルに書き出す

Hitoshi Arakawa | 2024/02/06 Tue 04:11

Nature Remo E lite のデータを API で取得する方法について書いた。

Nature Remo E lite のデータを API で取得する
https://www.hitoshiarakawa.com/blogs/2024/2024-02-05_nature-remo-api/

取得した現在の消費電力の値をテキストファイルに書き出すことにした。

今回は /2024/2024-02 のような /{年}/{年}-{月} のディレクトリを作り、その中に 2024-02-04.txt のような {年}-{月}-{日}.txt というテキストファイルに書き込むとする。

以下のように {タイムスタンプ} {現在の消費電力} という形式で記述し、同一の日付内ではテキストファイルの末尾に追記していく。

2024/02/04 15:46:36 892
2024/02/04 15:47:13 964
2024/02/04 15:51:15 900
...
環境:macOS Ventura 13.5(英語環境)

(1)以下のようなシェルスクリプトを作成する。ファイル名は power-log.sh とする。

#!/bin/sh

date=`date '+%Y/%m/%d %H:%M:%S'`

result=`curl -X GET "https://api.nature.global/1/appliances" -k --header "Authorization: Bearer {アクセストークン}" | jq -r '.[].smart_meter | .echonetlite_properties | .[5].val'`

if [ $? -gt 0 ]; then
    exit 1;
fi

mkdir -p $(date +%Y)/$(date +%Y-%m)

echo "${date} ${result}" >> $(date +%Y)/$(date +%Y-%m)/$(date +%Y-%m-%d).txt

(2)1のシェルスクリプトに実行権限を与える。

$ sudo chmod 755 power-log.sh

(3)以下のコマンドでシェルスクリプトを実行できる。

$ ./power-log.sh

cron を使えば定期的にシェルスクリプトを実行できるが、注意する点は、シェルスクリプト内の jq コマンドは絶対パスで指定する必要があることだ(cron 内のコマンドは、OS デフォルトのコマンド以外は絶対パスで指定する必要があるようだ)。以下のコマンドで jq コマンドのパスを調べる。

$ which jq
/usr/local/bin/jq

よって、シェルスクリプト内の jq の部分を /usr/local/bin/jq にする。

参考:
コマンドの実行結果をファイルに出力する - Windows - Project Group
https://www.projectgroup.info/tips/Windows/cmd_0002.html

macos - Create folder with Todays Date, create subfolder and copy all files into it - Bash - Stack Overflow
https://stackoverflow.com/questions/52213052/create-folder-with-todays-date-create-subfolder-and-copy-all-files-into-it-ba

ターミナルからファイルに文字を書き込む方法 | Armadilloサイト
https://armadillo.atmark-techno.com/blog/15288/10520

Raspberry Pi で温度・湿度・気圧を Google Spreadsheet に記録する2|荒川仁志
https://note.com/hitoshiarakawa/n/n43180b80bca8

cronでシェルスクリプトが動作しない時に確認すべきこと #ShellScript - Qiita
https://qiita.com/halpas/items/74e8c2ed2b94588cb362

Amazon.co.jp: Nature 電力モニタリングシステム Nature Remo E lite エネマネ 節電 電気料金の目安を表示 電気使用量を可視化: 家電&カメラ
https://amzn.to/3Sn0PDk