コンテンツへスキップ

システムオーバービュー

トリガーとアクション、そしてロジック

トリガー

    • 音声コマンド(Google Home / Google Home mini など)
    • 物理ボタンやスマホのボタン押下
    • 時間 (定期的なスケジュール実行など)
    • メール受信
    • ツイッター (特定情報発信者や特定キーワード)
    • 雨が、降ってきた
    • 室温上昇
    • 人感センサー

アクション

    • Google homeより音声発信発信 Notification
    • メール送信
    • ライン送信
    • 家電操作(テレビ、照明、エアコン)
    • パソコン操作

IFTTT(イフト)If This Then That

IFTTT(イフト)とは“if this then that”の略で、「こうなったら(if this)」「こうする(then that)」という 簡単なルール設定で連携させることができます。
  • [こうなったら]:トリガー
  • [こうする]アクション
多くのサービスなりが連携されており、トリガー部分にもアクション部分にも利用できます。詳しい紹介サイト:https://www.atmarkit.co.jp/ait/spv/1711/22/news031.html

ロジックの利便性

IFTTTは基本的にトリガーとアクションが1:1になります。条件判断などにも対応しておりません。1:1アクションには、基本的にIFTTTのレシピで完結するようにします。
Google Homeで標準で対応できない、グーグールホームとNATURE REMO 連携での、テレビのチャンネル変更や音量変更など。
また、一部ロジック定義が出来るサービスもありますが、トリガーもアクションも品不足で、トリガーの一部利用に止まります。
ここでは、一つのトリガーで複数のアクションや時間によって異なるアクションなどを、自宅サーバーで実現します。

全体API連携時のシステムアーキテクチャ

トリガーロジック
home-api on Raspberry Pi
アクション
IFTTT

  • Google Home音声入力
  • Twitter監視
  • メール監視
  • 天気トリガー など

IFTTT以外

  • タスクスケジューラーやCron実行
  • 他WEBサービス
トリガーに対してアクションをキック。

時間判定によるアクション内容変更

複数条件判定によるアクション実施の決定

IFTTT

  • ライン送信
  • メール送信

IFTTT以外

  • Google Home音声発信(google-home-notifier)
  • PC操作
  • 他WEBサービスへのAPI発行(Spotifyなど)

アーキテクチャオーバービュー(Architecture Overview)、IFTTT、LINE、Google Home、Twitter、Nature Remo、Raspberry Pi

実現したいこと

  • Nature Remoに搭載されているセンサ情報の蓄積
  • Nature Remo Cloud APIを用いたPHPからのセンサ情報取得
  • Googleデータポータルでの表示

前提条件

  • Nature Remoの設置が完了している
  • SynologyのDBサーバがセットアップされている(Maria DB)
    DB作成時にphpMyAdminが導入されていると便利です(Synologyパッケージマネージャよりインストール可能です)
  • SynologyでPHPがインストールされていること
  • Synologyの外部公開設定が終わっている (GoogleデータポータルからSynologyのDBへアクセスする場合)
    • DNSで名前解決ができる、固定IPやダイナミックDNSを利用
    • ルーターのNAT / Port Foward / Virtual Serverの設定が出来ており、インタネットからSynologyのMaria DB(デフォルトポート:3307)にアクセスできる

構築手順

Nature Remo API利用時のアクセストークン発行

Nature Remo Cloud APIへアクセスし、OAUTH2認証用のアクセストークンを発行します。APIを利用する際には、HTTPヘッダに以下を指定します。

Authorization: Bearer {TOKEN}

自分のアクセストークンは、home.nature.globalより新規発行します。

Nature Remo Cloud APIのサンプルレスポンス。

