Compute Energy used using a RPICT

From lechacal
Jump to: navigation, search

We will introduce how Energy can be calculated using a RPICT board. The widely known kWh - Kilo-Watt-hour. Our example will use a RPICT3T1 but this can easily apply to other models.

RPICT being a sensor interface board it does not compute energy for performances reason. We consider this sort of computation to be the duty of the recording platform and not the acquisition unit.

With Emoncms you will find this computation readily available. We refer to the Emoncms website for more details about this. This is also possible in Grafana where you can use an integral function to estimate energy from power data source.

Here we cover the computation of energy using a small Python program.

How energy relates to power

Power is expressed in Watt (W) and energy is expressed in Watt-hour (Wh).

One single Watt-hour is obtained when a device uses 1W of power during a 1 hour period of time. The energy is graphically represented as the area below the power curve as shown below. In other words energy is the integral of power.

Power-energy 00.png

Computing energy from power readings

With the RPICT board power is measured on a given time interval Δt. Every 5 seconds for example.

Power-energy 01.png

Between 2 power readings (say P0 and P1) the energy can be calculated using the formulae below.

Screenshot 2020-08-23 21-36-00.png

We then use this subsequently to each data-points entry to know the energy since the beginning of the dataset. We sum up all energy calculated on each Δt to get this result.

Power-energy 03.png

The formulae to sum up all added energies can be written like this below.

Screenshot 2020-08-23 21-43-37.png

Using a python program to calculate energy

The code below will output instant power from CT1 and the accumulated energy in Wh using the formulae above.

To download directly on the Raspberrpi just issue the command below:


Then run the script by calling it


Note the following

  • Accumulated energy starts at zero when the program starts. If the program is restarted energy returns to zero again.
  • If you prefer kWh just divide the energy by 1000 in the code.

 import serial
 ser = serial.Serial('/dev/ttyAMA0', 38400)
 # Polling interval is 2 seconds
 delta_T = 2./3600
 # This will keep the sum of powers
 P_sum = 0
 # Memory for previous power reading
 prev_P = 0
       while 1:
            	# Read one line from the serial buffer
       		line = ser.readline()
       		# Remove the trailing carriage return line feed
      		line = line[:-2]
       		# Create an array of the data
       		Z = line.split(' ')
                # Picking CT1 only and converting from string to float
       		P_CT1 = float(Z[1])
                # Building the sum of powers
                P_sum += prev_P + P_CT1
                # Saving the new Power reading as previous for next loop run
                prev_P = P_CT1
                # Finally computing energy
                E = delta_T / 2 * P_sum
                # Print it nicely
                print ("----------")
                print ("Instant Power: %s (W)" % P_CT1)
                print ("Accum Energy: %.2f (Wh)" % E)
  except KeyboardInterrupt:

Calculate energy from the arduino sketch

We are demonstrating how energy can be calculated using an arduino sketch with a RPICT8 Version 3 in the link below.