0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

SwitchBotデバイスが多すぎん?登録あかん!APIで名前を一括同期してHome Assistantをパーペキにする方法【HomeAssistant】

0
Last updated at Posted at 2026-01-18

はじめに

Home Assistantなるものを立ち上げてビューティフルでエレガントなUI、流石ずるい集団(プロ集団)が作っただけあってパーペキや、ええやん、ええやんと思っていた。

我が家のかわいいかわいいデバイスたちを登録しますかと母性マックスで挑む。
どこでできるかなと思ったがジェニミ先生から的確な指示が。
どうやら概要右上、+ボタンより追加できると、ほーーーん
image.png
え?
ここから?
え?
ニホンゴワカリマスカ?

しかも12正座とかよくわからないデバイス?あるし。
我が家、よくよく考えたらswitchbot無数についているような
無限1on1かっ!

ちょっと待て、落ち着こう

と思ったがやはりプロな方々が作った、O(オペレーション) S(システム)

なんだ、設定画面から既に優秀なHA君がデバイス発見しくれととるやん!

感謝感謝の雨あら.....

ちとまて

image.png

は?

君の名は?

機器の英語名とどうやらなぞの4文字だけ表示されて意味が分からない。
しかも

エンティティ??

えっ?

(滝〇リのラジオ的なまたは別の...)

ブブッー!!

どこからともなく蝋人形のイカロスのごとく天のお告げによりダメ出しされた。
すみません。もうしません。

そんなこんなで一括でエレガントにもともと登録しているSwitchBot公式アプリより情報をとってHome Assistantに登録してくれるといいなぁと麻呂は思った次第です。

ただしそんな開発....せやAntigravityがおるやんけと思いましたが前に作ったWebなアプリのことを思い出します。

色々指示する中でいうこと聞かないあんちゃん(Antigravity)
最後には「だ か ら」と仕事で内容説明時にお客さんという垣根を超えて、とっても理解力が優秀過ぎて私めも低俗な言葉が理解できないからついいっちゃうんだ☆と暖かい言葉をかけほっこり(世間ではそれを激詰めというとかいわないとか)した日々(いま思えばお前の指示がイミフなだけだろ...合唱)を思い出し、またあんちゃんとハートフルなやりとりが始まるかと思いましたが

ふと

もしやワークスペース(上記つくったWebなアプリ)の背中をみて覚えろばりに指示すればいけると思ったら

「わたしぃ?わかりました!」と脳内でAOE2の農民の声で素晴らしく仕事をこなしてくれたので感動しました。

※そして私の前回の制作は無駄ではなかった。報われる瞬間、昇天

とどのつまり、SwitchBot公式アプリで設定した名前をAPI経由で取得し、Home Assistantにて一括登録&名前同期するツールを作成しました。

解決できること(キリッ)

  • SwitchBot公式アプリの名前とHAの表示名(friendly_name)を一瞬で同期
  • 大量のデバイス(プラグ、カーテン、温湿度計、ハブ等)を一括で管理対象にできる。
  • customize.yaml 形式で出力するらしいため、既存の設定を汚さず導入可能らしい。

1. 事前準備:SwitchBot API情報の取得

アプリから「トークン」と「シークレット」をゲットするんやで。

  1. SwitchBotアプリを開き、[プロフィール] > [設定] をタップ。
  2. 一番下の [アプリバージョン] をあたたたたたたたたた10回連続でタップ
  3. 出現した [開発者オプション] をタップ。
  4. 「トークン」「クライアントシークレット」 をコピー。

2. ツールの使い方

インストール

リポジトリをクローンし、必要なライブラリをインストールするらしい。

意味わからんという人は飛ばして項目4でおk

git clone https://github.com/666mk3/SwitchBot-Bulk-Register-Name-Sync-for-Home-Assistant.git
cd SwitchBot-Bulk-Register-Name-Sync-for-Home-Assistant
pip install -r requirements.txt

実行

取得したトークン等を環境変数にセットして実行するらしい


実行すると、標準出力に以下のような `customize.yaml` 形式のテキストが生成されるらしい。

```yaml
# Generated customize settings
switch.switchbot_plug_mini_123456:
  friendly_name: "リビングの加湿器"
sensor.switchbot_meter_789012_temperature:
  friendly_name: "寝室の温度"


3. 技術的なポイント:API v1.1 の署名生成

SwitchBot API v1.1では、セキュリティ強化のためリクエストごとに署名(sign)が必要です。今回のスクリプトでは、Pythonの hmachashlib を使用して、最新のアルゴリズムに基づいた署名を自動生成しています。

※日本語でおけ(偉大なるあんちゃんに感謝としか言いようがない)

# 署名生成の核心部
import hmac
import hashlib
import base64
import time
import uuid

def generate_sign(token, secret):
    nonce = str(uuid.uuid4())
    t = str(int(round(time.time() * 1000)))
    string_to_sign = f'{token}{t}{nonce}'
    string_to_sign = bytes(string_to_sign, 'utf-8')
    secret = bytes(secret, 'utf-8')
    sign = base64.b64encode(hmac.new(secret, msg=string_to_sign, digestmod=hashlib.sha256).digest())
    return sign, t, nonce


4. Home Assistantへの反映方法

GitHubリポジトリからインストールする場合

  1. Home Assistantの 設定 > アドオン > アドオンストア を開きます。
  2. 右上のメニュー(縦の三点リーダー)から リポジトリ を選択します。
  3. 以下のURLを入力して「追加」をクリックくりっく:
    https://github.com/666mk3/SwitchBot-Bulk-Register-Name-Sync-for-Home-Assistant
  4. ストアの画面を更新(田代砲ちゃう)し、リストに表示される「SwitchBot Bulk Register & Name Sync」を選択してインストーる。

ローカルアドオンとしてインストールする場合

  1. Home Assistantの addons/ フォルダ(または local_addons/)に、このリポジトリのファイル一式を配置したフォルダ(例: switchbot_bulk_register)をコピー。
  2. Home Assistantの設定 > アドオン > アドオンストア から、右上のメニューで「更新を確認」を押す!
  3. 「Local Add-ons」セクションに「SwitchBot Bulk Register & Name Sync」が表示されるのでインストール。

最後(で最後)の一歩的な操作

image.png

設定タブにてSwitchbotのトークンとシークレットを入れ、Start押す!
ログタブでぴろぴろ登録すすむ君
以上、完!

これで、エンティ〇ィたちが一斉に「分かりやすい名前」に変わります!うん立派???


おわりに

自動化ハッピー

動かなくて作者に言っても多分なにもわかりません。

Unique IDやEntity IDは書き換えなし。friendly_nameのみ書き換える仕様

それとも書き換える仕様にしてお前のホームをぶち壊したろーか!!!キャーーーーーー

とはならないので、たぶん

-完-
image.png


0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?