[
  {
    "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
    "name": "string",
    "temperature_offset": 0,
    "humidity_offset": 0,
    "created_at": "2019-06-29T01:47:23.111Z",
    "updated_at": "2019-06-29T01:47:23.111Z",
    "firmware_version": "string",
    "mac_address": "string",
    "serial_number": "string",
    "newest_events": {
      "te": {
        "value": 0,
        "created_at": "2019-06-29T01:47:23.111Z"
      },
      "hu": {
        "value": 0,
        "created_at": "2019-06-29T01:47:23.111Z"
      },
      "il": {
        "value": 0,
        "created_at": "2019-06-29T01:47:23.111Z"
      }
    }
  }
]

Maria DBの準備

SynologyのMaria DBで、データ蓄積用のDBとテーブルを作成します。
データ取得時間記録カラムとTE(室温)、HU(湿度)、IL(照度)を格納するカラムを作成します。また、データ蓄積時のユーザーとDB参照用のユーザーを作成しておきます。

NatureRemo蓄積DB構成
NatureRemo室温湿度照度蓄積DBの構成

PHPスクリプトの準備

簡単なスクリプトサンプルを載せておきます。
取得したアクセストークン、設定したDB関係のパラメーターを設定すれば動作すると思います。

<?php
/*************************************************************************
 * home-api (History of Nature Remo Senser)
 * Home Tools for private. Using IFTTT and Google Home etc
 *
 * PHP 5 or later
 *
 * @category  Home IoT
 * @author    Miki
 * @url       https://www.miki-ie.com/
 * @copyright 2019 (c) MIKI-IE All rights Reserved.
 * @license   https://opensource.org/licenses/mit-license.html MIT License
 * @version   1.0
*************************************************************************/
//Nature Remo API情報
$token = '@NatureRemoApiToken@'; // tokenを設定
$header = [
	    'Authorization: Bearer '.$token,  // 前準備で取得したtokenをヘッダに含める
		    'Content-Type: application/json',
		];
$base_url = 'https://api.nature.global/1/';

//DB情報
$host_name = '127.0.0.1:3307'; //DB
$user_name = '@DB_USER@';
$password = '@DB_PASS@';
$database_name ='@DB_NAME@';
$table_name = '@DB_TABLE@';

$mysqli = new mysqli($host_name, $user_name, $password, $database_name);

$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $base_url.'devices');
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'GET');
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); // 証明書の検証を行わない
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_HTTPHEADER, $header);
curl_setopt($curl, CURLOPT_HEADER, true);
$response = curl_exec($curl);

// ステータスコード取得
$code = curl_getinfo($curl, CURLINFO_HTTP_CODE);
echo 'HTTP_CODE:'.$code."\n";
// header & body 取得
$header_size = curl_getinfo($curl, CURLINFO_HEADER_SIZE);
echo 'HEADER_SIZE:'.$header_size."\n";
$header = substr($response, 0, $header_size);
$body = substr($response, $header_size);
$result = json_decode($body, true);

echo 'te: '.$result[0]["newest_events"]["te"]["val"]."\n";
echo 'hu: '.$result[0]["newest_events"]["hu"]["val"]."\n";
echo 'il: '.$result[0]["newest_events"]["il"]["val"]."\n";

$te = $result[0]["newest_events"]["te"]["val"]."\n";
$hu = $result[0]["newest_events"]["hu"]["val"]."\n";
$il = $result[0]["newest_events"]["il"]["val"]."\n";
$datetime = date("Y/m/d H:i:s");

curl_close($curl);

// SQL(INSERT)を作成
$sql = "INSERT INTO $table_name (
	DATETIME, TE, HU, IL
	) VALUES (
	'$datetime', $te, $hu, $il
		)";
echo $sql."\n";

$mysqli->query($sql);
$mysqli->close();

?>

コマンドラインより動作確認します。定期実行を設定する際にフルパスで実行指定をしたいので、動作確認もフルパス指定で実行確認を行います。
「/usr/local/bin/php72 /var/services/homes/php/Remo.php」
phpMyAdminなどで、登録されたレコードを確認することもおすすめします。

