LoginSignup
31
32

More than 5 years have passed since last update.

myThingsを使ってLINE BOT APIで家電を操作する

Last updated at Posted at 2016-04-09

以下の技術を使って、LINE BOT APIから家電を操作してみようと思います。

myThingsは様々なWebサービスやIoT製品を相互連携させることができるサービスです。
執筆時点で連携可能なサービスは45種類あるのですが、その中にLINE BOT APIは含まれていません。
ただIDCFチャンネルを使うことによって、myThingsが公式にはサポートしていないサービスや自分で電子工作したデバイスも連携させることができます。

今回はそのmyThingsとIDCFチャンネル、市販されているiRemoconというネットワーク接続が可能な学習リモコン、そしてLINE BOT APIを使って、LINEから家電を操作してみようと思います。

連携のフローは以下のとおりです。LINE BOT APIから直接IDCFチャンネルにリクエストを送ることが困難であるためwebscript.ioというサービスを中継させています。(IDCFチャンネルには指定のヘッダーを付与しなければならないのですが、LINE BOT APIにそのヘッダを付与させるのができないため)


LINE BOT API --(メッセージ送信)--> webscript.io --(メッセージ送信)-->IDCFチャンネル <--(15分に1回のトリガー確認)-- myThings --(アクション実行)--> iRemocon --(赤外線送信)--> 家電


前提知識

各技術要素については以下のサイトを参考にしてください。

前提作業

上の前提知識でもって、LINE BOT API、myThings、IDCFチャンネル、iRemocon、webscript.ioのセットアップを完了させてください。
順序としては、
1. webscript.ioをセットアップ
2. LINE BOT APIをセットアップ(1で作成したURLをコールバックURLに設定する)
3. IDCFチャンネルをセットアップ
4. myThingsをセットアップ(IDCFチャンネルとiRemoconチャンネルをアクティベート)

という順番で進めるとスムーズです。
1,2に関しては、webscript.ioでLINE BOT APIの事始めが参考になると思います。

myThingsで組み合わせ作成

以下のように組み合わせを作成します。ポイントはIDCFチャンネルのトリガーに「trigger-1」を使っていることです。「trigger-1〜5」のいずれかが設定可能ですが、何を使うかによって、後述するwebscript.ioのスクリプトに設定するmyThingsの認証情報が変わりますので注意してください。
6bb8b4cfbe3d3c155697.jpg

webscript.ioでスクリプト作成

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

myThings連携
-- LINE BOT API の認証情報
ChannelID = あなたのLINE BOT APIのChannel ID
ChannelSecret = あなたのLINE BOT APIのChannel Secret
MID = あなたのLINE BOT APIのMID

-- myThingsの認証情報
ip = あなたのIDCFチャンネルのIPアドレス
meshblu_auth_uuid = あなたのIDCFチャンネルのtrigger-1のUUID
meshblu_auth_token = あなたのIDCFチャンネルのtrigger-1のtoken

-- 受信メッセージから送信メッセージを構築
body = json.parse(request.body)
reply = body.result[1].content.from
data = {
    ['to'] = {reply},
    ['toChannel'] = '1383378250', -- 固定値
    ['eventType'] = '138311608800106203', -- 固定値
    ['content'] = {
        ['contentType'] = 1,
        ['toType'] = 1,
        ['text'] = '電気消します'
    }
}

-- myThingsに通知
local status = http.request {
    url = 'http://' .. ip .. '/data/' .. meshblu_auth_uuid,
    method = 'POST',
    headers = {
        ['meshblu_auth_uuid'] = meshblu_auth_uuid,
        ['meshblu_auth_token'] = meshblu_auth_token
    }
}

-- メッセージ送信
local response = http.request {
    url = 'https://trialbot-api.line.me/v1/events',
    method = 'POST',
    data = json.stringify(data),
    headers = {
        ['Content-Type'] = 'application/json; charser=UTF-8',
        ['X-Line-ChannelID'] = ChannelID,
        ['X-Line-ChannelSecret'] = ChannelSecret,
        ['X-Line-Trusted-User-With-ACL'] = MID
    }
}

return true

まとめ

これで作成したBOTにメッセージを送るとiRemoconから赤外線が送信され、家電を制御することができるようになりました。(ただmyThingsが15分に1回のポーリングで動くため、LINEでメッセージを送っても最大15分遅延して赤外線が送信されます。。)

今はどんなメッセージを送っても特定の赤外線しか送信できませんが、webscript.ioの中でメッセージを解析して、電源ONの時はtrigger-1、電源OFFの時はtrigger-2にリクエストを送るといったように振り分けて、myThingsアプリの組み合わせもそれを踏まえた内容にすることで、バリエーションに富んだ家電制御が可能になると思います。

今回myThingsやIDCFチャンネルについては説明をだいぶ端折ってしまいましたが、この記事を読んで興味が湧いたという方はこちらも併せてお読みください!
myThingsハンズオンの参考資料

31
32
0

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
31
32