diff --git a/README.md b/README.md index 7a0c2471..e3eba390 100644 --- a/README.md +++ b/README.md @@ -236,7 +236,7 @@ async def main() -> None: sensor.low_battery # >>> False - # Return whether the sensor has been triggered: + # Return whether the sensor has been triggered (open/closed, etc.): sensor.triggered # >>> False diff --git a/simplipy/sensor.py b/simplipy/sensor.py index 75e48d28..4a62d179 100644 --- a/simplipy/sensor.py +++ b/simplipy/sensor.py @@ -3,6 +3,8 @@ from enum import Enum from typing import Union +from .errors import SimplipyError + _LOGGER = logging.getLogger(__name__) @@ -78,7 +80,12 @@ def settings(self) -> bool: @property def triggered(self) -> bool: """Return the current sensor state.""" - return self.sensor_data.get('sensorStatus', 0) != 0 + if self.type == SensorTypes.entry: + return self.sensor_data.get('entryStatus', 'closed') == 'open' + + raise SimplipyError( + 'Cannot determine triggered state for sensor: {0}'.format( + self.name)) class SensorV3(Sensor): diff --git a/tests/test_sensor.py b/tests/test_sensor.py index 67f48833..aad63fd6 100644 --- a/tests/test_sensor.py +++ b/tests/test_sensor.py @@ -5,6 +5,7 @@ import pytest from simplipy import API +from simplipy.errors import SimplipyError from simplipy.sensor import SensorTypes from .const import TEST_EMAIL, TEST_PASSWORD @@ -37,12 +38,23 @@ async def test_properties_v2(event_loop, v2_server): TEST_EMAIL, TEST_PASSWORD, websession) [system] = await api.get_systems() - sensor = system.sensors['195'] - assert sensor.data == 0 - assert not sensor.error - assert not sensor.low_battery - assert sensor.settings == 1 - assert not sensor.triggered + keypad = system.sensors['195'] + assert keypad.data == 0 + assert not keypad.error + assert not keypad.low_battery + assert keypad.settings == 1 + + # Ensure that attempting to access the triggered of anything but + # an entry sensor in a V2 system throws an error: + with pytest.raises(SimplipyError): + assert keypad.triggered == 42 + + entry_sensor = system.sensors['609'] + assert entry_sensor.data == 210 + assert not entry_sensor.error + assert not entry_sensor.low_battery + assert entry_sensor.settings == 1 + assert not entry_sensor.triggered @pytest.mark.asyncio