ET-SM01 – DIY DSMR P1 smart meter
Table of Contents
Introduction
In the Netherlands, Belgium, Luxembourg and Sweden Residential Smart Electricity Meters comply to DSMR (Dutch Smart Meter Requirements), also known as ‘Smart Meter’ or ‘P1 port’ which supports plain non encrypted telegrams and also encrypted telegrams as used in Luxembourg. This hardware sends the data of your Residential Smart Meter to Home Assistant using a esphome component.
There are many designs of Home Assistant compatible DSMR interfaces available. Some commercial, some open source. Most of the open source designs are ‘complicated’ and/or hard to build by a regular consumer. As always we try to keep things simple, so we designed the SM01 to be easy to build and use only a few widely available components.
On top of that we designed to SM01 to optionally support your water meter using a simple inductive sensor and you could add a I2C (OLED) display as well.

SM01 with optional water meter sensor
Design parameters
Our requirements were:
- Wemos D1 mini ESP8266 of ESP32 Wemos D1 controlled
- Can be powered from the P1 port (DSMR v5) or from USB
- Simple to build
- Nicely fits inside a proper enclosure
- Parts should be available at AliExpress or Amazon for affordable prices, making it as cheap as possible to build
- Optional water meter support
- Optional (OLED) I2C Display support
- Optionally exposed GPIO pins and 3.3v and 5v on pin headers
- Firmware should be ESPHome (for use with Home Assistant)
Practical design
We came up with this practical design that in its simplest form (just DSMR functionality) needs just 8 components including the PCB and the Wemos D1.
Circuit diagram
Build it!
Bill of materials
See below the list with the components you will need to build the ET-SM01. A number of these items will not be sold in smaller quantities at AliExpress. We will try to use the same components as much as possible in future projects.
We would really appreciate it if you will use the links below to buy the components, since it will give a little bit of commission to us without any additional cost for yourself. These commissions will be used to cover some of the costs involved in the development of the design.
Reference | Qty | Description | Link |
WEMOS1 | 1 | Wemos Mini D1 ESP8266 | AliExpress |
WEMOS1 | 1 | Wemos D1 ESP32 | Aliexpress |
D1 | 1 | 1N4001 | AliExpress |
C1 | 1 | 470µF / 16V 6mm diameter, 2.54mm pitch | AliExpress |
T1 | 1 | S8050 TO-92 Triode Transistor | Aliexpress |
R1, R4, R5, R6, R7 | 1 (or 5) | Resistor 1k | Aliexpress |
R2 | 1 | Resistor 3k3 | Aliexpress |
R3 | 1 | Resistor 10k | Aliexpress |
X1 | 2 | 1x 3 pole screw terminal 5.00mm pitch | Aliexpress |
JP3-JP6 | 1 | Male pin headers 2.54p | Aliexpress |
J1 | 1 | RJ12 terminal (6p6C) | Aliexpress |
Enclosure | 1 | 76X56X29mm DIY Enclosure | Aliexpress |
PCB | 1 | A 5-pack is the smallest order at PCBway, enough for you and your friends 😉 | PCBway |
Cable | 1 | RJ12 cable straight 0.5meter | Aliexpress |
Water meter sensor | 1 | PL-05N inductive proximity switch | Aliexpress |
Putting it together
Like with all other projects, it is the easiest to start with identifying the components purchased as discussed in the blog post. After sorting the components and cleaning the PCB, start with the lowest components first. For this project, we advise to work in this order:
- Resistors
- Diode
- Transistor
- (optional) Screw terminal
- (optional) pin headers
- ESP module headers (Use the hints in the soldering blog post!)
- Electrolytic capacitor
- (optional) RJ12 terminal
If you need DSMR functionality only, you can only populate the components marked green.
Once all components are soldered in place, perform a good visual check of all joints, and pay particular attention to possible solder bridges (unwanted solder connections between pins). Do not forget to clean the excess solder flux from the PCB using alcohol!

