Lately I’ve been playing around with P1Monitor to connect to my smart meter at home, measuring both gas and electricity usage. Here in The Netherlands we have a standard for that communication that’s also adopted in other countries: DSMR. The P1-Monitor app, which normally is distributed as a SDCard image for RaspberryPi use, connects to the USB port (you need a cable like this one) and reads the telegrams the meter transmits on it’s serial port.
P1Monitor in Docker
Because I’m running other things on my Pi4 (DNS, NextCloud, Plausible etc), I wanted to have the P1Monitor packaged as a Docker image. Some alternatives exist, but I decided to package my own version and publish it. You can find it here. It’ll give you a fully functioning P1Monitor, running in Docker. I’ve compiled for arm and x86, so you have free platform choice.
You can run the container in the following way:
docker run -d -p 80:80 -p 10721:10721 -p 40721:40721 --name="p1mon" \ -h p1mon --cap-add=SYS_NICE \ --tmpfs /tmp --tmpfs /run --tmpfs /p1mon/mnt/ramdisk \ -v /<insert local path>/p1mon/data:/p1mon/data:rw -v /<insert local path>/p1mon/usbdisk:/p1mon/mnt/usb:rw \ -v /etc/localtime:/etc/localtime:ro \ --device=/dev/<your USB device> \ --restart=unless-stopped \ rvleij/p1monitor
P1Monitor -> Home-Assistant
I then use MQTT to publish events based on the data received from the meter by defining sensors in Home-Assiststants configuration.yaml:
# Sensorssensor: - platform: mqtt state_topic: "p1monitor/smartmeter/consumption_kw" name: consumption unit_of_measurement: kW device_class: power - platform: mqtt state_topic: "p1monitor/smartmeter/consumption_kwh_high" name: usage high unit_of_measurement: kWh device_class: energy - platform: mqtt state_topic: "p1monitor/smartmeter/consumption_kwh_low" name: usage low unit_of_measurement: kWh device_class: energy - platform: mqtt state_topic: "p1monitor/phase/l1_a" name: current unit_of_measurement: A device_class: current - platform: mqtt state_topic: "p1monitor/phase/l1_v" name: voltage unit_of_measurement: V device_class: voltage - platform: mqtt state_topic: "p1monitor/smartmeter/consumption_gas_m3" name: gas unit_of_measurement: m3
Home-Assistant -> InfluxDB
And then to get things into InfluxDB (I’m running v2), I use:
influxdb: host: <your influx IP> port: 8086 api_version: 2 token: <your token> ssl: false organization: <your org in case of influxV2> max_retries: 10 bucket: home_assistant/autogen tags: source: HA tags_attributes: - friendly_name include: entities: - sensor.voltage - sensor.current - sensor.consumption - sensor.gas - sensor.usage_low - sensor.usage_high
Now the only thing needed is the grafana dashboard, which I created (basic I know) like this:
and that’s really it, now the only things left for future improvement on the roadmap are to investigate the new power dashboard in Home-Assistant and figure out how to fix the labels after migrating to Influxv2!