Advent Calendar 2020 2日目
前回は、バーコードリーダーを使ったフローの活用についてご説明しました。
今回は、enebularでバーコードリーダーを使うためのNode-REDのフローがどのようなものかを解説をします。
使った物
今回使った物は、以下の通りです。
- BEVAバーコードスキャナー
- 身近なバーコード(今回は、ISBNが付いている本)
- enebular agent入りRaspberry Pi 3B+
- enebular editor

最初に作ったフロー
バーコードリーダーはUSB接続のキーボードとして認識されます。そのため、Raspberry PiにUSBで接続して、Pi Keyboardノードを使って読み込めるのではないかと考えました。
そこで、最初に作ったNode-REDのフローはこちらです。バーコードらしき数字はどこにもでてきません。

デバッグタブの様子を見てもらうとわかるとおり、一つのバーコードを読んだはずなのに、数字がたくさん出てきてしまっていて、意味をなすコードとしては読めない状況です。
調べてみると
バーコードの数字とデバッグノードの数値を比較すると以下の規則性がありました。
- debugノードには、読み取った数字 + 1 になって表示されている。
- バーコードの終わりには28という数字が出てくる。
そこで、この規則を逆算して、取得した値を変換すれば良いことがわかります。
functionノードのなかに、case文でこんな風に書いてみました。
let number = msg.payload; switch(number){ case 11: msg.payload = "0"; break; case 2: msg.payload = "1"; break; case 3: msg.payload = "2"; break; case 4: msg.payload = "3"; break; case 5: msg.payload = "4"; break; case 6: msg.payload = "5"; break; case 7: msg.payload = "6"; break; case 8: msg.payload = "7"; break; case 9: msg.payload = "8"; break; case 10: msg.payload = "9"; break; case 28: msg.payload = "\n"; msg.complete = "END"; break; } return msg;
msg.completeに文字列をセットしている理由は、joinノードで全ての数値をつなげるためです。joinノードはバラバラと別れてしまったデータをつなげる役割をしています。

まとめ
enebularに接続されたRaspberry PiにNode-REDのフローをデプロイして、バーコードリーダーとして使用することを試みました。参考までに、作った実際のフローをDiscoverに公開しています。
また、今回は詳しく説明していませんが、以下のような環境でフローを作っています。
詳しくは、enebular docsを参考にしていただければと思います。
皆さんも、ぜひチャレンジしてみてください。