@Synology:~$ /usr/local/bin/php72 /var/services/homes/php/Remo.php
HTTP_CODE:200
HEADER_SIZE:574
te: 24.6
hu: 60
il: 249.39
INSERT INTO living (
	DATETIME, TE, HU, IL
	) VALUES (
	'2019/06/29 11:01:46', 24.6
, 60
, 249.39

		)
@Synology:~$

スクリプトの定期実行登録

Synologyのタスク スケジューラーでスクリプトの定期実行を登録します。

Googleデータポータル(データスタジオ)

Googleデータポータル

Googleデータポータルにアクセスし、レポートを作成します。

  1. データソース追加。GoogleコネクタのMySQLを選択し、接続情報を登録しSynologyのDBとの接続設定を行います。
  2. レポートやData Studio Explorer (Labs)を用いて、Viewを作成します。

以下にGit Hubのgistへ登録したソースコードも載せておきます。

Webサイトは常時SSLが必須となってきました。
しかも、簡単なSSL証明書は、無料で簡単に作成できるようになりました。Synology無料SSL証明書導入

httpからhttpsへのリダイレクト(転送)

「https://www.miki-ie.com」で運用してきたWebサイトを、「https://www.miki-ie.com」に転送します。
httpでWEBアクセスした場合が、暗号化なしでWEBアクセスをした場合となり、
httpsでWEBアクセスした場合は、インターネット通信がSSL証明書(SSL/TLSでの暗号化)により暗号化された通信となります。
一昔前は、WEBショッピングや会員サイトなど、個人情報などを扱う、機密性のあるサイトのみが利用していました。
特にSSL証明書は、年間数万のコストが発生していました。

利用しているサーバーをSSL化したとしても、今までの運用によって、
既に登録されたブックマークやほかサイトからのリンクや、Google等の検索エンジンからはhttp経由の古いURLにアクセスされる可能性があります。
検索エンジンの検索結果(検索順位)において、不利な場合もあるので、すべてのサイトアクセスをSSL経由に統一する設定は実施しておきたい内容です。

www無しからwww有りへのリダイレクト(転送)

「https://www.miki-ie.com」でアクセスしてきたWEBサイトを、「https://www.miki-ie.com」に転送します。
サイト運営時に、特に意識してURLを統一していても、他サイトから被リンクを受けた場合などは、
他サイトオーナー様のリンク作成方法に依存してしまうので、
www無しのURLアクセスも、www有りのURLアクセスへ自サーバーで転送する設定をおすすめします。
(www無し、有りは好みとなります。どちらかに統一できれば良いと思います)
このURL不統一も検索エンジンの検索結果(検索順位)に影響する場合があります。運用するURLアドレスの統一は是非実施しておきたい内容です。

URL転送設定「mod_rewrite」

URL転送には、Apache(Webサーバー)の、mod_rewriteという機能を使い転送を行います。
今回は下記の転送を設定します。

転送対象のURL

  1. https://www.miki-ie.com
  2. https://www.miki-ie.com
  3. https://www.miki-ie.com

転送先のURL

  1. https://www.miki-ie.com

通常WEBサーバのWEBコンテンツを公開しているフォルダーのトップページに
「.htaccess」ファイルを作成する方法で設定します。
その他、phpでプログラム的に実現や、同様の設定内容をhttpd.confなどWEBサーバ自体の設定で実現することも可能です。

.htaccessファイル編集

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
 
# httpからhttpsへのリダイレクト(転送)
RewriteCond %{HTTPS} off
RewriteRule ^(.*$) https://www.miki-ie.com/$1 [R=301,L]

# www無しからwww有りへのリダイレクト(転送)
RewriteCond %{HTTPS} on
RewriteCond %{HTTP_HOST} ^miki-ie.com$
RewriteRule ^(.*)$ https://www.miki-ie.com/$1 [R=301,L]

