寝落ち時の消灯忘れ問題をobnizで改善してみた

この記事は[リンク情報システム](https://www.lis.co.jp/)の2018年アドベントカレンダーのリレー記事です。
engineer.hanzomon のグループメンバによってリレーされます。
（リンク情報システムのFacebookは[こちらから](https://ja-jp.facebook.com/lis.co.jp/)から）

#はじめに
2日目と9日目担当のmashed-pです。

今回はobnizを使ってスマートなホームを作っていきます。

#きっかけ
～夜～

「ちょっとだけゴロンしよ......」
と、軽い気持ちで布団で横になると寝落ちすることが最近多いです。
しかも電気つけっぱなし！体に悪い。

筆者の自室はAmazon EchoとPhilips Hueで寝ながらにしてサブ照明をコントロール出来るのですが、
メインの照明は部屋の入口の物理スイッチです。
そのため、メイン照明を消さずに横になったが最後！疲れが取れぬまま朝が来ます。

この問題を先週買った**obniz**とAmazon Echoを使って改善します。

#使ったモノ
・obniz
・Amazon Echo・サーボモーター(SG90)
・ジャンパーワイヤー（オスオス)
・WiFi環境
・PC(スマートフォンでもOK）
・貼ってはがせるタイプの強力な両面テープ
・obniz用の電源(microUSB)

#obnizについて
obnizのことや初期設定などは公式サイトをみてもらうのが良いと思います。
超簡単！
https://obniz.io/

<img width="400" src="https://qiita-image-store.s3.amazonaws.com/0/284836/f91f460c-b0ba-4068-d9a6-2f4a6c877b55.jpeg">

obnizのWiFi設定をして、obnizのOLEDに表示されるQRコードを読み込むだけです。
スマートフォンだけで初期設定からIoTまでできちゃう。サーボモーターを挿せばすぐ動きます。

これでSwitchBotのように物理スイッチを押せるはずです。

#サーボモーター制御用のプログラムを用意する
obniz公式のレッスンに今回の目的にバッチリ合うレッスンがありました。
https://obniz.io/doc/lessons_ifttt

まずはサーボモーターを動かしてみましょう。
繋げ方はこちら↓　間違えると動きません。
https://obniz.io/doc/lessons_servo_motor

<失敗1>
今回始めてサーボモーターを買いました。
帰ってウキウキで動かそうとしたらサーボモーターのコネクタがメスでobnizに繋げられなかったのです。
お友達に聞いたら「オスオスのジャンパーワイヤーでいいよ」ということで解決！

<img width="400" src="https://qiita-image-store.s3.amazonaws.com/0/284836/0bb94f30-56ae-39fb-d4f7-caa972f5ba5f.jpeg">

手順の通りに動かしてサーボが動けばOKです。

obnizのマイページでリポジトリに新規ファイルを作成します。
タイプ：WebApp
ファイル名：適当に
<img width="800" src="https://qiita-image-store.s3.amazonaws.com/0/284836/4ed5ad76-19ab-d839-da01-400e9f9befa6.png">

公式レッスンのソースをコピペして、今回用に手直しします。
とりあえずサーボが動けばOKなのでこんな程度で。
<img width="800" src="https://qiita-image-store.s3.amazonaws.com/0/284836/dd5aa166-4697-5ee4-ac64-ede69395645a.png">


```JavaScript
<!-- Neochi -->
<html>
<head>
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <script src="https://obniz.io/js/jquery-3.2.1.min.js"></script>
  <script src="https://unpkg.com/obniz@latest/obniz.js" crossorigin="anonymous"></script>
</head>
<body>

<script>
var obniz = new Obniz("ここにobnizのIDを入力しておく");
obniz.onconnect = async function () {
  
  if (typeof req === "object") {
      var servo = obniz.wired("ServoMotor", {gnd:0 , vcc:1 , signal:2 });
      
      // スイッチを押す
      servo.angle(0);
      await obniz.wait(500);
  
      // 押した後戻す
      servo.angle(90);
      await obniz.wait(2000);
  }
  
  // 終了
  if (typeof done === "function") {
    done();
  }
}
</script>
</body>
</html>
```

出来たら保存です。

servo.angle(int)の数値は筆者の自室での設定値です。
筆者のサーボは0～180の範囲で動かせるので、
サーボホーンを調整するなり値を調整するなりで色々試しましょう。

#obnizのイベントを作成する
obnizのマイページに「イベント」があるので、
新規作成します。

名前：適当に
実行するWebApp：実行したいプログラム
きっかけ：Webhook
ここのWebhookのEndpointURLがこの後必要になります。
<img width="800" src="https://qiita-image-store.s3.amazonaws.com/0/284836/80bf3954-8e82-9568-1500-4cb0f9c489c6.png">

#IFTTTでトリガーを作る
obnizの公式レッスンとほぼ同じです。
今回はAlexaでトリガーを引きます。今までスルーしていましたがIFTTTを使ってみます。

サービスはAlexaを選択して、
<img width="400" src="https://qiita-image-store.s3.amazonaws.com/0/284836/8bd3595a-ab6d-1dac-b4fd-767872b9e824.png">

トリガーは「Say a specific phrase」を選択します。
<img width="400" src="https://qiita-image-store.s3.amazonaws.com/0/284836/b8d1e442-a3a8-1322-8366-7eb779a34966.png">

トリガーとなる言葉を入力します。
ここでは「スイッチオフ」としました。
<img width="400" src="https://qiita-image-store.s3.amazonaws.com/0/284836/d9284061-2c29-14c0-aa71-866141a0423a.png">

<失敗2>
始めは「まぶしい」にしてましたが、IFTTTトリガーが引けずハマりました。
Alexaだと日本語での反応が微妙？　「スイッチ」のようなカタカナが無難です。


次に「スイッチオフ」トリガーで何をするかを入力します。
<img width="400" src="https://qiita-image-store.s3.amazonaws.com/0/284836/3b5089d5-54cf-62ed-5ccf-5cc50678440d.png">

Webhooksを選択します。
<img width="400" src="https://qiita-image-store.s3.amazonaws.com/0/284836/6f4cdc61-add8-d2b8-49a8-77a3321ba160.png">

おそらく次に選択できるのは「Make a web request」だけなので進みましょう。

中身を入力します。
URL：obnizのイベントに設定されているWebhook EndpointのURL
Method：POST

Content TypeとBodyはとりあえずobnizのレッスン通りにしておきました。
この先改造することがあれば使うかも......
<img width="300" src="https://qiita-image-store.s3.amazonaws.com/0/284836/938dc801-de3d-a602-a17d-4bb790458ed2.png">

作成できたら先に進んでFinishでOKです。これで大体完成しました。

<img width="300" src="https://qiita-image-store.s3.amazonaws.com/0/284836/86e10dd2-dbcb-0095-33bc-cec104627a20.png">

なんか間違えたなーと思ったらマイアプレットからトリガーを選択して、歯車アイコンをクリックすると編集できます。
アクティビティログも確認できるので、何かおかしいと思ったら見直してみて下さい。

#ここまでの動作テスト！
Amazon Echoに「Alexa、トリガー　スイッチオフ」と語りかけます。
ﾋﾟﾛﾝという音の後にサーボモーターが動きましたか？きっと動いたと思います。

#設置！
ここが一番ハマった気がします。
色々試してみて、最終的に一番上手くいった方法を書きます。

1. サーボモーターに付属のサーボホーンを付けて、モーター本体の側面に両面テープを貼ります。
2. 電灯のスイッチ近くに良い感じに貼り付けます。
3. 動かします

動きましたね（脳筋



実際に動かしている様子です。

![3h9ym-8fvnt.gif](https://qiita-image-store.s3.amazonaws.com/0/284836/5a94802e-b806-a236-f77d-2ef8d6ac7ae0.gif)
これで寝ながらにして消灯が可能になりました。
もちろんAmazon EchoではなくGoogle Homeでも同じことが可能です。

<失敗3>
この実装だと使ってるうちにモーターがobnizごと落下するので、
モータを動かす範囲を調整する、両面テープを貼り替えるなどして対策しましょう。
サーボホーンにスイッチを動かす用の何かを追加して、モーターを貼り付ける場所を変えるのが良いと思います。
そして、もっと安定したところに設置しましょう。

#感想
obnizはいいぞ。

ほぼWEBブラウザ上での作業でした。
今回はPCで設定しましたが、スマートフォン上で全部できます。とてもありがたいですね。
モーター設置時に上手いポジション探しで半日消費しましたが、他の部分は30分程度で出来ました。楽しい！

今回は声をトリガーに制御しましたが、obnizには定期実行の設定もあります。
毎日夜中の2時ぐらいに動作するよう設定しておくと、声すらいらなくなりますね。

来週はobnizでパンツァー・フォーする予定です。