diff --git a/alarmdecoder/decoder.py b/alarmdecoder/decoder.py index 856a4cd..3c22e02 100644 --- a/alarmdecoder/decoder.py +++ b/alarmdecoder/decoder.py @@ -87,6 +87,14 @@ class AlarmDecoder(object): mode = ADEMCO """The panel mode that the AlarmDecoder is in. Currently supports ADEMCO and DSC.""" + #Version Information + serial_number = 0xFFFFFFFF + """The device serial number""" + version_number = '2.2a.8' + """The device firmware version""" + version_flags = "TX;RX;SM;VZ;RF;ZX;RE;AU;3X;CG;DD;MF;LR;KE;MK;CB;DS;ER" + """Device flags enabled""" + def __init__(self, device): """ Constructor @@ -119,6 +127,10 @@ class AlarmDecoder(object): self.deduplicate = False self.mode = ADEMCO + self.serial_number = 0xFFFFFFFF + self.version_number = '2.2a.8' + self.version_flags = "TX;RX;SM;VZ;RF;ZX;RE;AU;3X;CG;DD;MF;LR;KE;MK;CB;DS;ER" + def __enter__(self): """ Support for context manager __enter__. @@ -266,6 +278,12 @@ class AlarmDecoder(object): 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): """ Reboots the device. @@ -354,6 +372,9 @@ class AlarmDecoder(object): elif data.startswith('!CONFIG'): self._handle_config(data) + elif data.startswith('!VER'): + self._handle_version(data) + elif data.startswith('!Sending'): self._handle_sending(data) @@ -432,6 +453,21 @@ class AlarmDecoder(object): 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): """ Handles received configuration data. @@ -656,6 +692,8 @@ class AlarmDecoder(object): """ self.get_config() + self.get_version() + self.on_open() def _on_close(self, sender, *args, **kwargs):