2015年7月11日 星期六

小K智能插座 破解



會寫這篇原因
主要是自己用的兩顆小K一代,剛開始買回用時,連線都很順暢
隨時隨地都可以在外遠端連線,控制家裡的開關(所以後來又加買一顆共兩顆)
但到後來,越來越難連上小K,常常出現"網路超時"的畫面
發現他的Server是在中國大陸,可能台灣連過去反應都比較慢
所以常常會造成超時timeout,最近更是誇張....連個10次有8~9次失敗
加上他的設計我覺得真的很差
設定wifi完成後,它也不能在同個區網下控制
他的設計就是不管在家或是在外面,一定要連上小K Server ,然後再連控到end user app控制端...
哪天Server掛了或這家公司倒了..那小K不就變廢物了?
(雖然有直連模式...但很不方便吧)

Wan & Lan:
小K  ==>  小K 大陸Server  ==>  手機APP 

這個在如果在外面我可以理解,但在家的區網何必多此一舉呢?
如果分成兩個模式如下不是更好嗎?

Wan下:
小K  ==>  小K 大陸Server  ==>  手機APP 
Lan下:
小K  ==>  Home Lan區網  ==>  手機APP 

....這造成我連在家區網都會出現反映超時的窘境,等於這兩顆小K變沒用了..
所以我開始透過Google 尋找解決的方式..才有這篇文章
記錄下來,順便memo一下

此方式就是繞過小K Server ,直連小K
好處是速度快&穩定,且如果你家有實體IP的話..同樣也可在外利用手機4G連回家控制
且就算小K公司倒了...你的小K也不會變成廢物!!
如果沒實體IP的社區網路..也可透過forward port方式來達到目的


美版小K一代


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

先讓小K連上你的家裡區網
先讓小K重置
按住小K的按鈕4秒 .... 等20秒藍燈開始閃爍後
透過手機APP連線後設定你家的WIFI密碼後即可

連上你家的Router 查看連線IP
連上你家的無線AP
進入DHCP Client List 查詢你的小K虛擬IP是多少
通常MAC開頭是00-15-61開頭的...就是小K沒錯了....如下圖
我這邊的IP是192.168.11.4  & 192.168.11.5
DHCP Client List



SSH登入小K
這裡需要用SSH Client軟體登入小K
我是用putty
可到這邊官網下在
http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html
key入IP後即可連線
putty介面

























會提示輸入帳號,請輸入root
密碼用這幾個試試看 admin &  1234  & p9z34c
如果還是連不上,應該是SSH mode被關掉了
先用telnet軟體連上小K,設定好密碼SSH就可連了
我這邊是用PCMAN連的,連上後最上面有個提示
會出現下面畫面叫你輸入passwd來設定密碼
設定完後telnet模式就會被關閉,並啟用SSH連線
未來也只能SSH連線

Telnet 登入小K 設密碼&開啟SSH mode
telnet連線小K



























在#號後輸入passwd 來設定你的密碼
設定完成再回到putty用SSH連線,如下

重回Putty ..SSH登入小K
SSH連線小K
























自建relay.cgi   用網頁介面切換小K的 on / off
登入後輸入如下
cd /
cd www
mkdir cgi-bin
cd cgi-bin
vi relay.cgi

這裡簡單介紹進入vi的使用方式:
進入後只是觀看模式並無法編輯
按insert鍵後即可開始編輯
按esc鍵後是進入觀看模式..這是無法編輯的
如果要跳出並儲存,先按esc鍵進入觀看模式接著輸入:wq
就會儲存並跳出了
如果你不想儲存只要跳出,請輸入:q!
就會不儲存&強制跳出了
關於SSH 一些指令請自行學習吧

按一下insert鍵進入編輯模式

把這串貼上
#!/bin/sh
echo "Content-Type: text/plain"
echo "Cache-Control: no-cache, must-revalidate"
echo "Expires: Sat, 26 Jul 1997 05:00:00 GMT"
echo

RELAY_CTRL=/sys/class/leds/tp-link:blue:relay/brightness

case "$QUERY_STRING" in
 state) 
  case "`cat $RELAY_CTRL`" in
   0) echo "OFF"
   ;;
   1) echo "ON"
   ;;
  esac
 ;;
 on) 
  echo 1 > $RELAY_CTRL
  echo ON OK
 ;;
 off) 
  echo 0 > $RELAY_CTRL
  echo OFF OK
 ;;
esac

然後按esc鍵
再輸入 :wq
按enter跳出並儲存

接著輸入
chmod -R 0755 /www/
chmod +x /www/cgi-bin/rlay.cgi
以上指令是打開權限設定
接著你可以去用網頁瀏覽器輸入如下文字就可以在區網下簡單控制小K on & off 了
如果想要在外WAN遠端開啟,需要去AP設定forward port到小K IP ..這樣就可遠端控制了
P.S your_device_ip 就是輸入你的區網ip

打開
http://your_device_ip/cgi-bin/relay.cgi?on
關閉
http://your_device_ip/cgi-bin/relay.cgi?off

修改定時任務表
登入後,切換到etc 資料夾
輸入如下
cd /
cd etc
vi online.txt
按insert鍵進行編輯
會看到如下,可自行新增&刪除定時任務表
完成後按esc 再輸入:wq 跳出儲存,定時任務表就設定完成了
然後記得輸入reboot
這樣重開機才會載入設定值


