Add new sensors to fyta (#135032)

This commit is contained in:
dontinelli 2025-01-07 22:01:21 +01:00 committed by GitHub
parent a01521b224
commit de9c05ad53
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 361 additions and 0 deletions

View File

@ -13,6 +13,9 @@
"moisture_status": {
"default": "mdi:water-percent-alert"
},
"nutrients_status": {
"default": "mdi:emoticon-poop"
},
"salinity_status": {
"default": "mdi:sprout-outline"
},
@ -21,6 +24,12 @@
},
"salinity": {
"default": "mdi:sprout-outline"
},
"last_fertilised": {
"default": "mdi:calendar-check"
},
"next_fertilisation": {
"default": "mdi:calendar-end"
}
}
}

View File

@ -82,6 +82,13 @@ SENSORS: Final[list[FytaSensorEntityDescription]] = [
options=PLANT_MEASUREMENT_STATUS_LIST,
value_fn=lambda plant: plant.moisture_status.name.lower(),
),
FytaSensorEntityDescription(
key="nutrients_status",
translation_key="nutrients_status",
device_class=SensorDeviceClass.ENUM,
options=PLANT_MEASUREMENT_STATUS_LIST,
value_fn=lambda plant: plant.nutrients_status.name.lower(),
),
FytaSensorEntityDescription(
key="salinity_status",
translation_key="salinity_status",
@ -124,6 +131,18 @@ SENSORS: Final[list[FytaSensorEntityDescription]] = [
state_class=SensorStateClass.MEASUREMENT,
value_fn=lambda plant: plant.ph,
),
FytaSensorEntityDescription(
key="fertilise_last",
translation_key="last_fertilised",
device_class=SensorDeviceClass.DATE,
value_fn=lambda plant: plant.fertilise_last,
),
FytaSensorEntityDescription(
key="fertilise_next",
translation_key="next_fertilisation",
device_class=SensorDeviceClass.DATE,
value_fn=lambda plant: plant.fertilise_next,
),
FytaSensorEntityDescription(
key="battery_level",
native_unit_of_measurement=PERCENTAGE,

View File

@ -84,6 +84,17 @@
"too_high": "[%key:component::fyta::entity::sensor::temperature_status::state::too_high%]"
}
},
"nutrients_status": {
"name": "Nutrients state",
"state": {
"no_data": "[%key:component::fyta::entity::sensor::temperature_status::state::no_data%]",
"too_low": "[%key:component::fyta::entity::sensor::temperature_status::state::too_low%]",
"low": "[%key:component::fyta::entity::sensor::temperature_status::state::low%]",
"perfect": "[%key:component::fyta::entity::sensor::temperature_status::state::perfect%]",
"high": "[%key:component::fyta::entity::sensor::temperature_status::state::high%]",
"too_high": "[%key:component::fyta::entity::sensor::temperature_status::state::too_high%]"
}
},
"salinity_status": {
"name": "Salinity state",
"state": {
@ -100,6 +111,12 @@
},
"salinity": {
"name": "Salinity"
},
"last_fertilised": {
"name": "Last fertilized"
},
"next_fertilisation": {
"name": "Next fertilization"
}
}
},

View File

