ほぼ自分のミスでセサミを壊してしまって1年の保証期間が半年ほど過ぎてしまったので新しいのを買うか有償修理してもらおうと思って、ダメ元でセサミの人に連絡したらせっかくなので無償修理で新しいセサミMiniを送ってくれるということ!ヤッター!
コレを機にアマゾンのダッシュボタンを追加してラズパイと連携させてワンボタンで解錠できるようにして子供や家族にダッシュボタンを渡しておきます。
- 激安・実用的なレスポンスなIot施錠 セサミ4 レビュー
- スマホ 鍵【セサミ壊れた】保証期間過ぎ無償修理でセサミminiに交換 神対応! + ダッシュボタン連携ハック (現在このページにいます)
- 旧型セサミ スマートロック+Wifiアクセスポイント レビュー
セサミ mini スマートロック本体 パールホワイト + Wi-Fiアクセスポイント
(壊れてしまった旧セサミは次のページでレビューしています。)
ダッシュボタンはアマゾンで販売終了してしまったのでメルカリで15個くらい約2千円で買いました。たくさんあるのでセサミだけでなく、ついでにSwitchbotやラズパイのGPIO操作ボタンにもしてみました。以下に設定方法など書いておきます。
- セサミを雑に扱ったのでモーター壊れる
- セサミWifiモジュールも壊れたと思ったけどリセットしたら治った!
- セサミ mini がやってきた
- セサミminiとダッシュボタンの連携
- アマゾンアプリでダッシュボタンの登録
- CANDY HOUSEのサイトでAPI取得+ID確認
- ラズパイでダッシュボタンを使えるようにする
- ついでにSwitchBotも操作してみる
- SwitchBot殻割り
- Switchbotアプリ
- インストールしておくもの
- ソースを取得
- 動作コマンド
- amazon_dash+ダッシュボタンでSwitchbotを動かす
- amazon_dash.ymlファイルを編集
セサミを雑に扱ったのでモーター壊れる
引っ越しのときに適当に設置してしまったので鍵の開け締めでギリギリいっていて、ちょっと付けたところが悪くて鍵の開け締めがスムーズにいってませんでした。あとで治そうと思って・・・半年間放置したら壊れました(泣)
セサミを剥がしたら以下のように無理をさせた部分のスポンジがグチャグチャになっていました。(こりゃ~壊れるわ)
最初は自力で治そうと思って分解してみた。
一応操作はできてLock/Unlockするとカチャ・カチャと音がする。ちゃんと反応しているのですが、サムターンはまわらない。なにかと思ったらモーターは壊れているが他の部分は壊れておらずLock/Unlockするたびにモーターの横の鉄の棒が飛び出たり引っ込んだりしていた。↓
どうやらモーターだけ壊れたようなので、モーター買ってきて治そうかとおもったけど上画像から先を分解するにはパーツ同士がボンドでくっつけてあるのでこれ以上の解体は手持ちの道具では無理っぽい。
ということで最後の手段としてセサミの人に有償修理できないか連絡してみたところ、無償修理してくれるとのこと!
結局は修理ではなく新型【セサミ mini】に交換してもらっちゃいました♪
ホントに神対応!!
セサミWifiモジュールも壊れたと思ったけどリセットしたら治った!
引っ越してからWifiモジュールの調子が悪くてこちらも放置していたところ、WifiモジュールのソフトウェアバージョンがV.2と古くV.6にアップデートしました。↓これで調子よくなるなぁ、と思っていたところ以前と変わらず調子悪い。
放置してWifiモジュールが機能していなかった・・・
Wifiモジュールが正常に動かない場合はセサミアプリの管理 > 設定を変更 の画面で連携のクラウドや通知の項目が表示されない。↓(Wifiモジュール無い人はもともと表示されません。)ダッシュボタンも使えない。
こんな状況↓なのでBLE(Bluetooth Low Energy)接続しかしないのでスマホとなかなか接続できなかったりで最近は解錠も手間取っていた。
こちらもセサミの人に質問したところ『Wifiモジュールをリセットしてください』とのこと。壊れた?と思っていたのでリセットしたら使えるようになったらラッキーです。
早速Wifiモジュールのリセット作業をしてみます。
セサミ Wifiモジュール リセット作業
作業自体は以下のようにします。ただリセットボタンを長押しするだけではリセットできないようです。(いままで適当にリセットしていたのでちゃんとリセットできていなかった・・・ズボラすぎ)
- セサミアプリを開く、作業終了まで開いたままにする
- WifiモジュールをUSB電源から抜く
- Wifiモジュールの上の穴のリセットボタンをピンで押したままUSB電源に刺す。そのまま3秒ほど長押し。
- 赤ランプがついていて、ピンを離すとパパパっと青いランプが点滅するとリセット完了。
上記のようにリセットしないで普通にピンでリセットボタンを押してもリセットされません。
セサミ Wifiモジュール リセット動画
上記「3」の操作方法の動画がありますのでこれを見てリセットしてみてください。
Wifiモジュールが有効になると通知・連携が設定可能になる
うまくリセットできたらセサミアプリの管理 > 設定を変更で通知や連携が表示されて設定できるようになった!
セサミでダッシュボタンを使う場合は「クラウド」をオンにしておく必要があります。
セサミ mini がやってきた
セサミminiは旧セサミよりも大分進化していて、ほとんどどんな形状の鍵でも取り付けられるようになっていました。
なので通常のサムターン形状でない場合は、予めサムターンや土台などの寸法をセサミの人にメールで伝えて専用の3Dプリンタでアダプターを作って送ってくれるという神対応の仕様になっています。
こちらのページを見て、鍵の形状が特殊アダプターが必要か確認しましょう。
セサミ miniが来た
旧セサミが壊れたことをセサミの人に連絡したら、有償修理どころか無償で新型のセサミ miniを送ってくれて、さらに3Dプリンターで作った専用のアダプタまで同梱してくれました!
【Works with Alexa認定製品】 セサミ mini スマートロック本体 パールホワイト + Wi-Fiアクセスポイント 取付簡単 スマートフォンでドアを施錠解錠 Google Assistant/Siriショートカット/Apple Watch/IFTTT対応
自分のサムターンの形状の場合は特に専用アダプタが必要なさそうですが、鍵の寸法や形状を連絡してくれたらアダプターも同梱してくれれました。せっかく作ってくれたのでアダプタも一緒にドアに取り付けてみます。
サムターンにつける専用アダプター
以下のような3Dプリンターで作られた専用アダプターが同梱されてきました。特殊なカギの場合は個別に作ってくれるそうです。これはすごい!
専用アダプターはセサミminiのサムターンを回す部分に乗せてみるとかなりスカスカでちゃんと固定されない。
スカスカすぎるので自分で3Dプリンターでアダプターを作ろうかと思いましたが、あまりに遊びなくぴったりなアダプターだと今度はセサミのパーツが折れてしまうのかもしれないのでこのようなスカスカな構造なのかもしれません。
アダプター付けてドアに取り付けましたが、スカスカでも全く問題なく施錠・解錠できたので考えられてゆるいアダプターを作っているのでしょう。ただし、スカスカなので施錠・解錠時にアダプターが動いて『カコンッ』と軽いプラスチック(PLAフィラメント)特有の軽い音がします。
電池交換は取り外さなくても付けられる
セサミminiは小さくて耐久性が上がっただけでなく電池交換時にセサミ本体とドアから分離させないでも交換できるようになっていました。↓
セサミminiの上部分のフタを手前にスライドさせると電池がでてきます。旧セサミもカバーを取れば電池交換できますが、ちょっとカバーが取りにくかった。
フタの裏には技適マークもありますので日本でも問題なく使えます♪
ドアにつけてしばらく開け閉めして気が付いたところ
旧セサミ(自分の持っていた1年半前のもの)は解錠時にUnlockボタンを押すとさらに解錠しようとしてググググを唸りをあげて回そうとする。
セサミ miniは解錠時にUnlockボタンをしてもググググならない。(数日経って、少し鳴るようでした・・・)
余計な動作をせずに今の状況を把握して少し賢くなったようです。
セサミminiとダッシュボタンの連携
セサミminiも取り付けられたのでダッシュボタンとセサミminiを連携させてみましょう。
ちょい長いですが以下の3つのステップでセサミとダッシュボタンを連携させることができます。なお、ダッシュボタンとセサミを連携させるには間にラズパイやLinuxが必要になります。
- アマゾンアプリでダッシュボタンと連携
- CANDY HOUSEのサイトでAPI取得+ID確認
- ラズパイでダッシュボタンを使えるようにする
ラズパイの簡単インストールは以下のページで書きました。
現在2500円で販売されているAWS IoT エンタープライズボタンではラズパイが必要ありませんが、ノーマルなダッシュボタンではラズパイを介してセサミと連携させます。
こちらのページで詳しく書かれていますのでこちらのほうが良いかもしれません。一応自分も下で設定方法書きましたのでよかったら御覧ください。
ダッシュボタンはもともとワンプッシュでアマゾンので売っている製品を買うもので、それを買わずに別の用途のIoTボタンとして使う。なので商品を買わずにIOTボタンとして使いすぎる(押しすぎる)とアマゾンに怒られるかもしれません・・・
アマゾンに怒られることは無いとは思いますが、本来のダッシュボタンの使い方とは違うIoTボタンとして使うことを予めご理解ください。
アマゾンアプリでダッシュボタンの登録
初めにダッシュボタンを使えるようにするにはアマゾンアプリとダッシュボタンの設定が必要になります。
この設定はパソコンのWebページでやろうとしたところ、できないようなのでスマホやタブレットでアマゾンアプリをダウンロードして設定していきます。
アマゾンアプリ
ダッシュボタンの設定
アマゾンアプリを起動して左上の棒三本アイコンをタップして以下のように進みます。
2019 9月からアプリの「新しい端末をセットアップ」の場所が変わりました
「新しい端末をセットアップ」と「Dash端末の管理」がなくなりました(泣)
ダッシュボタンをどうやってセットアップすればいいのか検討中です・・・解決可能??
「新しい端末をセットアップ」の場所が移動したようです。以下のようにすれば1個だけダッシュボタンが登録できました。
1個ダッシュボタンを登録したら?端末を管理の画面の下が全く表示されなくなってしまった・・・
タブレットにもAmazonショッピングアプリをインストールして設定してみましたが、2個ダッシュボタンを登録したら上のエラーと同様に端末を管理画面が表示されなくなった。
と、思ったら、以下のようにしたら新しくダッシュボタンの登録ができました!こっちは何個でも登録できるようです。
まだ10個ほどダッシュボタンを登録してなかったので、慌てて全部登録しました。
登録してないダッシュボタンがあったら、いつ「新しい端末の設定」がなくなるか分からないのでお早めに登録しておきましょう。
ダッシュボタンの登録
ダッシュボタンは商品を買うためではなく、IoTボタンとして使うので最後のほうで商品を選ばないで右上の「X」ボタンを押しましょう。
通常使用では商品を選びますが、今回は商品を買うためのボタンではなく、セサミと連携してドアのカギを開けるために使用するので商品を選ばずに「セットアップの終了」ボタンを押す。
セットアップ完了時の「端末を管理」画面
IoTボタンとして使う場合の「端末を管理」の画面↓、「通知の設定」でプッシュ通知のオン・オフが来るのでオフにしておくと来なくなるが・・・
以下のようなメールはプッシュ通知を全部オフにしても来る。
ボタンを押すと1日1回ほど催促メールが届く・・・
ボタンを押すと1日1回は以下のようなダッシュボタン設定完了の催促メールが来ます・・・これ通知来ないように設定できないのかしら?Gmailでゴミ箱直行便に設定すればいいけどなんか気になります。
CANDY HOUSEのサイトでAPI取得+ID確認
続いてセサミの販売元CANDY HOUSEのサイトに行ってセサミAPIとセサミIDを取得します。
セサミのユーザーがGmail・Facebookの場合はパスワードを変更する必要がある
セサミのユーザーメルアドがGmailかFacebookの場合は、パスワードもGmailとFacebookのになっているので新たにパスワードを設定する必要があります。
セサミアプリで以下のようにして変更しましょう。
CANDY HOUSEダッシュボードでAPIとID取得
続いてCANDY HOUSEのダッシュボードページにアクセスします。
セサミのユーザー名とパスワードでログインすると以下のようなページになります。
SESAME API取得
左メニューの「API Settings」を選んで「SEND CODE」を押します。セサミからメールが来て数字6桁が表示されているので、それを入力して「CONFIRM」ボタンを押す。
「ADD」ボタンが表示されるので押す。
DELETEボタンの右側に表示されている長い文字列がAPIキーですメモしておきましょう。
SESAME ID取得
続いてセサミIDを取得します。こちらは「SesameList」を選ぶとセサミがリスト表示されます。複数のセサミがある場合は複数表示されるので該当のセサミ名を押すと以下のような表示になってUSERや開け閉めのヒストリーなどが表示されます。
このページの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エラーなど、以下のページでエラーの詳細が説明されています。
401はセサミAPI・IDやWifiの設定ができていないようです。
自分の場合は古いセサミのIDでダッシュボタンを押していて気が付かずに401エラーになっていました(ドジです)気づいて新しいセサミMiniのセサミIDに書き換えたらちゃんと動いた!
Curlコマンドでテスト
うまくいかないときはLinuxのシェルコマンドでセサミの状態や操作することができます。
こちらのページ↓詳しく載っていたので試してみました。
セサミリスト
複数台のセサミを持っているときは複数表示されます。デバイスのセサミ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」のページに表示されます。
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 ボタンを押してくれる超小型指ロボット (ワイヤレス / スイッチボット)
パッケージはこんな感じ。
ボタン周辺に取り付けるためのシールや日本語取説あり。
SwitchBot殻割り
電池を取り出すときに使う溝をこじってフタを開けてみます。
すごくコンパクトにうまくまとまっていました。↓
フタを閉じている状態だと見えませんが、動作中は緑LEDが点灯します。
Switchbotアプリ
ボタンを押すのと設定のみ、シンプルなアプリです。
設定画面でMACアドレス(BLE MACの項目)があるのでメモしておきましょう。ダッシュボタンと連携のときに使います。
では、ダッシュボタンとSwitchBotを連携させてみましょう。
インストールしておくもの
python-hostライブラリを使うと簡単にSwitchbotとダッシュボタンを連携させることができました。
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アクセスポイント
コメント