Smart Home: Pag-chart sa Tubig ug Pagkonsumo sa Elektrisidad sa Home Assistant

Smart Home: Pag-chart sa Tubig ug Pagkonsumo sa Elektrisidad sa Home Assistant
Matag higayon nga makadawat ko og bayad sa kuryente ug tubig, mahibulong ko - ang akong pamilya ba gyud ang nagkonsumo og daghan? Buweno, oo, adunay init nga salog ug usa ka boiler sa banyo, apan dili sila magtrabaho isip mga bombero sa tanang panahon. Nagdaginot man daw mig tubig (bisan ganahan pud mi mag-splash sa banyo). Pipila ka tuig ang milabay ako na konektado nga metro sa tubig ΠΈ elektrisidad sa usa ka intelihenteng balay, apan dinhi nahunong ang mga butang. Ang mga kamot nakaabot sa pagtuki sa konsumo karon lamang, nga, sa pagkatinuod, mao ang mahitungod sa kini nga artikulo.

Bag-o lang ako mibalhin sa Home Assistant isip akong smart home system. Usa sa mga hinungdan mao ang abilidad sa pag-organisar sa pagkolekta sa daghang mga datos nga adunay posibilidad nga dali nga paghimo sa lainlaing mga lahi sa mga graph.

Ang kasayuran nga gihulagway niini nga artikulo dili bag-o, kining tanan nga mga butang ubos sa lainlaing mga sarsa gihulagway na sa Internet. Apan ang matag artikulo, ingon nga usa ka lagda, naghulagway lamang sa usa ka paagi o aspeto. Kinahanglan nakong itandi ang tanan niini nga mga pamaagi ug pilion ang labing angay sa akong kaugalingon. Ang artikulo wala gihapon naghatag ug kompleto nga impormasyon sa pagkolekta sa datos, apan usa ka matang sa summary kung giunsa nako kini pagbuhat. Mao nga gidawat ang makaayo nga pagsaway ug mga sugyot alang sa pagpauswag.

Pagbuot sa problema

Busa, ang tumong sa pag-ehersisyo karon mao ang pagkuha og nindot nga mga graph sa tubig ug konsumo sa kuryente:

  • Kada oras sulod sa 2 ka adlaw
  • Adlaw-adlaw sulod sa 2 ka semana
  • (opsyonal) kada semana ug binulan

