Skip to content

Commit

Permalink
Merge pull request #16 from zeronounours/fix_utility_meter_for_costs
Browse files Browse the repository at this point in the history
Fix utility meter for costs
  • Loading branch information
zeronounours authored Jun 1, 2023
2 parents b725d13 + a77cba0 commit df69601
Show file tree
Hide file tree
Showing 3 changed files with 230 additions and 2 deletions.
2 changes: 1 addition & 1 deletion custom_components/energy_meter/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -221,4 +221,4 @@ async def setup_energy_cost_sensor(
config,
),
)
return f"{meter_conf[CONF_SOURCE_SENSOR]}_cost"
return f"sensor.{'_'.join(conf_to_cost_sensor_id(meter, meter_conf))}_cost"
200 changes: 200 additions & 0 deletions tests/const.py
Original file line number Diff line number Diff line change
Expand Up @@ -572,3 +572,203 @@
"select.daily_energy",
],
]

CHECK_UM_SOURCES_EXPECTED_RESULTS = [
#############
# NO CONFIG #
#############
# No config
{},
#############
# NO TARIFF #
#############
# No price No tariff
{
"sensor.daily_energy": "sensor.energy",
},
# Price entity No tariff
{
"sensor.daily_energy": "sensor.energy",
"sensor.daily_energy_cost": "sensor.energy_price_cost",
},
# Fixed price entity No tariff
{
"sensor.daily_energy": "sensor.energy",
"sensor.daily_energy_cost": "sensor.energy_daily_energy_cost",
},
# Price entity & fixed price No tariff
{
"sensor.daily_energy": "sensor.energy",
"sensor.daily_energy_cost": "sensor.energy_price_cost",
},
#############
# 2 TARIFFS #
#############
# No price 2 tariffs
{
"sensor.daily_energy_peak": "sensor.energy",
"sensor.daily_energy_offpeak": "sensor.energy",
},
# Price entity 2 tariffs
{
"sensor.daily_energy_peak": "sensor.energy",
"sensor.daily_energy_offpeak": "sensor.energy",
"sensor.daily_energy_cost_peak": "sensor.energy_price_cost",
"sensor.daily_energy_cost_offpeak": "sensor.energy_price_cost",
},
# Fixed price 2 tariffs
{
"sensor.daily_energy_peak": "sensor.energy",
"sensor.daily_energy_offpeak": "sensor.energy",
"sensor.daily_energy_cost_peak": "sensor.energy_daily_energy_cost",
"sensor.daily_energy_cost_offpeak": "sensor.energy_daily_energy_cost",
},
# Price entity & fixed price 2 tariffs
{
"sensor.daily_energy_peak": "sensor.energy",
"sensor.daily_energy_offpeak": "sensor.energy",
"sensor.daily_energy_cost_peak": "sensor.energy_price_cost",
"sensor.daily_energy_cost_offpeak": "sensor.energy_price_cost",
},
###################
# 2 ENERGY_METERS #
###################
# 2 meters with same entity price No tariff
{
"sensor.daily_energy": "sensor.energy",
"sensor.daily_energy_cost": "sensor.energy_price_cost",
"sensor.monthly_energy": "sensor.energy",
"sensor.monthly_energy_cost": "sensor.energy_price_cost",
},
# 2 meters with same entity price 2 tariff
{
"sensor.daily_energy_peak": "sensor.energy",
"sensor.daily_energy_offpeak": "sensor.energy",
"sensor.daily_energy_cost_peak": "sensor.energy_price_cost",
"sensor.daily_energy_cost_offpeak": "sensor.energy_price_cost",
"sensor.monthly_energy_peak": "sensor.energy",
"sensor.monthly_energy_offpeak": "sensor.energy",
"sensor.monthly_energy_cost_peak": "sensor.energy_price_cost",
"sensor.monthly_energy_cost_offpeak": "sensor.energy_price_cost",
},
# 2 meters with same price No tariff
{
"sensor.daily_energy": "sensor.energy",
"sensor.daily_energy_cost": "sensor.energy_daily_energy_cost",
"sensor.monthly_energy": "sensor.energy",
"sensor.monthly_energy_cost": "sensor.energy_monthly_energy_cost",
},
# 2 meters with same price 2 tariff
{
"sensor.daily_energy_peak": "sensor.energy",
"sensor.daily_energy_offpeak": "sensor.energy",
"sensor.daily_energy_cost_peak": "sensor.energy_daily_energy_cost",
"sensor.daily_energy_cost_offpeak": "sensor.energy_daily_energy_cost",
"sensor.monthly_energy_peak": "sensor.energy",
"sensor.monthly_energy_offpeak": "sensor.energy",
"sensor.monthly_energy_cost_peak": "sensor.energy_monthly_energy_cost",
"sensor.monthly_energy_cost_offpeak": "sensor.energy_monthly_energy_cost",
},
# 2 meters with different entity price No tariff
{
"sensor.daily_energy": "sensor.energy",
"sensor.daily_energy_cost": "sensor.energy_price_cost",
"sensor.monthly_energy": "sensor.energy",
"sensor.monthly_energy_cost": "sensor.energy_price2_cost",
},
# 2 meters with different entity price 2 tariff
{
"sensor.daily_energy_peak": "sensor.energy",
"sensor.daily_energy_offpeak": "sensor.energy",
"sensor.daily_energy_cost_peak": "sensor.energy_price_cost",
"sensor.daily_energy_cost_offpeak": "sensor.energy_price_cost",
"sensor.monthly_energy_peak": "sensor.energy",
"sensor.monthly_energy_offpeak": "sensor.energy",
"sensor.monthly_energy_cost_peak": "sensor.energy_price2_cost",
"sensor.monthly_energy_cost_offpeak": "sensor.energy_price2_cost",
},
# 2 meters with different price No tariff
{
"sensor.daily_energy": "sensor.energy",
"sensor.daily_energy_cost": "sensor.energy_daily_energy_cost",
"sensor.monthly_energy": "sensor.energy",
"sensor.monthly_energy_cost": "sensor.energy_monthly_energy_cost",
},
# 2 meters with different price 2 tariff
{
"sensor.daily_energy_peak": "sensor.energy",
"sensor.daily_energy_offpeak": "sensor.energy",
"sensor.daily_energy_cost_peak": "sensor.energy_daily_energy_cost",
"sensor.daily_energy_cost_offpeak": "sensor.energy_daily_energy_cost",
"sensor.monthly_energy_peak": "sensor.energy",
"sensor.monthly_energy_offpeak": "sensor.energy",
"sensor.monthly_energy_cost_peak": "sensor.energy_monthly_energy_cost",
"sensor.monthly_energy_cost_offpeak": "sensor.energy_monthly_energy_cost",
},
# 2 meters with different prices & entity No tariff
{
"sensor.daily_energy": "sensor.energy",
"sensor.daily_energy_cost": "sensor.energy_price_cost",
"sensor.monthly_energy": "sensor.energy",
"sensor.monthly_energy_cost": "sensor.energy_monthly_energy_cost",
},
# 2 meters with different prices & entity 2 tariff
{
"sensor.daily_energy_peak": "sensor.energy",
"sensor.daily_energy_offpeak": "sensor.energy",
"sensor.daily_energy_cost_peak": "sensor.energy_price_cost",
"sensor.daily_energy_cost_offpeak": "sensor.energy_price_cost",
"sensor.monthly_energy_peak": "sensor.energy",
"sensor.monthly_energy_offpeak": "sensor.energy",
"sensor.monthly_energy_cost_peak": "sensor.energy_monthly_energy_cost",
"sensor.monthly_energy_cost_offpeak": "sensor.energy_monthly_energy_cost",
},
##############
# Unique IDs #
##############
# No price No tariff
{
"sensor.daily_energy": "sensor.energy",
},
# Price entity No tariff
{
"sensor.daily_energy": "sensor.energy",
"sensor.daily_energy_cost": "sensor.energy_price_cost",
},
# Fixed price entity No tariff
{
"sensor.daily_energy": "sensor.energy",
"sensor.daily_energy_cost": "sensor.energy_daily_energy_cost",
},
# Price entity & fixed price No tariff
{
"sensor.daily_energy": "sensor.energy",
"sensor.daily_energy_cost": "sensor.energy_price_cost",
},
# No price 2 tariffs
{
"sensor.daily_energy_peak": "sensor.energy",
"sensor.daily_energy_offpeak": "sensor.energy",
},
# Price entity 2 tariffs
{
"sensor.daily_energy_peak": "sensor.energy",
"sensor.daily_energy_offpeak": "sensor.energy",
"sensor.daily_energy_cost_peak": "sensor.energy_price_cost",
"sensor.daily_energy_cost_offpeak": "sensor.energy_price_cost",
},
# Fixed price 2 tariffs
{
"sensor.daily_energy_peak": "sensor.energy",
"sensor.daily_energy_offpeak": "sensor.energy",
"sensor.daily_energy_cost_peak": "sensor.energy_daily_energy_cost",
"sensor.daily_energy_cost_offpeak": "sensor.energy_daily_energy_cost",
},
# Price entity & fixed price 2 tariffs
{
"sensor.daily_energy_peak": "sensor.energy",
"sensor.daily_energy_offpeak": "sensor.energy",
"sensor.daily_energy_cost_peak": "sensor.energy_price_cost",
"sensor.daily_energy_cost_offpeak": "sensor.energy_price_cost",
},
]
30 changes: 29 additions & 1 deletion tests/test_init.py
Original file line number Diff line number Diff line change
@@ -1,12 +1,17 @@
"""Test energy_meter setup process."""

