Mozillaは先頃、これまでProject Thingsと呼ばれていたオープンソースIoTプラットフォームを、WebThingsとしてリリースした。ロギング、アラーム、ネットワークなど、一連の機能を提供する。
Mozilla WebThingsは、新たにW3Cが作成したWeb of Things標準の、オープンソースによる実装である。W3CのWeb of Thingsは、最近設立されたWeb of Thingsワーキンググループを通じて、IoTの断片化低減を目指すイニシアティブである。W3Cは、Web of Things標準の開発に着手するに際して、開発コストの削減、投資家と顧客双方のリスク軽減、IoTデバイスとサービスの市場における急成長の促進を目標に置いている。
Mozilla WebThingsは、デバイスをWeb上で監視し制御する、オープンプラットフォームである。スマートホームゲートウェイ用にプライバシ、セキュリティ、相互運用性を重視して設計されたWebThings Gatewayと、開発者が独自のWeb of Thingsを構築するためのWebThings Frameworkという、2つのコアコンポーネントから構成されている。
WebThings Gateway
WebThings Gatewayは、ユーザがWeb経由でスマートホームを監視および制御するためのソフトウェアである。WebThings Gatewayを使用することで、例えば、ドアが何度開閉されたか、プラグインされた電気器具がどれだけの電力を消費しているか、といったことを確認できる。これを実行するには、[main menu] > [Setting] > [Experiments] の順に進み、[Logs]オプションを有効にする必要がある。
WebThings Gatewayでは、新たに煙探知機や一酸化炭素警報機、盗難警報機などの警報機能をデバイスに提供するようになった。これにより、アラームが現在アクティブになっているかを確認し、アラーム発生時に通知するように、ルールを設定することが可能になる。
WebThing Gateway 0.8では、Webインターフェースからゲートウェイネットワーク設定を再設定することが可能だ。さらに、イーサネットポートを動的ないし静的IPアドレスで設定したり、あるいは利用可能なワイヤレスネットワークを再スキャンしてゲートウェイが接続されているWi-Fiアクセスポイントを変更することもできる。
WebThings Framework
WebThings Frameworkは、Web Thing APIを直接公開する独自Web Thingsの開発支援のために設計された、再利用可能なソフトウェアコンポーネントのコレクションである。Web Things APIは、単純かつ具体的なシリアライゼーションとプロトコルを定義することにより、Web of Thingsの抽象データモデルおよびAPIに関するThings Working Groupの成果を補完することを目的としている。Web Thing REST APIとWeb Thing WebSocket APIによって、Webクライアントは、デバイスのプロパティへのアクセス、アクション実行の要求、状態変化を示すイベントのサブスクライブが可能になる。
WebThingsライブラリは、Java、Python、Node.js、Rustなどの言語で公式に利用可能だ。Javaによる調光可能ライトの実装を見てみよう。
まず、プロジェクトに次の依存関係を追加する。
<dependencies>
<dependency>
<groupId>org.mozilla.iot</groupId>
<artifactId>webthing</artifactId>
<version>LATEST</version>
</dependency>
</dependencies>
次に、新しいThingを生成した上で、
Thing light = new Thing("My Lamp",
new JSONArray(Arrays.asList("OnOffSwitch", "Light")),
"A web connected lamp");
on、brightnessという2つのプロパティを追加する。
JSONObject onDescription = new JSONObject();
onDescription.put("@type", "OnOffProperty");
onDescription.put("title", "On/Off");
onDescription.put("type", "boolean");
onDescription.put("description", "Whether the lamp is turned on");
Value<Boolean> on = new Value<>(true,
// Here, you could send a signal to
// the GPIO that switches the lamp
// off
v -> System.out.printf(
"On-State is now %s\n",
v));
light.addProperty(new Property(light, "on", on, onDescription));
後は、新たに生成したThingをサーバに追加して起動すればよい。
try {
WebThingServer server = new WebThingServer(new SingleThing(light), 8888);
Runtime.getRuntime().addShutdownHook(new Thread() {
public void run() {
server.stop();
}
});
server.start(false);
} catch (IOException e) {
System.out.println(e);
System.exit(1);
}
上記のコードでは、サーバを起動し、WoT REST API経由でライトを利用可能にした上で、ローカルネットワーク上の発見可能なリソースとしてアナウンスしている。
詳細はMozilla IoT Webサイトと、WebThings GatewayとWebThings Frameworkに関する開発者向け資料で確認できる。このドキュメンテーションに貢献したい開発者は、GitHubレポジトリ経由で参加が可能だ。