Adunay pipila ka mga kalisdanan niini:

  • Ang sukaranan nga mga sangkap sa tsart lagmit nga dili maayo. Sa labing maayo, makahimo ka og line graph pinaagi sa mga punto.

    Kung maayo ang imong pagpangita, makit-an nimo ang mga sangkap sa ikatulo nga partido nga nagpalapad sa mga kapabilidad sa sumbanan nga tsart. Alang sa katabang sa balay, sa prinsipyo, usa ka maayo ug matahum nga sangkap mini nga graph card, apan kini usab medyo limitado:

    • Lisud ang pagtakda sa mga parameter sa bar chart sa dagkong mga agwat (ang gilapdon sa bar gibutang sa mga tipik sa usa ka oras, nga nagpasabot nga ang mga agwat nga mas taas kay sa usa ka oras ibutang sa fractional nga mga numero)
    • Dili ka makadugang ug lain-laing entidad sa usa ka graph (pananglitan, temperatura ug humidity, o maghiusa sa bar graph sa usa ka linya)
  • Dili lamang ang katabang sa balay naggamit sa labing karaan nga database sa SQLite pinaagi sa default (ug ako, ang handyman, wala mag-master sa pag-install sa MySQL o Postgres), ang datos wala gitipigan sa labing kamalaumon nga paagi. Mao nga, pananglitan, sa matag pagbag-o sa matag usa bisan ang pinakagamay nga digital parameter sa usa ka parameter, usa ka dako nga json nga mga usa ka kilobyte ang gidak-on gisulat sa database.
    {"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}}}

    Naa koy pipila ka mga sensor (mga sensor sa temperatura sa matag kwarto, mga metro sa tubig ug kuryente), ug ang uban nagmugna usab og daghang data. Pananglitan, ang metro sa kuryente sa SDM220 ra ang nagmugna mga usa ka dosena nga kantidad matag 10-15 segundo, ug gusto nako nga mag-install sa ingon nga mga metro nga 8. Ug adunay usa usab ka tibuuk nga hugpong sa mga parameter nga gikalkula base sa ubang mga sensor. Nga. kining tanan nga mga kantidad dali nga mapataas ang database sa 100-200 MB matag adlaw. Sa usa ka semana, ang sistema halos dili mag-itsa ug moliko, ug sa usa ka bulan ang flash drive mamatay (sa kaso sa usa ka tipikal nga pag-instalar sa home assistant sa raspberry PI), ug walay pangutana sa pagtipig sa datos sulod sa tibuok tuig.

  • Kung swerte ka, ang imong metro mismo makaihap sa konsumo. Mahimo nimong kontakon ang metro bisan unsang orasa ug pangutana kung unsang orasa ang natipon nga kantidad sa konsumo. Ingon sa usa ka lagda, ang tanan nga metro sa kuryente nga adunay digital interface (RS232 / RS485 / Modbus / Zigbee) naghatag sa ingon nga oportunidad.

    Mas grabe pa, kung ang aparato makasukod lang sa pipila ka dali nga parameter (pananglitan, dali nga gahum o karon), o yano nga makamugna og mga pulso matag X watt-oras o litro. Unya kinahanglan nimong hunahunaon kung giunsa ug kung unsa ang i-integrate niini ug kung asa magtigum ang kantidad. Adunay peligro nga mawala ang sunod nga taho sa bisan unsang hinungdan, ug ang katukma sa sistema sa kinatibuk-an nagpatunghag mga pangutana. Mahimo nimo, siyempre, itugyan kining tanan sa usa ka intelihente nga sistema sa balay sama sa katabang sa balay, apan wala’y usa nga nagkansela sa punto bahin sa gidaghanon sa mga entri sa database, ug ang mga sensor sa pagboto labaw sa kausa sa usa ka segundo dili molihok (usa ka limitasyon sa arkitektura sa katabang sa balay).

Pamaagi 1

Una, tan-awon nato kung unsa nga katabang sa balay ang gihatag gikan sa kahon. Ang pagsukod sa konsumo sa usa ka yugto usa ka gipangayo nga gamit. Siyempre, kini gipatuman sa dugay na nga panahon isip usa ka espesyal nga bahin - utility_meter.

Ang esensya sa sangkap mao nga kini magsugod sa current_accumulated_value variable sa sulod ug i-reset kini pagkahuman sa usa ka piho nga panahon (oras / semana / bulan). Ang component mismo nag-monitor sa umaabot nga variable (ang bili sa usa ka matang sa sensor), nag-subscribe sa mga pagbag-o sa bili mismo - nakuha ra nimo ang nahuman nga resulta. Kini nga butang gihulagway sa pipila lang ka linya sa configuration file

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

Dinhi ang sensor.water_meter_cold mao ang kasamtangang bili sa metro sa litro nga akong makuha direkta gikan sa puthaw sa mqtt. Ang disenyo nagmugna ug 2 ka bag-ong sensor nga water_cold_hour_um ug water_cold_day_um, nga nagtigom matag oras ug adlaw-adlaw nga mga pagbasa, nga gi-reset kini sa zero pagkahuman sa usa ka panahon. Ania ang usa ka graph sa matag oras nga baterya sa tunga sa adlaw.

Smart Home: Pag-chart sa Tubig ug Pagkonsumo sa Elektrisidad sa Home Assistant

Ang matag oras ug adlaw-adlaw nga code sa tsart alang sa lovelace-UI ingon niini:

      - 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

Sa tinuud, sa kini nga algorithm nahimutang ang problema sa kini nga pamaagi. Sama sa nahisgotan na nako, alang sa matag umaabot nga kantidad (ang karon nga pagbasa sa metro alang sa matag sunod nga litro), 1kb sa usa ka rekord ang nahimo sa database. Ang matag metro sa utility nagmugna usab usa ka bag-ong kantidad, nga gidugang usab sa base. Kung gusto nako nga mangolekta matag oras / adlaw-adlaw / semana / binulan nga mga pagbasa, oo, alang sa daghang mga pagtaas sa tubig, ug bisan pa pagdugang usa ka pakete sa mga metro sa kuryente, kini mahimong daghang datos. Aw, mas tukma, wala'y daghang datos, apan tungod kay ang katabang sa balay nagsulat sa usa ka hugpong sa wala kinahanglana nga impormasyon sa database, ang gidak-on sa database motubo sa mga paglukso ug mga utlanan. Nahadlok gani ko nga banabanaon ang gidak-on sa base para sa kada semana ug binulan nga mga tsart.

Dugang pa, ang utility meter mismo dili makasulbad sa problema. Ang utility meter plot kay monotonically increase nga function nga mu-reset sa 0 kada oras. Kinahanglan usab namon ang usa ka eskedyul sa pagkonsumo nga mahigalaon sa user, pila ka litro ang gikaon sa panahon. Ang standard nga history-graph component wala makahimo niini, apan ang external nga mini-graph-card component makatabang kanato.

Kini ang card code para sa 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'

Dugang pa sa mga standard setting sama sa sensor name, graph type, color (dili ko ganahan sa standard orange), importante nga timan-an ang 3 settings dinhi:

  • group_by:hour - ang tsart mabuhat nga adunay mga kolum nga gipahiangay sa sinugdanan sa oras
  • points_per_hour: 1 - usa ka bar kada oras
  • Ug ang labing importante, aggregate_func: max mao ang pagkuha sa pinakataas nga kantidad sulod sa matag oras. Kini nga parameter ang naghimo sa tsart sa sawtooth nga mga bar.

Smart Home: Pag-chart sa Tubig ug Pagkonsumo sa Elektrisidad sa Home Assistant

Ayaw pagtagad sa laray sa mga kolum sa wala - kini ang sumbanan nga pamatasan sa sangkap kung wala’y datos. Apan wala'y datos - gi-on ko lang ang pagkolekta sa datos gamit ang utility meter pipila ka oras ang milabay tungod lang sa kini nga artikulo (akong ihulagway ang akong pamaagi karon nga mas ubos).

Niini nga hulagway, gusto nakong ipakita nga usahay ang pagpakita sa datos bisan sa pagtrabaho, ug ang mga bar nagpakita gayud sa husto nga mga bili. Apan dili lang kana. Sa pila ka rason, ang gipasiugda nga kolum alang sa panahon gikan sa 11 am hangtod 12 am nagpakita sa 19 ka litro, bisan pa sa toothy graph nga mas taas og gamay alang sa samang panahon gikan sa samang sensor atong makita ang konsumo sa 62 ka litro. Bisan usa ka bug o mga kamot ang hiwi. Apan wala gihapon ko makasabut ngano nga ang datos sa tuo naputol - ang pagkonsumo didto normal, nga makita usab gikan sa graph nga ngipon.

Sa kinatibuk-an, napakyas ako sa pagkab-ot sa katuohan sa kini nga pamaagi - ang graph hapit kanunay nagpakita sa usa ka matang sa erehiya.

Susama nga code alang sa sensor sa adlaw.

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

Palihug timan-i nga ang group_by parameter gitakda sa agwat, ug ang points_per_hour parameter nagmando sa tanan. Ug kini usa pa ka problema sa kini nga sangkap - ang mga punto_per_oras maayo nga nagtrabaho sa mga tsart sa usa ka oras o dili kaayo, apan makaluod sa daghang mga agwat. Mao nga aron makakuha usa ka kolum sa usa ka adlaw, kinahanglan nako nga isulod ang kantidad nga 1/24=0.04166666. Wala ko maghisgot bahin sa sinemana ug binulan nga mga tsart.

Pamaagi 2

Samtang naghunahuna pa sa katabang sa balay, nakit-an nako kini nga video:


Gikolekta sa kauban ang datos sa pagkonsumo gikan sa daghang mga lahi sa mga socket sa Xiaomi. Ang iyang tahas mas simple - ipakita lang ang kantidad sa konsumo alang sa karon, kagahapon ug alang sa bulan. Walay mga tsart nga gikinahanglan.

Atong biyaan ang mga argumento bahin sa manwal nga paghiusa sa dali nga mga kantidad sa gahum - Nagsulat na ako bahin sa "pagkatukma" sa kini nga pamaagi sa ibabaw. Dili klaro kung nganong wala niya gigamit ang natipon nga mga kantidad sa konsumo, nga nakolekta na sa parehas nga outlet. Sa akong opinyon, ang paghiusa sa sulod sa piraso sa puthaw mas maayo.

Gikan sa video, kuhaon namon ang ideya sa mano-mano nga pag-ihap sa konsumo sa usa ka panahon. Alang sa usa ka tawo, ang mga kantidad lamang alang sa karon ug alang sa kagahapon ang gikonsiderar, apan magpadayon kami ug sulayan ang pagdrowing og usa ka graph. Ang diwa sa gisugyot nga pamaagi sa akong kaso mao ang mosunod.

Maghimo kami ug variable value_at_the_beginning_of_hour, diin among isulat ang kasamtangang counter readings
Sumala sa timer sa katapusan sa oras (o sa sinugdanan sa sunod), atong kuwentahon ang kalainan tali sa kasamtangan nga pagbasa ug sa usa nga gitipigan sa sinugdanan sa oras. Kini nga kalainan mao ang pagkonsumo alang sa karon nga oras - among i-save ang kantidad sa sensor, ug sa umaabot magtukod kami usa ka graph base sa kini nga kantidad.
Kinahanglan usab nimo nga "i-reset" ang variable value_at_beginning_of_hour pinaagi sa pagsulat sa kasamtangan nga bili sa counter didto.

Kining tanan mahimo pinaagi sa maayo ... pinaagi sa home assistant mismo.

Kinahanglan ka nga magsulat og gamay nga code kaysa sa miaging pamaagi. Magsugod ta niining mga "variables". Gawas sa kahon, wala kami "variable" nga entidad, apan mahimo nimong gamiton ang mga serbisyo sa usa ka mqtt broker. Magpadala kami mga kantidad didto nga adunay retain=true flag - kini makatipig sa kantidad sa sulod sa broker, ug mahimo kini makuha sa bisan unsang oras, bisan kung ang katabang sa balay gi-reboot. Naghimo ako matag oras ug adlaw-adlaw nga mga counter sa usa ka higayon.

- 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

Ang tanan nga salamangka mahitabo sa automation, nga nagdagan matag oras ug matag gabii, matag usa.

- 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

Ang duha ka automation naghimo sa 2 ka butang:

  • Kalkulahin ang bili matag agwat ingon nga kalainan tali sa pagsugod ug katapusan nga bili
  • I-update ang base nga bili para sa sunod nga interval

Ang pagtukod sa mga graph niini nga kaso masulbad pinaagi sa naandan nga history-graph:

      - 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

Murag mao ni:

Smart Home: Pag-chart sa Tubig ug Pagkonsumo sa Elektrisidad sa Home Assistant

Sa prinsipyo, mao na kini ang imong gikinahanglan. Ang bentaha sa kini nga pamaagi mao nga ang datos gihimo kausa matag agwat. Mga. sa kinatibuk-an nga 24 ka mga entry kada adlaw alang sa inoras nga tsart.

Ikasubo, kini wala gihapon makasulbad sa kinatibuk-ang problema sa usa ka nagtubo nga base. Kung gusto nako ang usa ka binulan nga graph sa pagkonsumo, kinahanglan nako nga tipigan ang datos labing menos usa ka tuig. Ug tungod kay ang katabang sa balay naghatag ra usa ka setting sa gidugayon sa pagtipig alang sa tibuuk nga database, kini nagpasabut nga TANANG datos sa sistema kinahanglan nga tipigan sa usa ka tibuuk nga tuig. Pananglitan, sa usa ka tuig nagkonsumo ako og 200 cubic meters nga tubig, nga nagpasabut nga 200000 ka mga entry sa database. Ug kung imong tagdon ang ubang mga sensor, ang numero mahimong kasagarang dili maayo.

Pamaagi 3

Maayo na lang, ang mga maalamon nga mga tawo nakasulbad na niini nga problema pinaagi sa pagsulat sa database sa InfluxDB. Kini nga database espesyal nga na-optimize alang sa pagtipig sa datos nga nakabase sa oras ug sulundon alang sa pagtipig sa mga kantidad sa lainlaing mga sensor. Naghatag usab ang sistema sa usa ka sinultian nga pangutana nga sama sa SQL nga nagtugot kanimo nga makuha ang mga kantidad gikan sa database ug dayon i-aggregate kini sa lainlaing mga paagi. Sa katapusan, lain-laing mga data mahimong tipigan alang sa lain-laing mga panahon. Pananglitan, ang kanunay nga pagbag-o sa mga pagbasa sama sa temperatura o humidity mahimong tipigan sulod lamang sa duha ka semana, samtang ang adlaw-adlaw nga pagbasa sa konsumo sa tubig mahimong tipigan sulod sa tibuok tuig.

Dugang pa sa InfluxDB, ang mga maalam nga tawo nag-imbento usab sa Grafana, usa ka sistema sa pagdrowing og mga graph gikan sa datos gikan sa InfluxDB. Ang Grafana makahimo sa pagdrowing og lain-laing mga matang sa mga tsart, ipahiangay kini sa detalye, ug, labaw sa tanan, kini nga mga tsart mahimong "i-plug" sa lovelace-UI home assistant.

madasig dinhi ΠΈ dinhi. Ang mga artikulo naghulagway sa detalye sa proseso sa pag-instalar ug pagkonektar sa InfluxDB ug Grafana sa home assistant. Magpokus ko sa pagsulbad sa akong piho nga problema.

Busa, una sa tanan, magsugod kita sa pagdugang sa counter value sa influxDB. Usa ka piraso sa pag-configure sa katabang sa balay (sa kini nga pananglitan, malingaw ako dili lamang sa katugnaw, apan usab sa init nga tubig):

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

Atong i-off ang pag-save sa parehas nga datos sa internal nga katabang sa balay nga database aron dili kini madugangan pag-usab:

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

Adto na kita sa InfluxDB console ug i-set up ang atong database. Sa partikular, kinahanglan nimo nga i-configure kung unsa kadugay ang pipila nga datos nga tipigan. Kini gi-regulate sa gitawag nga. polisiya sa pagpabilin - susama kini sa mga database sulod sa nag-unang database, nga ang matag internal nga database adunay kaugalingong mga setting. Sa kasagaran, ang tanan nga datos gidugang sa polisiya sa pagpabilin nga gitawag og autogen, kini nga datos tipigan sulod sa usa ka semana. Gusto nako nga matag oras nga datos nga tipigan sulod sa usa ka bulan, sinemana nga datos sulod sa usa ka tuig, ug binulan nga datos nga dili gayud mapapas. Maghimo kami og angay nga mga palisiya sa pagpadayon

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

Karon, sa tinuud, ang panguna nga limbong mao ang pagtipon sa datos gamit ang padayon nga pangutana. Kini usa ka mekanismo nga awtomatik nga naglansad sa usa ka pangutana sa piho nga mga agwat, nag-ipon sa datos alang niini nga pangutana, ug nagdugang sa resulta sa usa ka bag-ong kantidad. Atong tan-awon ang usa ka pananglitan (nagsulat ako sa usa ka kolum aron mabasa, apan sa tinuud kinahanglan nako nga isulod kini nga mando sa usa ka linya)

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

Kini nga sugo:

  • Naghimo ug padayon nga pangutana nga ginganlag cq_water_cold_hourly sa homeassistant database
  • Ang pangutana ipatuman kada oras (oras(1h))
  • Ang pangutana mokuha sa tanang datos gikan sa measurement'a homeassistant.autogen.l (litro), lakip ang mga pagbasa sa bugnaw ug init nga tubig
  • Ang mga aggregated data igrupo sa entity_id, nga maghimo lahi nga kantidad alang sa bugnaw ug init nga tubig.
  • Tungod kay ang counter sa mga litro usa ka monotonically nga pagtaas sa pagkasunod-sunod sulod sa matag oras, kinahanglan nimo nga kuhaon ang labing kataas nga kantidad, aron ang pagtipon ipatuman sa max(value) function.
  • Ang bag-ong kantidad isulat sa homeassistant.month.water_meter_hour diin ang bulan mao ang ngalan sa retention policy nga adunay retention period nga usa ka bulan. Dugang pa, ang mga datos sa bugnaw ug init nga tubig isabwag sa bulag nga mga rekord nga adunay katugbang nga entity_id ug ang kantidad sa natad sa kantidad

Sa gabii o kung wala’y tawo sa balay, wala’y konsumo sa tubig, ug tungod niini wala’y bag-ong mga rekord sa homeassistant.autogen.l usab. Aron malikayan ang nawala nga mga kantidad sa normal nga mga pangutana, mahimo nimong gamiton ang fill(kaniadto). Kini mopugos sa InfluxDB sa paggamit sa miaging oras nga kantidad.

Ikasubo, ang padayon nga pangutana adunay usa ka talagsaon: ang pun-on (kaniadto) nga lansis dili molihok ug ang mga rekord wala gyud mahimo. Dugang pa, kini usa ka matang sa dili mabuntog nga problema, nga nga gihisgutan sulod sa kapin sa usa ka tuig. Among atubangon kini nga problema sa ulahi, ug pasagdi nga pun-on (kaniadto) ang padayon nga pangutana didto - dili kini makabalda.

Atong susihon kung unsa ang nahitabo (siyempre, kinahanglan ka maghulat pipila ka oras):

> 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

Timan-i nga ang mga kantidad sa database gitipigan sa UTC, mao nga kini nga lista lahi sa 3 ka oras - ang 7am nga mga kantidad sa output sa InfluxDB motakdo sa 10am nga mga kantidad sa mga tsart sa ibabaw. Timan-i usab nga tali sa 2 ug 5 sa buntag walay mga rekord - kini mao ang bahin sa padayon nga pangutana.

Sama sa imong makita, ang aggregated nga kantidad usa usab ka monotonically nga pagtaas sa pagkasunod-sunod, ang mga entri lamang ang dili kaayo kanunay - kausa sa usa ka oras. Apan dili kini usa ka problema - mahimo kaming magsulat og lain nga pangutana nga magkuha sa husto nga datos alang sa tsart.

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)

