Upgrade to Pro — share decks privately, control downloads, hide ads and more …

スマートシティ基盤FIWAREをNode-REDで使う

KIKUCHI Shunsuke
February 08, 2022

 スマートシティ基盤FIWAREをNode-REDで使う

本資料は、Node-RED UG Enterprise「企業でのNode-RED事例紹介 第2回」での講演資料です。
https://node-red.connpass.com/event/234084/

スマートシティの実装に利用可能なフレームワークであり、OSSでもあるFIWAREの概要と、FIWAREに準拠した形でIoTデータを登録公開しそれをNode-REDで読み書き・可視化する方法について、説明しています。

KIKUCHI Shunsuke

February 08, 2022
Tweet

More Decks by KIKUCHI Shunsuke

Other Decks in Research

Transcript

  1. スマートシティ基盤FIWAREを Node-REDで使う Node-RED UG Enterprise 「企業でのNode-RED事例紹介 第2回」 2022.02/08 (C) Copyright

    1996-2022 SAKURA Internet Inc さくらインターネット研究所 上級研究員 菊地 俊介 さくらインターネット株式会社
  2. 話者紹介 2 菊地 俊介 (東京都出⾝) 所属 さくらインターネット研究所 学歴 早稲⽥⼤学⼤学院 理⼯学研究科

    電⼦・情報通信学専攻 修⼠課程修了 早稲⽥⼤学⼤学院 国際情報通信研究科 博⼠課程単位取得退学 職歴 富⼠通(株)富⼠通研究所に就職 ネットの研究やったり、SEやったり、NICTに出向したり、 トイレIoT作ったり さくらインターネットに転職 データ流通(FIWARE, NGSI)、OpenFogコンソーシアム(標準化)、 量⼦(アニーリング)コンピュータ、 AR/VR、RISC-V、Erlang/Elixir 専⾨ エッジ・Fogコンピューティング(分散系システムのあたり) ビジョナリーとして技術・社会、会社の将来を思い描く 新規領域調査、PoC実施、社内適⽤コンサル、講師・講演 趣味 新技術調査、読書、最近はガンプラ作り @kikuzokikuzo https://note.mu/kikuzokikuzo https://www.facebook.com /kikuzokikuzo
  3. この資料について • 都市OSとも⾔われるスマートシティ向けOSS、FIWAREの概要 と、FIWARE(の型式に準拠したデータ)をNode-REDで取り 扱う⽅法についてご紹介します。 • レベル︓⼊⾨編 • 対象者︓データ流通やスマートシティに興味のある⽅ •

    前提知識︓Node-RED(とはなにか)を知っている • 資料構成 • スマートシティ向けOSS、FIWARE(ファイウェア)って︖ • FIWAREのデータをNode-REDで取り扱う • できること紹介 - データの読み出し、可視化 • 環境構築⽅法 3
  4. スマートシティとは︖ スマートシティ︓技術で都市を効率化すること︖ 6 スマートシティは、先進的技術の活⽤により、都市や地域の機能やサービス を効率化・⾼度化し、各種の課題の解決を図るとともに、快適性や利便性を 含めた新たな価値を創出する取組であり、Society 5.0の先⾏的な実現の場 といえます。 スマートシティ官⺠連携プラットフォーム(国⼟交通省) https://www.mlit.go.jp/scpf/

    スマートシティ(Smart City)とは (IoT News) https://iotnews.jp/archives/1218 スマートシティとは、IoT(Internet of Things︓モノのインターネット) の先端技術を⽤いて、基礎インフラと⽣活インフラ・サービスを効率的に管 理・運営し、環境に配慮しながら、⼈々の⽣活の質を⾼め、継続的な経済発 展を⽬的とした新しい都市のことだ。 スマートシティとは、どのような概念の取り組みなのでしょうか。国⼟交 通省は「都市が抱える諸問題に対して、ICT等の新技術を活⽤しつつ、マネ ジメント(計画・整備・管理・運営)が⾏われ、全体最適化が図られる持 続可能な都市または地区」と定義しています。 スマートシティとは︖⼀⼈ひとりの⽣活様式にあった持続可能な都市づくり (NEC business leaders square wisdom) https://wisdom.nec.com/ja/feature/smartcity/2021011501/index.html (強調は本資料著者による)
  5. 都市OS → FIWARE • 同じようなシステムを重複開発したくない • 相互接続を実現したい • ソフトウェア部品(アプリ・サービス)を使い回したい •

    知⾒・ノウハウを共有したい 8 都市OSという概念を共通基盤システムとして実装 それがFIWARE(ファイウェア) 共通基盤 OS OS OS 共通基盤 共通基盤 FIWARE(ファイウェア) • 共通プラットフォーム • 標準API、プロトコル • 標準データモデル • サービス部品 アプリ サービス アプリ サービス アプリ サービス
  6. FIWAREの概要 FIWARE : スマートソリューションの開発促進のための オープンソースプラットフォーム部品群のフレームワーク 9 https://www.fiware.org/developers/catalogue/ (同時に、それを開発・推進する組織(FIWARE Foundation)の名前でもある) データを交換する基盤となる

    コンテキストブローカー (サーバ) 様々な(IoT)デバイス等と データをやり取りするための インターフェース部品 データを蓄積・分析・可視化 するサービス部品 https://www.fiware.org/
  7. FIWAREによるスマートシティ システム構築 • データをやり取りする中⼼となるコンテキストブローカーを⽴てる • IoTデバイスや他のサービスとデータをやり取り(変換)するインタフェー ス部品を動かす • データを利⽤する(蓄積・可視化・分析)アプリケーションを動かす •

    データのやり取りには標準プロトコルNGSI :Next Generation Service Interfaces を利⽤する • データの表現(セマンティクス)にFIWARE Data Modelsを利⽤する 10 共通基盤 OS OS OS 共通基盤 共通基盤 アプリ サービス アプリ サービス アプリ サービス あるスマートシティ的 サービス FIWAREサービス部品を利⽤して構築 通信プロトコル︓ NGSI 共通データモデル︓ FIWARE Data Models
  8. FIWAREのサービス部品(例) コア・コンポーネント • Context Broker : コンテキストブローカー、データを中継・保存 • STH︓ データの蓄積(短期主体)

    • Cygnus︓ データ蓄積(外部DBとのIF部品) • Draco︓ データ蓄積(外部DBとのIF部品、GUIベース) • QuantumLeap︓ データ蓄積(外部DBとのIF部品) インタフェース部品 • IoT Agent︓ UL2など別プロトコルとNGSIを相互変換 アプリ・サービス • Wirecloud︓ データ可視化(GUI、ノーコードタイプ) • Grafana︓ データ可視化 • CKAN︓ データカタログ • Knowage︓ BIツール • Node-Red︓ プログラム環境 管理ツール • Keyrock︓ 認証部品 11
  9. Node-REDでNGSIデータを読み書きする NGSIデータ読み出しフロー 15 [{"id":"2a756950a9b347f8","type":"NGSI-Entity","z":"0b2efa7c580f1ad1","name":"orion context broker","endpoint":"8cb980ef6f764c60","protocol":"v2","ldContext":"https://uri.etsi.org/ngs i-ld/v1/ngsi-ld-core- context.jsonld","mode":"normalized","mimeType":"application/ld+json","attrs":"","x":280,"y" :120,"wires":[["5da4cad3a5ac2e49"]]},{"id":"f3d0aaff9bd8c4e0","type":"inject","z":"0b2efa7 c580f1ad1","name":"","props":[{"p":"payload"}],"repeat":"","crontab":"","once":false,"onceD

    elay":0.1,"topic":"","payload":"urn:ngsi- ld:WeatherObserved:10417","payloadType":"str","x":90,"y":60,"wires":[["2a756950a9b347f8 ","5da4cad3a5ac2e49"]]},{"id":"5da4cad3a5ac2e49","type":"debug","z":"0b2efa7c580f1ad1" ,"name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false"," statusVal":"","statusType":"auto","x":510,"y":60,"wires":[]},{"id":"8cb980ef6f764c60","type": "Context-Broker","name":"orion","endpoint":"https://orion.fiware- sakura.jp","service":"fgn","servicepath":"/sensors","idmEndpoint":"https://orion.fiware- sakura.jp","credentials":{}}]
  10. Node-REDでNGSIデータを読み書きする NGSIデータのダッシュボードでの可視化フロー 17 [{"id":"f6f2187d.f17ca8","type":"tab","label":"Flow 1","disabled":false,"info":""},{"id":"3cc11d24.ff01a2","type":"comment","z":"f6f2187d.f17ca8","name":"WARNING: please check you have started

    this container with a volume that is mounted to /data¥¥n otherwise any flow changes are lost when you redeploy or upgrade the container¥¥n (e.g. upgrade to a more recent node-red docker image).¥¥n If you are using named volumes you can ignore this warning.¥¥n Double click or see info side panel to learn how to start Node-RED in Docker to save your work","info":"¥nTo start docker with a bind mount volume (-v option), for example:¥n¥n```¥ndocker run -it -p 1880:1880 -v /home/user/node_red_data:/data --name mynodered nodered/node-red¥n```¥n¥nwhere `/home/user/node_red_data` is a directory on your host machine where you want to store your flows.¥n¥nIf you do not do this then you can experiment and redploy flows, but if you restart or upgrade the container the flows will be disconnected and lost. ¥n¥nThey will still exist in a hidden data volume, which can be recovered using standard docker techniques, but that is much more complex than just starting with a named volume as described above.","x":350,"y":80,"wires":[]},{"id":"e9a6b8ca.396498","type":"NGSI- Entity","z":"f6f2187d.f17ca8","name":"test","endpoint":"e880c8d8.cfe0c8","protocol":"v2","ldContext":"https://uri.etsi.org/ngsi-ld/v1/ngsi-ld-core- context.jsonld","mode":"normalized","mimeType":"application/ld+json","attrs":"","x":150,"y":300,"wires":[["7d49bbdc.944b54","3c2aa1a8.0e71be"]]},{" id":"60f518ba.a13428","type":"inject","z":"f6f2187d.f17ca8","name":"","props":[{"p":"payload"}],"repeat":"300","crontab":"","once":false,"onceDelay": 0.1,"topic":"","payload":"urn:ngsi- ld:WeatherObserved:10417","payloadType":"str","x":150,"y":240,"wires":[["e9a6b8ca.396498"]]},{"id":"7d49bbdc.944b54","type":"debug","z":"f6f2187 d.f17ca8","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":370,"y":280, "wires":[]},{"id":"fa65993a.fa02d8","type":"ui_text","z":"f6f2187d.f17ca8","group":"251627e8.a926c8","order":3,"width":0,"height":0,"name":"","label": "CO2濃度","format":"{{msg.payload}}","layout":"row- spread","className":"","x":160,"y":500,"wires":[]},{"id":"3c2aa1a8.0e71be","type":"json","z":"f6f2187d.f17ca8","name":"","property":"payload","action ":"","pretty":false,"x":150,"y":380,"wires":[["7d2f129d.69da2c","5b24b7d4.ab30d8"]]},{"id":"7d2f129d.69da2c","type":"change","z":"f6f2187d.f17ca8"," name":"","rules":[{"t":"set","p":"payload","pt":"msg","to":"payload.CO2.value","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":14 0,"y":440,"wires":[["7d49bbdc.944b54","fa65993a.fa02d8","cbda101b.9ccfb"]]},{"id":"cbda101b.9ccfb","type":"ui_gauge","z":"f6f2187d.f17ca8","name" :"","group":"251627e8.a926c8","order":2,"width":0,"height":0,"gtype":"gage","title":"CO2濃度 ","label":"units","format":"{{value}}","min":"400","max":"1100","colors":["#00b500","#e6e600","#ca3838"],"seg1":"800","seg2":"1000","className":""," x":160,"y":560,"wires":[]},{"id":"e6f6af56.20ac7","type":"ui_text","z":"f6f2187d.f17ca8","group":"251627e8.a926c8","order":1,"width":0,"height":0,"na me":"","label":"取得時刻","format":"{{msg.payload}}","layout":"row- spread","className":"","x":380,"y":500,"wires":[]},{"id":"5b24b7d4.ab30d8","type":"change","z":"f6f2187d.f17ca8","name":"","rules":[{"t":"set","p":"pa yload","pt":"msg","to":"payload.dateObservedJST.value","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":380,"y":440,"wires":[["e 6f6af56.20ac7"]]},{"id":"e880c8d8.cfe0c8","type":"Context-Broker","name":"fiware-sakura context broker","endpoint":"https://orion.fiware- sakura.jp","service":"fgn","servicepath":"/sensors","idmEndpoint":"https://keyrock.fiware- sakura.jp"},{"id":"251627e8.a926c8","type":"ui_group","name":"デフォルト ","tab":"1e2d2bae.ea9874","order":1,"disp":true,"width":"6","collapse":false,"className":""},{"id":"1e2d2bae.ea9874","type":"ui_tab","name":"ホーム ","icon":"dashboard","disabled":false,"hidden":false}]
  11. FIWAREとNode-REDの環境の構築⽅法(概要) FIWARE環境の構築⽅法 • ⽅法1︓Context Broker(単体)をlocal-PCにインストー ルする • ⽅法2︓FIWARE統合環境インストーラ(FIWARE Big Bang)でインストールする

    Node-RED環境(with NGSI)の構築⽅法 • ⽅法1︓Node-REDのFIWARE NGSIライブラリをlocal PC にインストールする • ⽅法2︓FIWARE統合環境パッケージでインストールする 18 同⼀の⼿順で同時 にできる
  12. FIWARE環境構築 ⽅法1︓local-PCにOrion Context Brokerをインストール • FIWARE-Orion公式 • https://fiware- orion.readthedocs.io/en/master/index.html •

    パッケージインストール、ソースビルド、dockerコン テナなど複数の⽅法でインストール可能 • https://fiware- orion.readthedocs.io/en/master/admin/install/index.ht ml • https://hub.docker.com/r/fiware/orion (dockerの場合) • インストールは⾮常に簡単 • 認証環境は付いてこない(必要であれば別途⼊れる) 19
  13. MacへのOrion Context Brokerのインストール(1/2) • ymlファイルを作成( https://hub.docker.com/r/fiware/orion ページ内よりコピペ) 20 s-kikuchi@PC104516 ~/w/s/f/orion-local-test

    (master)> vi docker-compose.yml mongo: image: mongo:4.4 command: --nojournal orion: image: fiware/orion links: - mongo ports: - "1026:1026" command: -dbhost mongo s-kikuchi@PC104516 ~/w/s/f/orion-local-test (master)> s-kikuchi@PC104516 ~/w/s/f/orion-local-test (master)> sudo docker-compose up Password: Pulling mongo (mongo:4.4)... 4.4: Pulling from library/mongo 35807b77a593: Pull complete <<中略>> Digest: sha256:0edd3c3d676b2379e37ae715be0b0758838d20b3b9965f2d86fe82dc24b7b7e4 Status: Downloaded newer image for mongo:4.4 Pulling orion (fiware/orion:)... latest: Pulling from fiware/orion <<中略>> 7a0437f04f83: Pull complete Digest: sha256:48015a5f72e8cc7e6b06f23219bf6c04e858ac3e315a8929e73c8f69b0815db1 Status: Downloaded newer image for fiware/orion:latest Creating orion-local-test_mongo_1 ... done Creating orion-local-test_orion_1 ... done Attaching to orion-local-test_mongo_1, orion-local-test_orion_1 • docker-composeコマンドで構築
  14. MacへのOrion Context Brokerのインストール(2/2) • 別窓でアクセスして確認 21 s-kikuchi@PC104516 ~> curl localhost:1026/version

    { "orion" : { "version" : "3.1.0-next", "uptime" : "0 d, 0 h, 2 m, 44 s", "git_hash" : "7bd1e43514539bd65caeb30d4e3319202e0f115b", "compile_time" : "Mon Jul 26 08:19:44 UTC 2021", "compiled_by" : "root", "compiled_in" : "dae1c5e3a7d9", "release_date" : "Mon Jul 26 08:19:44 UTC 2021", "machine" : "x86_64", "doc" : "https://fiware-orion.rtfd.io/", "libversions": { "boost": "1_66", "libcurl": "libcurl/7.61.1 OpenSSL/1.1.1g zlib/1.2.11 nghttp2/1.33.0", "libmicrohttpd": "0.9.70", "openssl": "1.1", "rapidjson": "1.1.0", "mongoc": "1.17.4", "bson": "1.17.4" } } } s-kikuchi@PC104516 ~>
  15. FIWARE環境構築 ⽅法2︓ FIWARE-Big-Bang (FIWAREの統合環境インストーラ) FIWARE Big Bangは、クラウドVM上にFIWARE環境を⼀発構築できる スクリプト • https://github.com/lets-fiware/FIWARE-Big-Bang

    • Context Brokerなどのコアコンポーネントの他に、Node-REDなどのアプリケー ションも同時にインストールできる • クラウド上のVMが必要(レンタルサーバ不可) • ⾃由にホスト名を設定できるドメインが必要 インストール⼿順(概要) 1. VMを⽤意(契約、起動、ssh経由アクセス) 2. ドメインを⽤意、ホスト名を設定(例︓your-fiware.jpドメイン、orion.your-fiware.jp, node-red.your-fiware.jpなどをAレコード/CNAMEなどで解決できるように) 3. VM上でFIWARE B.B.をダウンロード 4. インストール対象コンポーネント等を設定(config.shを編集) 5. インストールスクリプトを実⾏ 6. GUIでユーザアカウント等を設定 7. Context-BrokerやNode-REDが使える ここまでの⼿順でインストールは完了 22
  16. FIWARE環境構築 ⽅法2︓ FIWARE-Big-Bang (FIWAREの統合環境インストーラ) • スクリプトを実⾏ 25 ubuntu@orion2:~/FIWARE-Big-Bang-0.10.0$ ./lets-fiware.sh fiware-sakura.jp

    59.106.220.110 setup: check_machine setup: check_machine x86_64 setup: get_distro setup: get_distro Ubuntu setup: setup_init setup: check_data_direcotry setup: make_directories setup: get_config_sh setup: set_and_check_values setup: set_default_values setup: check_cygnus_values setup: check_iot_agent_values setup: check_node_red_values setup: setup_logging_step1 setup: install_commands setup: install_commands_ubuntu <<中略>> Wait for https://keyrock2.fiware-sakura.jp/ to be ready (300 sec) setup: https://keyrock2.fiware-sakura.jp/ is ready. setup: clean_up setup: setup_complete *** Setup has been completed *** IDM: https://keyrock2.fiware-sakura.jp User: [email protected] Password: ********* docs: https://fi-bb.letsfiware.jp/ Please see the .env file for details. ubuntu@orion2:~/FIWARE-Big-Bang-0.10.0$ s-kikuchi@PC104516 ~> およそ5分程度はかかる
  17. Node-RED with NGSI環境構築 ⽅法1︓node-red-contrib-FIWARE_official “node-red-contrib-FIWARE_official”を利⽤する https://github.com/FIWARE/node-red-contrib-FIWARE_official 複数の⽅法で環境構築が可能 • Node-RED環境内で読み込ませる •

    npmでインストール • dockerコンテナを利⽤する お試しであれば、docker環境を利⽤するのが楽 26 $ git clone https://github.com/FIWARE/node-red-contrib-FIWARE_official.git $ cd node-red-contrib-FIWARE_official/docker $ docker-compose up -d その後ブラウザで、http://localhost:1880/にアクセス
  18. Node-RED with NGSI環境構築 ⽅法1︓node-red-contrib-FIWARE_official ローカルNode-REDからFIWARE Big Bang環境のContext Broker(認証 付き)にアクセスするには、認証キーを適切に設定する必要あり。 27

    ubuntu@orion:~/FIWARE-Big-Bang-0.10.0$ cat .env|grep IDM_HOST IDM_HOST=https://keyrock.fiware-sakura.jp PEP_PROXY_IDM_HOST=keyrock ubuntu@orion:~/FIWARE-Big-Bang-0.10.0$ cat .env|grep TOKENPROXY_CLIENT TOKENPROXY_CLIENT_ID=05b8fdfa-cd47-45d6-bd3d-090e4a3d7968 TOKENPROXY_CLIENT_SECRET=xxxxxxxx-xxxxxxxx-xxxxxxxxx-xxxxxxxxx 認証キー情報は、サーバで取得する
  19. Node-RED with NGSI環境構築 ⽅法2︓ FIWARE-Big-Bang (FIWAREの統合環境インストーラ) • FIWARE Big Bangであれば、FIWAREの環境構築と同時にNode-

    REDの環境構築もできる。 • (スクリプト実⾏前に、Node-REDを使うという設定を投⼊する必要がある) 28 FIWARE Big Bangスクリプトの実⾏が終わった時点で、このようにNode-REDにアクセス可能。NGSIノードもインストールされている。
  20. まとめ • FIWARE概要 • FIWARE(ファイウェア)とは、スマートシティ向けの共通基盤ソフトウェア群 • NGSIとFIWARE Data Modelsでデータを登録・取得 •

    ソフトウェアはOSSとして公開されている • NGSIを喋れるアプリケーションも複数存在 • FIWAREをNode-REDで使う • FIWARE環境の構築、Node-RED with NGSIのインストール、が同時にできる FIWARE Big Bangがおすすめ • ローカルのNode-REDにNGSIノードを追加インストールすることも可能 • ぜひお試しください︕ • 仲間が増えてコミュニティが盛んになってほしいです︕ 29