Diro's Journey

Programming Cooking Music Photography

我家裡的燈很多,超級多...一直很想要可以用 Homekit 來控制家裡的燈 :-)
image​
目前有幾種解法:
  1. Fibaro:好像有點貴,但它的 Relay Switch 真的很厲害,小小一顆,還能塞到電盒裡面
    image​
  2. 換開關面板,如 Broadlink TC2 之類的:我捨不得把原本的開關面板換掉,畢竟當初 Glatima 系列也是花了不少錢,怎麼能浪費呢...
  3. Philips Hue 燈條、燈泡:目前餐廳主燈是用 Philips Hue,但要我把其它燈條都換掉,一樣...太浪費了,而且我還有很多是 MR12/MR16 的崁燈
所以上面三個方案我沒有一個買單,就這樣一直拖呀拖的,真到那一天...我在 AMAZON 看到了 Shelly 1PM驚為天人。體積跟 Fibaro 的 Relay Switch 差不多大,可以塞到電盒裡,不需要主機,完全跟現有的燈具無縫接軌,而且,一個才 NT$500 左右,真的是很超值啊...
image​
image​

買到之後,要開始安裝了,身為電學白癡的我,研究了很久才搞懂他的線路要怎麼接,首先最重要的是,搞懂那些符號的意義,一切就會很清楚了:
這三個基本的,一般水電知識就有涵蓋:L 火線(Live)  N 零線(Naught)  PE 地線,這邊不會用到
Shelly 1 PM 上有的就複雜多了,但懂了後就會覺得很直覺:
  1. O (OUTPUT):接回去你原本的[燈泡],Shelly 會收到 SW 過來的開關訊號,所以你除了用 App 可以控制,也仍然可以用壁面上的開關來控制
  2. SW (INPUT) :Switch (把開關的 Output 接進來)
  3. L (INPUT):接原本電盒裡的火線,Shelly 也要有電才能工作,這等於是電源供應的
  4. L1 (Output):接回去開關的 火線輸入。原本的開關當然也要有火線
  5. N (INPUT):把原本電盒裡的零線分過來接。同 L 的原因,為了讓 Shelly 有電能工作。
    image​
完工圖,如果你上面說明有讀懂,就會知道 L1 不一定要接,你也可以用 WAGO 接頭直接把電盒裡的火線直接分給Shelly&開關:
image​
好,硬體施工到這完成,記得把電源切掉再動工,以免發生危險。
接下來軟體設定就比較簡單了,首先 Shelly 1PM 會進入 AP Mode,所以連上它,照著說明書把你的 AP SSID/PASSWORD 設定好就可以完成了。
image​ pl
但 Shelly 1PM 本身不支援 Apple Homekit,所以要用 Apple Homekit 操作的話,一樣使用 Homebridge 來橋接即可,已經有人寫好 plugin 了哦:
https://www.npmjs.com/package/homebridge-shelly
image​
因為我家有很多情境燈,我目前是設定成回到家就會開啟一些情境燈(Homekit 的功能)來迎接我,然後在 30 分鐘後會全部自動關閉(Shelly 1PM 的 timer 功能)。此外離家的時候,也能自動把有接上 Shelly 1PM 的燈都關掉 :-)
image​

最後,最大的問題 - 你的電盒裡不一定會有 零線 ...這時候就要想一些變通方式了,例如裝在燈附近,想辦法拉個零線過來,或著從原本管線再補拉零線,不管那一種,都很累人...
這次裝潢的時侯,主臥跟客廳都採用了電動窗簾。客廳採用電動窗簾,最主要的原因是怕傢俱、木作久了會變色,所以想說用了電動窗簾,設定 schedule 後,白天就可以自動把窗簾拉上,增加傢俱及木作的耐用度。



但是這款電動窗簾其實並沒有 schedule 的功能,只有一個無線遙控器,因此只好自己來了 XD

原廠附的遙控器質感還不錯,是採用磁吸式跟掛架結合