Akong ipasabot:

  • Gikan sa database sa homeassistant.month.water_meter_hour, among kuhaon ang data para sa entity_id='water_meter_cold' para sa katapusang adlaw (oras >= karon() -24h).
  • Sama sa akong gihisgutan, pipila ka mga entries mahimong nawala gikan sa homeassistant.month.water_meter_hour sequence. Atong i-regenerate kini nga data pinaagi sa pagpadagan sa pangutana gamit ang GROUP BY time(1h). Niining higayona, ang pagpuno (kaniadto) molihok sa husto, nga makamugna sa nawala nga datos (ang function magkuha sa miaging kantidad)
  • Ang labing hinungdanon nga butang sa kini nga pangutana mao ang function sa kalainan, nga magkalkula sa kalainan tali sa mga marka sa oras. Sa iyang kaugalingon, dili kini molihok ug nanginahanglan usa ka function sa panagsama. Himoa nga kini ang max() nga gigamit kaniadto.

Ang resulta sa pagpatay ingon niini

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

Gikan sa 2 am hangtod 5 am (UTC) walay konsumo. Bisan pa, ang pangutana magbalik sa parehas nga kantidad sa pagkonsumo salamat sa pagpuno (kaniadto), ug ang function sa kalainan magkuha niini nga kantidad gikan sa iyang kaugalingon ug makakuha 0 sa output, nga kinahanglan gyud.

