Ile Smart: A kọ awọn aworan ti omi ati agbara ina ni Oluranlọwọ Ile

Ile Smart: A kọ awọn aworan ti omi ati agbara ina ni Oluranlọwọ Ile
Ni gbogbo igba ti Mo gba owo fun ina ati omi, o ya mi lẹnu - ṣe idile mi njẹ pupọ? O dara, bẹẹni, baluwe naa ni ilẹ ti o gbona ati igbomikana, ṣugbọn wọn ko jo ina ni gbogbo igba. A tun dabi ẹni pe a nfi omi pamọ (botilẹjẹpe a tun fẹ lati tan kaakiri ni baluwe). Opolopo odun seyin ni mo ti tẹlẹ ti a ti sopọ omi mita и itanna si ile ọlọgbọn, ṣugbọn iyẹn ni ibiti awọn nkan ti di. A ti ni bayi ni ayika lati ṣe itupalẹ agbara, eyiti o jẹ ohun ti nkan yii jẹ nipa.

Laipẹ Mo yipada si Oluranlọwọ Ile bi eto ile ọlọgbọn mi. Ọkan ninu awọn idi naa ni aye gangan lati ṣeto ikojọpọ ti iye nla ti data pẹlu agbara lati ni irọrun kọ ọpọlọpọ awọn iru awọn aworan.

Alaye ti a ṣapejuwe ninu nkan yii kii ṣe tuntun; gbogbo nkan wọnyi labẹ awọn obe oriṣiriṣi ni a ti ṣapejuwe tẹlẹ lori Intanẹẹti. Ṣugbọn nkan kọọkan nigbagbogbo ṣapejuwe ọna kan tabi abala kan. Mo ni lati ṣe afiwe gbogbo awọn isunmọ wọnyi ki o yan eyi ti o dara julọ funrarami. Nkan naa ko tun pese alaye pipe lori gbigba data, ṣugbọn jẹ iru akopọ ti bii MO ṣe ṣe. Nitorinaa ibawi ti o ni imudara ati awọn imọran fun ilọsiwaju jẹ itẹwọgba.

Igbekalẹ iṣoro naa

Nitorinaa, ibi-afẹde ti adaṣe ode oni ni lati gba awọn aworan ẹlẹwa ti omi ati agbara ina:

  • Wakati fun 2 ọjọ
  • Ojoojumọ fun ọsẹ meji 2
  • (iyan) osẹ-ati oṣooṣu

