Хонаи интеллектуалӣ: Мо графикҳои истеъмоли об ва нерӯи барқро дар Home Assistant месозем

Хонаи интеллектуалӣ: Мо графикҳои истеъмоли об ва нерӯи барқро дар Home Assistant месозем
Ҳар дафъае, ки ман пули барқу об мегирам, ҳайронам, ки оё оилаи ман дар ҳақиқат ин қадар истеъмол мекунад? Хуб, ҳа, ҳаммом фарши гарм ва дег дорад, аммо онҳо ҳамеша оташ намегиранд. Мо инчунин ба назар чунин мерасад, ки обро сарфа мекунем (гарчанде ки мо инчунин дар ҳаммом пошиданро дӯст медорем). Якчанд сол пеш ман аллакай ҳисобкунакҳои об пайваст и барқ ба хонаи интеллектуалӣ, аммо дар он ҷо чизҳо банд шуданд. Мо танҳо ҳоло ба таҳлили истеъмол шурӯъ кардем, ки ин мақола воқеан дар бораи он аст.

Ман ба наздикӣ ба Home Assistant ҳамчун системаи хонагии интеллектуалии худ гузаштам. Яке аз сабабҳо маҳз имконияти ташкили ҷамъоварии миқдори зиёди маълумот бо қобилияти ба осонӣ сохтани намудҳои гуногуни графикҳо буд.

Маълумоте, ки дар ин мақола тавсиф шудааст, нав нест; ҳамаи ин чизҳо дар зери соусҳои гуногун аллакай дар Интернет тавсиф шудаанд. Аммо ҳар як мақола одатан танҳо як равиш ё ҷанбаро тавсиф мекунад. Ман маҷбур будам, ки ҳамаи ин равишҳоро муқоиса карда, худам мувофиқтаринашро интихоб кунам. Дар мақола то ҳол маълумоти ҳамаҷониба дар бораи ҷамъоварии маълумот дода нашудааст, балки як навъ хулосаи он аст, ки чӣ тавр ман ин корро анҷом додам. Аз ин рӯ, интиқоди созанда ва пешниҳодҳо барои беҳтар кардан қобили қабул аст.

Тартиб додани масъала

Ҳамин тариқ, ҳадафи машқи имрӯза гирифтани графикҳои зебои истеъмоли об ва нерӯи барқ ​​аст:

  • Ҳар соат барои 2 рӯз
  • Ҳар рӯз барои 2 ҳафта
  • (ихтиёрӣ) ҳарҳафтаина ва моҳона

