15
15

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

PythonでECHONET Lite家電を操作

Last updated at Posted at 2016-10-05

はじめに

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系です

15
15
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
15
15

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?