【新スマホ鍵】激安・高速レスポンスなIot施錠 セサミ4

セサミ mini スマートロック本体 パールホワイト + Wi-Fiアクセスポイント Home Assistant・IoT

ほぼ自分のミスでセサミを壊してしまって1年の保証期間が半年ほど過ぎてしまったので新しいのを買うか有償修理してもらおうと思って、ダメ元でセサミの人に連絡したらせっかくなので無償修理で新しいセサミMiniを送ってくれるということ!ヤッター!

コレを機にアマゾンのダッシュボタンを追加してラズパイと連携させてワンボタンで解錠できるようにして子供や家族にダッシュボタンを渡しておきます。

この記事は複数のページに別れています

セサミ mini スマートロック本体 パールホワイト + Wi-Fiアクセスポイント

セサミ mini スマートロック本体 パールホワイト + Wi-Fiアクセスポイント

(壊れてしまった旧セサミは次のページでレビューしています。)

ダッシュボタンはアマゾンで販売終了してしまったのでメルカリで15個くらい約2千円で買いました。たくさんあるのでセサミだけでなく、ついでにSwitchbotやラズパイのGPIO操作ボタンにもしてみました。以下に設定方法など書いておきます。

  1. セサミを雑に扱ったのでモーター壊れる
  2. セサミWifiモジュールも壊れたと思ったけどリセットしたら治った!
    1. 放置してWifiモジュールが機能していなかった・・・
    2. セサミ Wifiモジュール リセット作業
    3. セサミ Wifiモジュール リセット動画
    4. Wifiモジュールが有効になると通知・連携が設定可能になる
  3. セサミ mini がやってきた
    1. セサミ miniが来た
      1. 【Works with Alexa認定製品】 セサミ mini スマートロック本体 パールホワイト + Wi-Fiアクセスポイント 取付簡単 スマートフォンでドアを施錠解錠 Google Assistant/Siriショートカット/Apple Watch/IFTTT対応
    2. サムターンにつける専用アダプター
    3. 電池交換は取り外さなくても付けられる
    4. ドアにつけてしばらく開け閉めして気が付いたところ
  4. セサミminiとダッシュボタンの連携
  5. アマゾンアプリでダッシュボタンの登録
    1. アマゾンアプリ
    2. ダッシュボタンの設定
    3. 2019 9月からアプリの「新しい端末をセットアップ」の場所が変わりました
    4. ダッシュボタンの登録
    5. セットアップ完了時の「端末を管理」画面
    6. ボタンを押すと1日1回ほど催促メールが届く・・・
  6. CANDY HOUSEのサイトでAPI取得+ID確認
    1. セサミのユーザーがGmail・Facebookの場合はパスワードを変更する必要がある
    2. CANDY HOUSEダッシュボードでAPIとID取得
      1. SESAME API取得
      2. SESAME ID取得
  7. ラズパイでダッシュボタンを使えるようにする
    1. amazon-dashライブラリ インストール
    2. ダッシュボタンを探す
      1. エラー例
      2. tcpdumpを入れると動く 成功!
    3. ダッシュボタンとセサミのID・APIを設定する
    4. amazon-dashを手動で起動してテスト
    5. Curlコマンドでテスト
      1. セサミリスト
      2. ステータス
      3. ロック・アンロック
    6. History
    7. amazon_dash 自動起動設定
  8. ついでにSwitchBotも操作してみる
      1. Switch Bot ボタンを押してくれる超小型指ロボット (ワイヤレス / スイッチボット)
    1. SwitchBot殻割り
    2. Switchbotアプリ
    3. インストールしておくもの
    4. ソースを取得
    5. 動作コマンド
    6. amazon_dash+ダッシュボタンでSwitchbotを動かす
    7. amazon_dash.ymlファイルを編集
  9. ついでにラズパイのGPIOも操作してみる
    1. ダッシュボタンでGPIOを操作するPythonファイル
    2. amazon_dash.ymlファイルを編集
  10. ダッシュボタンを押すたびにセサミを開け閉めする設定
    1. dash-sesame.py Pythonファイル
    2. amazon_dash.ymlファイル
  11. セサミ mini + ダッシュボタン まとめ
    1. IoTで使うダッシュボタン使い勝手
    2. ダッシュボタンと兼用するとセサミアプリが落ちる・・・
      1. ちょっとした技でアプリで解錠できる
      2. ダッシュボタン終了!
    3. セサミ Wifiバージョンへの期待

セサミを雑に扱ったのでモーター壊れる

引っ越しのときに適当に設置してしまったので鍵の開け締めでギリギリいっていて、ちょっと付けたところが悪くて鍵の開け締めがスムーズにいってませんでした。あとで治そうと思って・・・半年間放置したら壊れました(泣)

セサミを剥がしたら以下のように無理をさせた部分のスポンジがグチャグチャになっていました。(こりゃ~壊れるわ)

セサミ 分解

最初は自力で治そうと思って分解してみた。

セサミ 分解

一応操作はできてLock/Unlockするとカチャ・カチャと音がする。ちゃんと反応しているのですが、サムターンはまわらない。なにかと思ったらモーターは壊れているが他の部分は壊れておらずLock/Unlockするたびにモーターの横の鉄の棒が飛び出たり引っ込んだりしていた。↓

セサミ 分解

どうやらモーターだけ壊れたようなので、モーター買ってきて治そうかとおもったけど上画像から先を分解するにはパーツ同士がボンドでくっつけてあるのでこれ以上の解体は手持ちの道具では無理っぽい。

ということで最後の手段としてセサミの人に有償修理できないか連絡してみたところ、無償修理してくれるとのこと!

