温度・湿度・気圧・二酸化炭素濃度を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回にしています。

  • X