Matterでやりたかったけどできなかったこと

この記事は 第 2 回 Nature Engineering Blog 祭の 10 日目の記事になります。

こんにちは、Nature ファームウェア・エンジニアの村田です。 Nature Remo nano (以降、nanoと呼びます) の開発においては、主にMatterに絡んだ部分の製品仕様決めやMatter認証取得周りを担っていました。 ちょっとファームウェアもしたりQAをやったりといろいろな役割をしていました。

さて、nano の発売から2週間ほど経ちました。 読者のみなさんの中には既に nano を Apple home と組み合わせて Matter 使ってみたという方もたくさんおられるのではないかと思います。(いますよね?!) 以前から Nature Remo を利用し、且つ Amazon AlexaGoogle home と連携して使って頂いていた方にとっては、従来のスマートスピーカー連携と比べるとちょっと違和感を感じたり、まだまだできることが少ないと感じるところもあると思います。

Nature一同、開発着手当初は従来のスマートスピーカー連携同等以上を目指して進めてきたのですが、いざやってみると様々な難しさに直面し、初期リリースでは諦めた事がいくつかありました。 今日は開発の裏話的に、Matter でやりたかったけどできなかったことを、スマートスピーカとの連携やMatter 認証試験で見つかった課題などを絡めて紹介したいと思います。

はじめに

nanoはMatter 1.0の規格に準拠しています。 今日の記事内容はアプリケーションクラスタについて触れますので、以下のページから Matter 1.0 Application Cluster SpecificationMatter 1.1 Application Cluster Specification を入手して併せて見ていただくと理解しやすいと思います。 なお、Matter 1.0 Application Cluster Specification のPDFは章一覧が崩れていたりタグジャンプが動かなかったりしてストレスフルだったのが 1.1 では修正されていますので、これから読もうと言う方は 1.1 の方をまず読んで、差分だけ 1.0 を見て確認するのがおすすめです。

Specifications Download Request - CSA-IOT

では本編

現在温度 は0.0℃?

nano と Apple home を Matter 連携して使い始めたとき、最も目に付きやすい違和感がエアコンにでかでかと表示されている 0.0°の数字だと思います。 ここには一体何が表示されているかというと、エアコンが内蔵している温度センサの計測値を表示しています。

Matter の仕様的に掘り下げて説明すると、エアコンはアプリケーションクラスタThermostat Cluster として実装されています。 Apple home は Thermostat ClusterLocal Temperature Attribute の値を読み出して Apple home の ホーム画面に表示しています。 Matter 規格では Thermostat ClusterLocal Temperature Attribute は必須となっていますが、サーモスタットが温度情報を持たないような場合については、「null値 は 温度情報は無効を意味する」と記載されています。

日本でよく見るエアコンは温度設定値に合わせて風量を自動調整するような機能を持っており、大半のモデルは温度センサを内蔵しているとは思います。 しかし nano は赤外線信号でリモコンを制御しており、エアコンから温度情報を貰うことはできません。 また nano 自体も温度センサを搭載していませんので、代替として自身の温度情報を渡すこともできません。 このため、Local Temperature Attribute には null値 をセットしています。 期待としては、ホーム画面上で例えば --のように、温度無効だと分かる表示になってほしいところですが、現状把握している限りでは Apple さん ・Google さんいずれも null値 を 0℃ と解釈して表示する仕様となっているようです。

ちなみに Matter 1.1 の規格ではこの曖昧なところが変更されており、Thermostat Cluster の フィーチャーに Local Temperature Not Exposed が追加されています。 このフィーチャーを有効にすることで、サーモスタットは温度情報を持たないことをより明示的に示すことができるようになっています。 nano 開発当時はまだ Matter 1.1 は正式リリースされておらずに認証を受けられる段階ではありませんでしたが、こちらの規格バージョンに対応すれば期待通りの振る舞いになるかもしれないですね。 あるいは、nanoがリリースされたことでこのような挙動が明らかになって Apple さん ・Google さん側で見せ方改善されたりしないかな?などと期待しちゃうところもあります。

除湿が選べないじゃないか

また、Apple home でエアコンを操作してみて、冷房・暖房・オフしか選べないという事実にも気付かれたと思います。 日本でよく見るエアコンは、冷房・暖房・除湿・送風の機能は大体対応していると思うのですが、Matterからは除湿と送風が選択できません。 特に除湿は冷房より電気代がお得なイメージがあり、普段からよく使っていて無いと困る方も多いのではないかと思います。

ここの仕様がどうなっているかも、Matterの仕様的に掘り下げてみましょう。 エアコンの動作モードは Thermostat ClusterSystem Mode Attribute に値をセットすることで、切り替えることができます。 System Mode Attribute で選択可能な値は規格上規定されており、フィーチャーの設定とデバイス毎のオプション設定に依存します。 除湿・送風はオプショナルなモードとして規定されています。

どの動作モードに対応しているかはエアコン側の仕様なので、Nature Remo Appのエアコンのプリセットによって選択できるモードが変わるように、エアコンのモデルによってばらばらです。 しかし、ここで困ったことに気付きました。エアコン側から自分が対応しているモードを知らせる術が見当たりません。 対応モードリストのようなアトリビュートが見当たらないのです。

