Powerpal smart energy monitor

Same here. Just discovered it.

1 Like

If that is the issue, then there is a fixed merged into ESPHOME dev about an hour ago it seems

1 Like

can someone please post the latest working esp32 config for ESPHome 2025.6.0?

Hi People,
I have a dedicated esp32 for the powerpal HACS intergration. It’s all up and running, my bluetooth proxy can see the powerpal device . But i don’t get any readings. All the entities read as unknown. Been like this for days. I got some readings for half a day, got all excited and nothing since then. Tried with the powerpal app on,off, working int he background, completely removed from phone, I’m not sure what to do from here. Any help would be greatly appreciated.
I’m using the HACS from @muneeb1990.

Easy fix for now until a fix for the unknown error is found would be to downgrade your esphome to 2025.5.3 version.

That’s what I did for now.

Can confirm that ESPHOME 2025.6.1 has the fixes. All working fine for me.

1 Like

can you please post your esp32 yaml for the node?

Could you share your YAML?

esphome:
  name: powerpal-gateway
  friendly_name: Powerpal Gateway #THE FRIENDLY NAME OF YOUR ESP Device
  on_boot:
    then:
      - lambda: |-
           id(powerpal_ble_sensor)->daily_pulses_ = id(powerpal_daily_pulses_backup);

esp32:
  board: esp32dev
  framework:
    type: arduino

external_components:
  - source:
     type: git
     url: https://github.com/muneeb1990/esphome
     ref: powerpal_ble
    components: [ powerpal_ble ]

time:
  - platform: homeassistant
    id: homeassistant_time

ble_client:
  - mac_address: XX:XX:XX:XX:XX:XX #PUT YOUR MAC ADDRESS HERE - NO QUOTES IS IMPORTANT
    id: powerpal

button:
  - platform: restart
    name: "Restart"
    icon: "mdi:restart"

globals:
  - id: powerpal_daily_pulses_backup
    type: int
    restore_value: true

http_request:
  id: powerpal_cloud_uploader
  verify_ssl: false
  
sensor:
  - platform: powerpal_ble
    id: powerpal_ble_sensor
    ble_client_id: powerpal
    power:
      name: "Powerpal Power"
    daily_energy:
      name: "Powerpal Daily Energy"
    daily_pulses:
      name: "Powerpal Daily Pulses"
    energy:
      name: "Powerpal Total Energy"
    battery_level:
      name: "Powerpal Battery"
    watt_hours:
       name: "Powerpal Watt Hours_json"
    cost:
       name: "Powerpal Cost_json"
    timestamp:
       name: "Powerpal Timestamp_json"
    pulses:
       name: "Powerpal Pulses_json"
    pairing_code: XXXXXX #PUT THE PAIRING CODE FOUND WITH YOUR POWERPAL HERE
    notification_interval: 1
    pulses_per_kwh: 1000
    time_id: homeassistant_time
    #powerpal_apikey: XXX
    # powerpal_device_id: XXX
    # http_request_id: powerpal_cloud_uploader
    # cost_per_kwh: 0.30 #dollars per kWh

  - platform: homeassistant
    id: ha_daily_pulses
    entity_id: sensor.powerpal_daily_pulses
    on_value:
     then:
       - globals.set:
          id: powerpal_daily_pulses_backup
          value: !lambda 'return int(x);'

# Enable logging
logger:

# Enable Home Assistant API
api:
  encryption:
    key: !secret esphome_api_encryption_key

ota:
  platform: esphome
  password: “XXX”

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password

  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: "Powerpal Fallback Hotspot"
    password: “XXX”

preferences:
  flash_write_interval: 10min
1 Like

I never did manage to get uploader working but it’s working fine otherwise.

NOTE 2025.6.0 was broken for me, 2025.6.1 has the fixes introduced.

1 Like

Since the upgrade, the intergration only works when a device that uses high amount of energy like dishwasher or washing machine is turned on. I get readings for about 3 or 4 hours and then nothing. Wish it would just work 24/7. Getting fed up and ready to ditch this project.

That’s unlikely to be esphome version related. You can always downgrade the esphome version to test your theory.

I did have an issue with my electricity metre where it stopped flashing the light for a good 6 months or more. I got 2 warranty replacement powerpals to during that time then gave up on it completely.

Until I was doing a manual metre check a few months later and noticed the light was back to normal flashing mode.

Hi Guys,
i was using the powerpal cloud uploader automation using the rest_command feature which was working perfectly fine until now.

