0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

SESAME5をRaspberry PiからBluetoothで動かす

Last updated at Posted at 2025-08-07

はじめに

Homebridgeからセサミ5を動かしたかったので、CANDY HOUSE公式のBluetooth APIを参考に、Pythonでセサミ5を動かすライブラリと、それを基にMQTTとブリッジするスクリプトを作りました。

Home AssistantやHomebridgeとセサミ5をMQTT経由で連携させたり、Pythonからセサミ5を動かせるようになります。Bluetoothで直接通信するのでWeb APIと違い、アクセス数の制限がなく、Hub3不要、かつ動作も速いです。

WindowsとLinuxで動きます。動作未確認ですが、おそらくmacOSでも動きます。今回はRaspberry Pi OS Bookworm (64-bit), Raspbrry Pi Zero 2 Wを例に説明させていただきます。

Qiita初投稿、Python初心者なので、色々と変なところがあるかもしれませんがご容赦ください。

MQTTでセサミ5を操作

Raspberry Pi OSをアップデート

このスクリプトは、BlueZ 5.82以降でないと動作しないので、まずはRaspberry Pi Trixieにアップデートしてしまいます。

セサミ5のServiceとCharacteristicを取得できないバグがあるためです。恐らく、bluezのissue #438と同じ現象だと思います。間違っていたらすみません。5.68で修正済みらしいですが、私は5.82しか試していません。

  1. パッケージリストの書き換え

    sudo nano /etc/apt/sources.listbookwormtrixieに書き換えます。

    /etc/apt/sources.list
    deb http://deb.debian.org/debian trixie main contrib non-free non-free-firmware
    deb http://deb.debian.org/debian-security/ trixie-security main contrib non-free non-free-firmware
    deb http://deb.debian.org/debian trixie-updates main contrib non-free non-free-firmware
    

    次に、sudo nano /etc/apt/sources.list.d/raspi.listで同様に書き換えます。

    /etc/apt/sources.list.d/raspi.list
    deb http://archive.raspberrypi.com/debian/ trixie main
    
  2. アップグレードの実行

    sudo apt update
    sudo apt full-upgrade
    
  3. 再起動

    sudo reboot
    

ssm2mqttのインストール

  1. Releasesから最新のssm2mqtt_x.x.x.zipをダウンロードします

    現時点での最新版は0.2.2です

    wget https://github.com/meronepy/ssm2mqtt/releases/download/v0.2.2/ssm2mqtt_0.2.2.zip
    
  2. zipファイルを展開、/usr/local/bin/ssm2mqttに配置

    unzip "ssm2mqtt*.zip"
    sudo cp -r ssm2mqtt /usr/local/bin/ssm2mqtt
    
  3. ファイルの所有者を変更

    sudo chown -R ${USER}: /usr/local/bin/ssm2mqtt
    
  4. 仮想環境を構築

    cd /usr/local/bin/ssm2mqtt
    python -m venv .venv
    
  5. バックエンドのライブラリをインストール

    .venv/bin/pip install -r requirements.txt
    
  6. MACアドレスとUUIDの対応を確認

    $ /usr/local/bin/ssm2mqtt/.venv/bin/python /usr/local/bin/ssm2mqtt/discover.py
    Address    : XX:XX:XX:XX:XX:XX
    Model      : Sesame 5
    Name       : None
    RSSI       : -88
    Registered : True
    UUID       : 12345678-90ab-cdef-1234-567890abcdef
    

    公式アプリのUUIDと比較して、目的のセサミ5のMACアドレスを確認します。AddressUUIDを後で使うのでメモしておきます。

  7. シークレットキーの取得
    mochipon様作成のQR Code Reader for SESAMEを使用して、公式アプリのQRコードから抽出しSecret Keyをメモしておきます。マネージャー以上の権限が必要です。
    get_key.png

  8. nano config.jsonで設定ファイルを編集

    devicesセクションを、先ほどメモしておいたAddressSecret Keyで書き換えます。
    history_nameは公式アプリの操作履歴に表示される名前です。
    mqttセクションはお使いのMQTTブローカーの値に合わせて書き換えてください。

    {
        "history_name": "ssm2mqtt",
        "mqtt": {
            "base_topic": "ssm2mqtt",
            "host": "localhost",
            "port": 1883,
            "user": "",
            "password": ""
        },
        "devices": {
            "XX:XX:XX:XX:XX:XX": "1234567890abcdef1234567890abcdef"
        }
    }
    
  9. 自動起動を設定(やらなくてもok)

    sudo cp ssm2mqtt.service /etc/systemd/system/ssm2mqtt.service
    sudo systemctl enable ssm2mqtt.service
    
  10. 起動!!!

    • 自動起動を設定済みの場合

      sudo systemctl start ssm2mqtt
      
    • 自動起動を設定していない場合

      /usr/local/bin/ssm2mqtt/.venv/bin/python /usr/local/bin/ssm2mqtt/main.py
      

    お疲れさまでした。これで無事に起動したと思います。

