from xs1_api_client.api_constants import Node
from xs1_api_client.device import XS1Device
[docs]class XS1Sensor(XS1Device):
"""
Represents a XS1 Sensor
"""
def __init__(self, state, api):
super(XS1Sensor, self).__init__(state, api)
def __str__(self):
return "Sensor: " + super(XS1Sensor, self).__str__()
[docs] def update(self) -> None:
"""
Updates the state of this sensor
"""
response = self._api_interface.get_state_sensor(self.id())
new_value = self._get_node_value(response, Node.SENSOR)
self.set_state(new_value)
[docs] def set_name(self, name: str):
"""
Sets a new name for this device.
Keep in mind that there are some limitations for a device name.
:param name: the new name to set
:return: the new name of the sensor
"""
# check name arg for validity
super(XS1Sensor, self).set_name(name)
config = self._api_interface.get_config_sensor(self.id())
# name is already set, to minimize flash writes don't write it again
if config["name"] == name:
return name
config["name"] = name
result = self._api_interface.set_config_sensor(self.id(), config)
new_name = self._get_node_value(result, "name")
# save new_name to internal state
self._state[Node.PARAM_NAME.value] = new_name
return new_name
[docs] def set_value(self, value) -> None:
"""
Sets a value for this sensor
This should only be used for debugging purpose!
:param value: new value to set
"""
response = self._api_interface.set_sensor_value(self.id(), value)
new_value = self._get_node_value(response, Node.SENSOR)
self.set_state(new_value)