Updated apps
This commit is contained in:
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
Binary file not shown.
Binary file not shown.
BIN
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -53,23 +53,30 @@ class SubProfileSelector:
|
||||
def _create_matcher(self, matcher_config: dict) -> SubProfileMatcher:
|
||||
"""Create a matcher from json config. Can be extended for more matchers in the future."""
|
||||
matcher_type: SubProfileMatcherType = matcher_config["type"]
|
||||
|
||||
matcher_classes: dict[SubProfileMatcherType, type[SubProfileMatcher]] = {
|
||||
SubProfileMatcherType.ATTRIBUTE: AttributeMatcher,
|
||||
SubProfileMatcherType.ENTITY_STATE: EntityStateMatcher,
|
||||
SubProfileMatcherType.ENTITY_ID: EntityIdMatcher,
|
||||
SubProfileMatcherType.ENTITY_REGISTRY: EntityRegistryMatcher,
|
||||
SubProfileMatcherType.INTEGRATION: IntegrationMatcher,
|
||||
SubProfileMatcherType.MODEL_ID: ModelIdMatcher,
|
||||
}
|
||||
if matcher_type not in matcher_classes:
|
||||
raise PowercalcSetupError(f"Unknown sub profile matcher type: {matcher_type}")
|
||||
|
||||
return matcher_classes[matcher_type].from_config(
|
||||
matcher_config,
|
||||
hass=self._hass,
|
||||
source_entity=self._source_entity,
|
||||
)
|
||||
match matcher_type:
|
||||
case SubProfileMatcherType.ATTRIBUTE:
|
||||
return AttributeMatcher(matcher_config["attribute"], matcher_config["map"])
|
||||
case SubProfileMatcherType.ENTITY_STATE:
|
||||
return EntityStateMatcher(
|
||||
self._hass,
|
||||
self._source_entity,
|
||||
matcher_config["entity_id"],
|
||||
matcher_config["map"],
|
||||
)
|
||||
case SubProfileMatcherType.ENTITY_ID:
|
||||
return EntityIdMatcher(matcher_config["pattern"], matcher_config["profile"])
|
||||
case SubProfileMatcherType.ENTITY_REGISTRY:
|
||||
return EntityRegistryMatcher(
|
||||
matcher_config["property"],
|
||||
matcher_config["value"],
|
||||
matcher_config["profile"],
|
||||
)
|
||||
case SubProfileMatcherType.INTEGRATION:
|
||||
return IntegrationMatcher(matcher_config["integration"], matcher_config["profile"])
|
||||
case SubProfileMatcherType.MODEL_ID:
|
||||
return ModelIdMatcher(matcher_config["model_id"], matcher_config["profile"])
|
||||
case _:
|
||||
raise PowercalcSetupError(f"Unknown sub profile matcher type: {matcher_type}")
|
||||
|
||||
|
||||
class SubProfileSelectConfig(NamedTuple):
|
||||
@@ -78,21 +85,12 @@ class SubProfileSelectConfig(NamedTuple):
|
||||
|
||||
|
||||
class SubProfileMatcher(Protocol):
|
||||
@classmethod
|
||||
def from_config(
|
||||
cls,
|
||||
config: dict,
|
||||
*,
|
||||
hass: HomeAssistant | None = None,
|
||||
source_entity: SourceEntity | None = None,
|
||||
) -> SubProfileMatcher:
|
||||
"""Create a matcher from a config dict."""
|
||||
|
||||
def match(self, entity_state: State, source_entity: SourceEntity) -> str | None:
|
||||
"""Returns a sub profile."""
|
||||
|
||||
def get_tracking_entities(self) -> list[str]:
|
||||
"""Get extra entities to track for state changes."""
|
||||
return []
|
||||
|
||||
|
||||
class EntityStateMatcher(SubProfileMatcher):
|
||||
@@ -119,17 +117,6 @@ class EntityStateMatcher(SubProfileMatcher):
|
||||
|
||||
return self._mapping.get(state.state)
|
||||
|
||||
@classmethod
|
||||
def from_config(
|
||||
cls,
|
||||
config: dict,
|
||||
*,
|
||||
hass: HomeAssistant | None = None,
|
||||
source_entity: SourceEntity | None = None,
|
||||
) -> EntityStateMatcher:
|
||||
assert hass is not None
|
||||
return cls(hass, source_entity, config["entity_id"], config["map"])
|
||||
|
||||
def get_tracking_entities(self) -> list[str]:
|
||||
return [self._entity_id]
|
||||
|
||||
@@ -146,19 +133,6 @@ class AttributeMatcher(SubProfileMatcher):
|
||||
|
||||
return self._mapping.get(val)
|
||||
|
||||
@classmethod
|
||||
def from_config(
|
||||
cls,
|
||||
config: dict,
|
||||
*,
|
||||
hass: HomeAssistant | None = None,
|
||||
source_entity: SourceEntity | None = None,
|
||||
) -> AttributeMatcher:
|
||||
return cls(config["attribute"], config["map"])
|
||||
|
||||
def get_tracking_entities(self) -> list[str]:
|
||||
return []
|
||||
|
||||
|
||||
class EntityIdMatcher(SubProfileMatcher):
|
||||
def __init__(self, pattern: str, profile: str) -> None:
|
||||
@@ -171,19 +145,6 @@ class EntityIdMatcher(SubProfileMatcher):
|
||||
|
||||
return None
|
||||
|
||||
@classmethod
|
||||
def from_config(
|
||||
cls,
|
||||
config: dict,
|
||||
*,
|
||||
hass: HomeAssistant | None = None,
|
||||
source_entity: SourceEntity | None = None,
|
||||
) -> EntityIdMatcher:
|
||||
return cls(config["pattern"], config["profile"])
|
||||
|
||||
def get_tracking_entities(self) -> list[str]:
|
||||
return []
|
||||
|
||||
|
||||
class IntegrationMatcher(SubProfileMatcher):
|
||||
def __init__(self, integration: str, profile: str) -> None:
|
||||
@@ -200,19 +161,6 @@ class IntegrationMatcher(SubProfileMatcher):
|
||||
|
||||
return None
|
||||
|
||||
@classmethod
|
||||
def from_config(
|
||||
cls,
|
||||
config: dict,
|
||||
*,
|
||||
hass: HomeAssistant | None = None,
|
||||
source_entity: SourceEntity | None = None,
|
||||
) -> IntegrationMatcher:
|
||||
return cls(config["integration"], config["profile"])
|
||||
|
||||
def get_tracking_entities(self) -> list[str]:
|
||||
return []
|
||||
|
||||
|
||||
class EntityRegistryMatcher(SubProfileMatcher):
|
||||
def __init__(self, property_name: str, value: object, profile: str) -> None:
|
||||
@@ -234,19 +182,6 @@ class EntityRegistryMatcher(SubProfileMatcher):
|
||||
|
||||
return None
|
||||
|
||||
@classmethod
|
||||
def from_config(
|
||||
cls,
|
||||
config: dict,
|
||||
*,
|
||||
hass: HomeAssistant | None = None,
|
||||
source_entity: SourceEntity | None = None,
|
||||
) -> EntityRegistryMatcher:
|
||||
return cls(config["property"], config["value"], config["profile"])
|
||||
|
||||
def get_tracking_entities(self) -> list[str]:
|
||||
return []
|
||||
|
||||
def _matches_registry_value(self, registry_value: object) -> bool:
|
||||
if registry_value == self._value:
|
||||
return True
|
||||
@@ -271,16 +206,3 @@ class ModelIdMatcher(SubProfileMatcher):
|
||||
return self._profile
|
||||
|
||||
return None
|
||||
|
||||
@classmethod
|
||||
def from_config(
|
||||
cls,
|
||||
config: dict,
|
||||
*,
|
||||
hass: HomeAssistant | None = None,
|
||||
source_entity: SourceEntity | None = None,
|
||||
) -> ModelIdMatcher:
|
||||
return cls(config["model_id"], config["profile"])
|
||||
|
||||
def get_tracking_entities(self) -> list[str]:
|
||||
return []
|
||||
|
||||
Reference in New Issue
Block a user