관리 메뉴

나모를 찾아라

생활코딩 - 스마트워치로 Hue 켜고/끄기 만들기 본문

생활/메이커(Maker)

생활코딩 - 스마트워치로 Hue 켜고/끄기 만들기

나모찾기 2017. 5. 27. 11:38

요즘 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>