Some pictures
Here is the disassembled device (guess the age of the green 10k resistors):

... and here is the circuit:

Here's how it looks assembled (I was too lazy to draw the labels, so I delegated it to the 3D printer):

And here is an example of my old-school art of hand drawing a PCB:

If you are interested, check out the github link for more details.
Features
- Allows to scan the M-Bus network for connected M-Bus devices (Devices tab on the web page).
- M-Bus gateway can have multiple consumption meters connected to the M-Bus network, and these M-Bus devices can be added/configured through the web interface;
- Ability to send raw commands via M-Bus (optionally enriched with a calculated checksum, and formatted into an M-Bus datagram) from the web interface (M-Bus on the web page);
- M-Bus capabilities are provided by the tmbus library which is deployed on NodeMCU as part of the M-Bus gateway software. Check its capabilities online: Live M-Bus datagram decoder.
The following features are derived from the platform on which project is based:
- Wi-Fi connection (such as setting up an access point, or using an existing Wi-Fi network) can be set up via the web interface;
- NodeMCU device hosts HTTP server locally, no third-party services are used and no Internet access is required;
- There is a built-in IDE for editing the software via the web interface (you can hack the software at runtime to add new features);
- Responsive Web UI (usable from smartphones);
- NodeMCU version agnostic (software can work on NodeMCU 1.5.4.1 - 3.0.0).
Web interface overview:

.