Дар ин бобат баъзе душвориҳо вуҷуд доранд:

  • Унсурҳои диаграммаи стандартӣ одатан хеле заифанд. Дар беҳтарин ҳолат, шумо метавонед як графи хатиро нуқта ба нуқта созед.

    Агар шумо ба қадри кофӣ нигоҳ кунед, шумо метавонед ҷузъҳои тарафи сеюмро пайдо кунед, ки имкониятҳои диаграммаи стандартиро васеъ мекунанд. Барои ёрдамчии хона, дар асл, ин ҷузъи хуб ва зебост корти хурди графикӣ, аммо он инчунин каме маҳдуд аст:

    • Муқаррар кардани параметрҳои диаграммаи сатр дар фосилаҳои калон душвор аст (барои сатр бо қисмҳои як соат муқаррар карда мешавад, яъне фосилаҳои аз як соат дарозтар бо рақамҳои касрӣ муқаррар карда мешаванд)
    • Шумо наметавонед объектҳои гуногунро ба як график илова кунед (масалан, ҳарорат ва намӣ ё диаграммаи сатрро бо хат якҷоя кунед)
  • Ёрдамчии хонагӣ на танҳо ба таври нобаёнӣ базаи ибтидоии SQLite-ро истифода мебарад (ва ман, як усто, натавонистам насби MySQL ё Postgres-ро иҷро кунад), аммо маълумот ба таври беҳтарин нигоҳ дошта намешавад. Ҳамин тавр, масалан, ҳар дафъае, ки шумо ҳатто хурдтарин параметри рақамии параметрро тағир медиҳед, ба пойгоҳи додаҳо як 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 МБ пур кунанд. Пас аз як ҳафта система базӯр ҳаракат мекунад ва пас аз як моҳ флеш-диск мемирад (дар сурати насби маъмулии ёрдамчии хонагӣ дар Raspberry PI) ва нигоҳ доштани маълумот дар тӯли як сол ғайриимкон аст.

  • Агар шумо хушбахт бошед, ҳисобкунаки шумо метавонад худи истеъмолро ҳисоб кунад. Шумо метавонед дар вақти дилхоҳ ба ҳисобкунак муроҷиат кунед ва пурсед, ки арзиши ҷамъшудаи истеъмолӣ соат чанд аст. Чун қоида, ҳамаи ҳисобкунакҳои барқ, ки интерфейси рақамӣ доранд (RS232/RS485/Modbus/Zigbee) ин имкониятро фароҳам меоранд.

    Бадтараш он аст, ки дастгоҳ метавонад танҳо як параметри фаврӣ (масалан, қувваи фаврӣ ё ҷараёнро) чен кунад ё танҳо дар ҳар X ватт-соат ё литр импулсҳо тавлид кунад. Пас шумо бояд дар бораи он фикр кунед, ки чӣ гуна ва бо чӣ онро муттаҳид кардан ва дар куҷо арзиш ҷамъ кардан лозим аст. Бо ягон сабаб хатари аз даст додани гузориши навбатӣ вуҷуд дорад ва дурустии система дар маҷмӯъ саволҳоро ба миён меорад. Шумо метавонед, албатта, ҳамаи инро ба як системаи интеллектуалии хонагӣ, ба монанди ёрдамчии хона, бовар кунед, аммо ҳеҷ кас нуктаро дар бораи шумораи сабтҳо дар пойгоҳи додаҳо бекор накардааст ва дар як сония на бештар аз як маротиба пурсиш кардани сенсорҳо имконнопазир аст (а. маҳдудияти меъмории ёрдамчии хона).

Равиши 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 арзиши метри ҷорӣ дар литр аст, ки ман мегирам бевосита аз порчаи охан аз ҷониби mqtt. Тарҳ 2 сенсори нави water_cold_hour_um ва water_cold_day_um эҷод мекунад, ки хонишҳои ҳарсоата ва ҳаррӯзаро ҷамъ мекунанд ва пас аз гузаштани мӯҳлат онҳоро ба сифр бармегардонанд. Дар ин ҷо диаграммаи батареяи соатбайъ барои ним рӯз аст.

Хонаи интеллектуалӣ: Мо графикҳои истеъмоли об ва нерӯи барқро дар Home Assistant месозем

Рамзи диаграммаҳои ҳарсоата ва ҳаррӯза барои 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

Дар асл, мушкилот бо ин равиш дар ин алгоритм аст. Тавре ки ман аллакай зикр кардам, барои ҳар як арзиши воридотӣ (хониши ҳисобкунак барои ҳар як литри оянда) 1кб сабтҳо дар пойгоҳи додаҳо тавлид мешаванд. Ҳар як ҳисобкунаки коммуналӣ инчунин арзиши нав тавлид мекунад, ки он низ ба база илова карда мешавад. Агар ман хоҳам, ки хонишҳои соатбайъ/ҳаррӯза/ҳафтаина/моҳа ва барои якчанд обанбор ҷамъоварӣ кунам ва як бастаи ҳисобкунакҳои барқиро илова кунам, ин маълумоти зиёде хоҳад буд. Хуб, дақиқтараш, маълумоти зиёд нест, аммо азбаски ёрдамчии хонагӣ як қатор маълумоти нолозимро ба пойгоҳи додаҳо менависад, андозаи махзани маълумот бо ҷаҳиш ва ҳудуд меафзояд. Ман метарсам, ки ҳатто андозаи пойгоҳро барои диаграммаҳои ҳафтаина ва моҳона ҳисоб кунам.

