Lakay Entelijan: Grafik Konsomasyon Dlo ak Elektrisite nan Kay Asistan

Lakay Entelijan: Grafik Konsomasyon Dlo ak Elektrisite nan Kay Asistan
Chak fwa mwen resevwa yon peman pou elektrisite ak dlo, mwen mande - èske fanmi mwen reyèlman konsome sooooo anpil? Oke, wi, gen yon etaj chofe ak yon chodyè nan twalèt la, men yo pa travay kòm ponpye tout tan tout tan an. Nou sanble tou ekonomize dlo (byenke nou renmen tou pwojeksyon nan twalèt la). Plizyè ane de sa mwen deja mèt dlo ki konekte и elektrisite nan yon kay entelijan, men sa a se kote bagay yo te bloke. Men yo te rive nan analiz la nan konsomasyon sèlman kounye a, ki, an reyalite, se sa ki atik sa a sou.

Dènyèman mwen te chanje nan Home Assistant kòm sistèm entelijan lakay mwen. Youn nan rezon ki fè yo se jis kapasite nan òganize koleksyon an nan yon gwo kantite done ak posibilite pou konstriksyon pratik nan divès kalite graf.

Enfòmasyon ki dekri nan atik sa a se pa nouvo, tout bagay sa yo anba sòs diferan yo te deja dekri sou entènèt la. Men, chak atik, kòm yon règ, dekri sèlman yon apwòch oswa aspè. Mwen te oblije konpare tout apwòch sa yo epi chwazi youn ki pi apwopriye a tèt mwen. Atik la toujou pa bay enfòmasyon konplè sou koleksyon done, men se yon kalite rezime sou fason mwen te fè li. Se konsa, kritik konstriktif ak sijesyon pou amelyorasyon yo akeyi.

Deklarasyon sou pwoblèm nan

Kidonk, objektif egzèsis jodi a se pou jwenn bèl graf konsomasyon dlo ak elektrisite:

  • Chak èdtan pou 2 jou
  • Chak jou pou 2 semèn
  • (opsyonèl) chak semèn ak chak mwa