結局は修理ではなく新型【セサミ mini】に交換してもらっちゃいました♪

ホントに神対応!!

セサミWifiモジュールも壊れたと思ったけどリセットしたら治った!

引っ越してからWifiモジュールの調子が悪くてこちらも放置していたところ、WifiモジュールのソフトウェアバージョンがV.2と古くV.6にアップデートしました。↓これで調子よくなるなぁ、と思っていたところ以前と変わらず調子悪い。

セサミ

放置してWifiモジュールが機能していなかった・・・

Wifiモジュールが正常に動かない場合はセサミアプリの管理 > 設定を変更 の画面で連携のクラウドや通知の項目が表示されない。↓(Wifiモジュール無い人はもともと表示されません。)ダッシュボタンも使えない。

こんな状況↓なのでBLE(Bluetooth Low Energy)接続しかしないのでスマホとなかなか接続できなかったりで最近は解錠も手間取っていた。

こちらもセサミの人に質問したところ『Wifiモジュールをリセットしてください』とのこと。壊れた?と思っていたのでリセットしたら使えるようになったらラッキーです。

早速Wifiモジュールのリセット作業をしてみます。

セサミ Wifiモジュール リセット作業

作業自体は以下のようにします。ただリセットボタンを長押しするだけではリセットできないようです。(いままで適当にリセットしていたのでちゃんとリセットできていなかった・・・ズボラすぎ)

  1. セサミアプリを開く、作業終了まで開いたままにする
  2. WifiモジュールをUSB電源から抜く
  3. Wifiモジュールの上の穴のリセットボタンをピンで押したままUSB電源に刺す。そのまま3秒ほど長押し。
  4. 赤ランプがついていて、ピンを離すとパパパっと青いランプが点滅するとリセット完了。

上記のようにリセットしないで普通にピンでリセットボタンを押してもリセットされません。

セサミ Wifiモジュール リセット動画

上記「3」の操作方法の動画がありますのでこれを見てリセットしてみてください。

Wifiモジュールが有効になると通知・連携が設定可能になる

うまくリセットできたらセサミアプリの管理 > 設定を変更で通知や連携が表示されて設定できるようになった!

セサミ

通知や連携が表示された!

セサミでダッシュボタンを使う場合は「クラウド」をオンにしておく必要があります。

セサミ mini がやってきた

セサミminiは旧セサミよりも大分進化していて、ほとんどどんな形状の鍵でも取り付けられるようになっていました。

なので通常のサムターン形状でない場合は、予めサムターンや土台などの寸法をセサミの人にメールで伝えて専用の3Dプリンタでアダプターを作って送ってくれるという神対応の仕様になっています。

『セサミ3/4が我が家の鍵に対応可能かわからない?』
セサミ3/4が我が家の鍵に対応可能かわからない? 「セサミ3/4がうちの鍵に対応しているか不安…」 サムターンの高さがない防犯ボタン付きドアハンドル付きサムタ…

こちらのページを見て、鍵の形状が特殊アダプターが必要か確認しましょう。

セサミ miniが来た

旧セサミが壊れたことをセサミの人に連絡したら、有償修理どころか無償で新型のセサミ miniを送ってくれて、さらに3Dプリンターで作った専用のアダプタまで同梱してくれました!

【Works with Alexa認定製品】 セサミ mini スマートロック本体 パールホワイト + Wi-Fiアクセスポイント 取付簡単 スマートフォンでドアを施錠解錠 Google Assistant/Siriショートカット/Apple Watch/IFTTT対応

自分のサムターンの形状の場合は特に専用アダプタが必要なさそうですが、鍵の寸法や形状を連絡してくれたらアダプターも同梱してくれれました。せっかく作ってくれたのでアダプタも一緒にドアに取り付けてみます。

セサミ MINI

専用のアダプターと予備両面テープも同梱してくれた!

セサミ MINI

セサミ miniは旧セサミよりかなりスリムで耐久性は3倍とのこと

サムターンにつける専用アダプター

以下のような3Dプリンターで作られた専用アダプターが同梱されてきました。特殊なカギの場合は個別に作ってくれるそうです。これはすごい!

専用アダプターはセサミminiのサムターンを回す部分に乗せてみるとかなりスカスカでちゃんと固定されない。

セサミ MINI

スカスカすぎるので自分で3Dプリンターでアダプターを作ろうかと思いましたが、あまりに遊びなくぴったりなアダプターだと今度はセサミのパーツが折れてしまうのかもしれないのでこのようなスカスカな構造なのかもしれません。

セサミ MINI

アダプター付けてドアに取り付けましたが、スカスカでも全く問題なく施錠・解錠できたので考えられてゆるいアダプターを作っているのでしょう。ただし、スカスカなので施錠・解錠時にアダプターが動いて『カコンッ』と軽いプラスチック(PLAフィラメント)特有の軽い音がします。

電池交換は取り外さなくても付けられる

セサミminiは小さくて耐久性が上がっただけでなく電池交換時にセサミ本体とドアから分離させないでも交換できるようになっていました。↓

セサミminiの上部分のフタを手前にスライドさせると電池がでてきます。旧セサミもカバーを取れば電池交換できますが、ちょっとカバーが取りにくかった。

セサミ MINI

フタの裏には技適マークもありますので日本でも問題なく使えます♪

セサミ MINI

ドアにつけてしばらく開け閉めして気が付いたところ

旧セサミ(自分の持っていた1年半前のもの)は解錠時にUnlockボタンを押すとさらに解錠しようとしてググググを唸りをあげて回そうとする。

セサミ miniは解錠時にUnlockボタンをしてもググググならない。(数日経って、少し鳴るようでした・・・)

