-
-
Save wildekek/4e19fb049eb7cea3a35fe801e3ed8f57 to your computer and use it in GitHub Desktop.
# 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 |
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.
![Capture d’écran 2024-03-16 à 17 46 22](https://private-user-images.githubusercontent.com/86571049/313418412-eab52220-3389-4fdb-bcda-89255761c899.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjE5NDc2ODIsIm5iZiI6MTcyMTk0NzM4MiwicGF0aCI6Ii84NjU3MTA0OS8zMTM0MTg0MTItZWFiNTIyMjAtMzM4OS00ZmRiLWJjZGEtODkyNTU3NjFjODk5LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDA3MjUlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwNzI1VDIyNDMwMlomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWFlY2JiYmViNzNhMWE4ZDQ3NzZkMzA1OTdlZGZmOWU2N2VmMDc1YjRiM2UzNWRlNjc1NjBmM2NhOGE2MTY4ZDEmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.fkj0cGFxWMnydODP6oAS--ryQgCQ2lbzU2zRwxzNvlc)
![Capture d’écran 2024-03-16 à 17 47 34](https://private-user-images.githubusercontent.com/86571049/313418417-38fe7768-ea0a-4f59-a387-37b578708d8c.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjE5NDc2ODIsIm5iZiI6MTcyMTk0NzM4MiwicGF0aCI6Ii84NjU3MTA0OS8zMTM0MTg0MTctMzhmZTc3NjgtZWEwYS00ZjU5LWEzODctMzdiNTc4NzA4ZDhjLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDA3MjUlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwNzI1VDIyNDMwMlomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTY3ODZjZTg4MGFkNGUwYTFkMzBhNjY5ZTBhNjY3ZDI5MzNhMmI5MTY2OTE5Y2ZjMjRhOGNkODcxYWZmNDNiMDMmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.X0YYdNxB_MitJHpo2SQvKldU2RocWoE0BF-ZWdo56vs)
![Capture d’écran 2024-03-16 à 17 47 13](https://private-user-images.githubusercontent.com/86571049/313418419-2fe0af1b-35b6-4207-8732-7ea9dbb2d76a.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjE5NDc2ODIsIm5iZiI6MTcyMTk0NzM4MiwicGF0aCI6Ii84NjU3MTA0OS8zMTM0MTg0MTktMmZlMGFmMWItMzViNi00MjA3LTg3MzItN2VhOWRiYjJkNzZhLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDA3MjUlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwNzI1VDIyNDMwMlomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTRkMzM5NTMyMWExYzNjM2RkODhmZTY4MWIzNjQzNWY2ZTE2NGI5MDczMWRmMGJlZmMwZmEyMjAzYmIxYTg2YzYmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.Zes63ElGojDbpQhgaORYX03aEX8iB7lLXqy9vPWDuSI)
![Capture d’écran 2024-03-16 à 17 47 03](https://private-user-images.githubusercontent.com/86571049/313418420-07f3884e-2ff0-4fca-8454-b809d381f9d0.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjE5NDc2ODIsIm5iZiI6MTcyMTk0NzM4MiwicGF0aCI6Ii84NjU3MTA0OS8zMTM0MTg0MjAtMDdmMzg4NGUtMmZmMC00ZmNhLTg0NTQtYjgwOWQzODFmOWQwLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDA3MjUlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwNzI1VDIyNDMwMlomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWI0YTI4ZjhhMDkyZmE0NDc0NmRkZWFiZThiZGFlMWRjYzc2NDYyYzJmODEyNDVlMDJkNTQ3MjhiMDIwZDlmZTImWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.iyn9UX4J0xbPQOkOocU-s7nQS4zkLjt64u_wmnnGDb8)
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
Thank you for this code @wildekek . It works perfectly :-)
Hey @wildekek, I would like to suggest one additional feature that will add the "Imported/Exported" sensor to Home Assistant replicating the values you get in the APSystems app. That would be the grey line in the screenshot below:
We can get these values from this URL: 'http:///index.php/meter/old_meter_power_graph'
To create this new sensor would only require adding the code below to the existing ecu.yaml
# Update the IP (192.168.0.6) to the address your ECU runs at
- platform: rest
name: "Import Export Power" # Grid Import is (+) / Export is (-)
unique_id: import_export_power
device_class: power
state_class: measurement
unit_of_measurement: W
resource: http://192.168.0.6/index.php/meter/old_meter_power_graph
scan_interval: 300
value_template: >
{% if value_json is defined %}
{{ value_json.power2[-1].powerA }}
{% else %}
{{ "None" }}
{% endif %}
Please, let me know what you think. And congratulations again for the great work.
Everything is Ok !!! Thanks !
![image](https://user-images.githubusercontent.com/133483699/301427641-0b214720-0795-4a59-8b86-d0f960145754.png)