Gen kèk difikilte nan sa a:

  • Konpozan tablo estanda yo gen tandans yo byen pòv. Nan pi bon, ou ka bati yon graf liy pa pwen.

    Si w chèche byen, ou ka jwenn eleman twazyèm pati ki pwolonje kapasite tablo estanda a. Pou asistan lakay, nan prensip, yon eleman bon ak bèl mini kat grafik, men li se tou yon ti jan limite:

    • Li difisil pou mete paramèt tablo ba a nan gwo entèval (lajè ba a tabli an fraksyon inèdtan, ki vle di entèval ki pi long pase inèdtan yo pral mete nan nimewo fraksyon)
    • Ou pa kapab ajoute diferan antite nan yon graf (pa egzanp, tanperati ak imidite, oswa konbine yon graf ba ak yon liy)
  • Non sèlman asistan kay la sèvi ak baz done SQLite ki pi primitif la pa defo (e mwen menm, atout la, pa t metrize enstalasyon MySQL oswa Postgres), done yo pa estoke nan fason ki pi optimal. Se konsa, pou egzanp, ak chak chanjman nan chak menm pi piti paramèt dijital nan yon paramèt, yon gwo json sou yon kilobyte nan gwosè yo ekri nan baz done a.
    {"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}}}

    Mwen gen byen kèk detèktè (detèktè tanperati nan chak chanm, dlo ak elektrisite mèt), ak kèk tou jenere byen yon anpil nan done. Pou egzanp, se sèlman SDM220 mèt elektrisite a jenere apeprè yon douzèn valè chak segonn 10-15, epi mwen ta renmen enstale mèt sa yo 8. Epi gen tou yon pakèt antye nan paramèt ki kalkile ki baze sou lòt detèktè. Sa. tout valè sa yo ka fasilman gonfle baz done a pa 100-200 MB chak jou. Nan yon semèn, sistèm nan ap apèn jete ak vire, ak nan yon mwa kondwi flash la pral mouri (nan ka a nan yon enstalasyon tipik asistan lakay sou Franbwaz PI), epi pa ka gen okenn kesyon de depo done pou yon ane antye.

  • Si ou gen chans, mèt ou a li menm ka konte konsomasyon. Ou ka kontakte mèt la nenpòt ki lè epi mande ki lè valè konsomasyon akimile. Kòm yon règ, tout mèt elektrisite ki gen yon koòdone dijital (RS232/RS485/Modbus/Zigbee) bay yon opòtinite konsa.

    Pi mal, si aparèy la ka tou senpleman mezire kèk paramèt enstantane (pa egzanp, pouvwa enstantane oswa aktyèl), oswa tou senpleman jenere pulsasyon chak X watt-èdtan oswa lit. Lè sa a, ou bezwen reflechi sou ki jan ak ki sa yo entegre li ak ki kote yo akimile valè. Gen yon risk pou yo rate pwochen rapò a pou nenpòt ki rezon, ak presizyon nan sistèm nan an jeneral soulve kesyon. Ou ka, nan kou, konfye tout bagay sa yo nan yon sistèm lakay entelijan tankou asistan lakay, men pesonn pa te anile pwen an sou kantite antre nan baz done a, ak detèktè biwo vòt plis pase yon fwa yon dezyèm pa pral travay (yon limit nan achitekti asistan lakay).

Apwòch 1

Premyèman, ann wè ki asistan lakay yo bay soti nan bwat la. Mezire konsomasyon sou yon peryòd se yon fonksyonalite trè mande. Natirèlman, li te aplike yon bon bout tan de sa kòm yon eleman espesyalize - utility_meter.

Sans nan eleman an se ke li kòmanse varyab current_accumulated_value andedan ak reset li apre yon peryòd espesifye (èdtan/semèn/mwa). Eleman nan tèt li kontwole varyab la fèk ap rantre (valè a nan kèk kalite Capteur), abònman nan chanjman nan valè nan tèt li - ou jis jwenn rezilta a fini. Bagay sa a dekri nan jis kèk liy nan dosye konfigirasyon an

utility_meter:
  water_cold_hour_um:
    source: sensor.water_meter_cold
    cycle: hourly
  water_cold_day_um:
    source: sensor.water_meter_cold
    cycle: daily

Isit la sensor.water_meter_cold se valè aktyèl mèt la an lit ke mwen jwenn dirèkteman nan fè a pa mqtt. Konsepsyon an kreye 2 nouvo detèktè water_cold_hour_um ak water_cold_day_um, ki akimile lekti èdtan ak chak jou, reset yo a zewo apre yon peryòd. Isit la se yon graf nan batri a èdtan pou mwatye yon jou.

Lakay Entelijan: Grafik Konsomasyon Dlo ak Elektrisite nan Kay Asistan

Kòd tablo pou èdtan ak chak jou pou lovelace-UI sanble sa a:

      - 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

Aktyèlman, nan algorithm sa a manti pwoblèm nan apwòch sa a. Kòm mwen deja mansyone, pou chak valè k ap rantre (aktyèl lekti kontè a pou chak pwochen lit), 1kb nan yon dosye yo pwodwi nan baz done a. Chak mèt sèvis piblik tou jenere yon nouvo valè, ki se tou ajoute nan baz la. Si mwen vle kolekte lekti èdtan / chak jou / chak semèn / chak mwa, wi, pou plizyè monte dlo, e menm ajoute yon pake mèt elektrik, sa a pral yon anpil nan done. Oke, pi jisteman, pa gen anpil done, men depi asistan nan kay la ekri yon pakèt moun sou enfòmasyon ki pa nesesè nan baz done a, gwosè a nan baz done a ap grandi pa franchi ak limit. Mwen menm pè estime gwosè baz la pou tablo chak semèn ak chak mwa.

Anplis de sa, kontè sèvis piblik la tèt li pa rezoud pwoblèm nan. Trase kontè sèvis piblik la se yon fonksyon k ap ogmante monotone ki reset a 0 chak èdtan. Nou bezwen tou yon orè konsomasyon itilizatè-zanmitay, konbyen lit yo te manje pandan peryòd la. Eleman estanda istwa-graf la pa fè sa, men eleman ekstèn mini-graf-kat la ka ede nou.

Sa a se kòd kat pou 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'

Anplis de paramèt estanda yo tankou non detèktè a, kalite grafik, koulè (mwen pa t renmen zoranj estanda a), li enpòtan sonje 3 paramèt isit la:

  • group_by:hour - yo pral pwodwi tablo a ak kolòn ki aliyen ak kòmansman èdtan an
  • points_per_hour: 1 - yon bar pou chak èdtan
  • Ak sa ki pi enpòtan, aggregate_func: max se pran valè maksimòm nan chak èdtan. Li se paramèt sa a ki vire tablo sawtooth la nan ba.

Lakay Entelijan: Grafik Konsomasyon Dlo ak Elektrisite nan Kay Asistan

Pa peye atansyon sou ranje kolòn sou bò gòch la - sa a se konpòtman estanda nan eleman an si pa gen okenn done. Men, pa te gen okenn done - mwen sèlman vire sou koleksyon done lè l sèvi avèk kontè sèvis piblik la yon koup la èdtan de sa jis pou dedomajman pou atik sa a (mwen pral dekri apwòch aktyèl mwen an yon ti kras pi ba).

Nan foto sa a, mwen te vle montre ke pafwa ekspozisyon done a menm ap travay, ak ba yo reyèlman reflete valè ki kòrèk yo. Men, sa a se pa tout. Pou kèk rezon, kolòn nan make pou peryòd ki soti nan 11 am jiska 12 am montre 19 lit, byenke sou graf la toothy yon ti kras pi wo pou menm peryòd la soti nan menm Capteur a nou wè konsomasyon nan 62 lit. Swa yon pinèz oswa men yo kwochi. Men, mwen toujou pa konprann poukisa done yo sou bò dwat la te kraze - konsomasyon an te nòmal, ki se tou vizib nan graf la dan.

An jeneral, mwen echwe pou pou reyalize plausiblite apwòch sa a - graf la prèske toujou montre kèk kalite erezi.

Kòd ki sanble pou Capteur lajounen an.

      - 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'

Tanpri sonje ke paramèt group_by la mete sou entèval, epi paramèt points_per_hour regle tout bagay. Ak sa a se yon lòt pwoblèm ak eleman sa a - points_per_hour travay byen sou tablo nan yon èdtan oswa mwens, men degoutans sou pi gwo entèval. Se konsa, pou jwenn yon kolòn nan yon sèl jou, mwen te oblije antre nan valè 1/24 = 0.04166666. Mwen pa pale de tablo chak semèn ak chak mwa.

Apwòch 2

Pandan m t ap chèche konnen asistan kay la, mwen te rankontre videyo sa a:


Kanmarad la kolekte done konsomasyon nan plizyè kalite priz Xiaomi. Travay li se yon ti kras pi senp - jis montre valè a nan konsomasyon pou jodi a, yè ak pou mwa a. Pa gen okenn tablo obligatwa.

Ann kite agiman sou kote entegrasyon manyèl valè pouvwa enstantane - Mwen deja ekri sou "presizyon" apwòch sa a pi wo a. Li pa klè poukisa li pa t 'sèvi ak valè yo konsomasyon akimile, ki deja kolekte pa priz la menm. Dapre mwen, entegrasyon anndan pyès an fè ap travay pi byen.

Soti nan videyo a, nou pral pran lide nan manyèlman konte konsomasyon pou yon peryòd. Pou yon nonm, se sèlman valè yo pou jodi a ak pou yè yo konsidere, men nou pral ale pi lwen epi eseye trase yon graf. Sans metòd yo pwopoze a nan ka mwen an se jan sa a.

Nou pral kreye yon varyab value_at_the_beginning_of_hour, kote nou pral ekri lekti kontwa aktyèl yo.
Dapre revèy la nan fen èdtan an (oswa nan kòmansman pwochen an), nou kalkile diferans ki genyen ant lekti aktyèl la ak sa ki estoke nan kòmansman èdtan an. Diferans sa a pral konsomasyon pou èdtan aktyèl la - nou pral sove valè a nan Capteur a, ak nan lavni an nou pral bati yon graf ki baze sou valè sa a.
Ou bezwen tou "reset" varyab value_at_beginning_of_hour lè w ekri valè aktyèl kontwa a la.

Tout bagay sa yo ka fè nan byen... pa mwayen asistan lakay li menm.

Ou pral oblije ekri yon ti kras plis kòd pase nan apwòch anvan an. Ann kòmanse ak "varyab" sa yo. Soti nan bwat la, nou pa gen antite "varyab la", men ou ka itilize sèvis yo nan yon koutye mqtt. Nou pral voye valè la ak retain = vre drapo a - sa a pral sove valè a andedan koutye a, epi li ka rale soti nan nenpòt ki lè, menm lè asistan kay la rdemare. Mwen te fè kontè èdtan ak chak jou nan yon fwa.

- 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

Tout majik la rive nan automatisation a, ki kouri chak èdtan ak chak swa, respektivman.

- 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

Tou de automatisation fè 2 bagay:

  • Kalkile valè pou chak entèval kòm diferans ki genyen ant valè kòmansman ak fen
  • Mete ajou valè debaz la pou pwochen entèval la

Konstriksyon graf nan ka sa a rezoud pa istwa-graf abityèl la:

      - 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

Li sanble sa a:

Lakay Entelijan: Grafik Konsomasyon Dlo ak Elektrisite nan Kay Asistan

Nan prensip, sa a se deja sa ou bezwen. Avantaj nan metòd sa a se ke done yo pwodwi yon fwa pou chak entèval. Moun sa yo. yon total de 24 antre pa jou pou tablo èdtan an.

Malerezman, sa toujou pa rezoud pwoblèm jeneral yon baz kap grandi. Si mwen vle yon graf konsomasyon chak mwa, mwen pral oblije estoke done pou omwen yon ane. Epi kòm asistan lakay bay yon sèl anviwònman dire depo pou baz done a tout antye, sa vle di ke TOUT done nan sistèm nan pral dwe estoke pou yon ane antye. Pou egzanp, nan yon ane mwen konsome 200 mèt kib dlo, ki vle di 200000 antre nan baz done a. Men, si ou pran an kont lòt detèktè, Lè sa a, figi a vin jeneralman endesan.

Apwòch 3

Erezman, moun entelijan yo te deja rezoud pwoblèm sa a lè yo ekri baz done InfluxDB. Se baz done sa a espesyalman optimize pou estoke done ki baze sou tan epi li ideyal pou estoke valè diferan detèktè. Sistèm nan bay tou yon lang rekèt tankou SQL ki pèmèt ou ekstrè valè nan baz done a epi ajoute yo nan divès fason. Finalman, diferan done yo ka estoke pou diferan tan. Pou egzanp, lekti ki chanje souvan tankou tanperati oswa imidite ka estoke pou sèlman yon koup de semèn, pandan y ap lekti chak jou nan konsomasyon dlo yo ka estoke pou yon ane antye.

Anplis InfluxDB, moun entèlijan tou envante Grafana, yon sistèm pou trase graf ki soti nan done ki soti nan InfluxDB. Grafana ka trase diferan kalite tablo, Customize yo an detay, epi, sa ki pi enpòtan, tablo sa yo ka "konekte" nan asistan kay lovelace-UI.

dwe enspire isit la и isit la. Atik yo dekri an detay pwosesis pou enstale ak konekte InfluxDB ak Grafana ak asistan lakay yo. Mwen pral konsantre sou rezoud pwoblèm espesifik mwen an.

Se konsa, anvan tout bagay, se pou yo kòmanse ajoute valè kontwa a nan influxDB. Yon moso nan konfigirasyon asistan kay la (nan egzanp sa a, mwen pral pran plezi pa sèlman ak frèt, men tou ak dlo cho):

influxdb:
  host: localhost
  max_retries: 3
  default_measurement: state
  database: homeassistant
  include:
    entities:
      - sensor.water_meter_hot
      - sensor.water_meter_cold

Ann enfim ekonomize menm done yo nan baz done entèn asistan kay la, pou nou pa gonfle li yon lòt fwa ankò:

recorder:
  purge_keep_days: 10
  purge_interval: 1
  exclude:
    entities:
      - sensor.water_meter_hot
      - sensor.water_meter_cold

Ann ale kounye a nan konsole InfluxDB epi mete baz done nou an. An patikilye, ou bezwen konfigirasyon konbyen tan sèten done yo pral estoke. Sa a se reglemante pa sa yo rele an. politik retansyon - sa a se menm jan ak baz done andedan baz done prensipal la, ak chak baz done entèn ki gen pwòp paramèt yo. Pa default, tout done yo ajoute nan politik la retansyon yo rele autogen, done sa yo pral estoke pou yon semèn. Mwen ta renmen done èdtan yo dwe estoke pou yon mwa, done chak semèn pou yon ane, ak done chak mwa pa janm dwe efase ditou. Nou pral kreye politik retansyon apwopriye

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

Koulye a, an reyalite, Trick prensipal la se agrégation done lè l sèvi avèk rechèch kontinyèl. Sa a se yon mekanis ki otomatikman lanse yon rechèch nan entèval espesifye, total done yo pou rechèch sa a, epi ajoute rezilta a nan yon nouvo valè. Ann gade nan yon egzanp (mwen ekri nan yon kolòn pou lizibilite, men an reyalite mwen te oblije antre lòd sa a sou yon sèl liy)

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

Kòmandman sa a:

  • Kreye yon rechèch kontinyèl ki rele cq_water_cold_hourly nan baz done asistan kay la
  • Rekèt la pral egzekite chak èdtan (tan (1h))
  • Rekèt la pral rale tout done ki soti nan measurement'a homeassistant.autogen.l (lit), ki gen ladan lekti nan dlo frèt ak cho.
  • Done total yo pral gwoupe pa entity_id, ki pral kreye valè separe pou dlo frèt ak dlo cho.
  • Piske kontwa lit yo se yon sekans k ap ogmante monotone nan chak èdtan, w ap bezwen pran valè maksimòm lan, kidonk total la ap fèt pa fonksyon max(valè).
  • Nouvo valè a pral ekri nan homeassistant.month.water_meter_hour kote mwa se non politik retansyon an ak yon peryòd retansyon yon mwa. Anplis, done sou dlo frèt ak cho yo pral gaye nan dosye separe ak entity_id korespondan ak valè a nan jaden an valè.

Nan mitan lannwit oswa lè pa gen moun nan kay la, pa gen okenn konsomasyon dlo, epi kòmsadwa pa gen okenn dosye nouvo nan homeassistant.autogen.l tou. Pou evite valè ki manke nan demann nòmal, ou ka itilize ranpli (anvan). Sa a pral fòse InfluxDB sèvi ak valè èdtan ki sot pase yo.

Malerezman, rechèch kontinyèl gen yon patikilye: Trick ranpli (anvan) pa travay ak dosye yo tou senpleman pa kreye. Anplis, sa a se kèk kalite pwoblèm enfranchisabl, ki te diskite pou plis pase yon ane. Nou pral fè fas ak pwoblèm sa a pita, epi kite ranpli (anvan) nan rechèch kontinyèl dwe la - li pa entèfere.

Ann tcheke sa ki te pase (nan kou, ou bezwen tann yon koup de èdtan):

> 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

Remake byen ke valè yo nan baz done a yo estoke nan UTC, kidonk lis sa a diferan pa 3 èdtan - valè yo 7am nan pwodiksyon InfluxDB matche ak valè yo 10am nan tablo ki anwo yo. Epitou sonje ke ant 2 ak 5 nan maten an gen tou senpleman pa gen okenn dosye - sa a se karakteristik nan anpil nan rechèch kontinyèl.

Kòm ou ka wè, valè total la se tou yon sekans ogmante monotone, se sèlman antre yo mwens souvan - yon fwa chak èdtan. Men, sa a se pa yon pwoblèm - nou ka ekri yon lòt rechèch ki pral ekstrè done ki kòrèk la pou tablo a.

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)

