2016년 3월 18일 금요일

Gear S2 로 문열기 - 6편 (bug fix 및 성능 개선)

Gear S2 로 문을 열 수 있게 되자 괜히 밖에 한번 나갔다 들어 오는 버릇이 생겼다.
ㅎ. 아무도 내가 시계로 문을 여는지도 모르는데...

계속 사용하다 보니 개선점들이 눈에 들어왔는데,

1. bluetooth 사용시 동작 안됨
 - tizen-manifest.xml 에 'http://tizen.org/priviliege/bluetooth' 권한 추가 하면 해결됨
2. socket 통신이 안정적이지 않았다.
 - restful api 방식으로 변경 했다. http 방식으로 변경하니 훨씬 안정적이다.
3. double-click short-cut 을 문열림 앱으로 변경해서 launching 시간을 줄였다.

이 세가지를 바꾸니 일상 생활에서 부담없이 사용할 수 있게 되었다.
오 스마트한 라이프~

아래는 raspberry pi 에다 넣은 simple rest server 이다.
출처는 여기
실행하기 위해 해야 할 것은 '$ sudo easy_install web.py' 밖에 없다.
#!/usr/bin/env python
import os
import web

urls = (
    '/door', 'open_door'
)
app = web.application(urls, globals())
class open_door:
    def GET(self):
os.system('/home/pi/autokey/robot-server door');

if __name__ == "__main__":
    app.run()
보안이 필요하다면 정식으로 rest server 를 구축하기를 권장한다.

rest api 를 사용하기 위해 tizen app 도 socket 에서 curl 로 변경한다.
코드가 훨씬 단순해 졌다. 여기서 주의할 점은 Gear S2 가 bluetooth 만 사용할 경우에도 동작하게 하려면 (연결된 안드로이드 휴대폰의 인터넷을 사용할 때를 말한다) proxy 를 꼭 설정 해 줘야 한다.
static void
_button_click_cb(void *data, Evas_Object *button, void *ev)
{
CURL *curl;
CURLcode res;

curl = curl_easy_init();
if(curl) {
connection_h connection;
int conn_err;
char *proxy_address;

conn_err = connection_create(&connection);
conn_err = connection_get_proxy(connection, CONNECTION_ADDRESS_FAMILY_IPV4, &proxy_address);

curl_easy_setopt(curl, CURLOPT_URL, "http://우리집/door");
if (conn_err == CONNECTION_ERROR_NONE && proxy_address)
{
  curl_easy_setopt(curl, CURLOPT_PROXY, proxy_address);
}
res = curl_easy_perform(curl);
if(res != CURLE_OK){
elm_exit();
}
curl_easy_cleanup(curl);
connection_unset_proxy_address_changed_cb(connection);
connection_destroy(connection);
}
}
홈패드 동작 방식상 '화면을 켜고 -> 문을 연다' 의 과정에서 기본적으로 5초는 소요 되기 때문에 약간의 delay 가 느껴 질 수 있으나 엘리베이터를 내리면서 '문열어'를 하면 전혀 부담없이 사용할 수 있었다.

시간이 지나면 스마트 도어락 회사가 Gear S2 에 호환하는 도어락을 판매하겠지만 이걸로 즐거운 나의 스마트한 생활은 유지 할 것 같다.

댓글 없음: