0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

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

Last updated at Posted at 2019-07-20

IMG_0605.JPG
上段のラズパイで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)

以上

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?