Raspberry Pi ZeroのHomeBridgeで、BME680により取得した温度、湿度、気圧、空気質指数?を表示しようとして1.5日ぐらい詰まりました。
BME680のテスト
https://github.com/pimoroni/bme680-python/blob/main/examples/read-all.py#L16
このプログラムでBME680のテストができます。正しく配線して、i2cを有効化して実行してください。
HomeBridgeのセットアップ
方法が2つあります。
1つ目はHomeBridgeのOSをインストールする方法です。一発でUIにアクセスできるようになるので便利です。試してないですがRaspberry Pi OSは使えなくなる?と赤外線関係ができなくなるかもしれないと考えたので、今回は使いません。(実際どうかはわからない)
https://github.com/homebridge/homebridge-raspbian-image/wiki/Getting-Started
2つ目はRaspberry Pi OSにインストールする方法です。UIにアクセスするまで書いてあります。
https://github.com/homebridge/homebridge/wiki/Install-Homebridge-on-Raspbian
使用した者たち
非公式node.jsビルド v20.16.0 : https://unofficial-builds.nodejs.org/download/release/v20.16.0/
BME680のプラグインをインストール
プラグインでbme680と検索すると、マサチューセッツ工科大学のプラグインが出てきたのでインストール。
指示に従って再起動すると…
====================
[dd/mm/yyyy, hh:mm:ss] ERROR LOADING PLUGIN homebridge-bme680:
[dd/mm/yyyy, hh:mm:ss] Error: Could not locate the bindings file. Tried:
→ /var/lib/homebridge/node_modules/homebridge-bme680/node_modules/i2c-bus/build/i2c.node
→ /var/lib/homebridge/node_modules/homebridge-bme680/node_modules/i2c-bus/build/Debug/i2c.node
→ /var/lib/homebridge/node_modules/homebridge-bme680/node_modules/i2c-bus/build/Release/i2c.node
→ /var/lib/homebridge/node_modules/homebridge-bme680/node_modules/i2c-bus/out/Debug/i2c.node
→ /var/lib/homebridge/node_modules/homebridge-bme680/node_modules/i2c-bus/Debug/i2c.node
→ /var/lib/homebridge/node_modules/homebridge-bme680/node_modules/i2c-bus/out/Release/i2c.node
→ /var/lib/homebridge/node_modules/homebridge-bme680/node_modules/i2c-bus/Release/i2c.node
→ /var/lib/homebridge/node_modules/homebridge-bme680/node_modules/i2c-bus/build/default/i2c.node
→ /var/lib/homebridge/node_modules/homebridge-bme680/node_modules/i2c-bus/compiled/20.16.0/linux/arm/i2c.node
→ /var/lib/homebridge/node_modules/homebridge-bme680/node_modules/i2c-bus/addon-build/release/install-root/i2c.node
→ /var/lib/homebridge/node_modules/homebridge-bme680/node_modules/i2c-bus/addon-build/debug/install-root/i2c.node
→ /var/lib/homebridge/node_modules/homebridge-bme680/node_modules/i2c-bus/addon-build/default/install-root/i2c.node
→ /var/lib/homebridge/node_modules/homebridge-bme680/node_modules/i2c-bus/lib/binding/node-v115-linux-arm/i2c.node
at bindings (/var/lib/homebridge/node_modules/homebridge-bme680/node_modules/bindings/bindings.js:126:9)
at Object.<anonymous> (/var/lib/homebridge/node_modules/homebridge-bme680/node_modules/i2c-bus/i2c-bus.js:4:32)
at Module._compile (node:internal/modules/cjs/loader:1358:14)
at Object.Module._extensions..js (node:internal/modules/cjs/loader:1416:10)
at Module.load (node:internal/modules/cjs/loader:1208:32)
at Function.Module._load (node:internal/modules/cjs/loader:1024:12)
at Module.require (node:internal/modules/cjs/loader:1233:19)
at require (node:internal/modules/helpers:179:18)
at Object.<anonymous> (/var/lib/homebridge/node_modules/homebridge-bme680/node_modules/bme680-sensor/lib/bme680.js:3:13)
at Module._compile (node:internal/modules/cjs/loader:1358:14)
ChatGPTに入れてみると、i2c-bus
というnpmのモジュールが入っていないからだそうで。
SSHのターミナルから適当にインストールしてみると…
$ sudo npm install -g i2c-bus
internal/modules/cjs/loader.js:883
throw err;
^
Error: Cannot find module 'node:path'
Require stack:
- /usr/local/lib/node_modules/npm/lib/cli.js
- /usr/local/lib/node_modules/npm/bin/npm-cli.js
at Function.Module._resolveFilename (internal/modules/cjs/loader.js:880:15)
at Function.Module._load (internal/modules/cjs/loader.js:725:27)
at Module.require (internal/modules/cjs/loader.js:952:19)
at require (internal/modules/cjs/helpers.js:88:18)
at Object.<anonymous> (/usr/local/lib/node_modules/npm/lib/cli.js:2:18)
at Module._compile (internal/modules/cjs/loader.js:1063:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:1092:10)
at Module.load (internal/modules/cjs/loader.js:928:32)
at Function.Module._load (internal/modules/cjs/loader.js:769:14)
at Module.require (internal/modules/cjs/loader.js:952:19) {
code: 'MODULE_NOT_FOUND',
requireStack: [
'/usr/local/lib/node_modules/npm/lib/cli.js',
'/usr/local/lib/node_modules/npm/bin/npm-cli.js'
]
}
謎のエラー。よくわからなかったので、またもやChatGPTに聞いてみると
このエラーは、
node:path
モジュールが見つからないために発生しています。これは、Node.jsのインストールに問題があるか、破損している可能性があることを示しています。以下の手順でNode.jsとnpmを再インストールして問題を解決してみましょう。
Node.jsの破損か。たしかに心当たりはあります。
Raspberry pi zeroではCPUが古いため公式のNode.jsは動かないそうで、非公式のものをインストールしました。(参照した記事:https://note.com/t_t_tonbi/n/n1c0aab5f731d)
代わりにいろいろ11系のバージョンだったり入れてみてもうまくいかず、実に1日以上を費やしました。(何やってんだか)
ここでChatGPTが意味深な発言をします。
- Homebridgeがインストールされているディレクトリに移動します。通常は
/var/lib/homebridge
です。bashコードをコピーするcd /var/lib/homebridge
- 「i2c-bus」モジュールを再インストールします。bashコードをコピーする
npm install i2c-bus
ここまで来てやっとわかりました。HomeBridgeのUIの方を確認すると…

やっぱり。HomeBridgeのために独自のNode.jsがインストールされているでは有りませんか。
そして、UIの方の「コンソール」のところで、sudoを外して
npm install i2c-bus
これでインストールできました。
再起動してみるとちゃんとプラグインが動いてHomeApp上で気温・湿度・空気質が確認できるようになりました。やったね!
結論:専用コンソールがあるなら使え
いやぁ、ずっとSSHの方のコンソールで操作してて、よくわかんねぇなぁ…と思いながらやっていたので思ったより手こずってしまいました。
アプリケーション専用のコンソールあるなら優先的に使ってみたほうが良いのかなと思います。
今後は赤外線を実装するぞ!!
番外編:気圧も表示したい
マサチューセッツ工科大学さんのプラグインでは、気圧を表示することが出来ません。
せっかくBME680で気圧を測定できるので、既存のソースコードを参考に、気圧を表示できるようにしてみたいと思います。
…と思って張り切ってコードを見たのですが、別に意図的に大気圧が表示されないようになってるわけじゃないんですよね。
と思って検索したらこれが見つかりました。
https://github.com/arachnetech/homebridge-mqttthing/issues/367
なんと、デフォルトのホームアプリは気圧表示に対応していないらしいです。マジか。
Eveというアプリを入れると自動で表示されました。な~んだ。
Eveは完全無料で、プライバシーもAppStore上では匿名加工情報として診断ログのみ収集になっていたので割とそこはしっかりしてるっぽいです。



公式サイト:https://www.evehome.com/en-us
[メモ]古いバージョンのHomeAppに戻してiPadをホームハブに
参考:https://discussions.apple.com/thread/254934792?sortBy=rank
http://appldnld.apple.com/iOSProfiles/HomeKitReset.mobileconfig
http://appldnld.apple.com/iOSProfiles/KeepLegacyHome.mobileconfig
参考文献
bme680-python. from https://github.com/pimoroni/bme680-python
homebridge-bme680. from https://github.com/Odisseuss/homebridge-bme680
kyle . serverあれこれ. from https://serverarekore.blogspot.com/2021/03/raspberry-pi-zerobme680.html
Raspberry Pi ZERO WHへのHomebridgeセットアップ|tonbi. from https://note.com/t_t_tonbi/n/n1c0aab5f731d
HomeBridge-bme680. from https://github.com/Odisseuss/homebridge-bme680
RaspberryPi 2にNodejs をインストール #Linux – Qiita. from https://qiita.com/sda134/items/7c55a537401eaa9679c6
自由研究:Raspberry Pi Zero に nodejs 環境を最新にしたメモ. from https://www.cooptec.jp/archives/1718
後日譚
空気質が常に「非常に良い」になっているのが気になりました。
例のリポジトリにあるsensor.js
という非常にわかりやすいファイルがあったのでのぞいてみました。[
場所はインストールの仕方によって以下のパターンが考えられます。(By GPT-4o)
sudo nano /usr/local/lib/node_modules/homebridge-bme680/sensor.js
sudo nano /homebridge/node_modules/homebridge-bme680/sensor.js
sudo nano /var/lib/homebridge/node_modules/homebridge-bme680/sensor.js
# 見つからなければ検索
find / -name "script.js" | grep homebridge-bme680
どうやら、computeIAQ
関数の下にいろいろパラメータがくっついています。
function computeIAQ(gas, humidity) {
const humidityWeight = 0.25; # 評価における湿度の与える影響度を25%とする
let gasOffset = 50000 - gas; # ガスセンサ抵抗値の基準値を50000とする
let humidityOffset = humidity - 40; # 理想的な湿度を40%とする
これを、
function computeIAQ(gas, humidity) {
const humidityWeight = 0.40; # 40%
let gasOffset = 100000 - gas; # 100000
let humidityOffset = humidity - 40;
としてみました。
ただ…変わんねぇやw
まぁおまけみたいなもんでした。
コメントを残す