Raspberry PiからLINEに室温を通知する

Raspberry PiからLine Notifyを使用して、室温をLineに通知できるようにしたいと思います。Line Notifyを使えば、任意の文字を通知できるようになります。

Line Notify

Webサービスやアプリと連携し、Lineへ通知するサービス

今回の記事からわかること
  • Line Notifyの登録方法
  • Raspberry PiからLINEに通知する方法
目次

LINEに通知する

LINEからパーソナルアクセストークンの取得

通知時にトークンを指定することで、Lineに通知できるようになります。そのトークンを取得します。

以下のサイトからマイページにログインします。

ログインをして、以下からアクセストークンを発行します。

注意!

発行したトークンは発行時しか確認できないので、絶対コピーして下さい!

①トークン発行

トークン名は任意の文字列を入力してください。

③トークン取得

赤字でトークンが表示されるのでコピーして下さい。

②トークンルーム選択

任意のトークルームに通知先を設定できますが、自分しか見なくていい場合は、「1:1でLINE Notifyから通知を受ける」を選んでください。

LINEに通知する

通知方法はLINEの公式サイトに詳しく書かれています。

LINE Notify
LINE Notify LINE Notify allows you to send web notifications from GitHub, IFTTT, Mackerel, and more directly to your LINE chats.

公式サイトの「通知系」の項目のサンプルを参考に、LINEに「test」と通知します。

以下のようにスクリプトを作成します。

XXXXXの部分には取得したトークンを入力してください。

message=に通知したい文字を入れてください。

#!/bin/sh
curl -X POST -H 'Authorization: Bearer XXXXX' -F 'message=test' https://notify-api.line.me/api/notify
{"status":200,"message":"ok"}

スクリプトを実行すると、LINEに通知することができます。

これLINEの準備ができました。次回は、室温の計測の準備と通知をしたいをと思います。

室温を通知する

回路を組む

温度センサーの回路を組んでいきます。

用意するもの

部品は「Raspberry Piで学ぶ電子工作」を参考にしています。

  • ADT7410(温度センサー)
  • ジャンパワイヤーオスーメス
  • ブレッドボード

IC2有効にする

「sudo raspi-config」から設定してします。

① Interface Optionsを選択

② P5 I2Cを選択

③ I2C有効化

必要なパッケージインストール

i2c-toolsとpython-smbusをインストールします。

$ sudo apt install i2c-tools python-smbus
i2c-tools

Linux用のi2cを使用するためのコマンドなどが同封されているパッケージ

python-smbus

SMBus(System Management Bus)を使用するためのpythonライブラリ SMBusはI2Cの派生仕様

回路を組む

Raspberry Piと温度センサーの回路を以下のように組みます。

GPIOとセンサーとの接続関係は以下の通りです。

GPIOADT740
(温度センサー)
3.3VVDD
I2C SDA(2)SDA
I2C SCL(3)SCL
GNDGND

i2cdetectを使って、読み込めているか確認します。

今回の回路であれば、以下のように48が出れば、温度センサーを認識できています。

$ i2cdetect -y 1
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- -- -- -- -- -- -- 
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
40: -- -- -- -- -- -- -- -- 48 -- -- -- -- -- -- -- 
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
70: -- -- -- -- -- -- -- --

温度計測

サンプルのプログラムの「07-01-temp.py」をRaspberry Piに入れて実行します。

以下のように温度が出力されれば、成功です。

$ python ./07-01-temp.py 
28.9375
28.9375
28.9375
28.9375
28.9375
28.9375
28.9375
28.9375

室温を通知する

温度を取得する仕組みが出来たので、Lineに通知したいと思います。sshでraspberry piから直接操作できますが、いつでも確認したいので、Homebridgeを使用して、iPhoneから確認できるようにします。

プログラム

コード内に説明を書きます。

# -*- coding: utf-8 -*-
# gettemp.pyのコード
import smbus
from time import sleep

class PioCtrler:
    def __init__(self):
        # I2C通信の初期化
        self.bus = smbus.SMBus(1)
        # デバイスのアドレス
        address_adt7410 = 0x48
        # レジスタのアドレス
        register_adt7410 = 0x00
        self.address_adt7410=address_adt7410
        self.register_adt7410=register_adt7410


    def read_adt7410(self):
        # アドレス0x48のI2Cデバイスの0x00番地のレジスタから2バイトのデータを取得
        word_data =  self.bus.read_word_data(self.address_adt7410, self.register_adt7410)
        data = (word_data & 0xff00)>>8 | (word_data & 0xff)<<8
        data = data>>3 # 13ビットデータ
        if data & 0x1000 == 0:  # 温度が正または0の場合
            temperature = data*0.0625
        else: # 温度が負の場合、 絶対値を取ってからマイナスをかける
            temperature = ( (~data&0x1fff) + 1)*-0.0625
        return round(temperature,1)
# -*- coding: utf-8 -*-
# notify-temp.pyのコード
import gettemp
import subprocess

ctrler = gettemp.PioCtrler()

temp = ctrler.read_adt7410()

hp='https://notify-api.line.me/api/notify'
line = 'Authorization: Bearer XXXXX' #XXXXには、取得したトークンを設定して下さい。
msg = 'message='+u"室温は"+str(temp)+u"℃"
cmd3 = ['curl', hp, '-X','POST','-H',line,'-F',msg]
subprocess.call(cmd3)

Homebridge

Homebridgeコンフィグに以下を追加します。Homebrige UIの使い方は、過去の記事を参考にして下さい。

追加した設定は以下の通りです。”accessories”に追加しています。

追加on_cmdとoff_cmdに作成したプログラムを実行するように設定しています。

Homebrige UIから再起動して下さい。

    "accessories": [
        {
            "accessory": "CMD",
            "name": "温度",
            "on_cmd": "python /home/pi/work/temperature/notify-temp.py",
            "off_cmd": "python /home/pi/work/temperature/notify-temp.py"
        }
    ],
yuDigiLife
404: ページが見つかりませんでした | yuDigiLife Appなど日々使っているものを紹介しています。

実際にやってみる

iPhoneのホームから”温度”を押すと、室温を通知することが出来ました。

Siriから通知も可能

コンフィグの「”name”: “温度”」でつけた名前を呼べば、声だけで通知もできます。実は漢字を書いても正しく認識しています。

「Hey,Siri 温度つけて」と言ってみて下さい。

配線にはこちらの本を参考にしています。初心者にもわかりやすく書かれている本です。

コメント

コメントする

CAPTCHA


目次