homebridge-http(github版)のエラー解消

本家npmでインストールできるhomebridge-httpは、スイッチのON/OFF状態を1か0で応答しなければ解釈できませんが、ESPeasyはGPIOのステイタスをJSON形式で返します。

githubに上がっている最新版はJSON形式のステイタスをサポートするのですが、なにやらエラーが起きます。

というところまでが、前回、nodeMCUにESPeasyをインストールして3chリレーを制御し、リビングの3つの照明をコントロールしたという話。

 

gentoolinux.hatenablog.com

本家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に不具合報告したいところですが、プログラミングの知識も英語力もないので、報告できません。

だれか、代わりに報告してくれないかなぁ・・・。