Date parse error with "Timestamp on update" profile in OH3

I use the “timestamp on update” profile on a channel in one of my zwave device in an OH 3.1 M3. When ever the channel is triggered and the timestamp is updated by OH I get the following error in the habapp log.

[2021-04-09 21:41:47,512] [HABApp                                            ]    ERROR | Error time data '2021-04-09T21:41:47.083447000+0200' does not match format '%Y-%m-%dT%H:%M:%S.%f%z' in on_sse_event:
[2021-04-09 21:41:47,512] [HABApp                                            ]    ERROR | File "/usr/src/app/HABApp/core/wrapper.py", line 130, in f
[2021-04-09 21:41:47,513] [HABApp                                            ]    ERROR |     return func(*args, **kwargs)
[2021-04-09 21:41:47,513] [HABApp                                            ]    ERROR | File "/usr/src/app/HABApp/openhab/connection_logic/connection.py", line 41, in on_sse_event
[2021-04-09 21:41:47,513] [HABApp                                            ]    ERROR |     37   @ignore_exception
[2021-04-09 21:41:47,513] [HABApp                                            ]    ERROR |     38   def on_sse_event(event_dict: dict):
[2021-04-09 21:41:47,514] [HABApp                                            ]    ERROR |     39   
[2021-04-09 21:41:47,514] [HABApp                                            ]    ERROR |     40       # Lookup corresponding OpenHAB event
[2021-04-09 21:41:47,514] [HABApp                                            ]    ERROR | --> 41       event = get_event(event_dict)
[2021-04-09 21:41:47,514] [HABApp                                            ]    ERROR |     42   
[2021-04-09 21:41:47,514] [HABApp                                            ]    ERROR |     ..................................................
[2021-04-09 21:41:47,515] [HABApp                                            ]    ERROR |      event_dict = {'topic': 'openhab/items/ZWaveNode009carportmotion_BinarySensor/statechanged',
[2021-04-09 21:41:47,515] [HABApp                                            ]    ERROR |                    'payload': '{"type":"DateTime","value":"2021-04-09T21:41:47.083447+0200","oldType":"DateTime","oldValue":"2021-04-09T21:41:39.484444+0200"}',
[2021-04-09 21:41:47,515] [HABApp                                            ]    ERROR |                    'type': 'ItemStateChangedEvent'}
[2021-04-09 21:41:47,515] [HABApp                                            ]    ERROR |     ..................................................
[2021-04-09 21:41:47,516] [HABApp                                            ]    ERROR | 
[2021-04-09 21:41:47,516] [HABApp                                            ]    ERROR | File "/usr/src/app/HABApp/openhab/map_events.py", line 39, in get_event
[2021-04-09 21:41:47,516] [HABApp                                            ]    ERROR |     27   def get_event(_in_dict: dict) -> OpenhabEvent:
[2021-04-09 21:41:47,516] [HABApp                                            ]    ERROR |  (...)
[2021-04-09 21:41:47,516] [HABApp                                            ]    ERROR |     35       payload = load_json(p_str)
[2021-04-09 21:41:47,517] [HABApp                                            ]    ERROR |     36   
[2021-04-09 21:41:47,517] [HABApp                                            ]    ERROR |     37       # Find event from implemented events
[2021-04-09 21:41:47,517] [HABApp                                            ]    ERROR |     38       try:
[2021-04-09 21:41:47,517] [HABApp                                            ]    ERROR | --> 39           return __event_lookup[event_type].from_dict(topic, payload)
[2021-04-09 21:41:47,517] [HABApp                                            ]    ERROR |     40       except KeyError:
[2021-04-09 21:41:47,518] [HABApp                                            ]    ERROR |     ..................................................
[2021-04-09 21:41:47,518] [HABApp                                            ]    ERROR |      _in_dict = {'topic': 'openhab/items/ZWaveNode009carportmotion_BinarySensor/statechanged',
[2021-04-09 21:41:47,518] [HABApp                                            ]    ERROR |                  'payload': '{"type":"DateTime","value":"2021-04-09T21:41:47.083447+0200","oldType":"DateTime","oldValue":"2021-04-09T21:41:39.484444+0200"}',
[2021-04-09 21:41:47,518] [HABApp                                            ]    ERROR |                  'type': 'ItemStateChangedEvent'}
[2021-04-09 21:41:47,519] [HABApp                                            ]    ERROR |      OpenhabEvent = <class 'HABApp.openhab.events.base_event.OpenhabEvent'>
[2021-04-09 21:41:47,519] [HABApp                                            ]    ERROR |      payload = {'type': 'DateTime',
[2021-04-09 21:41:47,519] [HABApp                                            ]    ERROR |                 'value': '2021-04-09T21:41:47.083447+0200',
[2021-04-09 21:41:47,519] [HABApp                                            ]    ERROR |                 'oldType': 'DateTime',
[2021-04-09 21:41:47,519] [HABApp                                            ]    ERROR |                 'oldValue': '2021-04-09T21:41:39.484444+0200'}
[2021-04-09 21:41:47,520] [HABApp                                            ]    ERROR |      p_str = '{"type":"DateTime","value":"2021-04-09T21:41:47.083447+0200","oldType":"DateTime","oldValue":"2021-04-09T21:41:39.484444+0200"}'
[2021-04-09 21:41:47,520] [HABApp                                            ]    ERROR |      __event_lookup = {'ItemStateEvent': <class 'HABApp.openhab.events.item_events.ItemStateEvent'>,
[2021-04-09 21:41:47,520] [HABApp                                            ]    ERROR |                        'ItemStateChangedEvent': <class 'HABApp.openhab.events.item_events.ItemStateChangedEvent'>,
[2021-04-09 21:41:47,520] [HABApp                                            ]    ERROR |                        'ItemCommandEvent': <class 'HABApp.openhab.events.item_events.ItemCommandEvent'>,
[2021-04-09 21:41:47,520] [HABApp                                            ]    ERROR |                        'ItemAddedEvent': <class 'HABApp.openhab.events.item_events.ItemAddedEvent'>,
[2021-04-09 21:41:47,521] [HABApp                                            ]    ERROR |                        'ItemUpdatedEvent': <class 'HABApp.openhab.events.item_events.ItemUpdatedEvent'>,
[2021-04-09 21:41:47,521] [HABApp                                            ]    ERROR |                        'ItemRemovedEvent': <class 'HABApp.openhab.events.item_events.ItemRemovedEvent'>,
[2021-04-09 21:41:47,521] [HABApp                                            ]    ERROR |                        'ItemStatePredictedEvent': <class 'HABApp.openhab.events.item_events.ItemStatePredictedEvent'>,
[2021-04-09 21:41:47,521] [HABApp                                            ]    ERROR |                        'GroupItemStateChangedEvent': <class 'HABApp.openhab.events.item_events.GroupItemStateChangedEvent'>,
[2021-04-09 21:41:47,522] [HABApp                                            ]    ERROR |                        'ChannelTriggeredEvent': <class 'HABApp.openhab.events.channel_events.ChannelTriggeredEvent'>,
[2021-04-09 21:41:47,522] [HABApp                                            ]    ERROR |                        'ThingStatusInfoEvent': <class 'HABApp.openhab.events.thing_events.ThingStatusInfoEvent'>,
[2021-04-09 21:41:47,522] [HABApp                                            ]    ERROR |                        'ThingStatusInfoChangedEv...: <class 'HABApp.openhab.events.thing_events.ThingStatusInfoChangedEvent'>,
[2021-04-09 21:41:47,522] [HABApp                                            ]    ERROR |                        'ThingFirmwareStatusInfoE...: <class 'HABApp.openhab.events.thing_events.ThingFirmwareStatusInfoEvent'>,
[2021-04-09 21:41:47,522] [HABApp                                            ]    ERROR |                        'ConfigStatusInfoEvent': <class 'HABApp.openhab.events.thing_events.ThingConfigStatusInfoEvent'>,
[2021-04-09 21:41:47,523] [HABApp                                            ]    ERROR |                        'FirmwareStatusInfoEvent': <class 'HABApp.openhab.events.thing_events.ThingFirmwareStatusInfoEvent'>}
[2021-04-09 21:41:47,523] [HABApp                                            ]    ERROR |      event_type = 'ItemStateChangedEvent'
[2021-04-09 21:41:47,523] [HABApp                                            ]    ERROR |      topic = 'openhab/items/ZWaveNode009carportmotion_BinarySensor/statechanged'
[2021-04-09 21:41:47,523] [HABApp                                            ]    ERROR |     ..................................................
[2021-04-09 21:41:47,524] [HABApp                                            ]    ERROR | 
[2021-04-09 21:41:47,524] [HABApp                                            ]    ERROR | File "/usr/src/app/HABApp/openhab/events/item_events.py", line 50, in from_dict
[2021-04-09 21:41:47,524] [HABApp                                            ]    ERROR |     46   def from_dict(cls, topic: str, payload: dict):
[2021-04-09 21:41:47,524] [HABApp                                            ]    ERROR |     47       # smarthome/items/Ping/statechanged
[2021-04-09 21:41:47,524] [HABApp                                            ]    ERROR |     48       return cls(
[2021-04-09 21:41:47,525] [HABApp                                            ]    ERROR |     49           topic[NAME_START:-13],
[2021-04-09 21:41:47,525] [HABApp                                            ]    ERROR | --> 50           map_openhab_values(payload['type'], payload['value']),
[2021-04-09 21:41:47,525] [HABApp                                            ]    ERROR |     51           map_openhab_values(payload['oldType'], payload['oldValue'])
[2021-04-09 21:41:47,525] [HABApp                                            ]    ERROR |     ..................................................
[2021-04-09 21:41:47,525] [HABApp                                            ]    ERROR |      cls = <class 'HABApp.openhab.events.item_events.ItemStateChangedEvent'>
[2021-04-09 21:41:47,526] [HABApp                                            ]    ERROR |      topic = 'openhab/items/ZWaveNode009carportmotion_BinarySensor/statechanged'
[2021-04-09 21:41:47,526] [HABApp                                            ]    ERROR |      payload = {'type': 'DateTime',
[2021-04-09 21:41:47,526] [HABApp                                            ]    ERROR |                 'value': '2021-04-09T21:41:47.083447+0200',
[2021-04-09 21:41:47,526] [HABApp                                            ]    ERROR |                 'oldType': 'DateTime',
[2021-04-09 21:41:47,527] [HABApp                                            ]    ERROR |                 'oldValue': '2021-04-09T21:41:39.484444+0200'}
[2021-04-09 21:41:47,527] [HABApp                                            ]    ERROR |      NAME_START = 14
[2021-04-09 21:41:47,527] [HABApp                                            ]    ERROR |     ..................................................
[2021-04-09 21:41:47,527] [HABApp                                            ]    ERROR | 
[2021-04-09 21:41:47,527] [HABApp                                            ]    ERROR | File "/usr/src/app/HABApp/openhab/map_values.py", line 25, in map_openhab_values
[2021-04-09 21:41:47,528] [HABApp                                            ]    ERROR |     7    def map_openhab_values(openhab_type: str, openhab_value: str):
[2021-04-09 21:41:47,528] [HABApp                                            ]    ERROR |  (...)
[2021-04-09 21:41:47,528] [HABApp                                            ]    ERROR |     21               return float(openhab_value)
[2021-04-09 21:41:47,528] [HABApp                                            ]    ERROR |     22   
[2021-04-09 21:41:47,529] [HABApp                                            ]    ERROR |     23       if openhab_type == "DateTime":
[2021-04-09 21:41:47,529] [HABApp                                            ]    ERROR |     24           # 2018-11-19T09:47:38.284+0100
[2021-04-09 21:41:47,529] [HABApp                                            ]    ERROR | --> 25           dt = datetime.datetime.strptime(openhab_value.replace('+', '000+'), '%Y-%m-%dT%H:%M:%S.%f%z')
[2021-04-09 21:41:47,529] [HABApp                                            ]    ERROR |     26           # all datetimes from openhab have a timezone set so we can't easily compare them
[2021-04-09 21:41:47,529] [HABApp                                            ]    ERROR |     ..................................................
[2021-04-09 21:41:47,530] [HABApp                                            ]    ERROR |      openhab_type = 'DateTime'
[2021-04-09 21:41:47,530] [HABApp                                            ]    ERROR |      openhab_value = '2021-04-09T21:41:47.083447+0200'
[2021-04-09 21:41:47,530] [HABApp                                            ]    ERROR |     ..................................................
[2021-04-09 21:41:47,530] [HABApp                                            ]    ERROR | 
[2021-04-09 21:41:47,530] [HABApp                                            ]    ERROR | File "/usr/local/lib/python3.8/_strptime.py", line 568, in _strptime_datetime
[2021-04-09 21:41:47,531] [HABApp                                            ]    ERROR |     565  def _strptime_datetime(cls, data_string, format="%a %b %d %H:%M:%S %Y"):
[2021-04-09 21:41:47,531] [HABApp                                            ]    ERROR |     566      """Return a class cls instance based on the input string and the
[2021-04-09 21:41:47,531] [HABApp                                            ]    ERROR |     567      format string."""
[2021-04-09 21:41:47,531] [HABApp                                            ]    ERROR | --> 568      tt, fraction, gmtoff_fraction = _strptime(data_string, format)
[2021-04-09 21:41:47,532] [HABApp                                            ]    ERROR |     569      tzname, gmtoff = tt[-2:]
[2021-04-09 21:41:47,532] [HABApp                                            ]    ERROR |     ..................................................
[2021-04-09 21:41:47,532] [HABApp                                            ]    ERROR |      cls = <class 'datetime.datetime'>
[2021-04-09 21:41:47,532] [HABApp                                            ]    ERROR |      data_string = '2021-04-09T21:41:47.083447000+0200'
[2021-04-09 21:41:47,532] [HABApp                                            ]    ERROR |      format = '%Y-%m-%dT%H:%M:%S.%f%z'
[2021-04-09 21:41:47,533] [HABApp                                            ]    ERROR |     ..................................................
[2021-04-09 21:41:47,533] [HABApp                                            ]    ERROR | 
[2021-04-09 21:41:47,533] [HABApp                                            ]    ERROR | File "/usr/local/lib/python3.8/_strptime.py", line 349, in _strptime
[2021-04-09 21:41:47,533] [HABApp                                            ]    ERROR |     309  def _strptime(data_string, format="%a %b %d %H:%M:%S %Y"):
[2021-04-09 21:41:47,534] [HABApp                                            ]    ERROR |  (...)
[2021-04-09 21:41:47,534] [HABApp                                            ]    ERROR |     345                  raise ValueError("stray %% in format '%s'" % format) from None
[2021-04-09 21:41:47,534] [HABApp                                            ]    ERROR |     346              _regex_cache[format] = format_regex
[2021-04-09 21:41:47,534] [HABApp                                            ]    ERROR |     347      found = format_regex.match(data_string)
[2021-04-09 21:41:47,534] [HABApp                                            ]    ERROR |     348      if not found:
[2021-04-09 21:41:47,535] [HABApp                                            ]    ERROR | --> 349          raise ValueError("time data %r does not match format %r" %
[2021-04-09 21:41:47,535] [HABApp                                            ]    ERROR |     350                           (data_string, format))
[2021-04-09 21:41:47,535] [HABApp                                            ]    ERROR |     ..................................................
[2021-04-09 21:41:47,535] [HABApp                                            ]    ERROR |      data_string = '2021-04-09T21:41:47.083447000+0200'
[2021-04-09 21:41:47,535] [HABApp                                            ]    ERROR |      format = '%Y-%m-%dT%H:%M:%S.%f%z'
[2021-04-09 21:41:47,536] [HABApp                                            ]    ERROR |      _regex_cache = {'%Y-%m-%dT%H:%M:%S.%f%z': re.compile('(?P<Y>\\d\\d\\d\\d)-(?P<m>1[0-2]|0[1-9]|[1-9])-(?P<d>3[0-1]|[1-2]\\d|0[1-9]|[1-9]| [1-9])T(?P<H>2[0-3]|[0-1]\\d|\\d):(?P<M>[0-5]\\d|\\d):(?P<S>6[0-1]|[0-5]\\d|\\d)\\.(?P<f>[0-9]{1,6})(?P<z>[+-]\\d\\d, re.IGNORECASE)}
[2021-04-09 21:41:47,536] [HABApp                                            ]    ERROR |      format_regex = re.compile('(?P<Y>\\d\\d\\d\\d)-(?P<m>1[0-2]|0[1-9]|[1-9])-(?P<d>3[0-1]|[1-2]\\d|0[1-9]|[1-9]| [1-9])T(?P<H>2[0-3]|[0-1]\\d|\\d):(?P<M>[0-5]\\d|\\d):(?P<S>6[0-1]|[0-5]\\d|\\d)\\.(?P<f>[0-9]{1,6})(?P<z>[+-]\\d\\d, re.IGNORECASE)
[2021-04-09 21:41:47,536] [HABApp                                            ]    ERROR |      found = None
[2021-04-09 21:41:47,536] [HABApp                                            ]    ERROR |     ..................................................
[2021-04-09 21:41:47,537] [HABApp                                            ]    ERROR | 
[2021-04-09 21:41:47,537] [HABApp                                            ]    ERROR | ---- (full traceback above) ----
[2021-04-09 21:41:47,537] [HABApp                                            ]    ERROR | File "/usr/src/app/HABApp/core/wrapper.py", line 130, in f
[2021-04-09 21:41:47,537] [HABApp                                            ]    ERROR |     return func(*args, **kwargs)
[2021-04-09 21:41:47,537] [HABApp                                            ]    ERROR | File "/usr/src/app/HABApp/openhab/connection_logic/connection.py", line 41, in on_sse_event
[2021-04-09 21:41:47,538] [HABApp                                            ]    ERROR |     event = get_event(event_dict)
[2021-04-09 21:41:47,538] [HABApp                                            ]    ERROR | File "/usr/src/app/HABApp/openhab/map_events.py", line 39, in get_event
[2021-04-09 21:41:47,538] [HABApp                                            ]    ERROR |     return __event_lookup[event_type].from_dict(topic, payload)
[2021-04-09 21:41:47,538] [HABApp                                            ]    ERROR | File "/usr/src/app/HABApp/openhab/events/item_events.py", line 50, in from_dict
[2021-04-09 21:41:47,538] [HABApp                                            ]    ERROR |     map_openhab_values(payload['type'], payload['value']),
[2021-04-09 21:41:47,539] [HABApp                                            ]    ERROR | File "/usr/src/app/HABApp/openhab/map_values.py", line 25, in map_openhab_values
[2021-04-09 21:41:47,539] [HABApp                                            ]    ERROR |     dt = datetime.datetime.strptime(openhab_value.replace('+', '000+'), '%Y-%m-%dT%H:%M:%S.%f%z')
[2021-04-09 21:41:47,539] [HABApp                                            ]    ERROR | File "/usr/local/lib/python3.8/_strptime.py", line 568, in _strptime_datetime
[2021-04-09 21:41:47,539] [HABApp                                            ]    ERROR |     tt, fraction, gmtoff_fraction = _strptime(data_string, format)
[2021-04-09 21:41:47,540] [HABApp                                            ]    ERROR | File "/usr/local/lib/python3.8/_strptime.py", line 349, in _strptime
[2021-04-09 21:41:47,540] [HABApp                                            ]    ERROR |     raise ValueError("time data %r does not match format %r" %
[2021-04-09 21:41:47,540] [HABApp                                            ]    ERROR | 
[2021-04-09 21:41:47,540] [HABApp                                            ]    ERROR | ValueError: time data '2021-04-09T21:41:47.083447000+0200' does not match format '%Y-%m-%dT%H:%M:%S.%f%z'

OH 3 (or at least the OH 3.1 M3) seems to use a different datetimestring. Habapp expects a string like “2018-11-19T09:47:38.284+0100” and therefore adds “000” in front of the +
OH3 provides a string like “2021-04-10T22:00:43.043996+0200” where already 6 decimals are provided for subsecond precision.

PR created Fix DateTime string parsing for OH 3.1 by dobernhardt · Pull Request #214 · spacemanspiff2007/HABApp · GitHub

This topic was automatically closed 41 days after the last reply. New replies are no longer allowed.