After upgrading HA to 2025.7.0 and ESPHome to 2025.6.3 I realised the cloud uploader has stopped working.

i am getting a 400 Bad Request error in the logs. is anyone else getting it too?

 [homeassistant.components.rest_command] Error. Url: https://readings.powerpal.net/api/v1/meter_reading/0004xxxx. Status code 400. Payload: b'[ {"cost":"0.0","is_peak": false, "pulses":"0.0", "timestamp": 1751591220, "watt_hours": "0.0" } ]'
rest_command:
  my_request:
    url: https://readings.powerpal.net/api/v1/meter_reading/0004xxxx
    method: POST
    headers:
      authorization: "authorization key"
      accept: ""
    payload: >-
      [ {"cost":{{ states.sensor.esphome_powerpal_cost_json.state | to_json }},"is_peak": false, "pulses":{{ states.sensor.esphome_powerpal_pulses_json.state | to_json }}, "timestamp": {{ as_timestamp(now(),0) | int(0) | to_json }}, "watt_hours": {{ states.sensor.esphome_powerpal_watt_hours_json.state | to_json }} } ]
    content_type: "application/json"
    verify_ssl: true

Yes, I am on HA core 2025.7.1 and ESPHome 2025.6.3 and I have been seeing multiple reports of a similar error over the past couple of days …

Error. Url: https://readings.powerpal.net/api/v1/meter_reading/0002XXxX. Status code 400. Payload: b'[ {"cost":0.00323840021155775,"is_peak": false, "pulses":16.0, "timestamp": 1751693160 , "watt_hours": 16.0 } ]'

I have no idea what it really means, nor how to fix it … :frowning_face:

2 Likes

ok good, so it’s not a local issue to me.

I had an issue last night where I had a very large spike in consumption being reported in Home Assistant Energy dashboard. Turns out it is the Powerpal ESP home sensor being reset to zero suddenly, then jumping back up to its correct accumulated daily consumption value a minute later.

The Energy dashboard gets confused thinking I consumed the days worth of energy AGAIN in a single minute and basically doubles the total kWh used for the day.

Anyone else seen these types of erroneous readings from the Powerpal ESPHome sensor?

Ideally, any readings which are below the previous count would be dropped in the powerpal_ble component at GitHub - muneeb1990/esphome: ESPHome is a system to control your ESP8266/ESP32 by simple yet powerful configuration files and control them remotely through Home Automation systems. I can alternatively handle this in Home Asistant by adding another sensor and filtering out any readings that are not equal or above the previous reading but it is clearly mroe elegant to have it happen prior to reporting it to HASS.

It looks like there was a change in the http handler in this version and it broke a few other integrations too.

Those seem to have been fixed before 2025.7.0 was released but this on is still failing.

Someone should really raise a GitHub issue for this on the rest integration otherwise it’s unlikely to get noticed by the devs

How did you manage to get the values to go back to the original value? I tried setting that up but on every esp restart it just resets back to 0

I chose to ignore it as daily stats are still accurate just the current total reading is out till the next day.

I have done nothing. I was only alerted because HASS was showing a whopping day’s consumption and there was a big spike in usage between 9pm and 10pm when there should have been very litle.

I’ve chased it a bit with ChatGPT.

This SQL works in the SQLite Web addon to show when it has happened in the past that the sensor has reported a reduced value.

WITH powerpal_states AS (
  SELECT 
    s.state_id,
    sm.entity_id,
    s.state,
    s.last_updated_ts,
    ROW_NUMBER() OVER (PARTITION BY sm.entity_id ORDER BY s.last_updated_ts) AS row_num
  FROM states s
  JOIN states_meta sm ON s.metadata_id = sm.metadata_id
  WHERE sm.entity_id = 'sensor.powerpal_gateway_powerpal_total_energy'
    AND s.state IS NOT NULL
    AND s.state != ''
    AND s.state NOT IN ('unavailable', 'unknown')
)

SELECT 
  curr.state_id AS drop_state_id,
  datetime(curr.last_updated_ts, 'unixepoch') AS drop_time,
  datetime(prev.last_updated_ts, 'unixepoch') AS previous_time,
  curr.state AS new_state,
  prev.state AS previous_state,
  ROUND(CAST(curr.state AS FLOAT) - CAST(prev.state AS FLOAT), 5) AS delta
FROM powerpal_states curr
JOIN powerpal_states prev
  ON curr.row_num = prev.row_num + 1
WHERE CAST(curr.state AS FLOAT) < CAST(prev.state AS FLOAT)
ORDER BY drop_time DESC
LIMIT 50;