나모를 찾아라
생활코딩 - 스마트워치로 Hue 켜고/끄기 만들기 본문
요즘 IoT라는 단어가 핫하다.
가전이나 전기제품에 IoT라는 이름이 붙이면 가격도 더 비싸게 팔린다.
어제 퇴근하고 나서 갑자기 때 아닌 생활 코딩을 하게 되었다.
얼마 전부터 잘 때 스마트워치로 불을 끄면 좋을 텐데 라는 귀차니즘을 실행에 옮긴 결과이다.
4월 25일 취침등으로 필립스 휴2.0 스타터 키트를 구입했다. (자세한 건 링크 참고)
앱을 통해서 제어할 수 있는 비싼 전구 세트인데 API를 공개해 놓아서 여러가지로 응용을 할 수 있었다.
침대에 누웠는데 충전중인 스마트폰을 들고 불을 끄는 것이 번거로워서 잘 때도 차고 있는 손목 스마트시계에서 끄면 참 좋겠다는 생각을 하게 된 것이다.
협탁(충전중인 스마트폰) | 아내 | 나
이런 식으로 자고 있기 때문에 스마트폰을 집기 위해서는 아내를 넘어가는 불편이 있었기 때문에 아내한테 불꺼달라고 요청을 했는데, 먼저 자면 결국 내가 돌아서 스마트폰을 집어야 하기 때문이다.
어쨌든 사설을 길게 해봤자 감이 잘 안올 테니 좀 전에 아이폰으로 찍은 동영상을 보면 이해가 될 것이다.
참고로 내가 사용하고 있는 스마트 시계(라기 보다는 피트니스 시계)는 Garmin 의 Fenix 3 HR 이다.
쉽게 이야기 하면시계에서 사용할 수 있는 앱을 만들어서 시계에 넣고 동작 시킨 것이다.
앱은 단순하게 아래와 같이 불을 켜거나(Light On) 끌 수 있게(Light Off) 두 개의 영역으로 나누었다.
참고로 Sample에 있던 Attention 을 기반으로 수정을 했다.
DOWN 버튼을 누르면 회색 빛깔이 아래로 바뀐다.
동작은 START-STOP 버튼을 누르도록 했다.
즉 Light On 에 넣고 START-STOP 버튼을 누르면 불이 켜지는 것이고,
Light Off 에 넣고 START-STOP 버튼을 누르면 불이 꺼지는 아주 단순한 장난감 앱이다.
피닉스 3의 경우 앱 파일은 prg이라는 형식의 바이너리 파일이다.
USB 인터페이스로 컴퓨터에 연결하면 외장 USB 드라이브 처럼 연결이된다.
GARMIN/APPS/ 아래에 위치하면 실행이 가능하다.
가민의 스마트 워치는 애플와치나 갤럭시 기어에 비하면 일반인에게는 생소할 수 있어서 자세하게 어떻게 만들었는지 공개해도 별로 의미가 없긴 한데 주요 코드를 공개하면 아래와 같다.
불을 켜는 부분이다.
using Toybox.Communications as Comm;
// ...
class AttentionView extends Ui.View {
// ...
// Turn on light
function lightOn(isOn) {
var params = {
"on" => isOn
};
var headers = {
// body will be encoded as '{"on":true}'
"Content-Type" => Comm.REQUEST_CONTENT_TYPE_JSON,
// accept responses that are reported as json-compatible
"Accept" => "application/json"
};
var options = {
:method => Comm.HTTP_REQUEST_METHOD_PUT,
:headers => headers
};
Comm.makeWebRequest("http://192.168.1.2/api/fmx2mSqgrIznR7JKoOilDeuy1elBSIkhRtwZrTUV/lights/2/state", params, options, method(:onReceive));
}
// Handle communication events
function onReceive(responseCode, data) {
}
피닉스3에서는 HTTP 클라이언트 기능이 가능한데, 직접적으로 네트워크에 연결해서 통신을 하는 것이 아니라 블루투스로 스마트폰을 프록시(Proxy)를 이용해서 간접적으로 통신을 한다.
Fenix 3 HR -> Smart Phone (iPhone/Android) -> Garmin Connect App -> Network (Wi-Fi or LTE ...)
참고로 Toybox.Communications를 사용하기 위해서는 manifest.xml에서 권한을 명시해야 한다.
아래 블럭중 <iq:uses-permission id="Communications"/> 부분이다.
<!-- This is a generated file. It is highly recommended that you DO NOT edit this file. --><iq:manifest xmlns:iq="http://www.garmin.com/xml/connectiq" version="1">
<iq:application entry="AttentionApp" id="966D8948C2494F72ACEBD1A7A9719644" launcherIcon="@Drawables.LauncherIcon" minSdkVersion="1.3.0" name="@Strings.AppName" type="watch-app">
<iq:products>
<iq:product id="fenix5"/>
<iq:product id="fenix5x"/>
<iq:product id="fenix5s"/>
<iq:product id="fr935"/>
<iq:product id="fr630"/>
<iq:product id="fr235"/>
<iq:product id="fr735xt"/>
<iq:product id="fr230"/>
<iq:product id="vivoactive"/>
<iq:product id="fenix3"/>
<iq:product id="fenix3_hr"/>
<iq:product id="fenixchronos"/>
<iq:product id="d2bravo"/>
<iq:product id="d2bravo_titanium"/>
<iq:product id="fr920xt"/>
<iq:product id="epix"/>
<iq:product id="edge_1000"/>
<iq:product id="edge_520"/>
<iq:product id="vivoactive_hr"/>
<iq:product id="edge820"/>
<iq:product id="oregon7xx"/>
<iq:product id="rino7xx"/>
</iq:products>
<iq:permissions>
<iq:uses-permission id="Communications"/>
</iq:permissions>
<iq:languages>
<iq:language>eng</iq:language>
</iq:languages>
</iq:application>
</iq:manifest>
'생활 > 메이커(Maker)' 카테고리의 다른 글
선택 안됨 노박 가습기 셀프 A/S 수리기 - 2부 (0) | 2017.11.17 |
---|---|
노박 가습기 셀프 A/S 수리기 - 1부 (2) | 2017.11.17 |
Hue bridge '소프트웨어 업데이트'가 안될 때... API를 이용해서 해결. (5) | 2017.04.29 |
[DIY] 올뉴말리부 블랙박스 상시/주행모드 스위치 (0) | 2017.02.07 |
재산세(주택/건축물분) 납부를 통해 확인한 가상계좌번호 패리티 부분 (0) | 2016.07.12 |