Wall Connector meter bridge[ demo / simulated charger ]

A private charger that reports every session to MeronRG

After each charging session, one small message goes to the operator's API: when it started, when it ended, how many kWh, and the running meter total.

1. How it works

  1. The charger (Tesla Wall Connector Gen 3) measures each session and reports it to Tesla by itself.
  2. The bridge reads the finished sessions from Tesla once an hour.
  3. The bridge sends MeronRG one HTTPS POST per session. MeronRG bills as usual.

Nothing is installed on the building's network and nothing connects in to it. The charger only needs ordinary internet access, and MeronRG only needs one address that accepts a message like the one below.

2. The message MeronRG receives

POST /v1/readings
Authorization: Bearer <key issued by MeronRG>
Idempotency-Key: DEMO-WC3-001-20261112T170000Z
Content-Type: application/json

{
  "reading_id": "DEMO-WC3-001-20261112T170000Z",
  "charger_id": "DEMO-WC3-001",
  "session": {
    "started_at": "2026-11-12T17:00:00.000Z",
    "ended_at": "2026-11-12T19:03:00.000Z",
    "energy_wh": 15785
  },
  "meter_total_wh": 104397,
  "source": "demo"
}

Answer with any 2xx and the session is done. Anything else, and the same message with the same reading_id is sent again the next hour until it is accepted, so nothing is lost and nothing is counted twice.

Note. This message is a starting point, not a requirement. The bridge is ours to change, so it adapts to the API MeronRG already has: its address, authentication, field names, units and timing. MeronRG does not need to build anything new.

3. Recent sessions delivered

StartedDurationkWhMeter kWhHTTPReading id
12 Nov, 19:00 2 h 03 min 15.79 104.40 201 DEMO-WC3-001-20261112T170000Z
11 Nov, 20:35 2 h 55 min 26.31 88.61 201 DEMO-WC3-001-20261111T183500Z
10 Nov, 19:38 2 h 46 min 22.83 62.30 201 DEMO-WC3-001-20261110T173800Z
09 Nov, 19:07 1 h 13 min 10.44 39.48 201 DEMO-WC3-001-20261109T170700Z
08 Nov, 20:17 2 h 45 min 29.04 29.04 201 DEMO-WC3-001-20261108T181700Z

4. Reusing it for other residents

MeronRG builds the receiving address once. Every resident who wants to use their own charger then sends the same message to the same address, with their own key. The key and charger_id say whose session it is.

Adding a resident

  1. MeronRG issues a key and a charger_id for the resident.
  2. A bridge is pointed at that resident's charger with that key.
  3. Sessions start arriving. Withdrawing the key stops them.

Two ways to run the bridge

(a) Each resident runs their own  [built, awaiting a real charger]
What this demo does. The code is public: copy it, add the key from MeronRG, deploy it on a free cloud account. Suits a technically minded resident, who also registers with Tesla as a developer.
(b) MeronRG runs one for everyone  [not built yet]
One bridge and one registration with Tesla. Each resident approves access once with their Tesla login, and MeronRG's bridge reads all the chargers. The same code with a list of chargers in place of one.

A different charger brand changes only the part that reads the charger. The message MeronRG receives stays the same.

5. Try the receiving side

This demo includes a stand-in for the MeronRG endpoint. It checks the key and the fields and answers the way the specification describes.

curl -X POST https://wc-meter-bridge.gunr1984.workers.dev/mock/meronrg/v1/readings \
  -H "Authorization: Bearer demo-key" \
  -H "Content-Type: application/json" \
  -d '{"reading_id":"DEMO-WC3-001-20261112T170000Z","charger_id":"DEMO-WC3-001","session":{"started_at":"2026-11-12T17:00:00.000Z","ended_at":"2026-11-12T19:03:00.000Z","energy_wh":15785},"meter_total_wh":104397,"source":"demo"}'