IoT 랜이

똑똑한 IoT를 추구합니다.

IT Info/IoT

(HA) 에너톡 연결

랜이 Rangee 2018. 7. 21. 16:10

Server : Raspberry Pi3
OS: Raspbian
Home Assistant(with Docker)
EnterTALK 내장형




(적용결과)






무더운 여름


제습기, 에어컨, 에어서큘레이터 등 많은 기기의 사용으로 


집안의 에너지를 모니터링 해보고 싶은 욕구가 생기어 에너톡을 구매하였다.


(SKT 에너지미터를 먼저 구매했는데 실시간조회가 안되서 현재 분전반에서 썩고있는 중)




에너톡은 아래와 같은 장점이 있다.


1. 실시간 조회가 가능


2. HA에 연결 가능


3. API 공개로 입맞에 맞게 설정 가능




제품의 포장은 심플하다.






설치는 제품 내 설명서를 보고 하면 된다.

(안전을 위해 차단기를 내리고 작업)







일단 에너톡APP에 등록을 먼저 한 후 아래의 과정을 따르면 된다.



1. 에너톡 DEVELOPER 가입하기


홈페이지 : http://developer.enertalk.com


가입을 한 후 


http://developer.enertalk.com/my-apps/  에서 ID와 SECRET의 확인이 필요하다.

(APP 등록이 안되어있으면 Create APP으로 등록을 하면 된다.)






2. 인증코드 얻기(auth code, access token, refresh token)


ENERTALK.zip

(파일은 HA설치 폴더 내에 enertalk 폴더안에 넣어주면 된다.)


Client Id와 Client Secret 을 basic_auth.sh 파일안에 입력한다.(CLIENTID, CLIENTSECRET)


Redirect URL 은 본인의 HA 주소를 적어주고  UPDATE URL을 클릭한다.



완료가 되었으면 인증code를 발급받아야한다.


인증코드 발급은 아래링크에서 **id** > client id,  **homeassistant.domain:8123** > Redirect URL 으로 바꾸고


크롬 혹은 익스플로러에서 접속을 하면 된다.


>> https://auth.enertalk.com/authorization?client_id=**id**&response_type=code&redirect_uri=http://**homeassistant.domain:8123**


결과

>> http://**homeassistant.domain:8123**/?code=8d76c962919629d6b18e2304a94d3a07e0f13754d51175e77c


?code=  뒤의 인증코드를 basic_auth.sh 파일안에 입력한다.(CODE)



CLIENTID, CLIENTSECRET, CODE 3개를 입력하였으면 라즈베리파이의 터미널에서 basic_auth.sh 를 실행시켜준다.


(추가로 쉘스크립트 파일의 권한설정이 필요하다.)

