Edited at

PythonでECHONET Lite家電を操作

More than 1 year has passed since last update.


はじめに

pythonでECHONET Liteによる家電操作のサンプルコードを載せます。

※ECHONET Lite(ISO/IEC 14543-4-3)国際規格

やりたいことは

1. 家電製品のON,OFF制御

2. 家電機器の動作状態の取得

Ruby版はRubyでECHONET Lite家電を制御するにありますので そちらを見てください。

※ 以下のサンプルプログラムは空気清浄機をターゲットにしています。

  エアコンや照明を制御したい場合は、上記のRuby版に詳しく書いてあるので、そちらを参考にしてください。


環境

● 空気清浄機(ECHONET Lite対応)

 ⇒ Sharp KI-EX100

● Windows 7

● Python 2.7.11


動作状態をONにする

ip = "192.168.○.○"の部分は各自の機器のIPをしてしてください


ON_send.py

# 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にする


OFF_send.py

# 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"


動作状態の確認を行う

家電機器の動作状態のリクエストを送信するプログラムと

家電機器から動作状態を受信するプログラムにわけて説明します。


送信プログラム


get_send.py

# 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))



受信プログラム


receive.py

# 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行目を入れましたが、必要ないコードなので消してください。

図1.jpg

ちなみに、サンプルコードの9行目の



data[0].endode("hex")



はpython2系のみ動作するみたいです。なので3系は試していないので、16進数にするエンコード方法をご自身で探して実行してください。

3系とか2系とか何を言っているかわからなかった場合はコマンドプロンプトもしくはターミナルで以下を実行



$ python --version



表示が

python 2.○.○ の場合は 2系です

python 3.○.○ の場合は 3系です