JouloDocs

TRMNL

Show your Joulo kWh, ERE and session count on a TRMNL e-ink display with a private plugin

TRMNL is an e-ink display that polls a JSON endpoint and renders it with Liquid markup. A private plugin against GET /energy puts your lifetime kWh, ERE and session count on the wall. No server in between.

The dashboard generates this recipe with your token filled in under Developer → API → Recipes. This page explains what each part does.

Prerequisites

  • A Joulo account with at least one connected charger
  • An active API token (generate one from Developer → API in the dashboard)
  • A TRMNL device with the Developer edition, which unlocks private plugins

Create the plugin

New private plugin

In TRMNL go to Plugins → Private Plugin → New. Pick the Polling strategy.

Polling URL

https://api.joulo.nl/functions/v1/api/energy

Polling headers

TRMNL takes headers as key=value pairs. Separate several with &.

authorization=Bearer YOUR_API_TOKEN

Refresh rate

60 minutes is enough. The totals change per charging session, not per minute.

Markup

Paste this into the Markup field. TRMNL exposes the root keys of the JSON response as Liquid variables.

<div class="layout layout--col">
  <div class="columns">
    <div class="column">
      <span class="value value--large">{{ total_kwh | round: 1 }}</span>
      <span class="label">kWh (counts for ERE)</span>
    </div>
    <div class="column">
      <span class="value value--large">{{ total_ere_credits | round: 0 }}</span>
      <span class="label">ERE</span>
    </div>
    <div class="column">
      <span class="value value--large">{{ total_sessions }}</span>
      <span class="label">Charging sessions</span>
    </div>
  </div>
</div>
<div class="title_bar">
  <span class="title">Joulo</span>
  <span class="instance">{{ total_kwh_all | round: 0 }} kWh charged in total</span>
</div>

Fields explained

VariableMeaning
total_kwhEnergy from MID-eligible chargers. The same headline number as the dashboard.
total_ere_creditsERE earned on that energy.
total_sessionsSessions on MID-eligible chargers.
total_kwh_allAll charging energy, including chargers without a MID meter.
total_sessions_allAll sessions, including chargers without a MID meter.

The full response shape is on the energy endpoint page.

Liquid's round filter keeps the display readable. The JSON carries more decimals than an e-ink panel needs.

Money on the display

GET /ere-position returns the expected earnings for the compliance year, what is reserved and what is paid out. Add it as a second polling URL. TRMNL then exposes the responses as IDX_0 and IDX_1:

<span class="value">{{ IDX_1.total_expected_eur | round: 0 }} EUR</span>
<span class="label">Expected this year</span>

The fields are described on the ERE position page.

The token in the plugin has full read access to your charging data. Do not share plugin screenshots that include the settings page.