はじめに
ECHONET Lite は家電製品をネットワークで制御するプロトコルです。
今回はRubyでシンプルなECHONET Liteの制御プログラムを載せます。
※ECHONET Lite(ISO/IEC 14543-4-3)国際規格
やりたいことは
- 家電製品のON,OFF制御
- 家電機器の動作状態の取得
対象者は
「ECHONET Liteって何ができるの?」「とりあえず動かしてみたい」って人向けです。
※もちろん規格書みたいな堅苦しいことは書きません
環境
● 空気清浄機(ECHONET Lite対応)
⇒ Sharp KI-EX100
● Windows
● Ruby v2.2.4
#1. 家電製品のON,OFF制御
上記の空気清浄機のON, OFF制御を行うサンプルコードです。
「ECHONET Lite入門 スマートハウスの通信技術を学ぼう!」 を参考にしています。
ip = "192.168..." のところはご自身の環境に合せて記入してください。
動作状態をONにする
require "socket"
#空気清浄機のIPアドレス
ip="192.168.2.166"
msg=[
0x10,0x81,
0x00,0x00,
0x05,0xFF,0x01,
0x01,0x35,0x01,
0x61,0x01,
0x80,0x01,
0x30
].pack("C*")
u = UDPSocket.new()
u.connect(ip,3610)
u.send(msg,0)
u.close
##動作状態をOFFにする
require "socket"
//空気清浄機のIPアドレス
ip="192.168.2.166"
msg=[
0x10,0x81,
0x00,0x00,
0x05,0xFF,0x01,
0x01,0x35,0x01,
0x61,0x01,
0x80,0x01,
0x31
].pack("C*")
u = UDPSocket.new()
u.connect(ip,3610)
u.send(msg,0)
u.close
変わったのは msgの配列の中身で(13行目)
0x30 ⇒ 0x31
になっただけです。
空気清浄機以外の家電を動かしたかった場合
今回は例として空気清浄機を上げましたが、
エアコンや照明をON,OFF制御したい。。。
って場合があると思います。
そんな時は以下のところを変更してください
#空気清浄機のOFF制御
msg=[
0x10,0x81,
0x00,0x00,
0x05,0xFF,0x01,
0x01,0x35,0x01,
0x61,0x01,
0x80,0x01,
0x31
].pack("C*")
#エアコンのOFF制御
msg=[
0x10,0x81,
0x00,0x00,
0x05,0xFF,0x01,
0x01,0x30,0x01,
0x61,0x01,
0x80,0x01,
0x31
].pack("C*")
照明のOFF制御
msg=[
0x10,0x81,
0x00,0x00,
0x05,0xFF,0x01,
0x02,0x90,0x01,
0x61,0x01,
0x80,0x01,
0x31
].pack("C*")
変わったのは10行目の
空気清浄機の場合
0x01,0x35,0x01,
↓
エアコン
0x01,0x30,0x01,
照明
0x02,0x90,0x01,
だけです。
2. 家電機器の動作状態の取得
空気清浄機の動作状態を取得したいと思います。
今回の場合はわかりやすいように、
状態取得のリクエストを送信するプログラムと
受信プログラム
に分けたいと思います。
##送信プログラム
※先ほどのコードと少し変わっています!
require "socket"
#空気清浄機のIP
ip="192.168.2.166"
msg=[
0x10,0x81,
0x00,0x00,
0x05,0xFF,0x01,
0x01,0x35,0x01,
0x62,0x01,
0x80,0x00
].pack("C*")
u = UDPSocket.new()
u.connect(ip,3610)
u.send(msg,0)
u.close
##受信プログラム
require 'socket'
udps = UDPSocket.open()
port = 3610
udps.bind('0.0.0.0',port)
loop do
data = udps.recv(65535).chomp
puts data.unpack("H*")
end
udps.close
うまいこといけば以下の文字列が表示されるはず!!
ONの時
1081000001350105ff017201800130
OFFの時
1081000001350105ff017201800131
##受信できなかったときの原因
- 空気清浄機以外の家電でやろうとしている
⇒ 上記のサンプルコードは空気清浄機を対象にしています。1の制御プログラムの時にやったmsg内を変更する要領やってくだい - ファイアーウォールの設定
⇒ ECHONET Liteはポート3610 を使用してます。
ファイアーウォールで3610ポートをブロックしていると機器からのパケットが受信できないのでポートの開放をしてください。