Home Assistantダッシュボード改造・手動で機能追加

Home Assistant・IoT

Xiaomiの扇風機をHomeAssistantに登録後にうまく動かないとのご質問がありましたので手動でYAMLを導入する方法などを紹介します。

例として自分が今持っているXiaomi Smart Standing Fan Proを使ってカスタマイズしていきます。(同じXiaomiの扇風機ですし)

Xiaomi Smart Standing Fan Pro 簡単にレビュー

この扇風機、売りはコンパクトに収納できて、USB-C給電なのでキャンプなどにも持ち歩ける。(電源は別途必要)

2年ほど前に中国行った時に買った扇風機で、収納がすっごくコンパクトになりますが日本では売っていないようです。アリエクは送料100ドルくらいでかなり割高だった。

中国(VISA取得)に行ってお土産にガジェットを買ってきた
新型コロナウイルス感染症から、大分経ったので、そろそろ海外旅行も気軽に行けるようになりましたね。ただ、中国はいまだにVISA取得が必要ですが、中国 北京に用事ができたので行ってみました。北京はもう見尽くしたのであまり気乗りはしませんでしたが…

コンパクトですが、弱点が下に向かない点、中国みたいにみんなベッドで寝ればいいのですが、日本のように床や畳の上に敷布団を敷いて寝るスタイルだと、扇風機が下を向いてくれません!困った。

なので3Dプリンターでパーツを作って、扇風機を寝かして床近くで寝ている時も人間にあたるようにしました。

棒部分の操作パネルの上下にパーツをはめて転がらないようにした

パーツがあれば台などの上に扇風機を寝かせて人間に風があたるように調節できる。

Mi Homeアプリでやれば細かい設定もできますが、せっかくなのでHomeAssistantで基本的な操作ができるようにしていきます。

この扇風機Xiaomi Smart Standing Fan Proのやり方を参考に、他のガジェットのダッシュボードカスタマイズもHomeAssistantにガジェット登録後にGeminiに型番・やりたいことをまとめて聞いてみてくださいね。

token_extractorでTOKEN取得する

あとXiaomi製品をHomeAssistantに導入する場合はTOKENを取得しないといけないので、以下のやり方に沿ってTOKENを取得してくださいね。

