
上段のラズパイでrpz-ir-senserのポートがふさがっているため、下段のラズパイの人感センサーで
人がいるときにのみ「暑い、寒い、じめじめする」とか上段のラズパイからgooglehomeに喋らせたいと思い、DB経由で連動を考えました。
mariaDBも勉強したいので。。。。(他にもっと簡単な方法あるだろうに。。。)
まずは人感センサー設定。 以下のサンプルを参考にさせていただきました。
https://chasuke.com/motionsensor/
動作しますね。
#【1】MariaDBインストール
mysqlがラズパイにうまく入らないので、mariadbをインストール
■一括LAMPインストール
$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/
#【2】ユーザ作成
■ログイン
$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
#【3】ホスト名設定 上段ラズパイ、下段ラズパイ共に設定
■ホスト名設定
$sudo nano /etc/hosts
以下 追加
XXX.XXX.XXX.XXX miyamodb
#【4】DB作成、テーブル作成
■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 ,'人感検知したらON、検知無はOFF', default);
#【5】mysqlclientのインストール 上段ラズパイ、下段ラズパイ共にインストール
$sudo apt-get install libmariadb-dev
$sudo pip3 install --upgrade pip setuptools
$sudo pip3 install mysql-connector-python
#【6】下段ラズパイ テーブル更新
これで 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をOFFにするSQLを組み込む。
【6】上段ラズパイ テーブル参照、bme280i2c.py、tsl2572.py、の音声部分条件追加
以下のSQLを組み込み 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)
以上