我使用了 OpenHAB + RM2 Pro +RM Bridge 來完成第一步。

第一步 - 用 RM Bridge 來控制窗簾
http://rm-bridge.fun2code.de/
原本的 RM2 Pro 就可以透過它的 App 就來控制窗簾了,但 App 並沒有提供任何 API 或者 HTTP command 讓我們透過程式去操作,因此我另外用了 RM Bridge 操作 RM2 Pro。
RM Bridge 本身就有提供 learning code 的介面 http://rm-bridge.fun2code.de/rm_manage/code_learning.html,你可以自己定義指令名稱,然後按下原本的遙控器讓他學習即可。下面則是窗簾、投影機及布幕等學習完的指令清單。接下來只要透過 URL 就可以去發射遙控器訊號了。


當然,RM2 Pro 本身也有提供完整的 SDK,所以其實要全部自己來,不透過 RM Bridge 也是可以的。

第二步 - 整合進入 OpenHAB
http://www.openhab.org/
OpenHAB 是我目前最喜歡的 home automation 平台,因為各式各樣的 binding 非常豐富,從常見的 Philips Hue, Sonos, INSTEON,到 DAIKIN 冷氣,SAMSUNG電視,甚至我的音樂撥放器 SqueezeBox 都有。而一般 RD 最喜歡看到的 HTTP,TCP也都一應俱全,而且如果覺得不夠,也可以自己再擴充,真的是夢幻逸品啊 XD

這裡我是使用 HTTP binding 來跟 RM Bridge 整合。OpenHAB 最困難的地方是它的設定檔,官方網頁開宗明義就有說:很難學,但是很值得 XD

首先要把它加到 OpenHAB 的 item 中,以我的環境為例:
/opt/openhab/configurations/items/demo.items

在最後面加入
Switch  Curtain           "Living Room Curtain"                   { http=">[ON:GET:http://192.168.11.5:7474/code/openit] >[OFF:GET:http://192.168.11.5:7474/code/closeit]" }

這樣就多了一個 type 為 Switch 的 Curtain 物件,並在 ON/OFF 時分別會送不同的 URL

接下來要在 sitemaps 中把這個 Curtain 加進去:
/opt/openhab/configurations/sitemaps/homekit.sitemap

sitemap homekit label="Diro HomeKit" {
  Switch item=Curtain label="Curtain"
  Switch item=Screen label="Screen"
  Switch item=Projector label="Projector"
}

接下來啟動 OpenHAB 後,就可以透過瀏覽器看到:

這樣就可以透過 OpenHAB 去設定 schedule 來定時開關窗簾了。

第三步 - 整合 HomeKit bridge
https://github.com/htreu/OpenHAB-HomeKit-Bridge
最後就是要想辦法跟 SIRI 做整合了,只能說 OpenHAB 實在太強大了,貢獻者眾,竟然已經有人寫好了 HomeKit Bridge!!

因此只要正確的啟動,就沒有問題了
npm start -- --name "myopenhab-bridge" --sitemap homekit

如果平常沒有在用 node.js 的,應該會缺很多 package,基本上補一補就沒什麼問題了
npm install --save-dev babel-preset-es2015
npm install --save-dev babel-preset-stage-2
npm install stdio
npm install hap-nodejs
npm install ws


npm install debug
...

接下來最重要的是要安裝 eve  來編輯 HomeKit database。打開 eve 後,就會有設定介面,並且可以找到 myopenhab-bridge 這個裝置,加進去之後,就可以看到下面所有的設備啦(Curtain, Projector, Screen...)

接下來就跟操作一般 HomeKit 的設備一樣了,設定房間、設備名稱等,然後就可以用 SIRI 來控制他們了 :)


示範影片:





這次在 hackathon.tw 的 QML 培訓課程跟大家介紹 LeapMotion 及 Arduino