余計な動作をせずに今の状況を把握して少し賢くなったようです。

セサミminiとダッシュボタンの連携

セサミminiも取り付けられたのでダッシュボタンとセサミminiを連携させてみましょう。

ダッシュボタン

ちょい長いですが以下の3つのステップでセサミとダッシュボタンを連携させることができます。なお、ダッシュボタンとセサミを連携させるには間にラズパイやLinuxが必要になります。

  1. アマゾンアプリでダッシュボタンと連携
  2. CANDY HOUSEのサイトでAPI取得+ID確認
  3. ラズパイでダッシュボタンを使えるようにする

ラズパイの簡単インストールは以下のページで書きました。

ラズパイの簡単インストール方法3種+OSまるごとバックアップ
自宅のIot化でLED照明オンオフ(Xiaomi LED)や玄関鍵の開閉(セサミ スマートロック)、壁スイッチのオンオフ、部屋の空気の状態を表示させたりしていますが、不満点は専用のアプリでないと操作できないこと。それと同じメーカーでないと他...

現在2500円で販売されているAWS IoT エンタープライズボタンではラズパイが必要ありませんが、ノーマルなダッシュボタンではラズパイを介してセサミと連携させます。

こちらのページで詳しく書かれていますのでこちらのほうが良いかもしれません。一応自分も下で設定方法書きましたのでよかったら御覧ください。

『Amazon Dash Button 設定方法【ラズパイ】』
Amazon Dash Button 設定方法【ラズパイ】 ※Amazon Dash Buttonは2019年8月31日を持ってサービス停止しております。この…

ダッシュボタンはもともとワンプッシュでアマゾンので売っている製品を買うもので、それを買わずに別の用途のIoTボタンとして使う。なので商品を買わずにIOTボタンとして使いすぎる(押しすぎる)とアマゾンに怒られるかもしれません・・・

アマゾンに怒られることは無いとは思いますが、本来のダッシュボタンの使い方とは違うIoTボタンとして使うことを予めご理解ください。

アマゾンアプリでダッシュボタンの登録

初めにダッシュボタンを使えるようにするにはアマゾンアプリとダッシュボタンの設定が必要になります。

この設定はパソコンのWebページでやろうとしたところ、できないようなのでスマホやタブレットでアマゾンアプリをダウンロードして設定していきます。

アマゾンアプリ

Android Play Store

Apple AppStore

ダッシュボタンの設定

アマゾンアプリを起動して左上の棒三本アイコンをタップして以下のように進みます。

2019 9月からアプリの「新しい端末をセットアップ」の場所が変わりました

「新しい端末をセットアップ」と「Dash端末の管理」がなくなりました(泣)

ダッシュボタンをどうやってセットアップすればいいのか検討中です・・・解決可能??

「新しい端末をセットアップ」の場所が移動したようです。以下のようにすれば1個だけダッシュボタンが登録できました。

1個ダッシュボタンを登録したら?端末を管理の画面の下が全く表示されなくなってしまった・・・

タブレットにもAmazonショッピングアプリをインストールして設定してみましたが、2個ダッシュボタンを登録したら上のエラーと同様に端末を管理画面が表示されなくなった。

と、思ったら、以下のようにしたら新しくダッシュボタンの登録ができました!こっちは何個でも登録できるようです。

まだ10個ほどダッシュボタンを登録してなかったので、慌てて全部登録しました。

登録してないダッシュボタンがあったら、いつ「新しい端末の設定」がなくなるか分からないのでお早めに登録しておきましょう。

ダッシュボタンの登録

ダッシュボタンは商品を買うためではなく、IoTボタンとして使うので最後のほうで商品を選ばないで右上の「X」ボタンを押しましょう。

通常使用では商品を選びますが、今回は商品を買うためのボタンではなく、セサミと連携してドアのカギを開けるために使用するので商品を選ばずに「セットアップの終了」ボタンを押す。

セサミ アマゾンダッシュボタン 設定

最後に「セットアップを終了」を選択

セットアップ完了時の「端末を管理」画面

IoTボタンとして使う場合の「端末を管理」の画面↓、「通知の設定」でプッシュ通知のオン・オフが来るのでオフにしておくと来なくなるが・・・

以下のようなメールはプッシュ通知を全部オフにしても来る。

ボタンを押すと1日1回ほど催促メールが届く・・・

ボタンを押すと1日1回は以下のようなダッシュボタン設定完了の催促メールが来ます・・・これ通知来ないように設定できないのかしら?Gmailでゴミ箱直行便に設定すればいいけどなんか気になります。

sesame

CANDY HOUSEのサイトでAPI取得+ID確認

続いてセサミの販売元CANDY HOUSEのサイトに行ってセサミAPIとセサミIDを取得します。

セサミのユーザーがGmail・Facebookの場合はパスワードを変更する必要がある

セサミのユーザーメルアドがGmailかFacebookの場合は、パスワードもGmailとFacebookのになっているので新たにパスワードを設定する必要があります。

セサミアプリで以下のようにして変更しましょう。

CANDY HOUSEダッシュボードでAPIとID取得

続いてCANDY HOUSEのダッシュボードページにアクセスします。

CANDY HOUSE Dashboard

セサミのユーザー名とパスワードでログインすると以下のようなページになります。

SESAME API取得

左メニューの「API Settings」を選んで「SEND CODE」を押します。セサミからメールが来て数字6桁が表示されているので、それを入力して「CONFIRM」ボタンを押す。

セサミ壊れた! ダッシュボタン

「ADD」ボタンが表示されるので押す。

セサミ壊れた! ダッシュボタン

