Amazon Dashボタンで「今日は休みます」メールや、HDDを消したりします

  • 32
    いいね
  • 2
    コメント

Amazon Dashボタンで「今日は休みます」メールや、HDDを消したりします

Amazonのセールなどが行われると、Dash Buttonが100円という破格の値段で解放されます  
Wifiにボタンを押すとアクセスして、Amazon社に対してあらかじめハードウェアに紐づいている商品を購入するものです

これを多少いじると、LinuxやUnixマシンで任意のコマンドを実行することができ、大変便利です

箱とかおしゃれ 

nodejsでやられている方が多いですが、私は簡単なことにはPythonをよく使うので、Pythonで構築します  

必要用件

  • Amazon Dash Button
  • Bluetooth対応のiOS or Androidデバイス
  • Wifi環境
  • Linux or Unixマシン

Amazon Dash Buttonの特徴から、ネットワークのAmazon Dash Buttonの通信を検知するので自宅サーバがなければ運用できないです。Rasphberry PIとかいいかも

注:MacOSの場合は、libpcap, libdnetをbrewで入れたあと、scapyのコードを編集する必要があります(参考文献参照)

Amazon Dash Buttonの登録

まずは、Amazon Dash Buttonを登録します 
登録にはiOSかAndroidのスマホかタブレットが必要です  
手順を忘れそうになるので、写真で記載します  

注意点としては、普通に手順を進めると商品をボタンを押すたびに買わされてしまうので、最後の商品選択の画面で、右上のバツボタンを押すことです  

amazon-dashモジュール

PYPIにはamazon-dashモジュールが公開されており、yml形式で命令を指定すれば、任意のコマンドが実行可能です

$ sudo pip3 install amazon-dash

まず、Amazon Dash ButtonのMACアドレスを調べます

このアドレスに紐づけて後述のymlで動作を指定しますので、メモ帳に記録しておきます

$ sudo amazon-dash discovery
20:3c:ae:66:d8:02
c0:25:a2:f4:62:b0
fc:a6:67:35:17:81 <- ボタンを押して直後に現れたMACアドレスが該当のAamazon Dash Button
...

命令をYML形式のファイルを作成し、rootのオーナーに変更します

$ touch amazon-dash.yml
$ sudo chown root:root amazon-dash.yml # MacOSの場合は sudo chown root amazon-dash.yml

YMLはこのようになっており、amazon-dashボタン毎にユニークなMACアドレスが振られていて、それを指定して、コマンドを記述できます

今回は、今日は会社休みますメール(ポカリスエットのダッシュボタン)と、ホームフォルダ以下を全消去するコマンド(フルグラのダッシュボタンの設定です)

settings:
  delay: 10
devices:
  50:f5:da:95:d2:24:
    name: フルーツグラノーラ
    user: alice
    cmd:  rm -rf /home/alice/*
  fc:a6:67:35:17:81:
    name: ポカリスエット
    user: bob
    cmd: /home/bob/sdb/amazon-dush-hack/amazon-dash-hack/scripts/attendance.py

メールを送るスクリプトはシェルでもRubyでもなんでもいいので好きなのを使うといいです

amazon-dashのボタンを監視させるソフトを常駐させる

tmuxやscreenなどを使って、常駐させると良いでしょう  
この時、amazon-dash.ymlは同一フォルダにある必要があります

$ sudo amazon-dash run

pythonでメールを送る

本題ではないですが、gmailのSMTPサーバ経由で、「今日は会社を休みます」のメールを送ります

(正しいパスワードの運用はあまりわからないので、簡易的に別ファイルに、userid, password, mailaddressを保存してそこを参照しています)

#! /usr/bin/python3
import smtplib

SECRET = { x:y for x,y in map(lambda x:x.split('='), filter(lambda x:x!='', open('/opt/google_account1').read().split('\n') ) ) }
MAILS  = { x:y for x,y in map(lambda x:x.split('='), filter(lambda x:x!='', open('/opt/mailaddrs').read().split('\n') ) ) }

msg = bytes("""
体調不良により、本日お休みをいただきたく思います。
どうぞよろしくお願いします。
""", 'utf8')
fromaddr = SECRET['GOOGLE_ACC']
toaddrs  = MAILS['KINTAI'] 

username = SECRET['GOOGLE_ACC']
password = SECRET['GOOGLE_PWD']
server = smtplib.SMTP('smtp.gmail.com:587')
server.starttls()
server.login(username,password)
server.sendmail(fromaddr, toaddrs, msg)
server.quit()
print('正常に送信が終了しました')

GetWildもできます

全く元ネタがわからないのですが、簡単にできます

IMAGE ALT TEXT HERE

今回作ったコード

github

参考文献

[1] Python3 cannot find libdnet - Scapy port