QML 在硬體整合上也非常好用,主因是因為把相關硬體的 SDK 包裝成 C++ class 後就可以直接被 QML 操作,因上對 UX/UI 人員來講,要讀取/操控外部硬體都會非常簡單,例如我要讀取環境亮度,只要一行 arduinomgr.brightness 就可以,再加上 property binding,簡直如虎添翼 :)

QML + Arduino & Leap Motion from Diro Fan

你一定也想過這個問題,要如何讓使用者可以新增、修改檔案,但無法刪除檔案,例如家裡的相片庫、音樂庫,常會擔心不小心被其它人誤刪,其實只要把檔案屬性的 sticky bit 設為 1 即可,有關 sticky bit 的介紹已有許多,大家可以自己去查一下。如果你在用Linux + Samba 當作檔案伺服器,要怎麼讓使用者新增的檔案預設也有enable sticky bit呢?其實打開 smb.conf 一看,會想說把 create mask 設為 1777 不就好了嗎?但這樣是不夠的,此時你再用一台Windows 透過Samba建一個檔案,會發現它的sticky bit並沒有被設起來,那該如何解決?其實很簡單,只要再多加一行 inherit permissions = Yes 即可 :),但是這樣還不夠,因為 sticky bit 允許檔案的擁有者將其刪除,因此我的做法是在 crontab 中設定每天清晨把該資料夾所有檔的的owner都改為 root,這樣子使用者便再也無法刪除檔案了。

[@more@]

[1] ProxyPass
是否有想過,讓自己的 Apache Server 可以將幾個不同的目錄分散在不同的 Apache Server 去執行呢?
例如:

當使用者輸入 http://www.diro.tw/gallery 時,實際會連到 http://192.168.0.1
當使用者輸入 http://www.diro.tw/blog 時,實際會連到 http://192.168.0.5/web/blog
而雖然真正執行的是背後這些 192.168.0.x 的機器在跑,使用者卻不會察覺,在網址列上仍然是看到如
http://www.diro.tw/gallery、http://www.diro.tw/blog,這就是 Apache 神奇的 R-Proxy 功能。一般
來說可以用這樣的方式保護後面的 Apache Server,使其不直接曝露在 Internet 下。

[@more@]關於R-Proxy的詳細介紹,已經有許多高手介紹過,在這邊就不再贅述。



至於設定方式,也是相當簡單,只要在 httpd.conf 中設定一行:

ProxyPass /dir http://192.168.0.11/gallery



/gallery 是原本的目錄, http://192.168.0.11/gallery 則是要導向的機器及目錄。

你也可以多設定幾組,例如:

ProxyPass /gallery http://192.168.0.11/gallery

ProxyPass /blog http://192.168.0.5/web/blog

這樣使用者只要輸入 http://diro.tw/blog or http://diro.tw/gallery 就會被導向對應的主機囉!



[2] Named-based VirtualHost + ProxyPass

不過單純只用 ProxyPass 還是不盡理想,因為網址看起來就比較遜了,因此一般建議可以搭配 named-based 的 virtual host

看下面的設定馬上就了解了,以後使用者只要輸入 http://gallery.diro.tw 就可以連到 http://192.168.0.11/gallery 了。

<VirtualHost *:80>

ServerAdmin diro@diro.tw

ServerName gallery.diro.tw

ProxyPass / http://192.168.0.11/gallery/

</VirtualHost>



在使用R-Proxy之前,如果一個 public ip要架好幾台 Apache Server,大多只能採用不同的 port 來達成目標,現在有了

R-Proxy 之後,只要稍加設定,就可以不用再搞一堆 :8080 :8000 之類繁瑣的東西囉。



PS1. R-Proxy 背後不一定要用 private ip,你用 public ip來做也是可以的

PS2. R-Proxy 背後的機器不一定要用 Apache,你要用 IIS 或其它 Web Server 也都是可以的



[參考文件]

1. http://httpd.apache.org/docs/2.0/mod/mod_proxy.html#proxypass

2. http://www.study-area.org/tips/r-proxy_20030117.txt

3. http://fr.linuxfocus.org/English/March2000/article147.shtml

