| @@ -87,6 +87,14 @@ class AlarmDecoder(object): | |||||
| mode = ADEMCO | mode = ADEMCO | ||||
| """The panel mode that the AlarmDecoder is in. Currently supports ADEMCO and DSC.""" | """The panel mode that the AlarmDecoder is in. Currently supports ADEMCO and DSC.""" | ||||
| #Version Information | |||||
| serial_number = 0xFFFFFFFF | |||||
| """The device serial number""" | |||||
| version_number = 'Unknown' | |||||
| """The device firmware version""" | |||||
| version_flags = "" | |||||
| """Device flags enabled""" | |||||
| def __init__(self, device): | def __init__(self, device): | ||||
| """ | """ | ||||
| Constructor | Constructor | ||||
| @@ -119,6 +127,10 @@ class AlarmDecoder(object): | |||||
| self.deduplicate = False | self.deduplicate = False | ||||
| self.mode = ADEMCO | self.mode = ADEMCO | ||||
| self.serial_number = 0xFFFFFFFF | |||||
| self.version_number = 'Unknown' | |||||
| self.version_flags = "" | |||||
| def __enter__(self): | def __enter__(self): | ||||
| """ | """ | ||||
| Support for context manager __enter__. | Support for context manager __enter__. | ||||
| @@ -266,6 +278,12 @@ class AlarmDecoder(object): | |||||
| return '&'.join(['='.join(t) for t in config_entries]) | return '&'.join(['='.join(t) for t in config_entries]) | ||||
| def get_version(self): | |||||
| """ | |||||
| Retrieves the version string from the device. Called automatically by :py:meth:`_on_open`. | |||||
| """ | |||||
| self.send("V\r") | |||||
| def reboot(self): | def reboot(self): | ||||
| """ | """ | ||||
| Reboots the device. | Reboots the device. | ||||
| @@ -354,6 +372,9 @@ class AlarmDecoder(object): | |||||
| elif data.startswith('!CONFIG'): | elif data.startswith('!CONFIG'): | ||||
| self._handle_config(data) | self._handle_config(data) | ||||
| elif data.startswith('!VER'): | |||||
| self._handle_version(data) | |||||
| elif data.startswith('!Sending'): | elif data.startswith('!Sending'): | ||||
| self._handle_sending(data) | self._handle_sending(data) | ||||
| @@ -432,6 +453,21 @@ class AlarmDecoder(object): | |||||
| return msg | return msg | ||||
| def _handle_version(self, data): | |||||
| """ | |||||
| Handles received version data. | |||||
| :param data: Version string to parse | |||||
| :type data: string | |||||
| """ | |||||
| _, version_string = data.split(':') | |||||
| version_parts = version_string.split(',') | |||||
| self.serial_number = version_parts[0] | |||||
| self.version_number = version_parts[1] | |||||
| self.version_flags = version_parts[2] | |||||
| def _handle_config(self, data): | def _handle_config(self, data): | ||||
| """ | """ | ||||
| Handles received configuration data. | Handles received configuration data. | ||||
| @@ -656,6 +692,8 @@ class AlarmDecoder(object): | |||||
| """ | """ | ||||
| self.get_config() | self.get_config() | ||||
| self.get_version() | |||||
| self.on_open() | self.on_open() | ||||
| def _on_close(self, sender, *args, **kwargs): | def _on_close(self, sender, *args, **kwargs): | ||||