Awọn iṣoro diẹ wa pẹlu eyi:

  • Standard chart irinše ni o wa maa oyimbo dara. Ni dara julọ, o le kọ aaye ayaworan laini nipasẹ aaye.

    Ti o ba wo lile to, o le wa awọn paati ẹnikẹta ti o faagun awọn agbara ti chart boṣewa. Fun oluranlọwọ ile, ni ipilẹ, eyi jẹ paati ti o dara ati ẹwa mini-aworan kaadi, ṣugbọn o tun ni opin diẹ:

    • O nira lati ṣeto awọn aye ti chart igi lori awọn aaye arin nla (iwọn igi naa ti ṣeto ni awọn ida ti wakati kan, eyiti o tumọ si awọn aaye arin to gun ju wakati kan yoo ṣeto ni awọn nọmba ida)
    • O ko le ṣafikun awọn nkan oriṣiriṣi si aworan kan (fun apẹẹrẹ, iwọn otutu ati ọriniinitutu, tabi ṣajọpọ awọn aworan igi pẹlu laini kan)
  • Kii ṣe nikan ni oluranlọwọ ile nipasẹ aiyipada lo aaye data SQLite akọkọ julọ (ati Emi, afọwọṣe kan, ko le mu fifi MySQL tabi Postgres sori ẹrọ), ṣugbọn data naa ko ni ipamọ ni ọna ti o dara julọ. Nitorinaa, fun apẹẹrẹ, ni gbogbo igba ti o ba yipada paapaa paramita oni-nọmba ti o kere julọ ti paramita kan, json nla kan nipa kilobyte kan ni iwọn ni a kọ si ibi ipamọ data
    {"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}}}

    Mo ni ọpọlọpọ awọn sensosi (awọn sensosi iwọn otutu ni yara kọọkan, omi ati awọn mita ina), ati diẹ ninu tun ṣe ipilẹ data pupọ. Fun apẹẹrẹ, mita itanna SDM220 nikan n ṣe awọn iye mejila ni gbogbo awọn aaya 10-15, ati pe Emi yoo fẹ lati fi sori ẹrọ nipa iru awọn mita 8. Tun wa gbogbo opo ti awọn paramita ti o da lori awọn sensọ miiran. Iyẹn. gbogbo awọn iye wọnyi le ni irọrun gbe data data nipasẹ 100-200 MB lojoojumọ. Ni ọsẹ kan eto naa yoo rọra gbe, ati ni oṣu kan awakọ filasi yoo ku (ninu ọran ti fifi sori ẹrọ oluranlọwọ ile aṣoju lori Rasipibẹri PI), ati fifipamọ data fun ọdun kan ko si ibeere naa.

  • Ti o ba ni orire, mita rẹ le ka agbara funrararẹ. O le yipada si mita nigbakugba ki o beere akoko wo ni iye agbara ikojọpọ jẹ. Gẹgẹbi ofin, gbogbo awọn mita ina mọnamọna ti o ni wiwo oni-nọmba (RS232/RS485/Modbus/Zigbee) pese anfani yii.

    O buru ju ti ẹrọ naa le jiroro ni wiwọn diẹ ninu paramita lẹsẹkẹsẹ (fun apẹẹrẹ, agbara lẹsẹkẹsẹ tabi lọwọlọwọ), tabi nirọrun ṣe ina awọn iṣọn ni gbogbo wakati X watt tabi liters. Lẹhinna o nilo lati ronu nipa bii ati pẹlu kini lati ṣepọ rẹ ati ibiti o le ṣajọpọ iye. O wa eewu lati padanu ijabọ atẹle fun eyikeyi idi, ati pe deede ti eto naa lapapọ n gbe awọn ibeere dide. O le, nitorinaa, fi gbogbo eyi lelẹ si eto ile ti o gbọn bi oluranlọwọ ile, ṣugbọn ko si ẹnikan ti o fagile aaye naa nipa nọmba awọn igbasilẹ ninu ibi ipamọ data, ati pe kii yoo ṣee ṣe lati ṣe idibo awọn sensọ diẹ sii ju ẹẹkan lọ ni iṣẹju-aaya (a aropin ti ile Iranlọwọ faaji).

Ọna 1

Ni akọkọ, jẹ ki a wo kini oluranlọwọ ile pese lati inu apoti. Wiwọn agbara lori akoko kan jẹ iṣẹ ṣiṣe ti a nwa pupọ. Nitoribẹẹ, o ti ṣe imuse ni igba pipẹ sẹhin ni irisi paati amọja - utility_meter.

Koko-ọrọ ti paati ni pe inu inu ṣẹda oniyipada current_accumulated_value ati tunto lẹhin akoko kan pato (wakati/ọsẹ/oṣu). Awọn paati ara diigi awọn input oniyipada (iye ti diẹ ninu awọn sensọ), alabapin ara si awọn ayipada ninu awọn iye - o kan gba awọn ti pari esi. Nkan yii jẹ apejuwe ni awọn laini diẹ ninu faili iṣeto ni

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

Nibi sensor.water_meter_cold ni iye mita lọwọlọwọ ni awọn liters ti Mo gba taara lati awọn nkan ti irin nipa mqtt. Apẹrẹ ṣẹda awọn sensosi tuntun 2 water_cold_hour_um ati water_cold_day_um, eyiti o ṣajọpọ wakati ati awọn kika kika ojoojumọ, ntun wọn si odo lẹhin akoko naa ti pari. Eyi ni aworan ti batiri wakati fun idaji ọjọ kan.

Ile Smart: A kọ awọn aworan ti omi ati agbara ina ni Oluranlọwọ Ile

Awọn koodu fun wakati ati awọn shatti ojoojumọ fun lovelace-UI dabi eyi:

      - 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

Lootọ, iṣoro pẹlu ọna yii wa ni algorithm yii. Gẹgẹbi Mo ti sọ tẹlẹ, fun iye titẹ sii kọọkan (kika mita lọwọlọwọ fun lita kọọkan ti o tẹle) 1kb ti awọn igbasilẹ ti wa ni ipilẹṣẹ ni ibi ipamọ data. Mita ohun elo kọọkan tun n ṣe iye tuntun, eyiti o tun ṣafikun si ipilẹ. Ti Mo ba fẹ gba awọn kika wakati / lojoojumọ / osẹ / oṣooṣu, ati fun ọpọlọpọ awọn agbega omi, ati ṣafikun idii ti awọn mita ina, iyẹn yoo jẹ data pupọ. O dara, diẹ sii ni deede, ko si data pupọ, ṣugbọn niwọn igba ti oluranlọwọ ile kọwe opo alaye ti ko wulo si ibi ipamọ data, iwọn data data yoo dagba nipasẹ awọn fifo ati awọn opin. Mo bẹru lati paapaa siro iwọn ipilẹ fun awọn shatti ọsẹ ati oṣooṣu.

Ni afikun, mita ohun elo funrararẹ ko yanju iṣoro naa. Iyara ti awọn iye ti a ṣelọpọ nipasẹ mita ohun elo jẹ iṣẹ ti n pọ si monotonically ti o tunto si 0 ni gbogbo wakati. A nilo apẹrẹ agbara ti o ni oye si olumulo, ti n fihan iye awọn liters ti o jẹ lakoko akoko naa. Pawọn paati itan-akọọlẹ boṣewa ko le ṣe eyi, ṣugbọn paati ita-kaadi mini-graph le ṣe iranlọwọ fun wa.

Eyi ni koodu kaadi fun 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'

Ni afikun si awọn eto boṣewa bii orukọ sensọ, iru ayaworan, awọ (Emi ko fẹran osan boṣewa), o ṣe pataki lati ṣe akiyesi awọn eto 3:

  • group_by:wakati — awọn aworan yoo wa ni ti ipilẹṣẹ pẹlu awọn ifi deedee si awọn ibere ti awọn wakati
  • point_per_hour: 1 - ọkan bar fun gbogbo wakati
  • Ati pataki julọ, aggregate_func: max - gba iye ti o pọju laarin wakati kọọkan. O jẹ paramita yii ti o yi aworan sawtooth sinu awọn ifi

Ile Smart: A kọ awọn aworan ti omi ati agbara ina ni Oluranlọwọ Ile

Maṣe ṣe akiyesi awọn ori ila ti awọn ọwọn ni apa osi - eyi ni ihuwasi boṣewa ti paati ti ko ba si data. Ṣugbọn ko si data - Mo tan-an gbigba data mita ohun elo nikan ni awọn wakati diẹ sẹhin fun nitori nkan yii (Emi yoo ṣe apejuwe ọna lọwọlọwọ mi ni isalẹ).

Ni aworan yii Mo fẹ lati fihan pe nigbakan ifihan data paapaa ṣiṣẹ ati pe awọn ifi ṣe afihan awọn iye to tọ. Sugbon ti o ni ko gbogbo. Fun idi kan, iwe ti a yan fun akoko lati 11 si 12 am han awọn liters 19, botilẹjẹpe lori iyaworan ehin kekere kan ti o ga julọ fun akoko kanna lati sensọ kanna a rii agbara ti 62 liters. Boya kokoro kan wa tabi awọn ọwọ ti wa ni wiwọ. Ṣugbọn Emi ko tun loye idi ti data ti o wa ni apa ọtun fipa kuro - lilo deede wa, eyiti o tun han lati iyaya ehin.

Ni gbogbogbo, Emi ko lagbara lati ṣaṣeyọri iloyesi ti ọna yii - ayaworan naa nigbagbogbo n ṣafihan iru eke.

Koodu ti o jọra fun sensọ ọsan.

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

Jọwọ ṣe akiyesi pe paramita group_by ti ṣeto si aarin, ati pe paramita point_per_hour n ṣakoso ohun gbogbo. Ati pe ninu rẹ wa iṣoro miiran pẹlu paati yii - point_per_hour ṣiṣẹ daradara lori awọn shatti ti wakati kan tabi kere si, ṣugbọn o buruju lori awọn aaye arin nla. Nitorinaa lati le gba iwe kan ni ọjọ kan, Mo ni lati tẹ iye sii 1/24=0.04166666. Emi ko paapaa sọrọ nipa awọn shatti ọsẹ ati oṣooṣu.

Ọna 2

Lakoko ti o tun ni oye oluranlọwọ ile, Mo rii fidio yii:


Ọrẹ kan gba data agbara lati awọn oriṣi ti awọn iho Xiaomi. Iṣẹ-ṣiṣe rẹ rọrun diẹ - nirọrun ṣafihan iye agbara fun oni, lana ati fun oṣu naa. Ko si awọn iṣeto ti a beere.

Jẹ ki a fi awọn ijiroro silẹ nipa isọpọ afọwọṣe ti awọn iye agbara lẹsẹkẹsẹ - Mo ti kọ tẹlẹ loke nipa “ipeye” ti ọna yii. Ko ṣe kedere idi ti ko fi lo awọn iye agbara ikojọpọ, eyiti o ti gba tẹlẹ nipasẹ iṣanjade kanna. Ni ero mi, iṣọpọ inu ohun elo yoo ṣiṣẹ dara julọ.

Lati fidio naa a yoo gba imọran ti kika lilo pẹlu ọwọ ni akoko kan. Arakunrin naa ka awọn iye fun oni ati lana, ṣugbọn a yoo lọ siwaju ati gbiyanju lati ya aworan kan. Pataki ti ọna ti a dabaa ninu ọran mi jẹ bi atẹle.

Jẹ ki a ṣẹda oniyipada iye_at_the_beginning_of_hour, sinu eyiti a yoo ṣe igbasilẹ awọn kika mita lọwọlọwọ
Lilo aago, ni opin wakati (tabi ni ibẹrẹ ti atẹle) a ṣe iṣiro iyatọ laarin kika lọwọlọwọ ati eyi ti o fipamọ ni ibẹrẹ wakati naa. Iyatọ yii yoo jẹ agbara fun wakati lọwọlọwọ - a yoo fi iye naa pamọ sinu sensọ, ati ni ọjọ iwaju a yoo kọ iwọn kan ti o da lori iye yii.
O tun nilo lati “tunto” oniyipada iye_at_beginning_of_hour nipa kikọ iye counter lọwọlọwọ nibẹ.

Gbogbo eyi le ṣee ṣe nipasẹ oluranlọwọ ile funrararẹ.

Iwọ yoo ni lati kọ koodu diẹ sii ju ni ọna iṣaaju lọ. Ni akọkọ, jẹ ki a ṣẹda awọn “ayipada” kanna. Ninu apoti a ko ni nkan “ayipada”, ṣugbọn a le lo awọn iṣẹ ti alagbata mqtt. A yoo fi awọn iye ranṣẹ sibẹ pẹlu idaduro = asia tootọ - eyi yoo ṣafipamọ iye inu alagbata, ati pe o le fa jade lati ibẹ nigbakugba, paapaa nigbati o ba tun ṣe oluranlọwọ ile. Mo ṣe awọn iṣiro wakati ati lojoojumọ ni ẹẹkan.

- 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

Gbogbo idan ti o ṣẹlẹ ni adaṣe, eyiti o nṣiṣẹ ni gbogbo wakati ati ni gbogbo alẹ ni atele.

- 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

Awọn adaṣe mejeeji ṣe awọn iṣe meji:

  • Ṣe iṣiro iye fun aarin bi iyatọ laarin awọn iye ibẹrẹ ati ipari
  • Ṣe imudojuiwọn iye ipilẹ fun aarin atẹle

Itumọ ti awọn aworan ninu ọran yii jẹ ipinnu nipasẹ itan-itan igbagbogbo:

      - 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

O dabi eleyi:

Ile Smart: A kọ awọn aworan ti omi ati agbara ina ni Oluranlọwọ Ile

Ni opo, eyi jẹ tẹlẹ ohun ti o nilo. Anfani ti ọna yii ni pe a ṣe ipilẹṣẹ data ni ẹẹkan fun aarin. Awon. nikan 24 igbasilẹ fun ọjọ kan fun wakati kan chart.

Laanu, eyi ko tun yanju iṣoro gbogbogbo ti ipilẹ idagbasoke. Ti Mo ba fẹ iyaya agbara oṣooṣu, Emi yoo ni lati tọju data fun o kere ju ọdun kan. Ati pe niwọn igba ti oluranlọwọ ile n pese eto iye akoko ibi ipamọ kan ṣoṣo fun gbogbo data data, eyi tumọ si pe GBOGBO data ninu eto naa yoo ni lati tọju fun ọdun kan. Fun apẹẹrẹ, ni ọdun kan Mo jẹ awọn mita mita 200 ti omi, eyi ti o tumọ si pe eyi tumọ si awọn titẹ sii 200000 ninu aaye data. Ati pe ti o ba ṣe akiyesi awọn sensọ miiran, lẹhinna eeya naa di aiṣedeede gbogbogbo.

Ọna 3

Ni Oriire, awọn eniyan ọlọgbọn ti yanju iṣoro yii tẹlẹ nipa kikọ data data InfluxDB. Aaye data yii jẹ iṣapeye pataki fun titoju data ti o da lori akoko ati pe o jẹ apẹrẹ fun titoju awọn iye ti awọn sensọ oriṣiriṣi. Eto naa tun pese ede ibeere ti o dabi SQL ti o fun ọ laaye lati yọ awọn iye jade lati ibi ipamọ data ati lẹhinna ṣajọpọ wọn ni awọn ọna pupọ. Ni ipari, awọn oriṣiriṣi data le wa ni ipamọ fun awọn akoko oriṣiriṣi. Fun apẹẹrẹ, awọn kika iyipada nigbagbogbo bi iwọn otutu tabi ọriniinitutu le wa ni ipamọ fun ọsẹ meji kan, lakoko ti awọn kika lilo omi ojoojumọ le wa ni ipamọ fun odidi ọdun kan.

Yato si InfluxDB, awọn ọlọgbọn tun ṣẹda Grafana, eto kan fun iyaworan awọn aworan ti o da lori data lati InfluxDB. Grafana le ya awọn oriṣiriṣi awọn aworan, ṣe wọn ni kikun, ati, pataki julọ, awọn aworan wọnyi le jẹ “filọ” sori oluranlọwọ ile lovelace-UI.

Gba atilẹyin nibi и nibi. Awọn nkan ṣe apejuwe ni alaye ilana fifi sori ẹrọ ati sisopọ InfluxDB ati Grafana si oluranlọwọ ile. Emi yoo idojukọ lori lohun mi pato isoro.

Nitorinaa, ni akọkọ, jẹ ki a bẹrẹ ṣafikun iye counter ni influxDB. Nkan ti iṣeto oluranlọwọ ile (ni apẹẹrẹ yii Emi yoo ni igbadun pẹlu tutu nikan, ṣugbọn tun omi gbona):

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

Jẹ ki a mu fifipamọ data kanna yii si ibi ipamọ data oluranlọwọ inu ile ki o má ba tun bu u lẹẹkansi:

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

Jẹ ki a lọ si console InfluxDB ati tunto aaye data wa. Ni pato, o nilo lati tunto bi o ṣe pẹ to awọn data kan yoo wa ni ipamọ. Eyi ni ofin nipasẹ awọn ti a npe ni. eto imulo idaduro - eyi jẹ iru si awọn apoti isura infomesonu laarin aaye data akọkọ, pẹlu data inu kọọkan ti o ni awọn eto tirẹ. Nipa aiyipada, gbogbo data wa ni ipamọ sinu eto imulo idaduro ti a npe ni autogen; data yii yoo wa ni ipamọ fun ọsẹ kan. Emi yoo fẹ ki data wakati kan wa ni ipamọ fun oṣu kan, data osẹ lati wa ni ipamọ fun ọdun kan, ati data oṣooṣu ko ni paarẹ rara. Jẹ ki a ṣẹda eto imulo idaduro ti o yẹ

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

Ni bayi, ni otitọ, ẹtan akọkọ jẹ akopọ data nipa lilo ibeere lilọsiwaju. Eyi jẹ siseto kan ti o nṣiṣẹ ibeere kan laifọwọyi ni awọn aaye arin pàtó kan, ṣajọpọ data fun ibeere yii, ti o si ṣafikun abajade sinu iye tuntun. Jẹ ki a wo apẹẹrẹ kan (Mo kọ sinu iwe kan fun kika, ṣugbọn ni otitọ Mo ni lati tẹ aṣẹ yii sii ni laini kan)

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

Aṣẹ yii:

  • Ṣẹda ibeere lemọlemọfún ti a npè ni cq_water_cold_hourly ninu ibi ipamọ data onile
  • Ibeere naa yoo ṣiṣẹ ni gbogbo wakati (akoko (1h))
  • Ibeere naa yoo pa gbogbo data rẹ kuro ni wiwọn homeassistant.autogen.l (liters), pẹlu tutu ati awọn kika omi gbona
  • Awọn data akojọpọ yoo jẹ akojọpọ nipasẹ entity_id, eyiti yoo fun wa ni awọn iye lọtọ fun tutu ati omi gbona
  • Niwọn bi counter lita jẹ ọna ti o pọ si monotonically laarin wakati kọọkan, yoo jẹ pataki lati mu iye ti o pọ julọ, nitorinaa apapọ yoo ṣee ṣe nipasẹ iṣẹ max (iye)
  • Iye tuntun naa yoo kọ si homeassistant.month.water_meter_hour, nibiti oṣu jẹ orukọ eto imulo idaduro pẹlu akoko idaduro ti oṣu kan. Pẹlupẹlu, data lori tutu ati omi gbona yoo tuka si awọn igbasilẹ lọtọ pẹlu nkan ti o baamu_id ati iye ninu aaye iye

Ni alẹ tabi nigbati ẹnikan ko ba wa ni ile, ko si agbara omi, nitorinaa ko si awọn titẹ sii tuntun ni homeassistant.autogen.l. Lati yago fun awọn iye ti o padanu ni awọn ibeere deede, o le lo kikun (tẹlẹ). Eyi yoo fi ipa mu InfluxDB lati lo iye ti wakati to kẹhin.

Laanu, ibeere lilọsiwaju ni iyatọ kan: ẹtan kikun (ti tẹlẹ) ko ṣiṣẹ ati pe awọn igbasilẹ ko ṣẹda ni irọrun. Jubẹlọ, yi ni diẹ ninu awọn Iru insurmountable isoro ti ti a ti sísọ fun opolopo odun bayi. A yoo koju iṣoro yii nigbamii, ṣugbọn jẹ ki kikun (ti tẹlẹ) wa ninu ibeere ti o tẹsiwaju - ko ṣe dabaru.

Jẹ ki a ṣayẹwo ohun ti o ṣẹlẹ (dajudaju, o nilo lati duro fun awọn wakati meji):

> 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

Ṣe akiyesi pe awọn iye ti o wa ninu aaye data wa ni ipamọ ni UTC, nitorinaa atokọ yii yatọ nipasẹ awọn wakati 3 - awọn iye 7am ninu iṣelọpọ InfluxDB ni ibamu si awọn iye 10am ni awọn aworan loke. Tun ṣe akiyesi pe laarin 2 ati 5 am ko si awọn igbasilẹ lasan - eyi jẹ ẹya kanna ti ibeere lilọsiwaju.

Bii o ti le rii, iye akojọpọ tun jẹ ọna ti o pọ si ni monotonically, awọn titẹ sii nikan waye kere nigbagbogbo - lẹẹkan fun wakati kan. Ṣugbọn eyi kii ṣe iṣoro - a le kọ ibeere miiran ti yoo gba data to pe fun iyaya naa.

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)