@ -50,6 +50,53 @@
'state': '80.0',
})
# ---
# name: test_all_entities[sensor.gummibaum_last_fertilized-entry]
EntityRegistryEntrySnapshot({
'aliases': set({
}),
'area_id': None,
'capabilities': None,
'config_entry_id': <ANY>,
'device_class': None,
'device_id': <ANY>,
'disabled_by': None,
'domain': 'sensor',
'entity_category': None,
'entity_id': 'sensor.gummibaum_last_fertilized',
'has_entity_name': True,
'hidden_by': None,
'icon': None,
'id': <ANY>,
'labels': set({
}),
'name': None,
'options': dict({
}),
'original_device_class': <SensorDeviceClass.DATE: 'date'>,
'original_icon': None,
'original_name': 'Last fertilized',
'platform': 'fyta',
'previous_unique_id': None,
'supported_features': 0,
'translation_key': 'last_fertilised',
'unique_id': 'ce5f5431554d101905d31797e1232da8-0-fertilise_last',
'unit_of_measurement': None,
})
# ---
# name: test_all_entities[sensor.gummibaum_last_fertilized-state]
StateSnapshot({
'attributes': ReadOnlyDict({
'device_class': 'date',
'friendly_name': 'Gummibaum Last fertilized',
}),
'context': <ANY>,
'entity_id': 'sensor.gummibaum_last_fertilized',
'last_changed': <ANY>,
'last_reported': <ANY>,
'last_updated': <ANY>,
'state': 'unknown',
})
# ---
# name: test_all_entities[sensor.gummibaum_light-entry]
EntityRegistryEntrySnapshot({
'aliases': set({
@ -279,6 +326,117 @@
'state': 'perfect',
})
# ---
# name: test_all_entities[sensor.gummibaum_next_fertilization-entry]
EntityRegistryEntrySnapshot({
'aliases': set({
}),
'area_id': None,
'capabilities': None,
'config_entry_id': <ANY>,
'device_class': None,
'device_id': <ANY>,
'disabled_by': None,
'domain': 'sensor',
'entity_category': None,
'entity_id': 'sensor.gummibaum_next_fertilization',
'has_entity_name': True,
'hidden_by': None,
'icon': None,
'id': <ANY>,
'labels': set({
}),
'name': None,
'options': dict({
}),
'original_device_class': <SensorDeviceClass.DATE: 'date'>,
'original_icon': None,
'original_name': 'Next fertilization',
'platform': 'fyta',
'previous_unique_id': None,
'supported_features': 0,
'translation_key': 'next_fertilisation',
'unique_id': 'ce5f5431554d101905d31797e1232da8-0-fertilise_next',
'unit_of_measurement': None,
})
# ---
# name: test_all_entities[sensor.gummibaum_next_fertilization-state]
StateSnapshot({
'attributes': ReadOnlyDict({
'device_class': 'date',
'friendly_name': 'Gummibaum Next fertilization',
}),
'context': <ANY>,
'entity_id': 'sensor.gummibaum_next_fertilization',
'last_changed': <ANY>,
'last_reported': <ANY>,
'last_updated': <ANY>,
'state': 'unknown',
})
# ---
# name: test_all_entities[sensor.gummibaum_nutrients_state-entry]
EntityRegistryEntrySnapshot({
'aliases': set({
}),
'area_id': None,
'capabilities': dict({
'options': list([
'no_data',
'too_low',
'low',
'perfect',
'high',
'too_high',
]),
}),
'config_entry_id': <ANY>,
'device_class': None,
'device_id': <ANY>,
'disabled_by': None,
'domain': 'sensor',
'entity_category': None,
'entity_id': 'sensor.gummibaum_nutrients_state',
'has_entity_name': True,
'hidden_by': None,
'icon': None,
'id': <ANY>,
'labels': set({
}),
'name': None,
'options': dict({
}),
'original_device_class': <SensorDeviceClass.ENUM: 'enum'>,
'original_icon': None,
'original_name': 'Nutrients state',
'platform': 'fyta',
'previous_unique_id': None,
'supported_features': 0,
'translation_key': 'nutrients_status',
'unique_id': 'ce5f5431554d101905d31797e1232da8-0-nutrients_status',
'unit_of_measurement': None,
})
# ---
# name: test_all_entities[sensor.gummibaum_nutrients_state-state]
StateSnapshot({
'attributes': ReadOnlyDict({
'device_class': 'enum',
'friendly_name': 'Gummibaum Nutrients state',
'options': list([
'no_data',
'too_low',
'low',
'perfect',
'high',
'too_high',
]),
}),
'context': <ANY>,
'entity_id': 'sensor.gummibaum_nutrients_state',
'last_changed': <ANY>,
'last_reported': <ANY>,
'last_updated': <ANY>,
'state': 'perfect',
})
# ---
# name: test_all_entities[sensor.gummibaum_ph-entry]
EntityRegistryEntrySnapshot({
'aliases': set({
@ -716,6 +874,53 @@
'state': '80.0',
})
# ---
# name: test_all_entities[sensor.kakaobaum_last_fertilized-entry]
EntityRegistryEntrySnapshot({
'aliases': set({
}),
'area_id': None,
'capabilities': None,
'config_entry_id': <ANY>,
'device_class': None,
'device_id': <ANY>,
'disabled_by': None,
'domain': 'sensor',
'entity_category': None,
'entity_id': 'sensor.kakaobaum_last_fertilized',
'has_entity_name': True,
'hidden_by': None,
'icon': None,
'id': <ANY>,
'labels': set({
}),
'name': None,
'options': dict({
}),
'original_device_class': <SensorDeviceClass.DATE: 'date'>,
'original_icon': None,
'original_name': 'Last fertilized',
'platform': 'fyta',
'previous_unique_id': None,
'supported_features': 0,
'translation_key': 'last_fertilised',
'unique_id': 'ce5f5431554d101905d31797e1232da8-1-fertilise_last',
'unit_of_measurement': None,
})
# ---
# name: test_all_entities[sensor.kakaobaum_last_fertilized-state]
StateSnapshot({
'attributes': ReadOnlyDict({
'device_class': 'date',
'friendly_name': 'Kakaobaum Last fertilized',
}),
'context': <ANY>,
'entity_id': 'sensor.kakaobaum_last_fertilized',
'last_changed': <ANY>,
'last_reported': <ANY>,
'last_updated': <ANY>,
'state': 'unknown',
})
# ---
# name: test_all_entities[sensor.kakaobaum_light-entry]
EntityRegistryEntrySnapshot({
'aliases': set({
@ -945,6 +1150,117 @@
'state': 'perfect',
})
# ---
# name: test_all_entities[sensor.kakaobaum_next_fertilization-entry]
EntityRegistryEntrySnapshot({
'aliases': set({
}),
'area_id': None,
'capabilities': None,
'config_entry_id': <ANY>,
'device_class': None,
'device_id': <ANY>,
'disabled_by': None,
'domain': 'sensor',
'entity_category': None,
'entity_id': 'sensor.kakaobaum_next_fertilization',
'has_entity_name': True,
'hidden_by': None,
'icon': None,
'id': <ANY>,
'labels': set({
}),
'name': None,
'options': dict({
}),
'original_device_class': <SensorDeviceClass.DATE: 'date'>,
'original_icon': None,
'original_name': 'Next fertilization',
'platform': 'fyta',
'previous_unique_id': None,
'supported_features': 0,
'translation_key': 'next_fertilisation',
'unique_id': 'ce5f5431554d101905d31797e1232da8-1-fertilise_next',
'unit_of_measurement': None,
})
# ---
# name: test_all_entities[sensor.kakaobaum_next_fertilization-state]
StateSnapshot({
'attributes': ReadOnlyDict({
'device_class': 'date',
'friendly_name': 'Kakaobaum Next fertilization',
}),
'context': <ANY>,
'entity_id': 'sensor.kakaobaum_next_fertilization',
'last_changed': <ANY>,
'last_reported': <ANY>,
'last_updated': <ANY>,
'state': 'unknown',
})
# ---
# name: test_all_entities[sensor.kakaobaum_nutrients_state-entry]
EntityRegistryEntrySnapshot({
'aliases': set({
}),
'area_id': None,
'capabilities': dict({
'options': list([
'no_data',
'too_low',
'low',
'perfect',
'high',
'too_high',
]),
}),
'config_entry_id': <ANY>,
'device_class': None,
'device_id': <ANY>,
'disabled_by': None,
'domain': 'sensor',
'entity_category': None,
'entity_id': 'sensor.kakaobaum_nutrients_state',
'has_entity_name': True,
'hidden_by': None,
'icon': None,
'id': <ANY>,
'labels': set({
}),
'name': None,
'options': dict({
}),
'original_device_class': <SensorDeviceClass.ENUM: 'enum'>,
'original_icon': None,
'original_name': 'Nutrients state',
'platform': 'fyta',
'previous_unique_id': None,
'supported_features': 0,
'translation_key': 'nutrients_status',
'unique_id': 'ce5f5431554d101905d31797e1232da8-1-nutrients_status',
'unit_of_measurement': None,
})
# ---
# name: test_all_entities[sensor.kakaobaum_nutrients_state-state]
StateSnapshot({
'attributes': ReadOnlyDict({
'device_class': 'enum',
'friendly_name': 'Kakaobaum Nutrients state',
'options': list([
'no_data',
'too_low',
'low',
'perfect',
'high',
'too_high',
]),
}),
'context': <ANY>,
'entity_id': 'sensor.kakaobaum_nutrients_state',
'last_changed': <ANY>,
'last_reported': <ANY>,
'last_updated': <ANY>,
'state': 'perfect',
})
# ---
# name: test_all_entities[sensor.kakaobaum_ph-entry]
EntityRegistryEntrySnapshot({
'aliases': set({