Mwen pral dechifre:

  • Soti nan baz done homeassistant.month.water_meter_hour, nou pral rale done pou entity_id='water_meter_cold' pou dènye jou a (time >= now() -24h).
  • Kòm mwen mansyone, gen kèk antre ki manke nan sekans homeassistant.month.water_meter_hour. Nou pral rejenere done sa yo nan kouri rechèch la ak GROUP BY tan (1h). Fwa sa a, ranpli (anvan) ap travay byen, jenere done ki manke yo (fonksyon an pral pran valè anvan an)
  • Bagay ki pi enpòtan nan rechèch sa a se fonksyon diferans lan, ki pral kalkile diferans ki genyen ant mak èdtan yo. Pou kont li, li pa travay epi li mande pou yon fonksyon agrégation. Se pou sa a max() te itilize anvan.

Rezilta ekzekisyon an sanble sa a

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

Soti nan 2 am jiska 5 am (UTC) pa te gen okenn konsomasyon. Men, rechèch la pral retounen menm valè konsomasyon gras a ranpli (anvan), ak fonksyon diferans lan pral soustraksyon valè sa a soti nan tèt li epi jwenn 0 nan pwodiksyon an, ki se aktyèlman obligatwa.

Sèl bagay ki rete pou fè se bati yon graf. Pou fè sa, louvri Grafana, louvri kèk ki deja egziste (oswa kreye yon nouvo) tablodbò, kreye yon nouvo panèl. Anviwònman tablo yo pral jan sa a.

