Xplova NOZA (無印)をハックする (2)

TL;DR

結局、Xplova (Acer) NOZA (無印) がどこの馬の骨(OEM)かを突き止めたのですが、ほぼ Powerplus で間違いなさそうです。

というのも、英語サイトには書いてないのですが、中文サイトの製品には

Xplova NOZA 负责Xplova骑行台的生产以及技术指导,NOZA在品质把控较为严格的日本 销售最多,品质与服务深获日本骑友的肯定

と書いてありまして、品質の厳しい日本で最も売れているスマートトレーナー! と誇らしげに言ってしまっています。

現実には品質もサポートも色々とダメなんですが、こう書かれると日本市場って難しいんだなとも思い、愛おしく感じてしまいます。(謎)


NOZA(無印)のダメなところ

まあ、本家のPowerplusのサイトを見ていると、本来はそこまでおかしな製品ではなさそうです。
(よくある中国大陸の零細メーカーが出しているそれなりに良心的な製品という意味で)

ただ、前々回のあとがきに書いたFCCの分解リポートを見てしまうと、決定的にダメだと思ったのがスピードセンサーの設計のいい加減さ(本当にホビー用の汎用基板の流用を量産に使ってしまった)だったり、国内サポートの悪さだったりなのではないかと思うのです。

あと、Xplovaが現在NOZA(無印)用に配信している最新ファームウェア(NOZA.BT204.1.4.03)も問題があるように思えます。

具体的には、実質的にBLEでZwift for MacとXplovaのWorkoutアプリ以外ではまともに使えないのです。
(ちなみに、自分はANT+のドングルを持って居ないので試せて居ないのですが、逆にANT+でしか使えないというレビューもAmazonで見ました。これはANT+のドングルを買ってみたら試してみようと思います。)

さらに、ほとんどのアプリで NOZA は Smart Trainer として認識されず、PowerMeter としてしか認識されません。

例えばRGT(Road Grand Tour)ではNOZAはPowerMeterとしてしか認識されないため、ERG(負荷固定モード)もGradient(傾斜負荷)もコントロールされません。

では、中国製のアプリならもうちょっと自国の製品に対して対応が良いのではないかと思ってOnelapでも試してみましたが、こちらもやはりNOZAはPowerMeterとしてしか認識されません。

RGTでNOZAを認識させた場合パワーメーターになってしまう。
(端末はPixel4a 5G)
OnelapでNOZAを認識させた場合もRGTと同じでパワーメーターになってしまう。(端末はPixel4a 5G)

で、Zwiftなんですが、これは端末によって挙動が違います。

Zwift for Android

Zwift for Androidの場合、NOZAはPowerSourceとしてしか認識しません。(Pixel4a 5G、App: 1.0.80953の場合)

Zwift for Android ではNOZAは PowerSource としてしか認識されず・・・

Zwift for Windows

Zwift for Windowsの場合、コンパニオン(ZC)でのブリッジ接続をしない場合は、全く認識できませんでした。

ちなみに、PC の場合は Bluetooth モジュールが BLE に対応している必要があるので、これは自分の Thinkpad 側の問題の可能性が高いです。

一方で、ZC アプリを経由すると一応 PowerSource と Controllable として認識されますが、プレイしてみると ERG も Gradient もコントロールされないという状況になりました。

Zwift for Mac

Zwift for MacではWindowsと異なり、NOZAは PowerSource と Controllable として認識します。(Macbook Pro 13inch 2020 (Intel))) これは ZC アプリを経由してもしなくてもどちらも正常に認識します。

そして、肝心な ERG モードと Gradient ですが、こちらも問題なく動作します。

Zwift for Mac の場合 NOZA は PowerSource および Controllable として認識される

というわけで、結局現状の NOZA (無印) が BLE 接続 でまともに動作するのは Mac版 Zwiftだけということになります。

この件、あまりに不可解なので Zwift Japan のサポートセンターにも問い合わせてみたのですが、再現出来ませんでしたというまあ予想通りの答えをいただきました。(ありがとうございます。)

まあ、個人的には特定のマイナー機種に対する問い合わせなんてそうなるよねって思います。。 サポセンの人も大変なんだな。


Bad Idea

で、XplovaのNOZA(初代)に対するやる気の無さを見ると、NOZA (初代)ユーザーの不具合に対応してくれるとは思えないというのが実情だと思います。

というか、NOZA (初代)なんか3年前の廉価機種でしょ、はやく NOZA-S 買ってよとでも内心思ってそうですよね。
それでも初代も9万円くらいだったはずで、廉価とはいえそれなりに高いんですけどね。

一方で、NOZA の OEM 元の Powerplus ですが、実はこちらもファームウェアを公開してくれています。しかも、NOZA の最新ファームウェアよりも Powerplus のファームのほうが新しいという・・・。

こうなると NOZA を Powerplus 化できないかとか思っちゃいますよね?


NOZAにPowerplusのファームを焼いてみる

結論から言うと実は焼けます。(もちろん推奨はしませんが、NOZAの各種不具合が一応解消します (後述))

前回の記事に書いた通り、NOZA は Nordic の nRF52832 がコントローラとなっています。

で、NordicのnRFシリーズはDFUというFOTA機能が実装されており、BLE経由でソフトウエアがアップデートできます。そして、どうやら Xplova の Workout アプリはこのDFU機能でファームウェアを書き換えているようです。