DELETEボタンの右側に表示されている長い文字列がAPIキーですメモしておきましょう。

セサミ壊れた! ダッシュボタン

SESAME ID取得

続いてセサミIDを取得します。こちらは「SesameList」を選ぶとセサミがリスト表示されます。複数のセサミがある場合は複数表示されるので該当のセサミ名を押すと以下のような表示になってUSERや開け閉めのヒストリーなどが表示されます。

SESAMEID

このページのURLは以下のようになっているのでhttps://my.candyhouse.co/#/sesameList/の右側がセサミIDになります。

「https://my.candyhouse.co/#/sesameList/ca0001ce-f52a-xxxxxxxxxxxxxxxx

後ほど使うので、これをコピーしておきましょう。

ラズパイでダッシュボタンを使えるようにする

長くなってしまいました・・・スンマセン、もう少し続きます。

amazon-dashライブラリ インストール

ダッシュボタンをラズパイで使えるようにするamazon-dashというライブラリを入れます。

$ sudo apt-get upgrade -y
$ sudo apt-get install python3-pip
$ sudo pip3 install amazon-dash
sudo: pip3: コマンドが見つかりません

コマンドが無いと出る・・・その場合は、python3-pipを一旦削除してもう一度インストールするとpip3が使えるようになります。

$ sudo apt-get remove python3-pip #一度削除
$ sudo apt-get install python3-pip #再度インストール
$ which pip3
/usr/bin/pip3
$ sudo pip3 install amazon-dash

これでうまくいった。

ダッシュボタンを探す

sudo amazon-dash discoveryでダッシュボタンを探してみましょう。

エラー例

$ sudo amazon-dash discovery
Welcome to Amazon-dash v1.3.2 using Python 3.5.3
The discovery command lists the devices that are connected in your network. Each device will only be listed once. After executing this command wait approximately 10 seconds before pressing the Amazon Dash button. After pressing the button, the Mac address of the button will immediately appear on the screen. Remember the address to be able to create the configuration file.
Traceback (most recent call last):
  File "/usr/local/bin/amazon-dash", line 6, in <module>
    catch(cli)()
  File "/usr/local/lib/python3.5/dist-packages/amazon_dash/exceptions.py", line 91, in wrap
    return fn(*args, **kwargs)
  File "/usr/lib/python3/dist-packages/click/core.py", line 716, in __call__
    return self.main(*args, **kwargs)
  File "/usr/lib/python3/dist-packages/click/core.py", line 696, in main
    rv = self.invoke(ctx)
  File "/usr/lib/python3/dist-packages/click/core.py", line 1060, in invoke
    return _process_result(sub_ctx.command.invoke(sub_ctx))
  File "/usr/lib/python3/dist-packages/click/core.py", line 889, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "/usr/lib/python3/dist-packages/click/core.py", line 534, in invoke
    return callback(*args, **kwargs)
  File "/usr/local/lib/python3.5/dist-packages/amazon_dash/management.py", line 127, in discovery
    discover(interface)
  File "/usr/local/lib/python3.5/dist-packages/amazon_dash/discovery.py", line 98, in discover
    scan_devices(discovery_print, lfilter=lambda d: d.src not in mac_id_list, iface=interface)
  File "/usr/local/lib/python3.5/dist-packages/amazon_dash/scan.py", line 27, in scan_devices
    lfilter=lfilter, iface=iface)
  File "/usr/local/lib/python3.5/dist-packages/scapy/sendrecv.py", line 836, in sniff
    *arg, **karg)] = iface
  File "/usr/local/lib/python3.5/dist-packages/scapy/arch/linux.py", line 454, in __init__
    attach_filter(self.ins, filter, iface)
  File "/usr/local/lib/python3.5/dist-packages/scapy/arch/linux.py", line 140, in attach_filter
    bp = compile_filter(bpf_filter, iface)
  File "/usr/local/lib/python3.5/dist-packages/scapy/arch/common.py", line 126, in compile_filter
    raise Scapy_Exception("tcpdump is not available. Cannot use filter !")
scapy.error.Scapy_Exception: tcpdump is not available. Cannot use filter !

こんなエラーになった(泣)まともに動かない。

tcpdumpを入れると動く 成功!

tcpdumpを入れると動くと書いてあったので♪やってみたら今度はちゃんと動いた。↓

$ sudo apt-get install tcpdump
$ sudo amazon-dash discovery
Welcome to Amazon-dash v1.3.2 using Python 3.5.3
The discovery command lists the devices that are connected in your network. Each device will only be listed once. After executing this command wait approximately 10 seconds before pressing the Amazon Dash button. After pressing the button, the Mac address of the button will immediately appear on the screen. Remember the address to be able to create the configuration file.
36:ce:00:0e:49:35
28:6c:07:62:3b:f0
b8:27:eb:22:03:71
38:f7:3d:94:eb:50 (Amazon Device)
34:13:e8:95:a0:38

「sudo amazon-dash discovery」は周辺にある機器固有のMACアドレスを表示するコマンド。(MACアドレスはネットワーク機器にはすべて一意に割り当てられています。)

「sudo amazon-dash discovery」を実行してダッシュボタンを押してみてください。

MACアドレスの後ろに「(Amazon Device)」と表示されているのがダッシュボタンのMACアドレス。これをメモしておいてあとで使います。その他のMACアドレスはラズパイ周辺にある他のBluetooth機器のアドレス。

ダッシュボタンとセサミのID・APIを設定する

ymlファイルに以下のように書けば良いとのこと。今取得した、Macアドレスと、上のほうで書いたこちらで取得したセサミID・セサミAPIを記入していく。複数のダッシュボタンがある場合はMacアドレスと名前を変えて以下のようにする。

