Laravel

FirebaseとLaravelの連携検証してその先のDALI-KNXを目指す

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

Firebaseのアカウントはつくってあったので、新しくプロジェクトを追加します。

Firebase console

とりあえず、こんなふうに作成。

Firebase console

プロジェクトできました。

Laravelfirebase 概要 Firebase console

Databaseのところをクリックします。

Laravelfirebase001

「データベースの作成」をクリック

Laravelfirebase Database Firebase console

Cloud Firestoreセキュリティルールを設定。

Laravelfirebase Database Firebase console

データベースができました。

Laravelfirebase Database Firebase console

“Cloud Firestore”のとこをクリックして、REaltime Databaseを選びます。

Laravelfirebase Database Firebase console

ルールのタブをクリック。表示されるjsonファイルのfalseをtrueにします。

Laravelfirebase Database Firebase console

公開ボタンを押します。

API Keyの作成

Laravelfirebase 設定 Firebase console

Project Overviewの横の歯車から「プロジェクトの設定」をクリック。さらに「サービスアカウント」をクリックすると、Firebase Admin SDKが表示される。Admin SDKスニペットからNode.jsを選択し表示されるコードをコピーする。

* この後のjsonファイル名をどうやってきめているのかわからないかったのですが、Facebookのlaravel.jpにて下記のサイトを教えていただきました。

Laravelのテスト環境をFirebaseで運用する方法

Laravelfirebase 設定 Firebase console

権限を管理をクリック

IAM IAM と管理 laravelfirebase Google Cloud Platform

左にあるサービスアカウントをクリック

サービス アカウント IAM と管理 laravelfirebase Google Cloud Platform と Preview of FirebaseとLaravel サービス アカウント IAM と管理 laravelfirebase Google Cloud Platform と Preview of FirebaseとLaravel

鍵を作成

サービス アカウント IAM と管理 laravelfirebase Google Cloud Platform

キーのタイプはJSONにします。

サービス アカウント IAM と管理 laravelfirebase Google Cloud Platform

鍵ができました。自動的にダウンロードされるのでダウンロードフォルダをチェックします。

この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 と 楽天銀行 旧イーバンク銀行 |ネットバンク

ブラウザでこのように表示されました。

これが、クラウドにあるFirebaseのデータベースに格納されているはずです。

Laravelfirebase Database Firebase console

データベースをみてみると、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の記事を書きたいと思います。

ABOUT ME
中畑 隆拓
スマートライト㈱ 代表取締役。IoTソリューションの開発、スマートホーム&オフィスのコンサルティング、DALI,KNX,EnOceanなどのインテグレーションを行っています。

COMMENT

メールアドレスが公開されることはありません。 が付いている欄は必須項目です