# Show index data in bar graph (hourly, daily...)

**URL:** <https://community.tago.io/t/show-index-data-in-bar-graph-hourly-daily/1737>\
**Category:** Dashboards\
**Created:** [July 20, 2025, 12:07pm UTC](https://community.tago.io/t/show-index-data-in-bar-graph-hourly-daily/1737 "2025-07-20T12:07:53Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![gwenael.delaleux](https://avatars.discourse-cdn.com/v4/letter/g/858c86/32.png) [@gwenael.delaleux](https://community.tago.io/u/gwenael.delaleux)\
**Post date:** [July 20, 2025, 12:07pm UTC](https://community.tago.io/t/show-index-data-in-bar-graph-hourly-daily/1737/1 "2025-07-20T12:07:53Z")

</div>

Hi,

Is there a simple way to show data from meter index (such as cumulative kwh or m3) into bar graph showing hourly or daily consumption?

Best regards

---

<div class="post-metadata">

**Author:** ![gwenael.delaleux](https://avatars.discourse-cdn.com/v4/letter/g/858c86/32.png) [@gwenael.delaleux](https://community.tago.io/u/gwenael.delaleux)\
**Post date:** [July 21, 2025, 12:29pm UTC](https://community.tago.io/t/show-index-data-in-bar-graph-hourly-daily/1737/2 "2025-07-21T12:29:50Z")

</div>

```javascript
const { Analysis, Device } = require("@tago-io/sdk");

async function generateConsoFromIndex(context) {
  const device_token = "--------------------";
  const device = new Device({ token: device_token });

  try {
    context.log("Récupération des données index...");

    const index_data = await device.getData({
      variable: "index",
      qty: 1000,
    });

    if (index_data.length < 2) {
      context.log("Pas assez de points index pour calculer.");
      return;
    }

    // Tri manuel par timestamp
    index_data.sort((a, b) => new Date(a.time) - new Date(b.time));

    const datapoints = [];

    for (let i = 1; i < index_data.length; i++) {
      const prev = parseFloat(index_data[i - 1].value);
      const curr = parseFloat(index_data[i].value);
      const time = index_data[i].time;

      const delta = curr - prev;

      if (delta < 0) {
        context.log(`Index décroissant @ ${time}, ignoré.`);
        continue;
      }

      // Vérifie si une conso existe déjà à ce timestamp
      const existing_conso = await device.getData({
        variable: "conso",
        start_date: time,
        end_date: new Date(new Date(time).getTime() + 1000).toISOString(),
        qty: 1,
      });

      if (existing_conso.length > 0) {
        context.log(`conso déjà présente @ ${time}, sautée.`);
        continue;
      }

      datapoints.push({
        variable: "conso",
        value: delta,
        time: time,
        unit: "unit",
      });

      context.log(`conso @ ${time} = ${delta}`);
    }

    if (datapoints.length > 0) {
      await device.sendData(datapoints);
      context.log(`${datapoints.length} nouvelles valeurs conso envoyées.`);
    } else {
      context.log("Aucune nouvelle conso à générer.");
    }
  } catch (error) {
    context.log(`Erreur : ${error.message}`);
  }
}

module.exports = new Analysis(generateConsoFromIndex);

```

---

<div class="post-metadata">

**Author:** ![gwenael.delaleux](https://avatars.discourse-cdn.com/v4/letter/g/858c86/32.png) [@gwenael.delaleux](https://community.tago.io/u/gwenael.delaleux)\
**Post date:** [July 21, 2025, 12:31pm UTC](https://community.tago.io/t/show-index-data-in-bar-graph-hourly-daily/1737/3 "2025-07-21T12:31:35Z")

</div>

I did it recalcuting consumption variable at each timestamp where I got an index and showing it with aggregate sum bar charts..

Maybe not the most efficient way.

---

<div class="post-metadata">

**Author:** ![carolina.hidalgo](https://yyz2.discourse-cdn.com/flex034/user_avatar/community.tago.io/carolina.hidalgo/32/1602_2.png) [@carolina.hidalgo](https://community.tago.io/u/carolina.hidalgo)\
**Post date:** [July 22, 2025, 7:40pm UTC](https://community.tago.io/t/show-index-data-in-bar-graph-hourly-daily/1737/4 "2025-07-22T19:40:33Z")

</div>

Hi Gwenael,

Thanks for reaching out 😊

Since you’ve already opened a ticket about this, we’re handling this subject through that channel, okay?

Let us know if anything else comes up!
