見守り番犬システムの運用（TWE-LITEによる見守り①寝起き動き）

# １．はじめに
遠隔地に住む祖母の暮らしを見守るため、設置したセンサー情報をモニタする取り組みを行ってましたので、主として備忘のためにまとめます。

モノワイヤレス株式会社の[**「TWE-Lite（トワイライト）」**](https://mono-wireless.com/jp/products/twelite-pal/sense/openclose-pal.html)を使用して、親機である「RaspberryPi」からセンサ情報を「LINE Notify」でスマホへ通知する仕組みです。

https://mono-wireless.com/jp/products/TWE-LITE/index.html

TWE-Lite製品はボタン電池で動く無線装置であり、センサーと組み合わせた「TWE-Lite PAL」は、手軽にIOTサービスを作るのにぴったりです（ソフトウェアの書き換え等の手間も要らない）。~~少々お高い気もしますが。~~

## ２．寝起き機能の概要

`健康な暮らしは、気持ち良い目覚めとぐっすり睡眠から！`
　ということで、ヌイグルミに内蔵した「動作センサ」の情報から、寝起きの時間や部屋での活動を確認していきます。
→[**「動作センサーパル（MOTION SENSE PAL）」**](https://mono-wireless.com/jp/products/twelite-pal/sense/openclose-pal.html)を使用。

https://mono-wireless.com/jp/products/twelite-pal/sense/openclose-pal.html

あらかじめ祖母に「自分の寝起きに合わせて、ヌイグルミも寝起きさせる」ことをお願いしておきます。
内蔵した動作センサーパルは「ヌイグルミの向き」を取得できるので、ヌイグルミを寝かせたり起こしたりした情報がデータベースに記録されます。間接的にですがヌイグルミによって、手作業で記録を行って貰うわけですね。
![①.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2944244/a2174451-138c-2690-9222-d00803730340.png)

また、動作センサーパルは「周辺の振動」を検知できるので、その回数を集計することで、部屋の中でどの程度動きがあったか推測することが出来ます（→運動値）。ヌイグルミは普段過ごしている居間などに置いてもらうのがポイントです。
![②.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2944244/33a4f52e-4feb-3f22-5c6c-4f43d538af68.png)

「ヌイグルミの向き」とヌイグルミの周囲の振動である「活動値」を集計して、LINEへ通知します。
![③.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2944244/f35ccce2-c07c-119a-1b17-c9d5e6f1bfed.png)

## ３．実装
・**準備するもの**
| 区分| 名前 | 目的 |
|:-----------|------------:|:------------:|
| 親機       | Raspberry Pi 4 Model B        | 親機となって、情報を記録・発信する       |
|| MONOSTICK     | センサー情報を情報を受信する装置。「App_PAL」をインストールしておくこと      |
| センサ|BLUE PAL         |情報を送信する無線装置。別途、コイン型電池（CR2032）が必要
||通知パル（NOTICE PAL）|向きや動きを検知できるセンサー。BLUE PALと組み合わせる|

### ①データベースを作成する
Raspberry Piに「MySQL」をインストールし、必要なデータベースとテーブルを作成しておく
→以下のWEBサイトを参照するなど、頑張って構築してください。

>（参考サイト）[**【ラズパイで始めるデータベース入門】Raspberry Pi で、MySQL の データベース を作成しよう。**](https://knt60345blog.com/mysql/)

```python:メモ
#DB作成
CREATE DATEBASE WATCHDOG
#テーブル作成
CREATE TABLE data_table (NO INT(10) AUTO_INCREMENT PRIMARY KEY,DATE datetime,DEVICE VARCHAR(32),DATA1 float,DATA2 float,DATA3 float);
#レコード追加（データ記録）
insert into data_table values(Null,datetime.date.now().strftime('%Y-%m-%d %H:%M:%S'),DEVID,DATA1,DATA2,DATA3)
```

### ②ヌイグルミを起こす、寝かせる。動きを記録する
[**「MONO STICK」**](https://mono-wireless.com/jp/products/MoNoStick/index.html)に接続したRaspberry Piで[**「Pythonスクリプト」**](https://palscript.twelite.info/v/master/source-files/pal_script.py)を実行しておき、「センサーの向き」と「活動値」を記録する

:::note info
　以下、引用として表示するソースコードは
　モノワイヤレス株式会社に帰属しています
:::

```python:Pal_Script.py
from apppal import AppPAL

if __name__ == '__main__':
	try:
		PAL = AppPAL(port=options.target, baud=options.baud, tout=0.05, sformat=options.format, err=bEnableErrMsg)
	except:
		print("Cannot open \"AppPAL\" class...")
		exit(1)

	while True:
		try:
			# データがあるかどうかの確認
			if PAL.ReadSensorData():
				# あったら辞書を取得する
				Data = PAL.GetDataDict()

				# なにか処理を記述する場合はこの下に書く
				print(Data)			# 受け取った辞書をそのまま標準出力する
                ★★ここに「データベース記録」の処理を書く★★
                
				# ログを出力するオプションが有効だったらログを出力する。
				if bEnableLog == True:
					PAL.OutputCSV()	# CSVでログをとる

		# Ctrl+C でこのスクリプトを抜ける
		except KeyboardInterrupt:
			break

	del PAL
```

手順①で作成したデータベースに、「ヌイグルミの向き・活動値」や「日時」などが記録されました。
![06_DB画面.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2944244/245a5076-02f9-5555-ac66-9a020d62f95b.jpeg)

### ③DB集計してから、LINE通知
起きた時間と寝た時間をそれぞれ取得、活動値を集計するクエリを実行します。

→以下のWEBサイトを参照するなど、RaspberryPiと「LINE」を連携してください。

>（参考サイト）[Pythonで、LINEにメッセージを通知する方法【LINE NOTIFY】
](https://knt60345blog.com/line-notify/)　https://knt60345blog.com/line-notify/
```python:メモ
#時間取得（起床）
sql="select DATE,DATA1 from data_table where DATA1 = 1 and DATE> "+str(datetime.date.today())+" and DATE< "+str(datetime.date.today()+ datetime.timedelta(days = +1))+" and DEVID='810F0520' order by DATE asc limit 1"
#時間取得（睡眠）
sql="select DATE,DATA1 from data_table where DATA1!=1 and DATE<"+str(datetime.date.today())+" and DATE> "+datetime.date.today()+ datetime.timedelta(days = -1)+" and DEVID='810F0520' order by DATE desc limit 1"
#活動値集計
sql="select count(DATA1) from data_table where DATE<"+str(datetime.date.today())+" and DATE> "+datetime.date.today()+ datetime.timedelta(days = -1)+" and DEVID='810F0520'"

#LINE通知
message = "就寝→起床：" + time_sleep + "→" + time_getup + "、活動値："+ str(count_move) +"）"
payload = {'message': message}

line_notify_token = 'LINEのAPIで取得したトークン'
headers = {'Authorization': 'Bearer ' + line_notify_token}
line_notify = requests.post('https://notify-api.line.me/api/notify', data=payload, headers=headers)
```


毎日お昼に「LINE Notify」にてグループラインへスマホに通知します。
![07_LIME.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2944244/39f927af-738d-bf68-258c-760a3384eb0d.jpeg)


## ４．つづきます
思ったより長くなりそうなので、各機能毎に記事を分けていきたいと思います。メモ程度ですが、ソースコードもそこに記載できればと思います。
この記事から各機能へのリンクを行っていきますので、宜しければご確認ください。

## ●次回予告（環境お知らせ機能）
`暑さ寒さも遠くまで、離れても伝わる部屋での暮らし`
　室内の「環境センサ」の情報から、室温や湿度、部屋の明るさを記録して、必要に応じて通知することができます。
→「環境センサーパル（AMBIENT SENSE PAL）」を使用。