# Third party libraries
from homeassistant.components.utility_meter.sensor import ATTR_SOURCE_ID
from homeassistant.setup import async_setup_component
import pytest

# Project imports
from custom_components.energy_meter.const import DOMAIN
from tests.const import CHECK_CREATED_EXPECTED_RESULTS, TEST_CASES
from tests.const import (
CHECK_CREATED_EXPECTED_RESULTS,
CHECK_UM_SOURCES_EXPECTED_RESULTS,
TEST_CASES,
)


@pytest.mark.parametrize(
Expand All @@ -31,3 +36,26 @@ async def test_setup_and_check_created_sensors(hass, config, created_sensors):
for sensor in created_sensors:
assert sensor in entities
assert len(entities) == len(created_sensors) + 3 # add 2 for sensor.energy & prices


@pytest.mark.parametrize(
("config", "um_sources"),
zip(TEST_CASES, CHECK_UM_SOURCES_EXPECTED_RESULTS),
indirect=("config",),
)
async def test_setup_and_utility_meter_sources(hass, config, um_sources):
"""Test the setup and tests created sensors."""
# define the current energy & price
hass.states.async_set("sensor.energy", 100)
hass.states.async_set("sensor.price", 2)
hass.states.async_set("sensor.price2", 3)
await hass.async_block_till_done()

# setup the integration
assert await async_setup_component(hass, DOMAIN, config) is True
await hass.async_block_till_done()

# asserts the created sensors
for utility_meter, source in um_sources.items():
assert (state := hass.states.get(utility_meter)) is not None
assert state.attributes[ATTR_SOURCE_ID] == source

0 comments on commit df69601

Please sign in to comment.