Source code for enhomie.homie.plugins.occur

"""
Functions and routines associated with Enasis Network Homie Automate.

This file is part of Enasis Network software eco-system. Distribution
is permitted, for more information consult the project license file.
"""



from typing import Literal
from typing import TYPE_CHECKING
from typing import Type

from .plugin import HomiePlugin
from ..models import HomieModels
from ...utils import InvalidParam
from ...utils import UnexpectedCondition

if TYPE_CHECKING:
    from .driver import HomieDriver
    from ..params import HomieOccurParams
    from ..threads import HomieStreamItem



[docs] class HomieOccur(HomiePlugin): """ Match specific conditions for determining desired state. """
[docs] def validate( self, ) -> None: """ Perform advanced validation on the parameters provided. """ params = self.params _bltn_regexp = params.builtins_regexp _phue_button = params.philips_button _phue_contact = params.philips_contact _phue_motion = params.philips_motion _phue_scene = params.philips_scene super().validate() enabled = [ 1 if _bltn_regexp else 0, 1 if _phue_button else 0, 1 if _phue_contact else 0, 1 if _phue_motion else 0, 1 if _phue_scene else 0] if sum(enabled) != 1: raise InvalidParam( error='minimal')
@property def kind( self, ) -> Literal['occur']: """ Return the value for the attribute from class instance. :returns: Value for the attribute from class instance. """ return 'occur' @property def params( self, ) -> 'HomieOccurParams': """ Return the Pydantic model containing the configuration. :returns: Pydantic model containing the configuration. """ model = ( HomieModels .occur()) params = super().params assert isinstance( params, model) return params
[docs] def get_drivers( self, ) -> dict[str, Type['HomieDriver']]: """ Return the Homie class definition for its instantiation. :returns: Homie class definition for its instantiation. """ from ...builtins import ( DriverBltnRegexp) from ...philips import ( DriverPhueButton) from ...philips import ( DriverPhueContact) from ...philips import ( DriverPhueMotion) from ...philips import ( DriverPhueScene) return { 'builtins_regexp': ( DriverBltnRegexp), 'philips_button': ( DriverPhueButton), 'philips_contact': ( DriverPhueContact), 'philips_motion': ( DriverPhueMotion), 'philips_scene': ( DriverPhueScene)}
[docs] def when( self, sitem: 'HomieStreamItem', ) -> bool: """ Return the boolean indicating the conditional outcomes. .. note:: Somewhat similar to same method within HomieWhere. :param sitem: Item containing information for operation. :returns: Boolean indicating the conditional outcomes. """ drivers = self.drivers occurs: list[bool] = [] for driver in drivers: occur = driver.occur(sitem) occurs.append(occur) if len(occurs) >= 1: return any(occurs) raise UnexpectedCondition