diro 范姜士武 http://diro.tw


diro.fan@gmail.com


foobar 0.9推出已經一段時間了,但是不能撥放 APE,而且不能一次撥放整個資料夾,怎麼解決呢?[@more@]

撥放 APE 請到官方網站下載相關plug-in

http://www.foobar2000.org/components/index.html

下載:Monkey's Audio decoding support 再解壓到foobar的component 目錄中即可,記得要重新啟動 foobar!

至於修改目錄的Context Menu,機碼如下,你可以複製起來存成一個 foobar.reg再點兩下執行即可完成。

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOTDirectoryshellfoobar2000.Play]
@="&Play in foobar2000"

[HKEY_CLASSES_ROOTDirectoryshellfoobar2000.Playcommand]
@="C:Program Filesfoobar2000foobar2000.exe %1"


在Windows系統上,微軟提供了相當好用的WebBrowser Control供程式設計師使用,而其中的 DocumentComplete事件更是不可或缺的要件之一,但是在處理有Frames的網頁時,往往觸發DocumentComplete時,網頁並未全部讀取完畢。

先說明,其實標題有誤,這並不是誤判..只是DocumentComplete的運作方式比較特別,詳情可以參考msdn

http://msdn.microsoft.com/workshop/browser/webbrowser/reference/events/documentcomplete.asp

http://dev.csdn.net/develop/article/13/13449.shtm

在上面的網頁中有提供一些解決,但是我覺得並不是最簡單的,其實應該只要用一個count,紀錄 DocumentComplete的次數是否跟frames的數量一樣多即可,原始碼如下:


private void axWebBrowser1_DocumentComplete(object sender, AxSHDocVw.DWebBrowserEvents2_DocumentCompleteEvent e)
{

mshtml.HTMLDocument HTMLDoc = (mshtml.HTMLDocument) this.axWebBrowser1.Document;
if (this.iFramesCount == HTMLDoc.frames.length)

{

this.iFramesCount = 0 ;

//Anything you want to do

}

else

{

this.iFramesCount++;

}

}

[@more@]

Older Posts Home

ABOUT AUTHOR

Follow us

POPULAR POSTS

  • QML + Arduino / Web + Arduino
  • QML + LeapMotion & Arduino
  • [SOFT] TeamCity - 好用的 Continuous Integration 持續整合工具
  • How to Integrate Robot Framework with TestRail
  • [DECO] Eva Solo 花盆

Categories

  • 2016 5
  • agile 3
  • Bike 4
  • Book 4
  • Cooking 1
  • DECO3 4
  • House 8
  • Interior Design 4
  • IoT 1
  • IT 7
  • Life 13
  • Photography 1
  • Programming 22
  • QML 8
  • Qt 9
  • Scrum 3
  • Software 19
  • Travel 9
  • UAT 1
  • Uncategoried 3
  • 喇叭 1
  • 裝潢 6

FOLLOW US @ INSTAGRAM

About Me

Popular Posts

  • Odd-e LeSS@上海 後記 Part 4
    在 LeSS 最後一天,聽到別的公司在導入敏捷時,也成立了很多很多的實踐社群 CoP (Community of Practice),其中一個是 心靈成長 CoP,讓我印象非常深刻,這邊來聊聊為什麼 :) 在第五項修練中,彼得聖吉一直在強調"整體": 「遠古的人類並...
  • 單車路線#5 - 大坑缺溪-秀才窩自行車道-梅崗
    沿大坑 缺 溪騎到鎮南橋後,直走接往中庸路,經過一小段爬坡即接往福羚路,再往接瑞溪路即可抵達楊梅愛買後方,接著往裕成路(五楊高架下方)是我騎到楊梅最喜歡的路線。裕成路到底後,便到達楊梅校前路,是熱門的自行車路線,校前路前行便會抵達這條路線的重點-秀才窩自行車道,這個路線會穿過小茶...

Advertisement

Copyright © 2016 Diro's Journey. Created by OddThemes