コモノポリタン

コモノ、デジモノが好きなKomonopolitan住民 (はてなダイアリーからの引っ越しです)

【Home AssistantでDIY Smart Home】Xiaomi四角温湿度計を改造!

【Home Assistant(Hass.io)】
Xiaomi四角温湿度計を改造(カスタムファームウェアを入れる)!

「Home Assistant(Hass.io)でホームオートメーション 再起動!」シリーズです。

 Xiaomiの四角温湿度計(Xiaomi mijia Bluetooth 温湿度計(LYWSD03MMC))のBindkeyを強制的に設定してHome Assistantに接続する記事を以前書きましたが、その中で「カスタムファームウェア」の存在に言及しました。今回、そのカスタムファームウェアを使って改造(?)し、Bindkey無しでかつ追加の機能(顔文字無!とか時計とか)を設定した温湿度計を作ろうかと思います。

 オリジナルのファームウェア(もともとの状態)でのXiaomi四角温湿度計の利用については下記の以前の記事で書きました。今回はそこでも利用したatc1441氏が見つけたカスタムファーム仕組みを導入してみたいと思います。 maky-ba.hatenablog.com

この記事の前提条件
Home Assistant 2021.6.4
HassOS 6.10
Server Raspberry Pi 4(2GB)
ESPHome 1.19.0

 上記バージョンを前提とした手順です。 (最新版では動かないこともあるかもしれませんが、私が使っている限り、備忘録を兼ねて最新化してゆきたいとは思っています)

1. はじめに

 ESPHomeもバージョンが進み、Xiaomi製品への対応も拡充しています。四角温湿度計の設定も拡充しています。 esphome.io

 今回はまずは下記atc1441氏が見つけた(創り出した)カスタムファームウェアの導入にトライしてみたいと思います。 github.com
 さらに、カスタムファームウェアとしてはpvxx氏のものが良いとatc1441氏も言っているので、そちらも使ってみたいと思います。 github.com

2. 標準(?)カスタムファームウェア導入

 以前の記事でXiaomi四角温湿度計に勝手Bindkeyを割り当てた時に使ったサイトがatc1441氏のサイトです。今回まずはatc1441氏のサイトでカスタムファームウェア(本家本元の?)を入れてみたいと思います。
 まずはビフォーアフターのビフォー(オリジナルファームウェア)の顔つきを紹介しておきます。

 上段に「温度」と「ブルートゥースのアイコン」。下段に快適さを示す「顔文字」と「湿度」が表示されています。この写真では表示されていませんが、電池がなくなりそうになるとそのさらに下に電池マークが表示されます。

