ペイント3DをEnder-2に3Dプリント
ペイント3Dのライブラリに、なかなか良いコンテンツがあるので、、、3Dプリントしてみたいと思い、やってみました。
ペイント 3D
Windows 10に標準で追加された、ペイントの3D版。
3Dライブラリから、好みのコンテンツを選びます。
今回は着地するワシを選びました。
いやぁ、それにしてもペイント3DのUI、すごいですね。
3D-CAD苦手なわたしでも、チョイチョイと操作できてしまう。
で、メニュー > 名前を付けて保存 > 3Dモデルを選んで、3Dプリンターで読み込めるファイル形式で保存する、、、のですが、GLB,FBX,3MFしか選べません。わたしの3Dプリンター(スライスするソフトはCURAの古いバージョン)がこれらに対応していないので、とりあえずFBXで保存します。
FBX -> STL
Fusion 360にアップロードして、3DプリントでSTLファイルにします。(このとき、3Dプリントユーティリティに送信のチェックは外します)
3Dプリント
わたしの場合は、CURAの古いバージョンでSTLを開いて、GCODEをマイクロSDに書き込み、マイクロSDを3Dプリンターにセットして出力しました。
結果
- Fusion 360でFBX->STLにコンバートしないといけない。ちょっとめんどい。
- ペイント3D、UIすごいね。
IoT Edgeランタイムのネットワーク構成
IoT Edge v2はDocker技術を使って、各モジュールを分離して動かしています。
はたして、モジュール間はどういう感じでつながっているのか??疑問だったので調べることにしました。
今回は、IoT Edgeランタイム(システムモジュール)の、edgeAgentとedgeHubを調べました。
Network
各システムモジュールを調べる前に、Dockerに存在するNetworkを確認しておきましょう。
ubuntu@ubuntu:~$ docker network ls NETWORK ID NAME DRIVER SCOPE bc452e56bae2 azure-iot-edge bridge local 191c4158859e bridge bridge local e524d4a26c71 host host local 54549f043a71 none null local ubuntu@ubuntu:~$
none, bridge, hostとは別に、azure-iot-edgeというブリッジが存在していました。
edgeAgent
edgeAgentのコンテナ情報を見てみましょう。
NetworkModeがazure-iot-edgeで、azure-iot-edgeネットワークにIP=172.18.0.2、GW=172.18.0.1で繋がっているようです。
ubuntu@ubuntu:~$ docker inspect edgeAgent [ { ... "Name": "/edgeAgent", ... "HostConfig": { ... "NetworkMode": "azure-iot-edge", "PortBindings": null, ... }, ... "NetworkSettings": { ... "Networks": { "azure-iot-edge": { ... "Gateway": "172.18.0.1", "IPAddress": "172.18.0.2", ... } } } } ] ubuntu@ubuntu:~$
edgeHub
一方、edgeHubは、NetworkModeがdefaultで、443/tcpと8883/tcpを外部に公開している?みたい。edgeAgentと同様に、azure-iot-edgeネットワークにIP=172.18.0.3、GW=172.18.0.1で繋がっているようです。
NetworkModeがdefaultって何だろう??Dockerよくわからん。
ubuntu@ubuntu:~$ docker inspect edgeHub [ { ... "Name": "/edgeHub", ... "HostConfig": { ... "NetworkMode": "default", "PortBindings": { "443/tcp": [ { "HostIp": "", "HostPort": "443" } ], "8883/tcp": [ { "HostIp": "", "HostPort": "8883" } ] }, ... }, ... "NetworkSettings": { ... "Networks": { "azure-iot-edge": { ... "Gateway": "172.18.0.1", "IPAddress": "172.18.0.3", ... } } } } ] ubuntu@ubuntu:~$
tempSensor
気になったので、センサーデータをシミュレートする、tempSensorモジュールも見てみました。
ubuntu@ubuntu:~$ docker inspect tempSensor [ { ... "Name": "/tempSensor", ... "HostConfig": { ... "NetworkMode": "default", "PortBindings": null, ... }, ... "NetworkSettings": { ... "Networks": { "azure-iot-edge": { ... "Gateway": "172.18.0.1", "IPAddress": "172.18.0.4", ... } } } } ] ubuntu@ubuntu:~$
まとめ
コンテナ名 | NetworkMode | PortBindings | 接続ネットワーク | 接続ネットワークIP |
---|---|---|---|---|
edgeAgent | azure-iot-edge | azure-iot-edge | 172.18.0.2 | |
edgeHub | default | 443/tcp,8883/tcp | azure-iot-edge | 172.18.0.3 |
tempSensor | default | azure-iot-edge | 172.18.0.4 |
なるほど。ということは、手作りモジュールはPortBindingsすれば外部からIP接続できるってことか。
うーむ、defaultって何だろう?
Azure IoT Edge v2に最適なシングルボードコンピュータ
Azure IoT Edge v2をシングルボードコンピュータ(SBC)で動かそう!と思い、Raspberry Pi 3のRaspbianで試したところ、さまざまなエラーに見舞われて上手く動きませんでした。
「SBCで安定して動かすことはできないのか?」
いくつかのSBCで、実際にAzure IoT Edge v2を動かしてみたときの、わたし個人の見解です。
Azure IoT Edgeは現時点はプレビューです。
アップデートによって状況は改善されるものと思います。
テスト方法
OSはUbuntu Linux Server 16.04を使いました。Raspberry Pi 3はRaspbian。Windows 10が動くSBCもありますが、IoT EdgeがDockerベースで作れらていることから、Linuxの方が事故りにくいと思い、Linuxにしました。
チュートリアルにある、
をセットアップして、それぞれのモジュール(edgeAgent, edgeHub, tempSensor, asa-container)に異常がないか確認しました。(例:docker logs -f tempSensor)
本当はC#モジュールで試したかったのですが、VSCode拡張でLinuxコンテナーがAmd64しか出力できなかったので止めました。
Raspberry Pi 3
様々なエラーに見舞われましたが、、、Raspbian Lite(2018-03-13-raspbian-stretch-lite.img)にこの手順でセットアップすれば動きました。
セットアップ時にメモリが足りないようで、ときどきリブートしないとエラー地獄になります。セットアップさえ終われば、ちゃんと動いています。
ただ、遅いです。tempSensorだけなら良いですが、ASAと連携するとガクガクな動きになります。
- IoT Edgeランタイム動く
- ASA動く
- セットアップにコツがいる
- 遅い
- メモリ不足エラーが不安
UP2
AAEONが出している超パワフルなSBC。パソコンがそのままSBCになった、という感じの代物です。
- IoT Edgeラインタイム動く
- ASA動かない(edgeHubからのPOSTでエラー?)
- 鬼速い
有線LANが2系統あるのが問題なのでは?edgeHubのdocker設定を変更すれば回避できるかも?と思いましたが、深追いしていないです。
LattePanda
DFRobotが出しているLattePanda。秋月電子通商さんで販売されているので入手しやすいSBC。 UbuntuのインストールUSBメモリからブートが出来なくて、確認できませんでした。
- Ubuntuがインストールできずorz
- 基板が熱くて不安
UP
AAEONが出しているラズパイっぽいSBC。 サイズ、コネクタ配置もラズパイ風。
- IoT Edgeランタイム動く
- ASA動く
- 速い
Minnowboard MAX
これもLattePanda同様に日本で入手しやすいSBC。Minnowboard MAXは生産終了(EOL)なので、後継のMinnowboard Turbotを使いたかったのですが、、、手元に無いのでコレで。
- IoT Edgeランタイム動く
- ASA動く
- 遅い
まとめ
速くてメモリ潤沢で不安が無い ... UP
入手しやすい ... Minnowboard MAX(ただしEOL)
自らの技術力を試したい ... Raspberry Pi 3
417 - The device's deployment configuration is not setの対処方法
事象
IoT HubでIoT Edge Deviceを作り、(IoT Edge DeviceにModule追加せずに)エッジデバイスでIoT Edgeランタイムを起動すると、IoT Edge DeviceのEdge Runtime Responseに417 - The device's deployment configuration is not setというエラーが表示されます。
また、エッジデバイスでedgeAgentとedgeHubの2つのDockerコンテナが起動するはずなのが、edgeAgentしか起動しません。
pi@raspberrypi:~ $ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES c1a8c72c3ce1 microsoft/azureiotedge-agent:1.0-preview "/usr/bin/dotnet Mic…" 24 hours ago Up 23 hours edgeAgent pi@raspberrypi:~ $
edgeAgentのログで、ConfigEmptyExceptionが発生していることが分かります。
2018-04-16 11:52:08.164 +00:00 [ERR] - Error refreshing edge agent configuration from twin. Microsoft.Azure.Devices.Edge.Agent.Core.ConfigSources.ConfigEmptyException: This device has an empty configuration for the edge agent. Please set a deployment manifest. at Microsoft.Azure.Devices.Edge.Agent.IoTHub.EdgeAgentConnection.UpdateDeploymentConfig() in /opt/vsts/work/1/s/edge-agent/src/Microsoft.Azure.Devices.Edge.Agent.IoTHub/EdgeAgentConnection.cs:line 171 at Microsoft.Azure.Devices.Edge.Agent.IoTHub.EdgeAgentConnection.<RefreshTwinAsync>d__20.MoveNext() in /opt/vsts/work/1/s/edge-agent/src/Microsoft.Azure.Devices.Edge.Agent.IoTHub/EdgeAgentConnection.cs:line 124 2018-04-16 11:52:10.378 +00:00 [INF] - Updated reported properties
原因
これは、IoT Edgeランタイムに必要な設定(edgeAgentに対するModuleTwin?)が無いことで発生しています。
対処方法
次の操作でIoT Edgeランタイムの設定を作成すると直ります。
- IoT Hubにある、IoT Edge DeviceのSet Modulesをクリック
- Add Modules画面が表示されるので、Nextをクリック
- Specify Routes画面が表示されるので、Nextをクリック
- Review Template画面が表示されるので、Submitをクリック
Review Template画面で表示されているJSONが、edgeAgentにModuleTwinで設定されているようです。
Azure IoT Edge Quick Install Guide for Raspberry Pi 3
Azure IoT Edge v2 ランタイムをRaspberry Pi 3にインストールする手順です。
Key point
Setup process consume memory and Raspberry Pi 3 has memory only little. You need reboot before heavy setup/install process.
Step 1
Create microSD image
- 2018-03-13-raspbian-stretch-lite.img
- Create empty file 'ssh' on boot volume in microSD when you need to use SSH.
Step 2
Reduce GPU memory
$ sudo vi /boot/config.txt gpu_mem=16
Disable IPv6 stack
$ sudo vi /etc/sysctl.conf net.ipv6.conf.all.disable_ipv6=1
Reboot
$ sudo reboot
Step 3
Install pip
$ sudo apt-get update $ sudo apt-get install python-pip
Upgrade setuptools and others
$ sudo apt-get install python2.7-dev libffi-dev libssl-dev $ sudo pip install -U setuptools pip $ sudo pip install -U cryptography idna
Reboot
$ sudo reboot
Step 4
Install Docker
$ curl -fsSL get.docker.com -o get-docker.sh $ sudo sh get-docker.sh $ sudo usermod -aG docker pi
Re-login
$ exit
Step 5
Install Azure IoT Edge Runtime
$ sudo pip install -U azure-iot-edge-runtime-ctl $ sudo iotedgectl setup --auto-cert-gen-force-no-passwords --connection-string "{ConnectionString}"
Reboot
$ sudo reboot
Step 6
Start Azure IoT Edge Runtime
$ sudo iotedgectl start
Reboot
$ sudo reboot
iothub-explorerをAzure Cloud Shellで使えるようにする
Azure IoT Hubの状況をモニタリングするのに、AzureポータルとDevice Explorerを使うのが定番です。特に、C2DメッセージはAzureポータルでは確認できないので、Device Explorerを使うことになります。
残念なことに、このDevice ExplorerはWindows専用。MacユーザーやLinuxユーザーがC2Dメッセージをモニタリングしたいときは、Device Explorerの代わりにiothub-explorerというCLIツールを使うことになりますが、Node.jsをインストールしてiothub-explorerをインストールと、ちょっと煩わしい。
気になるが良い手が無いなぁと思っていたところ、先日、ビデオ会議でソラコム松井さん、松下さんから「Azure Cloud Shell良いよ」と、素晴らしい方法を聞いたので、試してみました。(松井さん、松下さんありがとうございます!!)
Azure Cloud Shellのセットアップ
Webブラウザから操作できるシェル。Azure管理コマンドを実行するために用意されたシェル環境のようで、Azureポータルのアカウントに紐づいて環境作成できます。(複数セッションの同時接続は可能。) サーバーは無料で、ストレージは有料。Azureストレージアカウントに課金されます。
Azureポータルの上部にある、コンソールっぽいアイコンをクリックしてください。
すると、画面が上下分割されて下部にAzure Cloud Shellが表示されるので、Bash (Linux)をクリックしてください。
ストレージの作成をクリックしてください。
なお、一番右のフォルダのようなアイコンをクリックすると、Azure Cloud Shellだけのウィンドウを開くことができます。また、そのURLをブックマークしておくと、Azureポータルを立ち上げずに直接Azure Cloud Shellを開くことも可能です。
iothub-explorerのインストール
公式の手順はnpm install -g iothub-explorerと、グローバル領域(/usr/local/lib/node_modules)にインストールしていますがAzure Cloud Shellではここにインストールすることはできません。いくつか代案がありますが、、、ここではグローバル領域を変更してインストールしましょう。
mkdir ~/.npm-global npm config set prefix '~/.npm-global' npm install -g iothub-explorer
iothub-explorerの起動
~/.npm-global/bin/iothub-explorer
すばらしい。
PATHの追加
いちいち~/.npm-global/...と入力するのは面倒なので、.bashrcにPATH追加を追記しておくと少し便利です。
vi ~/.bashrc
PATH=~/.npm-global/bin:${PATH}
. ~/.bashrc
Azure Cloud Shellの削除
一度、Azure Cloud Shellをセットアップすると、Azureストレージアカウントに課金されます。ストレージを使っているので。
もういらないよ!というときは、リソースグループのcloud-shell-storage-xxxを削除しましょう。
Power BI 勉強会@名古屋支部 #1に参加しました
Maker Faire Tokyo 2017のデモ、ゴミ箱残量モニタリングを作るときにEvent Hub -> Stream Analytics -> Power BIで実装したのですが、Power BIがいろいろ分からずWPFアプリケーションに変更していました。(十分理解する前に時間切れで使い慣れた方法に変更するというのは、お仕事では必要ですね。)
以降、Power BIをじっくりやろうというチャンスが無かったのですが、Power BI 勉強会@名古屋支部 #1が開催されるということで参加しました。
会場は日本システム開発株式会社さんのオープンイノベーションベース。(名古屋で会場を確保するのは大変なので)会場提供ありがたい。
内容はPower BIの使いどころとか使ってみるとハマるところなどを実体験に基づいて発表されていました。どれも熱意のあるセッションで素敵でした。熱意大事。詳しくはconpassのセッション情報と資料をご参照ください。(←手抜き)
togetterもどうぞ。
(わたしは仕組み、仕掛けあたりが興味ポイントなのですが)わたしが気になった、気づいた点をいくつかピックアップしますと、
描画ツールではなく分析ツール
Power BIの出力は見た目がきれいなので綺麗なレポートを作るツールと感じますが、その理解は間違い。データを手軽にコネコネして分析するためのツール。また、データを最新のものに更新しても、コネコネした手順をやりなおす必要が無い。
Power Query -> DAX
コネコネのキモは、Power QueryとDAX。特にPower Query。Power QueryはPower Query Formula Languageという関数型言語で記述するのですが、Excel風のクエリーエディターでGUI操作すると、記述が生成されます。
ストリーミングデータセット
データセットは基本的にバッチ分析で、リアルタイム分析?はストリーミングデータセット。履歴データの解析をオンすると、レポートで分析できるようになります。
データセットとストリーミングデータセット、Power BIが保持するデータ、レポートと(ダッシュボードに貼る)リアルタイム表示のタイル、の関係をどう理解するのかがポイント。
Power QueryとDAXの攻略がキモかな?と思いました。その先はデータ分析能力ですねorz
3/24に次回イベント、Power BIもくもく会があるようです。
ちょっと日にちが先なので、、、ぼっちモクモクしようと思います。