LINEとラズパイで家の家電を操作する


外出先からでもLINEを使って部屋の監視・コントロールができるスマートホームシステムを立ち上げた。
<!--今回から数回に分けてシステムの作り方を解説していく-->
![Screenshot_20220813-222203.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/426263/874b18dd-512b-7711-a269-3e9518230ad2.jpeg)

<!--とても長くなるので、今回はLINEで送ったメッセージが自宅のサーバーに届くところまでの解説-->

## このシステムでできること
- LINEで部屋においた各種センサーの読み出し
- 温湿度からエアコンのON/OFF自動制御
- PCのON/OFF制御
- PCのON/OFF状態の検出
- 外出と帰宅の検出
- 起床と就寝の検出
など

## システムの全体像
全体像としてはこんな感じ
基本的にスマートホーム系の操作をRaspberry Pi上で実行しているNode-REDに集約する思想で構築している
今回は黄色で着色した範囲の解説になる
![2022-08-14_smarthome_systemchart.drawio.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/426263/d411fb77-4934-fa22-c48d-12f6a6c7bf9f.png)


## 対象者
- Switchbotとかアレクサというワードに興味があってちょっと使いこなしてみたい人
- スマホからスマートホームしてみたい人
- 家の家電を便利にしたい人
など

<!--
## 必要なもの
- LINEアカウント
- Googleアカウント
- Slackアカウント
- Slackの自分だけのワークスペース
- RaspberryPi(なければWindowsPCやLinuxサーバーでも可)

## あると楽しめるもの
- Switchbotのアイテム(温湿度計、スイッチ、カーテンなど)
- アレクサ
-->