$ sudo vim /etc/amazon-dash.yml
devices:
  38:f7:3d:94:eb:50: #先ほどamazon-dash discoveryで取得したダッシュボタンのMACアドレス
    name: dash-zyokin
    url: 'https://api.candyhouse.co/public/sesame/セサミのID'
    method: post
    headers: {"Authorization": "セサミAPIキー"}
    content-type: application/json
    body: '{"command": "unlock"}'
  78:e1:03:e1:34:ec:#2個目のダッシュボタン アンロックの場合
    name: dash-syosyuriki
    url: 'https://api.candyhouse.co/public/sesame/acb888b8-6edb-xxxxxxxxxxxxxxxxxx'
    method: post
    headers: {"Authorization": "PV0srsdbST-JCnX0A2XPih6xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"}
    content-type: application/json
    body: '{"command": "unlock"}'
  38:f7:3d:94:eb:50:#3個目のダッシュボタン ロックの場合
    name: dash-mondahmin
    url: 'https://api.candyhouse.co/public/sesame/acb888b8-6edb-xxxxxxxxxxxxxxxxxx'
    method: post
    headers: {"Authorization": "PV0srsdbST-JCnX0A2XPih6xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"}
    content-type: application/json
    body: '{"command": "lock"}'

bodyの部分は以下のようにボタンの役割をつけましょう。

  • body: ‘{“command”: “unlock”}’:解錠ボタンを作る場合
  • body: ‘{“command”: “lock”}’:ロックボタンを作る場合

amazon-dashを手動で起動してテスト

「sudo amazon-dash –verbose run –config /etc/amazon-dash.yml」でとりあえず起動させてテストしてみましょう。

ダッシュボタンを押すと以下のようなエラがー出た。

$ sudo amazon-dash --verbose run --config /etc/amazon-dash.yml
Welcome to Amazon-dash v1.3.2 using Python 3.5.3
Listening for events. Amazon-dash will execute the events associated with the registered buttons.
2019-07-01 14:45:14,619 - amazon-dash - DEBUG   - dash-rui device executed (mac 38:f7:3d:94:eb:50)
Exception in thread Thread-1:
Traceback (most recent call last):
  File "/usr/lib/python3.5/threading.py", line 914, in _bootstrap_inner
    self.run()
  File "/usr/lib/python3.5/threading.py", line 862, in run
    self._target(*self._args, **self._kwargs)
  File "/usr/local/lib/python3.5/dist-packages/amazon_dash/listener.py", line 84, in execute
    result = self.execute_instance.execute(root_allowed)
  File "/usr/local/lib/python3.5/dist-packages/amazon_dash/execute.py", line 222, in execute
    raise ExecuteError('"{}" return code {}.'.format(self.data['url'], resp.status_code))
amazon_dash.exceptions.ExecuteError: "https://api.candyhouse.co/public/sesame/acb888b8-6edb-4549-xxxxxxxxxxxxx" return code 401.

401エラーになる。401エラーなど、以下のページでエラーの詳細が説明されています。

『Amazon Dash Button設定時のエラー』
※Amazon Dash Buttonは2019年8月にサービス停止、12月末を持って自動的に登録解除となってしまった為、ご利用頂けない機能となってしまい大変…

401はセサミAPI・IDやWifiの設定ができていないようです。

自分の場合は古いセサミのIDでダッシュボタンを押していて気が付かずに401エラーになっていました(ドジです)気づいて新しいセサミMiniのセサミIDに書き換えたらちゃんと動いた!

Curlコマンドでテスト

うまくいかないときはLinuxのシェルコマンドでセサミの状態や操作することができます。

こちらのページ↓詳しく載っていたので試してみました。

CANDY HOUSE Developer Reference

セサミリスト

複数台のセサミを持っているときは複数表示されます。デバイスのセサミID・シリアルとニックネームが表示される。

$ curl -H "Authorization: PV0srsdbST-JCnX0A2XPirOqHV0A8NWt1XGD_nxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" https://api.candyhouse.co/public/sesames
[{"device_id": "ca0001ce-xxxxxxxxxxxxxxxxxxxxxxxxxxx", "serial": "DEA51xxxxxx", "nickname": "\u30d4\u30fc\u30b9"}]

ステータス

現在のセサミの状態、ロック・バッテリー・レスポンシブを返す。

$ curl -H "Authorization: PV0srsdbST-JCnX0A2XPirOqHV0A8NWt1XGD_nxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" https://api.candyhouse.co/public/sesame/ca0001ce-xxxxxxxxxxxxxxxxxxxxxxxxxxx
{"locked": true, "battery": 100, "responsive": true}

Lockedを取得してダッシュボタンを押すたびに施錠・解錠できるスクリプトをPythonで書けばいいかもしれません。1ボタンで開け閉めするダッシュボタン作ってみました。作り方は下のほう(こちら)にあります。

ロック・アンロック

セサミを実際にロック・アンロック(commandの部分にlockかunlockを記入)できるコマンドです。施錠・解錠の状態は取得できません。

$ curl -H "Authorization: PV0srsdbST-JCnX0A2XPirOqHV0A8NWt1XGD_nxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" -H "Content-Type: application/json" -X POST -d '{"command":"lock"}' https://api.candyhouse.co/public/sesame/ca0001ce-xxxxxxxxxxxxxxxxxxxxxxxxxxx
{"task_id": "bb39716e-c54d-45fa-a853-492354b966e2"}

実行するとセサミをロック(もしくはアンロック)してtask_idを返します。

History

キャンディハウスサイトのSesame Listページの該当セサミを見ると以下のようにAPI(ダッシュボタン)で操作したログが残っていました。

