はじめに
pythonでECHONET Liteによる家電操作のサンプルコードを載せます。
※ECHONET Lite(ISO/IEC 14543-4-3)国際規格
やりたいことは
- 家電製品のON,OFF制御
- 家電機器の動作状態の取得
Ruby版はRubyでECHONET Lite家電を制御するにありますので そちらを見てください。
※ 以下のサンプルプログラムは空気清浄機をターゲットにしています。
エアコンや照明を制御したい場合は、上記のRuby版に詳しく書いてあるので、そちらを参考にしてください。
環境
● 空気清浄機(ECHONET Lite対応)
⇒ Sharp KI-EX100
● Windows 7
● Python 2.7.11
動作状態をONにする
ip = "192.168.○.○"の部分は各自の機器のIPをしてしてください
# coding: utf-8
import socket
ip = "192.168.2.166"
ECHONETport = 3610
message = "1081000005FF010135016101800130"
msg = message.decode("hex")
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.sendto(msg, (ip, ECHONETport))
##動作状態をOFFにする
# coding: utf-8
import socket
ip = "192.168.2.166"
ECHONETport = 3610
message = "1081000005FF010135016101800131"
msg = message.decode("hex")
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.sendto(msg, (ip, ECHONETport))
上記のプログラムで違うのは
7行目の message 変数の中だけ
ONの時
message = "1081000005FF010135016101800130"
OFFの時
message = "1081000005FF010135016101800131"
動作状態の確認を行う
家電機器の動作状態のリクエストを送信するプログラムと
家電機器から動作状態を受信するプログラムにわけて説明します。
##送信プログラム
# coding: utf-8
import socket
ip = "192.168.2.166"
ECHONETport = 3610
message = "1081000005FF0101350162018000"
msg = message.decode("hex")
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.sendto(msg, (ip, ECHONETport))
##受信プログラム
# coding: utf-8
import socket
port = 3610
bufsize = 4096
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.bind(("0.0.0.0", port))
data = sock.recvfrom(bufsize)
print data[0].encode('hex')
print data
sock.close()
上手に受信が出来れば以下のようなメッセージが表示されるはず
正しい情報は1行目です。
2行目は16進数にエンコードされていないので、正しく表示されません。recvformを使うと送信元のIPがわかるので何かと便利ってことを伝えたかっただけです。
今回はテストのためにサンプルコードの11行目を入れましたが、必要ないコードなので消してください。
ちなみに、サンプルコードの9行目の
data[0].endode("hex")
はpython2系のみ動作するみたいです。なので3系は試していないので、16進数にするエンコード方法をご自身で探して実行してください。
3系とか2系とか何を言っているかわからなかった場合はコマンドプロンプトもしくはターミナルで以下を実行
$ python --version
表示が
python 2.○.○ の場合は 2系です
python 3.○.○ の場合は 3系です