ThingsBoard / 顧客向け汎用Dashboardの作成・管理
Overview
この記事で権限管理について述べました。Deviceを例に顧客ごとに顧客自身のDeviceしか見ることができないように権限設定しましたが、Dashboardはじめ他のEntityに関しても同じように顧客単位での権限管理ができます。
一方で、「テナントオーナーがDashboardを作成し複数の顧客に展開するが、各顧客は自身のDeviceしか見られない」ようにしたいケースがあると思います。例えば、装置XをCustomerAとCustomerBに提供していて、両Customerに同じDashboardを提供する場合です。
上述の記事の手法で、CustomerA/Bそれぞれに同じDashboardを個別に作って提供することもできますが、顧客の数がNになればN個の同じDashboardを作成することになり、そうなるとメンテナンスが大変になってきますし、ThingsBoard Cloudを使っていればDashboardの数の上限も気になってくるところです。
「テナントオーナーがDashboardを作成し複数の顧客に展開するが、各顧客は自身のDeviceしか見られない」を1つのDashboardで実現する方法を、本稿で示します。
前提
2つのCustomerと、各CustomerにDeviceをひとつずつ用意します。ここではCustomerAにdevice1を、CustomerBにdevice2を用意しました。
Dashboardの作成
まずは空のDashboardをひとつ用意して、CustomerA/Bの両顧客がこれを閲覧できるようにします。
Dashboardの作り方です。左メニューのDashboardsにアクセスし、右上の「+」ボタンで新規作成です。Titleに適当な名前を入力して「Add」で空のDashboardが作成されます。
Dashboardグループの作成
この記事で述べましたが、Entity(今回はDashboard)自体にユーザ権限を紐づけることはできず、Entity Group(今回はDashboard Group)を作成して、Group単位で権限を設定する必要がありました。今回もGroupでの設定が必要になるためDashboardグループを作成します。
Dashboardsの画面から上部のGroupsにアクセスし、同様に「+」ボタンからGroupを作成します。
DashboardグループのCustomerへの共有
作成したDashboardをCustomerに共有します。Dashboardグループで対象のDashboardの「Share」ボタンから共有設定ができます。共有するCustomerを選択して共有します。
設定が終わったらDashboardグループの「Permissions」タブで共有したCustomerの一覧が確認できます。
設定後、共有されたCustomerのユーザでログインし、Dashboards > Shared でさきほど作成したDashboardが確認できればOKです。
Dashboardの中身を作る
Dashboard自体の共有は完了したので、Dashboardの中身を作ります。改めてですが「各顧客は自身のDeviceしか見られない」ようにします。ここではDashboardに各顧客のDeviceの一覧を表示するようなDashboardを作ります。
さきほど作ったDashboardの編集画面に移り、Entities table widgetを追加します。Add widget > Entity widgetsにEntities table widgetがあります。
Entities tableを選択したら設定画面が開きます。
右上に Device or Entity alias を選択する部分があるので、Entity aliasを選択します。Deviceを選択すると特定の1つのDeviceを選択するしかできないのですが、Entity aliasを選択するとグループでの指定などによって複数Deviceを選択できるようになります。
以下の設定を行います。
- Alias nameは適当なもの
- Filter typeには「Entities by group name」を選択
- Typeは「Device」を選択
- Entity group nameには「All」を入力
Filter typeには「Entities by group name」と同じような名前のもの(Group entities、Entity group nameなど)があって紛らわしいですが、間違えないように。
ここでEntity group nameに「All」を指定しています。「Entities by group name」は「グループ名がここで入力したものとマッチしたグループ内のEntity」をすべて取得するオプションです。
各Customer配下に作成されたDeviceは必ず「All」のDeviceグループに紐づけられますが、この「All」はCustomerAのDeviceとCustomerBのDeviceで異なる「All」を指します。図解すると以下です。
ThingsBoard Cloud
├── Customer A
│ └── Device Group
│ └── All ← Customer A の "All"
│ └── device1
├── Customer B
│ └── Device Group
│ └── All ← Customer B の "All"
│ └── device2
└── ...
「Entities by group name」以外のオプションでは、CustomerAの"All"、もしくはCustomerBの"All"どちらか一方しか指定することはできません(おそらく)。
Entity aliasが設定できたら「Apply」で適用します。この段階でEntities tableには何も表示されませんが、保存して終了します。
確認
CustomerAとCustomerBそれぞれのユーザでログインして、「各顧客は自身のDeviceしか見られない」ようなDashboardになっているか確認します。そうなっているはずです。
まとめ
「テナントオーナーがDashboardを作成し複数の顧客に展開するが、各顧客は自身のDeviceしか見られない」ようなDashboardの作成方法について述べました。権限設定と同じく、わかってしまえば設定自体は難しくないと思います。
ThingsBoardはDevice, DashboardなどをEntityとして、これを束ねる上位概念(Group)をあらゆるEntityに適用する設計をすることで、Entity個別の実装を省き、どのEntityに対しても汎用的な機能を提供しているように見えます。ゆえに「いろんなことができる」一方で、「わかりづらさ」にもつながっているのではと思っています。
本記事はDashboardについての解説でしたが、Groupの扱い方に関しても理解が進むはずで、その上位概念が理解できればDashboard以外のEntityについてもわかってくるのでは。ThingsBoard活用の一助になれば幸いです。
Discussion