Source code for caspia.gateway.services.relaybased

from caspia.meadow.client import characteristic_read_handler, characteristic_write_handler
from caspia.node import components


[docs]class RelayBasedServiceMixin: """ Mixin to be used in services that encapsulate relay components. """ def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.relay_c = None
[docs] def configure(self): self.relay_c = self.network.get_configured_component(self.get_node(), components.relay.Relay, self.config['relay'])
@property def dependant_components(self): return {self.relay_c}
[docs] async def on_component_event(self, component, event): if self.relay_c == component: if isinstance(event, components.Relay.StateOnEvent): await self.notify(self.is_on, True) elif isinstance(event, components.Relay.StateOffEvent): await self.notify(self.is_on, False)
[docs] @characteristic_read_handler('is_on') async def is_on_read(self, **kwargs): if self.relay_c.state is None or self.relay_c.state.is_on is None: await self.relay_c.load_state() return self.relay_c.state.is_on
[docs] @characteristic_write_handler('is_on') async def is_on_write(self, value, **kwargs): if value: await self.relay_c.on() else: await self.relay_c.off()
[docs] @characteristic_write_handler('toggle') async def toggle_write(self, value, **kwargs): await self.relay_c.toggle()