Илова бар ин, ҳисобкунаки коммуналӣ худ аз худ мушкилотро ҳал намекунад. Графикаи арзишҳое, ки ҳисобкунаки коммуналӣ тавлид мекунад, як функсияи якранг афзоишёбанда аст, ки ҳар соат ба 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 — график бо сутунҳо ба аввали соат мувофиқ карда мешавад
  • point_per_hour: 1 - як бар барои ҳар соат
  • Ва муҳимтар аз ҳама, aggregate_func: max - дар давоми ҳар соат арзиши максималиро гиред. Маҳз ҳамин параметр графики дандони арраро ба сутунҳо табдил медиҳад

Хонаи интеллектуалӣ: Мо графикҳои истеъмоли об ва нерӯи барқро дар Home Assistant месозем

Ба сатри сутунҳо дар тарафи чап аҳамият надиҳед - ин рафтори стандартии ҷузъ аст, агар маълумот мавҷуд набошад. Аммо ягон маълумот вуҷуд надошт - ман танҳо чанд соат пеш ҷамъоварии маълумотро барои ҳисобкунакҳои коммуналӣ ба кор андохтам, танҳо ба хотири ин мақола (ман равиши кунунии худро каме камтар тавсиф мекунам).

Дар ин расм ман мехостам нишон диҳам, ки баъзан намоиши додаҳо ҳатто кор мекунад ва сутунҳо воқеан арзишҳои дурустро инъикос мекунанд. Аммо ин ҳама нест. Бо баъзе сабабҳо, дар сутуни интихобшуда дар давраи аз соати 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 ба фосила гузошта шудааст ва параметри point_per_hoot ҳама чизро идора мекунад. Ва дар ин ҷо мушкили дигаре бо ин ҷузъ мавҷуд аст - point_per_hour дар диаграммаҳои як соат ё камтар хуб кор мекунад, аммо он дар фосилаҳои калонтар аз байн меравад. Ҳамин тавр, барои ба даст овардани як сутун дар як рӯз, ман бояд арзиши 1/24 = 0.04166666 ворид кунам. Ман ҳатто дар бораи диаграммаҳои ҳафтаина ва моҳона гап намезанам.

Равиши 2

Ҳангоми фаҳмидани ёрдамчии хона, ман бо ин видео дучор шудам:


Як дӯст маълумоти истеъмолиро аз якчанд намуди розеткаҳои Xiaomi ҷамъ меорад. Вазифаи ӯ каме осонтар аст - танҳо арзиши истеъмолро барои имрӯз, дирӯз ва моҳ нишон диҳед. Ҳеҷ гуна ҷадвал лозим нест.

Биёед муҳокимаҳоро дар бораи ҳамгироии дастӣ арзишҳои қудрати фаврӣ як сӯ гузорем - ман дар боло дар бораи "дурустии" ин равиш навишта будам. Маълум нест, ки чаро вай арзишхои истеъмолии чамъшударо, ки аллакай дар худи хамон нукта чамъ карда мешавад, истифода набурдааст. Ба андешаи ман, ҳамгироӣ дар дохили сахтафзор беҳтар кор хоҳад кард.

Аз видео мо идеяи ҳисоб кардани истеъмолро дар тӯли як давра мегирем. Бача танҳо арзишҳои имрӯз ва дирӯзро ҳисоб мекунад, аммо мо минбаъд низ меравем ва кӯшиш мекунем, ки график кашем. Мохияти усули пешниходшуда дар мавриди ман чунин аст.

