SORACOM LTE-M Button で Google Home と Line に「いまからお父さん帰るよ」通知やってみた

[SORACOM LTE-M Button](https://soracom.jp/products/gadgets/aws_button/) をつかって、ボタンを押すと 自宅の Google Home で「いまからお父さん帰るよ」と通知 & Line Notifyで通知するの作ってみました。

![IMG_3036.JPG](https://qiita-image-store.s3.amazonaws.com/0/88917/ebdc7bd2-9e44-41a8-1819-3d58d424147e.jpeg)

## 前提HWとSW
* [Google Home Mini](https://store.google.com/jp/product/google_home_mini)
* [SORACOM LTE-M Button powered by AWS](https://soracom.jp/products/gadgets/aws_button/)
* Google Home MiniへのPushは、[google-home-notifier](https://github.com/noelportugal/google-home-notifier)を使っています。私の家では、ラズパイに入れています。
* [Line Notify](https://notify-bot.line.me/ja/) 事前に認証のTokenを取得してください。


## ではやってみます。

待ちに待った開封の儀
![IMG_3012.jpg](https://qiita-image-store.s3.amazonaws.com/0/88917/2babe30f-43e8-c161-a43b-7313b6a20d3d.jpeg)

[AWS IoT 1-Click](https://ap-northeast-1.console.aws.amazon.com/iot1click/home?region=ap-northeast-1#/onboard) への登録
登録の際に、ボタンの1回クリックが必要でした。
<img width="1117" alt="AWS_IoT_1-Click.png" src="https://qiita-image-store.s3.amazonaws.com/0/88917/05464ba5-b103-71af-4a31-a5d96e9584c9.png">

プロジェクトの作成
<img width="948" alt="AWS_IoT_1-Click 8.png" src="https://qiita-image-store.s3.amazonaws.com/0/88917/306c1a0e-4dea-d7a3-bc77-cd752006e986.png">


Lambdaはこんな感じです

```
const https = require('https');
const http = require('http');
const url = require('url');
const defaultMessage={
    "SINGLE": "いまからお父さん帰るよ。",
    "DOUBLE": "寄り道して帰るよ。",
    "LONG": "やっぱりまだ帰らないよ。"
};

function postLine(text){
  return new Promise(function(resolve,reject) {
    var payload = 'message=' + text;
    var ReqOptions = url.parse('https://notify-api.line.me/api/notify');
    ReqOptions.method = 'POST';

    ReqOptions.headers = {
      'Content-Length': Buffer.byteLength(payload),
      'Authorization': 'Bearer <LineNotifyToken>',
      'Content-Type': 'application/x-www-form-urlencoded',
    };
    var req = https.request(ReqOptions, function(res) {
      if (res.statusCode === 200) {
        console.log('Posted to line');
        resolve(res.statusCode);
      } else {
        reject(new Error('Error'));
      }
      return res;
    });
    req.write(payload);
    req.end();
  });
}

function postGoogleHome(text){
  return new Promise(function(resolve,reject) {
    var payload = 'text=' + text;
    var ReqOptions = url.parse('http://<google-notifier.address>:<port>/google-home-notifier');

    ReqOptions.method = 'POST';
    ReqOptions.headers = {
      'Content-Type': 'application/x-www-form-urlencoded',
    };
    
    var req = http.request(ReqOptions, function(res) {
        if (res.statusCode === 200) {
            console.log('Posted to GoogleHome');
            resolve(res.statusCode);
        } else {
            reject(new Error('Error'));
        }
        return res;
    });
    req.write(payload);
    req.end();
  });
}

exports.handler = (event, context, callback) => {
  console.log('Received event:', JSON.stringify(event, null, 2));
  var text = defaultMessage[event.deviceEvent.buttonClicked.clickType];
  postLine(text)
    .then((response) => {
      console.log('Posted to line statusCode: ' + response);
      return postGoogleHome(text);
    }).then((response) => {
      callback(null, 'Success');
    })
    .catch(err => {
      console.log(err);
    });
};

```

これだけ！！

さっそく押してみます。


<img width="320" alt="IMG_3033.png" src="https://qiita-image-store.s3.amazonaws.com/0/88917/a5297654-8a7b-4e95-add9-10ca7752f75e.png">

<blockquote class="twitter-tweet" data-lang="ja"><p lang="und" dir="ltr"><a href="https://t.co/UvmJqv05bK">pic.twitter.com/UvmJqv05bK</a></p>&mdash; Noriyuki Egi (@NoriyukiEgi) <a href="https://twitter.com/NoriyukiEgi/status/1059311723138637826?ref_src=twsrc%5Etfw">2018年11月5日</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>


これで子どもたちも大喜びですね。