(sudo chmod 755  /config/enertalk/*.sh)



제대로 하였으면


enertalk 폴더 내에 4개의 파일이 생성된다.


 "access_token.txt", "Basic_Auth.txt", "refresh_token.txt", "siteid.txt"


각 파일 안에 오류 메세지가 아닌 코드가 들어있으면 정상적으로 실행이 된것이다.



3. 센서 등록하기


sensor.yaml 파일


# Sensor Enertalk

- platform: command_line

  name: enertalk_realtime

  command: "/config/enertalk/realtime.sh"

  unit_of_measurement: "W"

  scan_interval: 2

  value_template: '{{ value | multiply(0.001) | round(2) }}'


- platform: command_line

  name: enertalk_billing

  command: "/config/enertalk/billing.sh"

  scan_interval: 60


- platform: file

  name: enertalk_yestertoday_usage

  file_path: /config/enertalk/billing_yesterday.txt

  value_template: '{{ value_json.usage | multiply(0.000001) | round(2) }}'

  unit_of_measurement: "kWh"


- platform: file

  name: enertalk_yestertoday_charge

  file_path: /config/enertalk/billing_yesterday.txt

  value_template: '{{ "{:,}".format(value_json["bill"]["usage"]["charge"] | round(0)) }}'

  unit_of_measurement: "원"


- platform: file

  name: enertalk_today_usage

  file_path: /config/enertalk/billing_today.txt

  value_template: '{{ value_json.usage | multiply(0.000001) | round(2) }}'

  unit_of_measurement: "kWh"


- platform: file

  name: enertalk_today_charge

  file_path: /config/enertalk/billing_today.txt

  value_template: '{{ "{:,}".format(value_json["bill"]["usage"]["charge"] | round(0)) }}'

  unit_of_measurement: "원"


- platform: file

  name: enertalk_month_usage

  file_path: /config/enertalk/billing_month.txt

  value_template: '{{ value_json.usage | multiply(0.000001) | round(2) }}'

  unit_of_measurement: "kWh"


- platform: file

  name: enertalk_month_charge

  file_path: /config/enertalk/billing_month.txt

  value_template: '{{ "{:,}".format(value_json["bill"]["usage"]["charge"] | round(0)) }}'

  unit_of_measurement: "원"


- platform: file

  name: enertalk_estimate_usage

  file_path: /config/enertalk/billing_estimate.txt

  value_template: '{{ value_json.usage | multiply(0.000001) | round(2) }}'

  unit_of_measurement: "kWh"


- platform: file

  name: enertalk_estimate_charge

  file_path: /config/enertalk/billing_estimate.txt

  value_template: '{{ "{:,}".format(value_json["bill"]["usage"]["charge"] | round(0)) }}'

  unit_of_measurement: "원"


- platform: file

  name: enertalk_yestertoday_charge2

  file_path: /config/enertalk/billing_yesterday.txt

  value_template: '{{ value_json["bill"]["usage"]["charge"] | round(0) }}'


- platform: file

  name: enertalk_today_charge2

  file_path: /config/enertalk/billing_today.txt

  value_template: '{{ value_json["bill"]["usage"]["charge"] | round(0) }}'


- platform: template

  sensors:

    enertalk_yesterday_usage:

      value_template: '{{ (float(states.sensor.enertalk_yestertoday_usage.state) - float(states.sensor.enertalk_today_usage.state)) | round(2) }}'

      unit_of_measurement: "kWh"

    enertalk_yesterday_charge:

      value_template: '{{ "{:,}".format((float(states.sensor.enertalk_yestertoday_charge2.state) - float(states.sensor.enertalk_today_charge2.state)) | round(0)) }}'

      unit_of_measurement: "원"



customize.yaml 파일


# Customize Enertalk

sensor.enertalk_realtime:

  friendly_name: 실시간 소비전력

  icon: mdi:pulse

sensor.enertalk_estimate_charge:

  friendly_name: 이번달 예상요금

  icon: mdi:currency-krw

sensor.enertalk_estimate_usage:

  friendly_name: 이번달 예상사용량

  icon: mdi:calendar-question

sensor.enertalk_month_charge:

  friendly_name: 누적 요금

  icon: mdi:currency-krw

sensor.enertalk_month_usage:

  friendly_name: 누적 사용량

  icon: mdi:trending-up

sensor.enertalk_today_charge:

  friendly_name: 오늘 사용요금

  icon: mdi:currency-krw

sensor.enertalk_yesterday_charge:

  friendly_name: 어제 요금

  icon: mdi:currency-krw

sensor.enertalk_yesterday_usage:

  friendly_name: 어제 사용량

  icon: mdi:trending-up

sensor.enertalk_today_usage:

  friendly_name: 오늘 사용량

  icon: mdi:trending-up



groups.yaml 파일


# Group Enertalk

enertalk:

  name: "에너지동향"

  entities:

  - sensor.enertalk_realtime

  - sensor.enertalk_today_usage

  - sensor.enertalk_today_charge

  - sensor.enertalk_yesterday_usage

  - sensor.enertalk_yesterday_charge

  - sensor.enertalk_month_usage

  - sensor.enertalk_month_charge

  - sensor.enertalk_estimate_usage

  - sensor.enertalk_estimate_charge



4. 적용결과




온습도 센서와 같이 살펴보면 전력량과 온도가 똑같이 움직이는것도 볼 수 있다.








합리적인 가격으로 가정 내 소비전력에 대한 실시간 모니터링이 가능해졌다.


이번달 예상사용량, 요금을 보면서 에너지관리에 신경쓸 수도 있겠지만


쾌적한 여름을 위해서 제습기, 에어컨을 계속 가동하게 되다보니 많은 절약은 되지않는게 함정이다.



이상.