Last active
April 15, 2024 16:33
-
-
Save wildekek/4e19fb049eb7cea3a35fe801e3ed8f57 to your computer and use it in GitHub Desktop.
CT Clamp power consumption for Home Assistant
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Creates Home Assistant Power and Energy sensors for APSystems ECU-C | |
# Copy this file to /homeassistant/packages/ecu.yaml | |
# Add the following lines to the /homeassistant/configuration.yaml: | |
# homeassistant: | |
# packages: | |
# system: !include packages/ecu.yaml | |
# Update the IP (192.168.0.6) to the address your ECU runs at | |
# Update the ECUID (215000015509) to your ECUID. You can find this on the main webpage of the ECU | |
rest: | |
# Fetch power data | |
# This data is generated by measuring the CT clamps. | |
- resource: "http://192.168.0.6/index.php/hidden/set_get_app_info_json" | |
method: POST | |
scan_interval: 300 | |
payload: '{"Command_Id": "53","APS": "ASK","Command": "1","Version": "1.1","ECUID": "215000015509"}' | |
sensor: | |
- name: Solar Power Produced L1 | |
unique_id: solar_power_produced_l1 | |
unit_of_measurement: kW | |
state_class: measurement | |
device_class: power | |
value_template: '{{ value_json["meter_data"]["power1"][-1]["powerA"] / 1000}}' | |
- name: Solar Power Produced L2 | |
unique_id: solar_power_produced_l2 | |
unit_of_measurement: kW | |
state_class: measurement | |
device_class: power | |
value_template: '{{ value_json["meter_data"]["power1"][-1]["powerB"] / 1000 }}' | |
- name: Solar Power Produced L3 | |
unique_id: solar_power_produced_l3 | |
unit_of_measurement: kW | |
state_class: measurement | |
device_class: power | |
value_template: '{{ value_json["meter_data"]["power1"][-1]["powerC"] / 1000 }}' | |
- name: Grid Power Produced L1 | |
unique_id: grid_power_produced_l1 | |
unit_of_measurement: kW | |
state_class: measurement | |
device_class: power | |
value_template: >- | |
{% set power = value_json["meter_data"]["power2"][-1]["powerA"] / 1000 %} | |
{% if power < 0 %} | |
{{ power * -1 }} | |
{% else %} | |
0 | |
{% endif %} | |
- name: Grid Power Produced L2 | |
unique_id: grid_power_produced_l2 | |
unit_of_measurement: kW | |
state_class: measurement | |
device_class: power | |
value_template: >- | |
{% set power = value_json["meter_data"]["power2"][-1]["powerB"] / 1000 %} | |
{% if power < 0 %} | |
{{ power * -1 }} | |
{% else %} | |
0 | |
{% endif %} | |
- name: Grid Power Produced L3 | |
unique_id: grid_power_produced_l3 | |
unit_of_measurement: kW | |
state_class: measurement | |
device_class: power | |
value_template: >- | |
{% set power = value_json["meter_data"]["power2"][-1]["powerC"] / 1000 %} | |
{% if power < 0 %} | |
{{ power * -1 }} | |
{% else %} | |
0 | |
{% endif %} | |
- name: Grid Power Consumed L1 | |
unique_id: grid_power_consumed_l1 | |
unit_of_measurement: kW | |
state_class: measurement | |
device_class: power | |
value_template: >- | |
{% set power = value_json["meter_data"]["power2"][-1]["powerA"] / 1000 %} | |
{% if power > 0 %} | |
{{ power }} | |
{% else %} | |
0 | |
{% endif %} | |
- name: Grid Power Consumed L2 | |
unique_id: grid_power_consumed_l2 | |
unit_of_measurement: kW | |
state_class: measurement | |
device_class: power | |
value_template: >- | |
{% set power = value_json["meter_data"]["power2"][-1]["powerB"] / 1000 %} | |
{% if power > 0 %} | |
{{ power }} | |
{% else %} | |
0 | |
{% endif %} | |
- name: Grid Power Consumed L3 | |
unique_id: grid_power_consumed_l3 | |
unit_of_measurement: kW | |
state_class: measurement | |
device_class: power | |
value_template: >- | |
{% set power = value_json["meter_data"]["power2"][-1]["powerC"] / 1000 %} | |
{% if power > 0 %} | |
{{ power }} | |
{% else %} | |
0 | |
{% endif %} | |
- name: Domestic Power Consumed L1 | |
unique_id: domestic_power_consumed_l1 | |
unit_of_measurement: kW | |
state_class: measurement | |
device_class: power | |
value_template: '{{ (value_json["meter_data"]["power1"][-1]["powerA"] + value_json["meter_data"]["power2"][-1]["powerA"]) / 1000 }}' | |
- name: Domestic Power Consumed L2 | |
unique_id: domestic_power_consumed_l2 | |
unit_of_measurement: kW | |
state_class: measurement | |
device_class: power | |
value_template: '{{ (value_json["meter_data"]["power1"][-1]["powerB"] + value_json["meter_data"]["power2"][-1]["powerB"]) / 1000 }}' | |
- name: Domestic Power Consumed L3 | |
unique_id: domestic_power_consumed_l3 | |
unit_of_measurement: kW | |
state_class: measurement | |
device_class: power | |
value_template: '{{ (value_json["meter_data"]["power1"][-1]["powerC"] + value_json["meter_data"]["power2"][-1]["powerC"]) / 1000 }}' | |
# Fetch energy data | |
# This data is generated by measuring the CT clamps. | |
scrape: | |
- resource: http://192.168.0.6/index.php/display/historical_data/meter_lifetime_energy/ | |
scan_interval: 300 | |
sensor: | |
- name: Solar Energy | |
unique_id: solar_energy | |
unit_of_measurement: kWh | |
device_class: energy | |
state_class: total | |
select: "div.table-responsive > table > tbody > tr:nth-of-type(1) > td:nth-of-type(3)" | |
value_template: '{{ value| float | round(3) }}' | |
- name: Grid Energy | |
unique_id: grid_energy | |
unit_of_measurement: kWh | |
device_class: energy | |
state_class: total | |
select: "div.table-responsive > table > tbody > tr:nth-of-type(2) > td:nth-of-type(3)" | |
value_template: '{{ value| float | round(3) }}' | |
template: | |
sensor: | |
# We need the inverted Grid Energy to feed the Grid Production meter | |
- name: "Grid Energy Inverted" | |
unique_id: grid_energy_inverted | |
state_class: total | |
device_class: energy | |
unit_of_measurement: "kWh" | |
state: "{{ states('sensor.grid_energy') | float * -1 }}" | |
utility_meter: | |
solar_energy_produced: | |
name: "Solar Energy Produced" | |
unique_id: solar_energy_produced | |
source: sensor.solar_energy | |
delta_values: false | |
net_consumption: false | |
periodically_resetting: false | |
grid_energy_consumed: | |
name: "Grid Energy Consumed" | |
unique_id: grid_energy_consumed | |
source: sensor.grid_energy | |
delta_values: false | |
net_consumption: false | |
periodically_resetting: false | |
grid_energy_produced: | |
name: "Grid Energy Produced" | |
unique_id: grid_energy_produced | |
source: sensor.grid_energy_inverted | |
delta_values: false | |
net_consumption: false | |
periodically_resetting: false | |
sensor: | |
# Calculate total power values | |
- platform: min_max | |
name: Solar Power Produced | |
unique_id: solar_power_produced | |
round_digits: 3 | |
type: sum | |
entity_ids: | |
- sensor.solar_power_produced_l1 | |
- sensor.solar_power_produced_l2 | |
- sensor.solar_power_produced_l3 | |
- platform: min_max | |
name: Grid Power Produced | |
unique_id: grid_power_produced | |
round_digits: 3 | |
type: sum | |
entity_ids: | |
- sensor.grid_power_produced_l1 | |
- sensor.grid_power_produced_l2 | |
- sensor.grid_power_produced_l3 | |
- platform: min_max | |
name: Grid Power Consumed | |
unique_id: grid_power_consumed | |
round_digits: 3 | |
type: sum | |
entity_ids: | |
- sensor.grid_power_consumed_l1 | |
- sensor.grid_power_consumed_l2 | |
- sensor.grid_power_consumed_l3 | |
- platform: min_max | |
name: Domestic Power Consumed | |
unique_id: domestic_power_consumed | |
round_digits: 3 | |
type: sum | |
entity_ids: | |
- sensor.domestic_power_consumed_l1 | |
- sensor.domestic_power_consumed_l2 | |
- sensor.domestic_power_consumed_l3 |
So.... it works?
Keep in mind that:
- The scrape interval is 300s, so you'll only have data available after 5 mins. (the ECU only updates this data every 5 mins: ¯_(ツ)_/¯ .
- These sensors will only be available after a restart of HA.
You're not giving me a lot to go on there buddy. That said, I don't think data is 'gone' but was just acquired at a later point in time. Probably Home Assistant was unable to reach the ECU for some reason. I would not worry about it too much tbh.
Hello,
I have followed all the steps provided, however, I still see zero production despite another consumption tracking module indicating overproduction. I specifically need the status "sensor.solar_energy_produced". The version of the add-on "APSystems ECU-R" I am using is v1.4.1.
Could you please assist me with this?
Thank you in advance.
Edit : After uninstall / reinstall its work now
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Ok, it seems to be OK... ???