Emi yoo ṣe itumọ:

  • Lati ibi-ipamọ data homeassistant.month.water_meter_hour a yoo yọ data jade fun entity_id='water_meter_cold' fun ọjọ ikẹhin (akoko >= bayi() -24h).
  • Gẹgẹbi mo ti sọ tẹlẹ, diẹ ninu awọn titẹ sii le sonu ni ọna homeassistant.month.water_meter_hour. A yoo tun data yii ṣe nipa ṣiṣe ibeere kan pẹlu GROUP BY akoko(1h). Ikun akoko yii (ti tẹlẹ) yoo ṣiṣẹ bi o ti ṣe yẹ, ti ipilẹṣẹ data ti o padanu (iṣẹ naa yoo gba iye ti tẹlẹ)
  • Ohun pataki julọ ninu ibeere yii ni iṣẹ iyatọ, eyiti yoo ṣe iṣiro iyatọ laarin awọn ami wakati. Ko ṣiṣẹ lori tirẹ ati pe o nilo iṣẹ apapọ kan. Jẹ ki eyi jẹ max () ti a lo tẹlẹ.

Abajade ipaniyan dabi eyi

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

Lati 2 si 5 owurọ (UTC) ko si agbara. Bibẹẹkọ, ibeere naa yoo pada si iye agbara agbara kanna lati kun (tẹlẹ), ati pe iṣẹ iyatọ yoo yọkuro iye yii lati funrararẹ ati abajade yoo jẹ 0, eyiti o jẹ deede ohun ti o nilo.