Биёед арзиши тағирёбандаро дар_оғози_соат созем, ки дар он мо хониши ҷории ҳисобкунакро сабт мекунем
Бо истифода аз таймер, дар охири соат (ё дар аввали соат) мо фарқияти байни хониши ҷорӣ ва хониши дар аввали соат нигоҳ дошташударо ҳисоб мекунем. Ин тафовут истеъмоли соати ҷорӣ хоҳад буд - мо арзишро дар сенсор захира мекунем ва дар оянда мо дар асоси ин арзиш график месозем.
Шумо инчунин бояд тағирёбандаи 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

Чунин ба назар мерасад:

Хонаи интеллектуалӣ: Мо графикҳои истеъмоли об ва нерӯи барқро дар Home Assistant месозем

Дар асл, ин аллакай он чизест, ки лозим аст. Бартарии ин усул дар он аст, ки маълумот дар як фосила як маротиба тавлид мешавад. Онхое. танҳо 24 сабт дар як рӯз барои диаграммаи соатбайъ.

Мутаассифона, ин проблемаи умумии базаи афзояндаро хануз хал намекунад. Агар ман мехоҳам, ки графики истеъмоли ҳармоҳа дошта бошам, ман бояд ҳадди аққал як сол маълумотро нигоҳ дошта бошам. Ва азбаски ёрдамчии хонагӣ танҳо як танзимоти давомнокии нигоҳдорӣ барои тамоми пойгоҳи додаҳоро таъмин мекунад, ин маънои онро дорад, ки ҲАМАИ маълумот дар система бояд барои як сол нигоҳ дошта шавад. Масалан, ман дар як сол 200 метри мукааб об сарф мекунам, яъне ин маънои 200000 XNUMX сабт дар базаро дорад. Ва агар шумо сенсорҳои дигарро ба инобат гиред, он гоҳ ин рақам умуман беодоб мешавад.

Равиши 3

Хушбахтона, одамони оқил аллакай ин мушкилотро тавассути навиштани пойгоҳи додаҳои InfluxDB ҳал кардаанд. Ин пойгоҳи додаҳо махсус барои нигоҳ доштани маълумот дар асоси вақт оптимизатсия карда шудааст ва барои нигоҳ доштани арзишҳои сенсорҳои гуногун беҳтарин аст. Система инчунин забони дархости SQL-ро пешниҳод мекунад, ки ба шумо имкон медиҳад арзишҳоро аз пойгоҳи додаҳо истихроҷ кунед ва сипас онҳоро бо роҳҳои гуногун ҷамъ кунед. Ниҳоят, маълумотҳои гуногун метавонанд барои вақтҳои гуногун нигоҳ дошта шаванд. Масалан, нишондиҳандаҳои зуд-зуд тағйирёбанда, ба монанди ҳарорат ё намӣ метавонанд ҳамагӣ ду ҳафта нигоҳ дошта шаванд, дар ҳоле ки нишондиҳандаҳои истеъмоли ҳаррӯзаи об метавонад дар давоми тамоми сол нигоҳ дошта шавад.

Ба ғайр аз InfluxDB, одамони оқил инчунин Grafana-ро ихтироъ карданд, ки система барои кашидани графикҳо дар асоси маълумот аз InfluxDB мебошад. Grafana метавонад намудҳои гуногуни графикҳоро кашад, онҳоро ба таври муфассал танзим кунад ва муҳимтар аз ҳама, ин графикҳоро ба ёрдамчии хонагии lovelace-UI "васл кардан" мумкин аст.

Илҳом гиред дар ин ҷо и дар ин ҷо. Дар мақолаҳо раванди насб ва пайваст кардани InfluxDB ва Grafana ба ёрдамчии хона ба таври муфассал тавсиф карда мешаванд. Ман ба ҳалли мушкилоти мушаххаси худ диққат медиҳам.

