#はじめに
ここ最近、リモートで働くようになって家にいる時間が長くなってきました。少しでも面倒なことはなくしていきたいということで、NFCタグにスマホをかざすだけで家電を操作できるようにしました。ちょっと宣伝になってしまうのですが、少し前にnature_remo_apiというgemを作ったので、そちらを使っていこうと思います。
#用意するもの
- iPhone
- NFCタグ(自分はこちらのNFCタグを購入しました。ただ、ちょっと反応が悪い気がする・・)
- Raspberry Pi
- Nature Remo
#全体の流れ
ざっくりですが、最終的な全体の構成は以下のようになります。
#事前準備
後々使用するため、先に以下の2点を済ませておくとスムーズに進められると思います。
- Nature Remo公式のアプリで家電やNFCタグに設定したい操作を登録
- Nature RemoのAPIを使用するため、こちらからアクセストークンを取得
#Raspberry Piのセットアップ
まずはRaspberry Piのセットアップからです。
##Raspberry Pi に SSH できるようにする
このあとオートメーションの中で Raspberry Pi に SSH して Ruby のコードを実行するため、まずはRaspberry Piに SSH できるようにします。
###Raspberry PiのIPアドレスを取得する
arp -a | grep raspberry-pi-home.lan
###Raspberry PiにSSHする
取得したIPアドレスを指定してSSHします。
ssh pi@<上記で取得したIPアドレスを入れる>
実行するとパスワードを求められると思うので、入力します。
Raspberry PiにSSHした画面がこちら。
#Raspberry Piで nature_remo_api を使えるようにする
まずは作業用のディレクトリを作成 & 作成したディレクトリに移動します。
ここではios_automation
というディレクトリ名にしておきます。
mkdir ios_automation
cd ios_automation
##Rubyのセットアップ
次にRubyのセットアップをしていきます。
既にRuby 3.0.0が動く環境になっている場合はnature_remo_apiをインストールするに進んでください。
###rbenvをインストール
git clone https://github.com/sstephenson/rbenv.git ~/.rbenv
###.bashrcにrbenvの設定を追加
PATH="$HOME/.rbenv/shims:$HOME/.rbenv/bin:$PATH"
eval "$(rbenv init -)"
###.bashrcを読み込む
source ~/.bashrc
###ruby-buildをインストール
git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build
###rbenv経由でRubyをインストール & 設定
このあと、Rubyのコードを書く際、Ruby 3.0がインストールされていることを前提
として進めていくので、バージョンを合わせておくとスムーズに進められると思います。
####リストに表示されていることを確認。
rbenv install --list-all | grep 3.0.0
リストに表示されなかった場合
rbenvを更新
cd ~/.rbenv
git pull
ruby-buildを更新
cd ~/.rbenv/plugins/ruby-build
git pull
####Ruby 3.0.0をインストール
rbenv install 3.0.0
####現在いるディレクトリのRubyのバージョンを指定
rbenv local 3.0.0
##nature_remo_apiをインストールする
gem install nature_remo_api
##Nature Remoのアクセストークンを環境変数に設定する
こちらで取得したアクセストークンを環境変数に設定します。
# Nature RemoのAPIKEY
export NATURE_REMO_ACCESS_TOKEN='<取得したアクセストークン>'
上記を設定したあと、反映させるためにsource ~/.bashrc
を実行しておきます。
##操作したい家電の赤外線を取得
nature_remo_apiのセットアップが終わったので、ここからはコンソール上で操作したい家電の赤外線を取得していきます。
まずはirb
を実行してRubyのREPLを立ち上げてください。
細かいコードの説明は省きますが、まずは以下のコードでAPIを叩けるようにします。
require('nature_remo_api')
NatureRemoApi::Client.configure{|config| config.access_token = ENV['NATURE_REMO_ACCESS_TOKEN']}
client = NatureRemoApi::Client.new
次に登録してある家電を取得します。
取得できたハッシュのキーが家電のIDになります。
client.appliances.to_h{[_1.id, _1.nickname]}
操作したい家電が見つかれば、appliance_id
に入れておきましょう。
appliance_id = <家電のID>
次に対象の家電で登録している操作(赤外線)を取得します。
取得できたハッシュのキーが家電に対する操作のIDになります。
client.signals(appliance_id: appliance_id).to_h{[_1.id, _1.name]}
NFCタグに登録したい操作が見つかれば、signal_id
に入れておきます。
signal_id = <家電に対する操作のID>
次にNature Remo経由で実際に家電を操作してみます。
client.send_signal(signal_id: signal_id)
上手くいけば登録しておいた家電に対する操作が実行されるはずです。
操作のID(上記でsignal_id
として扱っていたもの)は、このあと使用するためメモしておいてください。
ここからは家電を操作するための簡易的なスクリプトを作成していきます。
(ファイル名は適宜変えてください)
require('nature_remo_api')
NatureRemoApi::Client.configure{|config| config.access_token = ENV['NATURE_REMO_ACCESS_TOKEN']}
client = NatureRemoApi::Client.new
client.send_signal(signal_id: '<先ほど取得した操作のID>')
念のため、スクリプトを実行してみましょう。
ruby ~/ios_automation/hoge.rb
登録しておいた操作が実行されれば、Raspberry Pi側の準備は完了です。
上記のコマンドは後ほど使用するためメモしておいてください。
#オートメーションを作成する
次に「ショートカット」にあるオートメーションを作成し、先ほど作成したRubyのスクリプトを実行できるようにしていきます。
読み取りに成功すると、このような画面が表示されるので、任意の名前を設定します。
検索窓に「ssh」と入力し、「SSH経由でスクリプトを実行」を選択
赤枠の部分を埋めていきます。入力の欄には動作確認で使用したコマンドを入力したあと、「次へ」を選択
以上で設定は終わりです。
試しにNFCタグにスマホをかざしてみましょう。
家電の操作を実行できれば成功です!
#終わりに
今回はNFCタグを使って、家電を簡単に操作できるようにしました。今回使用したNFCタグはちょっと反応が悪いなーと感じたので、おすすめのNFCタグがあれば教えていただけると嬉しいです!今後もどんどん改善しながら楽していこうと思います・・!