IoTと設備制御を現実的にやろうとするときに直面するのは、実際に客先に納入したときの【使い勝手】をどこまで実現できるかというところ。
自分が研究・開発レベルでやるのであれば、Node-REDのInjectionノードでも十分ですが、それでは納品物としていけてません。
一方、最近ではPHPのフレームワークであるLaravelとVue.jsを使って、システムの裏側もユーザーが操作する表側も、かなりいけてるものをつくることができます。
また、Googleの提供しているFirebaseというサービスは、現場で利用されている設備制御のゲートウェイとクラウド側とをVPNを使うことなく、シームレスにつかうことができます。
一方、このFirebaseはLaravelでもつかう情報がWEB上でいろいろ見つけることができます。
今回、Firebaseを仲介として、バックエンドとフロントエンドで使いやすいLaravel+Vue.jsを使いIoT機器や設備制御をおこなうためのシステムをつくりたいとおもうので、まずは、LaravelとFirebaseのチュートリアルをしたいと思います。
やってみたのは、↓こちらのチュートリアルです。
Laravel Firebase Tutorial
Laravelのインストール
Tutorialと同じLaravel 5.6をインストールします。
composer create-project "laravel/laravel=5.6.*" laravelfirebase
Composerでfireabaseの依存ファイルをインストール
Laravelをインストールしたフォルダに移動。
$ cd laravelfirebase
Composerでfireabaseの依存ファイルをインストールします。
composer require kreait/firebase-php ^4.0
Firebaseのセットアップ
![Firebase_console.jpg Firebase console](https://digital-light.jp/wp-content/uploads/2018/09/Firebase_console.jpg)
Firebaseのアカウントはつくってあったので、新しくプロジェクトを追加します。
![Firebase_console.jpg Firebase console](https://digital-light.jp/wp-content/uploads/2018/09/Firebase_console-1.jpg)
とりあえず、こんなふうに作成。
![Firebase_console.jpg Firebase console](https://digital-light.jp/wp-content/uploads/2018/09/Firebase_console-2.jpg)
プロジェクトできました。
![laravelfirebase_–_概要_–_Firebase_console.jpg Laravelfirebase 概要 Firebase console](https://digital-light.jp/wp-content/uploads/2018/09/cd13bf237dd0c4828b73d97f33c04b59.jpg)
Databaseのところをクリックします。
![laravelfirebase001.jpg Laravelfirebase001](https://digital-light.jp/wp-content/uploads/2018/09/laravelfirebase001.jpg)
「データベースの作成」をクリック
![laravelfirebase_–_Database_–_Firebase_console.jpg Laravelfirebase Database Firebase console](https://digital-light.jp/wp-content/uploads/2018/09/6f665c7a8f4800865f998067ac4dc055.jpg)
Cloud Firestoreセキュリティルールを設定。
![laravelfirebase_–_Database_–_Firebase_console.jpg Laravelfirebase Database Firebase console](https://digital-light.jp/wp-content/uploads/2018/09/6f665c7a8f4800865f998067ac4dc055-1.jpg)
データベースができました。
![laravelfirebase_–_Database_–_Firebase_console.jpg Laravelfirebase Database Firebase console](https://digital-light.jp/wp-content/uploads/2018/09/6f665c7a8f4800865f998067ac4dc055-2.jpg)
“Cloud Firestore”のとこをクリックして、REaltime Databaseを選びます。
![laravelfirebase_–_Database_–_Firebase_console.jpg Laravelfirebase Database Firebase console](https://digital-light.jp/wp-content/uploads/2018/09/6f665c7a8f4800865f998067ac4dc055-3.jpg)
ルールのタブをクリック。表示されるjsonファイルのfalseをtrueにします。
![laravelfirebase_–_Database_–_Firebase_console.jpg Laravelfirebase Database Firebase console](https://digital-light.jp/wp-content/uploads/2018/09/6f665c7a8f4800865f998067ac4dc055-4.jpg)
公開ボタンを押します。
API Keyの作成
![laravelfirebase_–_設定_–_Firebase_console.jpg Laravelfirebase 設定 Firebase console](https://digital-light.jp/wp-content/uploads/2018/09/928702b8f69ce84d552b511a43b91f1a-1.jpg)
Project Overviewの横の歯車から「プロジェクトの設定」をクリック。さらに「サービスアカウント」をクリックすると、Firebase Admin SDKが表示される。Admin SDKスニペットからNode.jsを選択し表示されるコードをコピーする。
* この後のjsonファイル名をどうやってきめているのかわからないかったのですが、Facebookのlaravel.jpにて下記のサイトを教えていただきました。
![laravelfirebase_–_設定_–_Firebase_console.jpg Laravelfirebase 設定 Firebase console](https://digital-light.jp/wp-content/uploads/2018/09/928702b8f69ce84d552b511a43b91f1a-2.jpg)
権限を管理をクリック
![IAM_–_IAM_と管理_–_laravelfirebase_–_Google_Cloud_Platform.jpg IAM IAM と管理 laravelfirebase Google Cloud Platform](https://digital-light.jp/wp-content/uploads/2018/09/df1d5caf46057957de50583c24f0e0c8.jpg)
左にあるサービスアカウントをクリック
![サービス_アカウント_–_IAM_と管理_–_laravelfirebase_–_Google_Cloud_Platform_と_Preview_of_“FirebaseとLaravel”.jpg サービス アカウント IAM と管理 laravelfirebase Google Cloud Platform と Preview of FirebaseとLaravel](https://digital-light.jp/wp-content/uploads/2018/09/28330e628892020e9b992322b1e99d50.jpg)
![サービス_アカウント_–_IAM_と管理_–_laravelfirebase_–_Google_Cloud_Platform_と_Preview_of_“FirebaseとLaravel”.jpg サービス アカウント IAM と管理 laravelfirebase Google Cloud Platform と Preview of FirebaseとLaravel](https://digital-light.jp/wp-content/uploads/2018/09/28330e628892020e9b992322b1e99d50-1.jpg)
鍵を作成
![サービス_アカウント_–_IAM_と管理_–_laravelfirebase_–_Google_Cloud_Platform.jpg サービス アカウント IAM と管理 laravelfirebase Google Cloud Platform](https://digital-light.jp/wp-content/uploads/2018/09/b545bd64fdf5e1456a3a815971db7ff2.jpg)
キーのタイプはJSONにします。
![サービス_アカウント_–_IAM_と管理_–_laravelfirebase_–_Google_Cloud_Platform.jpg サービス アカウント IAM と管理 laravelfirebase Google Cloud Platform](https://digital-light.jp/wp-content/uploads/2018/09/b545bd64fdf5e1456a3a815971db7ff2-1.jpg)
鍵ができました。自動的にダウンロードされるのでダウンロードフォルダをチェックします。
このjsonファイルを、Laravelのapp/http/Controllerのフォルダに保存します。
FirebaseControllerを作成
php artisanでコントローラーを作ります。
$ php artisan make:controller FirebaseController --resource
で、FirebaseController.phpのindexメソッドに
public function index() { $serviceAccount = ServiceAccount::fromJsonFile(__DIR__.'/鍵のjsonファイル'); $firebase = (new Factory) ->withServiceAccount($serviceAccount) ->withDatabaseUri('FrebaseおデータベースURL') ->create(); $database = $firebase->getDatabase(); $newPost = $database ->getReference('blog/posts') ->push([ 'title' => 'Laravel FireBase Tutorial' , 'category' => 'Laravel' ]); echo '<pre>'; print_r($newPost->getvalue()); }
このあと、web.phpでrouteを編集します。
Route::get(‘firebase’, ‘FirebaseController@index’);
では、php artisan serveでLaravelを起動。
http://localhost:8000/firebase
にアクセスすると
![localhost_8000_firebase_と_楽天銀行(旧イーバンク銀行)|ネットバンク.jpg Localhost 8000 firebase と 楽天銀行 旧イーバンク銀行 |ネットバンク](https://digital-light.jp/wp-content/uploads/2018/09/114ec9abaa4e7a322b7b0af9fd307723.jpg)
ブラウザでこのように表示されました。
これが、クラウドにあるFirebaseのデータベースに格納されているはずです。
![laravelfirebase_–_Database_–_Firebase_console.jpg Laravelfirebase Database Firebase console](https://digital-light.jp/wp-content/uploads/2018/09/6f665c7a8f4800865f998067ac4dc055-6.jpg)
データベースをみてみると、FirebaseControllerのindexメソッドに記載して、さきほど、http://localhost:8000/firebaseで表示された内容がFirebaseのデータベースに格納されました。
まとめ
以上で、LaravelからFirebaseと連携させる方法の検証ができました。
設備制御を行う場合、ローカルのRasPiで動かしたNode-REDからTCP出力/入力ノードを使って設備制御(DALI/KNX)のゲートウェイへ設備制御のための信号の受け渡しをおこなうのですが、Node-REDにはFirebaseノードもあるので、LaravelとFirebaseがつながるということは、サーバーで動かしているLaravelとローカルでうごかしているNode-REDがFirebaseを介してつながることになります。
設備制御の場合、どうしても実用要素の方が優先度合いが強いので、今どきのおしゃれなUXとかUIの実装まではなかなかコストを割くことができないのが実情です。
でも、ここにLaravel+Vue.jsを活用できれば、ぐぐっとそのハードルが下がります。(おしゃれなUX・UI自体を考えるのは難しいのはおいておいて)
個人的にNode.jsは経験値がほとんどないので不安だらけですが、アプリケーション部分もLaravelが使えるとお客さんからなにか要望受けても「きっとなんとかなる」と楽観的になれる気がします。
ということで、Laravel+Firebaseの検証はできたので、次は、Firebase+ DALI/KNXの記事を書きたいと思います。