Ang nahabilin nga buhaton mao ang paghimo og graph. Aron mahimo kini, ablihi ang Grafana, ablihi ang pipila nga naa na (o paghimo usa ka bag-o) dashboard, paghimo usa ka bag-ong panel. Ang mga setting sa tsart mahimong ingon sa mosunod.

Smart Home: Pag-chart sa Tubig ug Pagkonsumo sa Elektrisidad sa Home Assistant

Akong ipakita ang bugnaw ug init nga tubig nga datos sa parehas nga graph. Ang hangyo parehas ra sa akong gihulagway sa ibabaw.

Ang mga parameter sa pagpakita gitakda sama sa mosunod. Alang kanako kini mahimong usa ka graph nga adunay mga linya (mga linya), nga moadto sa mga lakang (mga hagdanan). Ang parameter sa Stack ipasabut sa ubos. Adunay usa ka magtiayon nga dugang nga mga kapilian sa pagpakita sa ubos, apan kini dili kaayo makapaikag.

Smart Home: Pag-chart sa Tubig ug Pagkonsumo sa Elektrisidad sa Home Assistant

Aron idugang ang resulta nga graph sa home assistant, kinahanglan nimo:

  • gawas sa chart editing mode. Alang sa pipila ka rason, ang husto nga mga setting sa pagpakigbahin sa tsart gitanyag lamang gikan sa panid sa dashboard
  • Pag-klik sa triyanggulo sunod sa ngalan sa tsart, pilia ang bahin gikan sa menu
  • Sa bintana nga nagbukas, adto sa tab sa pag-embed
  • I-uncheck ang kasamtangang time range - among itakda ang time range pinaagi sa URL
  • Pilia ang gikinahanglan nga topiko. Sa akong kaso kini gaan
  • Kopyaha ang resulta nga URL sa lovelace-UI settings card

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