MQTTから開錠する

mqttで、ベーストピック/セサミのUUID/setトピックに、UNLOCKEDメッセージをパブリッシュすることで施錠します。施錠の場合はLOCKEDです。

  • 開錠例

    mosquitto_pub -t "ssm2mqtt/12345678-90ab-cdef-1234-567890abcdef/set" -m "UNLOCKED"
    

MQTTでステータスの受信

ベーストピック/セサミのUUID/getトピックをサブスクライブして、セサミの状態が変化するとリアルタイムでパブリッシュされます。

受信例

mosquitto_sub -t "ssm2mqtt/12345678-90ab-cdef-1234-567890abcdef/get"

以下のフォーマットでパブリッシュされます。

{
	"position": -13,
	"lockCurrentState": "LOCKED",
	"batteryVoltage": 6.062,
	"batteryLevel": 100,
	"chargingState": "NOT_CHARGEABLE",
	"statusLowBattery": false
}

homebridge-mqttthingの設定例

{
    "type": "lockMechanism",
    "name": "ssm2mqtt",
    "url": "mqtt://localhost:1883",
    "topics": {
        "getLockCurrentState": "ssm2mqtt/12345678-90ab-cdef-1234-567890abcdef/get$.lockCurrentState",
        "getLockTargetState": "ssm2mqtt/12345678-90ab-cdef-1234-567890abcdef/get$.lockCurrentState",
        "setLockTargetState": "ssm2mqtt/12345678-90ab-cdef-1234-567890abcdef/set",
        "getBatteryLevel": "ssm2mqtt/12345678-90ab-cdef-1234-567890abcdef/get$.batteryLevel",
        "getChargingState": "ssm2mqtt/12345678-90ab-cdef-1234-567890abcdef/get$.chargingState",
        "getStatusLowBattery": "ssm2mqtt/12345678-90ab-cdef-1234-567890abcdef/get$.statusLowBattery"
    },
    "lockValues": [
        "UNLOCKED",
        "LOCKED"
    ],
    "accessory": "mqttthing"
}

Pythonでセサミ5を操作

ライブラリのインストール

pip install git+https://github.com/meronepy/gomalock.git

Pythonからの開錠例

import asyncio

from gomalock.sesame5 import Sesame5

MAC_ADDRESS = "XX:XX:XX:XX:XX:XX"
SECRET_KEY = "1234567890abcdef1234567890abcdef"


async def main():
    async with Sesame5(MAC_ADDRESS, SECRET_KEY) as sesame5:
        await sesame5.unlock("gomalock")


if __name__ == "__main__":
    asyncio.run(main())

まとめ

セサミ5を動かすPythonライブラリと、MQTTのブリッジスクリプトを作ってみたので紹介させていただきました。稚拙な文章ですが、最後まで読んでいただき本当にありがとうございます。もし、「コードのここの部分がおかしい」とか「挙動が変」などありましたらぜひ教えてください!

0
0
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
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?