Skip to content

Commit df69601

Browse files
authored
Merge pull request #16 from zeronounours/fix_utility_meter_for_costs
Fix utility meter for costs
2 parents b725d13 + a77cba0 commit df69601

File tree

3 files changed

+230
-2
lines changed

3 files changed

+230
-2
lines changed

custom_components/energy_meter/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -221,4 +221,4 @@ async def setup_energy_cost_sensor(
221221
config,
222222
),
223223
)
224-
return f"{meter_conf[CONF_SOURCE_SENSOR]}_cost"
224+
return f"sensor.{'_'.join(conf_to_cost_sensor_id(meter, meter_conf))}_cost"

tests/const.py

Lines changed: 200 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -572,3 +572,203 @@
572572
"select.daily_energy",
573573
],
574574
]
575+
576+
CHECK_UM_SOURCES_EXPECTED_RESULTS = [
577+
#############
578+
# NO CONFIG #
579+
#############
580+
# No config
581+
{},
582+
#############
583+
# NO TARIFF #
584+
#############
585+
# No price No tariff
586+
{
587+
"sensor.daily_energy": "sensor.energy",
588+
},
589+
# Price entity No tariff
590+
{
591+
"sensor.daily_energy": "sensor.energy",
592+
"sensor.daily_energy_cost": "sensor.energy_price_cost",
593+
},
594+
# Fixed price entity No tariff
595+
{
596+
"sensor.daily_energy": "sensor.energy",
597+
"sensor.daily_energy_cost": "sensor.energy_daily_energy_cost",
598+
},
599+
# Price entity & fixed price No tariff
600+
{
601+
"sensor.daily_energy": "sensor.energy",
602+
"sensor.daily_energy_cost": "sensor.energy_price_cost",
603+
},
604+
#############
605+
# 2 TARIFFS #
606+
#############
607+
# No price 2 tariffs
608+
{
609+
"sensor.daily_energy_peak": "sensor.energy",
610+
"sensor.daily_energy_offpeak": "sensor.energy",
611+
},
612+
# Price entity 2 tariffs
613+
{
614+
"sensor.daily_energy_peak": "sensor.energy",
615+
"sensor.daily_energy_offpeak": "sensor.energy",
616+
"sensor.daily_energy_cost_peak": "sensor.energy_price_cost",
617+
"sensor.daily_energy_cost_offpeak": "sensor.energy_price_cost",
618+
},
619+
# Fixed price 2 tariffs
620+
{
621+
"sensor.daily_energy_peak": "sensor.energy",
622+
"sensor.daily_energy_offpeak": "sensor.energy",
623+
"sensor.daily_energy_cost_peak": "sensor.energy_daily_energy_cost",
624+
"sensor.daily_energy_cost_offpeak": "sensor.energy_daily_energy_cost",
625+
},
626+
# Price entity & fixed price 2 tariffs
627+
{
628+
"sensor.daily_energy_peak": "sensor.energy",
629+
"sensor.daily_energy_offpeak": "sensor.energy",
630+
"sensor.daily_energy_cost_peak": "sensor.energy_price_cost",
631+
"sensor.daily_energy_cost_offpeak": "sensor.energy_price_cost",
632+
},
633+
###################
634+
# 2 ENERGY_METERS #
635+
###################
636+
# 2 meters with same entity price No tariff
637+
{
638+
"sensor.daily_energy": "sensor.energy",
639+
"sensor.daily_energy_cost": "sensor.energy_price_cost",
640+
"sensor.monthly_energy": "sensor.energy",
641+
"sensor.monthly_energy_cost": "sensor.energy_price_cost",
642+
},
643+
# 2 meters with same entity price 2 tariff
644+
{
645+
"sensor.daily_energy_peak": "sensor.energy",
646+
"sensor.daily_energy_offpeak": "sensor.energy",
647+
"sensor.daily_energy_cost_peak": "sensor.energy_price_cost",
648+
"sensor.daily_energy_cost_offpeak": "sensor.energy_price_cost",
649+
"sensor.monthly_energy_peak": "sensor.energy",
650+
"sensor.monthly_energy_offpeak": "sensor.energy",
651+
"sensor.monthly_energy_cost_peak": "sensor.energy_price_cost",
652+
"sensor.monthly_energy_cost_offpeak": "sensor.energy_price_cost",
653+
},
654+
# 2 meters with same price No tariff
655+
{
656+
"sensor.daily_energy": "sensor.energy",
657+
"sensor.daily_energy_cost": "sensor.energy_daily_energy_cost",
658+
"sensor.monthly_energy": "sensor.energy",
659+
"sensor.monthly_energy_cost": "sensor.energy_monthly_energy_cost",
660+
},
661+
# 2 meters with same price 2 tariff
662+
{
663+
"sensor.daily_energy_peak": "sensor.energy",
664+
"sensor.daily_energy_offpeak": "sensor.energy",
665+
"sensor.daily_energy_cost_peak": "sensor.energy_daily_energy_cost",
666+
"sensor.daily_energy_cost_offpeak": "sensor.energy_daily_energy_cost",
667+
"sensor.monthly_energy_peak": "sensor.energy",
668+
"sensor.monthly_energy_offpeak": "sensor.energy",
669+
"sensor.monthly_energy_cost_peak": "sensor.energy_monthly_energy_cost",
670+
"sensor.monthly_energy_cost_offpeak": "sensor.energy_monthly_energy_cost",
671+
},
672+
# 2 meters with different entity price No tariff
673+
{
674+
"sensor.daily_energy": "sensor.energy",
675+
"sensor.daily_energy_cost": "sensor.energy_price_cost",
676+
"sensor.monthly_energy": "sensor.energy",
677+
"sensor.monthly_energy_cost": "sensor.energy_price2_cost",
678+
},
679+
# 2 meters with different entity price 2 tariff
680+
{
681+
"sensor.daily_energy_peak": "sensor.energy",
682+
"sensor.daily_energy_offpeak": "sensor.energy",
683+
"sensor.daily_energy_cost_peak": "sensor.energy_price_cost",
684+
"sensor.daily_energy_cost_offpeak": "sensor.energy_price_cost",
685+
"sensor.monthly_energy_peak": "sensor.energy",
686+
"sensor.monthly_energy_offpeak": "sensor.energy",
687+
"sensor.monthly_energy_cost_peak": "sensor.energy_price2_cost",
688+
"sensor.monthly_energy_cost_offpeak": "sensor.energy_price2_cost",
689+
},
690+
# 2 meters with different price No tariff
691+
{
692+
"sensor.daily_energy": "sensor.energy",
693+
"sensor.daily_energy_cost": "sensor.energy_daily_energy_cost",
694+
"sensor.monthly_energy": "sensor.energy",
695+
"sensor.monthly_energy_cost": "sensor.energy_monthly_energy_cost",
696+
},
697+
# 2 meters with different price 2 tariff
698+
{
699+
"sensor.daily_energy_peak": "sensor.energy",
700+
"sensor.daily_energy_offpeak": "sensor.energy",
701+
"sensor.daily_energy_cost_peak": "sensor.energy_daily_energy_cost",
702+
"sensor.daily_energy_cost_offpeak": "sensor.energy_daily_energy_cost",
703+
"sensor.monthly_energy_peak": "sensor.energy",
704+
"sensor.monthly_energy_offpeak": "sensor.energy",
705+
"sensor.monthly_energy_cost_peak": "sensor.energy_monthly_energy_cost",
706+
"sensor.monthly_energy_cost_offpeak": "sensor.energy_monthly_energy_cost",
707+
},
708+
# 2 meters with different prices & entity No tariff
709+
{
710+
"sensor.daily_energy": "sensor.energy",
711+
"sensor.daily_energy_cost": "sensor.energy_price_cost",
712+
"sensor.monthly_energy": "sensor.energy",
713+
"sensor.monthly_energy_cost": "sensor.energy_monthly_energy_cost",
714+
},
715+
# 2 meters with different prices & entity 2 tariff
716+
{
717+
"sensor.daily_energy_peak": "sensor.energy",
718+
"sensor.daily_energy_offpeak": "sensor.energy",
719+
"sensor.daily_energy_cost_peak": "sensor.energy_price_cost",
720+
"sensor.daily_energy_cost_offpeak": "sensor.energy_price_cost",
721+
"sensor.monthly_energy_peak": "sensor.energy",
722+
"sensor.monthly_energy_offpeak": "sensor.energy",
723+
"sensor.monthly_energy_cost_peak": "sensor.energy_monthly_energy_cost",
724+
"sensor.monthly_energy_cost_offpeak": "sensor.energy_monthly_energy_cost",
725+
},
726+
##############
727+
# Unique IDs #
728+
##############
729+
# No price No tariff
730+
{
731+
"sensor.daily_energy": "sensor.energy",
732+
},
733+
# Price entity No tariff
734+
{
735+
"sensor.daily_energy": "sensor.energy",
736+
"sensor.daily_energy_cost": "sensor.energy_price_cost",
737+
},
738+
# Fixed price entity No tariff
739+
{
740+
"sensor.daily_energy": "sensor.energy",
741+
"sensor.daily_energy_cost": "sensor.energy_daily_energy_cost",
742+
},
743+
# Price entity & fixed price No tariff
744+
{
745+
"sensor.daily_energy": "sensor.energy",
746+
"sensor.daily_energy_cost": "sensor.energy_price_cost",
747+
},
748+
# No price 2 tariffs
749+
{
750+
"sensor.daily_energy_peak": "sensor.energy",
751+
"sensor.daily_energy_offpeak": "sensor.energy",
752+
},
753+
# Price entity 2 tariffs
754+
{
755+
"sensor.daily_energy_peak": "sensor.energy",
756+
"sensor.daily_energy_offpeak": "sensor.energy",
757+
"sensor.daily_energy_cost_peak": "sensor.energy_price_cost",
758+
"sensor.daily_energy_cost_offpeak": "sensor.energy_price_cost",
759+
},
760+
# Fixed price 2 tariffs
761+
{
762+
"sensor.daily_energy_peak": "sensor.energy",
763+
"sensor.daily_energy_offpeak": "sensor.energy",
764+
"sensor.daily_energy_cost_peak": "sensor.energy_daily_energy_cost",
765+
"sensor.daily_energy_cost_offpeak": "sensor.energy_daily_energy_cost",
766+
},
767+
# Price entity & fixed price 2 tariffs
768+
{
769+
"sensor.daily_energy_peak": "sensor.energy",
770+
"sensor.daily_energy_offpeak": "sensor.energy",
771+
"sensor.daily_energy_cost_peak": "sensor.energy_price_cost",
772+
"sensor.daily_energy_cost_offpeak": "sensor.energy_price_cost",
773+
},
774+
]