Lakay Entelijan: Grafik Konsomasyon Dlo ak Elektrisite nan Kay Asistan

Mwen pral montre done dlo frèt ak dlo cho sou menm graf la. Demann lan se egzakteman menm jan mwen te dekri pi wo a.

Paramèt ekspozisyon yo mete jan sa a. Pou mwen, li pral yon graf ak liy (liy), ki ale nan etap (eskalye). Paramèt Stack la pral eksplike anba a. Gen yon koup plis opsyon ekspozisyon anba a, men yo pa tèlman enteresan.

Lakay Entelijan: Grafik Konsomasyon Dlo ak Elektrisite nan Kay Asistan

Pou ajoute graf ki kapab lakòz nan asistan lakay ou, ou bezwen:

  • sòti mòd koreksyon tablo a. Pou kèk rezon, paramèt pataje tablo kòrèk yo ofri sèlman nan paj tablodbò a
  • Klike sou triyang ki akote non tablo a, chwazi pataje nan meni an
  • Nan fenèt la ki ouvè, ale nan tab la embed
  • Dezaktive seri tan aktyèl la - nou pral mete seri tan an atravè URL
  • Chwazi sijè ki nesesè yo. Nan ka mwen an se limyè
  • Kopi URL ki kapab lakòz nan kat paramèt lovelace-UI la

      - 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"