「https://my.candyhouse.co/#/sesameList/ca0001ce-xxxxxxxxxx」のページに表示されます。

task_id

amazon_dash 自動起動設定

うまくいったらラズパイでamazon_dashを常時起動しておくように設定をしておきましょう。

$ sudo python3 -m amazon_dash.install
Executing all install scripts for Amazon-Dash
[OK] config has been installed successfully
[OK] systemd service has been installed successfully
$ sudo systemctl start amazon-dash
$ sudo systemctl enable amazon-dash
Created symlink /etc/systemd/system/multi-user.target.wants/amazon-dash.service → /usr/lib/systemd/system/amazon-dash.service.

これでラズパイを再起動などしてもamazon_dashを起動するように設定できました。

あとは、解錠時にダッシュボタンを押すだけです。

ついでにSwitchBotも操作してみる

去年7月に買ってほぼ使っていないSwetchBotもダッシュボタンで操作できるようにしてみました。買って少し試しただけであまり実用性はなさそうなので実生活では使っていませんでした。

Switch Bot ボタンを押してくれる超小型指ロボット (ワイヤレス / スイッチボット)

Switch Bot ボタンを押してくれる超小型指ロボット (ワイヤレス / スイッチボット)

Switchbot

パッケージはこんな感じ。

ボタン周辺に取り付けるためのシールや日本語取説あり。

SwitchBot殻割り

電池を取り出すときに使う溝をこじってフタを開けてみます。

Switchbot

すごくコンパクトにうまくまとまっていました。↓

フタを閉じている状態だと見えませんが、動作中は緑LEDが点灯します。

Switchbotアプリ

ボタンを押すのと設定のみ、シンプルなアプリです。

設定画面でMACアドレス(BLE MACの項目)があるのでメモしておきましょう。ダッシュボタンと連携のときに使います。

では、ダッシュボタンとSwitchBotを連携させてみましょう。

インストールしておくもの

python-hostライブラリを使うと簡単にSwitchbotとダッシュボタンを連携させることができました。

GitHub - OpenWonderLabs/python-host: The python code running on Raspberry Pi or other Linux based boards to control SwitchBot.
The python code running on Raspberry Pi or other Linux based boards to control SwitchBot. - GitHub - OpenWonderLabs/pyth...

python-hostのREADMEに書いてあるとおりに下準備として以下の操作をしてbluepyなどをインストールしていきます。

$ sudo apt-get update
$ sudo apt-get install python-pexpect
$ sudo apt-get install libusb-dev libdbus-1-dev libglib2.0-dev 
$ sudo apt-get install libudev-dev libical-dev libreadline-dev
$ sudo pip install bluepy

ソースを取得

お好みのディレクトリに移動するか作るかします。

$ cd /home/pi/script/
$ git clone https://github.com/OpenWonderLabs/python-host.git
$ cd python-host

以下のようなエラーになったら「sudo -E pip install pexpect」を実行する。

$ sudo python switchbot.py
Traceback (most recent call last):
  File "switchbot.py", line 15, in <module>
    import pexpect
ImportError: No module named pexpect
$ sudo -E pip install pexpect

これで使えるようになりました。

動作コマンド

以下のようにsudo python switchbot.pyとオプションはダッシュボタンのMACアドレス・その右にPressやTurn Onを付ける。

$ sudo python switchbot.py EF:FC:25:C5:D2:4A Press
Usage: "sudo python switchbot.py [mac_addr  cmd]" or "sudo python switchbot.py"
Preparing to connect.
Trigger complete
  • Press  :押して戻る
  • Turn On :押す
  • Turn Off :戻る

Pressを指定するとうまく行った、ちゃんとアームが出てきて伸び切ったらもとに戻って引っ込んだ。

Turn On(押す)とTurn Off(戻る)が自分の環境だとうまく動作せずにタイムアウトしちゃう。↓

$ sudo python switchbot.py EF:FC:25:C5:D2:4A TurnOff
Usage: "sudo python switchbot.py [mac_addr  cmd]" or "sudo python switchbot.py"
Preparing to connect.
Traceback (most recent call last):
  File "switchbot.py", line 172, in <module>
    main()
  File "switchbot.py", line 138, in main
    trigger_device([dev,act])
  File "switchbot.py", line 111, in trigger_device
    con.expect(['\[CON\]','Connection successful.*\[LE\]>'])
  File "/usr/lib/python2.7/dist-packages/pexpect/spawnbase.py", line 321, in expect
    timeout, searchwindowsize, async)
  File "/usr/lib/python2.7/dist-packages/pexpect/spawnbase.py", line 345, in expect_list
    return exp.expect_loop(timeout)
  File "/usr/lib/python2.7/dist-packages/pexpect/expect.py", line 107, in expect_loop
    return self.timeout(e)
  File "/usr/lib/python2.7/dist-packages/pexpect/expect.py", line 70, in timeout
    raise TIMEOUT(msg)
pexpect.exceptions.TIMEOUT: Timeout exceeded.
<pexpect.pty_spawn.spawn object at 0x76a5add0>
command: /usr/bin/gatttool
args: ['/usr/bin/gatttool', '-b', 'EF:FC:25:C5:D2:4A', '-t', 'random', '-I']
buffer (last 100 chars): '][LE]> \r\x1b[K\x1b[0;91mError: \x1b[0mconnect error: Function not implemented (38)\r\n[EF:FC:25:C5:D2:4A][LE]> '
before (last 100 chars): '][LE]> \r\x1b[K\x1b[0;91mError: \x1b[0mconnect error: Function not implemented (38)\r\n[EF:FC:25:C5:D2:4A][LE]> '
after: <class 'pexpect.exceptions.TIMEOUT'>
match: None
match_index: None
exitstatus: None
flag_eof: False
pid: 3511
child_fd: 5
closed: False
timeout: 30
delimiter: <class 'pexpect.exceptions.EOF'>
logfile: None
logfile_read: None
logfile_send: None
maxread: 2000
ignorecase: False
searchwindowsize: None
delaybeforesend: 0.05
delayafterclose: 0.1
delayafterterminate: 0.1
searcher: searcher_re:
    0: re.compile("\[CON\]")
    1: re.compile("Connection successful.*\[LE\]>")