Пас, пеш аз ҳама, биёед ба илова кардани арзиши ҳисобкунак дар 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 нигоҳ дошта мешавад; ин маълумот барои як ҳафта нигоҳ дошта мешавад. Ман мехостам, ки маълумоти соатбайъ дар давоми як моҳ нигоҳ дошта шавад, маълумоти ҳафтаина барои як сол нигоҳ дошта шавад ва маълумоти моҳона ҳеҷ гоҳ нест карда нашавад. Биёед сиёсати мувофиқи нигоҳдорӣ эҷод кунем

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 эҷод мекунад
  • Дархост ҳар соат иҷро карда мешавад (вақт (1 соат))
  • Дархост ҳама маълумотро аз ченаки homeassistant.autogen.l (литр), аз ҷумла хонишҳои оби хунук ва гарм хориҷ мекунад.
  • Маълумоти ҷамъшуда аз ҷониби entity_id гурӯҳбандӣ карда мешавад, ки ба мо барои оби хунук ва гарм арзишҳои алоҳида медиҳад
  • Азбаски ҳисобкунаки литр пайдарпаии якранг афзоишёбанда дар давоми ҳар соат аст, барои гирифтани арзиши максималӣ зарур аст, аз ин рӯ ҷамъоварӣ аз рӯи функсияи max (қимат) амалӣ карда мешавад.
  • Арзиши нав ба homeassistant.month.water_meter_hour навишта мешавад, ки дар он моҳ номи сиёсати нигоҳдорӣ бо мӯҳлати нигоҳдории як моҳ аст. Ғайр аз он, маълумот дар бораи оби хунук ва гарм ба сабтҳои алоҳида бо entity_id ва арзиши мувофиқ дар майдони арзиш пароканда карда мешавад

Шабона ё вақте ки касе дар хона нест, истеъмоли об вуҷуд надорад ва аз ин рӯ дар homeassistant.autogen.l ягон сабти нав вуҷуд надорад. Барои роҳ надодан ба арзишҳо дар дархостҳои муқаррарӣ, шумо метавонед пур карданро (пешина) истифода баред. Ин InfluxDB-ро маҷбур мекунад, ки арзиши соати охирро истифода барад.

Мутаассифона, пурсишҳои давомдор як хусусияти хос доранд: ҳиллаи пуркунӣ (пештара) кор намекунад ва сабтҳо сохта намешаванд. Гузашта аз ин, ин як навъ мушкилоти ҳалнашаванда аст, ки чандин сол боз мухокима карда мешавад. Мо ин масъаларо дертар ҳал хоҳем кард, аммо бигзор fill(пешина) дар дархости доимӣ бошад - он халал намерасонад.

Биёед тафтиш кунем, ки чӣ рӯй дод (албатта, шумо бояд якчанд соат интизор шавед):

> 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 соат фарқ мекунад - арзишҳои соати 7-и субҳ дар баромади InfluxDB ба арзишҳои соати 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 мо маълумотро барои entity_id='water_meter_cold' дар рӯзи охир истихроҷ мекунем (вақт >= ҳоло() -24 соат).
  • Тавре ки ман аллакай зикр кардам, баъзе сабтҳо метавонанд дар пайдарпаии homeassistant.month.water_meter_hour нопадид шаванд. Мо ин маълумотро тавассути иҷро кардани дархост бо GROUP BY вақт (1 соат) барқарор мекунем. Ин пуркунии вақт (пешта) тавре, ки интизор мерафт, кор карда, маълумоти гумшударо тавлид мекунад (функсия арзиши қаблиро мегирад)
  • Чизи аз ҳама муҳим дар ин дархост функсияи фарқият аст, ки фарқияти байни аломатҳои соатро ҳисоб мекунад. Он худ аз худ кор намекунад ва функсияи ҷамъро талаб мекунад. Бигзор ин 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) истеъмол набуд. Бо вуҷуди ин, пурсиш ба туфайли пур кардан (қаблӣ) ҳамон арзиши истеъмолро бармегардонад ва функсияи фарқият ин арзишро аз худ хориҷ мекунад ва натиҷа 0 хоҳад буд, ки маҳз ҳамон чизест, ки талаб карда мешавад.

