絖綛 N@i.jp  昨日:00043024
 今日:00006697
 総計:00299153
keywords
管理者専用
  Post   Add link   Control Panel 































新しいトピック
最新:04/16 19:55


新しいコメント
最新:07/28 16:47






管理人へMAIL

プライバシーポリシー

WeMoをWebからオン/オフできるようにしてみた

全部をここに書くことはできないけど


 実家にあるBelkin WeMo, WeMo Insightですが、iPhoneアプリからだけでなく Webでもオン/オフできるようにしてみました。方法を全部書いてしまうと、ハッキングされて勝手にWeMoを操作されてしまうおそれがあるので概要だけ紹介します。

 WeMoはWi-FiルータのDHCPからIPアドレスをもらって動くので、先ずWeMoのIPアドレスを調べることが必要になります。WeMoはUPnP機器ですので、SSDPという特殊なパケットを送信し、返事を帰してきた機器の中からWeMoを探し出します。UPnP対応機器を探し出す方法については、こちらのsearchRootDevice.py というPythonスクリプトを利用させていただきました。実行には Pythonが必要になりますが、MacOS Xには最初から Python 2.xxが入っていますので、問題なく実行できるはず。スクリプトを実行すると、

$ ./searchRootDevice.py
from ('192.168.xx.xx', 3250)
HTTP/1.1 200 OK
CACHE-CONTROL: max-age=86400
DATE: Wed, 11 Feb 2015 14:31:44 GMT
EXT:
LOCATION: http://192.168.xx.xx:49153/setup.xml
OPT: "http://schemas.upnp.org/upnp/1/0/"; ns=01
01-NLS: 905a423c-1dd2-11b2-8284-cb16daf5fb57
SERVER: Unspecified, UPnP/1.0, Unspecified
X-User-Agent: redsonic
ST: upnp:rootdevice
USN: uuid:Insight-1_0-221437K12000E5::upnp:rootdevice


========================================

といった内容がぞろぞろ〜っと出力されます。その中からWeMoを探し出します。上はWeMo Insightなのですが、何を見てWeMoであると判断すれば良いのかが問題です。本当は LOCATION: で示されているURLにアクセスして帰ってくるxmlを見て判断するべきでしょうが、面倒なので安直にポート番号で判断します。WeMoのポート番号は 49153〜49155 らしいのですが、ポート番号が変わる理由は良く分かっていません。現在ウチにあるWeMo、WeMo Insightのポート番号は両方とも49153でしたので、これでWeMoであると判断することにしました。

 LOCATION: で示された URLにアクセスしてみると、

$ curl -s http://192.168.xx.xx:49153/setup.xml
<?xml version="1.0"?>
<root xmlns="urn:Belkin:device-1-0">
  <specVersion>
    <major>1</major>
    <minor>0</minor>
  </specVersion>
  <device>
<deviceType>urn:Belkin:device:insight:1</deviceType>
<friendlyName>Mac mini Switch</friendlyName>
    <manufacturer>Belkin International Inc.</manufacturer>
    <manufacturerURL>http://www.belkin.com</manufacturerURL>
    <modelDescription>Belkin Insight 1.0</modelDescription>
    <modelName>Insight</modelName>
    <modelNumber>1.0</modelNumber>
    <modelURL>http://www.belkin.com/plugin/</modelURL>
<serialNumber>2a1b1cKd1x0y4z</serialNumber>
〜略〜
</device>
</root>

と、WeMo機器の情報や<friendlyName>タグでは自分が付けたWeMoの名前を得ることができますし、この後に利用可能なサービスがずら〜っと出力されて来ます。

 IPアドレスが分かったら、次はWeMoを制御するスクリプトです。制御スクリプト wemo_control.sh はこちらから入手しました。このスクリプトでは最初に49152〜49155のポート番号をチェックしていますが、今回はポート番号49153決め打ちですから、ポート番号のチェック処理を削除して PORT=49153 に書き換えてしまいました。使い方は、

$ ./wemo_control.sh 192.168.xx.xx OFF
0
$ ./wemo_control.sh 192.168.xx.xx ON
1
$ ./wemo_control.sh 192.168.xx.xx GETSTATE
ON

です。

 以上で材料は揃いましたので、これらを結びつけてCGIとしてWebから呼び出せるようにします。その際、誰でも呼び出せてしまったら困るので、Apacheの設定(.htaccess, .htpasswd)で認証をパスしなければアクセスできないようしておきました。
1) "/etc/httpd/httpd.conf" の設定変更(CGIの有効化)

<Directory /Users/*/Sites>
    AllowOverride FileInfo AuthConfig Limit
    AddHandler cgi-script cgi
    Options MultiViews Indexes SymLinksIfOwnerMatch ExecCGI IncludesNoExec
    <Limit GET POST OPTIONS PROPFIND>
        Order allow,deny
        Allow from all
    </Limit>
    <LimitExcept GET POST OPTIONS PROPFIND>
        Order deny,allow
        Deny from all
    </LimitExcept>
</Directory>

2) "~/Sites/.htaccess" の作成
 任意のエディタで以下のファイルを作成します。
AuthUserFile	/Users/hoge/Sites/.htpasswd
AuthGroupFile	/dev/null
AuthName	"Please Enter UserID and Password"
AuthType	Basic
Require		valid-user
 owner, group をwwwに変更し、read権のみにしておきます。
# chown www:www .htaccess
# chmod 400 .htaccess

3) .htpasswdファイルの作成
# htpasswd -c /Users/hoge/Sites/.htpasswd hoge
New password:
Re-type new password:
Adding password for user hoge
# chown www:www /Users/hoge/Sites/.htpasswd
# chmod 400 /Users/hoge/Sites/.htpasswd


 こうして作ったのが、

こんな感じのホームページ(CGI)です。これで iPhoneがバッテリ切れ等で使えないとか、将来WeMoアプリがアップデートされなくなって動かないような事になってもWeMoを操作することは可能と言うわけです。


< 過去の記事 [ 4月の 全てのカテゴリ リスト ] 新しい記事 >

2024 calendar
4月
123456
78910111213
14151617181920
21222324252627
282930


掲示板
最新:08/15 17:19


GsBlog was developed by GUSTAV, Copyright(C) 2003, Web Application Factory All Rights Reserved.