こんなエラーになります。試しにSwitchBotアプリの詳細設定で「壁スイッチモードを有効にする」をオンにしましたが、同じエラーがでる。未解決

amazon_dash+ダッシュボタンでSwitchbotを動かす

以下のようにswitchbot.pyファイルを作ってこれをamazon_dash.ymlファイルで実行する。

$vim /home/pi/script/switchbot.py
import binascii
from bluepy.btle import Peripheral

p = Peripheral("EF:FC:25:C5:D2:4A", "random") #SwitchbotのMacアドレス
hand_service = p.getServiceByUUID("cba20d00-224d-11e6-9fb8-0002a5d5c51b")
hand = hand_service.getCharacteristics("cba20002-224d-11e6-9fb8-0002a5d5c51b")[0]
hand.write(binascii.a2b_hex("570100"))
p.disconnect()

壁に付いている照明のオン・オフ シーソースイッチに使ってみました。上記の570100を570102に変えて部屋の電気を消す時だけダッシュボタンを使います。

スイッチボットでオン・オフを使う時は、アプリの各スイッチボットの歯車アイコン > 詳細設定で、「スイッチのON/OFFを反転します」をオンにすると出来ました。

  • Press:570100
  • On :570101
  • Off :570102

amazon_dash.ymlファイルを編集

amazon_dash.ymlには以下を追加します。

$ sudo vim /etc/amazon_dash.yml #以下を追加
  78:e1:03:e6:8b:37: #ダッシュボタンのMACアドレス
    name: attack-switchbot #なんでもOK
    user: pi #ラズパイのユーザー名
    cmd: /usr/bin/python /home/pi/script/switchbot.py #コマンドファイルの場所

Pressしか動作しなかったけど、これでダッシュボタンとSwitchBotの連携完了。後ほど・オン・オフも出来ました。↑上で追記しています。

ついでにラズパイのGPIOも操作してみる

せっかくラズパイ使っているのでGPIOもダッシュボタンでオン・オフできるように設定してみましょう。

ダッシュボタンでGPIOを操作するPythonファイル

RPi.GPIOを使ってGPIOを操作します。ファイル名はdash-gpio.pyとしました。GPIOピン番号はamazon_dash.ymlファイルで指定するようにしました。

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import RPi.GPIO as GPIO
import time
import sys

args = sys.argv
FAN = int(args[1])

def switch_callback(gpio_pin):
	print(gpio_pin)
	GPIO.output(FAN,GPIO.HIGH)

GPIO.setmode(GPIO.BCM)
GPIO.setup(FAN,GPIO.OUT)

try:
	if GPIO.input(FAN) == GPIO.HIGH:
		GPIO.output(FAN,GPIO.LOW)
	else:
		GPIO.output(FAN,GPIO.HIGH)

	time.sleep(0.1)
except KeyboardInterrupt:
	GPIO.cleanup()

上記Pythonスクリプトは押すたびにGPIOをオン・オフできるようにした。

amazon_dash.ymlファイルを編集

上記のPythonファイルを作成したら以下のようにamazon_dash.ymlに追加します。

以下のようにcmd: /usr/bin/python /home/pi/script/dash-gpio.pyに半角スペースを開けてGPIO番号を指定します。

$ sudo vim /etc/amazon_dash.yml #以下を追加
  fc:65:de:92:a4:50: #ダッシュボタンのMACアドレス
    name: webiopi-nepia #なんでもOK
    user: pi #ラズパイのユーザー名
    cmd: /usr/bin/python /home/pi/script/dash-gpio.py 20 #最後にGPIOピン番号を指定

上記では「GPIO20」を指定していてダッシュボタンを押すとPCケースから取り出した25CMの巨大ファンが回るように設定しました。現在は植物換気用に使ってます。↓ ダッシュボタンを押すたびにオン・オフを繰り返します。

植物換気用ファン

ダッシュボタンを押すたびにセサミを開け閉めする設定

上記で説明したセサミ + ダッシュボタンは解錠専用でしたが、押すたびに開け閉めしてくれるPythonスクリプトを作ってみました。適当に作ったのでエラーになる場合もあるかと思いますのであしからずご了承ください。(エラーになったら詳細教えていただけると助かります。)

dash-sesame.py Pythonファイル

以下に/home/pi/scriptにdash-sesame.pyを作ります。内容は以下、「ca0001ce-xxxxxxxxxxx」の部分はセサミID、「PV0srsdbST-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx」の部分はセサミAPIに置き換えてくださいね。

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import requests
import json
import urllib3
from urllib3.exceptions import InsecureRequestWarning
urllib3.disable_warnings(InsecureRequestWarning)

url = 'https://api.candyhouse.co/public/sesame/ca0001ce-xxxxxxxxxxx'
api={
	'Authorization': 'PV0srsdbST-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx',
	"Content-Type" : "application/json"
}
r = requests.get(url, headers=api, verify=False)
data = r.json()
#print json.dumps(data, indent=4)#結果{u'battery': 100, u'responsive': True, u'locked': True}

