【初心者チャレンジ】obnizと繋げてひかる　LINE　BOT

##身の程をわきまえずobnizとLINE　BOTを繋げる

今週も懲りずに初心者チャレンジです。とにかく使ってみる。
先日の教訓を活かしひとまず形にする事を最優先に。。。



##参考資料


[【資料1】1時間でLINE BOTを作るハンズオン (資料+レポート) in Node学園祭2017 #nodefest](https://qiita.com/n0bisuke/items/ceaa09ef8898bee8369d)
[【資料2】老眼と加齢性難聴のチェックができるLINE Bot×Iotの作成](https://qiita.com/doikatsuyuki/items/fb14483b69a3d3202bed)

##概要
①【資料1】を参考に　LINEBOTを作る
②【資料2】を参考に　node.jsでobnizと繋げるコードを書いて開発
③【資料1】を参考に　ngrokで繋ぐ
④LINEBOTに指示→obnizを起動して光らせる

##目標
前回作ったおみくじLINEBOTの結果に合わせて、大吉なら赤、凶なら青など、連動してLEDを光らせたい


##環境
Node.js v10.16.3
Windows 10 pro
Visual Studio Code v1.39.1
##使用したコード

```ruby:
'use strict';

const express = require('express');
const line = require('@line/bot-sdk');
const PORT = process.env.PORT || 3000;

const config = {
    channelSecret: '',
    channelAccessToken: ''
};

// Obnizの準備
const Obniz = require("obniz");
const obniz = new Obniz("");


const app = express();

app.get('/', (req, res) => res.send('Hello LINE BOT!(GET)')); // ブラウザ確認用(無くても問題ない)
app.post('/webhook', line.middleware(config), (req, res) => {
  console.log(req.body.events);

  // ここのif分はdeveloper consoleの"接続確認"用なので削除して問題ないです。
  if (req.body.events[0].replyToken === '00000000000000000000000000000000' && req.body.events[1].replyToken === 'ffffffffffffffffffffffffffffffff') {
    res.send('Hello LINE BOT!(POST)');
    console.log('疎通確認用');
    return;
  }

  Promise.all(req.body.events.map(handleEvent)).then((result) => res.json(result));
});

const client = new line.Client(config);

async function handleEvent(event) {
  if (event.type !== 'message' || event.message.type !== 'text') {
    return Promise.resolve(null);
  }

  let ans = '';
  const question = event.message.text;
  console.log({question});
  // const distance = parseInt(question);

  let color; // LEDの色

  if (question === '赤') {
    ans = '赤色';
    color = [255, 0, 0];
  } else if (question === '青') {
    ans = '青色';
    color = [0, 0, 255];
  }

 
  await obniz.connectWait();
  const leds = obniz.wired('WS2811', {gnd: 0, vcc: 1, din: 2});
  leds.rgbs([color]);

  return client.replyMessage(event.replyToken, {
    type: 'text',
    text: ans, // 実際に返信の言葉を入れる箇所
  });
}

app.listen(PORT);
console.log(`Server running at ${PORT}`);

```

##余談

途中試行錯誤しながらコードをさわるも

<img width="400" alt="55518.jpg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/508651/80ed6dc7-9bfb-f692-5827-3a2cd141951a.jpeg">


**フル無視。**
あまりに無視されるのでつい暴言が。


##ついに
![55521.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/508651/021cf532-2c49-ff6e-fd36-64898abfcc69.jpeg)
やったぞ！！
赤にチェンジだ！！

![55522.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/508651/f2f31cbf-7354-0a91-70d3-cf7e9e8d63dd.jpeg)

よし！！
もう一度青！！
![55523.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/508651/f0c7403d-e045-a3b2-f117-17d0f6217805.jpeg)


色は変わったもののまた無視される…なぜだろう、、、
そしてこれ以降赤の指示をしても変わる事はありませんでした。
一度node.jsの実行をやめるとまた色は変わるのですが、各色1回が限度でした。


##結果
おみくじと連携させる前段階のラインからの指示ごとに色を変える
**-終-**


残念な結果に終わりましたがとりあえず一区切りを記事にして、
今回使ったコードを掘り下げたいと思います。
うまく動かなかったものの、自分で少し考えてオリジナルの部分を一部作れたのは今回の嬉しかったポイントです。
はじめは英語の長文羅列のように見えていたコードですが、簡単な数式と束は見つけられるようになりました。
まぁ…動かないんですけどね。
多分階層の組み合わせ方が分かっていないのかな、、、
などと、少しわかっていない所の姿がぼんやりと見えてきたような気がします。
早く眼鏡を手に入れ姿をしっかりつかめるように頑張ります。