de:code 2018 [DA61] どんなデータもAzure IoT Hubに転送！IoTデバイスで汎用的に利用できるサンプルコード紹介

[de:code 2018](https://www.microsoft.com/ja-jp/events/decode/2018/)に参加してきましたのでその結果をまとめています。

内容の間違い、誤字脱字等はご了承ください。正確なところは、本家のサイトを参照いただければと思います。

# タイトル等

## タイトル
de:code 2018 [DA61] どんなデータもAzure IoT Hubに転送！IoTデバイスで汎用的に利用できるサンプルコード紹介

## 演者
* 日高 亜友さん　株式会社デバイスドライバーズ代表取締役　Microsoft MVP for Windows Development

## 日時
2018/05/23 10:35-10:50

## 関連リソース
関連リソース：

* [IoTデバイスで汎用的に利用できるサンプルコード（差分ファイル、Linux、Windows、WSL）](https://github.com/ahidaka/iot-edge-hacks)
* [上記と組み合わせ利用するEnOceanセンサー用データ収集ドライバー（Linux, Windows）](https://github.com/ahidaka/EnOceanGateways)
* [上記ドライバーと組み合わせ利用可能なOPC UAクライアント（Open62541改造、Linux、Windows）](https://github.com/ahidaka/Open62541-Work)
* [どんなデータって何だ？de:code 2018](http://www.devdrv.co.jp/hidaka/node/67)

# 概要、感じたこと

IoTデバイスで転送する際に、様々なプロトコルが用意されているが、リアルタイム（2秒以下）な動機が必要ないのであれば、ファイル受け渡しを基準にした方法が、OSが異なる場合なども汎用的に行いやすい。

実際に、例えば海の上から定期的に送付するような事例であれば、リアルタイムでの送付が必要な事例ではなくOSが異なることも多いので、参考となるのでないかと思った。


# 最初に

サンプルコードは、次からダウンロードしてほしいとのこと

* [IoTデバイスで汎用的に利用できるサンプルコード（差分ファイル、Linux、Windows、WSL）](https://github.com/ahidaka/iot-edge-hacks)

# 汎用的に使用したい

デバイスを汎用的に使用したいということが出てきたとき、通信が問題となってくる。

## デバイスの種類

![画像](https://kiajvw.bl.files.1drv.com/y4mrN8_ppz8AK_YNMqH0SheKY2XGdlQcKvIYp81r3UIJ8YhFpLj1BpNHd-vCD9IwTYzH9pCvwbpB4aelcUNiRQOZBzvi3oVb6Df-gRzmFwX_Dkkejw3W1E6-d_emSBASeSURNFFSpsoiAEOJKXC3yE3ukpolrFC_0ZNKhlFiqVfmX-1l1o0O4Hg8QbLa9VYDlT1RbMgCTUeFutzFs8SQr1b2Q?width=4691&height=2599&cropmode=none)

汎用的に使用するとは、デバイスの接続種類にかかわらず利用したい、ということ

## 異なるOS

![画像](https://l4ci4g.bl.files.1drv.com/y4m8HuY9h5oMQowftV0UBLc19cmiLIM26UEqc90bg47DiybOadtux04BPI2eKuRB8FC6mGoACflSPC7fK8MAIPTvQQBBA_89_D4arM9z7YxAGRjkrEtlnGBxRH4Z0ZFPg9yDAVEo2dLrlCzWcfNbVeJsdxkXMS9fr2iQM3Dmn_KZBkEpu19shz5lzNIs2vAo__U8xEE63WcDFlFa1r8fD2Ieg?width=4649&height=2622&cropmode=none)

しかし、Windows, Linux両対応となると、論理的なローカルコネクティビティで異なるOSにも対応しているものは限られてくる。実質Alljoynのみ。

# 解決方法はファイル渡し

![画像](https://iyci4g.bl.files.1drv.com/y4mFRO-KM9dgHxVUrLUNAV4zsuXa17jtZELJ6IPXN03X2DVWTEXIVxeNwOzhAnTI4HhF0tsEHQRMLlkbnXCH6RdZwsX6aVE-VgpluoT7lA-ykFdzkWqJymYXaGedAES6iyrJfOA6hq5xw1JxfeiEpziEQ2jxii6LtaNE_xqLXRooE5Lue-QSabkeUCPIkcOQyxXnXWCoqY_yw5Q2CX0gGKT_Q?width=4647&height=2623&cropmode=none)

レガシーな方法ではあるが、ものすごく安定する。排他制御についても、どのようなOSもファイルの排他制御は実装されているので、確実である。

高速化についても、最近のOSはハードディスクではなく、SSDなどになっているし、RAMなどを利用した高速化なども検討できる。

また、エラー発生時にもファイルに最後の値が残っているので、デバッグがやりやすいし、逆に結果を削除したければファイルを削除しやすい。

データ形式はJSONなので、確認も楽である。

# 応用事例
![参考](https://kyajvw.bl.files.1drv.com/y4mwDe4MK6_hJ5H7ufd3dSWhyT5iXJPWKtCfvtYpednNkl_aIKWK2i12xVIKvwTfXtGmOUlUAcUcDugICdVe-mYrvd-WcU7PWS5OU4O-dgfEils0ot8_lmwrCyuEfM06_JC6Boh3nrm3GghTBiZMJRwM0gUf7cwxfO-CTntcgSKF5e9wMxkj4-QCxVw8F-ks0UTHZjbpIEHEFseafB3aav7lA?width=4032&height=3024&cropmode=none)

インタフェース誌という雑誌に、電池の心配無用のIoT、半永久的CO2センシングとして紹介されている。

## 応用事例の構成図

![構成図](https://liajvw.bl.files.1drv.com/y4miCquhhYS2mel4EbPeBQUPMfI_xkDFqpM-XWbFZL98oE43jzqmpJ6d6SFFgHRuTFpi2VVczARy_nxEXjOXKLC5gqiqRu57t4-KJ6zq6ME75DwwgHJH05zFj2ZrDGXYBuV4qV3bmDxEt2ciCbM1TdWVa_QCvpDKkESbZsBd1weg_qBOy3oVENi2v6mgEfkJ3TIOPtjXHzTL-aM3kjOLs8NPQ?width=4032&height=3024&cropmode=none)

図面上部のBrige Fileと記載されいる箇所が実際にやり取りされているファイル

# 今後の予定

![画像](https://vyk6vq.bl.files.1drv.com/y4mC532VgNtZtCyHIzl3FzQZKtI_KJbonYVJASGAeIblamNfW9LtIHPzUlpOfK7vYNOeHd_ITUOCkmAERpQAKKtL5OgHa7OxNHebdk4LovsopyUGT8hOWSw8jxwgQxveAvwBgpZq1ees5aK427M5C169RCHuCp-gmCVsLk6n21-4GK12rcCTCokSrTkW_UV6kc-6kEFg0kEbgEBKX50g7nUdw?width=4568&height=2668&cropmode=none)

* IoT Edge V2対応
* Edge Computing対応
* メッセージ対応
* データ受信イベント、差分データ対応
* 応用事例の拡張（LoRa、Web APIによるシミュレータ）