Palihug timan-i nga ang sakup sa oras (katapusang 2 ka adlaw) gitakda dinhi, ug dili sa mga setting sa dashboard.

Ang tsart ingon niini. Wala ako mogamit ug init nga tubig sa miaging 2 ka adlaw, busa usa ra ka graph sa bugnaw nga tubig ang gikuha.

Smart Home: Pag-chart sa Tubig ug Pagkonsumo sa Elektrisidad sa Home Assistant

Wala pa ko nakadesisyon para sa akong kaugalingon kung unsang tsart ang akong gusto, usa ka linya sa lakang, o tinuod nga mga bar. Busa, mohatag lang ko ug pananglitan sa inadlaw nga eskedyul sa konsumo, karong panahona sa mga bar. Ang mga pangutana gihimo sa parehas nga paagi sama sa gihulagway sa ibabaw. Ang mga opsyon sa pagpakita mao ang:

Smart Home: Pag-chart sa Tubig ug Pagkonsumo sa Elektrisidad sa Home Assistant

Kini nga tsart ingon niini:

Smart Home: Pag-chart sa Tubig ug Pagkonsumo sa Elektrisidad sa Home Assistant

Busa, mahitungod sa Stack parameter. Niini nga graph, ang usa ka bugnaw nga tubig bar gidrowing ibabaw sa usa ka mainit nga bar. Ang kinatibuk-ang gitas-on katumbas sa kinatibuk-ang konsumo sa bugnaw ug init nga tubig alang sa panahon.