Tanpri sonje ke seri tan an (2 dènye jou) yo mete isit la, epi yo pa nan anviwònman yo tablodbò.

Tablo a sanble sa a. Mwen pa te itilize dlo cho nan 2 dènye jou yo, kidonk sèlman yon graf nan dlo frèt trase.

Lakay Entelijan: Grafik Konsomasyon Dlo ak Elektrisite nan Kay Asistan

Mwen pa te deside pou tèt mwen ki tablo mwen renmen pi byen, yon liy etap, oswa ba reyèl. Se poutèt sa, mwen pral tou senpleman bay yon egzanp nan yon orè konsomasyon chak jou, sèlman fwa sa a nan ba. Rekèt yo bati nan menm fason an jan sa dekri pi wo a. Opsyon ekspozisyon yo se:

Lakay Entelijan: Grafik Konsomasyon Dlo ak Elektrisite nan Kay Asistan

Tablo sa a sanble tankou sa a:

Lakay Entelijan: Grafik Konsomasyon Dlo ak Elektrisite nan Kay Asistan

Se konsa, sou paramèt Stack la. Nan graf sa a, yo trase yon ba dlo frèt sou tèt yon ba cho. Wotè total la koresponn ak konsomasyon total dlo frèt ak cho pou peryòd la.

Tout graf yo montre yo dinamik. Ou ka deplase sourit la sou pwen enterè a epi wè detay yo ak valè nan yon pwen an patikilye.