Fully assembled board
Software configuration
substitutions: device_name: espthings-sm01 human_devicename: espthings.io SM-01 device_description: "DIY DSMR P1 interface for your residential Smart Meter" esphome: name: ${device_name} comment: "${device_description}" platform: ESP8266 esp8266_restore_from_flash: true board: d1_mini name_add_mac_suffix: false project: name: espthings.et-sm01 version: "220818-01" wifi: networks: - ssid: !secret esphome_wifi_ssid password: !secret esphome_wifi_password logger: baud_rate: 0 api: encryption: key: !secret esphome_api_key ota: password: !secret esphome_ota_password web_server: port: 80 uart: baud_rate: 115200 rx_pin: D7 # On esp32 wemos d1 use: GPIO23 dsmr: id: dsmr_instance sensor: - platform: dsmr energy_delivered_tariff1: name: "$human_devicename - Energy Consumed Tariff 1" state_class: total_increasing energy_delivered_tariff2: name: "$human_devicename - Energy Consumed Tariff 2" state_class: total_increasing energy_returned_tariff1: name: "$human_devicename - Energy Produced Tariff 1" state_class: total_increasing energy_returned_tariff2: name: "$human_devicename - Energy Produced Tariff 2" state_class: total_increasing power_delivered: name: "$human_devicename - Power Consumed" accuracy_decimals: 3 power_returned: name: "$human_devicename - Power Produced" accuracy_decimals: 3 electricity_failures: name: "$human_devicename - Electricity Failures" icon: mdi:alert electricity_long_failures: name: "$human_devicename - Long Electricity Failures" icon: mdi:alert voltage_l1: name: "$human_devicename - Voltage Phase 1" voltage_l2: name: "$human_devicename - Voltage Phase 2" voltage_l3: name: "$human_devicename - Voltage Phase 3" current_l1: name: "$human_devicename - Current Phase 1" id: currentl1 current_l2: name: "$human_devicename - Current Phase 2" id: currentl2 current_l3: name: "$human_devicename - Current Phase 3" id: currentl3 power_delivered_l1: name: "$human_devicename - Power Consumed Phase 1" accuracy_decimals: 3 power_delivered_l2: name: "$human_devicename - Power Consumed Phase 2" accuracy_decimals: 3 power_delivered_l3: name: "$human_devicename - Power Consumed Phase 3" accuracy_decimals: 3 power_returned_l1: name: "$human_devicename - Power Produced Phase 1" accuracy_decimals: 3 power_returned_l2: name: "$human_devicename - Power Produced Phase 2" accuracy_decimals: 3 power_returned_l3: name: "$human_devicename - Power Produced Phase 3" accuracy_decimals: 3 gas_delivered: name: "$human_devicename - Gas Consumed" state_class: total_increasing gas_delivered_be: name: "$human_devicename - Gas Consumed Belgium" state_class: total_increasing - platform: uptime name: "$human_devicename - Uptime" - platform: wifi_signal name: "$human_devicename - Wi-Fi Signal" update_interval: 60s ### use if you populate the water meter stuff :) - platform: pulse_counter pin: number: D3 allow_other_uses: true # On esp32 wemos d1 use: GPIO17 update_interval : 6s name: "$human_devicename - water pulse" id: water_pulse - platform: pulse_meter pin: number: D3 allow_other_uses: true # On esp32 wemos d1 use: GPIO17 name: "$human_devicename - Water Pulse Meter" unit_of_measurement: "liter/min" icon: "mdi:water" total: name: "$human_devicename - Water Total" unit_of_measurement: "liter" - platform: pulse_meter pin: number: D3 allow_other_uses: true # On esp32 wemos d1 use: GPIO17 name: "$human_devicename - Water Pulse Meter" unit_of_measurement: "liter/min" icon: "mdi:water" total: name: "$human_devicename - Water Meter Total" unit_of_measurement: "m³" id: water_meter_total accuracy_decimals: 3 device_class: water state_class: total_increasing filters: - multiply: 0.001 - platform: template name: "$human_devicename - Water Usage Liter" id: water_flow_rate accuracy_decimals: 1 unit_of_measurement: "l/min" icon: "mdi:water" lambda: return (id(water_pulse).state * 10); update_interval: 6s text_sensor: - platform: dsmr identification: name: "$human_devicename - Identification" p1_version: name: "$human_devicename - Version" p1_version_be: name: "$human_devicename - Version Belgium" electricity_tariff: name: "$human_devicename - Tarief" - platform: wifi_info ip_address: name: "$human_devicename - IP Address" ssid: name: "$human_devicename - Wi-Fi SSID" bssid: name: "$human_devicename - Wi-Fi BSSID" - platform: version name: "$human_devicename - ESPHome Version" hide_timestamp: true switch: - platform: restart name: "$human_devicename - Restart"
Home Assistant
This is what it looks like in Home Assistant:
Water meter
If you want water meter support, purchase the PL-05N, use the relevant ESPHome code and 3d-print this [mount]. You need to experiment with placing the proximity sensor in the exact right spot and then attach it using some double sided tape.

