外出時間の履歴

ネットワークの疎通確認に使用する ping コマンドを利用して、どの時間帯にどのくらいの時間外出していたか履歴を作成します。

具体的には自宅の無線LANにおけるスマホIPアドレスに対して毎分 ping を放ちます。その後、 echo $? で返り値を確認すればスマホがネットワークに参加している場合は「0」、そうでない時は「1」となります。従って「0」の場合は在宅、「1」の場合は外出中と判断してデータベースに登録するようにしました。 

#crontab の一部
PATH=/usr/local/gmt5/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin

# Example of job definition:
# .---------------- minute (0 - 59)
# |  .------------- hour (0 - 23)
# |  |  .---------- day of month (1 - 31)
# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7)
# |  |  |  |  |
  *  *  *  *  *           welcome_back.sh

繰り返し実行は上記のように crontab へ登録することにより可能となります。

# welcome_back.sh の中身
#!/bin/bash mobile_IP=xxx.xxx.xxx.xxx # テーブルが存在しなければ作成する mysql life_log << _SQL_ create table if not exists athome ( time datetime, home boolean ); _SQL_ # 0.25秒間隔タイムアウト0.1秒のピンを10回打つ ping -c 10 -i 0.25 -w 0.1 ${mobile_IP} > /dev/null 2>&1 exist=`echo $?` if [ ${exist} -eq 0 ] then printf "%s %s 在宅\n" `date +'%F %T'` else printf "%s %s 外出\n" `date +'%F %T'` fi mysql life_log << _SQL_ insert into athome(time,home) value(now(),!"${exist}"); /* delete from athome where time <= NOW() - INTERVAL 7 day; */ _SQL_

上記のスクリプト中では秘匿していますが、シェル変数 ${mobile_IP} がスマホIPアドレスということになります。arp-scan で調べるなどして正しい値を入れて下さい。データベースの容量が余り大きくなりすぎても嫌なので、一週間以上前の履歴は消去するように計画していますが、現時点ではコメントアウトしてあります。