์ ๊ธฐ์ ๋ฌผ์ ๋ํ ๋๊ฐ๋ฅผ ๋ฐ์ ๋๋ง๋ค ๊ถ๊ธํด์ง๋๋ค. ์ฐ๋ฆฌ ๊ฐ์กฑ์ด ์ ๋ง ๊ทธ๋ ๊ฒ ๋ง์ด ์๋นํ ๊น์? ์, ์์ค์๋ ๋ฐ๋ฅ ๋๋ฐฉ๊ณผ ๋ณด์ผ๋ฌ๊ฐ ์์ง๋ง ํญ์ ์๋ฐฉ๊ด์ผ๋ก ์ผํ์ง๋ ์์ต๋๋ค. ์ฐ๋ฆฌ๋ ๋ํ ๋ฌผ์ ์ ์ฝํ๋ ๊ฒ ๊ฐ์ต๋๋ค(ํ์ฅ์ค์์ ๋ฌผ์ ํ๊ธฐ๋ ๊ฒ๋ ์ข์ํ์ง๋ง). ๋๋ ๋ช ๋
์ ์ ์ด๋ฏธ
์ต๊ทผ์ ์ค๋งํธ ํ ์์คํ ์ผ๋ก Home Assistant๋ก ์ ํํ์ต๋๋ค. ๊ทธ ์ด์ ์ค ํ๋๋ ๋ค์ํ ์ข ๋ฅ์ ๊ทธ๋ํ๋ฅผ ํธ๋ฆฌํ๊ฒ ๊ตฌ์ฑํ ์ ์๋ ๊ฐ๋ฅ์ฑ๊ณผ ํจ๊ป ๋ง์ ์์ ๋ฐ์ดํฐ ์์ง์ ๊ตฌ์ฑํ ์ ์๋ ๋ฅ๋ ฅ์ด์์ต๋๋ค.
์ด ๊ธฐ์ฌ์ ์ค๋ช
๋ ์ ๋ณด๋ ์๋ก์ด ๊ฒ์ด ์๋๋ฉฐ ๋ค๋ฅธ ์์ค์ ์๋ ์ด๋ฌํ ๋ชจ๋ ๋ด์ฉ์ ์ด๋ฏธ ์ธํฐ๋ท์ ์ค๋ช
๋์ด ์์ต๋๋ค. ๊ทธ๋ฌ๋ ๊ฐ ๊ธฐ์ฌ๋ ์์น์ ์ผ๋ก ํ๋์ ์ ๊ทผ ๋ฐฉ์์ด๋ ์ธก๋ฉด๋ง ์ค๋ช
ํฉ๋๋ค. ์ด ๋ชจ๋ ์ ๊ทผ ๋ฐฉ์์ ๋น๊ตํ๊ณ ๊ฐ์ฅ ์ ํฉํ ๋ฐฉ์์ ์ง์ ์ ํํด์ผ ํ์ต๋๋ค. ์ด ๊ธฐ์ฌ๋ ์ฌ์ ํ ๋ฐ์ดํฐ ์์ง์ ๋ํ ์์ ํ ์ ๋ณด๋ฅผ ์ ๊ณตํ์ง๋ ์์ง๋ง ๋ด๊ฐ ์ํํ ๋ฐฉ๋ฒ์ ๋ํ ์ผ์ข
์ ์์ฝ์
๋๋ค. ๋ฐ๋ผ์ ๊ฑด์ค์ ์ธ ๋นํ๊ณผ ๊ฐ์ ์ ์ํ ์ ์์ ํ์ํฉ๋๋ค.
๋ฌธ์ ์ฑ๋ช
๋ฐ๋ผ์ ์ค๋ ์ด๋์ ๋ชฉํ๋ ๋ฌผ๊ณผ ์ ๊ธฐ ์๋น์ ๋ํ ์๋ฆ๋ค์ด ๊ทธ๋ํ๋ฅผ ์ป๋ ๊ฒ์ ๋๋ค.
- 2์ผ ๋์ ๋งค์๊ฐ
- 2์ฃผ๊ฐ ๋งค์ผ
- (์ ํ ์ฌํญ) ๋งค์ฃผ ๋ฐ ๋งค์
์ฌ๊ธฐ์๋ ๋ช ๊ฐ์ง ์ด๋ ค์์ด ์์ต๋๋ค.
- ํ์ค ์ฐจํธ ๊ตฌ์ฑ ์์๋ ์๋นํ ์ด์
ํ ๊ฒฝํฅ์ด ์์ต๋๋ค. ๊ธฐ๊ปํด์ผ ํฌ์ธํธ๋ณ๋ก ์ ๊ทธ๋ํ๋ฅผ ์์ฑํ ์ ์์ต๋๋ค.
์ ๊ฒ์ํ๋ฉด ํ์ค ์ฐจํธ์ ๊ธฐ๋ฅ์ ํ์ฅํ๋ ํ์ฌ ๊ตฌ์ฑ ์์๋ฅผ ์ฐพ์ ์ ์์ต๋๋ค. ๊ฐ์ ๋น์์ ๊ฒฝ์ฐ ์์น์ ์ผ๋ก ํ๋ฅญํ๊ณ ์๋ฆ๋ค์ด ๊ตฌ์ฑ ์์
๋ฏธ๋ ๊ทธ๋ํ ์นด๋ , ๊ทธ๋ฌ๋ ๋ค์ ์ ํ์ ์ ๋๋ค.- ๋ง๋ ๊ทธ๋ํ์ ๋งค๊ฐ ๋ณ์๋ฅผ ํฐ ๊ฐ๊ฒฉ์ผ๋ก ์ค์ ํ๊ธฐ ์ด๋ ต์ต๋๋ค(๋ง๋์ ๋๋น๋ ์๊ฐ ๋จ์๋ก ์ค์ ๋๋ฏ๋ก XNUMX์๊ฐ๋ณด๋ค ๊ธด ๊ฐ๊ฒฉ์ ๋ถ์๋ก ์ค์ ๋จ).
- ํ๋์ ๊ทธ๋ํ์ ๋ค๋ฅธ ์ํฐํฐ๋ฅผ ์ถ๊ฐํ ์ ์์ต๋๋ค(์: ์จ๋ ๋ฐ ์ต๋ ๋๋ ๋ง๋ ๊ทธ๋ํ๋ฅผ ์ ๊ณผ ๊ฒฐํฉ).
- ํ ์ด์์คํดํธ๋ ๊ธฐ๋ณธ์ ์ผ๋ก ๊ฐ์ฅ ์์์ ์ธ SQLite ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ฌ์ฉํ ๋ฟ๋ง ์๋๋ผ(๊ทธ๋ฆฌ๊ณ ํธ๋๋งจ์ธ ์ ๋ MySQL ๋๋ Postgres ์ค์น๋ฅผ ๋ง์คํฐํ์ง ์์์ต๋๋ค) ๋ฐ์ดํฐ๊ฐ ๊ฐ์ฅ ์ต์ ์ ๋ฐฉ์์ผ๋ก ์ ์ฅ๋์ง ์์ต๋๋ค. ์๋ฅผ ๋ค์ด ๋งค๊ฐ๋ณ์์ ๊ฐ์ฅ ์์ ๋์งํธ ๋งค๊ฐ๋ณ์๊ฐ ๋ณ๊ฒฝ๋ ๋๋ง๋ค ์ฝ XNUMXํฌ๋ก๋ฐ์ดํธ ํฌ๊ธฐ์ ๊ฑฐ๋ํ json์ด ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๊ธฐ๋ก๋ฉ๋๋ค.
{"entity_id": "sensor.water_cold_hourly", "old_state": {"entity_id": "sensor.water_cold_hourly", "state": "3", "attributes": {"source": "sensor.water_meter_cold", "status": "collecting", "last_period": "29", "last_reset": "2020-02-23T21:00:00.022246+02:00", "meter_period": "hourly", "unit_of_measurement": "l", "friendly_name": "water_cold_hourly", "icon": "mdi:counter"}, "last_changed": "2020-02-23T19:05:06.897604+00:00", "last_updated": "2020-02-23T19:05:06.897604+00:00", "context": {"id": "aafc8ca305ba4e49ad4c97f0eddd8893", "parent_id": null, "user_id": null}}, "new_state": {"entity_id": "sensor.water_cold_hourly", "state": "4", "attributes": {"source": "sensor.water_meter_cold", "status": "collecting", "last_period": "29", "last_reset": "2020-02-23T21:00:00.022246+02:00", "meter_period": "hourly", "unit_of_measurement": "l", "friendly_name": "water_cold_hourly", "icon": "mdi:counter"}, "last_changed": "2020-02-23T19:11:11.251545+00:00", "last_updated": "2020-02-23T19:11:11.251545+00:00", "context": {"id": "0de64b8af6f14bb9a419dcf3b200ef56", "parent_id": null, "user_id": null}}}
๋๋ ๊ฝค ๋ง์ ์ผ์(๋ชจ๋ ๋ฐฉ์ ์จ๋ ์ผ์, ๋ฌผ ๋ฐ ์ ๊ธฐ ๊ณ๋๊ธฐ)๋ฅผ ๊ฐ์ง๊ณ ์์ผ๋ฉฐ ์ผ๋ถ๋ ๋ํ ๊ฝค ๋ง์ ๋ฐ์ดํฐ๋ฅผ ์์ฑํฉ๋๋ค. ์๋ฅผ ๋ค์ด SDM220 ์ ๊ธฐ ๊ณ๋๊ธฐ๋ง 10~15์ด๋ง๋ค 8๊ฐ ์ ๋์ ๊ฐ์ ์์ฑํ๋๋ฐ ๊ทธ๋ฐ ๊ณ๋๊ธฐ๋ฅผ 100๊ฐ ์ค์นํ๊ณ ์ถ์ต๋๋ค. ์ ๊ฒ. ์ด๋ฌํ ๋ชจ๋ ๊ฐ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ๋งค์ผ 200-XNUMXMB์ฉ ์ฝ๊ฒ ํ์ฅํ ์ ์์ต๋๋ค. ์ผ์ฃผ์ผ ์์ ์์คํ ์ ๊ฐ์ ํ ๋ค์ฒ์ด๊ณ ํ ๋ฌ ์์ ํ๋์ ๋๋ผ์ด๋ธ๊ฐ ์ฃฝ๊ณ (๋ผ์ฆ๋ฒ ๋ฆฌ PI์ ์ผ๋ฐ์ ์ธ ํ ์ด์์คํดํธ ์ค์น์ ๊ฒฝ์ฐ) XNUMX ๋ ๋์ ๋ฐ์ดํฐ ์ ์ฅ์ ๋ํ ์๋ฌธ์ ์ฌ์ง๊ฐ ์์ต๋๋ค.
- ์ด์ด ์ข๋ค๋ฉด ์ธก์ ๊ธฐ๊ฐ ์๋น๋ ์์ฒด๋ฅผ ๊ณ์ฐํ ์ ์์ต๋๋ค. ์ธ์ ๋ ์ง ๋ฏธํฐ๊ธฐ๋ฅผ ์ผ์ ๋์ ์๋น๋์ด ๋ช์์ธ์ง ๋ฌผ์ด๋ณผ ์ ์์ต๋๋ค. ์ผ๋ฐ์ ์ผ๋ก ๋์งํธ ์ธํฐํ์ด์ค(RS232/RS485/Modbus/Zigbee)๊ฐ ์๋ ๋ชจ๋ ์ ๊ธฐ ๊ณ๋๊ธฐ๋ ์ด๋ฌํ ๊ธฐํ๋ฅผ ์ ๊ณตํฉ๋๋ค.
์ค์๊ฐ์์ผ๋ก ์ฅ์น๊ฐ ์ผ๋ถ ์๊ฐ ๋งค๊ฐ๋ณ์(์: ์๊ฐ ์ ๋ ฅ ๋๋ ์ ๋ฅ)๋ฅผ ๋จ์ํ ์ธก์ ํ๊ฑฐ๋ ๋จ์ํ X ์ํธ์ ๋๋ ๋ฆฌํฐ๋ง๋ค ํ์ค๋ฅผ ์์ฑํ ์ ์๋ ๊ฒฝ์ฐ์ ๋๋ค. ๊ทธ๋ฐ ๋ค์ ์ด๋ป๊ฒ ๋ฌด์์ ํตํฉํ๊ณ ์ด๋์ ๊ฐ์น๋ฅผ ์ถ์ ํ ์ง ๊ณ ๋ฏผํด์ผ ํฉ๋๋ค. ์ด๋ค ์ด์ ๋ก๋ ๋ค์ ๋ณด๊ณ ์๋ฅผ ๋์น ์ํ์ด ์์ผ๋ฉฐ ์์คํ ์ ์ฒด์ ์ ํ์ฑ์ ์๋ฌธ์ด ์ ๊ธฐ๋ฉ๋๋ค. ๋ฌผ๋ก ์ด ๋ชจ๋ ๊ฒ์ ํ ์ด์์คํดํธ์ ๊ฐ์ ์ค๋งํธ ํ ์์คํ ์ ๋งก๊ธธ ์ ์์ง๋ง ์๋ฌด๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ํญ๋ชฉ ์์ ๋ํ ํฌ์ธํธ๋ฅผ ์ทจ์ํ์ง ์์์ผ๋ฉฐ ํด๋ง ์ผ์๋ XNUMX์ด์ ํ ๋ฒ ์ด์ ์๋ํ์ง ์์ต๋๋ค(์ ํ ์ฌํญ ํ ์ด์์คํดํธ ์ํคํ ์ฒ).
์ ๊ทผ๋ฒ 1
๋จผ์ ์ด๋ค ํ ์ด์์คํดํธ๊ฐ ์ ๊ณต๋๋์ง ์ดํด๋ณด๊ฒ ์ต๋๋ค. ์ผ์ ๊ธฐ๊ฐ ๋์ ์๋น๋์ ์ธก์ ํ๋ ๊ฒ์ ์์ฒญ์ด ๋ง์ ๊ธฐ๋ฅ์ ๋๋ค. ๋ฌผ๋ก ์ค๋ ์ ์ utility_meter๋ผ๋ ํน์ ๊ตฌ์ฑ ์์๋ก ๊ตฌํ๋์์ต๋๋ค.
์ปดํฌ๋ํธ์ ๋ณธ์ง์ ๋ด๋ถ์์ current_accumulated_value ๋ณ์๋ฅผ ์์ํ๊ณ ์ง์ ๋ ๊ธฐ๊ฐ(์/์ฃผ/์)์ด ์ง๋๋ฉด ์ด๋ฅผ ์ฌ์ค์ ํ๋ค๋ ๊ฒ์ ๋๋ค. ๊ตฌ์ฑ ์์ ์์ฒด๋ ๋ค์ด์ค๋ ๋ณ์(์ผ์ข ์ ์ผ์ ๊ฐ)๋ฅผ ๋ชจ๋ํฐ๋งํ๊ณ ๊ฐ ์์ฒด์ ๋ณ๊ฒฝ ์ฌํญ์ ๊ตฌ๋ ํฉ๋๋ค. ์์ฑ๋ ๊ฒฐ๊ณผ๋ง ์ป์ต๋๋ค. ์ด๊ฒ์ ๊ตฌ์ฑ ํ์ผ์ ๋ช ์ค์ ์ค๋ช ๋์ด ์์ต๋๋ค.
utility_meter:
water_cold_hour_um:
source: sensor.water_meter_cold
cycle: hourly
water_cold_day_um:
source: sensor.water_meter_cold
cycle: daily
์ฌ๊ธฐ์ sensor.water_meter_cold๋ ๋ด๊ฐ ์ป์ ๋ฏธํฐ์ ํ์ฌ ๊ฐ(๋ฆฌํฐ)์
๋๋ค.
lovelace-UI์ ์๊ฐ๋ณ ๋ฐ ์ผ๋ณ ์ฐจํธ ์ฝ๋๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- type: history-graph
title: 'Hourly water consumption using vars'
hours_to_show: 48
entities:
- sensor.water_hour
- type: history-graph
title: 'Daily water consumption using vars'
hours_to_show: 360
entities:
- sensor.water_day
์ค์ ๋ก ์ด ์๊ณ ๋ฆฌ์ฆ์๋ ์ด ์ ๊ทผ๋ฒ์ ๋ฌธ์ ๊ฐ ์์ต๋๋ค. ์ด๋ฏธ ์ธ๊ธํ๋ฏ์ด ๊ฐ ๋ค์ด์ค๋ ๊ฐ(๊ฐ ๋ค์ ๋ฆฌํฐ์ ๋ํ ํ์ฌ ๋ฏธํฐ ํ๋ ๊ฐ)์ ๋ํด 1kb์ ๋ ์ฝ๋๊ฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์์ฑ๋ฉ๋๋ค. ๊ฐ ์ ํธ๋ฆฌํฐ ๋ฏธํฐ๋ ๋ํ ๊ธฐ๋ณธ์ ์ถ๊ฐ๋๋ ์ ๊ฐ์ ์์ฑํฉ๋๋ค. ์๊ฐ๋ณ/์ผ๋ณ/์ฃผ๋ณ/์๋ณ ํ๋ ๊ฐ์ ์์งํ๊ณ ์ถ๋ค๋ฉด ์, ์ฌ๋ฌ ๊ฐ์ ๊ธ์๊ด์ ๋ํด ์ ๊ธฐ ๊ณ๋๊ธฐ ํฉ์ ์ถ๊ฐํ๋ ค๋ฉด ๋ง์ ๋ฐ์ดํฐ๊ฐ ํ์ํ ๊ฒ์ ๋๋ค. ๋ ์ ํํ๊ฒ๋ ๋ฐ์ดํฐ๊ฐ ๋ง์ง ์์ง๋ง ํ ์ด์์คํดํธ๊ฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ถํ์ํ ์ ๋ณด๋ฅผ ๋ง์ด ์์ฑํ๊ธฐ ๋๋ฌธ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ํฌ๊ธฐ๊ฐ ๋น์ฝ์ ์ผ๋ก ์ปค์ง๋๋ค. ์ฃผ๊ฐ ๋ฐ ์๊ฐ ์ฐจํธ์ ๊ธฐ์ค ํฌ๊ธฐ๋ฅผ ์ถ์ ํ๋ ๊ฒ๋ ๋๋ ต์ต๋๋ค.
๋ํ ์ ํธ๋ฆฌํฐ ์ธก์ ๊ธฐ ์์ฒด๋ก๋ ๋ฌธ์ ๊ฐ ํด๊ฒฐ๋์ง ์์ต๋๋ค. utility meter ํ๋กฏ์ ๋งค์๊ฐ 0์ผ๋ก ์ฌ์ค์ ๋๋ ๋จ์กฐ๋กญ๊ฒ ์ฆ๊ฐํ๋ ํจ์์ ๋๋ค. ๋ํ ์ฌ์ฉ์ ์นํ์ ์ธ ์๋น ์ผ์ , ์ฆ ํด๋น ๊ธฐ๊ฐ ๋์ ๋ช ๋ฆฌํฐ๋ฅผ ์ญ์ทจํ๋์ง๋ ํ์ํฉ๋๋ค. ํ์ค ํ์คํ ๋ฆฌ ๊ทธ๋ํ ๊ตฌ์ฑ ์์๋ ์ด๋ฅผ ์ํํ์ง ์์ง๋ง ์ธ๋ถ ๋ฏธ๋ ๊ทธ๋ํ ์นด๋ ๊ตฌ์ฑ ์์๊ฐ ๋์์ด ๋ ์ ์์ต๋๋ค.
์ด๊ฒ์ lovelace-UI์ ์นด๋ ์ฝ๋์ ๋๋ค.
- aggregate_func: max
entities:
- color: var(--primary-color)
entity: sensor.water_cold_hour_um
group_by: hour
hours_to_show: 48
name: "Hourly water consumption aggregated by utility meter"
points_per_hour: 1
show:
graph: bar
type: 'custom:mini-graph-card'
์ผ์ ์ด๋ฆ, ๊ทธ๋ํ ์ ํ, ์์(ํ์ค ์ฃผํฉ์์ด ๋ง์์ ๋ค์ง ์์)๊ณผ ๊ฐ์ ํ์ค ์ค์ ์ธ์๋ ์ฌ๊ธฐ์์ 3๊ฐ์ง ์ค์ ์ ๊ธฐ๋กํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค.
- group_by:hour - ์๊ฐ์ ์์ ๋ถ๋ถ์ ์ ๋ ฌ๋ ์ด๋ก ์ฐจํธ๊ฐ ์์ฑ๋ฉ๋๋ค.
- points_per_hour: 1 - ์๊ฐ๋น ํ๋์ ๋ง๋
- ๊ทธ๋ฆฌ๊ณ ๊ฐ์ฅ ์ค์ํ ๊ฒ์ aggregate_func: max๋ ๋งค์๊ฐ ์ต๋ ๊ฐ์ ์ทจํ๋ ๊ฒ์ ๋๋ค. ํฑ๋ํ ์ฐจํธ๋ฅผ ๋ง๋๋ก ๋ฐ๊พธ๋ ๊ฒ์ ์ด ๋งค๊ฐ๋ณ์์ ๋๋ค.
์ผ์ชฝ์ ์๋ ์ด ํ์ ์ฃผ์๋ฅผ ๊ธฐ์ธ์ด์ง ๋ง์ญ์์ค. ์ด๋ ๋ฐ์ดํฐ๊ฐ ์๋ ๊ฒฝ์ฐ ๊ตฌ์ฑ ์์์ ํ์ค ๋์์
๋๋ค. ๊ทธ๋ฌ๋ ๋ฐ์ดํฐ๊ฐ ์์์ต๋๋ค. ์ด ๊ธฐ์ฌ๋ฅผ ์ํด ๋ช ์๊ฐ ์ ์ ์ ํธ๋ฆฌํฐ ๋ฏธํฐ๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ ์์ง์ ์ผฐ์ต๋๋ค(ํ์ฌ ์ ๊ทผ ๋ฐฉ์์ ์กฐ๊ธ ๋ ์์ธํ ์ค๋ช
ํ๊ฒ ์ต๋๋ค).
์ด ๊ทธ๋ฆผ์์ ๋๋ ๋๋๋ก ๋ฐ์ดํฐ ํ์๊ฐ ์๋ํ๊ณ ๋ง๋๊ฐ ์ค์ ๋ก ์ฌ๋ฐ๋ฅธ ๊ฐ์ ๋ฐ์ํ๋ค๋ ๊ฒ์ ๋ณด์ฌ์ฃผ๊ณ ์ถ์์ต๋๋ค. ํ์ง๋ง ๊ทธ๊ฒ ๋ค๊ฐ ์๋๋๋ค. ์ด๋ค ์ด์ ๋ก ์ค์ 11์์์ ์ค์ 12์ ์ฌ์ด์ ๊ฐ์กฐ ํ์๋ ์ด์ 19๋ฆฌํฐ๋ฅผ ํ์ํ์ง๋ง ๋์ผํ ์ผ์์์ ๊ฐ์ ๊ธฐ๊ฐ ๋์ ์ฝ๊ฐ ๋์ ์ด๋นจ ๊ทธ๋ํ์์๋ 62๋ฆฌํฐ์ ์๋น๋์ ๋ณผ ์ ์์ต๋๋ค. ๋ฒ๊ทธ์ด๊ฑฐ๋ ์์ด ๋น๋ค์ด์ก์ต๋๋ค. ๊ทธ๋ฌ๋ ๋๋ ์ฌ์ ํ ์ค๋ฅธ์ชฝ์ ๋ฐ์ดํฐ๊ฐ ๋์ด์ง ์ด์ ๋ฅผ ์ดํดํ์ง ๋ชปํฉ๋๋ค. ์๋น๊ฐ ์ ์์ด์๊ณ ์ด๋นจ ๊ทธ๋ํ์์๋ ๋ณผ ์ ์์ต๋๋ค.
์ผ๋ฐ์ ์ผ๋ก ๋๋์ด ์ ๊ทผ ๋ฐฉ์์ ํ๋น์ฑ์ ๋ฌ์ฑํ์ง ๋ชปํ์ต๋๋ค. ๊ทธ๋ํ๋ ๊ฑฐ์ ํญ์ ์ผ์ข ์ ์ด๋จ์ ๋ณด์ฌ์ค๋๋ค.
์ฃผ๊ฐ ์ผ์์ ๋ํ ์ ์ฌํ ์ฝ๋์ ๋๋ค.
- aggregate_func: max
entities:
- color: var(--primary-color)
entity: sensor.water_cold_day_um
group_by: interval
hours_to_show: 360
name: "Daily water consumption aggregated by utility meter"
points_per_hour: 0.0416666666
show:
graph: bar
type: 'custom:mini-graph-card'
group_by ๋งค๊ฐ๋ณ์๋ ๊ฐ๊ฒฉ์ผ๋ก ์ค์ ๋๊ณ points_per_hour ๋งค๊ฐ๋ณ์๋ ๋ชจ๋ ๊ฒ์ ์ง๋ฐฐํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ด๊ฒ์ ์ด ๊ตฌ์ฑ ์์์ ๋ ๋ค๋ฅธ ๋ฌธ์ ์ ๋๋ค. points_per_hour๋ 1์๊ฐ ์ดํ์ ์ฐจํธ์์๋ ์ ์๋ํ์ง๋ง ๋ ํฐ ๊ฐ๊ฒฉ์์๋ ์ญ๊ฒน๊ฒ ์๋ํฉ๋๋ค. ๊ทธ๋์ ํ๋ฃจ์ ํ๋์ ์ปฌ๋ผ์ ์ป์ผ๋ ค๋ฉด 24/0.04166666=XNUMX ๊ฐ์ ์ ๋ ฅํด์ผ ํ์ต๋๋ค. ๋๋ ์ฃผ๊ฐ ๋ฐ ์๊ฐ ์ฐจํธ์ ๋ํด ๋งํ๋ ๊ฒ์ด ์๋๋๋ค.
์ ๊ทผ๋ฒ 2
์ฌ์ ํ ํ ์ด์์คํดํธ๋ฅผ ํ์ ํ๋ ๋์ ๋๋ ๋ค์ ๋น๋์ค๋ฅผ ๋ฐ๊ฒฌํ์ต๋๋ค.
๋์ง๋ ์ฌ๋ฌ ์ ํ์ Xiaomi ์์ผ์์ ์๋น ๋ฐ์ดํฐ๋ฅผ ์์งํฉ๋๋ค. ๊ทธ์ ์์ ์ ์กฐ๊ธ ๋ ๊ฐ๋จํฉ๋๋ค. ์ค๋, ์ด์ ๋ฐ ํด๋น ์์ ์๋น ๊ฐ์น๋ฅผ ํ์ํ๊ธฐ๋ง ํ๋ฉด ๋ฉ๋๋ค. ์ฐจํธ๊ฐ ํ์ํ์ง ์์ต๋๋ค.
์๊ฐ ์ ๋ ฅ ๊ฐ์ ์๋ ํตํฉ์ ๋ํ ๋ ผ์์ ์ ์ณ๋๊ณ ์์์ด ์ ๊ทผ ๋ฐฉ์์ "์ ํ์ฑ"์ ๋ํด ์ด๋ฏธ ์ผ์ต๋๋ค. ๋์ผํ ๋งค์ฅ์์ ์ด๋ฏธ ์์งํ ๋์ ์๋น ๊ฐ์น๋ฅผ ์ฌ์ฉํ์ง ์์ ์ด์ ๋ ๋ช ํํ์ง ์์ต๋๋ค. ์ ์๊ฐ์๋ ์ฒ ์กฐ๊ฐ ๋ด๋ถ์ ํตํฉ์ด ๋ ์ ์๋ํ ๊ฒ์ ๋๋ค.
๋น๋์ค์์ ์ผ์ ๊ธฐ๊ฐ ๋์ ์๋์ผ๋ก ์๋น๋ฅผ ๊ณ์ฐํ๋ ์์ด๋์ด๋ฅผ ๊ฐ์ ธ์ต๋๋ค. ๋จ์์ ๊ฒฝ์ฐ ์ค๋๊ณผ ์ด์ ์ ๊ฐ๋ง ๊ณ ๋ คํ์ง๋ง ๋ ๋์๊ฐ ๊ทธ๋ํ๋ฅผ ๊ทธ๋ ค ๋ณด๊ฒ ์ต๋๋ค. ํ์์ ๊ฒฝ์ฐ ์ ์ํ๋ ๋ฐฉ๋ฒ์ ๋ณธ์ง์ ๋ค์๊ณผ ๊ฐ๋ค.
ํ์ฌ ์นด์ดํฐ ํ๋
๊ฐ์ ์ธ ๋ณ์ value_at_the_beginning_of_hour๋ฅผ ์์ฑํฉ๋๋ค.
์๊ฐ์ด ๋๋ ๋(๋๋ ๋ค์ ์๊ฐ์ด ์์๋ ๋) ํ์ด๋จธ์ ๋ฐ๋ผ ํ์ฌ ํ๋
๊ฐ๊ณผ ํด๋น ์๊ฐ์ด ์์๋ ๋ ์ ์ฅ๋ ํ๋
๊ฐ์ ์ฐจ์ด๋ฅผ ๊ณ์ฐํฉ๋๋ค. ์ด ์ฐจ์ด๋ ํ์ฌ ์๊ฐ์ ์๋น๋์
๋๋ค. ๊ฐ์ ์ผ์์ ์ ์ฅํ๊ณ ๋์ค์ ์ด ๊ฐ์ ๊ธฐ๋ฐ์ผ๋ก ๊ทธ๋ํ๋ฅผ ์์ฑํฉ๋๋ค.
๋ํ ๊ฑฐ๊ธฐ์ ์นด์ดํฐ์ ํ์ฌ ๊ฐ์ ๊ธฐ๋กํ์ฌ value_at_beginning_of_hour ๋ณ์๋ฅผ "์ฌ์ค์ "ํด์ผ ํฉ๋๋ค.
์ด ๋ชจ๋ ๊ฒ์ ํ ์ด์์คํดํธ ์์ฒด๋ฅผ ํตํด ์ ์ํ๋ ์ ์์ต๋๋ค.
์ด์ ์ ๊ทผ ๋ฐฉ์๋ณด๋ค ์ฝ๊ฐ ๋ ๋ง์ ์ฝ๋๋ฅผ ์์ฑํด์ผ ํฉ๋๋ค. ์ด "๋ณ์"๋ถํฐ ์์ํ๊ฒ ์ต๋๋ค. ์ฆ์ ์ฌ์ฉํ ์ ์๋ "๋ณ์" ์ํฐํฐ๋ ์์ง๋ง mqtt ๋ธ๋ก์ปค์ ์๋น์ค๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค. retain=true ํ๋๊ทธ์ ํจ๊ป ๊ฐ์ ๋ณด๋ผ ๊ฒ์ ๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด ๋ธ๋ก์ปค ๋ด๋ถ์ ๊ฐ์ด ์ ์ฅ๋๋ฉฐ ํ ์ด์์คํดํธ๊ฐ ์ฌ๋ถํ ๋ ๊ฒฝ์ฐ์๋ ์ธ์ ๋ ์ง ๊บผ๋ผ ์ ์์ต๋๋ค. ์๊ฐ๋ณ, ์ผ๋ณ ์นด์ดํฐ๋ฅผ ํ๋ฒ์ ๋ง๋ค์ด ๋ดค์ต๋๋ค.
- platform: mqtt
state_topic: "test/water/hour"
name: water_hour
unit_of_measurement: l
- platform: mqtt
state_topic: "test/water/hour_begin"
name: water_hour_begin
unit_of_measurement: l
- platform: mqtt
state_topic: "test/water/day"
name: water_day
unit_of_measurement: l
- platform: mqtt
state_topic: "test/water/day_begin"
name: water_day_begin
unit_of_measurement: l
๋ชจ๋ ๋ง๋ฒ์ ๊ฐ๊ฐ ๋งค์๊ฐ๊ณผ ๋งค์ผ ๋ฐค ์คํ๋๋ ์๋ํ์์ ๋ฐ์ํฉ๋๋ค.
- id: water_new_hour
alias: water_new_hour
initial_state: true
trigger:
- platform: time_pattern
minutes: 0
action:
- service: mqtt.publish
data:
topic: "test/water/hour"
payload_template: >
{{ (states.sensor.water_meter_cold.state|int) - (states.sensor.water_hour_begin.state|int) }}
retain: true
- service: mqtt.publish
data:
topic: "test/water/hour_begin"
payload_template: >
{{ states.sensor.water_meter_cold.state }}
retain: true
- id: water_new_day
alias: water_new_day
initial_state: true
trigger:
- platform: time
at: "00:00:00"
action:
- service: mqtt.publish
data:
topic: "test/water/day"
payload_template: >
{{ (states.sensor.water_meter_cold.state|int) - (states.sensor.water_day_begin.state|int) }}
retain: true
- service: mqtt.publish
data:
topic: "test/water/day_begin"
payload_template: >
{{ states.sensor.water_meter_cold.state }}
retain: true
๋ ์๋ํ ๋ชจ๋ ๋ค์ ๋ ๊ฐ์ง ์์ ์ ์ํํฉ๋๋ค.
- ์์ ๊ฐ๊ณผ ๋ ๊ฐ์ ์ฐจ์ด๋ก ๊ฐ๊ฒฉ๋น ๊ฐ์ ๊ณ์ฐํฉ๋๋ค.
- ๋ค์ ๊ฐ๊ฒฉ์ ๊ธฐ์ค ๊ฐ ์ ๋ฐ์ดํธ
์ด ๊ฒฝ์ฐ ๊ทธ๋ํ ๊ตฌ์ฑ์ ์ผ๋ฐ์ ์ธ ํ์คํ ๋ฆฌ ๊ทธ๋ํ๋ก ํด๊ฒฐ๋ฉ๋๋ค.
- type: history-graph
title: 'Hourly water consumption using vars'
hours_to_show: 48
entities:
- sensor.water_hour
- type: history-graph
title: 'Daily water consumption using vars'
hours_to_show: 360
entities:
- sensor.water_day
๋ค์๊ณผ ๊ฐ์ด ๋ณด์ ๋๋ค.
์์น์ ์ผ๋ก ์ด๊ฒ์ ์ด๋ฏธ ํ์ํ ๊ฒ์
๋๋ค. ์ด ๋ฐฉ๋ฒ์ ์ฅ์ ์ ๋ฐ์ดํฐ๊ฐ ๊ฐ๊ฒฉ๋น ํ ๋ฒ ์์ฑ๋๋ค๋ ๊ฒ์
๋๋ค. ์ ๊ฒ๋ค. ์๊ฐ๋ณ ์ฐจํธ์ ๊ฒฝ์ฐ ํ๋ฃจ์ ์ด 24๊ฐ์ ํญ๋ชฉ์ด ์์ต๋๋ค.
๋ถํํ๋ ์ด๊ฒ์ ์ฌ์ ํ โโ์ฑ์ฅํ๋ ๊ธฐ๋ฐ์ ์ผ๋ฐ์ ์ธ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ์ง ๋ชปํฉ๋๋ค. ์๊ฐ ์๋น๋ ๊ทธ๋ํ๋ฅผ ์ํ๋ค๋ฉด ์ต์ 200๋ ๋์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํด์ผ ํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ํ ์ด์์คํดํธ๋ ์ ์ฒด ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ํด ํ๋์ ์ ์ฅ ๊ธฐ๊ฐ ์ค์ ๋ง ์ ๊ณตํ๋ฏ๋ก ์์คํ ์ ๋ชจ๋ ๋ฐ์ดํฐ๋ 200000๋ ๋์ ์ ์ฅ๋์ด์ผ ํฉ๋๋ค. ์๋ฅผ ๋ค์ด, ์ ๋ XNUMX๋ ์ XNUMX์ ๋ฐฉ๋ฏธํฐ์ ๋ฌผ์ ์๋นํฉ๋๋ค. ์ด๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ XNUMX๊ฐ์ ํญ๋ชฉ์ด ์์์ ์๋ฏธํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋ค๋ฅธ ์ผ์๋ฅผ ๊ณ ๋ คํ๋ฉด ๊ทธ ์์น๋ ์ผ๋ฐ์ ์ผ๋ก ์๋ํด์ง๋๋ค.
์ ๊ทผ๋ฒ 3
๋คํํ ๋๋ํ ์ฌ๋๋ค์ ์ด๋ฏธ InfluxDB ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์์ฑํ์ฌ ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ์ต๋๋ค. ์ด ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ์๊ฐ ๊ธฐ๋ฐ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ๋ฐ ํน๋ณํ ์ต์ ํ๋์ด ์์ผ๋ฉฐ ๋ค์ํ ์ผ์์ ๊ฐ์ ์ ์ฅํ๋ ๋ฐ ์ด์์ ์ ๋๋ค. ์ด ์์คํ ์ ๋ํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ๊ฐ์ ์ถ์ถํ ๋ค์ ๋ค์ํ ๋ฐฉ๋ฒ์ผ๋ก ์ง๊ณํ ์ ์๋ SQL๊ณผ ๊ฐ์ ์ฟผ๋ฆฌ ์ธ์ด๋ฅผ ์ ๊ณตํฉ๋๋ค. ๋ง์ง๋ง์ผ๋ก, ์๋ก ๋ค๋ฅธ ๋ฐ์ดํฐ๋ฅผ ์๋ก ๋ค๋ฅธ ์๊ฐ์ ์ ์ฅํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, ์จ๋๋ ์ต๋์ ๊ฐ์ด ์์ฃผ ๋ณํ๋ ํ๋ ๊ฐ์ ๋จ XNUMX์ฃผ ๋์๋ง ์ ์ฅํ ์ ์๋ ๋ฐ๋ฉด ๋ฌผ ์๋น๋์ ์ผ์ผ ํ๋ ๊ฐ์ XNUMX๋ ๋์ ์ ์ฅํ ์ ์์ต๋๋ค.
InfluxDB ์ธ์๋ ๋๋ํ ์ฌ๋๋ค์ InfluxDB์ ๋ฐ์ดํฐ์์ ๊ทธ๋ํ๋ฅผ ๊ทธ๋ฆฌ๋ ์์คํ ์ธ Grafana๋ ๋ฐ๋ช ํ์ต๋๋ค. Grafana๋ ๋ค์ํ ์ ํ์ ์ฐจํธ๋ฅผ ๊ทธ๋ฆด ์ ์๊ณ ์ธ๋ถ์ ์ผ๋ก ์ฌ์ฉ์ ์ ์ํ ์ ์์ผ๋ฉฐ ๊ฐ์ฅ ์ค์ํ ๊ฒ์ ์ด๋ฌํ ์ฐจํธ๋ฅผ lovelace-UI ํ ์ด์์คํดํธ์ "์ฐ๊ฒฐ"ํ ์ ์๋ค๋ ๊ฒ์ ๋๋ค.
์๊ฐ์ ๋ฐ๋ค
๋ฐ๋ผ์ ๋จผ์ influxDB์ ์นด์ดํฐ ๊ฐ์ ์ถ๊ฐํด ๋ณด๊ฒ ์ต๋๋ค. ํ ์ด์์คํดํธ ๊ตฌ์ฑ์ ์ผ๋ถ(์ด ์์์๋ ๋์๋ฟ๋ง ์๋๋ผ ์จ์๋ ์ฆ๊ธธ ์ ์์):
influxdb:
host: localhost
max_retries: 3
default_measurement: state
database: homeassistant
include:
entities:
- sensor.water_meter_hot
- sensor.water_meter_cold
๋ค์ ํ ๋ฒ ํฝ์ฐฝํ์ง ์๋๋ก ํ ์ด์์คํดํธ ๋ด๋ถ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋์ผํ ๋ฐ์ดํฐ ์ ์ฅ์ ๋นํ์ฑํํฉ์๋ค.
recorder:
purge_keep_days: 10
purge_interval: 1
exclude:
entities:
- sensor.water_meter_hot
- sensor.water_meter_cold
์ด์ InfluxDB ์ฝ์๋ก ์ด๋ํ์ฌ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ค์ ํ๊ฒ ์ต๋๋ค. ํนํ ํน์ ๋ฐ์ดํฐ๊ฐ ์ ์ฅ๋๋ ๊ธฐ๊ฐ์ ๊ตฌ์ฑํด์ผ ํฉ๋๋ค. ์ด๊ฒ์ ์์ ๊ท์ ๋ฉ๋๋ค. ๋ณด์กด ์ ์ฑ - ์ด๋ ๊ธฐ๋ณธ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ด๋ถ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฌํ๋ฉฐ ๊ฐ ๋ด๋ถ ๋ฐ์ดํฐ๋ฒ ์ด์ค์๋ ๊ณ ์ ํ ์ค์ ์ด ์์ต๋๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก ๋ชจ๋ ๋ฐ์ดํฐ๋ autogen์ด๋ผ๋ ๋ณด์กด ์ ์ฑ ์ ์ถ๊ฐ๋๋ฉฐ ์ด ๋ฐ์ดํฐ๋ ์ผ์ฃผ์ผ ๋์ ์ ์ฅ๋ฉ๋๋ค. ์๊ฐ๋ณ ๋ฐ์ดํฐ๋ ํ ๋ฌ ๋์, ์ฃผ๊ฐ ๋ฐ์ดํฐ๋ XNUMX๋ ๋์, ์๋ณ ๋ฐ์ดํฐ๋ ์ ๋ ์ญ์ ๋์ง ์์์ผ๋ฉด ํฉ๋๋ค. ์ ์ ํ ๋ณด์กด ์ ์ฑ ์ ๋ง๋ค ๊ฒ์ ๋๋ค.
CREATE RETENTION POLICY "month" ON "homeassistant" DURATION 30d REPLICATION 1
CREATE RETENTION POLICY "year" ON "homeassistant" DURATION 52w REPLICATION 1
CREATE RETENTION POLICY "infinite" ON "homeassistant" DURATION INF REPLICATION 1
์ด์ ์ฌ์ค ์ฃผ์ ํธ๋ฆญ์ ์ฐ์ ์ฟผ๋ฆฌ๋ฅผ ์ฌ์ฉํ ๋ฐ์ดํฐ ์ง๊ณ์ ๋๋ค. ์ด๋ ์ง์ ๋ ๊ฐ๊ฒฉ์ผ๋ก ์ฟผ๋ฆฌ๋ฅผ ์๋์ผ๋ก ์์ํ๊ณ ์ด ์ฟผ๋ฆฌ์ ๋ํ ๋ฐ์ดํฐ๋ฅผ ์ง๊ณํ๊ณ ๊ฒฐ๊ณผ๋ฅผ ์ ๊ฐ์ ์ถ๊ฐํ๋ ๋ฉ์ปค๋์ฆ์ ๋๋ค. ์๋ฅผ ๋ค์ด๋ณด์(๊ฐ๋ ์ฑ์ ์ํด ์นผ๋ผ์ ์ ์์ง๋ง ์ค์ ๋ก๋ ์ด ๋ช ๋ น์ด๋ฅผ ํ ์ค์ ์ ๋ ฅํด์ผ ํ๋ค)
CREATE CONTINUOUS QUERY cq_water_hourly ON homeassistant
BEGIN
SELECT max(value) AS value
INTO homeassistant.month.water_meter_hour
FROM homeassistant.autogen.l
GROUP BY time(1h), entity_id fill(previous)
END
์ด ๋ช ๋ น:
- homeassistant ๋ฐ์ดํฐ๋ฒ ์ด์ค์ cq_water_cold_hourly๋ผ๋ ์ฐ์ ์ฟผ๋ฆฌ๋ฅผ ์์ฑํฉ๋๋ค.
- ์ฟผ๋ฆฌ๋ ๋งค์๊ฐ(time(1h)) ์คํ๋ฉ๋๋ค.
- ์ฟผ๋ฆฌ๋ ๋์ ๋ฐ ์จ์ ํ๋ ๊ฐ์ ํฌํจํ์ฌ measurement'a homeassistant.autogen.l(๋ฆฌํฐ)์์ ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ต๋๋ค.
- ์ง๊ณ๋ ๋ฐ์ดํฐ๋ entity_id๋ก ๊ทธ๋ฃนํ๋์ด ๋์ ๋ฐ ์จ์์ ๋ํด ๋ณ๋์ ๊ฐ์ ์์ฑํฉ๋๋ค.
- ๋ฆฌํฐ ์นด์ดํฐ๋ ๋งค ์๊ฐ๋ง๋ค ๋จ์กฐ๋กญ๊ฒ ์ฆ๊ฐํ๋ ์ํ์ค์ด๋ฏ๋ก ์ต๋๊ฐ์ ์ทจํด์ผ ํ๋ฏ๋ก ์ง๊ณ๋ max(value) ํจ์๋ก ์ํ๋ฉ๋๋ค.
- ์ ๊ฐ์ homeassistant.month.water_meter_hour์ ๊ธฐ๋ก๋ฉ๋๋ค. ์ฌ๊ธฐ์ Month๋ ๋ณด์กด ๊ธฐ๊ฐ์ด XNUMX๊ฐ์์ธ ๋ณด์กด ์ ์ฑ ์ ์ด๋ฆ์ ๋๋ค. ๋ํ ๋์ ๋ฐ ์จ์์ ๋ํ ๋ฐ์ดํฐ๋ ๊ฐ ํ๋์ ํด๋น ์ํฐํฐ_id ๋ฐ ๊ฐ์ ์ฌ์ฉํ์ฌ ๋ณ๋์ ๋ ์ฝ๋๋ก ๋ถ์ฐ๋ฉ๋๋ค.
๋ฐค์ด๋ ์ง์ ์ฌ๋์ด ์์ ๋๋ ๋ฌผ ์๋น๊ฐ ์์ผ๋ฏ๋ก homeassistant.autogen.l์๋ ์๋ก์ด ๊ธฐ๋ก์ด ์์ต๋๋ค. ์ผ๋ฐ ์ฟผ๋ฆฌ์์ ๊ฐ์ด ๋๋ฝ๋์ง ์๋๋ก ํ๋ ค๋ฉด fill(์ด์ )์ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด InfluxDB๊ฐ ์ง๋ ์๊ฐ ๊ฐ์ ์ฌ์ฉํ๊ฒ ๋ฉ๋๋ค.
์ํ๊น๊ฒ๋ ์ฐ์ ์ฟผ๋ฆฌ์๋ ํน์ด์ ์ด ์์ต๋๋ค. ์ฑ์ฐ๊ธฐ(์ด์ ) ํธ๋ฆญ์ด ์๋ํ์ง ์๊ณ ๋ ์ฝ๋๊ฐ ์์ฑ๋์ง ์์ต๋๋ค. ๊ฒ๋ค๊ฐ ์ด๊ฒ์ ์ผ์ข
์ ๊ทน๋ณตํ ์ ์๋ ๋ฌธ์ ์
๋๋ค.
๋ฌด์จ ์ผ์ด ์ผ์ด๋ฌ๋์ง ํ์ธํด ๋ณด๊ฒ ์ต๋๋ค. (๋ฌผ๋ก ๋ช ์๊ฐ ์ ๋ ๊ธฐ๋ค๋ ค์ผ ํฉ๋๋ค.)
> select * from homeassistant.month.water_meter_hour group by entity_id
...
name: water_meter_hour
tags: entity_id=water_meter_cold
time value
---- -----
...
2020-03-08T01:00:00Z 370511
2020-03-08T02:00:00Z 370513
2020-03-08T05:00:00Z 370527
2020-03-08T06:00:00Z 370605
2020-03-08T07:00:00Z 370635
2020-03-08T08:00:00Z 370699
2020-03-08T09:00:00Z 370761
2020-03-08T10:00:00Z 370767
2020-03-08T11:00:00Z 370810
2020-03-08T12:00:00Z 370818
2020-03-08T13:00:00Z 370827
2020-03-08T14:00:00Z 370849
2020-03-08T15:00:00Z 370921
๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๊ฐ์ UTC๋ก ์ ์ฅ๋๋ฏ๋ก ์ด ๋ชฉ๋ก์ 3์๊ฐ ์ฐจ์ด๊ฐ ๋ฉ๋๋ค. InfluxDB ์ถ๋ ฅ์ ์ค์ 7์ ๊ฐ์ ์ ์ฐจํธ์ ์ค์ 10์ ๊ฐ๊ณผ ์ผ์นํฉ๋๋ค. ๋ํ ์์นจ 2์์์ 5์ ์ฌ์ด์๋ ๋จ์ํ ๋ ์ฝ๋๊ฐ ์๋ค๋ ์ ์ ์ ์ํ์ญ์์ค. ์ด๊ฒ์ด ๋ฐ๋ก ์ฐ์ ์ฟผ๋ฆฌ์ ํน์ง์ ๋๋ค.
๋ณด์๋ค์ํผ ์ง๊ณ๋ ๊ฐ๋ ๋จ์กฐ๋กญ๊ฒ ์ฆ๊ฐํ๋ ์ํ์ค์ด๋ฉฐ ํญ๋ชฉ๋ง ๋น๋๊ฐ ๋ฎ์ต๋๋ค(ํ ์๊ฐ์ ํ ๋ฒ). ๊ทธ๋ฌ๋ ์ด๊ฒ์ ๋ฌธ์ ๊ฐ ๋์ง ์์ต๋๋ค. ์ฐจํธ์ ๋ํ ์ฌ๋ฐ๋ฅธ ๋ฐ์ดํฐ๋ฅผ ์ถ์ถํ๋ ๋ค๋ฅธ ์ฟผ๋ฆฌ๋ฅผ ์์ฑํ ์ ์์ต๋๋ค.
SELECT difference(max(value))
FROM homeassistant.month.water_meter_hour
WHERE entity_id='water_meter_cold' and time >= now() -24h
GROUP BY time(1h), entity_id
fill(previous)
๋๋ ํด๋ ํ ๊ฒ์ด๋ค :
- homeassistant.month.water_meter_hour ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์ง๋ ๋ (time >= now() -24h)์ entity_id='water_meter_cold' ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ต๋๋ค.
- ์์ ์ธ๊ธํ๋ฏ์ด homeassistant.month.water_meter_hour ์ํ์ค์์ ์ผ๋ถ ํญ๋ชฉ์ด ๋๋ฝ๋์์ ์ ์์ต๋๋ค. GROUP BY ์๊ฐ(1h)์ผ๋ก ์ฟผ๋ฆฌ๋ฅผ ์คํํ์ฌ ์ด ๋ฐ์ดํฐ๋ฅผ ์ฌ์์ฑํฉ๋๋ค. ์ด๋ฒ์๋ fill(previous)์ด ์ ๋๋ก ์๋ํ์ฌ ๋๋ฝ๋ ๋ฐ์ดํฐ๋ฅผ ์์ฑํฉ๋๋ค(ํจ์๊ฐ ์ด์ ๊ฐ์ ์ฌ์ฉํจ).
- ์ด ์ฟผ๋ฆฌ์์ ๊ฐ์ฅ ์ค์ํ ๊ฒ์ ์๊ฐ ํ์ ์ฌ์ด์ ์ฐจ์ด๋ฅผ ๊ณ์ฐํ๋ ์ฐจ์ด ํจ์์ ๋๋ค. ๊ทธ ์์ฒด๋ก๋ ์๋ํ์ง ์์ผ๋ฉฐ ์ง๊ณ ๊ธฐ๋ฅ์ด ํ์ํฉ๋๋ค. ์ด๊ฒ์ด ์ด์ ์ ์ฌ์ฉ๋ max()๊ฐ ๋๋๋ก ํ์ญ์์ค.
์คํ ๊ฒฐ๊ณผ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค
name: water_meter_hour
tags: entity_id=water_meter_cold
time difference
---- ----------
...
2020-03-08T02:00:00Z 2
2020-03-08T03:00:00Z 0
2020-03-08T04:00:00Z 0
2020-03-08T05:00:00Z 14
2020-03-08T06:00:00Z 78
2020-03-08T07:00:00Z 30
2020-03-08T08:00:00Z 64
2020-03-08T09:00:00Z 62
2020-03-08T10:00:00Z 6
2020-03-08T11:00:00Z 43
2020-03-08T12:00:00Z 8
2020-03-08T13:00:00Z 9
2020-03-08T14:00:00Z 22
2020-03-08T15:00:00Z 72
์ค์ 2์๋ถํฐ ์ค์ 5์(UTC)๊น์ง ์๋น๊ฐ ์์์ต๋๋ค. ๊ทธ๋ผ์๋ ๋ถ๊ตฌํ๊ณ ์ฟผ๋ฆฌ๋ fill(previous) ๋๋ถ์ ๋์ผํ ์๋น ๊ฐ์ ๋ฐํํ๊ณ ์ฐจ์ด ํจ์๋ ์ด ๊ฐ์ ์์ฒด์์ ๋นผ์ ์ค์ ๋ก ํ์ํ ์ถ๋ ฅ์์ โโ0์ ์ป์ต๋๋ค.
๋จ์ ์ผ์ ๊ทธ๋ํ๋ฅผ ๋ง๋๋ ๊ฒ๋ฟ์ ๋๋ค. ์ด๋ ๊ฒ ํ๋ ค๋ฉด Grafana๋ฅผ ์ด๊ณ ์ผ๋ถ ๊ธฐ์กด(๋๋ ์ ๋์๋ณด๋ ์์ฑ) ๋์๋ณด๋๋ฅผ ์ด๊ณ ์ ํจ๋์ ์์ฑํฉ๋๋ค. ์ฐจํธ ์ค์ ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
๊ฐ์ ๊ทธ๋ํ์ ๋์จ์ ๋ฐ์ดํฐ๋ฅผ ํ์ํ๊ฒ ์ต๋๋ค. ์์ฒญ์ ์์์ ์ค๋ช
ํ ๊ฒ๊ณผ ์ ํํ ๋์ผํฉ๋๋ค.
ํ์ ๋งค๊ฐ๋ณ์๋ ๋ค์๊ณผ ๊ฐ์ด ์ค์ ๋ฉ๋๋ค. ๋์๊ฒ ๊ทธ๊ฒ์ ๊ณ๋จ(๊ณ๋จ)์ผ๋ก ๊ฐ๋ ์ (์ )์ด ์๋ ๊ทธ๋ํ๊ฐ ๋ ๊ฒ์ ๋๋ค. ์คํ ๋งค๊ฐ๋ณ์๋ ์๋์์ ์ค๋ช ํฉ๋๋ค. ์๋์ ๋ช ๊ฐ์ง ํ์ ์ต์ ์ด ๋ ์์ง๋ง ๊ทธ๋ค์ง ํฅ๋ฏธ๋กญ์ง๋ ์์ต๋๋ค.
๊ฒฐ๊ณผ ๊ทธ๋ํ๋ฅผ ํ ์ด์์คํดํธ์ ์ถ๊ฐํ๋ ค๋ฉด ๋ค์์ ์ํํด์ผ ํฉ๋๋ค.
- ์ฐจํธ ํธ์ง ๋ชจ๋๋ฅผ ์ข ๋ฃํฉ๋๋ค. ์ด๋ค ์ด์ ๋ก ์ฌ๋ฐ๋ฅธ ์ฐจํธ ๊ณต์ ์ค์ ์ ๋์๋ณด๋ ํ์ด์ง์์๋ง ์ ๊ณต๋ฉ๋๋ค.
- ์ฐจํธ ์ด๋ฆ ์์ ์๋ ์ผ๊ฐํ์ ํด๋ฆญํ๊ณ ๋ฉ๋ด์์ ๊ณต์ ๋ฅผ ์ ํํฉ๋๋ค.
- ์ด๋ฆฌ๋ ์ฐฝ์์ ํผ๊ฐ๊ธฐ ํญ์ผ๋ก ์ด๋ํฉ๋๋ค.
- ํ์ฌ ์๊ฐ ๋ฒ์ ์ ํ ์ทจ์ - URL์ ํตํด ์๊ฐ ๋ฒ์๋ฅผ ์ค์ ํฉ๋๋ค.
- ํ์ํ ์ฃผ์ ๋ฅผ ์ ํํฉ๋๋ค. ๋ด ๊ฒฝ์ฐ๋ ๊ฐ๋ณ๋ค
- ๊ฒฐ๊ณผ URL์ lovelace-UI ์ค์ ์นด๋์ ๋ณต์ฌํฉ๋๋ค.
- type: iframe
id: graf_water_hourly
url: "http://192.168.10.200:3000/d-solo/rZARemQWk/water?orgId=1&panelId=2&from=now-2d&to=now&theme=light"
์๊ฐ ๋ฒ์(์ง๋ 2์ผ)๋ ๋์๋ณด๋ ์ค์ ์ด ์๋ ์ฌ๊ธฐ์์ ์ค์ ๋ฉ๋๋ค.
์ฐจํธ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค. ์ง๋ 2์ผ ๋์ ๋จ๊ฑฐ์ด ๋ฌผ์ ์ฌ์ฉํ์ง ์์ ์ฐฌ๋ฌผ ๊ทธ๋ํ๋ง ๊ทธ๋ ค์ง๋๋ค.
๋๋ ๋ด๊ฐ ๊ฐ์ฅ ์ข์ํ๋ ์ฐจํธ, ์คํ
๋ผ์ธ ๋๋ ์ค์ ๋ง๋๋ฅผ ์ค์ค๋ก ๊ฒฐ์ ํ์ง ์์์ต๋๋ค. ๋ฐ๋ผ์ ๋๋ ๋จ์ํ ์ผ์ผ ์๋น ์ผ์ ์ ์๋ฅผ ์ ์ํ ๊ฒ์
๋๋ค. ์ด๋ฒ์๋ ๋ฐ๋ก ๋ฐ์
๋๋ค. ์ฟผ๋ฆฌ๋ ์์์ ์ค๋ช
ํ ๊ฒ๊ณผ ๊ฐ์ ๋ฐฉ์์ผ๋ก ์์ฑ๋ฉ๋๋ค. ํ์ ์ต์
์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
์ด ์ฐจํธ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
๋ฐ๋ผ์ Stack ๋งค๊ฐ ๋ณ์์ ๋ํด. ์ด ๊ทธ๋ํ์์๋ ๋์ ๋ง๋๊ฐ ๋จ๊ฑฐ์ด ๋ง๋ ์์ ๊ทธ๋ ค์ ธ ์์ต๋๋ค. ์ด ๋์ด๋ ํด๋น ๊ธฐ๊ฐ ๋์ ๋์ ๋ฐ ์จ์์ ์ด ์๋น๋์ ํด๋นํฉ๋๋ค.
ํ์๋ ๋ชจ๋ ๊ทธ๋ํ๋ ๋์ ์ ๋๋ค. ๊ด์ฌ ์ง์ ์๋ก ๋ง์ฐ์ค๋ฅผ ์ด๋ํ๋ฉด ํน์ ์ง์ ์ ์ธ๋ถ ์ ๋ณด์ ๊ฐ์ ๋ณผ ์ ์์ต๋๋ค.
๋ถํํ๋ ์ฐ๊ณ ์๋ ํ๋ฆฌ ๋ ๋ง๋ฆฌ๊ฐ์์์ต๋๋ค. ๋ง๋ ์ฐจํธ์์๋(๊ณ๋จ์ ์ด ์๋ ์ฐจํธ์ ๋ฌ๋ฆฌ) ๋ง๋์ ์ค์์ด ์ ์ค์์ ์์ง ์๊ณ 00:00์ ์์ต๋๋ค. ์ ๊ฒ๋ค. ์ด์ ์ผ์ชฝ ์ ๋ฐ์ด ์ ๋ ๋์ ๊ทธ๋ ค์ง๋๋ค. ๋ฐ๋ผ์ ํ ์์ผ๊ณผ ์ผ์์ผ์ ๋ํ ๊ทธ๋ํ๋ ํธ๋ฅธ์ ์์ญ์ ์ฝ๊ฐ ์ผ์ชฝ์ ๊ทธ๋ ค์ง๋๋ค. ๋ด๊ฐ ๊ทธ๊ฒ์ ์ด๊ธธ ๋ฐฉ๋ฒ์ ์์๋ผ ๋๊น์ง.
๋ ๋ค๋ฅธ ๋ฌธ์ ๋ ๋งค์ ๊ฐ๊ฒฉ์ผ๋ก ์ฌ๋ฐ๋ฅด๊ฒ ์๋ํ์ง ์๋๋ค๋ ๊ฒ์ ๋๋ค. ์ฌ์ค์ ์๊ฐ/์ผ/์ฃผ์ ๊ธธ์ด๋ ๊ณ ์ ๋์ด ์์ง๋ง ํ ๋ฌ์ ๊ธธ์ด๋ ๋งค๋ฒ ๋ค๋ฆ ๋๋ค. InfluxDB๋ ๋์ผํ ๊ฐ๊ฒฉ์ผ๋ก๋ง ์๋ํ ์ ์์ต๋๋ค. ์ง๊ธ๊น์ง ๋ด ๋๋๋ 30์ผ์ด๋ผ๋ ๊ณ ์ ๋ ๊ฐ๊ฒฉ์ ์ค์ ํ๊ธฐ์ ์ถฉ๋ถํ์ต๋๋ค. ์, ์ฐจํธ๋ XNUMX๋ ๋์ ์ฝ๊ฐ ๋ ๋ค๋๋ฉฐ ๋ง๋๋ ์๊ณผ ์ ํํ ์ผ์นํ์ง ์์ต๋๋ค. ๊ทธ๋ฌ๋ ์ด๊ฒ์ ๋์คํ๋ ์ด ๋ฏธํฐ๋ก์ ๋์๊ฒ ํฅ๋ฏธ๋กญ๊ธฐ ๋๋ฌธ์ ์ด๊ฒ์ผ๋ก ๊ด์ฐฎ์ต๋๋ค.
์ ์ด๋ ๋ ๊ฐ์ง ํด๊ฒฐ์ฑ ์ด ์์ต๋๋ค.
- ์๊ฐ ์ฐจํธ์์ ์ ์๋ฅผ ๋งค๊ธฐ๊ณ ์์ ์ ์ฃผ๊ฐ ์ฐจํธ๋ก ์ ํํฉ๋๋ค. 52๋ ์ XNUMX๊ฐ์ ์ํด๋ฆฌ ๋ฐ๊ฐ ๊ฝค ๊ด์ฐฎ์ ๋ณด์ ๋๋ค.
- ์๊ฐ ์๋น๋ ์์ฒด๋ฅผ ๋ฐฉ๋ฒ 2๋ฒ์ผ๋ก ์๊ฐํ์๊ณ , ๊ทธ๋ผํ๋๋ ์๋ฆ๋ค์ด ๊ทธ๋ํ๋ง์ ์ํด ์ฌ์ฉํ์ธ์. ๊ฝค ์ ํํ ํด๊ฒฐ์ฑ ์ ๋๋ค. ๋น๊ต๋ฅผ ์ํด ์ง๋ ํด์ ์ฐจํธ๋ฅผ ์ค๋ฒ๋ ์ดํ ์๋ ์์ต๋๋ค. grafana๋ ๊ทธ๋ ๊ฒ ํ ์ ์์ต๋๋ค.
๊ฒฐ๋ก
์ด์ ๋ ๋ชจ๋ฅด๊ฒ ์ง๋ง ์ด๋ฐ ์ข ๋ฅ์ ์ฐจํธ๋ฅผ ์ข์ํฉ๋๋ค. ๊ทธ๋ค์ ์ธ์์ด ํ์ฐฝ์ด๊ณ ๋ชจ๋ ๊ฒ์ด ๋ณํ๊ณ ์์์ ๋ณด์ฌ์ค๋๋ค. ์ด์ ๋ ๋ง์๊ณ ์ค๋์ ์ ์๊ณ ๋ด์ผ์ ๋ค๋ฅธ ๊ฒ์ด ์์ ๊ฒ์ ๋๋ค. ์๋น ์ฃผ์ ์ ๋ํด ๊ฐ์ ๊ณผ ํ๋ ฅํ๋ ๊ฒ์ด ๋จ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ํ์ฌ์ ์์์๋ ๋ถ๊ตฌํ๊ณ ๋ฒ์์ ํฌ๊ณ ์ดํดํ ์์๋ ์์น๋ ์ด๋ฏธ ์๋นํ ์ดํดํ ์์๋ ์๋น ๊ทธ๋ฆผ์ผ๋ก ๋ฐ๋๊ณ ์์ต๋๋ค.
๊ฑฐ์ 20๋
์ ํ๋ก๊ทธ๋๋จธ ๊ฒฝ๋ ฅ์๋ ๋ถ๊ตฌํ๊ณ ๋๋ ์ฌ์ค์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๊ต์ฐจํ์ง ์์์ต๋๋ค. ๋ฐ๋ผ์ ์ธ๋ถ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ค์นํ๋ ๊ฒ์ ๋๋ฌด ๋ํดํ๊ณ ์ดํดํ ์ ์๋ ์ผ์ฒ๋ผ ๋ณด์์ต๋๋ค. ๋ชจ๋ ๊ฒ ๋ฐ๋์๋ค
์ ๋ชฉ์์ ์ ๊ธฐ ์ฌ์ฉ๋์ ๋ํด ์ธ๊ธํ์ต๋๋ค. ์ํ๊น๊ฒ๋ ํ์ฌ ๊ทธ๋ํ๋ฅผ ์ ๊ณตํ ์ ์์ต๋๋ค. ํ๋์ SDM120 ๋ฏธํฐ๊ฐ ์๋ํ์ง ์๊ณ ๋ค๋ฅธ ํ๋๋ Modbus๋ฅผ ํตํด ์ก์ธ์คํ ๋ ๋ฒ๊ทธ๊ฐ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ์ด๊ฒ์ ์ด ๊ธฐ์ฌ์ ์ฃผ์ ์ ์ด๋ค ์์ผ๋ก๋ ์ํฅ์ ๋ฏธ์น์ง ์์ต๋๋ค. ๊ทธ๋ํ๋ ๋ฌผ๊ณผ ๊ฐ์ ๋ฐฉ์์ผ๋ก ์์ฑ๋ฉ๋๋ค.
์ด ๊ธฐ์ฌ์์๋ ๋ด๊ฐ ์ง์ ์๋ํ ์ ๊ทผ ๋ฐฉ์์ ์ ๊ณตํ์ต๋๋ค. ํ์คํ ๋ด๊ฐ ๋ชจ๋ฅด๋ ๋ฐ์ดํฐ ์์ง ๋ฐ ์๊ฐํ๋ฅผ ๊ตฌ์ฑํ๋ ๋ค๋ฅธ ๋ฐฉ๋ฒ์ด ์์ต๋๋ค. ์๊ฒฌ์ ๋ํด ์๋ ค์ฃผ์ญ์์ค. ๋งค์ฐ ๊ด์ฌ์ด ์์ต๋๋ค. ๋๋ ๊ฑด์ค์ ์ธ ๋นํ๊ณผ ์๋ก์ด ์์ด๋์ด์ ๊ธฐ๋ปํ ๊ฒ์
๋๋ค. ์์ ์๋ฃ๊ฐ ๋๊ตฐ๊ฐ์๊ฒ ๋์์ด ๋์์ผ๋ฉด ํฉ๋๋ค.
์ถ์ฒ : habr.com