diff --git a/OWNd/__init__.py b/OWNd/__init__.py index a403f33..471ccc2 100755 --- a/OWNd/__init__.py +++ b/OWNd/__init__.py @@ -1,2 +1,2 @@ """ OWNd - an OpenWebNet daemon """ # pylint: disable=invalid-name -__version__ = "0.7.44" +__version__ = "0.7.45" diff --git a/OWNd/message.py b/OWNd/message.py index 2bef744..56fb70f 100755 --- a/OWNd/message.py +++ b/OWNd/message.py @@ -49,13 +49,13 @@ class OWNMessage: r"^\*#(?P\d+)\*(?P#?\d+)(?P(?:#\d+)*)##$" ) # *#WHO*WHERE _DIMENSION_WRITING = re.compile( - r"^\*#(?P\d+)\*(?P#?\d+)?(?P(?:#\d+)*)?\*#(?P\d+)(?P(?:#\d+)*)?(?P(?:\*\d+)+)##$" # pylint: disable=line-too-long + r"^\*#(?P\d+)\*(?P#?\d+)?(?P(?:#\d+)*)?\*#(?P\d+)(?P(?:#\d+)*)?(?P(?:\*\d*)+)##$" # pylint: disable=line-too-long ) # *#WHO*WHERE*#DIMENSION*VAL1*VALn## _DIMENSION_REQUEST = re.compile( r"^\*#(?P\d+)\*(?P#?\d+)?(?P(?:#\d+)*)?\*(?P\d+)##$" ) # *#WHO*WHERE*DIMENSION## _DIMENSION_REQUEST_REPLY = re.compile( - r"^\*#(?P\d+)\*(?P#?\d+)?(?P(?:#\d+)*)?\*(?P\d+)(?P(?:#\d+)*)?(?P(?:\*\d+)+)##$" # pylint: disable=line-too-long + r"^\*#(?P\d+)\*(?P#?\d+)?(?P(?:#\d+)*)?\*(?P\d+)(?P(?:#\d+)*)?(?P(?:\*\d*)+)##$" # pylint: disable=line-too-long ) # *#WHO*WHERE*DIMENSION*VAL1*VALn## """ Base class for all OWN messages """ @@ -341,6 +341,8 @@ def parse(cls, data): return OWNCENPlusEvent(data) elif _where.startswith("3"): return OWNDryContactEvent(data) + elif _who > 1000: + return cls(data) return data @@ -1132,14 +1134,15 @@ def __init__(self, data): self._hour = self._dimension_value[0] self._minute = self._dimension_value[1] self._second = self._dimension_value[2] - self._timezone = ( - f"+{self._dimension_value[3][1:]}" - if self._dimension_value[3][0] == "0" - else f"-{self._dimension_value[3][1:]}" - ) - self._time = datetime.time.fromisoformat( - f"{self._hour}:{self._minute}:{self._second}{self._timezone}:00" - ) + # Timezone is sometimes missing from messages, assuming UTC + if self._dimension_value[3] is not None: + self._timezone = ( + f"+{self._dimension_value[3][1:]}:00" + if self._dimension_value[3][0] == "0" + else f"-{self._dimension_value[3][1:]}:00" + ) + else: + self._timezone = "" self._human_readable_log = f"Gateway's internal time is: {self._hour}:{self._minute}:{self._second} UTC {self._timezone}." # pylint: disable=line-too-long elif self._dimension == 1: @@ -1203,16 +1206,20 @@ def __init__(self, data): self._hour = self._dimension_value[0] self._minute = self._dimension_value[1] self._second = self._dimension_value[2] - self._timezone = ( - f"+{self._dimension_value[3][1:]}" - if self._dimension_value[3][0] == "0" - else f"-{self._dimension_value[3][1:]}" - ) + # Timezone is sometimes missing from messages, assuming UTC + if self._dimension_value[3] is not None: + self._timezone = ( + f"+{self._dimension_value[3][1:]}:00" + if self._dimension_value[3][0] == "0" + else f"-{self._dimension_value[3][1:]}:00" + ) + else: + self._timezone = "" self._day = self._dimension_value[5] self._month = self._dimension_value[6] self._year = self._dimension_value[7] self._datetime = datetime.datetime.fromisoformat( - f"{self._year}-{self._month}-{self._day}*{self._hour}:{self._minute}:{self._second}{self._timezone}:00" # pylint: disable=line-too-long + f"{self._year}-{self._month}-{self._day}*{self._hour}:{self._minute}:{self._second}{self._timezone}" # pylint: disable=line-too-long ) self._human_readable_log = ( f"Gateway's internal datetime is: {self._datetime}." @@ -1612,6 +1619,8 @@ def parse(cls, data): return cls(data) elif _where.startswith("3"): return OWNDryContactCommand(data) + elif _who > 1000: + return cls(data) return None @@ -1855,13 +1864,17 @@ def __init__(self, data): self._hour = self._dimension_value[0] self._minute = self._dimension_value[1] self._second = self._dimension_value[2] - self._timezone = ( - f"+{self._dimension_value[3][1:]}" - if self._dimension_value[3][0] == "0" - else f"-{self._dimension_value[3][1:]}" - ) + # Timezone is sometimes missing from messages, assuming UTC + if self._dimension_value[3] is not None: + self._timezone = ( + f"+{self._dimension_value[3][1:]}:00" + if self._dimension_value[3][0] == "0" + else f"-{self._dimension_value[3][1:]}:00" + ) + else: + self._timezone = "" self._time = datetime.time.fromisoformat( - f"{self._hour}:{self._minute}:{self._second}{self._timezone}:00" + f"{self._hour}:{self._minute}:{self._second}{self._timezone}" ) self._human_readable_log = ( f"Gateway broadcasting internal time: {self._time}." @@ -1882,16 +1895,20 @@ def __init__(self, data): self._hour = self._dimension_value[0] self._minute = self._dimension_value[1] self._second = self._dimension_value[2] - self._timezone = ( - f"+{self._dimension_value[3][1:]}" - if self._dimension_value[3][0] == "0" - else f"-{self._dimension_value[3][1:]}" - ) + # Timezone is sometimes missing from messages, assuming UTC + if self._dimension_value[3] is not None: + self._timezone = ( + f"+{self._dimension_value[3][1:]}:00" + if self._dimension_value[3][0] == "0" + else f"-{self._dimension_value[3][1:]}:00" + ) + else: + self._timezone = "" self._day = self._dimension_value[5] self._month = self._dimension_value[6] self._year = self._dimension_value[7] self._datetime = datetime.datetime.fromisoformat( - f"{self._year}-{self._month}-{self._day}*{self._hour}:{self._minute}:{self._second}{self._timezone}:00" # pylint: disable=line-too-long + f"{self._year}-{self._month}-{self._day}*{self._hour}:{self._minute}:{self._second}{self._timezone}" # pylint: disable=line-too-long ) self._human_readable_log = ( f"Gateway broadcasting internal datetime: {self._datetime}." diff --git a/dist/OWNd-0.7.44-py3-none-any.whl b/dist/OWNd-0.7.44-py3-none-any.whl deleted file mode 100644 index d362335..0000000 Binary files a/dist/OWNd-0.7.44-py3-none-any.whl and /dev/null differ diff --git a/dist/OWNd-0.7.44.tar.gz b/dist/OWNd-0.7.44.tar.gz deleted file mode 100644 index 205a34f..0000000 Binary files a/dist/OWNd-0.7.44.tar.gz and /dev/null differ diff --git a/dist/OWNd-0.7.45-py3-none-any.whl b/dist/OWNd-0.7.45-py3-none-any.whl new file mode 100644 index 0000000..9a22050 Binary files /dev/null and b/dist/OWNd-0.7.45-py3-none-any.whl differ diff --git a/dist/OWNd-0.7.45.tar.gz b/dist/OWNd-0.7.45.tar.gz new file mode 100644 index 0000000..914cd97 Binary files /dev/null and b/dist/OWNd-0.7.45.tar.gz differ diff --git a/setup.py b/setup.py index d7057bc..526c3ea 100755 --- a/setup.py +++ b/setup.py @@ -7,7 +7,7 @@ setuptools.setup( name="OWNd", - version="0.7.44", + version="0.7.45", author="anotherjulien", url="https://github.com/anotherjulien/OWNd", author_email="yetanotherjulien@gmail.com",