■ネットワークを使って何をやりたいか
そもそもなぜ組込機器にネットワークを入れたくなったのか、です。それによってプロトコルスタックやネットワークデバイスに必要な機能・性能も変わってきますので、まずここを考えましょう。A) クラウド、サーバに情報を送りたい
組込機器で得られたなんらかの情報をLAN上やクラウドのサーバに送信するパターンです。データを受信するサーバ側も自社で開発するならデータを送信するプロトコルも独自開発するかもしれませんが、できれば既存の仕組みに乗っかりたいところです。AWSやAzureなどクラウドへ情報送信するIoTデバイスにするならMQTTSかHTTPSを使用することになるでしょう。白物家電や家庭内センサ情報をサーバで管理するHEMS(Home Energy Management System)を考えるとECHONET Liteというプロトコルを使用することになるかもしれません。クラウドを使わないでインターネット経由で情報を渡す方法として、組込機器からメールを出すのもあり得ます。一昔前はプロバイダから独立してSMTP/POPに対応したメールサーバもいくつかありましたが、悪用されることが多かったためかサービスが激減しました。そんな中でも認証・暗号化がしっかりしたGmailはまだ候補として残っていて、OAuth、SMTPまたはHTTP、TLSで実現できます。
データをファイルの形にして、FTPで送信するパターンもあります。サーバプログラムも豊富に存在したため以前は主流だったと思いますが、データが暗号化されず、ログインのユーザ名パスワードすらも平文で送るFTPは特にインターネットの世界では時代に合わなくなってきました。その場合もTLSを伴ったFTPSに切り替えてセキュア化することで、「ファイルで送る」という仕組みはいまだに選択肢の一つかと思います。
★Centeでは...
MQTTc、HTTPc、FTPd/c、SMTP/POPc、ECHONET Lite、TLSなど、この用途に使用できるミドルウエアをご用意しております。更に、AWS IoT、Azure IoTへ接続する場合のアプリケーションノートをご用意しており、素早い組込機器のIoTデバイス化が可能です。
B) 組込機器の設定・制御をしたい
その昔、組込機器に各種設定を行うI/Fは組込機器にとってはちょっと厄介な問題だったと思います。組込機器自体にボタンや液晶をつけて、という方法は古くからあり、組込機器自体を人が操作するようなもの(ICレコーダなど)ではいまだに主流でしょう。しかし、普段は人が操作しない組込機器の場合や、設定が複雑なもの・今後どんどん機能拡張されていくものの場合、液晶とボタンで操作するのはかなり使いづらい組込機器になってしまいます。そういったものは組込機器側にシェル機能を搭載し、シリアルケーブルでパソコンと接続してターミナルソフトで制御する方法もとられていました。 そういった組込機器の設定・制御をネットワーク経由で遠隔からできないか、という話題です。真っ先に思いつくのがtelnetdです。シェルのI/Oをシリアルからtelnetに変えるだけなので簡単で、実際ルータ含め多くの組込機器がtelnetdを実装してネットワークから便利に設定・制御をしてきました。しかし、これも今では代表的なアタックサーフェスになってしまい、世界中の攻撃プログラムがtelnetのポート番号23が開いている機器をインターネット上で探しているような状況です。製品出荷前までの開発用途であればtelnetdを組込機器に入れるのもありかもしれませんが、製品用ファームウエアであればLAN内での運用だとしてもtelnetではなくSSHにして、認証・暗号化をしっかり対策すべきです。
シェルコマンドは慣れている人じゃないと使いにくいので、いっそのこと独自のプロトコルを規定して組込機器に実装、パソコンのアプリケーションもGUIがきれいなものを独自に開発するパターンもありました。ただ、これだと今度はMac版とWin版どっちをつくるの?対応バージョンは?のような問題がずっとついてまわります。そこで救世主のように現れたのがWebブラウザです。かなり「攻めた」画面デザインにしない限りWindows版でもMac版でもEdgeでもChromeでもそれほど見え方が変わらないですし、組込機器側も一般的なHTTPを使うことができます。暗号化が必要なHTTPSにするなど別のレイヤでケアできる(アプリケーションでケアしなくて良い)ので、現在は組込機器の設定・制御をしたいなら組込機器にHTTPdを入れてパソコンやタブレットのWebブラウザ、という設計が主流と思います。
更に、最近はReact.js、Chart.jsなどインタラクティブなユーザI/Fを構築できるJavaScriptライブラリも登場してきました。組込機器から見るとJavaScriptはWebブラウザに送信するデータの一部なので、組込機器自体には特に機能追加は不要です。タブレットやスマホのWebブラウザから組込機器を設定・制御するのがトレンドになると考えています。
★Centeでは...
シェル、telnetd、HTTPdといったミドルウエアをご用意しております。また、スマホから組込機器を制御するWebUI構築のためのアプリケーションノートをご用意しており、React導入の経験がない方でも実現可能です。
次回、もう少し他のケースも解説します。
■今日の閑話
Centeでは組込機器に必要とされるミドルウエアを提供しようと考えて今のラインナップになっていますが、作ったは良いけどほとんど使われないプロトコルもあります。その最たるものがtelnetcです。組込機器がtelnetでネットワーク上のPCに接続してコマンドを送る、というケースもあるんじゃないかと思って作ったのですが、やっぱり使い道ないでしょうか?そんな理由でSSHcを開発するモチベーションが沸かないのですが、「うちはtelnetcをこうやって使ってるぜ!」という方は是非コメント欄でお知らせいただければと思います。Cente:
https://www.cente.jp/
お問合せはこちら:
https://www.cente.jp/otoiawase/