스마트싱스에 에너지미터제품 연동을 위한 SmartApp & DTH RELEASE!!!

개발 배경

에너지미터 제품 하나 있는데 이 제품은 두꺼비집에 설치하여 전력량을 측정고,
저장된 정보를 가공하여 다양한 형태로 고객에게 정보를 전달해준다.
ex) 누적 사용량, 순간 사용량, 이웃집대비 사용량 비교, 시간별 사용량, 일별 사용량 등…

하지만!!! 아직 전용앱을 통해서만 정보 조회가 가능하고,

해당 정보들을 2차적으로 활용한 방법이 없었다.

스마트싱스와 연동을 완료하였지만 현재는 동작하지 않는 것인지,

연동 진행하다가 멈춘 것인지 모르겠지만 관련 작업 내용이 있어서

조그만 수정하면 될 것 같아서 한번 해보자라는 생각부터 이 작업은 시작되었다.

(하지만 API도 다 바뀌고해서 SmartApp은 거의 새로 만들었다.)

기존스마트싱스와의 Enertalk 연동작업 Github 소스

 

개발시 테스트를 위한 개인 계정을 제공해준 “붱이”님께 감사드립니다.

 

설치 방법

1. Enertalk Developers사이트에서 Client ID와 Client Secret key 생성

1) Enertalk Developers사이트 접속 및 계정 생성
ENERTALK DEVELOPERS SITE

2) ‘MY APPS’의 ‘Create Apps’에서 Client ID와 Client Secret 생성(자동생성)
App Name은 자유롭게 쓰고, Redirect URL은 꼭 아래 값 입력
https://graph.api.smartthings.com/oauth/callback


=> 이 정보는 4)과정에서 ‘App Settings’ 에서 Client ID / Client Secret값으로 사용됩니다.

 

2. SmartThings IDE에 SmartApp과 DTH 설치 및 설정

– 직접 소스를 카피해서 SmartThings IDE SmartApp과 DTH 생성
– SmartThings IDE GitHub Repository를 통한 SmartApp과 DTH 생성(이 방법으로 설명진행)

https://github.com/turlvo/KuKuMeter

1) SmartThings IDE ‘My SmartApps’ 에서 ‘Settings’ 선택, ‘Add new repository’ 선택 후 아래와 같이 입력

– Owner : turlvo
– Name : KuKuMeter
– Branch : master

2) ‘Update from Repo’에서 ‘1)’에서 추가한 ‘KuKuMeter’ 선택

3) 아래와 같이 ‘KuKuMeter’ SmartApp을 선택, ‘Publish’ 선택후 ‘Execute Update’선택

4) 설치 한 ‘KuKuMeter’ SmartApp 선택, ‘App Settings’

4-1) Settings에 ‘1)’에서 생성 한 Client ID와 Client Secret입력
(위에 Enertalk developers사이트에서 생성한 Client ID / Client Secret를
아래 사진의 App Settings ‘clientId’ / ‘clientSecret’에 복붙)

4-2) ‘OAuth’ Enable Click 하여 Enable 시킴

5) ‘My Device Handler’메뉴에서도 ‘2)’와 같이 ‘KuKuMeter’용 DTH 설치

3. SmartThings Application에 ‘KuKu Meter’ 설치

1) SmartThings Application -> ‘Automation’ -> ‘SmartApp’ -> ‘Add a SmartApp’ 진입
2) ‘KuKu Meter’ 선택
3) ‘Enertalk’ 인증 진행(ID, Password)
4) 인증 완료 후 계정 정보 확인 후 최종 ‘Done’ 클릭

 

설치완료

1. 설치 완료 된 Thing화면

1) Thing List에서의 ‘KuKu Meter’ Thing 모습(현재 Current값 보여짐)
2) 세부 Thing 화면
– 월 누적 전력 소모량
– 순간 전력 소모량
– 현재 Current
– 현재 Voltage
– 현재 월 계산 요금

2. 자동화관련 활용

1) 누적 전력 소모량이 특정값 이상시 사용자에게 알림
2) 현재 순간 전력 소모량이 특정값 이상시 사용자에게 알림