Ang tanan nga mga graph nga gipakita mga dinamiko. Mahimo nimong ibalhin ang mouse sa punto nga interesado ug makita ang mga detalye ug kantidad sa usa ka partikular nga punto.

Ikasubo, kini dili nga walay usa ka magtiayon nga langaw sa pahumot. Sa usa ka tsart sa bar (dili sama sa graph nga adunay mga linya sa lakang), ang tunga sa bar wala sa tunga-tunga sa adlaw, apan sa 00:00. Mga. ang wala nga katunga sa bar gikuha sa dapit sa miaging adlaw. Mao nga ang mga tsart alang sa Sabado ug Domingo gilaraw gamay sa wala sa bluish zone. Hangtod nga nakahuna-huna ko unsaon pagdaog.

Ang laing problema mao ang kawalay katakus sa pagtrabaho sa husto sa binulan nga mga agwat. Ang kamatuoran mao nga ang gitas-on sa oras / adlaw / semana gitakda, apan ang gitas-on sa bulan lahi sa matag higayon. Ang InfluxDB mahimo ra molihok nga adunay parehas nga mga agwat. Sa pagkakaron, igo na ang akong utok sa pagtakda og fixed interval nga 30 ka adlaw. Oo, ang tsart molutaw og gamay sa panahon sa tuig ug ang mga bar dili eksakto nga katumbas sa mga bulan. Apan tungod kay kini nga butang makapainteres kanako sama sa usa ka display meter, ako ok niini.

