Appearance
Tag Quality, Values & Timestamps
Last updated
Every tag value carries a quality and a timestamp along with the value text.
Quality codes
| Quality | Dot | Tooltip | When you see it |
|---|---|---|---|
| good | Green | Quality: Good | The driver read the tag successfully. Local tag writes, expression results and _STATUS tags are always good. |
| bad | Red | Quality: Bad / Stale | The device is not connected when the driver polls (every subscribed tag on the device goes bad at once); or the read of that tag failed (wrong address, tag doesn't exist, type the driver can't read); or an expression tag could not be evaluated. |
| uncertain | Gray | Quality: Uncertain | MQTT: no message has arrived yet on the topic. MTConnect: the data item isn't in the agent's current response. In the UI: your browser hasn't received a live update for the tag yet. |
Note: When your browser has no live update for a tag yet but the appliance has a saved value, the dot is a hollow green ring and the value shown is that saved value. Hover the ring for Last saved value (device last reported …). No live update yet. Only good-quality values are saved, but the ring does not mean the device is connected now: check the time, or the device's
_STATUS/Connectedtag. A gray dot with no value means nothing has been received or saved.
What a bad reading does
- The value becomes empty (
'') in the live cache. Screens show an empty value with a red dot; dashboards show their "unavailable" overlay. - The tag's saved last value in the database is not overwritten, so persisted local tags and screens that load before live data still show the last good value.
- Alarm rules ignore non-numeric values, so an active alarm stays active and an inactive one stays inactive while the tag is bad. Use
_STATUS/Connectedif you need an alarm for loss of communication. - Expression tags that reference a bad tag fail and go bad themselves.
- Scripts:
tags.read()returns''for a bad tag. Usetags.readQualified()to check the quality (see Script API Reference). - History-enabled tags record the change with an empty value.
- When the device reconnects, the first good reading is passed on even if the number is the same as before, because the quality changed.
The appliance also marks a device as errored if it stops sending anything for longer than the device's offline threshold (the watchdog checks every 15 seconds). That changes the device status and _STATUS/* tags; tag values keep their last quality until the driver reports again.
Values are text
- Drivers send numbers as text such as
1500or23.75. - Boolean tags are normalized to lowercase
true/falsewhen the driver reports the type as bool. Some drivers report1/0instead; consumers treat both as on/off. - Empty text means "no value" (typically bad quality).
- Scripts receive strings:
Number(tags.read(3, 'Parts/Count')) + 1, nottags.read(...) + 1(which would append "1").
Timestamps
- The timestamp is the moment of the last change that was passed on, taken from the driver (UTC). An unchanged value or a change inside the deadband does not update it. It is not a "last polled" time.
- Some drivers don't supply a timestamp; the UI then shows no time.
- The UI displays times in your browser's time zone (
toLocaleTimeString); APIs and scripts get ISO 8601 UTC strings. - Local tag writes are stamped with the appliance clock at the moment of the write. Expression tags are stamped at each evaluation that changes the result.