2
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Raspberry pi 3 を使って、 LINE から 赤外線リモコンを操作(その3:LINE から 赤外線リモコンを操作)

Posted at

はじめに

出先からおうちの家電を動かしたい!ということで、
LINE の Messaging API (webhook) を利用し、
Raspberry pi 3 経由で、赤外線を使って、
おうちの家電製品を操作するような仕組み作りました。
備忘録として、思い出しながら記載します。

今回の構成は以下の通りです。
LINE -> raspberry pi(httpsサーバ) -> 赤外線リモコン -> エアコン

以下のとおり、3回に分けて説明します

環境

OS: Raspbian 9.1
バージョンによって、設定方法など変わることに注意

LINE developerの登録

LINE developerの公式ページ からdeveloperアカウント、プロバイダ、チャネルを作成ください。

チャネル での設定

今回の設定は以下の通りです。
webhook URL は後述するため、ここではそれ以外の設定を記載します。

チャネル
メッセージ送受信設定 -> Webhook送信 : 利用する
メッセージ送受信設定 -> Botのグループトーク参加 : 利用しない
LINE@機能の利用 -> 自動応答メッセージ : 利用しない
LINE@機能の利用 -> 友だち追加時あいさつ : 利用しない

チャネル で必要な情報を取得

pythonで callback関数を作成する時に利用するため、以下の情報はメモして置く。

チャネル
基本情報 -> Channel Secret
メッセージ送受信設定 -> アクセストークン(ロングターム)

python 版のLINE SDK のインストール

terminal
$ pip install line-bot-sdk

callback関数のサンプルコード

callback関数(callback.wsgi) は python で記載しており、
具体的には、application関数 で、作成したチャネルに対して特定の文字を入力したら、以下の3つの処理を実現している。

  • hot と入力したら、暖房を入れ、"hot ok" と line(作成したチャネル) に返す
  • ice と入力したら、冷房を入れ、"ice ok" と line(作成したチャネル) に返す
  • off と入力したら、エアコンを止め、"aircon off ok" と line(作成したチャネル) を返す
callback.wsgi
#!/usr/bin/env python
# -*- coding: UTF-8 -*-

import os, sys, json
from eventlet import wsgi
import eventlet

from builtins import bytes
from linebot import (
    LineBotApi, WebhookParser
)
from linebot.exceptions import (
    InvalidSignatureError, LineBotApiError
)
from linebot.models import (
    MessageEvent, TextMessage, TextSendMessage
)
from linebot.utils import PY3

# Get instance
line_bot_api = LineBotApi('取得した アクセストークン(ロングターム) を記載')
parser = WebhookParser('取得した Channel Secret を記載')

def create_body(text):
    if PY3:
        return [bytes(text, 'utf-8')]
    else:
        return text
    
# application
def application(env, start_response):

    # check request method
    if env['REQUEST_METHOD'] != 'POST':
        start_response('405 Method Not Allowed', [('Content-Type', 'text/plain')])
        return create_body('Method Not Allowed')

    # get X-Line-Signature header value
    signature = env['HTTP_X_LINE_SIGNATURE']

    # get request body as text
    wsgi_input = env['wsgi.input']
    content_length = int(env['CONTENT_LENGTH'])
    body = wsgi_input.read(content_length).decode('utf-8')

    # parse webhook body
    try:
        events = parser.parse(body, signature)
    except InvalidSignatureError:
        start_response('400 Bad Request', [('Content-Type', 'text/plain')])
        return create_body('Bad Request')

    # analytics
    for event in events:
        if not isinstance(event, MessageEvent):
            continue
        if not isinstance(event.message, TextMessage):
            continue

        replyMessage = ''
        text = event.message.text
        
        # line で hot と入力したら、暖房を入れ、"hot ok" とlineを返す 
        if( text == "hot" ):
            replyMessage = 'hot ok'
            os.system("irsend SEND_ONCE aircon hoton")
        # ice と入力したら、冷房を入れ、"ice ok" とlineを返す
        elif( text == "ice" ):
            replyMessage = 'ice ok'
            os.system("irsend SEND_ONCE aircon iceon")
        # off と入力したら、エアコンを止め、"aircon off ok" とlineを返す
        elif( text == "off" ):
            replyMessage = 'aircon off ok'
            os.system("irsend SEND_ONCE aircon off")
        else:
            replyMessage = text
            
        try:
            line_bot_api.reply_message(event.reply_token,TextSendMessage(text=replyMessage))
        except LineBotApiError as e:
                
    start_response('200 OK', [('Content-Type', 'text/plain')])
    return create_body('200 OK')

チャネルにwebhook URL を登録

上記した callback.wsgi を 前回指定したcgiを起動するディレクトリ に置く。
(例では、/home/pi/public_html/cgi-bin/)

LINE のチャネル設定にある "メッセージ送受信設定 -> Webhook URL" を以下の通り指定する。
※ abcdefg.xyz.ne.jp は前回取得したraspberry piのホスト名

WebhookURL
https://abcdefg.xyz.ne.jp/~pi/cgi-bin/callback.wsgi

Webhook URL の脇にある ”接続確認”ボタン を押して正常に動作するか確認する。

チャネルを友達に追加して、実際の動作確認

チャネルの一番下に、「LINEアプリへのQRコード」 があるので、
スマホのLINE起動 -> 一番左のタブを選択 -> 右上の人型アイコンをタップ -> QRコード
を選択し、QRコードリーダーで読み込ませる。

すると、チャネルをともだちとして追加できる。

トークから、チャネルを選択し、以下の言葉を入力して、動作を確認する。

  • hot と入力したら、暖房が入り、"hot ok" と 返信がある
  • ice と入力したら、冷房が入り、"ice ok" と 返信がある
  • off と入力したら、エアコンが止まり、"aircon off ok" と 返信がある

参照ページ

(1)LINE developer公式ページ
(2)LINE の pythonサンプル

2
11
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?