From 8423915ba19d239a55f1863a312e1258a73a479f Mon Sep 17 00:00:00 2001 From: Joseph Doherty Date: Tue, 24 Mar 2026 16:32:00 -0400 Subject: [PATCH] fix(site-runtime): publish quality changes to site stream for real-time debug view updates MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit HandleConnectionQualityChanged now publishes AttributeValueChanged events to the SiteStreamManager for all affected attributes. This ensures the central UI debug view updates in real-time when a data connection disconnects and attributes go bad quality. Only publishes to the stream — does NOT notify script or alarm actors, since the value hasn't changed and firing scripts/alarms on quality-only changes would cause spurious evaluations. --- src/ScadaLink.SiteRuntime/Actors/InstanceActor.cs | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/ScadaLink.SiteRuntime/Actors/InstanceActor.cs b/src/ScadaLink.SiteRuntime/Actors/InstanceActor.cs index 5840859..85aa776 100644 --- a/src/ScadaLink.SiteRuntime/Actors/InstanceActor.cs +++ b/src/ScadaLink.SiteRuntime/Actors/InstanceActor.cs @@ -301,6 +301,10 @@ public class InstanceActor : ReceiveActor if (_configuration == null) return; // Mark all attributes bound to this connection with the new quality + // and publish to the site stream so the debug view updates in real-time. + // We intentionally do NOT notify script/alarm actors here — the value + // hasn't changed, only the quality, and firing scripts/alarms would + // cause spurious evaluations. var qualityStr = qualityChanged.Quality.ToString(); foreach (var attr in _configuration.Attributes) { @@ -309,6 +313,16 @@ public class InstanceActor : ReceiveActor { _attributeQualities[attr.CanonicalName] = qualityStr; _attributeTimestamps[attr.CanonicalName] = qualityChanged.Timestamp; + + // Publish quality change to stream (current value, new quality) + _attributes.TryGetValue(attr.CanonicalName, out var currentValue); + _streamManager?.PublishAttributeValueChanged(new AttributeValueChanged( + _instanceUniqueName, + attr.DataSourceReference, + attr.CanonicalName, + currentValue, + qualityStr, + qualityChanged.Timestamp)); } } }