enebularでobnizをカスタムノードで動かしてみた


この記事は[enebular advent calendar 2018](https://qiita.com/advent-calendar/2018/enebular)の18日目の記事です。
記事の内容に詰まって１時間遅れで投稿してます。


↓いいわけ
<blockquote class="twitter-tweet" data-lang="ja"><p lang="ja" dir="ltr">enebular advent calendar書いてるけど、思ったよりnode-red libraryの反映がなかなかされなくて今日中に書き上げられるか怪しい。。。。</p>&mdash; 9wick (@9wick) <a href="https://twitter.com/9wick/status/1075032530120773638?ref_src=twsrc%5Etfw">2018年12月18日</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script> 


## つくったもの

- 最近enebular meetupでobnizが活躍してるらしい！
- カスタムノード作成のLTも流行ってる！

というのを見たので、両方掛け合わせてobnizのカスタムノードつくってenebularで使ってみました！
enebular x obnizを生でやると、websocketのリダイレクトで大変だったようなので、その解決策になります。

[前に書いた記事](https://qiita.com/wicket/items/0697dda6d9794f8e6201)の「誰かがobnizノードを作ってくれるのを待つ」つもりだったら結局自分が書くやつです、はい。

## obnizって何？
obnizはAPIで操作できるマイコンボードです。
APIで操作＝enebular(node-red)でも操作できる　となっていて、非常に簡単に現実世界の"もの"とシステムをつなぐことができます！
公式サイトは[こちら](https://obniz.io)


## カスタムノードを作ってみた
カスタムノードの作り方はいろんな人が紹介してたので、参考にさせてもらった記事だけ載せときます！
- [自作ノード開発中にハマったあれこれ #nodered](https://hiiiiiiihikaru.hatenadiary.com/entry/2017/12/22/145515)
- [Node-REDのノードを作り、Node-RED Libraryに登録する](https://ambidata.io/blog/2016/09/22/node-red/)

どっちも古い記事ですが、まだまだ参考になる現役記事でした。
カスタムノードにはいろんなハマりポイントがあるようですが、自分がハマったのはpackage.jsonのkeywordsにnode-redを入れてなかったことでした。


## obnizノードの使い方
せっかく公開したので、使い方等をメインで書いていきます。


### install 
node-red Libraryに追加もされたので、"Manage palette"からいけます
<img width="1124" alt="スクリーンショット 2018-12-18 23.25.54.png" src="https://qiita-image-store.s3.amazonaws.com/0/227015/26a340e5-4470-12b5-9ce0-9c3939b04b8b.png">


obnizで検索してinstallします
<img width="712" alt="スクリーンショット 2018-12-19 0.32.39.png" src="https://qiita-image-store.s3.amazonaws.com/0/227015/2fe05b90-0b6a-03be-c2bc-00d3aac65b99.png">


暫く待つとインストールが完了して
advancedカテゴリ内にobnizノードが出現します<img width="1308" alt="スクリーンショット 2018-12-19 0.34.25.png" src="https://qiita-image-store.s3.amazonaws.com/0/227015/14678fc7-9220-6f98-3711-fce50f1b06c5.png">

### 使い方
 [obniz websocket api](https://obniz.io/doc/about_obniz_api) に応じたjsonデータをこのノードに渡してあげるとobnizが反応します。

obnizIdの設定はノードをダブルクリックしたときの設定画面でやります
![スクリーンショット 2018-12-18 23.58.53.png](https://qiita-image-store.s3.amazonaws.com/0/227015/1e221775-a756-54c4-f56a-ca1babd5e95e.png)




### サンプル

injectで次のjsonを流してみました

```json
[
   {
       "display": {
          "clear": true, 
          "text": "Hello, obniz!"
       }
   }
]
```
ディスプレイに "Hello, obniz!"　と表示するjsonです。

![スクリーンショット 2018-12-19 0.10.25.png](https://qiita-image-store.s3.amazonaws.com/0/227015/f3798ae8-e015-018e-9b83-22acc5afa9e3.png)


画面が小さくてわかりにくいですが、injectのボタンが押されたらディスプレイの表示が変わっています
![20181219_004438.GIF](https://qiita-image-store.s3.amazonaws.com/0/227015/e20bdfa0-74dd-8ad4-fa8f-fa032f07fd30.gif)


もう一つ別のtextでついかしたらこんな感じになりました

![スクリーンショット 2018-12-18 23.58.35.png](https://qiita-image-store.s3.amazonaws.com/0/227015/944f096f-fb32-fbe0-654a-f061481b437d.png)
![20181219_004118.GIF](https://qiita-image-store.s3.amazonaws.com/0/227015/3c758eeb-582d-f1a8-e385-0f7da9bd5185.gif)


1Aまでの出力やPWMなどの機能もjsonから扱うことができるので、これでなんでもenebularから動かすことができます！

## 今後
まだバージョン0.2の名前の通り、全然実装できてない部分があるので、
お正月休みつかって下記あたり実装したいなぁと企んでます。
node-red/enebularは初心者なので、こういうのあると便利！ってのがあれば教えてほしいです。

- twitterノードの"接続済み"みたいにobnizのonline/offlineがノード上でわかるようにしたい
- 今はobnizにデータ送るしかできていないが、データ受信用のノードを作りたい
- 複数台のobnizにつないだとき（obnizノードが複数ある時）の挙動が未知なので、検証したい
- obnizが未接続時の対応をちゃんと書きたい（今はデータ無視してる）


こたつの魔力に負けなければやります！　・・・負けそうな予感