www無しからwww有りへのリダイレクト(転送)の記載方法ですが、
すべてwww有りでアクセスさせたいので、以下の記載方法が個人的には好きです。
www無しやwww以外(ftp, mail, nsなど)からのアクセスをhttps://www.へリダイレクト(転送)
ただ、Virtual Serverで運用している場合には、既にwwwありのみホームページが表示される設定かもしれません。
(Virtual Server設定で、「https://www.miki-ie.com」アクセスを設定した公開フォルダ(「/volume1/web/wordpress」など)とマッピング。)

転送対象のURLを拡大(RewriteCond %{HTTP_HOST} !^www.)

  1. https://www.miki-ie.com
  2. https://www.miki-ie.com
  3. https://www.miki-ie.com
  4. http://www2.miki-ie.com
  5. https://ns.miki-ie.com
  6. https://hogehoge.miki-ie.com
    などなど

# www以外からwww有りへのリダイレクト(転送)

# www以外からwww有りへのリダイレクト(転送)
RewriteCond %{HTTPS} on
RewriteCond %{HTTP_HOST} !^www.
RewriteRule ^(.*)$ https://www.miki-ie.com/$1 [R=301,L]

変更前「.htaccess」

@Synology$ cat /volume1/web/wordpress/.htaccess
# Synology PHP
AddHandler default-handler .htm .html .shtml
AddHandler php-fastcgi .php
AddType text/html .php
Action php-fastcgi /php56-fpm-handler.fcgi
# Synology PHP

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

変更後「.htaccess」

@Synology$ cat /volume1/web/wordpress/.htaccess
# Synology PHP
AddHandler default-handler .htm .html .shtml
AddHandler php-fastcgi .php
AddType text/html .php
Action php-fastcgi /php56-fpm-handler.fcgi
# Synology PHP

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]

# httpからhttpsへのリダイレクト(転送)
RewriteCond %{HTTPS} off
RewriteRule ^(.*$) https://www.miki-ie.com/$1 [R=301,L]

# www以外からwww有りへのリダイレクト(転送)
RewriteCond %{HTTPS} on
RewriteCond %{HTTP_HOST} !^www.
RewriteRule ^(.*)$ https://www.miki-ie.com/$1 [R=301,L]

</IfModule>

# END WordPress


 



Let's EncryptSynologyのWEBサーバを用いると、管理画面より簡単に無料のSSL証明書が利用出来ます。3ヶ月有効な証明書を発行し、利用を継続している限り、自動更新してくれます。

前提条件

  • SynologyのWEBサーバがセットアップされている
  • SynologyのWEBサーバの公開設定が終わっている
    証明書発行時に、設定が完了していないと失敗します

    • DNSで名前解決ができる、固定IPやダイナミックDNSを利用
    • ルーターのNAT / Port Foward / Virtual Serverの設定が出来ており、インタネットからWEBサーバにアクセスできる

SSL証明書導入

