집 바깥의 가스검침기의 가스 사용량을 집안에서 편하게 조회해볼 수 있는 기능을 구현해보고자 합니다.
그런데, 원격에서 가스 검침을 하시려면 가스 검침기에 해당 기능이 지원되어야 합니다.
본인 집의 가스 검침기에 가셔서 가스 사용량을 표시하는 아래 부분에 리드 센서를 부착하는 곳이 있는지 확인해 보시기 바랍니다.
위에 표시한 곳에 리드 센서를 장착할 수 있는 홈이 있어야 합니다.
자 그럼 시작해볼까요?
우선은 준비물이 필요하겠죠.. 기본적인 준비물은
https://murianwind.blogspot.com/2021/12/esp.html
에서 소개해 드린 준비물과 크게 다르지 않습니다. 이미 지역난방 유량계 작업을 하셨던 분이라면 준비물이 넉넉히 남아 있으실 수도 있고.. 유량계와 가스 검침을 동시에 하시려면 각각 필요한 만큼 적당히 물품을 구매하시면 됩니다.
다만.. 이번에는 유량계에서 사용했던 것만큼의 오버 스펙이 필요한건 아니라서 조금 더 저렴한 ESP8266 을 이용하도록 하겠습니다.
이것도 2번만에 조금 익숙해지고 나서 생각하니.. 유량계도 ESP8266으로 구현해도 충분한 것이었는데.. 뭐.. 이미 구현해버렸으니 후회는 없습니다.
ESP8266을 저는 납땜하기 귀찮아서 NodeMCU로 구매했습니다.
https://www.11st.co.kr/products/3079314807?&xfrom=&xzone=
그리고 빵보드 2개, 터미널 블록 1개, 점프 케이블 2개가 필요합니다.
그리고 중요한 리스센서가 필요한데.. 리드 센서는 본인의 가스 검침기를 사진으로 찍은신 후에
https://m.blog.naver.com/pjwook0129/221265570229
에 연락해서 구입하시면 됩니다.
준비된 물품을 아래처럼 구현했습니다.
substitutions: devicename: GasMeter esphome: name: gas-usage platform: ESP8266 board: nodemcuv2 esp8266_restore_from_flash: true on_boot: then: - sensor.template.publish: id: gas_meter state: !lambda 'return id(gas_meter_global);' preferences: flash_write_interval: 60min logger: api: services: - service: meter_calibration variables: meter_counter: float then: - globals.set: id: gas_meter_global value: !lambda |- return id(gas_meter_global) = meter_counter; - sensor.template.publish: id: gas_meter state: !lambda 'return id(gas_meter_global);' ota: password: !secret ota_pwd wifi: ssid: !secret main_ap_ssid password: !secret main_ap_pwd ap: ssid: "Gas Meter" password: !secret fallback_ap_pwd captive_portal: globals: - id: gas_meter_global type: float restore_value: true initial_value: '82.50' // 초기 값은 0.0 으로 하시고 나중에 HA의 서비스에서 값을 변경하셔도 됩니다. sensor: - platform: template name: "${devicename} Total" id: gas_meter update_interval: never unit_of_measurement: m³ accuracy_decimals: 2 // 간혹 검침기의 리드스위치가 소숫점 둘째 자리가 아니라 셋째 자리를 기준으로 한다면 여기를 3으로 변경하시기 바랍니다. state_class: 'total_increasing' device_class: 'gas' icon: mdi:counter binary_sensor: - platform: gpio name: "${devicename} Pulse Counter" pin: number: D7 mode: INPUT_PULLUP inverted: true filters: - delayed_on: 100ms - delayed_off: 100ms on_press: then: - globals.set: id: gas_meter_global value: !lambda |- return id(gas_meter_global) += 0.01; // 간혹 검침기의 리드스위치가 소숫점 둘째 자리가 아니라 셋째 자리를 기준으로 한다면 여기를 0.001으로 변경하시기 바랍니다. - sensor.template.publish: id: gas_meter state: !lambda 'return id(gas_meter_global);' - platform: status name: "Gas Meter Status"
처럼 코드를 적어주시면 됩니다.
그리고 저는 다원 가스락을 사용하고 있는데.. 이 가스 검침기가 있으면.. 가스가 더 이상 공급되지 않으면 다원 가스락을 자동으로 잠그도록 구성할 수 있습니다.
자동화를 충분히 작성하실 수 있으실 겁니다.
저는 측정해보니 3분 간격으로 0.1씩 소모하는 걸 확인하고 아래처럼 바이너리 센서를 만든 후에 바이너리 센서가 꺼지면 다원 가스락이 잠기도록 설정해두었습니다.
templates: - binary_sensor: - name: "도시가스 제어" unique_id: gas_control icon: mdi:fire state: > {{ as_timestamp( utcnow() ) | int < as_timestamp(states.sensor.gasmeter_total.last_changed ) | int + 5*60 }}
자동화의 트리거를 템플릿으로 지정하고
{{ as_timestamp( utcnow() ) | int < as_timestamp(states.sensor.gasmeter_total.last_changed ) | int + 5*60 }}
위 값을 집어 넣어 자동화를 구성하셔도 되는데.. 저는 제대로 동작을 안해서 그냥 센서로 구성했습니다.
시간은 본인 집의 가스 사용량을 보셔서 적절히 조정하시면 됩니다.
댓글
댓글 쓰기