Use entity class attributes for arest (#52678)

This commit is contained in:
Robert Hillis 2021-07-21 08:32:42 -04:00 committed by GitHub
parent 668437741a
commit 0803b2aecd
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 36 additions and 89 deletions

View File

@ -73,34 +73,18 @@ class ArestBinarySensor(BinarySensorEntity):
def __init__(self, arest, resource, name, device_class, pin): def __init__(self, arest, resource, name, device_class, pin):
"""Initialize the aREST device.""" """Initialize the aREST device."""
self.arest = arest self.arest = arest
self._resource = resource self._attr_name = name
self._name = name self._attr_device_class = device_class
self._device_class = device_class
self._pin = pin
if self._pin is not None: if pin is not None:
request = requests.get(f"{self._resource}/mode/{self._pin}/i", timeout=10) request = requests.get(f"{resource}/mode/{pin}/i", timeout=10)
if request.status_code != HTTP_OK: if request.status_code != HTTP_OK:
_LOGGER.error("Can't set mode of %s", self._resource) _LOGGER.error("Can't set mode of %s", resource)
@property
def name(self):
"""Return the name of the binary sensor."""
return self._name
@property
def is_on(self):
"""Return true if the binary sensor is on."""
return bool(self.arest.data.get("state"))
@property
def device_class(self):
"""Return the class of this sensor."""
return self._device_class
def update(self): def update(self):
"""Get the latest data from aREST API.""" """Get the latest data from aREST API."""
self.arest.update() self.arest.update()
self._attr_is_on = bool(self.arest.data.get("state"))
class ArestData: class ArestData:

View File

@ -139,48 +139,27 @@ class ArestSensor(SensorEntity):
): ):
"""Initialize the sensor.""" """Initialize the sensor."""
self.arest = arest self.arest = arest
self._resource = resource self._attr_name = f"{location.title()} {name.title()}"
self._name = f"{location.title()} {name.title()}"
self._variable = variable self._variable = variable
self._pin = pin self._attr_unit_of_measurement = unit_of_measurement
self._state = None
self._unit_of_measurement = unit_of_measurement
self._renderer = renderer self._renderer = renderer
if self._pin is not None: if pin is not None:
request = requests.get(f"{self._resource}/mode/{self._pin}/i", timeout=10) request = requests.get(f"{resource}/mode/{pin}/i", timeout=10)
if request.status_code != HTTP_OK: if request.status_code != HTTP_OK:
_LOGGER.error("Can't set mode of %s", self._resource) _LOGGER.error("Can't set mode of %s", resource)
@property
def name(self):
"""Return the name of the sensor."""
return self._name
@property
def unit_of_measurement(self):
"""Return the unit the value is expressed in."""
return self._unit_of_measurement
@property
def state(self):
"""Return the state of the sensor."""
values = self.arest.data
if "error" in values:
return values["error"]
value = self._renderer(values.get("value", values.get(self._variable, None)))
return value
def update(self): def update(self):
"""Get the latest data from aREST API.""" """Get the latest data from aREST API."""
self.arest.update() self.arest.update()
self._attr_available = self.arest.available
@property values = self.arest.data
def available(self): if "error" in values:
"""Could the device be accessed during the last update call.""" self._attr_state = values["error"]
return self.arest.available else:
self._attr_state = self._renderer(
values.get("value", values.get(self._variable, None))
)
class ArestData: class ArestData:
@ -191,7 +170,7 @@ class ArestData:
self._resource = resource self._resource = resource
self._pin = pin self._pin = pin
self.data = {} self.data = {}
self.available = True self._attr_available = True
@Throttle(MIN_TIME_BETWEEN_UPDATES) @Throttle(MIN_TIME_BETWEEN_UPDATES)
def update(self): def update(self):
@ -212,7 +191,7 @@ class ArestData:
f"{self._resource}/digital/{self._pin}", timeout=10 f"{self._resource}/digital/{self._pin}", timeout=10
) )
self.data = {"value": response.json()["return_value"]} self.data = {"value": response.json()["return_value"]}
self.available = True self._attr_available = True
except requests.exceptions.ConnectionError: except requests.exceptions.ConnectionError:
_LOGGER.error("No route to device %s", self._resource) _LOGGER.error("No route to device %s", self._resource)
self.available = False self._attr_available = False

View File