tests/test_init.py

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,17 @@
11
"""Test energy_meter setup process."""
22

33
# Third party libraries
4+
from homeassistant.components.utility_meter.sensor import ATTR_SOURCE_ID
45
from homeassistant.setup import async_setup_component
56
import pytest
67

78
# Project imports
89
from custom_components.energy_meter.const import DOMAIN
9-
from tests.const import CHECK_CREATED_EXPECTED_RESULTS, TEST_CASES
10+
from tests.const import (
11+
CHECK_CREATED_EXPECTED_RESULTS,
12+
CHECK_UM_SOURCES_EXPECTED_RESULTS,
13+
TEST_CASES,
14+
)
1015

1116

1217
@pytest.mark.parametrize(
@@ -31,3 +36,26 @@ async def test_setup_and_check_created_sensors(hass, config, created_sensors):
3136
for sensor in created_sensors:
3237
assert sensor in entities
3338
assert len(entities) == len(created_sensors) + 3 # add 2 for sensor.energy & prices
39+
40+
41+
@pytest.mark.parametrize(
42+
("config", "um_sources"),
43+
zip(TEST_CASES, CHECK_UM_SOURCES_EXPECTED_RESULTS),
44+
indirect=("config",),
45+
)
46+
async def test_setup_and_utility_meter_sources(hass, config, um_sources):
47+
"""Test the setup and tests created sensors."""
48+
# define the current energy & price
49+
hass.states.async_set("sensor.energy", 100)
50+
hass.states.async_set("sensor.price", 2)
51+
hass.states.async_set("sensor.price2", 3)
52+
await hass.async_block_till_done()
53+
54+
# setup the integration
55+
assert await async_setup_component(hass, DOMAIN, config) is True
56+
await hass.async_block_till_done()
57+
58+
# asserts the created sensors
59+
for utility_meter, source in um_sources.items():
60+
assert (state := hass.states.get(utility_meter)) is not None
61+
assert state.attributes[ATTR_SOURCE_ID] == source

0 commit comments

Comments
 (0)