Profinity 2.3.2 release notes
Profinity 2.3.2 is the patch after Profinity 2.3.1. A tag that stops receiving data now shows as Stale and keeps its last value, logs and historians record that quality, and a component hidden from a role stays hidden on its page, its script log, its charge session, and its tag queries. Themes show the site logo in the side menu, a caption can take a status colour, and a chart can use a monochrome or categorical palette.
Read Upgrading from 2.3.1 before you upgrade a system that is already on 2.3.1. The Profinity 2.3 release notes and Profinity 2.3 breaking changes still describe the step from 2.2.
Tags, rules, and history
A tag that stops receiving data shows as Stale with its last value, instead of reading as unavailable, and logs and rules can see the change.
A derived tag takes the quality of its inputs by default, so a derived value built on a stale input is stale too.
Set inputQuality: ignore on the derived tag when the output should stay Good regardless of the inputs.
Refer to Derived Tags.
CAN Milliseconds Valid accepts -1 for traffic that never times out, and a value of 0 means nothing from that device is ever current. Batteries and chargers accept 1 to 60000 only. A frame for one multiplex group does not refresh a signal in another group, and each multiplexed signal expires from its own last frame. On a GStar GPS receiver, position, altitude, fix quality, speed, and heading go Stale about five seconds after the receiver goes quiet, and they keep the last value.
Because a timed-out CAN signal keeps its last value, tag.HasValue is still true for it.
A rule or collection that means "has a current value" should use tag.HasValue && !tag.IsStale, and a "no data" rule should use !tag.HasValue || tag.IsStale.
The sample endpoint returns the last value with quality Stale for such a signal, where it used to return not found.
Tag Change scripts run when a watched tag's value changes, not when only its quality changes. A tag removed from the tree is dropped from the rules engine. A rule that reads a tag's metadata is evaluated again when that definition changes and the value does not. Two rules cannot publish state to the same tag path: the rules file is rejected and the error names both rules. Each rule's state tag is written when the rules host starts, using the restored state, or false / -1 when there is none. Refer to Tags and Alerts.
Tags fed over Sparkplug or a tag relay become Stale when the connection is lost and recover when new data arrives.
Tags for protocol points (S7, Modbus, EtherNet/IP, OPC UA and BACnet) become Stale when their connection closes, and a successful poll makes them Good again.
An OPC UA client reading of Uncertain is stored as Stale with the last usable value.
The OPC UA server reports a Stale tag with an uncertain status instead of good, and its RECEIVED and SENT counters count client requests and responses.
The S7 Request timeout (ms) setting now bounds each read and each write.
A register tag written by a script can set maxAgeMs in its metadata to go Stale when it is not written in time.
Refer to S7 and OPC UA Server.
Loggers, historians, and the Webhook publisher record each sample with its quality. A Stale tag keeps its last value, and a tag that is Unavailable or Bad is recorded as a gap with no value. They no longer drop samples that were decoded more than a few seconds before the write. The MQTT publisher still sends good values only. InfluxDB v3 history queries skip points that have quality and no value, and the historian follows its health-check setting. Moving a component, including a change to its tag tree path, keeps that component's tags in the same logger and historian series. Refer to Tag file and SFTP loggers, InfluxDB historians, and Webhook Publisher.
File loggers, historians, publishers, and the other timed components share one interval setting, Update Interval (Seconds), from 1 to 86400. An Influx logger that was labelled Logging Interval (Sec) uses this name. The saved interval is unchanged.
Component visibility and charging
A caller who cannot view a component gets the same result as for a component that is not there.
- The component page returns 404.
- The component's script log reads as empty, and clearing it does nothing.
- MCP
get_tag_seriesanswers as a missing tag. - A wildcard DBC series query includes only components the caller can view.
A charge follows the charger and the battery on the session. A user who cannot view that equipment cannot set the charge up, start it, change the current or the target, or stop it, and the status reads as idle. Refer to Component and Collection Security.
Dashboards and themes
The side menu shows the theme's main logo in place of the Profinity icon, and a themed sign-in logo is shown much larger than the default icon. Accordion tabs follow the theme colours. Refer to Themes and branding.
A caption's color is optional.
It accepts red, green, amber or grey, the same colours as a lamp, and it can be bound to a tag.
Any other value leaves the text in its normal colour.
Refer to Caption.
A chart can set palette to mono or categorical.
mono uses shades of the theme secondary colour, and categorical uses the chart categorical theme colours, so pie slices can be told apart without using the status colours.
Leave palette out to keep that chart type's existing colours.
A pie, doughnut, or polar area whose type is chosen in the visual editor starts on categorical.
Refer to Charts.
Sign-in, kiosk, and licensing
The desktop window signs in with a signed desktop-host claim and its own signing key, not by the username desktop.
That name is no longer reserved, so a site can create a user called desktop.
The web client reads Kiosk Mode from kioskModeEnabled on the kiosk status response, so the sign-in page follows the profile setting.
Refer to Kiosk Mode.
A local trial reports Expiring only in its last 7 days. For the rest of the 14 days it reports Trial. Refer to Licensing.
CAN adapters
A PCAN or PCAN FD adapter that drops, goes bus-off, or loses its handle shows Error with the reason and connects again when the device returns. Discovery continues if listing attached channels fails. Refer to CAN bus adapters.
A Tritium adapter on protocol V2 accepts a bus number from 0 to 32767. Protocol V1 still accepts 0 to 13.
Upgrading from 2.3.1
- Review rules and collections that treat
tag.HasValueas "this signal is current". A stale CAN signal still has a value. Usetag.HasValue && !tag.IsStalefor a current value. - CAN Milliseconds Valid of 0 means the device is never current. Use -1 when the signal should never time out. Batteries and chargers reject both 0 and -1.
- A script saved with Milliseconds Valid 0 is loaded as 0. It is no longer treated as "never expires".
- Tag Change scripts do not run when only the quality changes.
- Log files, SQL history, Influx, and webhook payloads now include quality. Unavailable and Bad samples are gaps with no value. A consumer that assumed every row had a value needs to allow a gap.
- Two rules that publish state to the same tag path cause the rules file to be rejected. Give each rule its own state tag path.
- Users who were kept out of a component by role can no longer open its page, read its script log, query its tags, or operate a charge on that equipment. Confirm that charging operators can view the charger and the battery they are meant to run.
- The desktop sign-in no longer depends on a user named desktop. A local account with that name is an ordinary user.