@ -86,24 +86,8 @@ class ArestSwitchBase(SwitchEntity):
def __init__(self, resource, location, name): def __init__(self, resource, location, name):
"""Initialize the switch.""" """Initialize the switch."""
self._resource = resource self._resource = resource
self._name = f"{location.title()} {name.title()}" self._attr_name = f"{location.title()} {name.title()}"
self._state = None self._attr_available = True
self._available = True
@property
def name(self):
"""Return the name of the switch."""
return self._name
@property
def is_on(self):
"""Return true if device is on."""
return self._state
@property
def available(self):
"""Could the device be accessed during the last update call."""
return self._available
class ArestSwitchFunction(ArestSwitchBase): class ArestSwitchFunction(ArestSwitchBase):
@ -134,7 +118,7 @@ class ArestSwitchFunction(ArestSwitchBase):
) )
if request.status_code == HTTP_OK: if request.status_code == HTTP_OK:
self._state = True self._attr_is_on = True
else: else:
_LOGGER.error("Can't turn on function %s at %s", self._func, self._resource) _LOGGER.error("Can't turn on function %s at %s", self._func, self._resource)
@ -145,7 +129,7 @@ class ArestSwitchFunction(ArestSwitchBase):
) )
if request.status_code == HTTP_OK: if request.status_code == HTTP_OK:
self._state = False self._attr_is_on = False
else: else:
_LOGGER.error( _LOGGER.error(
"Can't turn off function %s at %s", self._func, self._resource "Can't turn off function %s at %s", self._func, self._resource
@ -155,11 +139,11 @@ class ArestSwitchFunction(ArestSwitchBase):
"""Get the latest data from aREST API and update the state.""" """Get the latest data from aREST API and update the state."""
try: try:
request = requests.get(f"{self._resource}/{self._func}", timeout=10) request = requests.get(f"{self._resource}/{self._func}", timeout=10)
self._state = request.json()["return_value"] != 0 self._attr_is_on = request.json()["return_value"] != 0
self._available = True self._attr_available = True
except requests.exceptions.ConnectionError: except requests.exceptions.ConnectionError:
_LOGGER.warning("No route to device %s", self._resource) _LOGGER.warning("No route to device %s", self._resource)
self._available = False self._attr_available = False
class ArestSwitchPin(ArestSwitchBase): class ArestSwitchPin(ArestSwitchBase):
@ -171,10 +155,10 @@ class ArestSwitchPin(ArestSwitchBase):
self._pin = pin self._pin = pin
self.invert = invert self.invert = invert
request = requests.get(f"{self._resource}/mode/{self._pin}/o", timeout=10) request = requests.get(f"{resource}/mode/{pin}/o", timeout=10)
if request.status_code != HTTP_OK: if request.status_code != HTTP_OK:
_LOGGER.error("Can't set mode") _LOGGER.error("Can't set mode")
self._available = False self._attr_available = False
def turn_on(self, **kwargs): def turn_on(self, **kwargs):
"""Turn the device on.""" """Turn the device on."""
@ -183,7 +167,7 @@ class ArestSwitchPin(ArestSwitchBase):
f"{self._resource}/digital/{self._pin}/{turn_on_payload}", timeout=10 f"{self._resource}/digital/{self._pin}/{turn_on_payload}", timeout=10
) )
if request.status_code == HTTP_OK: if request.status_code == HTTP_OK:
self._state = True self._attr_is_on = True
else: else:
_LOGGER.error("Can't turn on pin %s at %s", self._pin, self._resource) _LOGGER.error("Can't turn on pin %s at %s", self._pin, self._resource)
@ -194,7 +178,7 @@ class ArestSwitchPin(ArestSwitchBase):
f"{self._resource}/digital/{self._pin}/{turn_off_payload}", timeout=10 f"{self._resource}/digital/{self._pin}/{turn_off_payload}", timeout=10
) )
if request.status_code == HTTP_OK: if request.status_code == HTTP_OK:
self._state = False self._attr_is_on = False
else: else:
_LOGGER.error("Can't turn off pin %s at %s", self._pin, self._resource) _LOGGER.error("Can't turn off pin %s at %s", self._pin, self._resource)
@ -203,8 +187,8 @@ class ArestSwitchPin(ArestSwitchBase):
try: try:
request = requests.get(f"{self._resource}/digital/{self._pin}", timeout=10) request = requests.get(f"{self._resource}/digital/{self._pin}", timeout=10)
status_value = int(self.invert) status_value = int(self.invert)
self._state = request.json()["return_value"] != status_value self._attr_is_on = request.json()["return_value"] != status_value
self._available = True self._attr_available = True
except requests.exceptions.ConnectionError: except requests.exceptions.ConnectionError:
_LOGGER.warning("No route to device %s", self._resource) _LOGGER.warning("No route to device %s", self._resource)
self._available = False self._attr_available = False