NFCタグにスマホをかざして家電を操作できるようにしてみた


はじめに

ここ最近、リモートで働くようになって家にいる時間が長くなってきました。少しでも面倒なことはなくしていきたいということで、NFCタグにスマホをかざすだけで家電を操作できるようにしました。ちょっと宣伝になってしまうのですが、少し前にnature_remo_apiというgemを作ったので、そちらを使っていこうと思います。

用意するもの

  • iPhone
  • NFCタグ(自分はこちらのNFCタグを購入しました。ただ、ちょっと反応が悪い気がする・・)
  • Raspberry Pi
  • Nature Remo

全体の流れ

ざっくりですが、最終的な全体の構成は以下のようになります。

事前準備

後々使用するため、先に以下の2点を済ませておくとスムーズに進められると思います。

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の設定を追加

.bashrc
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とruby-buildを更新します。

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のアクセストークンを環境変数に設定する

こちらで取得したアクセストークンを環境変数に設定します。

bashrc
# 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として扱っていたもの)は、このあと使用するためメモしておいてください。

ここからは家電を操作するための簡易的なスクリプトを作成していきます。
(ファイル名は適宜変えてください)

hoge.rb
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のスクリプトを実行できるようにしていきます。

オートメーション作成

「個人用オートメーションを作成」を選択

「NFC」を選択

「NFCタグ スキャン」を選択

この画面が表示されたら、NFCタグにスマホをかざします。

読み取りに成功すると、このような画面が表示されるので、任意の名前を設定します。

名前を設定したら「次へ」を選択

「アクションを追加」を選択

検索窓に「ssh」と入力し、「SSH経由でスクリプトを実行」を選択

赤枠の部分を埋めていきます。入力の欄には動作確認で使用したコマンドを入力したあと、「次へ」を選択

「完了」を選択

以上で設定は終わりです。
試しにNFCタグにスマホをかざしてみましょう。
家電の操作を実行できれば成功です!

終わりに

今回はNFCタグを使って、家電を簡単に操作できるようにしました。今回使用したNFCタグはちょっと反応が悪いなーと感じたので、おすすめのNFCタグがあれば教えていただけると嬉しいです!今後もどんどん改善しながら楽していこうと思います・・!