はじめまして。インターネット・アカデミー ECHONET IoTマスター制度担当広報の吉政でございます。
本連載では、IoT家電やセンサーなどを活用したアプリ開発やサービス設計に欠かせない通信プロトコル「ECHONET Lite」を体験していただきます。安価で気軽に扱える機器を使いながら、「ECHONET Lite」によるIoTの活用に興味をもっていただけたら幸いです。まずは今回より複数回にわたり、スマートハウスの照明を制御するプログラミングを紹介していきます。
スマートホームの市場動向
さて、インターネットで「スマートホーム 市場」で検索すると、さまざまな市場調査データが公開されていることがわかります。多くのスマートホームの世界市場の調査結果では、今後5年間で10倍前後の市場規模に達すると予想されています。こうしたことからも、スマートホームが今後発展していくことに疑いを持つ人はいないと思います。
日本はどうかというと、スマートホームの代表的な規格の一つであるECHONET Lite規格に対応した製品の出荷状況から、その市場成長が見えてきます。日本で2013年度から2021年度までに出荷されたスマートメータを除くECHONET Lite搭載機器の出荷状況を見ると、この5年で3倍以上に伸びています。
マーケッターとしての見解を述べさせていただくと、新しい技術や製品は接続する機種の増加やその普及によって、ある一定数を超える段階で大きく増加に転じることが多い傾向があります。また、大半の技術や製品は普及率30%を超えた辺りから一気に普及する傾向があり、現時点において日本では数%の普及にとどまっているスマートホームは成長を期待できる分野と言えると思います。
そして、スマートホームの普及が数%にとどまっている最大の原因は、スマートホームやデバイスの大半が、メーカーの枠を越えた互換性がなかったことと考えられます。本連載で紹介する「ECHONET Lite」は業界団体であるエコーネット・コンソーシアムが運営していますが、国際標準規格としても承認されており、まさにメーカーの枠を越えた互換性をスマートホームで実現する技術です。次の時代につながる技術を模索している方にぜひ注目いただきたい技術です。
エコーネットとは
エコーネットは、スマートホームを実現する通信プロトコルです。スマートホームの普及にあたっては、どのメーカーの機器でも通信できるプロトコルが必要であり、その役割を果たすのがエコーネットです。
本連載で紹介するエコーネットが定めた「ECHONET Lite規格」は、2012年2月に経済産業省が設置したスマートハウス標準化検討会においてHEMSにおける公知な標準インタフェースとして推奨されています。さらに2015年には、国際標準として承認されました。今回から、Echonet LiteとPythonを使って、エミュレートしたスマートハウスの照明を制御する方法を紹介します。
準備
ハードウェアはPCを1台用意すれば十分です。 PCに以下の2つの環境をインストールします。
エミュレーターの準備
ECHONET Liteのエミュレーターである「MoekadenRoom」を使用し、ECHONET Liteの実験を行います。同ソフトはソニーコンピュータサイエンス研究所が作成したエミュレーターであり、エアコン、照明、電動ブラインド、電子錠、温度計、スマートメーターの合計6種類の機器が含まれています。
Github page でご自身のOSに合わせたバージョンをダウンロードします。Githubからエミュレーターをダウンロードしたら、MoekadenRoom.exeを実行してインストールしてください(Windows x64シリーズのOSの場合、あらかじめJava をインストールしてください)。
Python開発環境の準備
今回はエミュレーターに対してPythonプログラムでコントロールします。そのため、事前にPython開発環境をインストールします。
実行
いよいよPythonを使ってEchonet Liteを呼び出し、家電を制御してみます。「smart_house.py」というファイルを新規に作成し、以下のコードを記述して保存します。
#Author: Internet Academy
# Code to control Moekaden Room - Emulated Virtual Home (https://github.com/SonyCSL/MoekadenRoom)
#
import socket
import binascii
def send_command(value):
ip = '127.0.0.1' #This is ip of localhost as emulator is running on the same system
ECHONETport = 3610 #Port used by Echonet Lite to communicate
format_echonet_lite = ['EHD', 'TID', 'SEOJ', 'DEOJ', 'ESV', 'OPC', 'EPC', 'PDC', 'EDT']
lightVal = ""
if(value==1):
lightVal = '30'
elif(value==0):
lightVal = '31'
else:
print("Invalid Input")
return;
data_format = {
format_echonet_lite[0]: '1081',
format_echonet_lite[1]: '0000',
format_echonet_lite[2]: '05FF01',
format_echonet_lite[3]: '029001',
format_echonet_lite[4]: '60',
format_echonet_lite[5]: '01',
format_echonet_lite[6]: '80',
format_echonet_lite[7]: '01',
format_echonet_lite[8]: lightVal
}
frame = ''
for key in format_echonet_lite:
frame += data_format[key]
msg = binascii.unhexlify(frame)
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.sendto(msg, (ip, ECHONETport))
print("ライトのトグルに成功。!!!")
def getInput():
print("#########################################")
print("照明のON/OFFをしたいですか?")
print("オン-1、オフ-0")
val = int(input("あなたの意見を待っています...\n"))
print("#########################################")
send_command(val)
if __name__ == '__main__':
while(1):
getInput();
コマンドプロンプト(端末)から「python smart_house.py」を実行し、 “1”または “0” を入力してみます。“1”を入力した場合は照明がオンになり、“0”を入力した場合は照明がオフになります。
今回は上記のPythonプログラムを動かすPCに、ECHONET Liteのエミュレーター(サーバ)をインストールしているため、ECHONET Liteで接続するための場所はlocalhostです。
また、ECHONET Liteのポート番号はデフォルトで3610です。あとは、ECHONET Liteの仕様に基づき、数字で記述された命令(バイナリデータ)を投げることでエミュレーター上の照明を制御することが可能になります。
今回は、まずはECHONET Liteのプログラミングのイメージを持っていただくため、比較的簡単な例を紹介しました。次回はECHONET Liteにおけるコードの意味を確認していきます。また、本格的に学習されたい方はECHONET IoTマスター制度のECHONET 2.0技術セミナーに参加されることをオススメします。