IoT PnP Bridgeのconfig.json

IoT Plug and Play Bridgeのconfig.jsonを斜め読み。

config.jsonはこちら。

github.com

ドキュメントはこちらにありますが、当然、英語ですorz

雰囲気で読んでみましょう。

全体の構成

大きく、

  • pnp_bridge_parameters
  • devices
  • discovery_adapters

の3つ。

pnp_bridge_parameters

pnp_bridge_parametersに上位への接続文字列(Azure IoT Hubとか、Azure IoT Hub DPSへの接続文字列)が含まれています。

pnp_bridge_parameters.connection_parameters.device_capability_model_uriがあるので、事前にリポジトリへDCMを登録しておかないと動かないのかな?

devices

下位デバイスの情報。配列です。

サンプルでは、DEVICE1~4の、4つが書かれています。

  • DEVICE1 ... USB device
  • DEVICE2 ... MCU sensor hub(←UARTっぽい)
  • DEVICE3 ... Camera
  • DEVICE4 ... Modbus Sensor(←TCP

discovery_adapters

謎。

サンプルで書かれているのは、USBデバイスの探索(USBデバイスが接続されたのを検知する)のようです。

For example, we want the WindowPnPDiscovery to report device that register USB device interface class.

CameraDisoverySerialPnpは、どうやって書くんだろう??

IoT PnP BridgeをRaspberry Piでコンパイルしてみた

IoT Plug and Playで、ちょっとワクワクする情報が流れてきました。

github.com

どうやら、UARTやBluetooth、I2Cのデータを、IoT Plug and PlayでAzure IoT Hubへ転送するソフトウェアのようです。

f:id:matsujirushix:20191128200820p:plain

対応OSは、

の2つだけですが、、、

みんなだいすきRaspberry Piコンパイル、実行できそうか確認してみることに。

インストール手順がここにありますが、残念ながら未だWindows向けしか書かれていません。

とりあえず雰囲気で、コマンドを叩いてみます。

まずはリポジトリをクローン。

$ cd
$ git clone https://github.com/Azure/AzurePnPBridgePreview.git
$ cd AzurePnPBridgePreview

手順に沿って、submoduleをダウンロードします。

$ cd pnpbridge
$ git submodule update --init --recursive

ビルドは、、、setup.shbuild.shがそれらしいので、実行します。

$ cd scripts/linux
$ chmod a+x setup.sh
$ ./setup.sh
$ ./build.sh

cmakeが動いて、makeが動いて、なんとなく実行ファイルが出来たっぽいです♪

表示されたメッセージから、次の2つの実行ファイルが生成された模様。

[ 99%] Linking C executable pnpbridge_environmentalsensor
[100%] Linking C executable pnpbridge_bin
$ cd ~/AzurePnPBridgePreview
$ ls -l pnpbridge/cmake/pnpbridge_linux/src/adapters/samples/environmental_sensor/pnpbridge_environmentalsensor
-rwxr-xr-x 1 pi pi 1113520 Nov 28 10:45 pnpbridge/cmake/pnpbridge_linux/src/adapters/samples/environmental_sensor/pnpbridge_environmentalsensor
$ ls -l pnpbridge/cmake/pnpbridge_linux/src/pnpbridge/samples/console/pnpbridge_bin
-rwxr-xr-x 1 pi pi 1115892 Nov 28 10:45 pnpbridge/cmake/pnpbridge_linux/src/pnpbridge/samples/console/pnpbridge_bin

pnpbridge_binを実行してみます。

$ cd ~/AzurePnPBridgePreview/pnpbridge/cmake/pnpbridge_linux/src/pnpbridge/samples/console
pi@raspberrypi:~/AzurePnPBridgePreview/pnpbridge/cmake/pnpbridge_linux/src/pnpbridge/samples/console $ ./pnpbridge_bin
Info:
 -- Press Ctrl+C to stop PnpBridge

Info: Starting Azure PnpBridge
Info: Tracing is disabled
Info: Connection_type is [connection_string]
Error: Time:Thu Nov 28 11:14:04 2019 File:/home/pi/AzurePnPBridgePreview/pnpbridge/deps/azure-iot-sdk-c-pnp/iothub_client/src/iothub_client_core_ll.c Func:IoTHubClientCore_LL_CreateFromConnectionString Line:1496 Unknown token <[To fill in];SharedAccessKey> in connection string.  Ignoring error and continuing to parse
Error: Time:Thu Nov 28 11:14:04 2019 File:/home/pi/AzurePnPBridgePreview/pnpbridge/deps/azure-iot-sdk-c-pnp/iothub_client/src/iothub_client_core_ll.c Func:IoTHubClientCore_LL_CreateFromConnectionString Line:1504 iotHubName is not found
Error: Time:Thu Nov 28 11:14:04 2019 File:/home/pi/AzurePnPBridgePreview/pnpbridge/deps/azure-iot-sdk-c-pnp/iothub_client/src/iothub_client_core.c Func:create_iothub_instance Line:1035 Failure creating iothub handle
Error: Time:Thu Nov 28 11:14:04 2019 File:/home/pi/AzurePnPBridgePreview/pnpbridge/src/pnpbridge/src/iothub_comms.c Func:IotComms_InitializeIotHubDeviceHandle Line:315 Failed to create device handle

Error: Time:Thu Nov 28 11:14:04 2019 File:/home/pi/AzurePnPBridgePreview/pnpbridge/src/pnpbridge/src/iothub_comms.c Func:IotComms_InitializeIotDeviceHandle Line:396 IotComms_InitializeIotDevice failed

Error: Time:Thu Nov 28 11:14:04 2019 File:/home/pi/AzurePnPBridgePreview/pnpbridge/src/pnpbridge/src/pnpbridge.c Func:PnpBridge_Initialize Line:80 IotComms_InitializeIotHandle failed

Info: Cleaning DeviceAggregator resources
Error: Time:Thu Nov 28 11:14:04 2019 File:/home/pi/AzurePnPBridgePreview/pnpbridge/src/pnpbridge/src/pnpbridge.c Func:PnpBridge_Main Line:407 PnpBridge_Initialize failed: 7
pi@raspberrypi:~/AzurePnPBridgePreview/pnpbridge/cmake/pnpbridge_linux/src/pnpbridge/samples/console $

接続文字列が~なエラーが出ました。
config.jsonに、接続先とかブリッジするデバイスを設定しないといけないみたい。

まだ動作確認とれていませんが、なんとなくRaspberry Piでも動かせそうな感じでした。

Raspberry PiでMRAAを使えるようにする for Node.js

前々から、Node-REDで使えるGroveノードを作りたいなーと思っている話を先日のNode-RED UG Tokaiで話したところ、

www.slideshare.net

わりと「いいんじゃね?」という感じだったので、Johnny-FiveとMRAAを比較して、

www.slideshare.net

よっしゃMRAAでやろう!となり、Raspberry PiにMRAA入れるところで盛大に苦労したので、ブログに書いておこうと思う。

f:id:matsujirushix:20191109115036p:plain

やりたいこと

Raspberry Piで、Node-REDから(Node.jsから)呼び出しできるようMRAAをインストールする。

もやもや

apt install mraaみたいにサクッとインストールを期待していたのですが、、、MRAAのパッケージ無い。

Debian -- Package Search Results -- mraa

npmでMRAAありましたが、Node.js 7以降は未サポートorz

mraa - npm

SeeedのパッケージリポジトリにMRAAありましたが、Node.js入っていないっぽい。&バージョン古いっぽい。

GitHub - Seeed-Studio/pi_repo: Package Repository for Raspberry Pi

仕方ないので、ここを見ながらソースをコンパイルし始めたのだが、、、まぁ、コンパイルが通らないわけです。

Build failure with Node.js 12.x · Issue #969 · intel-iot-devkit/mraa · GitHub

SWIG support for NodeJS v12 · Issue #1520 · swig/swig · GitHub

Node.jsのバージョンを変え、SWIGのバージョンを変え、SWIGにパッチ当てたり当てなかったりと、あれこれ試した結果、下記手順で動かすことができました。

Raspberry PiでMRAAを使えるようにする for Node.js

OSイメージは現時点最新の2019-09-26-raspbian-buster-lite.img
とりあえず、パッケージを最新にしておきます。

sudo apt update
sudo apt upgrade

nodesourceで、Node.js v10をインストールします。(参考
最新のv12はダメ。SWIGが対応していない。
aptで入れるのはダメ。nodesourceで入れておかないと、Raspberry Pi用Node-REDスクリプトでアンインストールされてしまうので。

sudo sh -c 'curl -sL https://deb.nodesource.com/setup_10.x | bash -'
sudo apt-get install -y nodejs

この時点の、nodeとnpmのバージョンはこれでした。

$ node -v
v10.17.0
$ npm -v
6.11.3

MRAAのコンパイルに必要なパッケージをインストールします。(参考
nodejs-devは無くてOK。(busterだとlibnode-devなんだけど、あえて入れなくても大丈夫だった。)

sudo apt-get install git build-essential swig3.0 python-dev cmake libjson-c-dev python3-dev

この時点の、SWIGは3.0.12-2。

$ dpkg -l | grep swig3.0
ii  swig3.0                        3.0.12-2                            armhf        Generate scripting interfaces to C/C++ code

SWIGに、Node.js V7以降のパッチを適用します。

wget https://git.yoctoproject.org/cgit.cgi/poky/plain/meta/recipes-devtools/swig/swig/0001-Add-Node-7.x-aka-V8-5.2-support.patch
cd /usr/share/swig3.0
sudo patch -p2 <~/0001-Add-Node-7.x-aka-V8-5.2-support.patch
cd

MRAAをコンパイル

git clone https://github.com/intel-iot-devkit/mraa
cd mraa
mkdir build
cd build
cmake ..
make

MRAAをインストール。
共有ライブラリが増えたので、ldconfigも実行します。

sudo make install
sudo ldconfig

Node.jsから使えるようにシンボリックリンクを作成します。

mkdir ~/node_modules
ln -s /usr/include/node/lib/node_modules/mraa ~/node_modules/mraa

次期Azure Sphere SDKで何が変わるのか?

Richardが、次期Azure Sphere SDKで何が変わるのか?をブログにアップしていたので、確認してみたいと思います。

Plan for changes coming to the Azure Sphere SDK in next release - Microsoft Tech Community - 916078

1. サインインがシンプルで柔軟に

ユーザーとAzure Sphereテナントの認証モデルを変更。
具体的に、どのようなモデルになるか明記されていませんが、マイクロソフトwork/schoolアカウントに加え、マイクロソフト個人アカウントでも認証できるようになると思われる記述があります。
ただし、新しい認証モデルに移行すると、旧来のSDKでは認証できず、新しいSDKにしなければいけない。複数人で開発しているときは注意が必要。

2. OTAの構造を簡素化

プロダクト(e.g. cofee maker)、デバイスグループ(e.g. Development)、デプロイといった、実運用に合わせた区分で管理できるようになるみたい。
このあたり、いままでは名称の付け方とかで工夫していましたが、、分かりやすくなっていいと思います。

3. Azure Sphere SDKLinux対応(プレビュー)

Ubuntu 18.04 LTSに対応。

4. Visual Studio Code対応(プレビュー)

Windows, LinuxVisual Studio Code拡張を提供。

5. CMake

Visual Studioプロジェクトファイルによる管理をやめて、CMakeに変更。

6. Visual Studio 2019に最適化

Visual Studio 2017は非サポートということで。

気になったもの

認証モデル、OTA構造はインパクト大きそうなので、詳しい情報を待つ。

ローカライズスタイルガイドとランゲージポータル

マイクロソフトのdocsにプルリクエストを出したところ、こんな表示が。

f:id:matsujirushix:20191013202434p:plain

以前からあったのかなこれ?

というわけで、覗いてみました。

続きを読む

PythonでAzure IoT Hubへテレメトリ送信(Raspberry Pi使用)

最近、ちょいちょい使う機会のあるPython
そういえば、PythonからAzure IoT Hubへの送信ってどうやるんだっけ?と思い、調べて動作確認してみました。

続きを読む