對應的設定值參考下表

1 : Sunday
2~7 : Monday ~Saturday
online.txt

對應的APP文字



好累...還有一堆好玩的 有時間再補

===========================================
2015/08/12 update

接下來還有個特別功能
可參考homedash網站..直接在書籤網頁裡切換開關

切換到www/cgi-bin裡新增json.cgi 
SSH登入後 , 輸入如下:

cd /
cd www
mkdir cgi-bin
cd cgi-bin
vi json.cgi

這裡再次簡單介紹進入vi的使用方式:
進入後只是觀看模式並無法編輯
按insert鍵後即可開始編輯
按esc鍵後是進入觀看模式..這是無法編輯的
如果要跳出並儲存,先按esc鍵進入觀看模式接著輸入:wq
就會儲存並跳出了
如果你不想儲存只要跳出,請輸入:q!
就會不儲存&強制跳出了
關於SSH 一些指令請自行學習吧

按一下insert鍵進入編輯模式

把這串貼上

#!/bin/sh
echo "Content-Type: application/javascript"
echo "Cache-Control: no-cache, must-revalidate"
echo "Expires: Sat, 26 Jul 1997 05:00:00 GMT"
echo
VERSION=0.0.1
RELAY_CTRL=/sys/class/leds/tp-link:blue:relay/brightness
TIMINGS=`tail -n+3 /etc/online.txt | sed ':a;N;$!ba;s/\n/","/g'`
IP_ADDRESS=`ifconfig wlan0 | sed ':a;N;$!ba;s/\n/","/g' | grep -E -o '[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+' | head -n 1`
get=$(echo "$QUERY_STRING" | sed -n 's/^.*get=\([^&]*\).*$/\1/p' | sed "s/%20/ /g")
set=$(echo "$QUERY_STRING" | sed -n 's/^.*set=\([^&]*\).*$/\1/p' | sed "s/%20/ /g")
callback=$(echo "$QUERY_STRING" | sed -n 's/^.*callback=\([^&]*\).*$/\1/p' | sed "s/%20/ /g")
case "$get" in
  state)
    case "`cat $RELAY_CTRL`" in
      0) echo "$callback({\"state\":\"off\"})"
      ;;
      1) echo "$callback({\"state\":\"on\"})"
      ;;
    esac
  ;;
  timing)
    echo "$callback({\"timings\":[\"$TIMINGS\"]})"
  ;;
esac
case "$set" in
  on)
    echo 1 > $RELAY_CTRL
    echo "$callback({\"ok\":true})"
  ;;
  off)
    echo 0 > $RELAY_CTRL
    echo "$callback({\"ok\":true})"
  ;;
esac
if [ -z "$get" ] && [ -z "$set" ]; then
  echo "$callback({\"info\":{\"name\":\"kankun-json\",\"version\":\"$VERSION\",\"ipAddress\":\"$IP_ADDRESS\"},\"links\":{\"meta\":{\"state\":\"http://$IP_ADDRESS/cgi-bin/json.cgi?get=state\",\"timing\":\"http://$IP_ADDRESS/cgi-bin/json.cgi?get=timing\"},\"actions\":{\"on\":\"http://$IP_ADDRESS/cgi-bin/json.cgi?set=on\",\"off\":\"http://$IP_ADDRESS/cgi-bin/json.cgi?set=off\"}}})"
fi

然後按esc鍵
再輸入 :wq
按enter跳出並儲存
接著輸入
chmod -R 0755 /www/
chmod +x /www/cgi-bin/json.cgi
以上指令是打開權限設定
接著開啟瀏覽器
在網址列輸入如下
http://x.x.x.x/cgi-bin/json.cgi
(x.x.x.x 是你的小K區網IP)
如果出現
({"info":{"name":"kankun-json","version":"0.0.1","ipAddress":"10.0.0.43"},"links":{"meta":{"state":"http://10.0.0.43/cgi-bin/json.cgi?get=state","timing":"http://10.0.0.43/cgi-bin/json.cgi?get=timing"},"actions":{"on":"http://10.0.0.43/cgi-bin/json.cgi?set=on","off":"http://10.0.0.43/cgi-bin/json.cgi?set=off"}}})
代表你json.cgi安裝成功

接著你可以在瀏覽器切換到這個網頁

會出現

你就可以按左方綠色的 " + " 鍵來新增開關鈕囉..

=======================================
2015/12/31 update

新增直接登入ip web畫面就可on/off開關 & ondelay/offdelay設定

將此網頁作者 Japh 的檔案zip打包下載
並利用PuTTY的程式pscp.exe上傳打包的目錄至www資料夾
P.S : PSCP.EXE  這邊下載
上傳後要去編輯一下swtiches.json這個檔案..把你的小K的IP輸入進去順便改名稱

上傳指令:
PSCP -scp -r c:\test root@x.x.x.x:/www

-r是指整個 資料夾上傳 , 如果單一檔案不須加-r
-scp 不清楚什麼意思..但不加就是無法上傳成功

刪除檔案可用 rm 檔名稱
刪除資料夾 rm -rf 資料夾名稱

安裝完成後只要輸入ip , 即可有web的開關頁面可控制

也可以使用windows版的scp 比較方便..還可以直接編輯檔案

======================
將myhomedash所需的request檔案移到本身小K的主機上