温度・湿度・気圧・二酸化炭素濃度をLINEに投稿
BME280で測定した温度・湿度・気圧と、MH-Z19Cで測定した二酸化炭素濃度をWEBIOPiを使って、ブラウザに表示させることは以前記事にしました。しかし、このときは、家の中のWiFiの範囲だけの利用でした。外にいてもデータが見られるようにするためにLINEに投稿する仕組みを作ってみました。各データはcronの機能を使って10分ごとに測定し、CSVファイルに保存しています。この測定のタイミングで、LINEにデータを送出することも考えたのですが、10分ごとにスマホが受信するのもうっとうしいと思い、1時間ごとに朝5時~夜10時まで18回送信することにしました。
LINE Notifyでトークンを発行する
1.LINE Notifyにアクセスします。
2.LINEのユーザIDとパスワードを使ってログインします。
3.右上のメニューから、「マイページ」へ移動します。
4.画面下の「トークンを発行する」ボタンをクリックします。
5.以下の内容を設定します。
- トークン名:任意の名前
- 通知を送信するトークルーム:1:1でLINE Notifyから通知を受け取る
6.「発行する」ボタンを押下する。
7.画面上に表示されるトークンをコピーして、テキストファイルに保存する。
8.「閉じる」ボタンを押下する。
9.マイページに「連携中サービス」として、登録した内容が表示される。
Pythonのコード line_send.py
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | #!/usr/bin/env python # -*- coding: utf-8 -*- import requests import datetime def data_read(): dir_path = '/home/pi/bme280-data/' today = datetime.datetime.now() filename = today.strftime( '%Y%m%d' ) + 'New' f = open (dir_path + filename + '.csv' , 'r' ) data = f.read().splitlines() f.close() data_new = data[ - 1 ].split( ',' ) daytime = data_new[ 0 ].split() data_str = "{},{}の\n気温:{:.2f}℃\n湿度:{:.2f}%\n気圧:{:.2f}hPa\n二酸化炭素濃度:{}ppmです" . format (daytime[ 0 ],daytime[ 1 ], float (data_new[ 1 ]), float (data_new[ 2 ]), float (data_new[ 3 ]), int (data_new[ 4 ])) return data_str token = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" headers = { "Authorization" : "Bearer " + token} message = data_read() payload = { "message" : message} r = requests.post(url, headers = headers, params = payload) |
token = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" には、取得したトークンを貼り付けてください。
cronの設定は次の通りです。
2 5-22 * * * sudo python3 /home/pi/BME280/line_send.py
これで、朝5:02から夜22:02まで、1時間おきにLINEにデータが送信されます。
追伸:1時間ごとの送信も、かなり頻雑でしたので、今は、6,12,18,0時の4回にしています。