こんにちは、はな夫(@logicalifer)です。
Raspberry PiへNode-REDをインストールします。
Raspberry Piは下記でセットアップしたRaspberry Pi 3 Model B+です。
Node-REDのインストール
参考にするのは、下記の公式サイトにある、Raspberry Piへのインストール方法です。
sshでRaspberry Piにログインします。
ssh pi@raspberrypi@local
ログイン後、公式ページにある、下記のコマンドを実行します。
bash <(curl -sL https://raw.githubusercontent.com/node-red/linux-installers/master/deb/update-nodejs-and-nodered)
関連するライブラリなどが一通りインストールされます。
インストールが完了したら、下記を実行し、自動起動させるようにします。その他コマンドは公式ページを参照してください。
sudo systemctl enable nodered.service
再起動して、サービスが自動で立ち上がるか確認します。
sudo shutdown -r now
再起動したのを見計らって、他のPCのブラウザからアクセスします。
http://raspberrypi.local:1880/
Node-REDの画面が開けばインストール成功です。
Node-REDとAlexaの連携
下記のページを参考に設定していきます。
設定PCからブラウザでNode-REDにアクセスします。
http://raspberrypi.local/1880

Alexaから認識されるためのNodeを追加します。右上のハンバーガーアイコンからパレットの管理をクリックします。

ノードの追加をクリックします。

検索欄に「node-red-contrib-amazon-echo」を検索し、ノードを追加をクリックします。

注意ダイアログが出てきますが、続行していけば、左のノード一覧にamazon echo hubとamazon echo deviceというノードが追加されます。

ノードをドラッグしてフローに追加していきます。

- Amazon echo hub: echoからraspberry piをecho hubと認識させるために必要
- Amazon device:echoから認識させるデバイス名を設定
- exe:Raspberry Piで実行したい処理を設定
Amazon echo hubノード
2020年10月現在は、echoがデバイスを検索するポート80が他サービスと競合するため、ポートのリダイレクトが必要とのこと。下記のサイトを参考に設定をします。
Node-REDでは、amazon-echo-hubのノードをダブルクリックし、プロパティのPortを8111に変更します。

Amazon deviceノード
amazon deviceの名称を変更します。この例ではプロジェクタのON/OFFで利用するので、プロジェクタという名称にしています。

exeノード
execノードを設置し、プロパティでコマンドを設定します。この例では、pythonのスクリプトを実行するためのコマンドを設定しています。

Raspberry Piのネットワーク設定
Node-REDにてポート8111を使用するように設定したため、そのリダイレクトする情報をRaspberry Pi側に設定します。参考にしたURLと無線か有線かオプションが異なるので、読み替えて設定しています。
sudo iptables -I INPUT 1 -p tcp --dport 80 -j ACCEPT
sudo iptables -A PREROUTING -t nat -i wlan0 -p tcp --dport 80 -j REDIRECT --to-port 8111
一度再起動します。
sudo apt-get install iptables-persistent
もし、iptablesを誤ってしまっていた場合は、下記のコマンドで現在の内容を確認します。(このコマンドだけなら、表示されるだけ)
sudo iptable-save
テーブルの実体は/etc/iptables/rules.v4にいる。そのままでは上書きできないので、一度上書き権限を取得してから、上書きし、元に戻す。
cd /etc/iptables
sudo chmod 777 rules.v4
sudo iptables-save > rules.v4
sudo chmod 644 rules.v4
Alexaからのアクセス
スマホのAlexaアプリでデバイスの検出>HUB>その他で検出を実施し。node-REDはPhilipsのスマートライトとして検出されます。先程設定したデバイスの名前で検出できていれば成功です。
echoに指示してraspberry piが認識できます。例では、echoに「プロジェクタをつけて」といって、pythonのスクリプトが実行されます。
ここまでで、echoに言葉をかけると、Raspberry piのpythonプログラムが実行できるようになりました。次はpythonのスクリプトを編集します。
コメント