Танҳо сохтани график боқӣ мемонад. Барои ин, Grafana-ро кушоед, баъзе панели мавҷударо кушоед (ё нав эҷод кунед) ва панели нав эҷод кунед. Танзимоти диаграмма чунин хоҳад буд.

Хонаи интеллектуалӣ: Мо графикҳои истеъмоли об ва нерӯи барқро дар Home Assistant месозем

Ман маълумоти оби хунук ва гармро дар як график нишон медиҳам. Дархост маҳз ҳамон чизест, ки ман дар боло тавсиф кардам.

Параметрҳои намоиш ба таври зерин муқаррар карда мешаванд. Барои ман он як график бо хатҳо хоҳад буд, ки дар қадамҳо (зинапояҳо) меравад. Ман параметри Stack-ро дар зер шарҳ медиҳам. Дар зер якчанд вариантҳои дигари намоиш мавҷуданд, аммо онҳо он қадар ҷолиб нестанд.

Хонаи интеллектуалӣ: Мо графикҳои истеъмоли об ва нерӯи барқро дар Home Assistant месозем

Барои илова кардани диаграммаи натиҷавӣ ба ёрдамчии хонагӣ ба шумо лозим аст:

  • аз реҷаи таҳрири диаграмма баромадан. Бо баъзе сабабҳо, танзимоти дурусти мубодилаи диаграмма танҳо аз саҳифаи панел пешниҳод карда мешаванд
  • Дар секунҷаи назди номи диаграмма клик кунед ва аз меню мубодиларо интихоб кунед
  • Дар равзанаи кушодашуда, ба ҷадвали дохилкунӣ гузаред
  • Диапазони вақти ҷорӣро хориҷ кунед - мо диапазони вақтро тавассути 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 рӯзи охир оби гармро истифода накардаам, бинобар ин танҳо графики оби хунук кашида шудааст.

Хонаи интеллектуалӣ: Мо графикҳои истеъмоли об ва нерӯи барқро дар Home Assistant месозем

Ман то ҳол худам тасмим нагирифтаам, ки кадом график ба ман маъқул аст, қадами хатӣ ё барҳои воқеӣ. Аз ин рӯ, ман танҳо як мисоли ҷадвали истеъмоли ҳаррӯза медиҳам, танҳо ин дафъа дар сутунҳо. Дархостҳо ба ҳамон саволҳои дар боло тавсифшуда сохта мешаванд. Вариантҳои намоиш инҳоянд:

Хонаи интеллектуалӣ: Мо графикҳои истеъмоли об ва нерӯи барқро дар Home Assistant месозем

Ин график чунин менамояд:

Хонаи интеллектуалӣ: Мо графикҳои истеъмоли об ва нерӯи барқро дар Home Assistant месозем

Ҳамин тавр, дар бораи параметри Stack. Дар ин график дар болои сутуни оби гарм сутуни оби хунук кашида шудааст. Баландии умумӣ ба истеъмоли умумии оби хунук ва гарм дар ин давра мувофиқат мекунад.

Ҳама графикҳои нишондодашуда динамикӣ мебошанд. Шумо метавонед муши худро ба болои нуқтаи таваҷҷӯҳ гузоред ва тафсилот ва арзишро дар як нуқтаи мушаххас бубинед.

Мутаассифона, як-ду пашша дар малхам буданд. Дар диаграммаи сутунӣ (баръакси диаграмма бо хатҳои қадам), мобайни сатр на дар миёнаи рӯз, балки дар соати 00:00 аст. Онхое. нисфи чапи сутун ба чои рузи гузашта кашида мешавад. Ҳамин тавр, графикҳо барои рӯзҳои шанбе ва якшанбе каме ба тарафи чапи минтақаи кабуд кашида мешаванд. То он даме, ки ман фаҳмидам, ки чӣ тавр онро мағлуб кунам.

