Compare commits

..

No commits in common. "main" and "v_2.4" have entirely different histories.
main ... v_2.4

5 changed files with 25 additions and 14 deletions

1
.github/FUNDING.yml vendored
View file

@ -1,3 +1,2 @@
--- ---
ko_fi: jayjojayson
custom: ["https://www.paypal.me/quadFlyerFW"] custom: ["https://www.paypal.me/quadFlyerFW"]

View file

@ -7,7 +7,7 @@
[![Stars](https://img.shields.io/github/stars/jayjojayson/power-flux-card)](https://github.com/jayjojayson/power-flux-card/stargazers) [![Stars](https://img.shields.io/github/stars/jayjojayson/power-flux-card)](https://github.com/jayjojayson/power-flux-card/stargazers)
# Power Flux Card # Power Flux Card
The ⚡ Power Flux Card is an advanced, animated energy flow card for Home Assistant. It visualizes the power distribution between Solar, Grid, Battery, and Consumers with beautiful neon effects and diffrent animations. The ⚡ Power Flux Card is an advanced, animated energy flow card for Home Assistant. It visualizes the power distribution between Solar, Grid, Battery, and Consumers with beautiful neon effects and diffrent animations.
@ -133,7 +133,7 @@ entities:
battery_soc: sensor.battery_soc battery_soc: sensor.battery_soc
card_mod: card_mod:
style: | style: |
:host { power-flux-card {
{% if states('sensor.solar_power') | float > 0 %} {% if states('sensor.solar_power') | float > 0 %}
--icon-solar-color: #00ff88; --icon-solar-color: #00ff88;
{% else %} {% else %}
@ -153,7 +153,7 @@ entities:
battery_soc: sensor.battery_soc battery_soc: sensor.battery_soc
card_mod: card_mod:
style: | style: |
:host { power-flux-card {
{% if states('sensor.grid_power_combined') | float < 0 %} {% if states('sensor.grid_power_combined') | float < 0 %}
--text-grid-color: #ff3333; --text-grid-color: #ff3333;
{% else %} {% else %}
@ -173,7 +173,7 @@ entities:
battery_soc: sensor.battery_soc battery_soc: sensor.battery_soc
card_mod: card_mod:
style: | style: |
:host { power-flux-card {
{% set soc = states('sensor.battery_soc') | float %} {% set soc = states('sensor.battery_soc') | float %}
{% if soc > 80 %} {% if soc > 80 %}
--neon-green: #00ff88; --neon-green: #00ff88;
@ -197,7 +197,7 @@ entities:
consumer_1: sensor.wallbox_power consumer_1: sensor.wallbox_power
card_mod: card_mod:
style: | style: |
:host { power-flux-card {
{% if states('sensor.wallbox_power') | float > 500 %} {% if states('sensor.wallbox_power') | float > 500 %}
--pipe-consumer-1-color: #a855f7; --pipe-consumer-1-color: #a855f7;
--icon-consumer-1-color: #a855f7; --icon-consumer-1-color: #a855f7;
@ -220,7 +220,7 @@ entities:
consumer_1: sensor.wallbox_power consumer_1: sensor.wallbox_power
card_mod: card_mod:
style: | style: |
:host { power-flux-card {
{% if states('sensor.solar_power') | float == 0 %} {% if states('sensor.solar_power') | float == 0 %}
--icon-solar-color: #555555; --icon-solar-color: #555555;
--text-solar-color: #777777; --text-solar-color: #777777;

View file

@ -1820,7 +1820,13 @@ console.log(
const val = parseFloat(state.state); const val = parseFloat(state.state);
if (isNaN(val)) return state.state + (state.attributes.unit_of_measurement ? ' ' + state.attributes.unit_of_measurement : ''); if (isNaN(val)) return state.state + (state.attributes.unit_of_measurement ? ' ' + state.attributes.unit_of_measurement : '');
const unit = state.attributes.unit_of_measurement || ''; const unit = state.attributes.unit_of_measurement || '';
if (unit === 'W') { return this._formatPower(val); } if (unit === 'Wh') { if (Math.abs(val) >= 1000) return (val / 1000).toFixed(2) + ' kWh'; return Math.round(val) + ' Wh'; } if (unit === 'kWh' || unit === 'kW') { return val.toFixed(1) + ' ' + unit; } if (unit.includes('EUR') || unit.includes('ct') || unit.includes('€')) { return val.toFixed(2) + ' ' + unit; } return val.toFixed(1) + (unit ? ' ' + unit : ''); if (unit === 'W' || unit === 'Wh') {
return this._formatPower(val);
}
if (unit === 'kWh' || unit === 'kW') {
return val.toFixed(1) + ' ' + unit;
}
return val.toFixed(1) + (unit ? ' ' + unit : '');
}; };
// Determine existence of main entities // Determine existence of main entities

View file

@ -135,7 +135,7 @@ entities:
battery_soc: sensor.battery_soc battery_soc: sensor.battery_soc
card_mod: card_mod:
style: | style: |
:host { power-flux-card {
{% if states('sensor.solar_power') | float > 0 %} {% if states('sensor.solar_power') | float > 0 %}
--icon-solar-color: #00ff88; --icon-solar-color: #00ff88;
{% else %} {% else %}
@ -155,7 +155,7 @@ entities:
battery_soc: sensor.battery_soc battery_soc: sensor.battery_soc
card_mod: card_mod:
style: | style: |
:host { power-flux-card {
{% if states('sensor.grid_power_combined') | float < 0 %} {% if states('sensor.grid_power_combined') | float < 0 %}
--text-grid-color: #ff3333; --text-grid-color: #ff3333;
{% else %} {% else %}
@ -175,7 +175,7 @@ entities:
battery_soc: sensor.battery_soc battery_soc: sensor.battery_soc
card_mod: card_mod:
style: | style: |
:host { power-flux-card {
{% set soc = states('sensor.battery_soc') | float %} {% set soc = states('sensor.battery_soc') | float %}
{% if soc > 80 %} {% if soc > 80 %}
--neon-green: #00ff88; --neon-green: #00ff88;
@ -199,7 +199,7 @@ entities:
consumer_1: sensor.wallbox_power consumer_1: sensor.wallbox_power
card_mod: card_mod:
style: | style: |
:host { power-flux-card {
{% if states('sensor.wallbox_power') | float > 500 %} {% if states('sensor.wallbox_power') | float > 500 %}
--pipe-consumer-1-color: #a855f7; --pipe-consumer-1-color: #a855f7;
--icon-consumer-1-color: #a855f7; --icon-consumer-1-color: #a855f7;
@ -222,7 +222,7 @@ entities:
consumer_1: sensor.wallbox_power consumer_1: sensor.wallbox_power
card_mod: card_mod:
style: | style: |
:host { power-flux-card {
{% if states('sensor.solar_power') | float == 0 %} {% if states('sensor.solar_power') | float == 0 %}
--icon-solar-color: #555555; --icon-solar-color: #555555;
--text-solar-color: #777777; --text-solar-color: #777777;

View file

@ -820,7 +820,13 @@ console.log(
const val = parseFloat(state.state); const val = parseFloat(state.state);
if (isNaN(val)) return state.state + (state.attributes.unit_of_measurement ? ' ' + state.attributes.unit_of_measurement : ''); if (isNaN(val)) return state.state + (state.attributes.unit_of_measurement ? ' ' + state.attributes.unit_of_measurement : '');
const unit = state.attributes.unit_of_measurement || ''; const unit = state.attributes.unit_of_measurement || '';
if (unit === 'W') { return this._formatPower(val); } if (unit === 'Wh') { if (Math.abs(val) >= 1000) return (val / 1000).toFixed(2) + ' kWh'; return Math.round(val) + ' Wh'; } if (unit === 'kWh' || unit === 'kW') { return val.toFixed(1) + ' ' + unit; } if (unit.includes('EUR') || unit.includes('ct') || unit.includes('€')) { return val.toFixed(2) + ' ' + unit; } return val.toFixed(1) + (unit ? ' ' + unit : ''); if (unit === 'W' || unit === 'Wh') {
return this._formatPower(val);
}
if (unit === 'kWh' || unit === 'kW') {
return val.toFixed(1) + ' ' + unit;
}
return val.toFixed(1) + (unit ? ' ' + unit : '');
}; };
// Determine existence of main entities // Determine existence of main entities