作ったもの
友人との待ち合わせなどの際、車での移動を前提として「○○分に着くよ」というLINE送るのを
スマホの位置情報とGoogle Maps APIで計算して、LINEmessagingAPIで自動送信させるBOT
※自分の場合は毎日、職場の先輩を迎えに行って出勤しているのでその際、活用しています。
動作環境
スマホ:Docomo P20pro【HW-01K】
サーバ: Conoha VPS [1GB]
webサーバ:nginx
開発言語:Python3
フレームワーク:Flask
DB:SQLite3
SSL証明書:Let's encrypt
スマホ使用アプリ:Tasker
使用API:Google Maps API、LINEmessagingAPI
イメージ
動作手順
スマホ動作
まずtaskerというタスクアプリをインストール
taskerの設定や使い方などは他サイトにたくさんの情報があるので省略。
まず良くある設定としてwi-fiの接続先を監視させています。
自宅のwi-fiに接続された時に、居場所として「自宅」をサーバに送信する。
そしてwi-fiから切断されたら、居場所として「外出」をサーバに送信しています。
それからBluetoothの監視をして車のカーナビとの接続で、居場所として「車」をサーバに送信。
さらにここから、自分の場合は自分の勤務パターンをTasker側でも計算させて
仕事に行く時間なのか判定条件を第一条件にしています。
そして車のカーナビに接続されると車に乗った、という判定を第二条件に追加。
この勤務前、車に乗るという2つの条件をトリガーにしています。
この条件を満たした時に着火剤(トリガー)として一定の動作を繰り返します。
この後、taskerの動作は上記条件を満たす間は1分ごとに位置情報を取得して
サーバに取得した位置情報を送り続けるという動作をさせています。
サーバ動作
サーバ側ではスマホからの受信とLineなどへの送信で主に2つのプログラムを動作させています。
【受信側】
スマホからの受信ではnginxとpythonをuwsgiをscketに接続しています。
pythonでスマホから受け取った居場所や位置情報などの値をSQLiteに格納。
また位置情報から指定された場所までの所要時間をGoogleMAPsAPIに投げて取得し、
おおよその到着時間を計算してSQLiteに格納するところまでさせています。
【送信側】
送信側はデーモン化してサーバ起動時は常時起動となるように設定しています。
まず、ここでも勤務パータンの計算。
勤務前の少し前の時間に位置情報や到着時刻などの値を初期化するようにしています。
その後、SQLiteの居場所が「車」に変わるまでwait。
居場所が「車」に変わるとLINEmessagingAPIで「家出た」を送信します。
そしてSQLiteの到着予定時間を取得して、15分前になると再度LINEmessagingAPIで
その時の現在地と「到着予定時間〇:〇〇頃」を送信します。