温度・湿度・気圧・二酸化炭素濃度を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
#!/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 url = "https://notify-api.line.me/api/notify" 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回にしています。