Nakita nako ang labing menos duha ka solusyon:

  • Aron maka-iskor sa binulan nga mga tsart ug limitahan ang imong kaugalingon sa matag semana. Nindot tan-awon ang 52 ka senemanang bar sa usa ka tuig
  • Ikonsiderar ang binulan nga konsumo mismo ingon nga pamaagi No. 2, ug gamita ang grafana alang lamang sa matahum nga mga graph. Kini usa ka tukma nga solusyon. Mahimo ka pa nga mag-overlay sa mga tsart sa miaging tuig alang sa pagtandi - mahimo kana sa grafana.

konklusyon

Wala ko kabalo ngano, pero ganahan ko ani nga mga klase sa chart. Ilang gipakita nga ang kinabuhi anaa sa bug-os nga kausaban ug ang tanan nag-usab-usab. Kagahapon daghan, karon gamay, ugma adunay lain. Nagpabilin kini sa pagtrabaho kauban ang mga panimalay sa hilisgutan sa pagkonsumo. Apan bisan sa kasamtangang mga gana, ang usa ka dako ug dili masabtan nga numero sa balaudnon nahimo na nga usa ka medyo masabtan nga hulagway sa konsumo.

Bisan pa sa akong hapit 20 ka tuig nga karera isip usa ka programmer, halos wala ako mag-intersect sa mga database. Busa, ang pag-instalar sa usa ka eksternal nga database ingon og usa ka butang nga dili masabtan ug dili masabtan. Nausab ang tanan sa ibabaw nga artikulo - kini nahimo nga ang pag-screw sa usa ka angay nga himan gihimo sa usa ka pares nga mga pag-klik, ug sa usa ka espesyal nga himan, ang tahas sa paglaraw mahimong labi kadali.

Sa ulohan, akong gihisgutan ang konsumo sa kuryente. Ikasubo, sa pagkakaron dili ako makahatag bisan unsang graph. Ang usa ka metro sa SDM120 patay na, ug ang lain buggy kung ma-access pinaagi sa Modbus. Bisan pa, wala kini makaapekto sa hilisgutan sa kini nga artikulo sa bisan unsang paagi - ang mga graph pagatukuron sa parehas nga paagi sama sa tubig.

Niini nga artikulo, gihatagan nako ang mga pamaagi nga gisulayan nako sa akong kaugalingon. Sigurado nga adunay uban nga mga paagi sa pag-organisar sa pagkolekta ug paghanduraw sa mga datos nga wala nako nahibal-an. Sultihi ko bahin niini sa mga komento, ako mahimong interesado kaayo. Malipay ako sa makaayo nga pagsaway ug bag-ong mga ideya. Nanghinaut ko nga ang materyal sa ibabaw makatabang usab sa usa ka tawo.

Source: www.habr.com

Idugang sa usa ka comment