Skip to content

Instantly share code, notes, and snippets.

@wildekek
Last active January 3, 2025 17:24
Show Gist options
  • Save wildekek/4e19fb049eb7cea3a35fe801e3ed8f57 to your computer and use it in GitHub Desktop.
Save wildekek/4e19fb049eb7cea3a35fe801e3ed8f57 to your computer and use it in GitHub Desktop.
CT Clamp power consumption for Home Assistant
# 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
@vitse1971
Copy link

OK, peut-être un problème avec mon configuration.yaml...

Est-ce correct ? `#renvoi vers sensors sensor: !include sensors.yaml automation: !include automations.yaml script: !include scripts.yaml scene: !include scenes.yaml

#renvoi vers les paquets (ECU-C) homeassistant: packages: system: !include packages/ecu.yaml`

Je peux voir des capteurs dans les outils de développement mais je ne peux pas les sélectionner sur mon tableau de bord énergétique.

OK, peut-être un problème avec mon configuration.yaml...

Est-ce correct ? `#renvoi vers sensors sensor: !include sensors.yaml automation: !include automations.yaml script: !include scripts.yaml scene: !include scenes.yaml

#renvoi vers les paquets (ECU-C) homeassistant: packages: system: !include packages/ecu.yaml`

Je peux voir des capteurs dans les outils de développement mais je ne peux pas les sélectionner sur mon tableau de bord énergétique.

ca ne marche pas
pouvez vous refaire le yaml en entier
merci de votre retour

@vitse1971
Copy link

ca ne marche pas
pouvez vous refaire le yaml en entier
merci de votre retour

@tonejay62
Copy link

Hi, since yesterday, i can't get data anymore...Do you know if anything has changed ??

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment