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
GARAGE INTERNET MERONRG +-----------+ +-------------+ +----------+ +-------------+ | Charger |--1->| Tesla cloud |--2->| Bridge |--3->| MeronRG API | +-----------+ +-------------+ +----------+ +-------------+
GARAGE
+----------------------------+
| Charger |
+----------------------------+
| 1
v
INTERNET
+----------------------------+
| Tesla cloud |
+----------------------------+
| 2
v
+----------------------------+
| Bridge |
+----------------------------+
| 3
v
MERONRG
+----------------------------+
| MeronRG API |
+----------------------------+
- The charger (Tesla Wall Connector Gen 3) measures each session and reports it to Tesla by itself.
- The bridge reads the finished sessions from Tesla once an hour.
- 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.
3. Recent sessions delivered
| Started | Duration | kWh | Meter kWh | HTTP | Reading 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.
Resident A (Tesla, key A) ---+
| +-------------+ +---------+
Resident B (Tesla, key B) ---+---->| MeronRG API |---->| Billing |
| +-------------+ +---------+
Resident C (other, key C) ---+ built once
Resident A (Tesla, key A) --+
Resident B (Tesla, key B) --+
Resident C (other, key C) --+
|
v
+-------------+
| MeronRG API |
+-------------+
built once
|
v
+-------------+
| Billing |
+-------------+
Adding a resident
- MeronRG issues a key and a
charger_idfor the resident. - A bridge is pointed at that resident's charger with that key.
- 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"}'