Skip to content

Commit

Permalink
Display raw item state when formatting fails (#2349)
Browse files Browse the repository at this point in the history
* Display raw item state when formatting fails

With the addition of Profiles, there are situations where a Channel sends format information that
does not match the type. For example, "Timestamp on update" always sends a DateTime, but the channel
may specify a different format (e.g., if it is a battery level, "%.0f %%"). In such a case, we
attempt to format the DateTime according to the pattern, it (predictably and correctly) fails, and
this results in an error in the UI and a warning in the log.

While this is an expected error if a user uses an incorrect format code in an Item's metadata (user
error), it is somewhat unexpected if a user is choosing an option as presented in the UI. Because
this is purely a formatting issue, one solution is to direct users to add a formatting code if they
see an error. However, the disadvantage of this approach is that it doesn't work "out of the box."

This patch attempts to address the issue by displaying the raw Item state when formatting fails
instead of displaying "Err". This should provide a more balanced approach with a predictable
outcome. In addition, when a user is intentionally changing the pattern via metadata and gets it
wrong, they should still see info in the log that helps them get to the root of the problem, but
I've changed it from warn to info so it will be a little less noisy for those who choose to ignore
it.

This solution was discussed in #2037 and
https://community.openhab.org/t/timestamps-not-rendering-consistently-in-ui-3-0-2/121891/2

Thank you to @Rossko57 and @cweitkamp for their help in figuring it out, and in suggesting the
solution.

Signed-off-by: Brian Warner <[email protected]>
  • Loading branch information
brianwarner authored May 13, 2021
1 parent ebd82d6 commit a8f469e
Showing 1 changed file with 3 additions and 2 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -152,9 +152,10 @@ public SseItemStatesEventBuilder(final BundleContext bundleContext, final @Refer
try {
displayState = state.format(pattern);
} catch (IllegalArgumentException e) {
logger.warn("Exception while formatting value '{}' of item {} with format '{}': {}",
logger.debug(
"Unable to format value '{}' of item {} with format '{}': {}, displaying raw state",
state, item.getName(), pattern, e.getMessage());
displayState = new String("Err");
displayState = state.toString();
}
}
}
Expand Down

0 comments on commit a8f469e

Please sign in to comment.