Gbogbo ohun ti o ku ni lati kọ aworan kan. Lati ṣe eyi, ṣii Grafana, ṣii diẹ ninu awọn dasibodu ti o wa tẹlẹ (tabi ṣẹda tuntun), ki o ṣẹda nronu tuntun kan. Eto chart yoo jẹ bi eleyi.

Ile Smart: A kọ awọn aworan ti omi ati agbara ina ni Oluranlọwọ Ile

Mo ti yoo han tutu ati ki o gbona omi data lori kanna awonya. Ibeere naa jẹ deede kanna bi Mo ti ṣalaye loke.

Awọn paramita ifihan ti ṣeto bi atẹle. Fun mi o yoo jẹ aworan kan pẹlu awọn ila, eyiti o lọ ni awọn igbesẹ (awọn pẹtẹẹsì). Emi yoo ṣe alaye paramita Stack ni isalẹ. Awọn aṣayan ifihan tọkọtaya kan wa ni isalẹ, ṣugbọn wọn kii ṣe igbadun yẹn.

Ile Smart: A kọ awọn aworan ti omi ati agbara ina ni Oluranlọwọ Ile

Lati ṣafikun aworan apẹrẹ si oluranlọwọ ile o nilo lati:

  • jade ni chart ṣiṣatunkọ mode. Fun idi kan, awọn eto pinpin chart ti o pe ni a funni lati oju-iwe dasibodu nikan
  • Tẹ lori onigun mẹta ti o tẹle si orukọ chart ki o yan ipin lati inu akojọ aṣayan
  • Ni awọn window ti o ṣi, lọ si awọn sabe taabu
  • Ṣiṣayẹwo iwọn akoko lọwọlọwọ - a yoo ṣeto iwọn akoko nipasẹ URL
  • Yan koko ti o nilo. Ninu ọran mi o jẹ imọlẹ
  • Daakọ URL ti o yọrisi si kaadi awọn eto 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"

