ラズパイ　人感センサー検知をmariaDBによるrpz-ir-senser連動でgooglehomeに喋らせる                                                                                                                                                 

![IMG_0605.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/433305/991e8535-8088-a4a7-c146-23e86d4da4cb.jpeg)
上段のラズパイでrpz-ir-senserのポートがふさがっているため、下段のラズパイの人感センサーで
人がいるときにのみ「暑い、寒い、じめじめする」とか上段のラズパイからgooglehomeに喋らせたいと思い、ＤＢ経由で連動を考えました。
mariaDBも勉強したいので。。。。（他にもっと簡単な方法あるだろうに。。。）
まずは人感センサー設定。　以下のサンプルを参考にさせていただきました。
https://chasuke.com/motionsensor/

動作しますね。

#【１】MariaDBインストール
mysqlがラズパイにうまく入らないので、mariadbをインストール
■一括ＬＡＭＰインストール 
$sudo apt-get -y install apache2 php php-dev php-fpm php-gd mariadb-server php-mysql phpmyadmin perlmagick

■cgi.loadファイルの設定。
シンボリックリンクを /etc/apache2/mods-enabled/cgi.loadに設定して cgi.loadを有効にする。
$sudo ln -s /etc/apache2/mods-available/cgi.load /etc/apache2/mods-enabled/cgi.load

■# PHP 7.3 FPM有効【一応】
$sudo a2enmod proxy_fcgi setenvif
$sudo a2enconf php7.3-fpm
$sudo systemctl reload apache2

■apache2.conf　編集
$sudo nano /etc/apache2/apache2.conf

内容は下記の通り、一番下に追加
Include /etc/phpmyadmin/apache.conf

■再起動
$sudo service apache2 restart

■確認①apache
http://xxx.xxx.xxx.xxx/

■確認②phpmyadmin
http://xxx.xxx.xxx.xxx/phpmyadmin/

#【２】ユーザ作成
■ログイン
$sudo mysql　
権限を付与すると上記は使用不能
■権限設定（すべて）／ユーザ作成
外部接続可能ユーザの作成
GRANT ALL PRIVILEGES ON *.* to miyamo@"%" IDENTIFIED BY 'XXXXXXX' WITH GRANT OPTION;
ルートユーザはローカルのみで設定
GRANT ALL PRIVILEGES ON *.* to root@localhost IDENTIFIED BY 'XXXXXX' WITH GRANT OPTION;
・設定の反映 
flush privileges;
quit
■外部接続可能とする。
$sudo nano /etc/mysql/mariadb.conf.d/50-server.cnf
以下を変更
bind-address            = 127.0.0.1
↓
bind-address            = 0.0.0.0

#【３】ホスト名設定　上段ラズパイ、下段ラズパイ共に設定
■ホスト名設定
$sudo nano /etc/hosts
　以下　追加
XXX.XXX.XXX.XXX	miyamodb

#【４】ＤＢ作成、テーブル作成
■miyamoユーザでログイン
$sudo mysql -u miyamo -p
create databae miyamodb;
何故かうまくいかず。phpmyadmin　で　DB作成
■人感テーブル作成

```
use miyamodb;
CREATE TABLE jinkan (
    id INT NOT NULL PRIMARY KEY,
    title VARCHAR(50),
    sw DECIMAL(1) unsigned,
    content TEXT,
    created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
);
```

■テーブル確認

```
show tables;
```

■テーブル構造確認

```
describe jinkan;
```

■初期データ作成

```
insert into jinkan values (1, '人感検知', 0 ,'人感検知したらＯＮ、検知無はＯＦＦ', default); 
```

#【５】mysqlclientのインストール　上段ラズパイ、下段ラズパイ共にインストール
$sudo apt-get install libmariadb-dev
$sudo pip3 install --upgrade pip setuptools
$sudo pip3 install mysql-connector-python

#【６】下段ラズパイ　テーブル更新
これで　chasukeさんの
https://chasuke.com/motionsensor/
 ※アクセス時、not found と出ますが、motionsensor/　の後ろを消せば表示されます。
のサンプルと以下のSqlの組み合わせ、人がいれば「暑い」とか言わせる。

```

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import datetime
import mysql.connector

def main():     
# MySQL接続
    cnt = mysql.connector.connect(
    host='miyamodb',
    port='3306',
    db='miyamodb',
    user='miyamo',
    password='XXXXXXX',
    charset='utf8'
    )

# カーソル取得
    db = cnt.cursor(buffered=True)

# SQLクエリ実行（データ更新）
    sql = 'UPDATE jinkan SET sw = 1,created_at = now()  where id = 1';
    db.execute(sql)
    sql = 'commit';
    db.execute(sql)

# SQLクエリ実行（データ取得）
    sql = 'SELECT sw, created_at FROM jinkan';
    db.execute(sql)
    
# 表示
    rows = db.fetchall()
    print('jinkan update：',rows)

# カーソル終了
    db.close()
# MySQL切断
    cnt.close()

if __name__ == "__main__":
    main()
```

あとは人がいない場合、swをＯＦＦにするＳＱＬを組み込む。

【６】上段ラズパイ　テーブル参照、bme280i2c.py、tsl2572.py、の音声部分条件追加
以下のＳＱＬを組み込み　sw=1 の場合のみgooglehomeに喋らせる。

```
# MySQL接続
  dbcnt = mysql.connector.connect(
  host='miyamodb',
   port='3306',
   db='miyamodb',
   user='miyamo',
   password='xxxxxx',
   charset='utf8'
    )
# カーソル取得
  db = dbcnt.cursor(buffered=True)
```

以上