スマートロック アプリ側 wifi

パクリ9発目
パクリ元
内容
こないだモーター側とりあえず動かすだけはできたが高機能なことはできていない。でも気にしない。
あとはドアの外からラズパイにどう指令を伝えるか、という問題となる。これはパクリ元1つ目のようにいろんな会社が目的に応じていろいろな方法で作っているようだ。自分でもなんとなく調査して以下のように整理してみた。
No | 認証方式 | 認証対象 | 認証側受信装置 | 認証方法 |
1 | 人の信用 | 人 | 門番 | 門番が人を確認 |
2 | 鍵 | 鍵 | 錠 | 鍵で錠を開ける |
3 | 番号入力 | 番号 | テンキー | 設定済み番号を入力 |
4 | 磁気カード | 磁気カード | 磁気カードリーダー | 取得したキーを元に確認 |
5 | ICカード(NFC) | フェリカ等 | ICカードリーダー | 取得したキーを元に確認 |
6 | アプリ(wifi/LTE) | 携帯電話 | ルーター | 取得したキーを元に確認 |
7 | アプリ(BlueTooth) | 携帯電話 | BlueTooth | 取得したキーを元に確認 |
8 | アプリ(QRコード) | 携帯電話 | QRコードリーダー | 取得したキーを元に確認 |
9 | アプリ(赤外線) | 携帯電話 | 赤外線レシーバー | 取得したキーを元に確認 |
10 | 指紋 | 人 | 指紋リーダー | 取得したキーを元に確認 |
11 | 顔 | 人 | カメラ | 取得したキーを元に確認 |
12 | 網膜 | 人 | カメラ | 取得したキーを元に確認 |
13 | 静脈 | 人 | 静脈リーダー | 取得したキーを元に確認 |
14 | 音声 | 人 | マイク | 取得したキーを元に確認 |
15 | モールス信号 | 文字列 | マイク? | 取得したキーを元に確認 |
16 | 手旗信号 | 動き | カメラ? | 取得したキーを元に確認 |
17 | モーション | 動き | モーションセンサー | 取得したキーを元に確認 |
すべてに共通するのは前もって登録してあるものと一致するか否か、という点であり、一方からもう一方へどう情報を伝達して判定するか、ということである。QR決済やカード決済等も仕組み的には全く同じ。モールス信号から下はなんとなく思いついたから追加。まあよく考えたらモールス信号もQRコードも文字列をなんの手段で伝えるか、というだけなので厳密には同じなのかもしれんけど、
鍵やカード、携帯電話等持っているものを認証するのか、またはその人自体を認証するのか、という点は大きく異なる点となり、誰であっても被認証デバイスを提示するだけで認証してしまうのはセキュリティ上の問題となりうるが、ICカードの貸し借りなどたまにある話のように思える。
変わり種として、その人自身の顔の特徴点を記録したICカードを配って、読み取った特徴点とカメラで映った人物の特徴比較をして認証する、という方法を聞いたことがある。ICカードを落としても誰かに使われることがない、とのことだが、これは前もってDBなどに登録するデータを被認証デバイス自体に記録しておくという方式であり、なるほどと納得した覚えがある。
応用
とりあえず一番簡単そうな No.6:アプリ(wifi/LTE) を試す。
パクリ元2つ目、3つ目を参考にしてサーバーからサーボモーターを動かすように servo_http_test.py を作成。
from http.server import BaseHTTPRequestHandler, HTTPServer
import pigpio
host_name = '0.0.0.0'
host_port = 8000
SERVO_PIN = 18
pi = pigpio.pi()
class MyServer(BaseHTTPRequestHandler):
def do_HEAD(self):
self.send_response(200)
self.send_header('Content-type', 'text/html')
self.end_headers()
def do_GET(self):
html = '''
<html>
<head>
<style>
button {
display: block;
width: 800px; padding: 200px; margin: 5px;
background: #569f3c; color: #FFF;
text-decoration: none; text-align: center; font-size: 54px;
}
</style>
</head>
<body>
<button onclick="location.href='/open'">open</a>
<button onclick="location.href='/close'">close</a>
</body>
</html>
'''
self.do_HEAD()
status = ''
if self.path=='/'or self.path=='/close':
pi.set_servo_pulsewidth( SERVO_PIN, 1450 )
elif self.path=='/open':
pi.set_servo_pulsewidth( SERVO_PIN, 2500 )
self.wfile.write(html.encode("utf-8"))
if __name__ == '__main__':
http_server = HTTPServer((host_name, host_port), MyServer)
print("Server Starts - %s:%s" % (host_name, host_port))
try:
http_server.serve_forever()
except KeyboardInterrupt:
http_server.server_close()
デーモンを立ち上げてからサーバ起動。
$ sudo pigpiod
$ python3 servo_http_test.py
同じセグメントにある携帯から http://raspberrypi.local:8000/ へアクセス
うーん、これだけでもなんか嬉しい。実際はオートロックにして画面上はopenボタンしか置かない感じですかね。
wifiパスワードとURLを知っていれば開けられるという仕組みだけど、家族という単位ぐらいならセキュリティ的にはこれでも大丈夫な気がする。他人がいる組織の場合はページの前に認証させて辞めた人を入れさせない、ぐらいやればいいかな。
他の認証方式も後で確認しよう。
ディスカッション
コメント一覧
まだ、コメントがありません