# pylint: disable=no-member
import attr
from .common import Driver
from ..factory import target_factory
from ..resource.remote import NetworkDeditecRelais8
from ..step import step
from ..protocol import DigitalOutputProtocol
from ..util.agentwrapper import AgentWrapper
[docs]@target_factory.reg_driver
@attr.s(eq=False)
class DeditecRelaisDriver(Driver, DigitalOutputProtocol):
bindings = {
"relais": {"DeditecRelais8", NetworkDeditecRelais8},
}
[docs] def __attrs_post_init__(self):
super().__attrs_post_init__()
self.wrapper = None
[docs] def on_activate(self):
if isinstance(self.relais, NetworkDeditecRelais8):
host = self.relais.host
else:
host = None
self.wrapper = AgentWrapper(host)
self.proxy = self.wrapper.load('deditec_relais8')
[docs] def on_deactivate(self):
self.wrapper.close()
self.wrapper = None
self.proxy = None
[docs] @Driver.check_active
@step(args=['status'])
def set(self, status):
if self.relais.invert:
status = not status
self.proxy.set(self.relais.busnum, self.relais.devnum, self.relais.index, status)
[docs] @Driver.check_active
@step(result=True)
def get(self):
status = self.proxy.get(self.relais.busnum, self.relais.devnum, self.relais.index)
if self.relais.invert:
status = not status
return status