Мушкилоти дигар дар фосилаи якмоҳа дуруст кор карда натавонистан аст. Гап дар сари он аст, ки дарозии соат/рӯз/ҳафта муқаррар шудааст, аммо дарозии моҳ ҳар дафъа гуногун аст. InfluxDB метавонад танҳо дар фосилаҳои баробар кор кунад. То ба ҳол майнаи ман барои муқаррар кардани фосилаи муқаррарии 30 рӯз кофӣ буд. Бале, график дар давоми сол каме шино мекунад ва сутунҳо ба моҳҳо мувофиқат намекунанд. Аммо азбаски ман ба ин чиз ҳамчун як ҳисобкунаки дисплей таваҷҷӯҳ дорам, ман бо он хуб ҳастам.

Ман ҳадди аққал ду ҳалли худро мебинам:

  • Аз диаграммаҳои моҳона даст кашед ва худро бо диаграммаҳои ҳарҳафтаина маҳдуд кунед. 52 панҷараҳои ҳафтаина барои сол хеле хуб ба назар мерасанд
  • Худи истеъмоли ҳармоҳаро ҳамчун усули № 2 ҳисоб кунед ва графанаро танҳо барои графикҳои зебо истифода баред. Ин як ҳалли хеле дақиқ хоҳад буд. Шумо ҳатто метавонед графикҳои соли гузаштаро барои муқоиса гузоред - графана низ ин корро карда метавонад.

хулоса

Ман намедонам, ки чаро, аммо ман ба ин гуна графикҳо машғулам. Онхо нишон медиханд, ки хаёт дар авч аст ва хама чиз тагьир меёбад. Дируз бисьёр буд, имруз кам, фардо чизи дигар мешавад. Факат кор кардан бо аъзоёни хочагй дар мавзуи истеъмол мемонад. Аммо ҳатто бо иштиҳои ҷорӣ, танҳо як рақами калон ва нофаҳмо дар варақаи пардохт аллакай ба тасвири хеле фаҳмошудаи истеъмол табдил меёбад.

Сарфи назар аз фаъолияти тақрибан 20-солаи ман ҳамчун барномасоз, ман бо базаҳои маълумотҳо амалан тамос надоштам. Аз ин рӯ, насб кардани пойгоҳи додаҳои беруна ба назар чунин менамуд, ки як чизи хеле нофаҳмо ва нофаҳмо буд. Ҳама чизро тағир дод мақолаи боло — маълум шуд, ки васл кардани асбоби мувофик бо як-ду клик анчом дода мешавад ва бо асбоби махсус вазифаи кашидани диаграммахо каме осонтар мешавад.

Дар сарлавха ман сарфи кувваи электрро зикр кардам. Мутаассифона, дар айни замон ман ҳеҷ гуна графикҳоро пешниҳод карда наметавонам. Як метри SDM120 барои ман мурд, ва дигараш ҳангоми дастрас шудан тавассути Modbus хато аст. Аммо, ин ба мавзӯи ин мақола ҳеҷ гуна таъсир намерасонад - графикҳо ҳамон тавре ки барои об сохта мешаванд.

Дар ин мақола ман равишҳоеро пешниҳод кардам, ки худам кӯшиш кардам. Албатта, роҳҳои дигари ташкили ҷамъоварӣ ва визуализатсияи маълумот вуҷуд доранд, ки ман намедонам. Дар ин бора ба ман дар шарҳҳо бигӯед, ман хеле манфиатдор мешавам. Ман аз танқиди созанда ва ғояҳои нав шод хоҳам шуд. Умедворам, ки маводи пешниҳодшуда низ ба касе кӯмак мекунад.

Манбаъ: will.com

Илова Эзоҳ