# 前置き
前置きがいらない方は [こちら](#本編) から。

## 動機
1年前にSwitchBotを買ったところから我が家のスマートホーム化がスタートした。
エンジニアにとってはこれ以上ないおもちゃだが、いかんせんSwitchBotの標準アプリではできることが限られている。
Raspberry Piを買ってNode-REDフローを組んだり、Alexaとつなげたりしていたが
どうせなら家の外からも操作できるようにしてみたくなってきた。

## 全体構成図
最終的に出来上がったのはこういった構成。
どうしてわざわざGAS(Google Apps Script)を経由しているのか
どうしてSlackなんか動かしているのか。
「無料」と「セキュリティ」を両立したらこうなりました。
![smarthome_arch.drawio.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/426263/ecca3dee-d570-8c53-66d8-45cc7a0e2247.png)

## 当初のもくろみ
最初に考えていたのはこんな構成。
LINEでテキストを飛ばせばそれがそのままラズパイに届く。
とってもかんたん。
そう思っていた時期がありました。えぇ。
主に以下の問題でこの構成に行き着きました。
![smarthome_arch_pre.drawio.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/426263/2a032b84-b65f-82c5-815b-3823b939b944.png)

## Webhookのエンドポイントはローカルに持ちたくない
Webhookのエンドポイントをローカル(RaspberryPi)に持つということは、すなわちHTTPポートを外部に公開して
世界中の誰からでもリクエストを受けられるようにするといこと。
セキュリティ的に怖いし、そもそもうちはDHCPのプロバイダで毎回アドレスが変わる。お金を払ってドメイン取得するのもイヤだ。
結果的にSlack Appを利用すればそのあたりが解決することがわかった。
Webhook RelayやPushBulletあたりも考えたが、こいつらは無料プランだとリクエストの上限が月100回くらいと少なく
今後のスケーラビリティも考えて見送った。
ちなみにSlackは1時間あたり30,000イベントまでOKらしい。
太っ腹すぎる。

## LINEのAPIとSlackのAPIが噛み合わない
LINE側の用意しているメッセージのAPIと、Slackが受け付けているAPIの仕様が絶妙に噛み合わず
LINE → Slack という経路が直結できない。
LINEのWebhookを受けてSlackのAPIに変換する仕組みが必要だ。
AWSやIBM Cloud, Google Cloud Platformあたりが中継サーバーとして機能しそうだが
登録すると強制的にトライアル扱いになって、期間が終わるとデータが消えたりお金を請求されるようなことが書いてあった。
こんな小規模ホビー目的で使うにはトライアルはもったいないし、大したことしてないのに請求が来るのも残念すぎる。
結果的にGAS(Google Apps Script)ならなんとかしてくれそうなことがわかった。

# 本編
前置きが長くなりましたが、ここから。

## LINE Developerの用意
### 登録
[LINE Developer](https://developers.line.biz/ja/) のフリープランで登録する。
右上のログインから自分のLINEアカウントで登録・ログインする。
![qiita_fig1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/426263/8230cd1b-c5fc-fdc2-72a6-2c31df9a5e29.png)


### プロバイダーの作成
プロバイダー > 作成 で新規プロバイダーを作成する  
名前はなんでもいいと思う
![qiita_bot_createprovider.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/426263/c5a3170c-711b-a32a-4e30-bc7e2d5bcb22.png)

### Botの作成
作成したプロバイダーに移動 > 新規チャネル作成 > Messaging API をクリック
新規チャネル作成画面に移動するので必要事項を入力して 作成 をクリック
![qiita_bot_create.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/426263/528b44f9-8ab0-43f5-5240-d781afa5e4b8.png)

チャンネル名はなんでも良い 
![bluehamham.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/426263/1aea8d9e-95f6-c673-5faf-219028a9aeab.png)


### BotのIDの確認と友だち追加
Botの作成が完了するとチャネルの詳細を確認できる。
Messaging API設定 タブを押すと自分のBotのIDが確認できる
![qiita_bot_ID.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/426263/bd8fdf74-099d-96ab-fded-3a0dd37e165f.png)

このIDでラインの友達検索をするとチャンネルが表示されるため友だちになっておく
![qiita_bot_friend.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/426263/976276ef-5faf-7e13-4c3a-60a9c7861f23.png)

__ちなみにこのBotのアカウントは他人も登録することができるのでIDは公開しないように。__

### Webhookの有効化、デフォルトリプライの無効化
Webhookの設定とデフォルトリプライの設定を行う
今見ているLINE Developperではなく LINE Official Account Manager での設定となるので
下記のリンクをクリックする
![qiita_bot_account_manager.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/426263/558b37be-d429-9230-0f19-47954fa86559.png)


クリックすると画面が遷移するので
リンク先の画面 > 左の応答設定 > 詳細設定
- 応答メッセージ > オフ
- Webhook > オン 
にする
![qiita_bot_account_setting.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/426263/3df57c13-52f1-7cd3-ed27-3161ac9c08ca.png)

## GAS(Google Apps Script)の用意
### Googleアカウントの作成
さすがに持ってない人はいないと思うので割愛する。
特に特別なライセンスである必要はなく、Googleドライブが使えるアカウントならOK。

### スクリプト作成画面に行く
正しい行き方がわからないが、GoogleDrive > 新規スプレッドシート >
 スクリプト でこの画面へ行けた。
![qiita_gas_open.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/426263/c6de022f-c67a-8e37-4dfd-92469d090734.png)

プラスマークからスクリプトを選択する
![qiita_gas_coding.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/426263/0ed793f8-2642-3429-fc43-2c27c47f8855.png)


### スクリプトを作成する
下記のコードを入力する。
デフォルトで `myFunction()` が定義されているが、それは削除する
```
function doPost(e) {
  var ACCESS_TOKEN = 'このあと発行するLINE長期トークン';

  var replyToken = JSON.parse(e.postData.contents).events[0].replyToken;
  var userMessage = JSON.parse(e.postData.contents).events[0].message.text;
  var url = 'https://api.line.me/v2/bot/message/reply';
  var response = UrlFetchApp.fetch(url, {
    'headers': {
      'Content-Type': 'application/json; charset=UTF-8',
      'Authorization': 'Bearer ' + ACCESS_TOKEN,
    },
    'method': 'post',
    'payload': JSON.stringify({
      'replyToken': replyToken,
      'messages': [{
        'type': 'text',
        'text': userMessage + 'ンゴ',
      }],
    }),
  });

    url = 'このあと発行するSlackのWebhookURL';
    UrlFetchApp.fetch(url, {
    'headers': {
      'Content-Type': 'application/json',
    },
    'method': 'post',
    'payload': JSON.stringify({
      'text': JSON.stringify({
          'message': userMessage,
          'replyToken': replyToken
      })
    }),
    });
  
  return response.getResponseCode();
}

```

2020年頃まで流行っていたLINE オウム返しBOTのコードのほとんどは
Google側のレスポンスの仕様が変わったため利用できない。
このGoogle側の仕様変更はセキュリティ観点だそうで、今後この方法も使えなくなる可能性がある。
とりあえず2024年2月現在は上記コードで正常に動作している。

### デプロイする
**Ctrl + s で変更を保存してから** 画面右上のデプロイボタンを押す
下記のポイントに気をつけること
- 種類の選択でウェブアプリを選択
- アクセスできるユーザーが全員になっていること

安全ないアクセスになるため警告が出るが、__URLを外部に公開しない前提__ でOKとする
※デプロイするたびに新しいURLが発行されるので、LINEには最新のURLを入れる必要がある
![qiita_gas_deploy.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/426263/1f27d007-1d1a-150c-90f6-1978e321ae8b.png)
![qiita_gas_deploy2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/426263/d2986cce-8a2c-599d-6d0a-264c90078d3f.png)

この画面が出てきたらひとまずOK。下のURLを使用するが、後でもう一度デプロイするのでこの時点では特にURLを控えなくて良い
![qiita_gas_webhookURL.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/426263/047c094a-cfb8-c615-37da-b1ec3f1b4026.png)

## Slackの用意
### Slackに登録する
もともと使ってる人はすっ飛ばしてください。
僕は会社がTeamsなのでここで初めて登録しました。

### ワークスペースを作成する
自分しかいないワークスペースを作成する。
他の人もいても構わないが、その人からも家の家電が操作できてしまう。

### チャンネルの作成
自分とSlack Appしか使わないチャンネルを作成する
ユーザーの追加は特に不要
<!-- 他のユーザーがいるワークスペースの場合プライベートチャンネルに設定しておく。 -->
プラベートチャンネルに設定した場合でも動く方法がわからないため、今回はワークスペースの公開チャンネルで作成する
![qiita_slack_createchannel.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/426263/d7f51884-9d5c-b86e-96a7-8cc8dc620d11.png)



### Slack Appの作成
[このサイト](https://api.slack.com/apps)からSlackAppを作成する
From Scrachを選ぶ
![qiita_slack_createapp.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/426263/82f08874-e3be-257d-3c88-29e2487be961.png)

適当な名前をつけ、さっき作ったWorkSpaceを選ぶ
![qiita_slack_createapp2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/426263/f3a5c746-28e0-a7f6-eeba-89ac560d6aa8.png)

### Incoming Webhooks をONにする
![qiita_slack_incomingwebhook.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/426263/902bccf0-7fd0-6a9f-5727-62effee1821d.png)

### Socket Mode をONにする
左の Socket Mode をクリックし、Enable Socket Mode をONにする
![qiita_slack_socketmode.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/426263/f80cb2de-2e94-e473-6d8f-ddb402277c37.png)

### Event Subscriptionsを設定する
左の Event Subscriptions をクリックし、Enable Events をONにする
Subscribe to bot events > Add Bot User Event をクリックし
message.channels を追加する
![qiita_slack_eventsubscriptions.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/426263/7a3c5a95-798a-7901-bdd7-1c61a90ea8b8.png)

### OAuthのスコープを確認する
左の OAuth & Permissions > Scopes に行き
channels:history と incoming-webhook が追加されていればアプリの設定は完了
<!-- **チャンネルをプライベートに設定した場合、User Token Scopes に admin 権限を追加する必要がある。** -->
![qiita_slack_OAuth.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/426263/ffd6423e-0307-fddf-9109-523b6d3a9a70.png)

### App-Level Tokensを作成する
左のBasic Information > App-Level Tokens から Create token and Scopes を押す
Scopeは connections:write
![qiita_slack_apptoken.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/426263/7e5f882d-105a-1643-d45e-34f21c8893a7.png)

![qitta_slack_apptoken2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/426263/34a8a52e-2512-3157-7ad3-a47544e9cd68.png)
 これがSlack→node-redの接続のためのTokenになる

- アプリをチャンネルにインストールする
Install App > Install to Workspace でワークスペースへインストールする
さっきのチャンネルにインストールする
![](fig/qiita_slack_install.png)
![](fig/qiita_slack_install2.png)

### チャンネルにアプリを追加する
Slackのチャンネル画面に戻り、
チャンネル名を右クリック > チャンネル詳細を表示する > インテグレーション > App > アプリを追加する
で作成したアプリを追加する
![qiita_slack_addapp.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/426263/8d7613c2-9aa2-1902-c53e-cde4f7832ee7.png)

### WebhookURLを控える
Incoming Webhook > Webhook URLs for Your Workspace でWebhookURLの確認する
後でGoogeleAppscriptに入力する
ワークスペースへアプリをインストールするたびに新しいURLが発行されるため、何度か行った人は複数のURLが発行されており、一番下が最新である。
URLにアプリのパーミッションが紐づいているので、誤ってURLを外部に公開した人はここでURLを無効にする必要がある。
![qiita_slack_webhookURl.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/426263/5ddc464c-b480-a6ce-7e60-2e9df3462e70.png)

## Node-REDの用意
まずはNode-REDの環境がまだ整っていない人は下記のURLを参考にしてブラウザでNode-REDが立ち上がるところまでいく
![qiita_node-red_init.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/426263/397b94eb-c250-575c-c664-2a8509ff9d49.png)

ブラウザでこの画面が表示されるところまで行く

- Raspberry Piで実行する人
https://sanuki-tech.net/micro-bit/raspberry-pi/install-node-red/

- Windowsで実行する人
https://obenkyolab.com/?p=856
<!-- ### Node-REDでSwitchBotを動かす
このあたりの記事を参考にして
Node-REDからSwitchBotを操作できるようにしておく -->

### Slackノードの導入
Slackのノードを使えるようにする。
Node-REDの画面 > 右上のハンバーガー > パレットの管理 > ノードを追加タブ 
検索窓に「node-red-contrib-slack-socket」を入力 > ノードを追加 をクリック
ラズパイの場合激重なので、気長に待つ
![qiita_node-red_install.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/426263/aafcdd32-5ac6-e775-bc62-e5e699900de5.png)

インストールが成功すると左の一番下に Slack Listen のノードが追加される
![qiita_node-red_install_complete.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/426263/b477531c-5012-eb59-9e08-37949da7c3de.png)

余談だがこのあたりのワードを検索すると出てくるSlackBotは使えない。
SlackBotが使用しているRTM(Real Time Messaging)というAPIが廃止になったためだ。
2021年11月現在、SlackはイベントベースでのAPIのみ受け付けている状況だ。

### 全体接続図
今回はサンプルで「こんにちは」というメッセージを送ったら「I'm fine, thank you. And you?」と返してくれるフローを作ってみる。
![qiita_node-red_connect2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/426263/67e3d585-913d-c379-7d70-6c24a2104ab9.png)

### 各ノードの設定
#### Slack Listen
ノードをパレット上にドラッグ > ノードをダブルクリック > Settingsの鉛筆マーク
名前とTokenを入力する 
名前は何でもよく
Tokenは先ほど作成したSlack の App-level Tokenを入力する
![qiita_node-red_slacklisten.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/426263/8ab01f7d-9675-c1d1-da8a-e35a6f4b1e47.png)

#### jsonパーサ
![qiita_node-red_json.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/426263/42583a72-b618-9e49-4d36-e3c8763cfcb3.png)
プロパティは下記
`payload.text`

#### switchノード
![qiita_node-red_switch.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/426263/d9649368-4e43-99c2-b1c9-af226e682c94.png)
プロパティは下記
`payload.text.message`
`How are you?`

#### Changeノード
![qitta_node-red_change.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/426263/e3993640-d111-fda3-64f5-4bbd24b7b701.png)
プロパティは下記
`headers.Content-Type`
`application/json`
`headers.Authorization`
`Bearer LINE長期トークン`
`payload.messages[0].type`
`text`
`payload.messages[0].text`
`I'm fine, thank you. And you?`
`payload.replyToken`
`payload.text.replyToken`

#### HTTPリクエストノード
![qiita_node-red_http_request.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/426263/d222613f-a131-8bce-64ed-b10db4e78348.png)
`https://api.line.me/v2/bot/message/broadcast`

### Debugノード
対象をmsgオブジェクト全体にしておくとあとでデバッグがやりやすい(個人的に)
debug_lineのノードのも同様
![qiita_node-red_http_debug.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/426263/635d33bd-ecb2-6b7d-6e7d-b759ae69796b.png)

## 各種トークンやWebhook URLの入力
既にこれまでの手順で入力したものも含めて、改めてここで各種サービスの連携をする。
**ここで発行するURLやトークンはすべてプライベートなものなので、自分以外の人に公開しないようにすること。**
誤って公開してしまった場合、トークンは再生成することで他のものが無効になる。
WebhookURLは無効にしない限り有効のままなので、無効化の手続きを行う必要がある。

### LINEトークンの取得と入力
LINE Developpers > Messaging API設定 から
チャンネルアクセストークン(長期) の発行ボタンを押す
![qiita_bot_token.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/426263/2e859cdd-4ff8-261f-bd27-9b3d2e830f2e.png)
↓
Node-REDのcahngeノードのAuthentication部分に入力する
![qitta_node-red_change.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/426263/e3993640-d111-fda3-64f5-4bbd24b7b701.png)
+
GASの青色部分にも入力する
![qitta_gas_token.png.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/426263/88de3fdb-1b1e-8954-77e1-19fda0f72320.png) 

- Slack App-levelトークン
Slack AppのApp LevelTokenは
![qitta_slack_apptoken2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/426263/2d77032e-1aa6-57c0-699a-c4f29be814bb.png)
↓
Node-REDのここに入れる
![qiita_node-red_slacklisten.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/426263/bb2129f2-92b6-8602-d1f7-e6406dfd9b90.png)

- Slack Webhook URL
左の Install App > Webhook URLTs for Your Workdspace
からWebhook URLをコピーする
複数ある場合は一番下が最新のURLになる。
![qiita_slack_webhookURl.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/426263/604198b2-ea99-059a-39fc-9985aab5f343.png)
↓
GASの赤色部分に入力する
![qitta_gas_token.png.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/426263/79f3e711-c3f5-5b8c-bff2-d240b674aece.png)

- GAS Webhook URL
GASをデプロイしたときに発行されるURLをコピーする
デプロイするたびにURLが変わるので注意
![qiita_gas_webhookURL.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/426263/9652738e-6072-f093-25d3-fc10fc2dcb5c.png)
↓
LINE Developerのここに入れる
このURLはデプロイごとに変わるので、
コード修正してデプロイし直したら毎回入れ直すこと
![qiita_line_webhookURL.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/426263/a25c23bc-abc5-8700-580f-afe94b7b50d1.png)

## 動作テスト
ここまできたら動作テストをする
完璧にできていれば一発で通るが、そんなにうまくいくことはないので
疎通箇所を確認しながら頭から読み直してほしい。
![qiita_verify.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/426263/1ac3a9a3-2c50-a8d6-afca-676f84e9d8ae.png)

### LINE → GAS のテスト
自分のLINEアカウントからメッセージを送って「こんにちは+ンゴ」が返ってきたら成功

### GAS → Slackのテスト
送ったメッセージが入ったテキストがSlackのチャンネルに投稿されていれば成功
![qiita_verify_gas.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/426263/69dccc69-b121-b5e3-1a8b-675d02354c83.png)

### Slack → Node-REDのテスト
Debugノードに反応があれば成功
![qiita_verify_node-red.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/426263/161d9858-e879-8abc-f2ed-3b4aea40fe92.png)

### Node-RED → LINEのテスト
LINEからの「こんにちは」+ンゴのあとに、"I'm fine, thank you. And you?" が返ってきたら成功

ここまでできたら通信はバッチリなので、
あとはNode-REDで好きな機能を各々実装していってほしい。

# 応用
## LINEの応用
### リッチメニューの作成
よくある公式アカウントのあれ
簡易的なものならブラウザでとても簡単に作成ができる
LINEすごい
https://manager.line.biz/
![qiita_line_richmenu.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/426263/11b51b92-96c8-0b54-d32b-0eb99693ddcb.png)

## Node-REDの応用
### SwitchBotのBLEで部屋の状況の監視
SwitchbotのBluetoothのAPIはここで公開されている
https://github.com/OpenWonderLabs/SwitchBotAPI-BLE
お部屋の温度湿度、照明の有無あたりが取得できると、カビが生えそうな湿度になったら外出先からでも部屋の除湿をONにしたり、電気やパソコンの消し忘れを外出先から解決することができる
![qiita_line_room.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/426263/dd46dc96-e98c-800e-0674-a98023f2f8a6.png)

### SwitchBotでカーテンを閉める
HTTP系のAPIはここで公開されている
カーテンの開け締め、スイッチのON/OFF等の操作ができる
リクエスト数には上限があるので注意すること
https://github.com/OpenWonderLabs/SwitchBotAPI

### Alexaにしゃべらせる
いくつか方法はあるが、この記事がとても参考になった。
特に追加でライブラリを入れる必要もない
https://qiita.com/shge/items/169de61c8f246d26c110

# さいごに
初めてのQiita記事なので読みづらさはご容赦いただきたい。
LINEからスマートホームする手段が体系立てて掲載されている場所がなく今回まとめてみた。
応用編の解説は要望が多ければ掲載しようと思うので、記事を気に入っていただければ反応をいただきたい。

個人向けのフリーのWebhookエンドポイントサービス(+Node-REDのレシーバー)があるとここまで苦労しなかったので
誰か作ってくれるといいなぁ。
Webhook Relayのフリーアカウントみたいな、リクエスト数が月上限150とかだと
正直デバッグのリクエストだけで上限振り切りそうです。