Jọwọ ṣe akiyesi pe iye akoko (awọn ọjọ 2 kẹhin) ti ṣeto nibi, kii ṣe si awọn eto dasibodu naa.

Aworan naa dabi eyi. Emi ko lo omi gbona ni awọn ọjọ 2 sẹhin, nitorinaa iyaworan omi tutu nikan ni o ya.

Ile Smart: A kọ awọn aworan ti omi ati agbara ina ni Oluranlọwọ Ile

Emi ko tun pinnu fun ara mi iru aworan ti Mo fẹran dara julọ, igbesẹ laini kan, tabi awọn ifipa gidi. Nitorinaa, Emi yoo rọrun fun apẹẹrẹ ti shatti lilo ojoojumọ, nikan ni akoko yii ni awọn ifi. Awọn ibeere ni a ṣe bakanna si awọn ti a ṣalaye loke. Awọn aṣayan ifihan ni:

Ile Smart: A kọ awọn aworan ti omi ati agbara ina ni Oluranlọwọ Ile

Aworan yii dabi eyi:

Ile Smart: A kọ awọn aworan ti omi ati agbara ina ni Oluranlọwọ Ile

Nitorina nipa paramita Stack. Ni aworan yii, ọwọn kan ti omi tutu ni a fa si ori iwe kan ti omi gbona. Apapọ iga ni ibamu si apapọ agbara ti tutu ati omi gbona fun akoko naa.

