我が家のESP32を使った、オーディオステータスモニター。
どんどん禁断の領域へ拡大していきます。
最初は、
- ROCKの外部温度とファンノイズが見えればいいや
だったのが、今や
- Roon ROCKの温湿度
- Roon ROCKのファンノイズ・スペクトラム
- Roon ROCKの状態ステータス
と手を広げ、今日はとうとう、
- WiiM Ultraの動作状況
にまで触手を伸ばそうとしています。もっとも、無計画で野放図に領域拡大してきたわけではなく、
オーディオの健康状態が一瞥で分かる
という初期コンセプトはいささかも揺らいでいません。今回のWiiMもその延長線上にあるのです。
ところで、ご存知でしたか? WiiMはWeb-API経由で、WiiMの動作状況を取得できたり、なんだったら操作コマンドだって送れる。こちらです。
WiiMの製品というのは、すべからくネットワークへ繋がっています。ネットワークへ繋がないと動作できないからです。したがって、必然的にIPアドレスを持っています。
我が家のWiiM UltraはIPを 192.168.3.102 へ固定していますから、早速このアドレスでAPIを叩いてみましょうかね?
https://192.168.3.102/httpapi.asp?command=getPlayerStatus
(余談ですが、httpsで叩かないとAPIは動作しなかったです。セキュア警告が出るのに、です。)
このキーはWiiMの状態を返すAPIで、以下のようなJsonが返ってきました。ひとつずつ詳細にみてみましょう。
===== RAW JSON =========================
{
"type":"0”,
"ch":"0”,
"mode":"33”,
"loop":"1”,
"eq":"0”,
"vendor":"Roon”,
"status":"play”,
"curpos":"16000”,
"offset_pts":"0”,
"totlen":"558000”,
"Title":"54686520506572666563742053796D6D65747279”,
"Artist":"44656D69616E73”,
"Album":"4275696C64696E6720616E20456D70697265”,
"alarmflag":"0”,
"plicount":"0”,
"plicurr":"0”,
"vol":"100”,
"mute":"0"
}
========================================
ch : 0
は再生チャネルを表しているみたいです。0は「Stereo」です。ちなみに1はLeft Ch。
mode : 33
はどうやらINPUTソースを表している様子。実際にインプットセレクトして調べてみると、
- 33:Roon(WiFi),
- 40:Line-in,
- 41:Bluetooth,
- 42:USB-storage,
- 43:Optical,
- 45:Phono-in ….
といった感じでした。
status
は再生状態を表すようで、再生中ならplay、停止中ならstopが返ってくる。
curpos / totlen
はそれぞれ、トラックの現状再生位置と、トラック総長を表してるようだから、
「16秒あたり/合計558秒中の」を再生中・・・という意味になりますね。
Title / Artist / Album
はそれぞれ、トラックタイトル、アーティスト、アルバム名を表しているようです。16進コードで示されているみたいだから、これを読解してみると・・・
"Title":"54686520506572666563742053796D6D65747279” ...The Perfect Symmetry
"Artist":"44656D69616E73” ...Demians
"Album":"4275696C64696E6720616E20456D70697265” ...Building an Empire
となりました。これは日本語トラックの場合でも同様でした。
plicount / plicurr
はそれぞれ、再生キューの総トラック数と / その中の現在トラック番号を示しているようです。
vol
は音量ですが、WiiM Ultraは常時100%に固定していますので私の場合は無意味な情報。
mute
はミュート状態を表している。今は0だから「ミュートはしていない」。
まぁこんな感じでJsonを読解し、変換し、配列や変数へ収納し、そして最終的にはウェブ上へ投影します。
最初から一足飛びに実装したわけではありません。例によって相談しながら、牛歩戦術で一歩ずつ実験と実装確認をすすめていきました。1日に1歩しか階段を昇らないという覚悟をきめて。
実はこの進め方が最も問題点を見つけやすく、リバートしづらく、結果として進捗も早いと気づいたのです。この小さく区切った確実な進め方はアジャイルやスクラム開発とも似ています。
- 最初はAPIを叩いてJsonをそのまま収納するところまで。
- 次段では、Jsonを演算処理してパースして情報をシリアルモニターへ流すまで
- その次は、ウェブ投影のためにモジュール化するところまで
- 途中、脱線して「INPUTのUI見栄え、見せ方」のテーブルを制作してみるまで
- 最後に、CSS等の装飾を定義し、HTML上へ投影するまで
全ソースコードは [こちら] 。
今回の最大のポイントはこちらです:
- (私の使う)INPUT選択肢がすべて並んでいる
- 現在の入力選択がハイライトで表示されている
- 表示がそのまま「ボタン」となっており、他のINPUTへ切り替え可能
つまり状態表示と選択UIが一体になったもの。
オーディオマニアへ分かりやすく言えば、自照式のINPUTボタンのようなものです。
できあがったウェブ表示がこちら。

とても満足。今回も遠いところへ辿り着いた感じです。
Roon ROCK、ESP32自身、ROCKの温度、ROCKのノイズ分布・・・
そして今回はWiiMの動作ステータスです。
しかし「一瞥でオーディオの状態や不都合が判る」というコンセプトはミリも揺らいでいません。
例えば、WiiM UltraのUI。どのUIに切り替わったかが非常に分かりづらいのです。しかも、リモコンボタンを押してから遅延がある。だからオーバーシュート操作してしまう場合もある。スマホアプリは起動が面倒な上に、デバイスを選んで・・・深層のINPUT UIへ行って・・・と操作階層が深すぎる。
このダッシュボードは、一瞥で問題点が分かるんです。
「音が出ないな・・・・」「ああ、入力切り替えが間違っていたのか!」とただちに分かる。これも立派なヘルスモニタリングなのです。

シリコンパワー ノートPC用メモリ DDR4-2400(PC4-19200) 8GB×1枚 260Pin 1.2V CL17 SP008GBSFU240B02
Synology NASを拡張した時に入れたメモリーがコレ!永久保証の上、レビューも高評価。もちろん正常に動作しており、速度余裕も生まれて快適です。

フィリップス 電動歯ブラシ ソニッケアー 3100シリーズ (軽量) HX3673/33 ホワイト 【Amazon.co.jp限定・2024年モデル】
歯の健康を考えるのならPhilipsの電動歯ブラシがお勧めです。歯科医の推奨も多いみたいです。高価なモデルも良いですが、最安価なモデルでも十分に良さを体感できる。