Malerezman, li pa t 'san yon koup la vole nan odè a. Sou yon tablo ba (kontrèman ak graf la ak liy etap), mitan ba a pa nan mitan jounen an, men nan 00:00. Moun sa yo. se mwatye gòch la nan ba a trase nan plas jou anvan an. Se konsa, tablo yo pou Samdi ak Dimanch yo trase yon ti kras sou bò gòch la nan zòn nan ble. Jiskaske mwen kalkile ki jan yo genyen li.

Yon lòt pwoblèm se enkapasite pou travay kòrèkteman ak entèval mansyèl. Reyalite a se ke longè èdtan / jou / semèn nan fiks, men longè mwa a diferan chak fwa. InfluxDB ka travay sèlman ak entèval egal. Jiskaprezan, sèvo mwen yo te ase pou mete yon entèval fiks de 30 jou. Wi, tablo a pral flote yon ti kras pandan ane a ak ba yo pa pral egzakteman koresponn ak mwa yo. Men, depi bagay sa a enteresan pou mwen menm jan yon mèt ekspozisyon, mwen ok ak sa a.

Mwen wè omwen de solisyon:

  • Pou fè nòt sou tablo chak mwa epi limite tèt ou a sa yo chak semèn. 52 ba chak semèn nan yon ane sanble trè bon
  • Konsidere konsomasyon nan chak mwa tèt li kòm metòd No 2, epi sèvi ak grafana a sèlman pou bèl graf. Li se yon solisyon trè egzat. Ou ka menm kouvri tablo pou ane ki sot pase a pou konparezon - grafana ka fè sa.