2.1. カスタムファームウェアダウンロード

 まずatc1441氏のサイト(ここ(https://github.com/atc1441/ATC_MiThermometer/releases))から最新のファームウェアATC_Thermometer.bin)をダウンロードしておきます。

2.2. カスタムファームウェアの導入

 まずはBluetooth接続ができるPCやタブレットで、ここ(https://atc1441.github.io/TelinkFlasher.html)にアクセスします。左上の「connect」ボタンを押すと、Bluetooh機器の選択画面が出るので対象となるLYWSD03MMCを選択します。

 Bluetooth接続が出来るとブラウザのタブの所(ここではChromeを使っています)にブルートゥースアイコンが表示されます。真ん中らへんに「Status: Connected」と表示され、さらにその下に「温度」と「湿度」が表示されます。
 もしデバイスを起動したときにスマホのBLE ScannerなどでBluetoothアドレスを確認していない時は、Chromeを使っている時はchrome://bluetooth-internals/#devicesというChromeの詳細設定ページで確認することが出来ます。
 「ファイルを選択」ボタンをクリックし、先ほどダウンロードしておいたカスタムファームウェアを選択しておきます。

 「Do Activation」ボタンを押すと下のMi Bind Key:の欄にキーが表示されます。この状態で「Start flashing」ボタンを押すと、カスタムファームウェアの導入(OTA(Over The Aire)フラッシュ)が進行し, カスタムファームウェアの導入が終わると「Update done after ....」の表示がされます。


 カスタムファームでできることは大体下記画面にあるとおり。

 一応、設定可能項目の簡単な説明を表にしておきますね。

設定 設定値 説明
Smile 快適さ顔文字表示の設定
Off 顔文字無
Happy (^_^)
Sad (-^-)
Blinking (Δ△Δ)
Comfort Indiator 顔文字表示あり
Advertising Tyep Bluetoothのアドバタイズ(データ送信)の方式
Custom カスタム形式で暗号化しないで送信。ESPHomeの設定はplatform: atc_mithermometer
Mi Like オリジナルと同じ形式だが非暗号化データ。ESPHomeの設定はplatform: xiaomi_lywsd03mmc、ダミーのBindkeyを忘れずに。
Sensor Display 室温表示の単位
In ℃ 摂氏表示
In ℉ 華氏表示
Show battery in LCD
Enabled 画面切り替えで電池残量を%で表示
Disabled 電池残量無
Advertising interval アドバタイズメッセージの送信間隔
(以下は、まあ表示通り)

 今回カスタムファームでやってみたいことは、快適さを示す「素敵な顔文字」を非表示することです*1。Smile:「Off」のボタンを押すと、ハイっ!無事顔文字が表示されなくなりました。

(これがビフォーアフターのアフターの顔つきです、すっきりしているでしょう)

3. MOD(?)カスタムファームウェア導入

 次なる改造はatc1441氏も推奨のpvxx氏のカスタムファームウェアです。pvxx氏のファームウェアは、atc1441氏のファームウェアの改変版(MOD?)で、atc1411氏のものより出来ることは多くなります。
 まず上記と同様にBluetooth接続できるPCやタブレットここ(https://pvvx.github.io/ATC_MiThermometer/TelinkMiFlasher.html)にアクセスします。左上の「connect」ボタンを押すと、Bluetooh機器の選択画面がでるので対象となるLYWSD03MMCを選択します。

 Bluetooth接続するとブラウザのタブの所(ここではChromeを使っています)にブルートゥースアイコンが表示されます。下の方のログエリアに「Connected」と表示されます。(真ん中へんに「温度」「湿度」、「電池電圧」が表示されます)

 「Do Activation」ボタンを押すとMi Bind Key:の欄にキーが表示され、ログエリアに「Login Successfull」と出ます。

 pvxx氏のサイトでは、最新カスタムファームウェアを使う場合には別途事前にダウンロードする必要はありません。「Custom Firmware m.n」ボタンを押すと最新版(バージョンm.n)が自動的にセットされます。「Start Flashing」でカスタムファームウェアの書き込みを開始します。カスタムファームウェアの導入が終わると下のログエリアに「Update done」の表示がされます。
(ちなみに元々の「Original_OTA_Xiaomi….bin」ボタンを押せばオリジナルのファームウェアに描き戻すこともできます)


 カスタムファームウェアの設定をするには再度接続する必要がありますので、「Connect」ボタンを押し、再度LYWSD03MMCを接続します。機器名称はATC_xxxxxx (下6桁はBluetoothMACアドレスの下6桁)となっていますので、名前を頼りに選択してください。

 うまく再接続されると中段に「温度」等が表示され、その下に設定用の項目が並びます。

 設定用の項目は画面の通り、というか細かい設定多すぎで…

 とりあえずやりたいことは、先ほどのカスタムファームウェアで出来たこと+時刻表示でしょうか。トイレの中にも設置しているのですが、今トイレに時計は無く、どうせなら時刻が分かったりすれば尚更便利に!
 「Show Batt」「Clock」のチェックボックスにチェックを入れて、横の「Set Time」ボタンを押します。(2023/07/30修正)久しぶりに見たら「Advertising Type: 」をPVVX(custom)にして、ESPHomeの設定画面のsensorを- platform: pvvx_mithermometerにすると暗号化なしで通信できるようになりました。なにやら信号強度も取れたりします。画面もだいぶすっきりと変わっています。まあ操作方法あまり変わっていませんでしたが。

sensor:
  - platform: pvvx_mithermometer
    mac_address: "A4:C1:38:B1:CD:7F"
    temperature:
      name: "PVVX Temperature"
    humidity:
      name: "PVVX Humidity"
    battery_level:
      name: "PVVX Battery-Level"
    battery_voltage:
      name: "PVVX Battery-Voltage"
    signal_strength:
      name: "PVVX Signal"


「Advertising Type: 」ではAtc1441を選択します。(ESPHomeのサイトでは、暗号無しで接続するにはCustomを選択せい!と書いてありますが、それはatc1441氏のサイトを使った時の話。今回はPxvv氏のサイトを使っているので、MI likeがオリジナル同じフォーマットでのアドバタイズ(だがデータは暗号化されていない)、Customがpvxx氏が作ったファームウェアAtc1441がatc1441氏が作ったファームウェアでESPHomeのサイトで言うところのCustomとなります。ふう。)
 設定したら最後に「Config」ボタンを押して変更を書き込みます。

 上手くいけば下記の様に、温湿度表示 ⇒ 電池残量% ⇒ 温湿度表示 ⇒ 時刻表示 ⇒ 温湿度表示とくるくるとサイクルが回って表示か切り替わってゆきます。できあがり!!

4. おまけ

 ホッチキスで壁に留めるXiaomi温湿度計ホルダーを3Dプリンターでつくりました。ホッチキス、いかんこれは商標だ、ステープラーの針はステンレス製が推奨です。錆びたら壁紙に茶色い跡がつきますから。

 まあ使う人はいないかもしれない(&このモデルを印刷してもサイズが合わないかもしれない)けど、一応Thingiverseにモデルを置いておきます。
www.thingiverse.com

5. おわりに

 顔文字もなく、トイレで時間を確認するという機能も実現できました!*2

 実は本記事は大分前に画面のキャプチャ含めて原稿の準備は一度ほぼ完了しておりました。が、仕上げないうちに早うんヵ月…。カスタムファームのバージョンやらWeb画面やらが色々変更になっておりました。気が付かないふりをして放置、という作戦もあったのですが、やはり一度気が付くと気なってしまうもの。なんとか記事に仕上げてみました。
 やはりさっさと忘れないうちに記事化しておくのがベストですねぇ。労力的にも。

 さて次は、やはりあれか、暑くなってきたからエアコンのリモコンの解析かな?!
(これも下書きのところで苔むしているもののひとつ…)

maky-ba.hatenablog.com

*1:これイケてないと思う。Xiaomiもなぜこれをと思いましたよ。デバイスは白でシンプルデザインで魅力的なのに表示でなぜか顔文字…だれがOKを出したのか?中国人はそれほど顔文字が大好きなのか?!

*2:とは言え、この時刻機能、どうも精度がイマイチ。すぐに分単位でズレてきます。大昔のデジタル時計の様です。