Skip to content

Latest commit

 

History

History

rpi-powermeter

RPi Power Meter

This project describes how to build a single phase AC power meter and store power consumption data in database (ElasticSearch). Power meter utilizes digital DDS-1Y-18L single phase DIN rail type unit equipped with DIN 43864 compatible pulse interface to record regular meter pulses. RPi device will attach timestamp and calculate power consumption, price and other data. Each meter pulse with timestamp, power consumption, price and other data. Records are stored in ElasticSearch index for later visualizations with Kibana.

banner more photos

architecture

Hardware Architecture

Check detailed hardware bill of material. Raspberry Pi is connected to digital power meter output (S0- and S0+) via GPIO pins. Digital power meter produces one pulse per power consumption unit (usually one pulse per 1Wh, ot 1000 pulses per 1kWh). Pulse from digital power meter is detected by GPIO input pin [15] and triggers data calculation and upload to elasticsearch. For details see powermeter.py implementation.

hardware

Install on Raspberry PI

  1. Install Raspberry Pi OS Lite 2021-05-28
  2. Copy files on Raspberry Pi device into directory /opt/powermeter
  3. Edit configuration file powermeter.json.
  4. Install and enable powermeter as systemd service.
    sudo cp powermeter.service /etc/systemd/system/
    sudo chown root:root /etc/systemd/system/powermeter.service
    sudo systemctl daemon-reload
    sudo systemctl enable powermeter
    
  5. Start | Stop powermeter service.
    sudo systemctl start powermeter
    sudo systemctl stop powermeter
    sudo systemctl status powermeter
    

Configuration

Check this configuration example.

Parameter Description
device-id Unique device id for better power meter indentification.
pulse-value Value of one meter pulse in kWh.
voltage-ac Standard AC voltage.
cost-kwh Cost of one kWh.
co2g-per-kwh Average CO2 grams produced per kWh.
max-power-kw Max power daw of connected load in kW. Used to filter/ignore false meter pulses or interference.
meter-pin GPIO pin number connected to powermeter S0+ and S0- interface.
data-store/elastic Hostname and port of ElasticSearch Server. Example: 192.168.1.101:9200
data-store/index Index name in ElasticSearch used to store power meter data. Example: power-meter

ElasticSearch setup

  1. Create index to store powermeter data. How to start Elasticsearch in docker.
    curl --request PUT \
      --url http://<elastic-host>:9200/power-meter \
      --header 'Content-Type: application/json' \
      --data '{
      "mappings": {
        "properties": {
          "timestamp": {
            "type": "date",
            "format": "epoch_millis"
          },
          "deviceId": {
            "type": "keyword"
          },
          "interval": {
            "type": "float"
          },
          "voltage": {
            "type": "double"
          },
          "consumed": {
            "type": "double"
          },
          "price": {
            "type": "double"
          },
          "co2gProduced": {
            "type": "double"
          },
          "calculated.power": {
            "type": "double"
          },   
          "calculated.current": {
            "type": "double"
          }   
        }
      }
    }'
    
  2. Check data written into power-meter index.
    curl --request GET \
      --url http://<elastic-host>:9200/power-meter/_search
    
  3. Use Kibana to check data in power-meter index. Dashboard example in Kibana: kibana-dashboard

References