Konklizyon

Mwen pa konnen poukisa, men mwen renmen kalite tablo sa yo. Yo montre ke lavi se nan swing plen ak tout bagay ap chanje. Yè te gen anpil, jodi a ti kras, demen ap gen yon lòt bagay. Li rete travay ak kay sou sijè a nan konsomasyon. Men, menm ak apeti aktyèl, jis yon figi gwo ak enkonpreyansib nan bòdwo a deja vire nan yon foto san patipri konprann nan konsomasyon.

Malgre karyè mwen prèske 20 ane kòm yon pwogramè, mwen pratikman pa t 'kouvri ak baz done. Se poutèt sa, enstale yon baz done ekstèn te sanble tankou yon bagay konsa abst ak enkonpreyansib. Tout bagay chanje atik ki anwo a - li te tounen soti ke vise yon zouti apwopriye fè nan yon koup nan klik, ak ak yon zouti espesyalize, travay la nan trase vin yon ti kras pi fasil.

Nan tit la, mwen mansyone konsomasyon elektrisite. Malerezman, nan moman sa a mwen pa ka bay okenn graf. Yon mèt SDM120 mouri, ak lòt la se buggy lè yo jwenn aksè atravè Modbus. Sepandan, sa a pa afekte sijè sa a nan atik sa a nan okenn fason - graf yo pral bati nan menm fason an ak pou dlo.

Nan atik sa a, mwen te bay apwòch sa yo ke mwen te eseye tèt mwen. Se vre wi, gen kèk lòt fason yo òganize koleksyon an ak vizyalizasyon nan done ke mwen pa konnen sou. Di m 'sou li nan kòmantè yo, mwen pral trè enterese. Mwen pral kontan kritik konstriktif ak nouvo lide. Mwen espere ke materyèl ki pi wo a pral ede yon moun tou.

Sous: www.habr.com

Add nouvo kòmantè