Home assistant:HACSでXiaomi・Cozy・Tuyaガジェットをハックする
もうMatter(スマートホーム共通規格)いらないんじゃないかというほど、ほとんどのIoTガジェットがHACSを通じてHome assistantに登録できた。実際にウチにあるいくつかのガジェットはHome assistantで直(ジカ=X…

デフォルトのコントロールをダッシュボードに追加してみる

ガジェットをHomeAssistantに登録後に設定>デバイスとサービス>Xiaomi Miotなど該当のガジェットを表示させます。↓

この扇風機の場合はコントロールや設定などが表示されますので、それをダッシュボードに追加するだけで終わりますが、

コントロールや設定を「ダッシュボードに追加」を押してとりあえず追加してみます。

これ↓だと風量変えたり自然風・通常風を切り替えたりできなくて不便。

しかしこの部分↑をタップすると以下のようなポップアップが表示されて、操作できるので我慢できれば良いのですが、ちょっとスマートでは無いというよりポップアップ出るのが面倒。

あと首振りがオンにはなりますが、オフにはなりませんでした。

これではちょっと不便なのでカスタマイズしていきます。

ガジェット(例Xiaomi Smart Standing Fan Pro)の操作できる機能を調査

そこでまずはどんな機能がHomeAssistantで使えるかエンティティを見て調査します。

設定>エンティティ(上のタブ)で「p43」などの製品の型番や個別名などで検索すると目的のガジェットが表示されます。

Xiaomi Smart Standing Fan Proは例ではエンティティの一部がxiaomi_p43_7dfcとなっているのでp43で検索しました。

Fan以外は正常動作しているようなので一番下のFanの部分を押して調査します。

以下のように↓ダッシュボードにダイレクトに表示されればこのままでもいいんですけど、ワンクリック必要なんです。

ここで右上の点3つを押して詳細を選択します。

詳細は以下のように表示されました。属性に表示されている部分がカスタマイズできそう。うまくすればスピードとスピードステップ1ずつなので100段階で風量をダッシュボードで調節することができそうです。

プリセットモードのStraight Wind,Natural Windで自然風などのモードも変更できそうで、Speed ListでLakesideやCampingなどの4つのモードにも切り替えできそうですが今回は自然風と標準風だけにしておきます。

ダッシュボードにカードを追加

GeminiにYAMLを作ってもらう

続いてYAMLを手打ちで入力していきます。といってもYAMLは自分で書くのが面倒なのでChatGPTやGeminiさんに聞いてくださいね。

上記で調べた属性やエンティティやコントロールの項目をまとめてGeminiに聞いてYAMLを作ってもらいました。以下のように聞きます。

    HomeAssistantにXiaomi Smart Standing Fan ProをXiaomi Miotで登録しましたが、風量調節や自然風などの調節ができません。
    Control:
      - Alarm:トグル
      - Fan:トグル
      - Physical Control Locked:トグル
      - Turn Left
      - Turn Right
      - Indicator Light:トグル
    
    attribute:
      - 利用可能なプリセットモード:Straight	Wind, Natural Wind, Smart
      - 首振:いいえ
      - スピード:0%
      - スピード:ステップ1
      - プリセットモード:Straight Wind
      - Speed list:Level1, Level2, Level3, Level4
      - Fan.on:false
      - Fan.fan:level1
      - Fan.mode:0
      - Fan-2.fan:level1
      - Fan.horizontal swing:false
      - Friendly name:Xiaomi Smart Standing Fan Pro Fan
      - Supported features:59
    
    上記の仕様で風量調節と自然風の切り替えの追加をダッシュボードのYAMLカードを作ってください。

    HACSでスライダーを追加してくれるSlider-entity-rowを導入する

    Geminiに聞いたらスライダーが必要そうなのでHACSで導入していきます。

    このあたりは個々のガジェットによって標準のカードが使えるかが違いますので、標準カードで使えなかったりわからなければAIに聞いてくださいね。

    まだHACSを導入していない方はこちらを参考にインストールしてください。

    今回は扇風機の風量スライダーが標準では無いのでカードでスライダーを使えるようにslider-entity-rowを追加します。(もしかしたら照明の照度を調節するスライダーでも使える?)

    ダウンロードしたらリロードします。

    以上で導入完了。

    手動でYAMLカードを追加

    ダッシュボード >カードを追加(右下)で一番下にスクロールして手動を選択します。

    下図左のようにYAMLを各エディタが表示されるので、お好みを書き込んでいきます。

    今回は風量調節と首振り開始・首振り停止をちゃんと動かしたいので書きました。(というよりGeminiに聞いて書いてもらった)

    あとは首振り左・首振り右(押したときだけ動く)・チャイルドロック・操作音・パネル表示は、最初から使えるのでそのままYAMLをコピペして導入する。

    最初はコードエディタが表示されると思いますが、もしビジュアルエディタでしたら左下の「コードエディタを表示」↓を押します。

    YAMLを編集して自分の好きなカードにカスタマイズした結果

    ちゃんと風量調節のスライダーが表示されて実際に扇風機も反応して動いてくれました。

    ついでに別の機能、チャイルドロック・操作音・パネル表示も追加しておきました。

    このYAMLスクリプトは以下のようになります。

    type: entities
    entities:
      - entity: fan.xiaomi_p43_7dfc_fan
        name: 扇風機 電源
      - type: custom:slider-entity-row
        entity: fan.xiaomi_p43_7dfc_fan
        name: 風量調節
        attribute: percentage
        min: 1
        max: 100
        step: 1
        toggle: false
      - type: buttons
        entities:
          - entity: fan.xiaomi_p43_7dfc_fan
            icon: mdi:weather-windy
            name: 自然風
            tap_action:
              action: call-service
              service: fan.set_preset_mode
              target:
                entity_id: fan.xiaomi_p43_7dfc_fan
              data:
                preset_mode: Natural Wind
          - entity: fan.xiaomi_p43_7dfc_fan
            icon: mdi:fan
            name: 通常風
            tap_action:
              action: call-service
              service: fan.set_preset_mode
              target:
                entity_id: fan.xiaomi_p43_7dfc_fan
              data:
                preset_mode: Straight Wind
      - type: buttons
        entities:
          - entity: fan.xiaomi_p43_7dfc_fan
            icon: mdi:rotate-3d-variant
            name: 首振り開始
            tap_action:
              action: call-service
              service: fan.oscillate
              target:
                entity_id: fan.xiaomi_p43_7dfc_fan
              data:
                oscillating: true
          - entity: fan.xiaomi_p43_7dfc_fan
            icon: mdi:close-circle
            name: 首振り停止
            tap_action:
              action: call-service
              service: fan.oscillate
              target:
                entity_id: fan.xiaomi_p43_7dfc_fan
              data:
                oscillating: false
      - type: buttons
        entities:
          - entity: button.xiaomi_p43_7dfc_turn_left
            name: 左
            icon: mdi:rotate-left
            tap_action:
              action: toggle
          - entity: button.xiaomi_p43_7dfc_turn_right
            name: 右
            icon: mdi:rotate-right
            tap_action:
              action: toggle
      - entity: switch.xiaomi_p43_7dfc_physical_control_locked
        name: チャイルドロック
      - entity: switch.xiaomi_p43_7dfc_alarm
        name: 操作音
      - entity: light.xiaomi_p43_7dfc_indicator_light
        name: パネル表示

    ガジェットのエンティティさえ分かればあとは適当にYAMLを書け(AIまかせ)ばいけます。

    ビジュアルエディタでできれば(できない箇所もある)より簡単ですね。

    以上、簡単ですがダッシュボードに手動でYAMLカードを作ってガジェットを思い通りに動かす説明でした。

    ※画像はAIで生成されたもので実際の商品とは形・色・機能などが違う場合があります。

    コメント