企業サイトは、ほぼ100%SSL化(https://)でのWEBサイト公開になってきています。SSL証明書を導入することで、SSL / TLSで暗号化された通信が行われます。当然、セキュリティやプライバシー的に非常に重要な技術となります。
Google社の最近の取り組みを少し纏めておきます。SSL化されていないサイトには警告が出される時代となってきました。

Let's Encrypt導入(無料で利用可能なSSL証明書)

「Let's Encrypt」という、無料で利用できる SSL / TLS サーバー証明書があります。以前は、商用利用を前提とした証明書を利用するか、自分で個人的に発行する証明書(自己認証局)を利用するしかhttpsのウェブサイトは運営できませんでした。自宅サーバーなどでは、自己認証局の証明書を利用しておりましたが、ブラウザからは警告が出たりと通信は暗号化出来るが、スマートなWEB公開方法ではありませんでした。

「Let's Encrypt」が登場したのですが、コマンドラインを複数実行したり、WEBサーバーの設定を変更したりと、導入の敷居は低くはなかったです。
Synologyでは、このSSL証明書が複数の手順で簡単に利用可能となります。

Let's Encrypt 総合ポータル

Synologyでの無料SSL証明書(Let's Encrypt)導入方法

Synology画面の「コントロールパネル」「セキュリティ」を開きます。

証明書タブより新しい証明書を追加します。

新規証明書のタイプでLet's Encryptを選択します。

証明書情報を登録します。

サブドメインを利用する際は、サブジェクトの別名に登録します。残念ながら、記事掲載時点では、サブドメインすべて(*:アスタリスクには対応していませんでした)
「適用」ボタンを押すと、証明書の発行依頼、受領を実行してくれます。

発行した証明書のWEBサイトへ割り当て

証明書画面の「構成」ボタンを押し、WEBサイトに発行した証明書の割り当てを行います。複数のVirtual Hostを運用している際には、大変便利な機能になります。
この設定により、WEBサーバの設定も自動的に実施されるので、追加の設定などはありません。
記事の先頭にも記載しましたが、証明書は自動更新されるので、基本的にメンテナンスフリーで利用出来ます。

前提条件

  • SynologyのWEBサーバがセットアップされている(Apach HTTP Server)
    Wordpressリンク設定(パーマリンクの設定を.htaccessで設定する必要があり、NginxでなくApache HTTPを利用しました)
  • SynologyのDBサーバがセットアップされている(Maria DB)
  • SynologyのWEBサーバの公開設定が終わっている
    • DNSで名前解決ができる、固定IPやダイナミックDNSを利用
    • ルーターのNAT / Port Foward / Virtual Serverの設定が出来ており、インタネットからWEBサーバにアクセスできる

WordPressインストール

WEBサーバーの設定確認

Synologyの管理画面より「Web Station」「PHP」設定を確認します。
各種拡張機能がインストールされている(チェックボックスにチェックが入っている)を確認します。

WordPressをインストール

SynologyパッケージセンターよりWordpressをインストールします。
インストール後、「開く」ボタンよりWordpressへアクセスし、初期設定を行います。

SynologyからWordpressパッケージをインストール

Virtual Serverを設定

SynologyのWordpressインストールでは、/wordpressにインストールされます。

  • Synology内フォルダ「web/wordpress」にインストール
  • WEBアクセス時のURL「miki-ie.com/wordpress」となります

URLトップ(www.miki-ie.com)でアクセスさせたい場合は、SynologyのVirtual Server設定で、アクセスURLとSynology内フォルダ(ドキュメントルート)の設定を行います。
以下の例では、「miki-ie.com」「www.miki-ie.com」へアクセスした場合に、Wordpressがインスールされたドキュメントルートを指定します。

WordPressパーマリンク設定とApacheサーバー「.htaccess」修正

SynologyでWordpressをインストールすると、自動的にWordpressをインストールした際に「.htaccess」ファイルが作成されます。
Virtual Server設定でURLトップページでWordpressへアクセス出来るようにしたので、「.htaccess」ファイルの設定変更しなければ、Wordpressのパーマリンク設定が利用出来ません。
基本の?P=123でのURLアクセスのみページ表示されます。
検索エンジンの検索結果などで有利になるようには、パーマリンク設定が推奨されます。(SEO対策)
Wordpressパーマリンク

原因は、「/wordpress」のインストールフォルダに対して「/」のトップフォルダーアクセスに修正したことが原因であり、.htacessファイルを以下のように修正します。

@Synology:~$ cat /volume1/web/wordpress/.htaccess

# Synology PHP
AddHandler default-handler .htm .html .shtml
AddHandler php-fastcgi .php
AddType text/html .php
Action php-fastcgi /php56-fpm-handler.fcgi
# Synology PHP

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

# END WordPress

 

前提条件

「google-home-notifier」利用に向けて、Raspberry PiへNode.jsとnpmをインストールします。 参考ページ

@raspberrypi:~/google-home-notifier $ node -v
v10.16.0
@raspberrypi:~/google-home-notifier $ node npm -v
6.9.0

参考にさせていただいたページです。

GoogleHomeスピーカーに外部からプッシュして自発的に話してもらいます
Google Home に任意のテキストを喋らせる
GitHub-google-home-notifier
google-home-notifierで"Error: get key failed from google"とエラーが出る問題の対処法

google-home-notifierインストール

@raspberrypi $ curl -sL https://deb.nodesource.com/setup_7.x | sudo -E bash -
@raspberrypi$ sudo apt-get install nodejs
@raspberrypi $ sudo apt-get install git-core libnss-mdns libavahi-compat-libdnssd-dev
@raspberrypi$ git clone https://github.com/noelportugal/google-home-notifier
@raspberrypi $ cd google-home-notifier/
@raspberrypi $ npm install

GoogleTTSの仕様変更対応

GoogleTTSの新バージョンがリリースされており、このままでは、うまく動作しません。仕様変更により、今まで利用していたユーザーも利用できなくなり、関連する記事がWEBに複数出ておりました。
Error: get key failed from google
at /home/user/google-home-notifier/node_modules/google-tts-api/lib/key.js:23:23
at process._tickCallback (internal/process/next_tick.js:68:7)

package.jsonのバージョン情報を変更。(0.0.2から0.0.4に変更)

"keywords": [
"google home",
"notifications",
"notifier"
],
"license": "MIT",
"dependencies": {
"body-parser": "^1.15.2",
"castv2-client": "^1.1.2",
"express": "^4.14.0",
"google-tts-api": "0.0.4",// ここを0.0.4に書き換える
"mdns": "^2.3.3",
"ngrok": "^2.2.4"
},

pakage.jason変更後に、google-tts-apiのアップデートを実施。

@raspberrypi:~/google-home-notifier $ npm update google-tts-api

Webhook(WEBリクエスト)形式での運用準備

google-home-notifierフォルダにあるexample.jsを流用して、以下の形式でのリクエストによりGoogleホームより音声出力を実現します。以下のコマンドで、WEBアクセスの待ち状態となります。

node.js example.js

Endpoints:
http://192.168.xxx.xxx:9081/google-home-notifier
GET example:
curl -X GET http://192.168.xxx.xxx:9081/google-home-notifier?text=Hello+Google+Home
POST example:
curl -X POST -d "text=Hello Google Home" http://192.168.xxx.xxx:9081/google-home-notifier

起動時に以下のWARNINGが出るのですが、ほかの方もWARNINGが出たまま運用しているようです。(WARNINGを消す情報は見つけられませんでした)

*** WARNING *** The program 'node' uses the Apple Bonjour compatibility layer of Avahi.
*** WARNING *** Please fix your application to use the native API of Avahi!
*** WARNING *** For more information see <http://0pointer.de/blog/projects/avahi-compat.html>
*** WARNING *** The program 'node' called 'DNSServiceRegister()' which is not supported (or only supported partially) in the Apple Bonjour compatibility layer of Avahi.
*** WARNING *** Please fix your application to use the native API of Avahi!
*** WARNING *** For more information see <http://0pointer.de/blog/projects/avahi-compat.html>Endpoints:

それでは設定です。google-home-notifierフォルダにあるexample.jsの言語設定を2か所変更します。

var language = 'ja'; // default language code

後は、Google HomeのIPアドレスと、WEBアクセスを受けるポートをexample.jsに設定します。

今回は3台分のGoogle Home Miniを運用したいので、example.jsを3個コピーして、3個のスクリプトを起動する方式にしました。

  • Google-Home-1:192.168.xxx.81:ポート番号9081
    http://192.168.xxx.xxx:9081/google-home-notifier?text=Hello+Google+Home
  • Google-Home-2:192.168.xxx.82:ポート番号9082
    http://192.168.xxx.xxx:9082/google-home-notifier?text=Hello+Google+Home
  • Google-Home3:192.168.xxx.83:ポート番号9083
    http://192.168.xxx.xxx:9083/google-home-notifier?text=Hello+Google+Home

forever導入による常時起動化とサーバー再起動時の自動起動

【Node.js入門】foreverの使い方とデーモン化による永続化・自動起動まとめ!
Node.js製のアプリをforeverで永続化する

foreverモジュールの導入方法

@raspberrypi:~/google-home-notifier $ sudo npm install -g forever

起動時のコマンドは、以下となります。

/usr/local/bin/forever start /home/user/google-home-notifier/google-home-1.js

再起動時にスクリプトが自動起動するようにクーロン登録します。

@raspberrypi:~/google-home-notifier $ crontab -e

以下を登録します。

@reboot /usr/local/bin/forever start /home/user/google-home-notifier/google-home-1.js
@reboot /usr/local/bin/forever start /home/user/google-home-notifier/google-home-2.js
@reboot /usr/local/bin/forever start /home/user/google-home-notifier/google-home-3.js

以上、上手く行ったら良いですね。
時間があれば、HOYAのVoiceText Web APIを利用する方法へ変更する予定です。

【うまく動作しなかった際に、実行したコマンドです】

@raspberrypi:~ $ sudo npm install -g npm
@raspberrypi:~/google-home-notifier $ npm update

「google-home-notifier」利用に向けて、Raspberry PiへNode.jsとnpmをインストールします。

利用環境

  • NOOBS:Offline and network install、Version:3.1.1、Release date:2019-06-24
  • Raspberry Pi 3 Model B+:1.4GHz 64-bit quad-core processor

インストール

@raspberrypi $ npm -v
-bash: npm: コマンドが見つかりません
@raspberrypi $ sudo apt-get update
@raspberrypi $ sudo apt-get install -y nodejs npm
@raspberrypi $ sudo npm cache clean
@raspberrypi $ sudo n stable
@raspberrypi $ sudo npm install npm n -g
@raspberrypi $ npm -v6.9.0

Google Home Notifier導入準備完了

「google-home-notifier」利用に向けて、Raspberry PiへNode.jsとnpmをインストールが完了しました。

ネットワーク概要図

V6プラス

「v6プラス」は、IPv6で次世代ネットワーク(NGN)に直結し、インターネットプロバイダへ接続し、インターネットプロバイダよりIPv6とIPv4のインターネット網に接続します。
IPv6経由でインターネットに接続するので、インターネットに出る際に、混み合っているIPv4網を回避できます。
現状、プロバイダがv6プラスや光プラスと呼ばれるサービスを提供している際は、通常のインターネットアクセスには、積極的にv6プラス接続を利用するのがベストです。
一方で、v6プラスを利用すると自宅のルータにIPv4のIPアドレスが割り当てられず、IPv4を前提としたNAT・バーチャルサーバ(Virtual Server)機能が利用出来ません。

V6プラスとPPoE接続の共存環境

そこで、ルーター2台構成を実現します。
V6プラス対応ルータと、通常のIPv4でのPPoEが可能なルータを準備します。
それぞれからインターネット接続を確立させます。
(利用するプラバイダにより利用可否が異なるかもしれません。利用したNIFTYでは、サポートからも技術的に問題ないと回答を頂きました)

また、2つのルーター間をローカルネットワーク内で接続し、双方同じネットワーク空間に配置します。
インターネットゲートウェイが2つある環境となります。

V6プラスとPPoE接続の共存時の運用

ネットワーク構成2

  • V6プラス対応ルータ経由(GW 192.168.1.1/24):スマートフォン、一般クライアントなど外部公開の必要ない機器
  • PPoE対応ルーター(GW 192.168.1.2/24):WEBサーバーなど(SynologyのNASおよびRaspberry Pi)