Gbogbo awọn aworan ti o han ni agbara. O le rababa Asin rẹ lori aaye iwulo ati wo awọn alaye ati iye ni aaye kan pato.

Laanu, nibẹ wà kan tọkọtaya ti fly ni ikunra. Lori apẹrẹ igi kan (ko dabi chart pẹlu awọn laini igbesẹ), arin igi ko si ni aarin ọjọ, ṣugbọn ni 00:00. Awon. idaji osi ti awọn ọwọn ti wa ni kale ni ibi ti awọn ti tẹlẹ ọjọ. Nitorinaa awọn aworan fun Ọjọ Satidee ati Ọjọ Aiku ni a ya diẹ si apa osi ti agbegbe bluish. Titi emi o ṣe ayẹwo bi o ṣe le ṣẹgun rẹ.

Iṣoro miiran ni ailagbara lati ṣiṣẹ daradara ni awọn aaye arin oṣooṣu. Otitọ ni pe ipari ti wakati / ọjọ / ọsẹ jẹ ti o wa titi, ṣugbọn ipari oṣu naa yatọ ni akoko kọọkan. InfluxDB le ṣiṣẹ nikan ni awọn aaye arin dogba. Nitorinaa ọpọlọ mi ti to lati ṣeto aarin aarin ti 30 ọjọ. Bẹẹni, awọnya yoo leefofo kekere kan jakejado odun ati awọn ifi yoo ko deede ni ibamu si awọn osu. Ṣugbọn niwọn igba ti Mo nifẹ si nkan yii ni irọrun bi mita ifihan, Mo dara pẹlu rẹ.

