diff --git a/homeassistant/components/monzo/sensor.py b/homeassistant/components/monzo/sensor.py index c77ff34bf325f5..2c8cb4547016d1 100644 --- a/homeassistant/components/monzo/sensor.py +++ b/homeassistant/components/monzo/sensor.py @@ -39,6 +39,13 @@ class MonzoSensorEntityDescription(SensorEntityDescription): device_class=SensorDeviceClass.MONETARY, suggested_display_precision=2, ), + MonzoSensorEntityDescription( + key="spend_today", + translation_key="spend_today", + value_fn=lambda data: abs(data["balance"]["spend_today"]) / 100, + device_class=SensorDeviceClass.MONETARY, + suggested_display_precision=2, + ), ) POT_SENSORS = ( diff --git a/homeassistant/components/monzo/strings.json b/homeassistant/components/monzo/strings.json index 9aecc53fa2dae5..99616320ce0068 100644 --- a/homeassistant/components/monzo/strings.json +++ b/homeassistant/components/monzo/strings.json @@ -57,6 +57,9 @@ "pot_balance": { "name": "[%key:component::monzo::entity::sensor::balance::name%]" }, + "spend_today": { + "name": "Spent today" + }, "total_balance": { "name": "Total balance" } diff --git a/tests/components/monzo/conftest.py b/tests/components/monzo/conftest.py index 1d23206f58c46e..db12e5d392d524 100644 --- a/tests/components/monzo/conftest.py +++ b/tests/components/monzo/conftest.py @@ -27,13 +27,23 @@ "id": "acc_curr", "name": "Current Account", "type": "uk_retail", - "balance": {"balance": 123, "total_balance": 321, "currency": "GBP"}, + "balance": { + "balance": 123, + "total_balance": 321, + "spend_today": -45, + "currency": "GBP", + }, }, { "id": "acc_flex", "name": "Flex", "type": "uk_monzo_flex", - "balance": {"balance": 123, "total_balance": 321, "currency": "EUR"}, + "balance": { + "balance": 123, + "total_balance": 321, + "spend_today": -67, + "currency": "EUR", + }, }, ] TEST_POTS = [ diff --git a/tests/components/monzo/snapshots/test_sensor.ambr b/tests/components/monzo/snapshots/test_sensor.ambr index c7e686ec158640..25aab02720f10b 100644 --- a/tests/components/monzo/snapshots/test_sensor.ambr +++ b/tests/components/monzo/snapshots/test_sensor.ambr @@ -55,6 +55,62 @@ 'state': '1.23', }) # --- +# name: test_all_entities[sensor.current_account_spent_today-entry] + EntityRegistryEntrySnapshot({ + 'aliases': list([ + None, + ]), + 'area_id': None, + 'capabilities': None, + 'config_entry_id': , + 'config_subentry_id': , + 'device_class': None, + 'device_id': , + 'disabled_by': None, + 'domain': 'sensor', + 'entity_category': None, + 'entity_id': 'sensor.current_account_spent_today', + 'has_entity_name': True, + 'hidden_by': None, + 'icon': None, + 'id': , + 'labels': set({ + }), + 'name': None, + 'object_id_base': 'Spent today', + 'options': dict({ + 'sensor': dict({ + 'suggested_display_precision': 2, + }), + }), + 'original_device_class': , + 'original_icon': None, + 'original_name': 'Spent today', + 'platform': 'monzo', + 'previous_unique_id': None, + 'suggested_object_id': None, + 'supported_features': 0, + 'translation_key': 'spend_today', + 'unique_id': 'acc_curr_spend_today', + 'unit_of_measurement': 'GBP', + }) +# --- +# name: test_all_entities[sensor.current_account_spent_today-state] + StateSnapshot({ + 'attributes': ReadOnlyDict({ + : 'Data provided by Monzo', + : 'monetary', + : 'Current Account Spent today', + : 'GBP', + }), + 'context': , + 'entity_id': 'sensor.current_account_spent_today', + 'last_changed': , + 'last_reported': , + 'last_updated': , + 'state': '0.45', + }) +# --- # name: test_all_entities[sensor.current_account_total_balance-entry] EntityRegistryEntrySnapshot({ 'aliases': list([ @@ -167,6 +223,62 @@ 'state': '1.23', }) # --- +# name: test_all_entities[sensor.flex_spent_today-entry] + EntityRegistryEntrySnapshot({ + 'aliases': list([ + None, + ]), + 'area_id': None, + 'capabilities': None, + 'config_entry_id': , + 'config_subentry_id': , + 'device_class': None, + 'device_id': , + 'disabled_by': None, + 'domain': 'sensor', + 'entity_category': None, + 'entity_id': 'sensor.flex_spent_today', + 'has_entity_name': True, + 'hidden_by': None, + 'icon': None, + 'id': , + 'labels': set({ + }), + 'name': None, + 'object_id_base': 'Spent today', + 'options': dict({ + 'sensor': dict({ + 'suggested_display_precision': 2, + }), + }), + 'original_device_class': , + 'original_icon': None, + 'original_name': 'Spent today', + 'platform': 'monzo', + 'previous_unique_id': None, + 'suggested_object_id': None, + 'supported_features': 0, + 'translation_key': 'spend_today', + 'unique_id': 'acc_flex_spend_today', + 'unit_of_measurement': 'EUR', + }) +# --- +# name: test_all_entities[sensor.flex_spent_today-state] + StateSnapshot({ + 'attributes': ReadOnlyDict({ + : 'Data provided by Monzo', + : 'monetary', + : 'Flex Spent today', + : 'EUR', + }), + 'context': , + 'entity_id': 'sensor.flex_spent_today', + 'last_changed': , + 'last_reported': , + 'last_updated': , + 'state': '0.67', + }) +# --- # name: test_all_entities[sensor.flex_total_balance-entry] EntityRegistryEntrySnapshot({ 'aliases': list([ diff --git a/tests/components/monzo/test_sensor.py b/tests/components/monzo/test_sensor.py index 2699685bba7d4c..d1204f011d5773 100644 --- a/tests/components/monzo/test_sensor.py +++ b/tests/components/monzo/test_sensor.py @@ -29,6 +29,7 @@ EXPECTED_VALUE_GETTERS = { "balance": lambda x: x["balance"]["balance"] / 100, "total_balance": lambda x: x["balance"]["total_balance"] / 100, + "spend_today": lambda x: abs(x["balance"]["spend_today"]) / 100, "pot_balance": lambda x: x["balance"] / 100, }