PL-05N mounted to water meter
Final thoughts
We have the SM01 running flawlessly for a few months now. If you want residential Electricity, Gas and Water Meter monitoring, then build this thing yourself and If you do, please let us know in the comments 🙂
If you run into issues during the construction, or you have any question regarding this controller, please leave a comment below. We will try to reply as soon as possible!
Make sure to subscribe to our YouTube channel so you won’t miss any of our upcoming project videos!
Please subscribe to our newsletter!
Thanks for making the pcb public. I ordered the pcb, had some fun soldering it and it works perfectly.
Hi,
The capacitor 470µF / 16V with 2.54mm pitch is not that easy to find, would an same size with 10V do as well?
Regards,
Seb
Yes, that will work just fine.
Thank you for the very fast response!
Since the P1 devices are sending at a fairly high speed and I was seeing a few checksum errors now and then in the logs I changed the data in from D7 to RX to use the hardware handshaking instead.
No more checksum issues in the logs anymore and the block time logs in the later ESPome versions went down from 0.20 to 0.05 s
Interesting. I’ll have a look at that!
Hi Twinor,
Are you willing to share the drawing/file of the housing you made ?
Have a 3D printer and your housing looks to fit the board perfectly.
Kind regards,
Thijs
Zwolle
The config file needs an update especially for the water meter integration. Now we need to specify the pin with allow_other_uses such that it can be used three times.
pin:
number: D3
allow_other_uses: true
Thanks for the heads-up. Config updated 🙂
Thanks for updating it this fast! It will help future builders of the project. 👍
Keep up the good work. I love your projects.
Hi Michel,
I am trying to understand the circuit diagram but not all makes sense to me. So I am hoping you could help me out.
1) The water meter X1-2 – The label says D3-5V. For clarification this is connected to Wemos PIN D3 only correct?
2) Wemos PIN D6 states DATA-RQ. Where is this pin used for? I assume it is used as a request signal to get P1 data but I do not see DATA-RQ connected on J1. I do see on the right side of the J1 connector standing “2: DRQ” which I translate to Data Request, but J1-P2 is currently connected to WEMOS-5V.
Thank you for your support,
Martin
What are you trying to accomplish? All connections are very clearly labeled on the PCB.
Michel,
Sorry for the misunderstanding. I am sure that the PCB is clearly labeled but that is not my problem.
I like your design very much, but would like to change the PCB to fit my needs. Therefore I am using your circuit diagram to make the diagram in KiCad.
However.. Your circuit diagram shows at the 3 pin water connection X1-2 the label “D3-5V”. Looking at the soft config this X1-2 pin is connected to Wemos pin D3, but is it also connected to 5V as stated by the label?
Secondly your circuit diagram states Wemos PIN D6 labeled “DATA-RQ”. I do not see this pin used in your config nor do I see the label somewhere else in your circuit diagram. Am I correct that the pin is not used?
Martin
The DATA-RQ pin can be ignored. It was used to direct the smart meter to send data, but in the end it was decided to tell the meter to continuous send data. Diagram will be updated to reflect this.
Paul,
Thank you for the clarification.
Martin
Have it build but in a delta network. 2x220v without N there is a phase missing. Any ideas what could cause this?
Thanks for making this design public.
Has anybody got a PCB in excess of their needs? Like mentioned minimum order quantity is 5 pcs’s at PCB way.
Would like toget my hands on 1-2 boards, is anybody want to sell the PCB?
Kind regards,
Thijs