Firmware for the Twomes P1 Gateway measurement device.
This repository contains the firmware for the Twomes P1 Gateway device. It is written in C and is based on the ESP-IDF platform. It uses the Generic Firmware for Twomes measurement devices for matters such as device preperation, provisioning of home Wi-Fi network credentials, device-backend activation, network time synchronisation via NTP and secure uploading of measurement data.
This specific firmware reads data from the P1 port of smart meters adhering to the DSMR standards. As part of its gateway function, it can be paired with one or more 'satellite' measurement devices, receive measurements via the energy-efficient ESP-NOW protocol, thus lengthening the battery life of such satellite measurement devcies, and upload these messages via Wi-Fi and the internet to a Twomes server.
For the associated hardware design files for the P1 Gateway hardware and enclosure and tips and instructions how to produce and assemble the hardware, please see the twomes-p1-gateway-hardware repository.
This section describes how you can deploy binary releases of the firmware, i.e. without changing the source code, without a development environment and without needing to compile the source code.
To deploy the firmware, in addition to the generic prerequisites for deploying Twomes firmware, you need:
- a 3.3V TTL-USB Serial Port Adapter (e.g. FT232RL, CP210x, etc..), including the cable to connect ths adapter to a free USB port on your computer (a USB to miniUSB cable in the case of a FT232RL);
- (optional: more stable) Supply 5V DC power to the device via the micro-USB jack of the device.
- Find a row of 6 holes holes (next to the ESP32 on the PCB of the P1 Gateway), find the
GND
pin (see bottom of the PCB), align the 6 pins of the serial port adapter such thatGND
and other pins match; then connect the serial port adapter to your computer and connect the 6 pins of the serial port adapter to the 6 holes on the PCB.
- Download the binary release for your device and extract it to a directory of your choice.
- If you used the device before, you shoud first erase all persistenly stored data.
- Follow the generic Twomes firmware upload instructions , with the exceptions mentioned below:
- When you see the beginning of the sequence
Connecting ......_____......
, press and hold the button labeledGPIO0 (SW2)
on the PCB, then briefly press the button labeledRESET
, then release the button labeledGPIO0 (SW2)
; - You should see an indication that the firmware is being written to the device.
- When the upload is finished, view the serial output with a serial monitor tool like PuTTY or the utility of your IDE (115200 baud). Press
RESET (SW1)
shortly to make sure the firmware boots.
- When you see the beginning of the sequence
Please follow the generic firmware instructions for these steps.
Pairing a satellite to the Twomes P1 Gateway measurement device works as follows:
- Place the battery in the satellite module, or remove the insulatting battery pull tab, make sure it is near the gateway device to be able to see whether the pairing is successful.
- On the satellite module, shortly press the
RESET (SW1)
button (labeledR
on the enclosure); A green LED will start blink for 20 seconds to indicate that the satellite module is in pairing mode, i.e. listens (on 2.4 GHz channel 0) to the gateway device telling it which ESP-NOW channel to use after pairing. - On the gateway device, within these 20 seconds, press the
GPIO12 (SW2)
(labeledK
on the enclosure, which stands for the Dutch word "Koppelen"). The gateway device now sends, via 2.4 GHz channel 0, which channel the gateway module should use for subsequent ESP-NOW messages. The green LED on the gateway device blinks shortly during this transmission. - On the satellite module, when the channel number received, the green LED will turn on steady for about 5 seconds.
- This procedure can be repeated if needed (e.g., when the gateway device is connected to the internet via another Wi-Fi network).
This section describes how you can change the source code using a development environment and compile the source code into a binary release of the firmware that can be depoyed, either via the development environment, or via the method described in the section Deploying.
Please see the developing section of the generic Twomes firmware first. Remember to press buttons to upload the firmware:
- When you see the beginning of the sequence
Connecting ....___....
, press and hold the button labeledGPIO0 (SW2)
on the PCB, then briefly press the button labeledRESET (SW1)
, then release the button labeledGPIO0 (SW2)
; - You should see an indication that the firmware is being written to the device.
List of features ready and TODOs for future development (other than the features of the generic Twomes firmware).
Ready:
- Read data from the P1 port of devices adhering to DSMRv4 and DSMRv5 (UART settings 115200/8N1).
- Read data from the P1 port of devices adhering to DSMRv2 and DSMRv3 (UART settings 9600/7E1).
- Indicate status and error via LEDs.
- Reset Wi-Fi provisioning by a long press (>10s) of the button
K
(this button is labeledGPIO12 (SW3)
on the PCB). - Confirm pairing with satellite measurement devices with the button
K
(this button is labeledGPIO12 (SW3)
on the PCB). - Receive ESP-NOW data from satellite measurement devices and send this to a Twomes server:
To-do:
- Align indication of status and error via LEDs with other measurement devices.
Project is: in Progress.
This software is available under the Apache 2.0 license, Copyright 2021 Research group Energy Transition, Windesheim University of Applied Sciences
This software is a collaborative effort of:
- Sjors Smit · @Shorts1999
... with help from the following persons for laying the ground work (see legacy branch for their contributions):
- Fredrik-Otto Lautenbag · @Fredrik1997
- Gerwin Buma · @GerwinBuma
- Werner Heetebrij · [@Werner-Heetebrij] (https://github.com/Werner-Heetebrij)
- Henri ter Hofte · @henriterhofte · Twitter @HeNRGi
... and with help from the following persons for bugfixes:
- Marco Winkelman · @MarcoW71
- Kevin Janssen · @KevinJan18
We use and gratefully acknowlegde the efforts of the makers of the following source code and libraries:
- ESP-IDF, by Espressif Systems, licensed under Apache 2.0 License