=> 여러 전문가분들의 사용케이스를 보고 따라하면 된다. 기다리자


   55 Comments


  1. 오날두
      2017-09-13

    고생 많으셨습니다 쿠쿠님 최고!
    에너톡 뽐뿌를 주셔서 감사합니다.
    전 배송이 늦게와서 여행 다녀와서 설치해야겠네요 ㅎㅎ

    • turlvo
        2017-09-13

      덕분에 제가 에너톡 뿜뿌 받고 샀네요
      조심히 여행 다녀오세요~~~

  2. WooBooung
      2017-09-13

    드뎌 공개하셨네요!! ㅎ
    너무 잘쓰고있어요 트리거도 잘되고
    너무 기다리던 앱이에요
    쿠쿠하모니에 이은 대박앱이 될듯요
    제 에너톡 계정 사용비용은 메일로 보낼게요 입금하세요

    • turlvo
        2017-09-13

      글솜씨가 없어서 포스팅이 쉽지가 않네요 ㅎㅎ
      잘 쓰시고 번뜩이는 아이디어 주세요~~~
      쌤쌤하시기로 하셨으니 안보냅니다!!!

  3. Makelism
      2017-09-13

    1년을 넘게 기다렸는데 드디어 이게 나오다니 좋네요.
    쿠쿠님 고생 많으셨고 감사한 마음 전하고 싶습니다.
    잘 쓰겠습니다.

    • turlvo
        2017-09-13

      저도 이거 만들면서 배우는 것도 있고 좋았어요.
      잘 써주시는것만으로도 대만족합니다.
      고맙습니다.

  4. 스우프
      2017-09-15

    어렵게 만드셨네요. 옆에서 응원하지 못해 죄송한 마음..

    • turlvo
        2017-09-15

      ㅋㅋ같이 겜해주지 못해서 미안한 마음

  5. 네팔렘
      2017-09-18

    넘 좋은 스마트 앱 만들어 주셔서 감사 합니다^^ 카페 공구했는데 빨리 설치 해보고싶네요

    • turlvo
        2017-09-18

      안녕하세요
      네. 팔렘님 요건한방에 성공하시길 바랍니다.^^*

  6. sEsAmZ
      2017-09-21

    쿠쿠님.. 너무나 하고 픈데.. 계속Enertalk 인증에서 The Connection could not be established! 라고 뜨네요.
    비밀번호를 한 10번은 재설정 한 것 같습니다.ㅠ
    저만의 문제이겠지요??

  7. sEsAmZ
      2017-09-22

    으아..ㅠ 성공했습니다. 한글도 잘 못읽나보네요.. ClientID와 ClientSecret을 잘못 입력했네요.. 잘쓰겠습니다!

    • turlvo
        2017-09-22

      헛. 다행이네요. 몇몆분들이 헷갈려하셔서 보강을 했었는데요. 어디서 헷갈릴만한 내용이 있었나요?

      • sEsAmZ
          2017-09-22

        아닙니다..
        app name과 redirect url에 빨간상자가 있는 것을 보고 아래 글을 제대로 읽지 않은 제 탓입니다.ㅎ

  8. 익명
      2017-10-02

    KuKu님 안녕하세요.

    에너톡 설치 중에 문제가 발생하여 덧글남깁니다.

    혹시 스마트앱에 설치했는데 스마트앱이 2개로 표시되고, 터치해서 들어가면 화면을 띄울수 없다고 재시도하라고 뜨는 경우는 보셨나요?

    제가 지금 그 상황인데 덧글에 스샷을 남길 수가 없네요.

    http://jiyino.tistory.com/entry/%EB%A6%AC%EB%B7%B0%EC%84%A4%EC%B9%98-Encored-Enertalk

    지금 문제는 위 링크의 가장 하단에 스샷 두개 올려두었습니다.

    도무지 해결이 안되어 도움을 바라는 마음에서 덧글남기고 갑니다.

    명절, 연휴 잘 보내세요!

    • 지이노
        2017-10-02

      아 이거 이름 설정하는법을 이제 알았네요

      • turlvo
          2017-10-02

        이름이요? 띵 이름바꾸시는 것을 말씀하시는거죠?

        • 지이노
            2017-10-02

          아뇨 덧글남기는데 이름설정할줄을 몰라서..ㅎㅎ;

    • turlvo
        2017-10-02

      음 저도 지우고 다시깔아봐야하나요
      카페에 한분도 같은 증상이라 흠…
      삭제는 아래와 같이해주세요

      우선 깔끔히삭제하고 해보시죠
      IDE -> Location -> smartapp

      edit누르시고 아래로 내려보면 KuKu Meter있을꺼에요 삭제하고 edit버튼위치에 적용누르세요

      그리고 실패나고 여러개 깔리는 것 때문에 수정한거있는데 저 확인하고 바로 올려드릴게요 레포 업데이트후 다시해주세요

      • 지이노
          2017-10-02

        늦은시간에 감사합니다.

        삭제방법이 따로 있었네요 ㅎ

        저는 어플에서 안에 들어가야 삭제버튼 나오는줄 알고…

        한번 다시 시도해보겠습니다.

        • turlvo
            2017-10-02

          강제 삭제 방법입니다.
          그리고 설치 문제시에 IDE -> Live logging 정보도 같이 주시면 분석에 도움이 될 것 같습니다.

      • 지이노
          2017-10-02

        혹시나 증상을 조금 더 자세히 설명하자면

        스마트앱 생성할 때 에너톡 인증이라는 화면이 나오는데

        그 화면 다음으로 로그인을 하면 스마트싱스랑 커넥트 되었다 Done을 눌러라는 화면까지는 나옵니다.

        Done을 누르면 다시 빨간색으로 에너톡 인증 하라고 화면 뜨고 잠시 있다가 아무것도 터치하지 않아도

        스마트앱을 어떤것을 생성할지 선택하는 화면으로 돌아가버립니다.

        그리고 스마트앱은 생성되어 있는데 터치하면 리트라이 하라고만…나오네요..

        • turlvo
            2017-10-02

          음… 깔끔하게 삭제 후 다시 천천히 확인부탁드립니다.
          SmartApp 소스도 삭제 후 다시 입력 해 보시겠어요?
          (저도 클린 설치 후 정상 설치된 것으로 보아 에너톡 서버나, 스마트앱에는 문제가 없어 보입니다.)

          주의점은 아래와 같습니다.
          1) Enertalk developer 사이트에서 Client ID / Key 생성
          callback URL 직접 입력

          2) SmartApp appsetting에서
          1번에서 생성 한 client id / key 값을 입력(client id 카피해올때 뒤에 == 등 빠지지 않도록)
          Oautn enable 누르기

          • 지이노
              2017-10-02

            56f84782-5bad-4caa-9275-ad062ca599f3 오후 9:22:24: debug callback()>> Could not get Encored OAuth token
            56f84782-5bad-4caa-9275-ad062ca599f3 오후 9:22:24: warn getHttpPostJson>> HTTP Post Error : groovyx.net.http.HttpResponseException: Unauthorized

            라고 에러가 뜨는데 혹시 이 로깅 말씀하시는건가요?

          • turlvo
              2017-10-02

            음 이건 먼저건보다 진행이안되었네요 흠

  9. 지이노
      2017-10-02

    LogsClear
    dfe2ac68-485c-48ce-87cc-e281483d1f10 오후 9:14:32: error java.lang.NullPointerException: Cannot invoke method getAt() on null object @ line 194
    dfe2ac68-485c-48ce-87cc-e281483d1f10 오후 9:14:32: debug loadSiteList>> sitesList : null
    dfe2ac68-485c-48ce-87cc-e281483d1f10 오후 9:14:32: debug getSiteList>> result : []
    dfe2ac68-485c-48ce-87cc-e281483d1f10 오후 9:14:32: debug getHttpGetJson>> resp: []

    중요정보가 있어서 삭제했습니다.

    • turlvo
        2017-10-02

      음 에너톡 계정에 사이트라는 항목에 기기가있어야하는데 안나오네요 흠….

      • 지이노
          2017-10-02

        음…계정 등록하면서 이상했던게

        어플에서 계정생성했는데 디벨로퍼에서 따로 또 계정생성하는게 맞나요?

        스마트앱에서 로그인하는것에서는 어플에서 추가로 만든 휴대폰계정으로도 한 것 같습니다.

        근데 둘 모두 계정이 같은데…

        • turlvo
            2017-10-02

          혹시 에너톡앱에서 요금환경설정하셨나요? 사이트가 어떻게해야생성되는지 모르겠아사

          • 지이노
              2017-10-02

            네 요금계산 설정은 했습니다..

          • turlvo
              2017-10-02

            신기하네요 혹 괜찮으시면 비번바꾸셔서 아이디랑 비번 메일로 주실 수 있으세요? 직접 쿼리날려보면서 분석해보는게 좋겠네요

          • 지이노
              2017-10-02

            메일은 네이버로 보내면 되나요?

          • turlvo
              2017-10-02

            넵 turlvo 네이버 쥐메일 다 상관없습니다

          • 지이노
              2017-10-02

            네이버로 보내두었습니다.

            도와주셔서 정말 감사합니다.

          • turlvo
              2017-10-02

            음 아닙니다.
            지이노님 케이스에 맞게 대응을 못하는 제 스마트앱도 문제인걸요.
            실례지만 계정가지고 좀 여러가지 해보겠습니다.

          • 지이노
              2017-10-02

            에구..

            쿠쿠님께 사용료라도 내야될거 같아요 ㅠ

            피드백을 너무 잘해주셔서 이정도면 유료로 해도 정말 만족할거같습니다.

        • 지이노
            2017-10-02

          많이 도와주셨는데 재등록을 계속 실패하네요..ㅠ

          연휴 잘 보내시고 도와주셔서 감사합니다.

          계속 시도해볼게요!

    • turlvo
        2017-10-02

      아예 사이트리스트가 없군요….

  10. 양현석
      2017-11-03

    github 소스 작성자입니다. 이걸 이렇게 다시 보니 반갑네요 ^^

    • turlvo
        2017-11-04

      안녕하세요.
      이렇게 최초 원작자분께서 찾아주시니 영광이네요.
      다른 한국 IoT관련 기업과 다르게,
      API를 제공해주시니 이렇게 다양하게 활용 할 수 있어서 좋네요.

  11. 인군
      2017-12-24

    쿠쿠님.. 아이폰에서 확인해보니 누진구간이 6단계로 보이는데.. 다음번 업데이트시에 3단계로 부탁드립니다.

    • turlvo
        2017-12-24

      안녕하새요 카드리스트가 에너톡에서 제공하는 것인데 없앨꺼라서 업데이트를 안하더라고요

      웹좀할줄알면 정보긁어와서 그려보겠는데 흠
      우선은 일단그런상태입니다

      • 송영진
          2018-08-17

        안녕하세요 문의좀 드릴께요

        마지막에 스마트폰 앱 “스마트 앱 나의” – “kuku meter” – “에너톡 로그인” 하고 나면

        user info : email : syjnew@gm…….
        site info : desc : 내용없음
        device info : name : 사이트 사용량

        이렇게 나오는데 여기에서 오른쪽 위에 있는 save 누르면
        an inexpected error occurred
        이렇게 메시지가 나오고 진행이 안되고 있습니다.

        어떤 부분을 확인하면 될까요?

        • turlvo
            2018-08-17

          흠 오랜만이라 딱감이 안오는데요. ide 상에 logging탭에서 save누를때 에러 로그좀 확보부탁드립니다

          • 송영진
              2018-08-19

            오후 4:23:28: info Waiting on events…
            오후 4:23:28: info For past logs for individual things go to the My Devices section, find the device and click on the Events link on the device information page.
            오후 4:23:28: info This console provides live logging of your SmartThings.

          • turlvo
              2018-08-19

            음 접속한 ide가 실제허브가 속한 ide주소가 맞으신지요… 로그가 하나도 안나올수가없거든요…
            이상하네요

          • 송영진
              2018-08-19

            이렇게만 나오고 있습니다.

            오후 4:23:28: info Waiting on events…
            오후 4:23:28: info For past logs for individual things go to the My Devices section, find the device and click on the Events link on the device information page.
            오후 4:23:28: info This console provides live logging of your SmartThings.

          • 송영진
              2018-08-19

            친절한 답변 감사합니다.

            아무리 내용대로 따라해도 안되네요… ㅜㅜ
            좀더 연구해 보겠습니다.

            답변 감사합니다.

  12. NetCat
      2018-10-28

    안녕하세요. 쿠쿠님.
    Smartthings 홈페이지의 SmartApps 에 SmartThings 레포를 등록하고 publish 하려는데 잘 안되네요.
    [ Update From Repo — SmartThings (master) ] 이 화면에서 쿠쿠님 master 소스가 안나타납니다.
    깃허브 리파지토리 경로에 오타는 없는 상태입니다.

  13. 이명훈
      2019-06-28

    에너톡 프로에도 활용 가능한가요??

    • turlvo
        2019-06-28

      흠 베이직과 서버관련해서는 영향받을게 없을것같긴한데요. 장담은못해드리겠네요. 죄송합니다

  14. DavidShin
      2019-08-11

    안녕하세요. 위에 송영진님 문의와 같은 내용입니다.

    마지막에 스마트폰 앱 “스마트 앱 나의” – “kuku meter” – “에너톡 로그인” 하고 나면

    user info : email : ****
    site info : desc : 내용없음
    device info : name : 사이트 사용량

    이렇게 나오는데 여기에서 오른쪽 위에 있는 save 누르면
    an inexpected error occurred
    이렇게 메시지가 나오고 진행이 안되고 있습니다.

    로그 첨부합니다.

    오후 5:43:08: error java.lang.NullPointerException @line 229 (pullData)
    오후 5:43:08: debug checkEncoreAccessTokenValidation>> verified : [allowed:, clientId:**********, scope:[], token:*******, userId:*****]
    오후 5:43:08: debug getHttpGetJson>> resp: [allowed:, clientId:***********, scope:[], token:**********, userId:999975246]
    오후 5:43:08: debug getHttpGetJson>> params : [uri:https://auth.enertalk.com/verify, path:, headers:[Authorization:Bearer ***************, ContentType:application/json]]
    오후 5:43:08: debug checkEncoreAccessTokenValidation>> before authorization: ******=
    오후 5:43:08: debug checkEncoreAccessTokenValidation>> before refresh: ********
    오후 5:43:08: debug Initializing Application
    오후 5:43:08: debug Installed()
    오후 5:43:08: error java.lang.NullPointerException @line 229 (pullData)
    오후 5:43:08: debug poll()
    오후 5:43:08: trace KuKu Meter – updated with settings: [:]
    오후 5:43:08: debug initialize()
    오후 5:43:08: debug installed()
    오후 5:46:43: info Waiting on events…
    오후 5:46:43: info For past logs for individual things go to the My Devices section, find the device and click on the Events link on the device information page.
    오후 5:46:43: info This console provides live logging of your SmartThings.

    • turlvo
        2019-08-14

      안녕하세요.

      아래 부분에 location이 허브에서 설정되어 있지 않아서 발생하는 문제로 보입니다.
      허브 위치 설정을 해주시거나, kukumeter smartapp 229 line을 아래와 같이 변경하고 확인 부탁드립니다.

      def now = new Date().format(“yyyy MMM dd EEE h:mm:ss a”, location.timeZone)

      => def now = new Date().format(“yyyy MMM dd EEE h:mm:ss a”, TimeZone.getTimeZone(‘JST’))

  15. 핫써머
      2019-08-14

    안녕하세요.
    저도 위 davidShin 님과 똑같은 애러가 뜨면서 진행이 안되네요 ㅠㅠ

    • turlvo
        2019-08-14

      안녕하세요.

      아래 부분에 location이 허브에서 설정되어 있지 않아서 발생하는 문제로 보입니다.
      허브 위치 설정을 해주시거나, kukumeter smartapp 229 line을 아래와 같이 변경하고 확인 부탁드립니다.

      def now = new Date().format(“yyyy MMM dd EEE h:mm:ss a”, location.timeZone)

      => def now = new Date().format(“yyyy MMM dd EEE h:mm:ss a”, TimeZone.getTimeZone(‘JST’))

스우프 에 응답 남기기 응답 취소