homebridge-http(github版)のエラー解消
本家npmでインストールできるhomebridge-httpは、スイッチのON/OFF状態を1か0で応答しなければ解釈できませんが、ESPeasyはGPIOのステイタスをJSON形式で返します。
githubに上がっている最新版はJSON形式のステイタスをサポートするのですが、なにやらエラーが起きます。
というところまでが、前回、nodeMCUにESPeasyをインストールして3chリレーを制御し、リビングの3つの照明をコントロールしたという話。
本家npm版だと、照明の状態とiOSのホームアプリに表示される状態が一致しません。常にOFFの状態で開始されます。
(でも、何度かタップすれば良かったので、利用自体にはそれほどクリティカルな問題ではありませんでした。)
しかし、なんとも歯がゆい。
そこで、github版を、プログラミングが何一つ出来ない私が急ごしらえで直しました。
まずは、本家npm版をアンインストールし、github版をインストールします。(念のためキャッシュの削除も)
gentoo ~ # npm rm homebridge-http
gentoo ~ # npm cache clean
gentoo ~ # npm install -g git+https://github.com/rudders/homebridge-http#master
githhubからインストールする場合は、URLの前にgit+を、最後にブランチを(ここでは#maaster)を記載する必要があります。
で、config.jsonは前回書いているので、そのまま起動すると、一応は起動します。
が、iOSのホームアプリを起動すると、
ReferenceError: that is not defined
のようなエラーが出ます。
で、本体を直します。
/usr/lib/node_modules/homebridge-http/index.js
の、221行目付近
var customStatusOn = that.status_on;
var customStatusOff = that.status_off;
を
var customStatusOn = this.status_on;
var customStatusOff = this.status_off;
に、
233行目の
that.log("Status On Get Power State", statusOn);
も
this.log("Status On Get Power State", statusOn);
とします。
次に、
ReferenceError: compareStates is not defined
というエラーも出ますので、61行目から71行目にある
function compareStates(customStatus, stateData) {
var objectsEqual = true;
for (var param in customStatus) {
if (!stateData.hasOwnProperty(param) || customStatus[param] !== stateData[param]) {
objectsEqual = false;
break;
}
}
// that.log("Equal", objectsEqual);
return objectsEqual;
}
をコピーして、212行目あたりにペーストします。
これで、homebrigeを再起動すると、しっかりとJSONでのステイタスを解釈し、比較してスイッチがONなのかOFFなのかを判定し、iOSのホームアプリに返してくれます。
githubに不具合報告したいところですが、プログラミングの知識も英語力もないので、報告できません。
だれか、代わりに報告してくれないかなぁ・・・。