Mo rii o kere ju awọn ojutu meji:

  • Fi silẹ lori awọn shatti oṣooṣu ki o fi opin si ararẹ si awọn ọsẹ. 52 osẹ ifi fun odun wo lẹwa ti o dara
  • Wo lilo oṣooṣu funrararẹ bi ọna No.. 2, ati lo grafana fun awọn aworan lẹwa nikan. Yoo jẹ ojutu deede. O le paapaa awọn aworan apọju fun ọdun to kọja fun lafiwe - grafana le ṣe iyẹn paapaa.

ipari

Emi ko mọ idi, ṣugbọn Mo wa ifẹ afẹju pẹlu awọn iru awonya. Wọn fihan pe igbesi aye wa ni kikun ati pe ohun gbogbo n yipada. Àná ló pọ̀, òde òní díẹ̀ ló wà, lọ́la á tún jẹ́ nǹkan míì. Gbogbo ohun ti o ku ni lati ṣiṣẹ pẹlu awọn ọmọ ile lori koko ti agbara. Ṣugbọn paapaa pẹlu awọn ifẹkufẹ lọwọlọwọ, eeya nla kan ati aibikita lori isokuso isanwo ti yipada tẹlẹ si aworan ti o ni oye ti agbara.

Pelu iṣẹ-ṣiṣe ọdun 20 mi ti o fẹrẹẹ bi olupilẹṣẹ, Emi ko ni ibatan si awọn apoti isura data. Nitorinaa, fifi data data ita sori ẹrọ dabi ẹnipe nkan ti o jẹ abstruse ati ti ko ni oye. Yi ohun gbogbo pada loke article - o wa ni jade pe sisopọ ohun elo ti o yẹ ni a ṣe ni awọn titẹ meji kan, ati pẹlu ọpa amọja kan, iṣẹ ṣiṣe ti awọn shatti igbero di irọrun diẹ.

Ninu akọle Mo mẹnuba agbara ina. Laanu, ni akoko yii Emi ko le pese awọn aworan eyikeyi. Mita SDM120 kan ku fun mi, ati ekeji jẹ glitchy nigbati o wọle nipasẹ Modbus. Sibẹsibẹ, eyi ko ni ipa lori koko-ọrọ ti nkan yii ni eyikeyi ọna - awọn aworan yoo ṣe ni ọna kanna bi fun omi.

Ninu nkan yii Mo ṣafihan awọn ọna ti Mo gbiyanju ara mi. Nitootọ awọn ọna miiran wa lati ṣeto gbigba data ati iworan ti Emi ko mọ nipa rẹ. Sọ fun mi nipa rẹ ninu awọn asọye, Emi yoo nifẹ pupọ. Inu mi yoo dun si atako ti o tọ ati awọn imọran tuntun. Mo nireti pe ohun elo ti a gbekalẹ yoo tun ṣe iranlọwọ fun ẹnikan.

orisun: www.habr.com

Fi ọrọìwòye kun