if data['locked'] == True :
	locked = 'unlock'
else:
	locked = 'lock'
#print locked #今のカギの状態

b = {"command": locked}
p = requests.post(url, headers=api, data=json.dumps(b), verify=False)

print(p) #レスポンス<Response [200]>が正常に開け閉めできている

ダッシュボタンに追加する前に、正常に動くか以下のようにしてシェルでテストしてくださいね。

$ python /home/pi/script/das-sesame.py
<Response [200]> #200だったら正常、400,401は設定がおかしい

amazon_dash.ymlファイル

dash-sesame.pyファイルがうまく動いて開け閉めできたら以下を追加しましょう。

$ sudo vim /etc/amazon_dash.yml #以下を追加
  38:f7:3d:94:eb:50:#ダッシュボタンのMACアドレス
    name: dash-zyokin
    user: pi
    cmd: /usr/bin/python /home/pi/script/dash-sesame.py

これでボタンを押すたびにセサミの状態をチェックして、1ボタンで開けたり、閉めたりすることができるようになりました。

反応が遅いので最低でも約30秒置きくらいにボタンを押さないとうまく動きませんでした。

解錠はちゃんとできるけど、施錠が反応しない場合が多い。das-sesame.pyでシェルから実行するとほぼ100%反応するので、ダッシュボタンとamazon-dashライブラリのどこかの経由で接続が切れるのかもしれません。

セサミ mini + ダッシュボタン まとめ

今まで半年ほどセサミでWifiがつながっていなかったせいか鍵開けがトロかったのですが、ダッシュボタンを導入してからというもの、鍵開けがなかなか速くなりました。

それでもダッシュボタンで10秒ほどはかかりますがカギ開けの場合は許容範囲ですね(トイレの照明スイッチなどの場合は点くまで10秒かかったら漏れるので壁スイッチにBLEは無理)。3・4秒はダッシュボタンの反応で残りの6秒くらいはWifiからセサミ(BLE)への通信している時間みたい。時々反応しない時もあるのでちょっと使いづらいかもしれません。コツは1~2秒ほど長押しすることみたい。

スマホで解錠する場合はセサミアプリを起動して・セサミに接続・解錠と20秒~1分くらいかかっていたのでダッシュボタンだとけっこう速くなりました。(手ぶら解錠もありますが、機能するときと反応しない時があるのであまり実用的ではないかな?)

IoTで使うダッシュボタン使い勝手

2日ほど使ってみましたが・・・反応しない時が結構ありますね・・・ただGPIOを操作するダッシュボタンはほぼ100%反応します。セサミとSwitchBotは反応しないときがあるのはやはりBLEなので仕方がないのでしょうか?

  • スマホのセサミアプリを起動・表示させておくとダッシュボタンは使えない。Bluetooth通信なのでセサミアプリかダッシュボタンのうち1つしか接続できない。
  • ちょっと長めに押す。
  • 押してから動作するまで3~5秒ほどのタイムラグがある。
  • ダッシュボタンが赤点滅している間(押してから8秒くらい)はボタン操作はできない。
  • SwitchBotは長めに押さないと反応しない時が多い・・・
  • ダッシュボタンを使うとセサミアプリが落ちるようになった・・・コレはヤバイ(しばらく使ってみましたが全く落ちなくなった。改善された?と思ったけどやっぱり落ちる・・・)
  • ダッシュボタンを押し過ぎるとアマゾンのセットアップ解除される??かもしれない。日100回くらい押したら端末を管理から登録したダッシュボタンが消えた。

ダッシュボタンと兼用するとセサミアプリが落ちる・・・

ダッシュボタンを使いだすと、スマホでセサミを解錠しようとしたらアプリが落ちる現象が頻繁に起きていました・・・

ただ、アプリが落ちないでちゃんと解錠できるときもあって?なにが原因かは不明だけどラズパイで以下のようにしてダッシュボタンを使えないようにしたらアプリが落ちなくなる。

$ sudo systemctl stop amazon-dash

なので、ダッシュボタンとセサミを連携すると、セサミアプリが落ちるみたい。

ちょっとした技でアプリで解錠できる

セサミアプリが落ちて解錠できない時は以下のようにセサミアプリで左から右へスワイプして、セサミアプリが落ちる前に下に表示される「Unlock All」ボタンを連打するか素早く押すと、うまくいくと解錠される。

ただし複数のセサミがある場合は全部解錠されてしまうのでこの技は使えなさそう。

セサミ

アプリが落ちるのを改善していただけると助かります。

ダッシュボタン終了!

ダッシュボタン自体が2019/8/31でアマゾンで使えなくなるサービス終了?ようなので、その後はどうなるのでしょうか?9月になったらダッシュボタンでセサミ解錠できるかやってみます。

セサミ Wifiバージョンへの期待

セサミの新しいバージョンはBLE(Bluetooth Low Energy)版の他にWifi版を作ってボタン押したら即座に反応(解錠)してくれるバージョンも作って欲しい。

ただし、Wifiにした場合はバッテリーではなく(Wifiでバッテリーでも動くけど同じ容量のバッテリーだと1日くらいしか持たない)有線なUSB電源が必要なのでWifiバージョン作らないだけですよね?玄関にUSBカメラ付けている方はけっこういらっしゃると思うのでUSB電源来てるので有線セサミWifiバージョンはけっこう需要あると思うのですがどうなんでしょう?自分はWifiバージョン出たら買います。

セサミ mini スマートロック本体 パールホワイト + Wi-Fiアクセスポイント

セサミ mini スマートロック本体 パールホワイト + Wi-Fiアクセスポイント

この記事は複数のページに別れています

コメント