Apple home からすれば、エアコンがどの動作モードに対応しているのかの情報を得て選択肢として表示したいはずですが、どうやったらそれができるのかが分からない。 nano は除湿や送風を指示されれば、それに対応しているモデルであれば動かせるはずなのですが、指示してみないと分からない。 そんな訳ないだろうと思って何度も仕様を読み返したのですが、どうしても答えが見いだせません。 そんな背景あってか、現状 Apple home や Google home から選択できるエアコンの動作モードは冷房・暖房・オフのみになっているようです。 こちらもある日突然選べるようになったりしないかな?などと思ったりしていますが、今のところできないのです。

明るさ・色温度は非対応

そしてもう一つ、照明も Matter 対応したとは言いつつ、アイコンを開くと現時点ではON/OFFの切替しかできないです。 スマートスピーカー連携では明るさや色温度の操作もできていたので、ちょっと物足りなく感じるポイントかと思います。

Matter の仕様上で照明の明るさ・色温度の操作は、先週のブログで soh さんが紹介してくれたように、

  • シンプルなオンオフができる照明だったら、 OnOff cluster
  • 明るさが調節できる照明だったら、OnOff clusterLevel Control cluster
  • 明るさ・色が調節できる照明だったら、OnOff cluster, Level Control cluster, Color Control cluster

といったように複数のクラスタの組み合わせで実現されます。 nano 開発においても、元々は明るさ調整機能のある照明は Level Control Cluster に、色温度調整機能のある照明は Color Control Cluster をサポートしようと考えていました。 しかし、いざクラスタを実装して認証を取ることをリアルに考え出した頃に、これが相当難しいことであることが見えてきました。

Level Control Cluster の仕様を例として見てみましょう。 照明の今の明るさは Current Level Attribute の値を通じて読み出すことができます。 しかし、このCurrent Level Attribute はリードアクセスしかできないアトリビュートになっているため、直接書き込むことはできません。 ではどうやって明るさを操作するかというと、Commands に定義されている複数の専用コマンドを通じて制御できるようになっています。 コマンドのひとつ、Move To Level Command の仕様を見ると、LevelTransition Time といったフィールドに値を指定することで、「現在の明るさから 指定した Level の明るさまで、 Transition Time の時間をかけて遷移する」といったような動作指示を出すことができます。

なるほど、最近の照明は電源を ON/OFF 操作したときにじわーっと明るさが変化して切り替わるものも良くありますよね、Matter の照明はあれを詳細に制御できるインターフェースを備えているんですね。 でもちょっと待ってください。nano は赤外線信号を経由して照明をコントロールしています。 たとえば照明のリモコンはこんな感じです。

明るさを上げるボタンを押すと「明るさをちょっと上げて」という信号が送信され、明るさを下げるボタンを押すと「明るさをちょっと下げて」という信号が送信されます。 信号を送るリモコン側は今の明るさの値は知りませんし、一度押すと明るさが値がどれだけ変化するのかもわかりません。 nano が Level Control ClusterMove To Level Command に対応しようとしても、「明るさをちょっと上げて」という信号を送るか、「明るさをちょっと下げて」という信号を送ることしかできないのです。

実は今までのスマートスピーカ連携も似たような状況で、厳密に指定された明るさに調整することはできないが、期待された動作にできるだけ近い信号を送ってお茶を濁していたんですね。 しかし Matter 認証試験においては、Move To Level Command に対してデバイスが期待通りに反応したことを、外部からリードした明るさの値が連続して変化していることをチェックするような厳密なテスト項目が用意されており、お茶を濁しても簡単に見破られてしまいます。 更にこれらのコマンドは必須要件となっているため非対応として回避することもできません。 認証を得るためと割り切って、全然分かってないのにあたかも分かっているかのような嘘を返すような実装をするのは気が引けるし、そこまで際どいことをやったとしてもアプリのUIから想像するような明るさ・色温度の調整はできず、ユーザに良い体験を提供できない。悩みましたが納得のいく答えを見出すことができず、初期リリースでは ON/OFF 以外の制御を諦めました。

認証試験を受ける時点においてはスマートスピーカベンダ各社が照明の制御手段として他にどんな選択肢を提供してくれるのかも分からず、あれこれ検証することもできなかったのですが、今であればスマートスピーカベンダ各社の仕様も出揃い、明るさUP/DOWN、色温度UP/DOWNや常夜灯などのリモコンボタンを、より良い形で対応できる道を再検討できるかもしれません。

まとめ

他にもまだ書きたいことあるのですが、キリがないので今回は一旦ここまでで。 こうやって整理していくと、nano は Matter に対応したとはいえ、まだまだ全然できないことが多いです。 一気にすべてを解決することはできませんが、Nature Remo は進化し続けるソフトウェア・ファームウェアを信条としていますので、より良い体験をお届け出来るように引き続き改善していきたいと思います。

明日の 11 日目の記事は、CTOの mashさん が担当の予定です。よろしくお願いします。

Nature Matter Kaigi

明日の夜 (7/19(水) 19:00〜)に、日本企業初のMatter製品「Nature Remo nano」の販売を記念して、まだまだ日本では盛り上がり足りないMatterを盛り上げていこう!の会「Nature Matter Kaigi」を開催します。 ユカイ工学株式会社様よりゲストをお招きし、Nature Remo nano の開発メンバーとMatter 入門話やMatter苦労話などをする予定です。 Matter 気になる方、お気軽にご参加ください!

nature.connpass.com

Nature開発者Community

Natureのプロダクトに関する開発者向けの情報を交換する場として、 Nature開発者コミュニティ をDiscord上に立ち上げています。

matter チャネルもありますので、Remo nanoとMatterの開発に関することなど、気軽にご質問いただければと思います。

discord.com