nRFシリーズ用のデバッグツールも Nordic が Android/iOS 向けに出しており、Google Play で導入できます。さらに、ここから DFU を実行できるようになっています。

問題は、NOZAの場合、DFU機能は通常は閉じているようで、Nordic の nRF Connect で NOZA の利用可能な GATT(プロファイル) をみても DFU が有効になっていません。これは Workout アプリが何らかの方法で NOZA を DFU モードに入れてからファームウェアを書き換えているのだと思います。

で、当初はもっと物理的な方法で書き換えようかなと思っていた(e.g. SWD経由とか)のですが、実は Powerplus のサイトで ファームウェアを書き換える方法が説明されていました。

スマホにNordic nRF Connectと nRF Toolboxを導入する

自分はAndroidしか持っていないので、Google Play から上記の2つを導入します。

NOZA を DFU モードに入れる

nRF Connectを立ち上げて、SCAN から NOZAを探します。

次に、Nordic UART Service を探します。

で、この RX Characteristic にある上向き矢印を押して、NOZA を DFU モードに入れるためのコマンドを UART で送信するのですが、その前に右上の Disconnect の右にあるハンバーガーメニューを開いて、[Parse known characteristics] にチェックが入っていれば外します。

[Write value] で 0xeaa8 を入力し、[SEND] でコマンドを送信します。
うまくいけば接続状態がDisconnectedになった上で、NOZAが再起動してDFUモードに入るはずです。

再び [SCANNER] タブで Scan をすると、Dfu <製番> というデバイスが見えていると思います。
これが DFU モードに入った NOZA です。

Powerplusのファームを焼く

無事に NOZA が DFU モードに入ったので、Powerplusのファームウェアを焼いてみます。

Powerplusのファームウェア自体は普通にPowerplusのサイトからダウンロードできます。

で、DFUモードでダウンロードしたファームを焼くには、nRF Toolbox のほうを使います。

nRF Toolboxを開いて、DFUメニューを選びます。

そして、[SELECT FILE] でファームのzipファイルを選択し、[SELECT DEVICE] で DFUモードに入っているNOZAを選択し、あとは [UPLOAD] を押すとアップデートが開始されます。

無事に焼けるとNOZAは一度再起動して、通常の電源投入時と同じようにキャリブレーションモード(赤ランプ)に入ったあと、接続待ちモード(緑ランプ点滅)になるはずです。

ちなみに、Powerplus 化した NOZA を NOZA 純正ファームに戻せるのかですが、これも NOZA のファームは一応ダウンロードできるので同じ手順で戻せます。

さらに、Powerplus アプリが Google Play にあるんですが、Powerplus 化した NOZA も一応 Powerplus V6 として認識はされるものの、アプリからは扱えないようです。
(というよりも、アプリの出来がよくなく、Pixelだとクラッシュするのでアプリ側の問題なのかも・・・)

あと、Xplova Workout からどう見えるかですが、Powerplus 化しても NOZA として認識します。
ただし、Workout アプリから全く制御できなくなるので注意が必要です。

Powerplus化したNOZA

Powerplus 化した NOZA ですが、まず変化として名前が NOZA ではなく Power+ となります。

そして、Android の RGT や Onelap から接続すると普通の BLE FTMS プロトコル対応のトレーナーとして認識されます。

RGTではNOZAをPowerMeterとしてしか認識しなかったが、Powerplus化するとFTMSとして認識される。
OnelapもRGTと同様でSMART TRAINERとして認識する。

そして、一番大事なポイントですが、RGT や Onelap で ERG モードと Gradient (傾斜負荷)が制御されるかですよね。
そこで、Powerplus 化した NOZA でちょっと乗ってみたのですが、問題なく路面に応じて負荷も変動するようになりました。

Zwift にしても同様で、NOZA では Windows + BLE では使い物になりませんでしたが、Powerplus 化すると Windows + BLE でもNOZAでの不具合が嘘だったかのようにERG モードも Gradient も制御されるようになります。

もちろんZwift for Macでも問題なく認識する。

不具合としては、Xplova Workoutで制御できなくなるくらいなので、正直あまり不具合はないかもしれません。

あと、ファームが違うのでハッピーメーター化(実際よりも高くワット数が出る)状態になっていないかですが、2つのファームウェアを交互に乗ってみましたが、自分の貧脚で同じように乗ってみた感じでは特段負荷とワットが変化しているようには感じられませんでした。ただし、これはクランク型のパワーメーターとかで別途検証をしたほうがよさそうです。(ちなみに僕は持ってないので検証できないのですが・・・)


まとめ

NOZA の Powerplus 化は推奨されるべきものではないですが、現実的に Xplova が不具合を放置している現状では、NOZA を購入したユーザーにとっては光となりえると思います。

僕は NOZA に関してはセコハン(しかもジャンク)で手に入れたので Xplova に対しての批判はそこまでないのですが、定価で買った人のことを考えると人柱というか被害者と言って良いのではないかと思います・・・。

そして、Xplova に対しては OEM 元との契約があるのかもしれませんが、Xplova は NOZA を買ってくれたユーザに対してもっと誠実な対応(たとえば、Zwiftの更新に合わせてちゃんと最新のFWを提供するとか)をしても良いのではないでしょうか。

Leave a Reply

Your email address will not be published. Required fields are marked *