ESP-32S NodeMCU-32S Arduino PythonにてLine Notifyによるデータ通知化 「外部からのエアコン制御」への道 その5 番外編

部屋の温度の通知をLine Notifyで行おうという企画です。

まぁ、直接的なエアコンの制御ではないですが、ツールとして良いのではないかな?という感じで作って見ました。

思ったよりも簡単なので、おススメです。

流れは以下になります。

1.Line Notify トークン取得

2.温度を測定する機器の作成(既にあるものを流用)

3.SynologyサーバーにてPythonの実行

では、以下、説明してきます。

1.Line Notify トークン取得

以下のLineのリンクからトークンを取得します。

以下のような画面が開きます。

右上のログオンをクリックしてログオンします。

ログオンしたら、下図の通り、自分のアカウントの所を押して、マイページを押します。

トークンを発行します。

トークンは何かに記録して置いたほうが良いと思います。

自分のアカウントに関わる関係の候補が出ますが、まぁ、通常、自分だけに通知が来れば良いのではないかと思いますので、自分を選択しましたよ。

画面はトークン取得後の画面なので若干違うかも知れませんが、大体こんな感じでLine Notifyの設定は終了です。

2.温度を測定する機器の作成(既にあるものを流用)

以前、作成したESP32による温度測定器を利用します。

下の表示をする装置ですね。

その時の記事↓

そのままESP32のプログラミング部分は変わらずに使います。

便利と言えば便利ですね。

3.SynologyサーバーにてPythonの実行

最後にWebページをPythonにてスクレイピングして、Line Notifyにて送るプログラミングを載せておきます。

これもその前回その時に作成した記事から流用して、Line Notify用にちょっとだけ書き換えたものですので、すぐ出来ました。

# coding: utf-8
from urllib.request import urlopen
from bs4 import BeautifulSoup
import time
import requests

# arduinoサイトを開く
html = urlopen("http://192.168.1.64/")
bsObj = BeautifulSoup(html, "html.parser")
#urlオープンでの安定化時間
time.sleep(3)

# arduinoの表から値をもらう
Temp = bsObj.select('.value')[0].contents[0]
Humi = bsObj.select('.value')[1].contents[0]

# temp,humiの値が--だったら、測定値が出なかったら。
while Temp == "--":

    html.close()

    # arduinoサイトを開く
    html = urlopen("http://192.168.1.64/")
    bsObj = BeautifulSoup(html, "html.parser")
    #urlオープンでの安定化時間
    time.sleep(3)

    # arduinoの表から値をもらう
    Temp = bsObj.select('.value')[0].contents[0]
    Humi = bsObj.select('.value')[1].contents[0]


Temp01 = float(Temp)
Humi01 = float(Humi)

# サイトクローズ
html.close()

#Line notify で送る
Text01 = "温度:" + str(Temp01) + "℃"
Text02 = "湿度:" + str(Humi01) + "%"


def send_line_msg():
    data = {"message": f"\n{Text01}\n{Text02}"}
    # headers
    access_token = 'xxxxxxxxxxxxxxxxxxxxxxxxx' # 発行されたトークンへ置き換える
    headers = {"Authorization": f"Bearer {access_token}"}
    # send massage
    requests.post("https://notify-api.line.me/api/notify", data=data, headers=headers)


if __name__ == "__main__":
    send_line_msg()

で、出来上がったプログラムをSynologyのサーバーでタイムスケジュールで20分毎に動かしてみました。

参考にさせて頂いたサイト↓

最後、設定いじっていたので、ちょっと時間が20分毎では無いですが、途中ちゃんと20分毎に届いていますね。

う~ん。便利かも。。

今回、タイムスケジュールの中で、このスケジュールは、夜間は温度とか別段知りたくないので動かないようにしています。

寝ている時に通知がバンバン来ても、やかましいので。

なので、朝8時~夜20時まで計測した値を通知してくれるようにしました。

しかし、今回、Line Notifyは簡単でしたね。

まぁ、タダで使えるものは何でも使うべしということでしょうか。

これで家の温度の問題はかなり片付いたと思います。

後はグラフ化か~。かなり難しそうだなぁ。。

心折れる感じかもしれないです。

でも、まぁ、今年はこの辺りで良いかなぁ。。と思っています。