スマートホーム作成1

電子工作

eRemote mini(RM mini3)というスマートリモコンがRaspberry Piで簡単に制御ができるといくつかのブログにあったのでこのスマートリモコンを使用してスマートホームを作成します。エアコン、照明の操作に温度センサーと照度センターも使用し、30℃以上になったらエアコンオン、90lux以下になったら照明をつけるなどができるようにします。

 

スマートリモコンをRaspberry Piで制御

まず、eRemote miniのWi-Fi設定を行う。Wi-Fi設定が完了し、スマートフォンアプリのeHomeより家電の操作ができることを確認する。

Raspberry Piにpython-broadlinkのインストール

Raspberry Piでスマートリモコンを制御するためにpython-broadlinkをRaspberry Piにインストールします。

まずgitをインストールし、gitでpython-broadlinkをダウンロードします。

コマンド
sudo apt-get install git
git clone https://github.com/mjg59/python-broadlink.git

次にpipをインストールし、pipでbroadlinkというライブラリをインストールします。作業フォルダとしてsmarthomeを作りその中に入れます。

コマンド
sudo apt-get install python-dev
sudo apt-get install python-pip
sudo pip install broadlink
mkdir smarthome
mv python-broadlink /smarthome
cdコマンドでインストールしたフォルダーにいき、動作確認を行います。

コマンド
cd smarthome/python-broadlink/cli
./broadlink_discovery
cdコマンドでインストールしたフォルダーにいき、動作確認を行います。
0xXXXX 192.168.XX.X XXXXXXXXXXXX
上の例のような感じが返ってきたら保存します。ipアドレスはスマホのアプリなどで確認できるので同じか確認します。

コマンド
./broadlink_discovery > ROOM.device
念のため中身が同じ確認します。

コマンド
nano ROOM.device
これでRaspberry Piの設定は完了。コマンドでリモコンに学習させます。(コマンドを叩いてからスマートリモコンに向けてリモコンを操作)

コマンド
./broadlink_cli –device @ROOM.device –learnfile LIGHT.on
リモコンから 送信させる(学習させた内容が動作することを確認),@を忘れずに

コマンド
./broadlink_cli –device @ROOM.device –send @LIGHT.on
家電の操作ができれば完了。

参考サイト

スマートホームスキルとNode-redとpython-broadlinkを使ってrm mini3を音声操作するメモ - Qiita
スマートホームスキルとNode-redとpython-broadlinkを使ってrm mini3を操作するようにするメモ 参考:Amazon Echoで「○○をつけて」と言って家電を操作する - Qiita ほとんどここの内容...
素人でもスマートスピーカーから家電を操作できた - Qiita
こと始め Google HomeのCMみたいに声で照明をつけたい! Amazon EchoとeRemote miniを買ったけど、コレジャナイ! Raspberry Piというものがあれば、いい感じに自作できるらしい や...

スマートリモコンをwebから操作

次はスマートリモコンをwebから操作できるようにします。これをすることでリモコンは使わなくてもスマホですべての家電を制御できるようになります。

Apacheでweb鯖を建ててNode-REDを使ってRaspberry Piにコマンドを送信します。

Apacheのインストールは以下を参照

http://www.feijoa.jp/work/hal/apacheAndPhp/

または、WEBリモコンというandroidのアプリでもURLを設定するとRaspberry Piにコマンドを送信できます。

Webリモコン(HTTP) - Google Play のアプリ
WebリモコンはHTTP プロトコルで文字を送信するアプリです * 4x10 のボタンを自由にカスタマイズしてボタンに送信する文字を割り当てることが出来ます * 設定内容のエクスポート/インポート 送信対象のURL( URLに付加するクエリのキー(デフォルトdata=ボタンに設定した値) Basic認証(設定が...

Node-RED用プログラム作成

Node-REDで直接家電を操作すると、電源がトグルスイッチになっている場合onなのかoffなのかわからなくなるためpythonで家電をonにしたかoffにしたかテキストファイルに書き込むプログラムを作ってやります。

軽く説明すると現在の機器の動作状況、気温、照度などの情報が入っているstate.txtを読み込み、sysをimportすることで使えるようになるargvで引数を取得します。そして、引数で指定された機器がOFFならONにし、ONならOFFにします。最後に、state.txtを更新しておきます。

Node-REDをインストール

Raspberry Piとオンラインサービスを接続するためのツールであるNode-REDをインストールします。node.jsが必要なのでまず、node.jsをインストールします。

コマンド
sudo apt-get install nodejs npm
sudo npm cache clean
sudo npm install n -g
sudo n lts
何をしているかは、あまり考えずに参考サイトからコピペでコマンドをたたいてました。

次にNode-REDのインストールを行います。

コマンド
sudo npm install -g –unsafe-perm node-red
インストールしたNode-REDを起動します。

コマンド
node-red-pi –max-old-space-size=256
ブラウザからRpiのIPアドレスの1880ポートにアクセスしてみて、以下のNode-REDの画面が表示されたらインストール成功です。1880はNode-REDの使用しているポート。

node-REDのフロー作成

node-REDのGUIで、python-broadlinkを実行するフローを組みます。Node-REDの管理画面アクセスして、http-in、execノードをつなげてフローを定義する。

http-inにはURLにlightoffと入力します。execにのコマンド欄に以下のコマンドを入力します。
python /home/pi/smarthome/interrupt.py 0 2
http-inで設定したURLにアクセスすると上のコマンドが実行され照明がOFFになります。ルーターの設定でTCPポート:1880を開放すると外から家電の操作ができるようになります。

Node-REDのBasic 認証

ポート開放を行うとIPを特定された場合、Node-REDの設定画面にアクセスできるようになるためRaspberry Piを勝手にいじられる可能性があります。そのため、ここではBasic 認証を紹介します。

まず、設定ファイルに記載するパスワードを暗号化します。PASSPHRASEをパスワードに変えて実行してください。

コマンド
cd /usr/local/lib/node_modules/node-red
node -e “console.log(require(‘bcrryptjs’).hashSync(process.argv[1], 8));” PASSPHRASE
よくわからない数字と文字の羅列が返ってきたと思います。これが設定に使用する暗号化したパスワードです。
2a$08$0tUbDhbFE0V5RrifsHfaruCkIATUbAcPqYnbGel9omwSLW.uJ94m2
次に、認証有効化します。設定ファイル「~/.node-red/settings.js」を編集します。ファイル内の「adminAuth」を設定します。usernameとpasswordを設定します。passwordは暗号化したパスワードを入力します。

コマンド
sudo nano ~/.node-red/settings.js
~(略)~
adminAuth: {
type: “credentials”,
users: [{
username: “admin”,
password: “$2a$08$0tUbDhbFE0V5RrifsHfaruCkIATUbAcPqYnbGel9omwSLW.uJ94m2”,
permissions: “*”
}]
},
~(略)~
Node-RED を再起動し、管理画面にアクセスし、ユーザ名とパスワードを入力する画面が表示されるか確認しておきましょう。

参考サイト

Redirecting…

以上でwebから家電の操作ができるようになりました。webサーバーでボタンを操作するページを作成したり、state.txtを読み込み表示させてもいいかもしれません。

 

タイトルとURLをコピーしました