Cloud Penguins

Flying penguins in the cloud.

HUISリモコンとNode-REDを繋げるやつの仕組み

Node-RED Advent Calendar 2016の14日目!

以前、Node-RED UG勉強会 Vol.1 で発表したHUISとNode-REDの連携のやつですが、とある人から仕組みを教えてくれと言われてました。

・・・が、すっかり失念しておりました(すみません)

ということで、Advent Calendarにあわせてあれの仕組みを書いてみます。

先にHUISの話

ソニーのハイテクリモコン、HUISですが、発表の後も順調にアップデートされています。先月にはHUIS UI Creator ver 2.0、HUISソフトウェア ver 4.0が出ています。

http://huis.jp/

特にHUISソフトウェアは、10月に出たver 3.1から本体の動作速度が劇的に向上しており、かなり使い勝手が良くなりました。

赤外線連携部分

HUIS x Node-REDと書いてますが、正確には赤外線リモコンのデータをNode-REDで受け取って処理するという話なので、これから書く内容は普通のリモコンでも同じように利用できます。

赤外線受信

赤外線の受信には、BitTradeOneから出ているUSB接続 赤外線リモコンKITというのを使っています

公式に提供されているツールはWindows用なのですが、Linuxで利用できるコマンド btr_ir_cmd というものがGitHubで公開されているので、今回はそれを利用しました。

https://github.com/kjmkznr/bto_ir_cmd

このコマンドで受信も送信も可能なのですが、今回は受信のみを使います。

$ sudo bto_ir_cmd -r
Receive mode
  Received code: C1AA5A8F302081

赤外線を受信すると、このようにコードが表示されます。

Node-REDとの連携

bto_ir_cmdだと、待機中に表示される文字列が邪魔だったので、以下のようなシンプルなラッパーを書き、btoというコマンド名にしました。

#!/bin/bash
echo `bto_ir_cmd -r | grep code`

フローについては

  1. Node-REDのexec nodeを使ってbtoを実行(待ち受け状態になる)
  2. 信号を受信すると標準出力が得られるので、出力をパースしてコードを取り出し
  3. コードごとにswitch nodeで処理を分岐。分岐させたあとはお好きなように
  4. exec nodeをループさせて再度btoを待ち受け状態に

という流れでやっています。

Node-REDでbto_ir_cmdを叩くフロー

ハマったポイントとしては

  • exec nodeでは、"Use spawn() instead of exec()?“ にチェックを入れること(標準出力と、さらにReturn codeをloopに使うため)
  • bto_ir_cmdではExtendedモードを使わないこと
  • Extendedを使うと大幅にレスポンスが悪化し、実用に耐えなくなる

くらいでしょうか。フロー自体は非常にシンプルなので、Node-REDに慣れている方であればすぐに応用できると思います。

Gistにフローを貼っておいたので必要であれば参考にしてください。 https://gist.github.com/jacopen/72468a6176162e9a88f5cf5f654750b5

最後に

勉強会資料の最後にもちらっと書いてますが、HUISはBluetoothに対応しており、8月にはBluetooth対応のクレードルも出ました。

Bluetoothを使えば連携の幅をさらに広げることができるので、こちらのほうも試してみたいなーと考えてます。