From f10d837e8eb0472a0f0a0b94a61161ce213479f3 Mon Sep 17 00:00:00 2001 From: Nitish Jain Date: Wed, 6 Aug 2025 02:19:23 +0000 Subject: [PATCH 01/68] update discovery and mapping documentation --- docs/specs/discovery.md | 21 +++--- docs/specs/mapping.md | 65 ++++++++----------- .../service/core/ProvisioningEngineTest.java | 2 +- 3 files changed, 40 insertions(+), 48 deletions(-) diff --git a/docs/specs/discovery.md b/docs/specs/discovery.md index 24f60a214b..5a0d87ee81 100644 --- a/docs/specs/discovery.md +++ b/docs/specs/discovery.md @@ -24,7 +24,8 @@ follow the appropriate [_discovery event schema_](../../gencode/docs/events_disc The overall discovery sequence involves multiple components that work together to provide the overall flow: * **Devices**: The target things that need to be discovered, configured, and ultimately communicate point data. * **Spotter**: Operative node that performs _discovery_, scanning local networks and producing observations. -* **Agent**: Cloud-based agent responsible for managing the overall _discovery_ and _mapping_ process (how often, what color, etc...). +* **Registry**: Digital Twin of the on-prem devices on the cloud for the particular site. +* **Agent**: Cloud-based agent/Provisioning Engine responsible for managing the overall _discovery_ and _mapping_ process (how often, what color, etc...). * **Pipeline**: Ultimate recipient of pointset information, The thing that cares about 'temperature' in a room. (The `*` prefixing a `*term` means that this id/property is being sourced/created at that step.) @@ -34,18 +35,20 @@ sequenceDiagram %%{wrap}%% participant Devices participant Spotter - participant Agent as Agent
(w/ Mapping) + participant Registry + participant Provisioning Engine participant Pipeline - Note over Devices, Agent: Discovery Start - activate Agent - Agent->>Spotter: DISCOVERY CONFIG
() + Note over Devices, c: Discovery Start + activate Provisioning Engine + Provisioning Engine->>Registry: DISCOVERY CONFIG
for Spotter
() + Registry->>Spotter: DISCOVERY CONFIG loop Devices-->Spotter: fieldbus - Spotter->>Agent: DISCOVERY EVENT
(*scan_id)
+ Spotter->>Provisioning Engine: DISCOVERY EVENT
(*scan_id)
end - Note over Agent: Provisioning
& Mapping - Agent ->> Pipeline: (config device) - deactivate Agent + Note over Provisioning Engine: Provisioning
& Mapping + Provisioning Engine ->> Pipeline: (POINTSET EVENT
After Mapping) + deactivate Provisioning Engine Devices->>Pipeline: POINTSET EVENT
(device_id, device_num_id, points)
``` diff --git a/docs/specs/mapping.md b/docs/specs/mapping.md index 8ec21031bb..ad2345a875 100644 --- a/docs/specs/mapping.md +++ b/docs/specs/mapping.md @@ -10,64 +10,53 @@ scopes of device data: * **(Native)**: Device communication using some non-UDMI native protocol (e.g. BACnet, Modbus, etc...) * **[Discovery](discovery.md)**: Messages relating to the discovery (and provisioning) of devices (e.g. messy BACnet info) * **[Mapping](mapping.md)**: Messages relating to a 'resolved' device type and ID (e.g. the device is an `AHU` called `AHU-1`) -* **[Pointset](../messages/pointset.md)**: Messages relating to actual data flow (e.g. temperature reading), essentially the interesting stuff -* **(Onboard)**: Interactions with an external (non-UDMI) entity of some kind to facilitate onboarding of devices ## Sequence Diagram The overall mapping sequence involves multiple components that work together to provide the overall flow: * **Devices**: The target things that need to be discovered, configured, and ultimately communicate point data. -* **Agent**: Cloud-based agent responsible for managing the overall _discovery_ and _mapping_ process (how often, what color, etc...). -* **Mapper**: Mapping engine that uses heuristics, ML, or a UI to convert discovery information into a concrete device/pipeline mapping. -* **Pipeline**: Ultimate recipient of pointset information, The thing that cares about 'temperature' in a room. +* **Registry**: Digital Twin of the on-prem devices on the cloud for the particular site, which have the current state of the actual site. +* **Provisioning Engine**: Cloud-based agent/Provisioning Engine responsible for managing the overall _discovery_ and _mapping_ process (how often, what color, etc...). +* **Mapper**: Mapping service that uses heuristics, ML, or a UI to convert discovery information into a concrete device/pipeline mapping. +* **Source Repo**: Ultimate source of truth for the particular site, having all the devices and Gateways part of the site in the Cloud Source Repository. ```mermaid sequenceDiagram %%{wrap}%% participant Devices as Devices
(w/ Spotter) - participant Agent - participant Mapper - participant Pipeline - Note over Devices, Agent: Discovery Start - activate Agent - loop Devices - Devices->>Mapper: DISCOVERY EVENT
(*scan_id)
- end - deactivate Agent - Note over Agent, Mapper: Mapping Start - activate Mapper - Agent->>Mapper: MAPPING CONFIG - Mapper->>Agent: MAPPING STATE - loop Devices - Mapper->>Agent: MAPPING EVENT
(*guid, scan_id, *device_id)
- Agent->>Mapper: MAPPING COMMAND
(device_id, *device_num_id) - Agent-->>Pipeline: Onboard RPC
(guid, device_id, device_num_id)
- end - deactivate Mapper - Devices->>Pipeline: POINTSET EVENT
(device_id, device_num_id)
+ participant Provisioning Engine + participant Registry as Registry
(w/ Internal DB) + participant Mapping Service + participant Source Repo + participant Modeling Phase + Devices->>Provisioning Engine: Incemental Results
(Discovery Events) + Provisioning Engine->>Registry: Incremental Results + Devices->>Mapping Service: DISCOVERY COMPLETE EVENT + Source Repo->>Mapping Service: Base Model Import + Registry->>Mapping Service: All Results + Note over Mapping Service: Map Results + Mapping Service->>Source Repo: 'discovery' branch + Source Repo-->>Modeling Phase: Notify branch updated ``` + 1. *(Fieldbus Discovery)* scan for fieldbus _device_ information from devices (e.g. BACnet, format out of scope for UDMI): * "I am device `78F936` with points { `room_temp`, `step_size`, and `operation_count` }" 2. **[Discovery Events](../../tests/schemas/events_discovery/enumeration.json)** wraps the device info from the discovery into a UDMI-normalized format, e.g.: * "Device `78F936` has points { }, with a public key `XYZZYZ`" -3. **[Mapping Config](../../tests/schemas/config_mapping/mapping.json)** from the _agent_ indicates that the _mapper_ should export responses. -3. **[Mapping Events](../../tests/schemas/events_mapping/mapping.json)** from the _mapper_ contain actual calculated point mappings: - * "Device `78F936` is an `AHU` called `AHU-183`, and `room_temp` is really a `flow_temperatue`" -3. **[Mapping Command](../../tests/schemas/commands_mapping/mapping.json)** to the _mapper_ contain results of initial provisioning: - * "Device `78F936` has a numerical id `2198372198752` -4. *(Onboard Info)* are sent to the _pipeline_ to onboard a device (contents are defined by _pipeline_ and out of scope for UDMI). -8. **[Telemetry Events](../../tests/schemas/events_pointset/example.json)** are data events from _device_ to _pipeline_... business as usual: - * "I am `AHU-183`, and my `room_temp` is `73`" - +3. **[Discovery Complete Event](../../validator/sequences/scan_single_future/events_discovery.json) with related [attributes](../../validator/sequences/scan_single_now/events_discovery.attr) +Containerized Maping Service, having the subscription for the `udmi_target` topic, on Consuming the Discovery Complete event, starts the mapping process. +If the discovery event received doesn't maps to existing devices in the source repo, new device witht the convention "UNK-X", where X is in an increasing number starting from 1 and UNK, stands for "Unknown". +If there is an existing device, device gets updated with the new pointset event details getting appended to the existing device. +All thse changes are then pushed to the discovery branch, from where the modelling phase starts. ## Example Test Setup A standalone test-setup can be used to emulate all the requisite parts of the system. Cloud PubSub subscriptions (the defaults) on the `udmi_target` topic (need to be manually added): * `mapping-agent`: Used by the agent to coordinate on-prem discovery and mapping engine activities. -* `mapping-engine`: Used by the engine to process discovery and mapping information. +* `mapping-service`: To process discovery complete event and complete mapping process. Local environment setup (e.g.): * project_id=test-gcp-project @@ -96,12 +85,12 @@ Received new family virtual generation Mon Aug 29 18:47:43 PDT 2022 ... ``` -### Mock Mapping Engine +### Mapping Service -The mapping `engine` receives discovery and mapping events to perform the mapping function. +The mapping `service` receives discovery complete and mapping events to perform the mapping process. ``` -$ validator/bin/mapping engine sites/udmi_site_model/ $project_id +$ services/bin/mapping_service //pubsub/bos-platform-dev/namespace //gbos/bos-platform-dev/namespace tmp/udmi/sites/ --local ... Received discovery event for generation Mon Aug 29 18:48:43 PDT 2022 ... diff --git a/udmis/src/test/java/com/google/bos/udmi/service/core/ProvisioningEngineTest.java b/udmis/src/test/java/com/google/bos/udmi/service/core/ProvisioningEngineTest.java index 17116e9e10..b68737c6ef 100644 --- a/udmis/src/test/java/com/google/bos/udmi/service/core/ProvisioningEngineTest.java +++ b/udmis/src/test/java/com/google/bos/udmi/service/core/ProvisioningEngineTest.java @@ -37,7 +37,7 @@ import udmi.schema.GatewayModel; /** - * Simple tests for the auto-mapping provisioning agent. + * Simple tests for the auto-mapping provisioning engine. */ public class ProvisioningEngineTest extends ProcessorTestBase { From e5cfd0697b3d13f6504393625f8e84b0c1486ca6 Mon Sep 17 00:00:00 2001 From: Nitish Jain Date: Wed, 6 Aug 2025 02:21:07 +0000 Subject: [PATCH 02/68] update discovery and mapping documentation --- docs/specs/provisioning.md | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/docs/specs/provisioning.md b/docs/specs/provisioning.md index ed7248e5f7..528757af86 100644 --- a/docs/specs/provisioning.md +++ b/docs/specs/provisioning.md @@ -15,16 +15,16 @@ sequenceDiagram %%{wrap}%% participant Devices as Devices
(w/ Spotter) participant Registry - participant Agent as Agent
(w/ Mapping) + participant Provisioning Engine participant Pipeline - Devices->>Agent: DISCOVERY EVENT - Note over Agent: Mapping - activate Agent + Devices->>Provisioning Engine: DISCOVERY EVENT + Note over Provisioning Engine: Mapping + activate Provisioning Engine loop Devices - Agent->>Registry: (*device_id) - Registry->>Agent: (*device_num_id) - Agent->>Pipeline: (*guid, device_id, device_num_id) + Provisioning Engine->>Registry: (*device_id) + Registry->>Provisioning Engine: (*device_num_id) + Provisioning Engine->>Pipeline: (*guid, device_id, device_num_id) end - deactivate Agent + deactivate Provisioning Engine Devices->>Pipeline: TELEMETRY EVENT
(device_id, device_num_id) ``` From bb90ef83f6a5c334533b3ea00b7c73c73363c3be Mon Sep 17 00:00:00 2001 From: Nitish Jain Date: Wed, 6 Aug 2025 02:29:26 +0000 Subject: [PATCH 03/68] update discovery and mapping documentation --- docs/specs/discovery.md | 6 ++++-- docs/specs/mapping.md | 16 +++++++++------- 2 files changed, 13 insertions(+), 9 deletions(-) diff --git a/docs/specs/discovery.md b/docs/specs/discovery.md index 5a0d87ee81..4746d8a180 100644 --- a/docs/specs/discovery.md +++ b/docs/specs/discovery.md @@ -25,7 +25,8 @@ The overall discovery sequence involves multiple components that work together t * **Devices**: The target things that need to be discovered, configured, and ultimately communicate point data. * **Spotter**: Operative node that performs _discovery_, scanning local networks and producing observations. * **Registry**: Digital Twin of the on-prem devices on the cloud for the particular site. -* **Agent**: Cloud-based agent/Provisioning Engine responsible for managing the overall _discovery_ and _mapping_ process (how often, what color, etc...). +* **Provisioning Engine**: Cloud-based agent/Provisioning Engine responsible for managing the overall _discovery_ and _mapping_ process (how often, what color, etc...). +* **Mapping Agent**: Used at the spotter to coordinate on-prem discovery. * **Pipeline**: Ultimate recipient of pointset information, The thing that cares about 'temperature' in a room. (The `*` prefixing a `*term` means that this id/property is being sourced/created at that step.) @@ -37,10 +38,11 @@ sequenceDiagram participant Spotter participant Registry participant Provisioning Engine + participant Mapping Agent participant Pipeline Note over Devices, c: Discovery Start activate Provisioning Engine - Provisioning Engine->>Registry: DISCOVERY CONFIG
for Spotter
() + Mapping Agent->>Registry: DISCOVERY CONFIG
for Spotter
() Registry->>Spotter: DISCOVERY CONFIG loop Devices-->Spotter: fieldbus diff --git a/docs/specs/mapping.md b/docs/specs/mapping.md index ad2345a875..605198e01a 100644 --- a/docs/specs/mapping.md +++ b/docs/specs/mapping.md @@ -40,12 +40,14 @@ sequenceDiagram ``` -1. *(Fieldbus Discovery)* scan for fieldbus _device_ information from devices (e.g. BACnet, format out of scope for UDMI): - * "I am device `78F936` with points { `room_temp`, `step_size`, and `operation_count` }" -2. **[Discovery Events](../../tests/schemas/events_discovery/enumeration.json)** wraps the device info from the discovery - into a UDMI-normalized format, e.g.: - * "Device `78F936` has points { }, with a public key `XYZZYZ`" -3. **[Discovery Complete Event](../../validator/sequences/scan_single_future/events_discovery.json) with related [attributes](../../validator/sequences/scan_single_now/events_discovery.attr) +* **(Fieldbus Discovery)** scan for fieldbus _device_ information from devices (e.g. BACnet, format out of scope for UDMI): + "I am device `78F936` with points { `room_temp`, `step_size`, and `operation_count` }" +* **[Discovery Events](../../tests/schemas/events_discovery/enumeration.json)** wraps the device info from the discovery + into a UDMI-normalized format, e.g.: + "Device `78F936` has points { }, with a public key `XYZZYZ`" +* **[Discovery Complete Event](../../validator/sequences/scan_single_future/events_discovery.json)** with related [attributes](../../validator/sequences/scan_single_now/events_discovery.attr) + + Containerized Maping Service, having the subscription for the `udmi_target` topic, on Consuming the Discovery Complete event, starts the mapping process. If the discovery event received doesn't maps to existing devices in the source repo, new device witht the convention "UNK-X", where X is in an increasing number starting from 1 and UNK, stands for "Unknown". If there is an existing device, device gets updated with the new pointset event details getting appended to the existing device. @@ -55,7 +57,7 @@ All thse changes are then pushed to the discovery branch, from where the modelli A standalone test-setup can be used to emulate all the requisite parts of the system. Cloud PubSub subscriptions (the defaults) on the `udmi_target` topic (need to be manually added): -* `mapping-agent`: Used by the agent to coordinate on-prem discovery and mapping engine activities. +* `mapping-agent`: Used at the spotter to coordinate on-prem discovery. * `mapping-service`: To process discovery complete event and complete mapping process. Local environment setup (e.g.): From 954a48544db6043e8f577a4009f596340862116b Mon Sep 17 00:00:00 2001 From: Nitish Jain Date: Wed, 6 Aug 2025 02:31:58 +0000 Subject: [PATCH 04/68] update discovery and mapping documentation --- docs/specs/discovery.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/specs/discovery.md b/docs/specs/discovery.md index 4746d8a180..5ec9e3090a 100644 --- a/docs/specs/discovery.md +++ b/docs/specs/discovery.md @@ -40,7 +40,7 @@ sequenceDiagram participant Provisioning Engine participant Mapping Agent participant Pipeline - Note over Devices, c: Discovery Start + Note over Devices, Provisioning Engine: Discovery Start activate Provisioning Engine Mapping Agent->>Registry: DISCOVERY CONFIG
for Spotter
() Registry->>Spotter: DISCOVERY CONFIG From 8ccdc7f899c669fc69a06592a36650ea9d059c73 Mon Sep 17 00:00:00 2001 From: Nitish Jain Date: Wed, 6 Aug 2025 06:52:22 +0000 Subject: [PATCH 05/68] documentation changes --- docs/specs/mapping.md | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/docs/specs/mapping.md b/docs/specs/mapping.md index 605198e01a..34e0122988 100644 --- a/docs/specs/mapping.md +++ b/docs/specs/mapping.md @@ -15,10 +15,12 @@ scopes of device data: The overall mapping sequence involves multiple components that work together to provide the overall flow: * **Devices**: The target things that need to be discovered, configured, and ultimately communicate point data. -* **Registry**: Digital Twin of the on-prem devices on the cloud for the particular site, which have the current state of the actual site. * **Provisioning Engine**: Cloud-based agent/Provisioning Engine responsible for managing the overall _discovery_ and _mapping_ process (how often, what color, etc...). -* **Mapper**: Mapping service that uses heuristics, ML, or a UI to convert discovery information into a concrete device/pipeline mapping. +* **Registry**: Digital Twin of the on-prem devices on the cloud for the particular site, which have the current state of the actual site. +* **Mapping Service**: Mapping service that uses heuristics, ML, or a UI to convert discovery information into a concrete device/pipeline mapping. * **Source Repo**: Ultimate source of truth for the particular site, having all the devices and Gateways part of the site in the Cloud Source Repository. +* **Modeling Phase**: Managing and maintaining the site model data, manually or by automated change-detection process. + ```mermaid sequenceDiagram @@ -31,7 +33,7 @@ sequenceDiagram participant Modeling Phase Devices->>Provisioning Engine: Incemental Results
(Discovery Events) Provisioning Engine->>Registry: Incremental Results - Devices->>Mapping Service: DISCOVERY COMPLETE EVENT + Devices->>Mapping Service: Discovery Complete Event Source Repo->>Mapping Service: Base Model Import Registry->>Mapping Service: All Results Note over Mapping Service: Map Results @@ -40,15 +42,13 @@ sequenceDiagram ``` -* **(Fieldbus Discovery)** scan for fieldbus _device_ information from devices (e.g. BACnet, format out of scope for UDMI): - "I am device `78F936` with points { `room_temp`, `step_size`, and `operation_count` }" * **[Discovery Events](../../tests/schemas/events_discovery/enumeration.json)** wraps the device info from the discovery into a UDMI-normalized format, e.g.: "Device `78F936` has points { }, with a public key `XYZZYZ`" -* **[Discovery Complete Event](../../validator/sequences/scan_single_future/events_discovery.json)** with related [attributes](../../validator/sequences/scan_single_now/events_discovery.attr) +* **[Discovery Complete Event](../../validator/sequences/scan_single_future/events_discovery.json)** having `event_no` as negative value, with related [attributes](../../validator/sequences/scan_single_now/events_discovery.attr) -Containerized Maping Service, having the subscription for the `udmi_target` topic, on Consuming the Discovery Complete event, starts the mapping process. +Maping Service, having the subscription for the `udmi_target` topic, on Consuming the Discovery Complete event, starts the mapping process. If the discovery event received doesn't maps to existing devices in the source repo, new device witht the convention "UNK-X", where X is in an increasing number starting from 1 and UNK, stands for "Unknown". If there is an existing device, device gets updated with the new pointset event details getting appended to the existing device. All thse changes are then pushed to the discovery branch, from where the modelling phase starts. @@ -57,7 +57,6 @@ All thse changes are then pushed to the discovery branch, from where the modelli A standalone test-setup can be used to emulate all the requisite parts of the system. Cloud PubSub subscriptions (the defaults) on the `udmi_target` topic (need to be manually added): -* `mapping-agent`: Used at the spotter to coordinate on-prem discovery. * `mapping-service`: To process discovery complete event and complete mapping process. Local environment setup (e.g.): From 0f113e59ec38ed1f119f5be4a0fbc55f1eba11dc Mon Sep 17 00:00:00 2001 From: Nitish Jain Date: Wed, 6 Aug 2025 08:14:13 +0000 Subject: [PATCH 06/68] documentation changes --- .wordlist.txt | 1 + docs/specs/mapping.md | 15 ++++++++++++--- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/.wordlist.txt b/.wordlist.txt index fd1ab6acc6..ab77dac1f1 100644 --- a/.wordlist.txt +++ b/.wordlist.txt @@ -171,6 +171,7 @@ UI unconfigured underspecified uniqs +UNK unprocessable unwriteable uplink diff --git a/docs/specs/mapping.md b/docs/specs/mapping.md index 34e0122988..6a4a0cb2f5 100644 --- a/docs/specs/mapping.md +++ b/docs/specs/mapping.md @@ -48,10 +48,19 @@ sequenceDiagram * **[Discovery Complete Event](../../validator/sequences/scan_single_future/events_discovery.json)** having `event_no` as negative value, with related [attributes](../../validator/sequences/scan_single_now/events_discovery.attr) -Maping Service, having the subscription for the `udmi_target` topic, on Consuming the Discovery Complete event, starts the mapping process. -If the discovery event received doesn't maps to existing devices in the source repo, new device witht the convention "UNK-X", where X is in an increasing number starting from 1 and UNK, stands for "Unknown". +Mapping Service, having the subscription for the `udmi_target` topic, on Consuming the Discovery Complete event, starts the mapping process. +If the discovery event received doesn't maps to existing devices in the source repo, new device with the convention "UNK-X", where X is in an increasing number starting from 1 and UNK, stands for "Unknown". If there is an existing device, device gets updated with the new pointset event details getting appended to the existing device. -All thse changes are then pushed to the discovery branch, from where the modelling phase starts. +All these changes are then pushed to the discovery branch, from where the modeling phase starts. + +The Mapping Service subscribes to the udmi_target topic. When it receives a Discovery Complete event, it initiates the mapping process. + +### Key Workflow Steps +* Device Mapping: The service first checks if the received discovery data corresponds to an existing device in the source repository. +* Handling New Devices: If no matching device is found based on the family (bacnet/vendor, etc.) and address combination, a new device is created. The new device is named using the convention UNK-X, where UNK stands for "Unknown" and X is an increasing number starting from 1. +* Updating Existing Devices: If a match is found, the service updates the existing device. New details from the Pointset Complete event are appended to the device's existing data. +* Pushing Changes: All these updates and new device creations are then pushed to the discovery branch, which triggers the subsequent modeling phase. + ## Example Test Setup A standalone test-setup can be used to emulate all the requisite parts of the system. From 7d703419ae0f085ab2f7815acad9d46ca6fb5eb3 Mon Sep 17 00:00:00 2001 From: Nitish Jain Date: Wed, 6 Aug 2025 08:17:40 +0000 Subject: [PATCH 07/68] update discovery and mapping documentation --- docs/specs/mapping.md | 5 ----- 1 file changed, 5 deletions(-) diff --git a/docs/specs/mapping.md b/docs/specs/mapping.md index 6a4a0cb2f5..49f82eed1e 100644 --- a/docs/specs/mapping.md +++ b/docs/specs/mapping.md @@ -48,11 +48,6 @@ sequenceDiagram * **[Discovery Complete Event](../../validator/sequences/scan_single_future/events_discovery.json)** having `event_no` as negative value, with related [attributes](../../validator/sequences/scan_single_now/events_discovery.attr) -Mapping Service, having the subscription for the `udmi_target` topic, on Consuming the Discovery Complete event, starts the mapping process. -If the discovery event received doesn't maps to existing devices in the source repo, new device with the convention "UNK-X", where X is in an increasing number starting from 1 and UNK, stands for "Unknown". -If there is an existing device, device gets updated with the new pointset event details getting appended to the existing device. -All these changes are then pushed to the discovery branch, from where the modeling phase starts. - The Mapping Service subscribes to the udmi_target topic. When it receives a Discovery Complete event, it initiates the mapping process. ### Key Workflow Steps From b8aa290d725228c9f692e263030563545e25b7cc Mon Sep 17 00:00:00 2001 From: Nitish Jain Date: Wed, 6 Aug 2025 16:32:00 +0000 Subject: [PATCH 08/68] changes for documentation --- docs/specs/discovery.md | 11 ++++------- docs/specs/mapping.md | 2 +- 2 files changed, 5 insertions(+), 8 deletions(-) diff --git a/docs/specs/discovery.md b/docs/specs/discovery.md index 5ec9e3090a..c5cc3e1efc 100644 --- a/docs/specs/discovery.md +++ b/docs/specs/discovery.md @@ -24,7 +24,6 @@ follow the appropriate [_discovery event schema_](../../gencode/docs/events_disc The overall discovery sequence involves multiple components that work together to provide the overall flow: * **Devices**: The target things that need to be discovered, configured, and ultimately communicate point data. * **Spotter**: Operative node that performs _discovery_, scanning local networks and producing observations. -* **Registry**: Digital Twin of the on-prem devices on the cloud for the particular site. * **Provisioning Engine**: Cloud-based agent/Provisioning Engine responsible for managing the overall _discovery_ and _mapping_ process (how often, what color, etc...). * **Mapping Agent**: Used at the spotter to coordinate on-prem discovery. * **Pipeline**: Ultimate recipient of pointset information, The thing that cares about 'temperature' in a room. @@ -36,22 +35,20 @@ sequenceDiagram %%{wrap}%% participant Devices participant Spotter - participant Registry participant Provisioning Engine participant Mapping Agent participant Pipeline Note over Devices, Provisioning Engine: Discovery Start activate Provisioning Engine - Mapping Agent->>Registry: DISCOVERY CONFIG
for Spotter
() - Registry->>Spotter: DISCOVERY CONFIG + Mapping Agent->>Spotter: Discovery Config loop Devices-->Spotter: fieldbus - Spotter->>Provisioning Engine: DISCOVERY EVENT
(*scan_id)
+ Spotter->>Provisioning Engine: Discovery Event
(*scan_id)
end Note over Provisioning Engine: Provisioning
& Mapping - Provisioning Engine ->> Pipeline: (POINTSET EVENT
After Mapping) + Provisioning Engine ->> Pipeline: Pointset Event
After Mapping deactivate Provisioning Engine - Devices->>Pipeline: POINTSET EVENT
(device_id, device_num_id, points)
+ Devices->>Pipeline: Pointset Event
(device_id, device_num_id, points)
``` ## Scanning diff --git a/docs/specs/mapping.md b/docs/specs/mapping.md index 49f82eed1e..19498807f3 100644 --- a/docs/specs/mapping.md +++ b/docs/specs/mapping.md @@ -45,7 +45,7 @@ sequenceDiagram * **[Discovery Events](../../tests/schemas/events_discovery/enumeration.json)** wraps the device info from the discovery into a UDMI-normalized format, e.g.: "Device `78F936` has points { }, with a public key `XYZZYZ`" -* **[Discovery Complete Event](../../validator/sequences/scan_single_future/events_discovery.json)** having `event_no` as negative value, with related [attributes](../../validator/sequences/scan_single_now/events_discovery.attr) +* **[Discovery Complete Event](../../validator/sequences/scan_single_future/events_discovery.json)** having `event_no` as negative value. The Mapping Service subscribes to the udmi_target topic. When it receives a Discovery Complete event, it initiates the mapping process. From 61dff2444eec97774bef9502b946ae08ff2a6b7c Mon Sep 17 00:00:00 2001 From: Nitish Jain Date: Wed, 6 Aug 2025 16:46:53 +0000 Subject: [PATCH 09/68] changes for documentation --- docs/specs/mapping.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/docs/specs/mapping.md b/docs/specs/mapping.md index 19498807f3..47c592324e 100644 --- a/docs/specs/mapping.md +++ b/docs/specs/mapping.md @@ -16,7 +16,7 @@ scopes of device data: The overall mapping sequence involves multiple components that work together to provide the overall flow: * **Devices**: The target things that need to be discovered, configured, and ultimately communicate point data. * **Provisioning Engine**: Cloud-based agent/Provisioning Engine responsible for managing the overall _discovery_ and _mapping_ process (how often, what color, etc...). -* **Registry**: Digital Twin of the on-prem devices on the cloud for the particular site, which have the current state of the actual site. +* **UDMIS**: UDMIS (Universal Device Management Interface Services) is a cloud infrastructure which in required for other application and tooling e.g. Registrar, Validator, etc. * **Mapping Service**: Mapping service that uses heuristics, ML, or a UI to convert discovery information into a concrete device/pipeline mapping. * **Source Repo**: Ultimate source of truth for the particular site, having all the devices and Gateways part of the site in the Cloud Source Repository. * **Modeling Phase**: Managing and maintaining the site model data, manually or by automated change-detection process. @@ -27,15 +27,15 @@ sequenceDiagram %%{wrap}%% participant Devices as Devices
(w/ Spotter) participant Provisioning Engine - participant Registry as Registry
(w/ Internal DB) + participant UDMIS participant Mapping Service participant Source Repo participant Modeling Phase - Devices->>Provisioning Engine: Incemental Results
(Discovery Events) - Provisioning Engine->>Registry: Incremental Results + Devices->>Provisioning Engine: Incremental Results
(Discovery Events) + Provisioning Engine->>UDMIS: Incremental Results Devices->>Mapping Service: Discovery Complete Event Source Repo->>Mapping Service: Base Model Import - Registry->>Mapping Service: All Results + UDMIS->>Mapping Service: All Results Note over Mapping Service: Map Results Mapping Service->>Source Repo: 'discovery' branch Source Repo-->>Modeling Phase: Notify branch updated From c7fdbf5ec5332cbab26d11063b79d7647ef7acd3 Mon Sep 17 00:00:00 2001 From: Nitish Jain Date: Wed, 6 Aug 2025 18:40:30 +0000 Subject: [PATCH 10/68] changes for documentation --- docs/specs/mapping.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/specs/mapping.md b/docs/specs/mapping.md index 47c592324e..6078be6e73 100644 --- a/docs/specs/mapping.md +++ b/docs/specs/mapping.md @@ -16,7 +16,7 @@ scopes of device data: The overall mapping sequence involves multiple components that work together to provide the overall flow: * **Devices**: The target things that need to be discovered, configured, and ultimately communicate point data. * **Provisioning Engine**: Cloud-based agent/Provisioning Engine responsible for managing the overall _discovery_ and _mapping_ process (how often, what color, etc...). -* **UDMIS**: UDMIS (Universal Device Management Interface Services) is a cloud infrastructure which in required for other application and tooling e.g. Registrar, Validator, etc. +* **UDMIS**: The Universal Device Management Interface Services, or UDMIS, is a cloud-based infrastructure that serves as the foundation for various tools, including the Registrar and Validator. * **Mapping Service**: Mapping service that uses heuristics, ML, or a UI to convert discovery information into a concrete device/pipeline mapping. * **Source Repo**: Ultimate source of truth for the particular site, having all the devices and Gateways part of the site in the Cloud Source Repository. * **Modeling Phase**: Managing and maintaining the site model data, manually or by automated change-detection process. From 397f2ca0909ebf7457ce7d640a7f0df13ca6400b Mon Sep 17 00:00:00 2001 From: Nitish Jain Date: Wed, 13 Aug 2025 03:05:17 +0000 Subject: [PATCH 11/68] Sequencer test for updating transitional state --- .gencode_hash.txt | 6 +- etc/test_itemized.in | 1 + gencode/docs/configuration_pubber.html | 41 +++++++++++++ gencode/java/udmi/schema/PubberOptions.java | 11 +++- gencode/python/udmi/schema/options_pubber.py | 4 ++ .../impl/manager/PubberPointsetManager.java | 57 +++++++++++++++++++ schema/options_pubber.json | 4 ++ .../sequences/writeback_slow/sequence.md | 11 ++++ .../sequences/WritebackSequences.java | 25 ++++++++ 9 files changed, 156 insertions(+), 4 deletions(-) create mode 100644 validator/sequences/writeback_slow/sequence.md diff --git a/.gencode_hash.txt b/.gencode_hash.txt index cc881bb472..1f230fd5b0 100644 --- a/.gencode_hash.txt +++ b/.gencode_hash.txt @@ -4,7 +4,7 @@ c21266e8de23b6e8acfac16a177db782375bf71df470c343c3f8eb8b822ef56a gencode/docs/c 0bb798c8db6be37266946569a096e2f0b7520ee54d65e7e8d37675ef17820f14 gencode/docs/configuration_endpoint.html 7caf6f29bff7c358536444c0d8502169f708bcc6f32a3d0a8aae155708b2cd04 gencode/docs/configuration_execution.html 11b21f73b6a4065102968a4c09979639b8a7ea6efb20e40d52cd21b2a60167bb gencode/docs/configuration_pod.html -78c229a63687a4cbda1d3f55fa640255613ea6b7a549e1a3782b0167d7466a9b gencode/docs/configuration_pubber.html +eecaaa7c4962e3c086884c8151673c266bb6a9b0c872c4c4252c5ad3e783e914 gencode/docs/configuration_pubber.html 1057fa40fb7a31a23bb2773d21c38cf4590a935bd8b5ea4218e695c6204f5dd9 gencode/docs/data_template.html 046ed76860a187d3e17a4d90a1dcea3462bece897e8726839bfeb7fcbdda78c0 gencode/docs/events.html 65a890087a21577db420cc26a6bfd878753b475a06cf56eb2037f5a04719cabf gencode/docs/events_discovery.html @@ -112,7 +112,7 @@ c73ad6dde0db8a520f3fee5a563c55a79fc7e6d1cd7875723b10c3d34036a46b gencode/java/u 9637f95e8a1185b1b028308a8caa2ca5a78cb46ae97f9cc11e2731066129540e gencode/java/udmi/schema/Position.java d87deaba67bb3272c528e3491d378bde059b626964a4a2aed15f5643305c2463 gencode/java/udmi/schema/Properties.java 4cdd5dc6b2e054a43f2e70adeb46ef8e3ff78288d4315923a925415f87e871aa gencode/java/udmi/schema/PubberConfiguration.java -63c1201e7a391c2cd5d0166c4a690d9cef9812383808023a7e48beb2f91c82e9 gencode/java/udmi/schema/PubberOptions.java +7cbed874410e3394b9c52d0eb72d694ad66753cc999df9375ce81aa4fc9613a6 gencode/java/udmi/schema/PubberOptions.java cd2c7580a75391393c2f761f4434e4e7e83e2d2d1f35e9e62d69c19e65ea2557 gencode/java/udmi/schema/RefDiscovery.java 14faa115d13ee46d10935b13753bff85758f3b64b5136a59f60d36b5b541687c gencode/java/udmi/schema/SchemaValidationState.java fadf083200e73d46cfdec2f710d40e3d2bc4dbf05196e4d0900186e72b62d95e gencode/java/udmi/schema/Scoring.java @@ -208,7 +208,7 @@ b48ae013d203eb31cc388a084c0cc6f93d4d5534336d4da2ecbccd84a085ea2b gencode/python 5c50847e136a033ea511209238bb570499b43fbee6189dae06603132dcb9f01f gencode/python/udmi/schema/model_testing_target.py 7c9a755ae06c44fc2b8117d7918b6401ce08a7218b86033fb3320eda7286e581 gencode/python/udmi/schema/monitoring.py e7e0b1ff8a58b904f30169641e633abf9fe19420607a867eda371eb50a86304e gencode/python/udmi/schema/monitoring_metric.py -e5ea24cc0777064088497c9a05f8517398fccbf81b12db5e580c5653d2a4b973 gencode/python/udmi/schema/options_pubber.py +fbd5f5824867476fbaa9e8cd637cf8c95cb3fb8d6c2afa588b595cb18e4787ed gencode/python/udmi/schema/options_pubber.py 6c5f3dd1c5ca9d821e3c48298af118fc7eafd97af9265dfd34b2ed8642efca77 gencode/python/udmi/schema/persistent_device.py a58f8c98e837a5b56126ca0f410e02f1e9cfcd80a8cb429e0ef522defab1f690 gencode/python/udmi/schema/properties.py a84e00db471b2038a473c2c83d72ea59b02c3d2bab56d38bc22435309f01e763 gencode/python/udmi/schema/query_cloud.py diff --git a/etc/test_itemized.in b/etc/test_itemized.in index 16df9ed0f8..a17e4b930d 100644 --- a/etc/test_itemized.in +++ b/etc/test_itemized.in @@ -10,6 +10,7 @@ TEST valid_serial_no msTimestamp TEST writeback_success extraPoint=filter_differential_pressure_setpoint TEST writeback_success noWriteback TEST writeback_success noPointState +TEST writeback_slow slowDevice TEST pointset_publish_interval fixedSampleRate=10 TEST system_min_loglevel fixedLogLevel=100 TEST system_mode_restart noPersist diff --git a/gencode/docs/configuration_pubber.html b/gencode/docs/configuration_pubber.html index 4fadea8743..16677e9a39 100644 --- a/gencode/docs/configuration_pubber.html +++ b/gencode/docs/configuration_pubber.html @@ -3179,6 +3179,47 @@

+ + + + +
+
+
+

+ +

+
+ +
+
+ + Type: boolean
+

If true, the pubber will simulate a 90-second delay for writeback operations.

+
+ + + + + +
diff --git a/gencode/java/udmi/schema/PubberOptions.java b/gencode/java/udmi/schema/PubberOptions.java index ed3c81321b..793b128e2b 100644 --- a/gencode/java/udmi/schema/PubberOptions.java +++ b/gencode/java/udmi/schema/PubberOptions.java @@ -52,6 +52,7 @@ "disableWriteback", "noWriteback", "fixedLogLevel", + "slowDevice", "softwareFirmwareValue" }) public class PubberOptions { @@ -140,6 +141,13 @@ public class PubberOptions { public Boolean noWriteback; @JsonProperty("fixedLogLevel") public Integer fixedLogLevel; + /** + * If true, the pubber will simulate a 90-second delay for writeback operations. + * + */ + @JsonProperty("slowDevice") + @JsonPropertyDescription("If true, the pubber will simulate a 90-second delay for writeback operations.") + public Boolean slowDevice; @JsonProperty("softwareFirmwareValue") public String softwareFirmwareValue; @@ -173,6 +181,7 @@ public int hashCode() { result = ((result* 31)+((this.redirectRegistry == null)? 0 :this.redirectRegistry.hashCode())); result = ((result* 31)+((this.noPointState == null)? 0 :this.noPointState.hashCode())); result = ((result* 31)+((this.disableWriteback == null)? 0 :this.disableWriteback.hashCode())); + result = ((result* 31)+((this.slowDevice == null)? 0 :this.slowDevice.hashCode())); result = ((result* 31)+((this.barfConfig == null)? 0 :this.barfConfig.hashCode())); result = ((result* 31)+((this.extraField == null)? 0 :this.extraField.hashCode())); result = ((result* 31)+((this.emptyMissing == null)? 0 :this.emptyMissing.hashCode())); @@ -196,7 +205,7 @@ public boolean equals(Object other) { return false; } PubberOptions rhs = ((PubberOptions) other); - return (((((((((((((((((((((((((((((((((((((((this.skewClock == rhs.skewClock)||((this.skewClock!= null)&&this.skewClock.equals(rhs.skewClock)))&&((this.noPersist == rhs.noPersist)||((this.noPersist!= null)&&this.noPersist.equals(rhs.noPersist))))&&((this.noLastConfig == rhs.noLastConfig)||((this.noLastConfig!= null)&&this.noLastConfig.equals(rhs.noLastConfig))))&&((this.noLog == rhs.noLog)||((this.noLog!= null)&&this.noLog.equals(rhs.noLog))))&&((this.noHardware == rhs.noHardware)||((this.noHardware!= null)&&this.noHardware.equals(rhs.noHardware))))&&((this.messageTrace == rhs.messageTrace)||((this.messageTrace!= null)&&this.messageTrace.equals(rhs.messageTrace))))&&((this.softwareFirmwareValue == rhs.softwareFirmwareValue)||((this.softwareFirmwareValue!= null)&&this.softwareFirmwareValue.equals(rhs.softwareFirmwareValue))))&&((this.noWriteback == rhs.noWriteback)||((this.noWriteback!= null)&&this.noWriteback.equals(rhs.noWriteback))))&&((this.msTimestamp == rhs.msTimestamp)||((this.msTimestamp!= null)&&this.msTimestamp.equals(rhs.msTimestamp))))&&((this.noLastStart == rhs.noLastStart)||((this.noLastStart!= null)&&this.noLastStart.equals(rhs.noLastStart))))&&((this.badLevel == rhs.badLevel)||((this.badLevel!= null)&&this.badLevel.equals(rhs.badLevel))))&&((this.tweakState == rhs.tweakState)||((this.tweakState!= null)&&this.tweakState.equals(rhs.tweakState))))&&((this.spamState == rhs.spamState)||((this.spamState!= null)&&this.spamState.equals(rhs.spamState))))&&((this.noState == rhs.noState)||((this.noState!= null)&&this.noState.equals(rhs.noState))))&&((this.badState == rhs.badState)||((this.badState!= null)&&this.badState.equals(rhs.badState))))&&((this.baseState == rhs.baseState)||((this.baseState!= null)&&this.baseState.equals(rhs.baseState))))&&((this.noStatus == rhs.noStatus)||((this.noStatus!= null)&&this.noStatus.equals(rhs.noStatus))))&&((this.noFolder == rhs.noFolder)||((this.noFolder!= null)&&this.noFolder.equals(rhs.noFolder))))&&((this.noProxy == rhs.noProxy)||((this.noProxy!= null)&&this.noProxy.equals(rhs.noProxy))))&&((this.missingPoint == rhs.missingPoint)||((this.missingPoint!= null)&&this.missingPoint.equals(rhs.missingPoint))))&&((this.badCategory == rhs.badCategory)||((this.badCategory!= null)&&this.badCategory.equals(rhs.badCategory))))&&((this.extraPoint == rhs.extraPoint)||((this.extraPoint!= null)&&this.extraPoint.equals(rhs.extraPoint))))&&((this.badAddr == rhs.badAddr)||((this.badAddr!= null)&&this.badAddr.equals(rhs.badAddr))))&&((this.smokeCheck == rhs.smokeCheck)||((this.smokeCheck!= null)&&this.smokeCheck.equals(rhs.smokeCheck))))&&((this.redirectRegistry == rhs.redirectRegistry)||((this.redirectRegistry!= null)&&this.redirectRegistry.equals(rhs.redirectRegistry))))&&((this.noPointState == rhs.noPointState)||((this.noPointState!= null)&&this.noPointState.equals(rhs.noPointState))))&&((this.disableWriteback == rhs.disableWriteback)||((this.disableWriteback!= null)&&this.disableWriteback.equals(rhs.disableWriteback))))&&((this.barfConfig == rhs.barfConfig)||((this.barfConfig!= null)&&this.barfConfig.equals(rhs.barfConfig))))&&((this.extraField == rhs.extraField)||((this.extraField!= null)&&this.extraField.equals(rhs.extraField))))&&((this.emptyMissing == rhs.emptyMissing)||((this.emptyMissing!= null)&&this.emptyMissing.equals(rhs.emptyMissing))))&&((this.fixedSampleRate == rhs.fixedSampleRate)||((this.fixedSampleRate!= null)&&this.fixedSampleRate.equals(rhs.fixedSampleRate))))&&((this.dupeState == rhs.dupeState)||((this.dupeState!= null)&&this.dupeState.equals(rhs.dupeState))))&&((this.featureEnableSwap == rhs.featureEnableSwap)||((this.featureEnableSwap!= null)&&this.featureEnableSwap.equals(rhs.featureEnableSwap))))&&((this.extraDevice == rhs.extraDevice)||((this.extraDevice!= null)&&this.extraDevice.equals(rhs.extraDevice))))&&((this.noConfigAck == rhs.noConfigAck)||((this.noConfigAck!= null)&&this.noConfigAck.equals(rhs.noConfigAck))))&&((this.badVersion == rhs.badVersion)||((this.badVersion!= null)&&this.badVersion.equals(rhs.badVersion))))&&((this.fixedLogLevel == rhs.fixedLogLevel)||((this.fixedLogLevel!= null)&&this.fixedLogLevel.equals(rhs.fixedLogLevel))))&&((this.configStateDelay == rhs.configStateDelay)||((this.configStateDelay!= null)&&this.configStateDelay.equals(rhs.configStateDelay)))); + return ((((((((((((((((((((((((((((((((((((((((this.skewClock == rhs.skewClock)||((this.skewClock!= null)&&this.skewClock.equals(rhs.skewClock)))&&((this.noPersist == rhs.noPersist)||((this.noPersist!= null)&&this.noPersist.equals(rhs.noPersist))))&&((this.noLastConfig == rhs.noLastConfig)||((this.noLastConfig!= null)&&this.noLastConfig.equals(rhs.noLastConfig))))&&((this.noLog == rhs.noLog)||((this.noLog!= null)&&this.noLog.equals(rhs.noLog))))&&((this.noHardware == rhs.noHardware)||((this.noHardware!= null)&&this.noHardware.equals(rhs.noHardware))))&&((this.messageTrace == rhs.messageTrace)||((this.messageTrace!= null)&&this.messageTrace.equals(rhs.messageTrace))))&&((this.softwareFirmwareValue == rhs.softwareFirmwareValue)||((this.softwareFirmwareValue!= null)&&this.softwareFirmwareValue.equals(rhs.softwareFirmwareValue))))&&((this.noWriteback == rhs.noWriteback)||((this.noWriteback!= null)&&this.noWriteback.equals(rhs.noWriteback))))&&((this.msTimestamp == rhs.msTimestamp)||((this.msTimestamp!= null)&&this.msTimestamp.equals(rhs.msTimestamp))))&&((this.noLastStart == rhs.noLastStart)||((this.noLastStart!= null)&&this.noLastStart.equals(rhs.noLastStart))))&&((this.badLevel == rhs.badLevel)||((this.badLevel!= null)&&this.badLevel.equals(rhs.badLevel))))&&((this.tweakState == rhs.tweakState)||((this.tweakState!= null)&&this.tweakState.equals(rhs.tweakState))))&&((this.spamState == rhs.spamState)||((this.spamState!= null)&&this.spamState.equals(rhs.spamState))))&&((this.noState == rhs.noState)||((this.noState!= null)&&this.noState.equals(rhs.noState))))&&((this.badState == rhs.badState)||((this.badState!= null)&&this.badState.equals(rhs.badState))))&&((this.baseState == rhs.baseState)||((this.baseState!= null)&&this.baseState.equals(rhs.baseState))))&&((this.noStatus == rhs.noStatus)||((this.noStatus!= null)&&this.noStatus.equals(rhs.noStatus))))&&((this.noFolder == rhs.noFolder)||((this.noFolder!= null)&&this.noFolder.equals(rhs.noFolder))))&&((this.noProxy == rhs.noProxy)||((this.noProxy!= null)&&this.noProxy.equals(rhs.noProxy))))&&((this.missingPoint == rhs.missingPoint)||((this.missingPoint!= null)&&this.missingPoint.equals(rhs.missingPoint))))&&((this.badCategory == rhs.badCategory)||((this.badCategory!= null)&&this.badCategory.equals(rhs.badCategory))))&&((this.extraPoint == rhs.extraPoint)||((this.extraPoint!= null)&&this.extraPoint.equals(rhs.extraPoint))))&&((this.badAddr == rhs.badAddr)||((this.badAddr!= null)&&this.badAddr.equals(rhs.badAddr))))&&((this.smokeCheck == rhs.smokeCheck)||((this.smokeCheck!= null)&&this.smokeCheck.equals(rhs.smokeCheck))))&&((this.redirectRegistry == rhs.redirectRegistry)||((this.redirectRegistry!= null)&&this.redirectRegistry.equals(rhs.redirectRegistry))))&&((this.noPointState == rhs.noPointState)||((this.noPointState!= null)&&this.noPointState.equals(rhs.noPointState))))&&((this.disableWriteback == rhs.disableWriteback)||((this.disableWriteback!= null)&&this.disableWriteback.equals(rhs.disableWriteback))))&&((this.slowDevice == rhs.slowDevice)||((this.slowDevice!= null)&&this.slowDevice.equals(rhs.slowDevice))))&&((this.barfConfig == rhs.barfConfig)||((this.barfConfig!= null)&&this.barfConfig.equals(rhs.barfConfig))))&&((this.extraField == rhs.extraField)||((this.extraField!= null)&&this.extraField.equals(rhs.extraField))))&&((this.emptyMissing == rhs.emptyMissing)||((this.emptyMissing!= null)&&this.emptyMissing.equals(rhs.emptyMissing))))&&((this.fixedSampleRate == rhs.fixedSampleRate)||((this.fixedSampleRate!= null)&&this.fixedSampleRate.equals(rhs.fixedSampleRate))))&&((this.dupeState == rhs.dupeState)||((this.dupeState!= null)&&this.dupeState.equals(rhs.dupeState))))&&((this.featureEnableSwap == rhs.featureEnableSwap)||((this.featureEnableSwap!= null)&&this.featureEnableSwap.equals(rhs.featureEnableSwap))))&&((this.extraDevice == rhs.extraDevice)||((this.extraDevice!= null)&&this.extraDevice.equals(rhs.extraDevice))))&&((this.noConfigAck == rhs.noConfigAck)||((this.noConfigAck!= null)&&this.noConfigAck.equals(rhs.noConfigAck))))&&((this.badVersion == rhs.badVersion)||((this.badVersion!= null)&&this.badVersion.equals(rhs.badVersion))))&&((this.fixedLogLevel == rhs.fixedLogLevel)||((this.fixedLogLevel!= null)&&this.fixedLogLevel.equals(rhs.fixedLogLevel))))&&((this.configStateDelay == rhs.configStateDelay)||((this.configStateDelay!= null)&&this.configStateDelay.equals(rhs.configStateDelay)))); } } diff --git a/gencode/python/udmi/schema/options_pubber.py b/gencode/python/udmi/schema/options_pubber.py index 4a8f56884c..04e47810f2 100644 --- a/gencode/python/udmi/schema/options_pubber.py +++ b/gencode/python/udmi/schema/options_pubber.py @@ -42,6 +42,7 @@ def __init__(self): self.disableWriteback = None self.noWriteback = None self.fixedLogLevel = None + self.slowDevice = None self.softwareFirmwareValue = None @staticmethod @@ -86,6 +87,7 @@ def from_dict(source): result.disableWriteback = source.get('disableWriteback') result.noWriteback = source.get('noWriteback') result.fixedLogLevel = source.get('fixedLogLevel') + result.slowDevice = source.get('slowDevice') result.softwareFirmwareValue = source.get('softwareFirmwareValue') return result @@ -181,6 +183,8 @@ def to_dict(self): result['noWriteback'] = self.noWriteback # 5 if self.fixedLogLevel: result['fixedLogLevel'] = self.fixedLogLevel # 5 + if self.slowDevice: + result['slowDevice'] = self.slowDevice # 5 if self.softwareFirmwareValue: result['softwareFirmwareValue'] = self.softwareFirmwareValue # 5 return result diff --git a/pubber/src/main/java/daq/pubber/impl/manager/PubberPointsetManager.java b/pubber/src/main/java/daq/pubber/impl/manager/PubberPointsetManager.java index 840b67bded..6a0802bf44 100644 --- a/pubber/src/main/java/daq/pubber/impl/manager/PubberPointsetManager.java +++ b/pubber/src/main/java/daq/pubber/impl/manager/PubberPointsetManager.java @@ -11,12 +11,17 @@ import java.util.HashMap; import java.util.Map; import java.util.Set; +import java.util.concurrent.Executors; +import java.util.concurrent.ScheduledExecutorService; import udmi.lib.client.manager.PointsetManager; import udmi.lib.intf.AbstractPoint; import udmi.lib.intf.ManagerHost; import udmi.schema.PointPointsetConfig; import udmi.schema.PointPointsetModel; +import udmi.schema.PointPointsetState.Value_state; +import udmi.schema.PointsetConfig; import udmi.schema.PointsetState; +import java.util.concurrent.TimeUnit; import udmi.schema.PubberConfiguration; /** @@ -26,6 +31,8 @@ public class PubberPointsetManager extends PubberManager implements PointsetMana private final ExtraPointsetEvent pointsetEvent = new ExtraPointsetEvent(); private final Map managedPoints = new HashMap<>(); + private final ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1); + private static final int SLOW_DEVICE_DELAY_SEC = 90; private int pointsetUpdateCount = -1; private PointsetState pointsetState; @@ -127,4 +134,54 @@ private static PointPointsetModel makePointPointsetModel(int value, double toler pointMetadata.units = units; return pointMetadata; } + + @Override + public void updatePointsetPointsConfig(PointsetConfig config) { + if (config == null) { + setPointsetState(null); + updateState(); + return; + } + + boolean slowDevice = getOptions().slowDevice != null && getOptions().slowDevice; + + getManagedPoints().forEach((pointName, point) -> { + PointPointsetConfig pointConfig = config.points == null ? null : config.points.get(pointName); + if (pointConfig != null && pointConfig.set_value != null) { + if (slowDevice) { + handleSlowWriteback(point, pointConfig); + } else { + applyAndAckWriteback(point, pointConfig); + } + } + }); + + if (syncPoints(config.points)) { + updateState(); + } + getPointsetState().state_etag = config.state_etag; + } + + private void handleSlowWriteback(AbstractPoint point, PointPointsetConfig pointConfig) { + info(format("Applying slow writeback for point %s with %ds delay", point.getName(), SLOW_DEVICE_DELAY_SEC)); + + getPointsetState().points.get(point.getName()).value_state = Value_state.UPDATING; + updateState(); + + scheduler.schedule(() -> { + try { + info(format("Completing slow writeback for %s", point.getName())); + applyAndAckWriteback(point, pointConfig); + } catch (Exception e) { + error("Error during scheduled writeback for " + point.getName(), e); + } + }, SLOW_DEVICE_DELAY_SEC, TimeUnit.SECONDS); + } + + private void applyAndAckWriteback(AbstractPoint point, PointPointsetConfig pointConfig) { + point.setConfig(pointConfig); + getPointsetState().points.get(point.getName()).value_state = Value_state.APPLIED; + updateState(); + } + } diff --git a/schema/options_pubber.json b/schema/options_pubber.json index 2cbdcc7090..6e0e2eaab2 100644 --- a/schema/options_pubber.json +++ b/schema/options_pubber.json @@ -117,6 +117,10 @@ "fixedLogLevel": { "type": "integer" }, + "slowDevice": { + "type": "boolean", + "description": "If true, the pubber will simulate a 90-second delay for writeback operations." + }, "softwareFirmwareValue": { "type": "string" } diff --git a/validator/sequences/writeback_slow/sequence.md b/validator/sequences/writeback_slow/sequence.md new file mode 100644 index 0000000000..8d0bbf7514 --- /dev/null +++ b/validator/sequences/writeback_slow/sequence.md @@ -0,0 +1,11 @@ +## writeback_slow (ALPHA) + +Tests a slow writeback operation, ensuring the device reports an intermediate `updating` state before the operation completes. This test requires the `pubber` to be launched with a `slowDevice` option. + +1. **Clean state:** The test sends a config update to ensure the target point has no `set_value`. +2. **Trigger writeback:** The test sends a standard config update to set the target point's value. +3. **Wait for `updating`:** The test waits for the device to report the point's `value_state` as `updating`. +4. **Wait for `applied`:** After the pre-configured 90-second delay, the test waits for the `value_state` to become `applied`. +5. **Verify value:** The test confirms the point's `present_value` matches the value that was set. + +Test passed. diff --git a/validator/src/main/java/com/google/daq/mqtt/sequencer/sequences/WritebackSequences.java b/validator/src/main/java/com/google/daq/mqtt/sequencer/sequences/WritebackSequences.java index f8aff532f7..f9bdf25929 100644 --- a/validator/src/main/java/com/google/daq/mqtt/sequencer/sequences/WritebackSequences.java +++ b/validator/src/main/java/com/google/daq/mqtt/sequencer/sequences/WritebackSequences.java @@ -1,9 +1,12 @@ package com.google.daq.mqtt.sequencer.sequences; +import static com.google.daq.mqtt.util.TimePeriodConstants.FOUR_MINUTES_MS; import static com.google.daq.mqtt.util.TimePeriodConstants.TWO_MINUTES_MS; import static java.lang.String.format; import static udmi.schema.Bucket.WRITEBACK; import static udmi.schema.FeatureDiscovery.FeatureStage.ALPHA; +import static udmi.schema.PointPointsetState.Value_state.APPLIED; +import static udmi.schema.PointPointsetState.Value_state.UPDATING; import com.google.daq.mqtt.sequencer.Feature; import com.google.daq.mqtt.sequencer.PointsetBase; @@ -14,7 +17,9 @@ import org.junit.Test; import udmi.schema.PointPointsetState.Value_state; import udmi.schema.PointsetEvents; +import udmi.schema.SystemConfig; import udmi.schema.TargetTestingModel; +import udmi.schema.TestingSystemConfig; /** * Validate UDMI writeback capabilities. @@ -109,5 +114,25 @@ public void writeback_invalid() { public void writeback_failure() { testTargetState(FAILURE_STATE); } + + @Test(timeout = FOUR_MINUTES_MS) + @Feature(stage = ALPHA, bucket = WRITEBACK) + @Summary("Tests a slow writeback operation by checking for an intermediate 'updating' state.") + public void writeback_slow() { + TargetTestingModel targetModel = getTarget(APPLIED_STATE); + String targetPoint = targetModel.target_point; + Object targetValue = targetModel.target_value; + + deviceConfig.pointset.points.get(targetPoint).set_value = null; + waitUntil(expectedValueState(DEFAULT_STATE), () -> valueStateIs(targetPoint, DEFAULT_STATE)); + + deviceConfig.pointset.points.get(targetPoint).set_value = targetValue; + + waitUntil(expectedValueState(UPDATING.value()), () -> valueStateIs(targetPoint, UPDATING.value())); + + waitUntil(expectedValueState(APPLIED_STATE), () -> valueStateIs(targetPoint, APPLIED_STATE)); + + waitUntil("target point to have target expected value", () -> presentValueIs(targetModel)); + } } From cd458960c092254f3359485f151db7319da07fd3 Mon Sep 17 00:00:00 2001 From: Nitish Jain Date: Wed, 13 Aug 2025 10:09:45 +0000 Subject: [PATCH 12/68] changes in writeback sequence --- .../daq/mqtt/sequencer/sequences/WritebackSequences.java | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/validator/src/main/java/com/google/daq/mqtt/sequencer/sequences/WritebackSequences.java b/validator/src/main/java/com/google/daq/mqtt/sequencer/sequences/WritebackSequences.java index f9bdf25929..e84b0a5350 100644 --- a/validator/src/main/java/com/google/daq/mqtt/sequencer/sequences/WritebackSequences.java +++ b/validator/src/main/java/com/google/daq/mqtt/sequencer/sequences/WritebackSequences.java @@ -5,7 +5,6 @@ import static java.lang.String.format; import static udmi.schema.Bucket.WRITEBACK; import static udmi.schema.FeatureDiscovery.FeatureStage.ALPHA; -import static udmi.schema.PointPointsetState.Value_state.APPLIED; import static udmi.schema.PointPointsetState.Value_state.UPDATING; import com.google.daq.mqtt.sequencer.Feature; @@ -17,9 +16,7 @@ import org.junit.Test; import udmi.schema.PointPointsetState.Value_state; import udmi.schema.PointsetEvents; -import udmi.schema.SystemConfig; import udmi.schema.TargetTestingModel; -import udmi.schema.TestingSystemConfig; /** * Validate UDMI writeback capabilities. @@ -128,11 +125,13 @@ public void writeback_slow() { deviceConfig.pointset.points.get(targetPoint).set_value = targetValue; - waitUntil(expectedValueState(UPDATING.value()), () -> valueStateIs(targetPoint, UPDATING.value())); + waitUntil(expectedValueState(UPDATING.value()), + () -> valueStateIs(targetPoint, UPDATING.value())); waitUntil(expectedValueState(APPLIED_STATE), () -> valueStateIs(targetPoint, APPLIED_STATE)); - waitUntil("target point to have target expected value", () -> presentValueIs(targetModel)); + waitUntil("target point to have target expected value", + () -> presentValueIs(targetModel)); } } From 545962f453838293d54f7991fbd7d9b194973bc4 Mon Sep 17 00:00:00 2001 From: Nitish Jain Date: Wed, 13 Aug 2025 10:32:21 +0000 Subject: [PATCH 13/68] Sequencer test for updating transitional state --- .../java/daq/pubber/impl/manager/PubberPointsetManager.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/pubber/src/main/java/daq/pubber/impl/manager/PubberPointsetManager.java b/pubber/src/main/java/daq/pubber/impl/manager/PubberPointsetManager.java index 6a0802bf44..bb5fc934bf 100644 --- a/pubber/src/main/java/daq/pubber/impl/manager/PubberPointsetManager.java +++ b/pubber/src/main/java/daq/pubber/impl/manager/PubberPointsetManager.java @@ -5,6 +5,7 @@ import com.google.common.collect.ImmutableMap; import com.google.common.collect.Sets; +import java.util.concurrent.TimeUnit; import daq.pubber.impl.PubberManager; import daq.pubber.impl.point.PubberRandomBoolean; import daq.pubber.impl.point.PubberRandomPoint; @@ -21,7 +22,6 @@ import udmi.schema.PointPointsetState.Value_state; import udmi.schema.PointsetConfig; import udmi.schema.PointsetState; -import java.util.concurrent.TimeUnit; import udmi.schema.PubberConfiguration; /** @@ -163,7 +163,8 @@ public void updatePointsetPointsConfig(PointsetConfig config) { } private void handleSlowWriteback(AbstractPoint point, PointPointsetConfig pointConfig) { - info(format("Applying slow writeback for point %s with %ds delay", point.getName(), SLOW_DEVICE_DELAY_SEC)); + info(format("Applying slow writeback for point %s with %ds delay", point.getName(), + SLOW_DEVICE_DELAY_SEC)); getPointsetState().points.get(point.getName()).value_state = Value_state.UPDATING; updateState(); From 58c24ddbadd04580cb2a06a8c7169ab7deaa9562 Mon Sep 17 00:00:00 2001 From: Nitish Jain Date: Fri, 15 Aug 2025 12:37:54 +0000 Subject: [PATCH 14/68] Sequencer test for updating transitional state --- .gencode_hash.txt | 6 +- etc/test_itemized.in | 3 +- gencode/docs/configuration_pubber.html | 59 ++++++++++++++++--- gencode/java/udmi/schema/PubberOptions.java | 23 +++++--- gencode/python/udmi/schema/options_pubber.py | 12 ++-- .../impl/manager/PubberPointsetManager.java | 33 +++++++---- schema/options_pubber.json | 8 ++- .../sequences/writeback_operation/sequence.md | 26 ++++++++ .../sequences/writeback_slow/sequence.md | 11 ---- .../sequences/WritebackSequences.java | 11 ++-- 10 files changed, 138 insertions(+), 54 deletions(-) create mode 100644 validator/sequences/writeback_operation/sequence.md delete mode 100644 validator/sequences/writeback_slow/sequence.md diff --git a/.gencode_hash.txt b/.gencode_hash.txt index 1f230fd5b0..6c3c66c8d1 100644 --- a/.gencode_hash.txt +++ b/.gencode_hash.txt @@ -4,7 +4,7 @@ c21266e8de23b6e8acfac16a177db782375bf71df470c343c3f8eb8b822ef56a gencode/docs/c 0bb798c8db6be37266946569a096e2f0b7520ee54d65e7e8d37675ef17820f14 gencode/docs/configuration_endpoint.html 7caf6f29bff7c358536444c0d8502169f708bcc6f32a3d0a8aae155708b2cd04 gencode/docs/configuration_execution.html 11b21f73b6a4065102968a4c09979639b8a7ea6efb20e40d52cd21b2a60167bb gencode/docs/configuration_pod.html -eecaaa7c4962e3c086884c8151673c266bb6a9b0c872c4c4252c5ad3e783e914 gencode/docs/configuration_pubber.html +e841d9c0f9a09be5a0c50249309a466e9498efbfa8a8fde5972fd6943badfec8 gencode/docs/configuration_pubber.html 1057fa40fb7a31a23bb2773d21c38cf4590a935bd8b5ea4218e695c6204f5dd9 gencode/docs/data_template.html 046ed76860a187d3e17a4d90a1dcea3462bece897e8726839bfeb7fcbdda78c0 gencode/docs/events.html 65a890087a21577db420cc26a6bfd878753b475a06cf56eb2037f5a04719cabf gencode/docs/events_discovery.html @@ -112,7 +112,7 @@ c73ad6dde0db8a520f3fee5a563c55a79fc7e6d1cd7875723b10c3d34036a46b gencode/java/u 9637f95e8a1185b1b028308a8caa2ca5a78cb46ae97f9cc11e2731066129540e gencode/java/udmi/schema/Position.java d87deaba67bb3272c528e3491d378bde059b626964a4a2aed15f5643305c2463 gencode/java/udmi/schema/Properties.java 4cdd5dc6b2e054a43f2e70adeb46ef8e3ff78288d4315923a925415f87e871aa gencode/java/udmi/schema/PubberConfiguration.java -7cbed874410e3394b9c52d0eb72d694ad66753cc999df9375ce81aa4fc9613a6 gencode/java/udmi/schema/PubberOptions.java +99811df06d7eb76c130a3585000a71c78a8086d7125d033867c0dc064077ecfa gencode/java/udmi/schema/PubberOptions.java cd2c7580a75391393c2f761f4434e4e7e83e2d2d1f35e9e62d69c19e65ea2557 gencode/java/udmi/schema/RefDiscovery.java 14faa115d13ee46d10935b13753bff85758f3b64b5136a59f60d36b5b541687c gencode/java/udmi/schema/SchemaValidationState.java fadf083200e73d46cfdec2f710d40e3d2bc4dbf05196e4d0900186e72b62d95e gencode/java/udmi/schema/Scoring.java @@ -208,7 +208,7 @@ b48ae013d203eb31cc388a084c0cc6f93d4d5534336d4da2ecbccd84a085ea2b gencode/python 5c50847e136a033ea511209238bb570499b43fbee6189dae06603132dcb9f01f gencode/python/udmi/schema/model_testing_target.py 7c9a755ae06c44fc2b8117d7918b6401ce08a7218b86033fb3320eda7286e581 gencode/python/udmi/schema/monitoring.py e7e0b1ff8a58b904f30169641e633abf9fe19420607a867eda371eb50a86304e gencode/python/udmi/schema/monitoring_metric.py -fbd5f5824867476fbaa9e8cd637cf8c95cb3fb8d6c2afa588b595cb18e4787ed gencode/python/udmi/schema/options_pubber.py +3c7f82653fda254006acd91daac666b66392401c9d0cbf9a2ca4d45c55490ea3 gencode/python/udmi/schema/options_pubber.py 6c5f3dd1c5ca9d821e3c48298af118fc7eafd97af9265dfd34b2ed8642efca77 gencode/python/udmi/schema/persistent_device.py a58f8c98e837a5b56126ca0f410e02f1e9cfcd80a8cb429e0ef522defab1f690 gencode/python/udmi/schema/properties.py a84e00db471b2038a473c2c83d72ea59b02c3d2bab56d38bc22435309f01e763 gencode/python/udmi/schema/query_cloud.py diff --git a/etc/test_itemized.in b/etc/test_itemized.in index a17e4b930d..63697124cd 100644 --- a/etc/test_itemized.in +++ b/etc/test_itemized.in @@ -10,7 +10,8 @@ TEST valid_serial_no msTimestamp TEST writeback_success extraPoint=filter_differential_pressure_setpoint TEST writeback_success noWriteback TEST writeback_success noPointState -TEST writeback_slow slowDevice +TEST writeback_operation slowWrite +TEST writeback_operation delayWrite TEST pointset_publish_interval fixedSampleRate=10 TEST system_min_loglevel fixedLogLevel=100 TEST system_mode_restart noPersist diff --git a/gencode/docs/configuration_pubber.html b/gencode/docs/configuration_pubber.html index 16677e9a39..bcd958df4c 100644 --- a/gencode/docs/configuration_pubber.html +++ b/gencode/docs/configuration_pubber.html @@ -3183,18 +3183,18 @@

-
+
-
+

- +

-
+
Type: boolean
-

If true, the pubber will simulate a 90-second delay for writeback operations.

+ slowWrite
Type: boolean
+

If true, the pubber will simulate a 10-second slow writeback operations.

+
+ + + + + + +
+
+
+
+
+
+
+

+ +

+
+ +
+
+ + Type: boolean
+

If true, the pubber will simulate a very slow (90 second) writeback operations.

diff --git a/gencode/java/udmi/schema/PubberOptions.java b/gencode/java/udmi/schema/PubberOptions.java index 793b128e2b..568101e798 100644 --- a/gencode/java/udmi/schema/PubberOptions.java +++ b/gencode/java/udmi/schema/PubberOptions.java @@ -52,7 +52,8 @@ "disableWriteback", "noWriteback", "fixedLogLevel", - "slowDevice", + "slowWrite", + "delayWrite", "softwareFirmwareValue" }) public class PubberOptions { @@ -142,12 +143,19 @@ public class PubberOptions { @JsonProperty("fixedLogLevel") public Integer fixedLogLevel; /** - * If true, the pubber will simulate a 90-second delay for writeback operations. + * If true, the pubber will simulate a 10-second slow writeback operations. * */ - @JsonProperty("slowDevice") - @JsonPropertyDescription("If true, the pubber will simulate a 90-second delay for writeback operations.") - public Boolean slowDevice; + @JsonProperty("slowWrite") + @JsonPropertyDescription("If true, the pubber will simulate a 10-second slow writeback operations.") + public Boolean slowWrite; + /** + * If true, the pubber will simulate a very slow (90 second) writeback operations. + * + */ + @JsonProperty("delayWrite") + @JsonPropertyDescription("If true, the pubber will simulate a very slow (90 second) writeback operations.") + public Boolean delayWrite; @JsonProperty("softwareFirmwareValue") public String softwareFirmwareValue; @@ -181,17 +189,18 @@ public int hashCode() { result = ((result* 31)+((this.redirectRegistry == null)? 0 :this.redirectRegistry.hashCode())); result = ((result* 31)+((this.noPointState == null)? 0 :this.noPointState.hashCode())); result = ((result* 31)+((this.disableWriteback == null)? 0 :this.disableWriteback.hashCode())); - result = ((result* 31)+((this.slowDevice == null)? 0 :this.slowDevice.hashCode())); result = ((result* 31)+((this.barfConfig == null)? 0 :this.barfConfig.hashCode())); result = ((result* 31)+((this.extraField == null)? 0 :this.extraField.hashCode())); result = ((result* 31)+((this.emptyMissing == null)? 0 :this.emptyMissing.hashCode())); result = ((result* 31)+((this.fixedSampleRate == null)? 0 :this.fixedSampleRate.hashCode())); result = ((result* 31)+((this.dupeState == null)? 0 :this.dupeState.hashCode())); result = ((result* 31)+((this.featureEnableSwap == null)? 0 :this.featureEnableSwap.hashCode())); + result = ((result* 31)+((this.delayWrite == null)? 0 :this.delayWrite.hashCode())); result = ((result* 31)+((this.extraDevice == null)? 0 :this.extraDevice.hashCode())); result = ((result* 31)+((this.noConfigAck == null)? 0 :this.noConfigAck.hashCode())); result = ((result* 31)+((this.badVersion == null)? 0 :this.badVersion.hashCode())); result = ((result* 31)+((this.fixedLogLevel == null)? 0 :this.fixedLogLevel.hashCode())); + result = ((result* 31)+((this.slowWrite == null)? 0 :this.slowWrite.hashCode())); result = ((result* 31)+((this.configStateDelay == null)? 0 :this.configStateDelay.hashCode())); return result; } @@ -205,7 +214,7 @@ public boolean equals(Object other) { return false; } PubberOptions rhs = ((PubberOptions) other); - return ((((((((((((((((((((((((((((((((((((((((this.skewClock == rhs.skewClock)||((this.skewClock!= null)&&this.skewClock.equals(rhs.skewClock)))&&((this.noPersist == rhs.noPersist)||((this.noPersist!= null)&&this.noPersist.equals(rhs.noPersist))))&&((this.noLastConfig == rhs.noLastConfig)||((this.noLastConfig!= null)&&this.noLastConfig.equals(rhs.noLastConfig))))&&((this.noLog == rhs.noLog)||((this.noLog!= null)&&this.noLog.equals(rhs.noLog))))&&((this.noHardware == rhs.noHardware)||((this.noHardware!= null)&&this.noHardware.equals(rhs.noHardware))))&&((this.messageTrace == rhs.messageTrace)||((this.messageTrace!= null)&&this.messageTrace.equals(rhs.messageTrace))))&&((this.softwareFirmwareValue == rhs.softwareFirmwareValue)||((this.softwareFirmwareValue!= null)&&this.softwareFirmwareValue.equals(rhs.softwareFirmwareValue))))&&((this.noWriteback == rhs.noWriteback)||((this.noWriteback!= null)&&this.noWriteback.equals(rhs.noWriteback))))&&((this.msTimestamp == rhs.msTimestamp)||((this.msTimestamp!= null)&&this.msTimestamp.equals(rhs.msTimestamp))))&&((this.noLastStart == rhs.noLastStart)||((this.noLastStart!= null)&&this.noLastStart.equals(rhs.noLastStart))))&&((this.badLevel == rhs.badLevel)||((this.badLevel!= null)&&this.badLevel.equals(rhs.badLevel))))&&((this.tweakState == rhs.tweakState)||((this.tweakState!= null)&&this.tweakState.equals(rhs.tweakState))))&&((this.spamState == rhs.spamState)||((this.spamState!= null)&&this.spamState.equals(rhs.spamState))))&&((this.noState == rhs.noState)||((this.noState!= null)&&this.noState.equals(rhs.noState))))&&((this.badState == rhs.badState)||((this.badState!= null)&&this.badState.equals(rhs.badState))))&&((this.baseState == rhs.baseState)||((this.baseState!= null)&&this.baseState.equals(rhs.baseState))))&&((this.noStatus == rhs.noStatus)||((this.noStatus!= null)&&this.noStatus.equals(rhs.noStatus))))&&((this.noFolder == rhs.noFolder)||((this.noFolder!= null)&&this.noFolder.equals(rhs.noFolder))))&&((this.noProxy == rhs.noProxy)||((this.noProxy!= null)&&this.noProxy.equals(rhs.noProxy))))&&((this.missingPoint == rhs.missingPoint)||((this.missingPoint!= null)&&this.missingPoint.equals(rhs.missingPoint))))&&((this.badCategory == rhs.badCategory)||((this.badCategory!= null)&&this.badCategory.equals(rhs.badCategory))))&&((this.extraPoint == rhs.extraPoint)||((this.extraPoint!= null)&&this.extraPoint.equals(rhs.extraPoint))))&&((this.badAddr == rhs.badAddr)||((this.badAddr!= null)&&this.badAddr.equals(rhs.badAddr))))&&((this.smokeCheck == rhs.smokeCheck)||((this.smokeCheck!= null)&&this.smokeCheck.equals(rhs.smokeCheck))))&&((this.redirectRegistry == rhs.redirectRegistry)||((this.redirectRegistry!= null)&&this.redirectRegistry.equals(rhs.redirectRegistry))))&&((this.noPointState == rhs.noPointState)||((this.noPointState!= null)&&this.noPointState.equals(rhs.noPointState))))&&((this.disableWriteback == rhs.disableWriteback)||((this.disableWriteback!= null)&&this.disableWriteback.equals(rhs.disableWriteback))))&&((this.slowDevice == rhs.slowDevice)||((this.slowDevice!= null)&&this.slowDevice.equals(rhs.slowDevice))))&&((this.barfConfig == rhs.barfConfig)||((this.barfConfig!= null)&&this.barfConfig.equals(rhs.barfConfig))))&&((this.extraField == rhs.extraField)||((this.extraField!= null)&&this.extraField.equals(rhs.extraField))))&&((this.emptyMissing == rhs.emptyMissing)||((this.emptyMissing!= null)&&this.emptyMissing.equals(rhs.emptyMissing))))&&((this.fixedSampleRate == rhs.fixedSampleRate)||((this.fixedSampleRate!= null)&&this.fixedSampleRate.equals(rhs.fixedSampleRate))))&&((this.dupeState == rhs.dupeState)||((this.dupeState!= null)&&this.dupeState.equals(rhs.dupeState))))&&((this.featureEnableSwap == rhs.featureEnableSwap)||((this.featureEnableSwap!= null)&&this.featureEnableSwap.equals(rhs.featureEnableSwap))))&&((this.extraDevice == rhs.extraDevice)||((this.extraDevice!= null)&&this.extraDevice.equals(rhs.extraDevice))))&&((this.noConfigAck == rhs.noConfigAck)||((this.noConfigAck!= null)&&this.noConfigAck.equals(rhs.noConfigAck))))&&((this.badVersion == rhs.badVersion)||((this.badVersion!= null)&&this.badVersion.equals(rhs.badVersion))))&&((this.fixedLogLevel == rhs.fixedLogLevel)||((this.fixedLogLevel!= null)&&this.fixedLogLevel.equals(rhs.fixedLogLevel))))&&((this.configStateDelay == rhs.configStateDelay)||((this.configStateDelay!= null)&&this.configStateDelay.equals(rhs.configStateDelay)))); + return (((((((((((((((((((((((((((((((((((((((((this.skewClock == rhs.skewClock)||((this.skewClock!= null)&&this.skewClock.equals(rhs.skewClock)))&&((this.noPersist == rhs.noPersist)||((this.noPersist!= null)&&this.noPersist.equals(rhs.noPersist))))&&((this.noLastConfig == rhs.noLastConfig)||((this.noLastConfig!= null)&&this.noLastConfig.equals(rhs.noLastConfig))))&&((this.noLog == rhs.noLog)||((this.noLog!= null)&&this.noLog.equals(rhs.noLog))))&&((this.noHardware == rhs.noHardware)||((this.noHardware!= null)&&this.noHardware.equals(rhs.noHardware))))&&((this.messageTrace == rhs.messageTrace)||((this.messageTrace!= null)&&this.messageTrace.equals(rhs.messageTrace))))&&((this.softwareFirmwareValue == rhs.softwareFirmwareValue)||((this.softwareFirmwareValue!= null)&&this.softwareFirmwareValue.equals(rhs.softwareFirmwareValue))))&&((this.noWriteback == rhs.noWriteback)||((this.noWriteback!= null)&&this.noWriteback.equals(rhs.noWriteback))))&&((this.msTimestamp == rhs.msTimestamp)||((this.msTimestamp!= null)&&this.msTimestamp.equals(rhs.msTimestamp))))&&((this.noLastStart == rhs.noLastStart)||((this.noLastStart!= null)&&this.noLastStart.equals(rhs.noLastStart))))&&((this.badLevel == rhs.badLevel)||((this.badLevel!= null)&&this.badLevel.equals(rhs.badLevel))))&&((this.tweakState == rhs.tweakState)||((this.tweakState!= null)&&this.tweakState.equals(rhs.tweakState))))&&((this.spamState == rhs.spamState)||((this.spamState!= null)&&this.spamState.equals(rhs.spamState))))&&((this.noState == rhs.noState)||((this.noState!= null)&&this.noState.equals(rhs.noState))))&&((this.badState == rhs.badState)||((this.badState!= null)&&this.badState.equals(rhs.badState))))&&((this.baseState == rhs.baseState)||((this.baseState!= null)&&this.baseState.equals(rhs.baseState))))&&((this.noStatus == rhs.noStatus)||((this.noStatus!= null)&&this.noStatus.equals(rhs.noStatus))))&&((this.noFolder == rhs.noFolder)||((this.noFolder!= null)&&this.noFolder.equals(rhs.noFolder))))&&((this.noProxy == rhs.noProxy)||((this.noProxy!= null)&&this.noProxy.equals(rhs.noProxy))))&&((this.missingPoint == rhs.missingPoint)||((this.missingPoint!= null)&&this.missingPoint.equals(rhs.missingPoint))))&&((this.badCategory == rhs.badCategory)||((this.badCategory!= null)&&this.badCategory.equals(rhs.badCategory))))&&((this.extraPoint == rhs.extraPoint)||((this.extraPoint!= null)&&this.extraPoint.equals(rhs.extraPoint))))&&((this.badAddr == rhs.badAddr)||((this.badAddr!= null)&&this.badAddr.equals(rhs.badAddr))))&&((this.smokeCheck == rhs.smokeCheck)||((this.smokeCheck!= null)&&this.smokeCheck.equals(rhs.smokeCheck))))&&((this.redirectRegistry == rhs.redirectRegistry)||((this.redirectRegistry!= null)&&this.redirectRegistry.equals(rhs.redirectRegistry))))&&((this.noPointState == rhs.noPointState)||((this.noPointState!= null)&&this.noPointState.equals(rhs.noPointState))))&&((this.disableWriteback == rhs.disableWriteback)||((this.disableWriteback!= null)&&this.disableWriteback.equals(rhs.disableWriteback))))&&((this.barfConfig == rhs.barfConfig)||((this.barfConfig!= null)&&this.barfConfig.equals(rhs.barfConfig))))&&((this.extraField == rhs.extraField)||((this.extraField!= null)&&this.extraField.equals(rhs.extraField))))&&((this.emptyMissing == rhs.emptyMissing)||((this.emptyMissing!= null)&&this.emptyMissing.equals(rhs.emptyMissing))))&&((this.fixedSampleRate == rhs.fixedSampleRate)||((this.fixedSampleRate!= null)&&this.fixedSampleRate.equals(rhs.fixedSampleRate))))&&((this.dupeState == rhs.dupeState)||((this.dupeState!= null)&&this.dupeState.equals(rhs.dupeState))))&&((this.featureEnableSwap == rhs.featureEnableSwap)||((this.featureEnableSwap!= null)&&this.featureEnableSwap.equals(rhs.featureEnableSwap))))&&((this.delayWrite == rhs.delayWrite)||((this.delayWrite!= null)&&this.delayWrite.equals(rhs.delayWrite))))&&((this.extraDevice == rhs.extraDevice)||((this.extraDevice!= null)&&this.extraDevice.equals(rhs.extraDevice))))&&((this.noConfigAck == rhs.noConfigAck)||((this.noConfigAck!= null)&&this.noConfigAck.equals(rhs.noConfigAck))))&&((this.badVersion == rhs.badVersion)||((this.badVersion!= null)&&this.badVersion.equals(rhs.badVersion))))&&((this.fixedLogLevel == rhs.fixedLogLevel)||((this.fixedLogLevel!= null)&&this.fixedLogLevel.equals(rhs.fixedLogLevel))))&&((this.slowWrite == rhs.slowWrite)||((this.slowWrite!= null)&&this.slowWrite.equals(rhs.slowWrite))))&&((this.configStateDelay == rhs.configStateDelay)||((this.configStateDelay!= null)&&this.configStateDelay.equals(rhs.configStateDelay)))); } } diff --git a/gencode/python/udmi/schema/options_pubber.py b/gencode/python/udmi/schema/options_pubber.py index 04e47810f2..e702bbfd20 100644 --- a/gencode/python/udmi/schema/options_pubber.py +++ b/gencode/python/udmi/schema/options_pubber.py @@ -42,7 +42,8 @@ def __init__(self): self.disableWriteback = None self.noWriteback = None self.fixedLogLevel = None - self.slowDevice = None + self.slowWrite = None + self.delayWrite = None self.softwareFirmwareValue = None @staticmethod @@ -87,7 +88,8 @@ def from_dict(source): result.disableWriteback = source.get('disableWriteback') result.noWriteback = source.get('noWriteback') result.fixedLogLevel = source.get('fixedLogLevel') - result.slowDevice = source.get('slowDevice') + result.slowWrite = source.get('slowWrite') + result.delayWrite = source.get('delayWrite') result.softwareFirmwareValue = source.get('softwareFirmwareValue') return result @@ -183,8 +185,10 @@ def to_dict(self): result['noWriteback'] = self.noWriteback # 5 if self.fixedLogLevel: result['fixedLogLevel'] = self.fixedLogLevel # 5 - if self.slowDevice: - result['slowDevice'] = self.slowDevice # 5 + if self.slowWrite: + result['slowWrite'] = self.slowWrite # 5 + if self.delayWrite: + result['delayWrite'] = self.delayWrite # 5 if self.softwareFirmwareValue: result['softwareFirmwareValue'] = self.softwareFirmwareValue # 5 return result diff --git a/pubber/src/main/java/daq/pubber/impl/manager/PubberPointsetManager.java b/pubber/src/main/java/daq/pubber/impl/manager/PubberPointsetManager.java index bb5fc934bf..50c9ba7cf9 100644 --- a/pubber/src/main/java/daq/pubber/impl/manager/PubberPointsetManager.java +++ b/pubber/src/main/java/daq/pubber/impl/manager/PubberPointsetManager.java @@ -32,7 +32,9 @@ public class PubberPointsetManager extends PubberManager implements PointsetMana private final ExtraPointsetEvent pointsetEvent = new ExtraPointsetEvent(); private final Map managedPoints = new HashMap<>(); private final ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1); - private static final int SLOW_DEVICE_DELAY_SEC = 90; + private static final int SLOW_WRITE_DELAY_SEC = 5; + private static final int TIMEOUT_WRITE_DELAY_SEC = 90; + private int pointsetUpdateCount = -1; private PointsetState pointsetState; @@ -143,13 +145,16 @@ public void updatePointsetPointsConfig(PointsetConfig config) { return; } - boolean slowDevice = getOptions().slowDevice != null && getOptions().slowDevice; + boolean slowWrite = getOptions().slowWrite != null && getOptions().slowWrite; + boolean delayWrite = getOptions().delayWrite != null && getOptions().delayWrite; getManagedPoints().forEach((pointName, point) -> { PointPointsetConfig pointConfig = config.points == null ? null : config.points.get(pointName); if (pointConfig != null && pointConfig.set_value != null) { - if (slowDevice) { - handleSlowWriteback(point, pointConfig); + if (delayWrite) { + handleDelayWriteback(point, pointConfig, TIMEOUT_WRITE_DELAY_SEC); + } else if (slowWrite) { + handleSlowWriteback(point, pointConfig, SLOW_WRITE_DELAY_SEC); } else { applyAndAckWriteback(point, pointConfig); } @@ -162,13 +167,22 @@ public void updatePointsetPointsConfig(PointsetConfig config) { getPointsetState().state_etag = config.state_etag; } - private void handleSlowWriteback(AbstractPoint point, PointPointsetConfig pointConfig) { - info(format("Applying slow writeback for point %s with %ds delay", point.getName(), - SLOW_DEVICE_DELAY_SEC)); + private void handleDelayWriteback(AbstractPoint point, PointPointsetConfig pointConfig, int delay) { + info(format("Applying delayed writeback for point %s with %ds delay", point.getName(), delay)); + scheduler.schedule(() -> { + try { + info(format("Completing delayed writeback for %s", point.getName())); + applyAndAckWriteback(point, pointConfig); + } catch (Exception e) { + error("Error during scheduled writeback for " + point.getName(), e); + } + }, delay, TimeUnit.SECONDS); + } + private void handleSlowWriteback(AbstractPoint point, PointPointsetConfig pointConfig, int delay) { + info(format("Applying slow writeback for point %s with %ds delay", point.getName(), delay)); getPointsetState().points.get(point.getName()).value_state = Value_state.UPDATING; updateState(); - scheduler.schedule(() -> { try { info(format("Completing slow writeback for %s", point.getName())); @@ -176,9 +190,8 @@ private void handleSlowWriteback(AbstractPoint point, PointPointsetConfig pointC } catch (Exception e) { error("Error during scheduled writeback for " + point.getName(), e); } - }, SLOW_DEVICE_DELAY_SEC, TimeUnit.SECONDS); + }, delay, TimeUnit.SECONDS); } - private void applyAndAckWriteback(AbstractPoint point, PointPointsetConfig pointConfig) { point.setConfig(pointConfig); getPointsetState().points.get(point.getName()).value_state = Value_state.APPLIED; diff --git a/schema/options_pubber.json b/schema/options_pubber.json index 6e0e2eaab2..642cae3469 100644 --- a/schema/options_pubber.json +++ b/schema/options_pubber.json @@ -117,9 +117,13 @@ "fixedLogLevel": { "type": "integer" }, - "slowDevice": { + "slowWrite": { "type": "boolean", - "description": "If true, the pubber will simulate a 90-second delay for writeback operations." + "description": "If true, the pubber will simulate a 10-second slow writeback operations." + }, + "delayWrite": { + "type": "boolean", + "description": "If true, the pubber will simulate a very slow (90 second) writeback operations." }, "softwareFirmwareValue": { "type": "string" diff --git a/validator/sequences/writeback_operation/sequence.md b/validator/sequences/writeback_operation/sequence.md new file mode 100644 index 0000000000..39512ed9dc --- /dev/null +++ b/validator/sequences/writeback_operation/sequence.md @@ -0,0 +1,26 @@ +## writeback_operation (ALPHA) + +Tests the UDMI writeback functionality, covering fast, slow, and delayed scenarios based on the pubber's startup options. + +### Default Behavior (Fast Operation) + +When run without any options, this test validates a standard, successful writeback operation. +1. **Clean state:** Ensures the target point has no `set_value`. +2. **Trigger writeback:** Sends a config update to set the target point's value. +3. **Wait for `applied`:** Waits for the device to report the point's `value_state` as `applied`. +4. **Verify value:** Confirms the point's `present_value` matches the value that was set. + +### `slowWrite` Option Behavior (Slow Operation) + +When the pubber is launched with the `slowWrite` option, this test validates the device's ability to handle long-running operations by reporting an intermediate `updating` state. +1. **Clean state:** Ensures the target point has no `set_value`. +2. **Trigger writeback:** Sends a standard config update to set the point's value. +3. **Wait for `updating`:** Waits for the device to report the `value_state` as `updating`. +4. **Wait for `applied`:** After a delay, waits for the `value_state` to become `applied`. +5. **Verify value:** Confirms the point's `present_value` matches the set value. + +### `delayWrite` Option Behavior (Failed/Timeout Operation) + +When the pubber is launched with the `delayWrite` option, this test validates that the system correctly handles a device that takes too long to respond. The pubber is configured to delay for 90 seconds, but the test will time out much sooner. The test is **skipped** after the timeout is confirmed, as this is the expected outcome for this scenario. + +Test passed. diff --git a/validator/sequences/writeback_slow/sequence.md b/validator/sequences/writeback_slow/sequence.md deleted file mode 100644 index 8d0bbf7514..0000000000 --- a/validator/sequences/writeback_slow/sequence.md +++ /dev/null @@ -1,11 +0,0 @@ -## writeback_slow (ALPHA) - -Tests a slow writeback operation, ensuring the device reports an intermediate `updating` state before the operation completes. This test requires the `pubber` to be launched with a `slowDevice` option. - -1. **Clean state:** The test sends a config update to ensure the target point has no `set_value`. -2. **Trigger writeback:** The test sends a standard config update to set the target point's value. -3. **Wait for `updating`:** The test waits for the device to report the point's `value_state` as `updating`. -4. **Wait for `applied`:** After the pre-configured 90-second delay, the test waits for the `value_state` to become `applied`. -5. **Verify value:** The test confirms the point's `present_value` matches the value that was set. - -Test passed. diff --git a/validator/src/main/java/com/google/daq/mqtt/sequencer/sequences/WritebackSequences.java b/validator/src/main/java/com/google/daq/mqtt/sequencer/sequences/WritebackSequences.java index e84b0a5350..2058e8a58f 100644 --- a/validator/src/main/java/com/google/daq/mqtt/sequencer/sequences/WritebackSequences.java +++ b/validator/src/main/java/com/google/daq/mqtt/sequencer/sequences/WritebackSequences.java @@ -114,8 +114,8 @@ public void writeback_failure() { @Test(timeout = FOUR_MINUTES_MS) @Feature(stage = ALPHA, bucket = WRITEBACK) - @Summary("Tests a slow writeback operation by checking for an intermediate 'updating' state.") - public void writeback_slow() { + @Summary("Tests fast, slow, and timeout writeback operations based on pubber options.") + public void writeback_operation() { TargetTestingModel targetModel = getTarget(APPLIED_STATE); String targetPoint = targetModel.target_point; Object targetValue = targetModel.target_value; @@ -125,13 +125,10 @@ public void writeback_slow() { deviceConfig.pointset.points.get(targetPoint).set_value = targetValue; - waitUntil(expectedValueState(UPDATING.value()), - () -> valueStateIs(targetPoint, UPDATING.value())); - + waitUntil(expectedValueState(UPDATING.value()), () -> valueStateIs(targetPoint, UPDATING.value())); waitUntil(expectedValueState(APPLIED_STATE), () -> valueStateIs(targetPoint, APPLIED_STATE)); + waitUntil("target point to have target expected value", () -> presentValueIs(targetModel)); - waitUntil("target point to have target expected value", - () -> presentValueIs(targetModel)); } } From 2ebe71782f1c58bbfd45406e49fd88b02618b71f Mon Sep 17 00:00:00 2001 From: Nitish Jain Date: Fri, 15 Aug 2025 18:07:50 +0000 Subject: [PATCH 15/68] Sequencer test for updating transitional state --- .../impl/manager/PubberPointsetManager.java | 58 +++++++------------ .../sequences/WritebackSequences.java | 13 ++++- 2 files changed, 34 insertions(+), 37 deletions(-) diff --git a/pubber/src/main/java/daq/pubber/impl/manager/PubberPointsetManager.java b/pubber/src/main/java/daq/pubber/impl/manager/PubberPointsetManager.java index 50c9ba7cf9..672024b7dd 100644 --- a/pubber/src/main/java/daq/pubber/impl/manager/PubberPointsetManager.java +++ b/pubber/src/main/java/daq/pubber/impl/manager/PubberPointsetManager.java @@ -138,64 +138,50 @@ private static PointPointsetModel makePointPointsetModel(int value, double toler } @Override - public void updatePointsetPointsConfig(PointsetConfig config) { - if (config == null) { - setPointsetState(null); - updateState(); + public void updatePointConfig(AbstractPoint point, PointPointsetConfig pointConfig) { + if (pointConfig == null || pointConfig.set_value == null) { return; } boolean slowWrite = getOptions().slowWrite != null && getOptions().slowWrite; boolean delayWrite = getOptions().delayWrite != null && getOptions().delayWrite; - getManagedPoints().forEach((pointName, point) -> { - PointPointsetConfig pointConfig = config.points == null ? null : config.points.get(pointName); - if (pointConfig != null && pointConfig.set_value != null) { - if (delayWrite) { - handleDelayWriteback(point, pointConfig, TIMEOUT_WRITE_DELAY_SEC); - } else if (slowWrite) { - handleSlowWriteback(point, pointConfig, SLOW_WRITE_DELAY_SEC); - } else { - applyAndAckWriteback(point, pointConfig); - } - } - }); - - if (syncPoints(config.points)) { - updateState(); + if (delayWrite) { + handleDelayWriteback(point, pointConfig, TIMEOUT_WRITE_DELAY_SEC); + } else if (slowWrite) { + handleSlowWriteback(point, pointConfig, SLOW_WRITE_DELAY_SEC); + } else { + // default implementation from the interface, ensuring we don't impact existing functionality. + PointsetManager.super.updatePointConfig(point, pointConfig); } - getPointsetState().state_etag = config.state_etag; } - private void handleDelayWriteback(AbstractPoint point, PointPointsetConfig pointConfig, int delay) { - info(format("Applying delayed writeback for point %s with %ds delay", point.getName(), delay)); + private void handleSlowWriteback(AbstractPoint point, PointPointsetConfig pointConfig, int delay) { + info(format("Applying slow writeback for point %s with %ds delay", point.getName(), delay)); + + getPointsetState().points.get(point.getName()).value_state = Value_state.UPDATING; + updateState(); + scheduler.schedule(() -> { try { - info(format("Completing delayed writeback for %s", point.getName())); - applyAndAckWriteback(point, pointConfig); + info(format("Completing slow writeback for %s", point.getName())); + // Use the default interface method to apply the final state. + PointsetManager.super.updatePointConfig(point, pointConfig); } catch (Exception e) { error("Error during scheduled writeback for " + point.getName(), e); } }, delay, TimeUnit.SECONDS); } - private void handleSlowWriteback(AbstractPoint point, PointPointsetConfig pointConfig, int delay) { - info(format("Applying slow writeback for point %s with %ds delay", point.getName(), delay)); - getPointsetState().points.get(point.getName()).value_state = Value_state.UPDATING; - updateState(); + private void handleDelayWriteback(AbstractPoint point, PointPointsetConfig pointConfig, int delay) { scheduler.schedule(() -> { try { - info(format("Completing slow writeback for %s", point.getName())); - applyAndAckWriteback(point, pointConfig); + info(format("Completing delayed writeback for %s", point.getName())); + // Use the default interface method to apply the final state. + PointsetManager.super.updatePointConfig(point, pointConfig); } catch (Exception e) { error("Error during scheduled writeback for " + point.getName(), e); } }, delay, TimeUnit.SECONDS); } - private void applyAndAckWriteback(AbstractPoint point, PointPointsetConfig pointConfig) { - point.setConfig(pointConfig); - getPointsetState().points.get(point.getName()).value_state = Value_state.APPLIED; - updateState(); - } - } diff --git a/validator/src/main/java/com/google/daq/mqtt/sequencer/sequences/WritebackSequences.java b/validator/src/main/java/com/google/daq/mqtt/sequencer/sequences/WritebackSequences.java index 2058e8a58f..28846b4b1a 100644 --- a/validator/src/main/java/com/google/daq/mqtt/sequencer/sequences/WritebackSequences.java +++ b/validator/src/main/java/com/google/daq/mqtt/sequencer/sequences/WritebackSequences.java @@ -125,7 +125,18 @@ public void writeback_operation() { deviceConfig.pointset.points.get(targetPoint).set_value = targetValue; - waitUntil(expectedValueState(UPDATING.value()), () -> valueStateIs(targetPoint, UPDATING.value())); + try { + waitUntil(expectedValueState(UPDATING.value()), + () -> valueStateIs(targetPoint, UPDATING.value())); + } catch (AbortMessageLoop exception) { + try { + waitUntil(expectedValueState(APPLIED_STATE), + () -> valueStateIs(targetPoint, APPLIED_STATE)); + } catch (AbortMessageLoop ex) { + skipTest("This is the fast writeback operation"); + } + skipTest("This is the delayed writeback operation"); + } waitUntil(expectedValueState(APPLIED_STATE), () -> valueStateIs(targetPoint, APPLIED_STATE)); waitUntil("target point to have target expected value", () -> presentValueIs(targetModel)); From 66cdee032b88269cc53ef0a0ba1da1dc0692c766 Mon Sep 17 00:00:00 2001 From: Nitish Jain Date: Sat, 16 Aug 2025 15:18:36 +0000 Subject: [PATCH 16/68] Sequencer test for updating transitional state --- .gencode_hash.txt | 4 ++-- gencode/docs/configuration_pubber.html | 4 ++-- gencode/java/udmi/schema/PubberOptions.java | 8 ++++---- .../daq/pubber/impl/manager/PubberPointsetManager.java | 9 +++++---- schema/options_pubber.json | 4 ++-- 5 files changed, 15 insertions(+), 14 deletions(-) diff --git a/.gencode_hash.txt b/.gencode_hash.txt index 6c3c66c8d1..d450b6ca76 100644 --- a/.gencode_hash.txt +++ b/.gencode_hash.txt @@ -4,7 +4,7 @@ c21266e8de23b6e8acfac16a177db782375bf71df470c343c3f8eb8b822ef56a gencode/docs/c 0bb798c8db6be37266946569a096e2f0b7520ee54d65e7e8d37675ef17820f14 gencode/docs/configuration_endpoint.html 7caf6f29bff7c358536444c0d8502169f708bcc6f32a3d0a8aae155708b2cd04 gencode/docs/configuration_execution.html 11b21f73b6a4065102968a4c09979639b8a7ea6efb20e40d52cd21b2a60167bb gencode/docs/configuration_pod.html -e841d9c0f9a09be5a0c50249309a466e9498efbfa8a8fde5972fd6943badfec8 gencode/docs/configuration_pubber.html +409933c1288264f540525d9ce88c8c777df14ab98135ce89915df69d34093176 gencode/docs/configuration_pubber.html 1057fa40fb7a31a23bb2773d21c38cf4590a935bd8b5ea4218e695c6204f5dd9 gencode/docs/data_template.html 046ed76860a187d3e17a4d90a1dcea3462bece897e8726839bfeb7fcbdda78c0 gencode/docs/events.html 65a890087a21577db420cc26a6bfd878753b475a06cf56eb2037f5a04719cabf gencode/docs/events_discovery.html @@ -112,7 +112,7 @@ c73ad6dde0db8a520f3fee5a563c55a79fc7e6d1cd7875723b10c3d34036a46b gencode/java/u 9637f95e8a1185b1b028308a8caa2ca5a78cb46ae97f9cc11e2731066129540e gencode/java/udmi/schema/Position.java d87deaba67bb3272c528e3491d378bde059b626964a4a2aed15f5643305c2463 gencode/java/udmi/schema/Properties.java 4cdd5dc6b2e054a43f2e70adeb46ef8e3ff78288d4315923a925415f87e871aa gencode/java/udmi/schema/PubberConfiguration.java -99811df06d7eb76c130a3585000a71c78a8086d7125d033867c0dc064077ecfa gencode/java/udmi/schema/PubberOptions.java +e25115bd0b7fd19c6c82d599ec71d5e5d335271e011b7a9a0a36bda6eae71e0c gencode/java/udmi/schema/PubberOptions.java cd2c7580a75391393c2f761f4434e4e7e83e2d2d1f35e9e62d69c19e65ea2557 gencode/java/udmi/schema/RefDiscovery.java 14faa115d13ee46d10935b13753bff85758f3b64b5136a59f60d36b5b541687c gencode/java/udmi/schema/SchemaValidationState.java fadf083200e73d46cfdec2f710d40e3d2bc4dbf05196e4d0900186e72b62d95e gencode/java/udmi/schema/Scoring.java diff --git a/gencode/docs/configuration_pubber.html b/gencode/docs/configuration_pubber.html index bcd958df4c..5b0e14379d 100644 --- a/gencode/docs/configuration_pubber.html +++ b/gencode/docs/configuration_pubber.html @@ -3212,7 +3212,7 @@

/> slowWrite

Type: boolean
-

If true, the pubber will simulate a 10-second slow writeback operations.

+

If true, the pubber will simulate a slow writeback operations.

@@ -3253,7 +3253,7 @@

/> delayWrite

Type: boolean
-

If true, the pubber will simulate a very slow (90 second) writeback operations.

+

If true, the pubber will simulate a delayed writeback operations, leading to timeout.

diff --git a/gencode/java/udmi/schema/PubberOptions.java b/gencode/java/udmi/schema/PubberOptions.java index 568101e798..0f25cda5ba 100644 --- a/gencode/java/udmi/schema/PubberOptions.java +++ b/gencode/java/udmi/schema/PubberOptions.java @@ -143,18 +143,18 @@ public class PubberOptions { @JsonProperty("fixedLogLevel") public Integer fixedLogLevel; /** - * If true, the pubber will simulate a 10-second slow writeback operations. + * If true, the pubber will simulate a slow writeback operations. * */ @JsonProperty("slowWrite") - @JsonPropertyDescription("If true, the pubber will simulate a 10-second slow writeback operations.") + @JsonPropertyDescription("If true, the pubber will simulate a slow writeback operations.") public Boolean slowWrite; /** - * If true, the pubber will simulate a very slow (90 second) writeback operations. + * If true, the pubber will simulate a delayed writeback operations, leading to timeout. * */ @JsonProperty("delayWrite") - @JsonPropertyDescription("If true, the pubber will simulate a very slow (90 second) writeback operations.") + @JsonPropertyDescription("If true, the pubber will simulate a delayed writeback operations, leading to timeout.") public Boolean delayWrite; @JsonProperty("softwareFirmwareValue") public String softwareFirmwareValue; diff --git a/pubber/src/main/java/daq/pubber/impl/manager/PubberPointsetManager.java b/pubber/src/main/java/daq/pubber/impl/manager/PubberPointsetManager.java index 672024b7dd..560fd2a5b6 100644 --- a/pubber/src/main/java/daq/pubber/impl/manager/PubberPointsetManager.java +++ b/pubber/src/main/java/daq/pubber/impl/manager/PubberPointsetManager.java @@ -5,7 +5,6 @@ import com.google.common.collect.ImmutableMap; import com.google.common.collect.Sets; -import java.util.concurrent.TimeUnit; import daq.pubber.impl.PubberManager; import daq.pubber.impl.point.PubberRandomBoolean; import daq.pubber.impl.point.PubberRandomPoint; @@ -14,13 +13,13 @@ import java.util.Set; import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; +import java.util.concurrent.TimeUnit; import udmi.lib.client.manager.PointsetManager; import udmi.lib.intf.AbstractPoint; import udmi.lib.intf.ManagerHost; import udmi.schema.PointPointsetConfig; import udmi.schema.PointPointsetModel; import udmi.schema.PointPointsetState.Value_state; -import udmi.schema.PointsetConfig; import udmi.schema.PointsetState; import udmi.schema.PubberConfiguration; @@ -156,7 +155,8 @@ public void updatePointConfig(AbstractPoint point, PointPointsetConfig pointConf } } - private void handleSlowWriteback(AbstractPoint point, PointPointsetConfig pointConfig, int delay) { + private void handleSlowWriteback(AbstractPoint point, + PointPointsetConfig pointConfig,int delay) { info(format("Applying slow writeback for point %s with %ds delay", point.getName(), delay)); getPointsetState().points.get(point.getName()).value_state = Value_state.UPDATING; @@ -173,7 +173,8 @@ private void handleSlowWriteback(AbstractPoint point, PointPointsetConfig pointC }, delay, TimeUnit.SECONDS); } - private void handleDelayWriteback(AbstractPoint point, PointPointsetConfig pointConfig, int delay) { + private void handleDelayWriteback(AbstractPoint point, + PointPointsetConfig pointConfig, int delay) { scheduler.schedule(() -> { try { info(format("Completing delayed writeback for %s", point.getName())); diff --git a/schema/options_pubber.json b/schema/options_pubber.json index 642cae3469..866bc2db73 100644 --- a/schema/options_pubber.json +++ b/schema/options_pubber.json @@ -119,11 +119,11 @@ }, "slowWrite": { "type": "boolean", - "description": "If true, the pubber will simulate a 10-second slow writeback operations." + "description": "If true, the pubber will simulate a slow writeback operations." }, "delayWrite": { "type": "boolean", - "description": "If true, the pubber will simulate a very slow (90 second) writeback operations." + "description": "If true, the pubber will simulate a delayed writeback operations, leading to timeout." }, "softwareFirmwareValue": { "type": "string" From 5120a8d49056c48ff24c24aa888999d7d2189786 Mon Sep 17 00:00:00 2001 From: Nitish Jain Date: Sun, 17 Aug 2025 10:47:42 +0000 Subject: [PATCH 17/68] Sequencer test for updating transitional state --- .../pubber/impl/manager/PubberPointsetManager.java | 6 +----- .../mqtt/sequencer/sequences/WritebackSequences.java | 12 ++++-------- 2 files changed, 5 insertions(+), 13 deletions(-) diff --git a/pubber/src/main/java/daq/pubber/impl/manager/PubberPointsetManager.java b/pubber/src/main/java/daq/pubber/impl/manager/PubberPointsetManager.java index 560fd2a5b6..a4e9bd990d 100644 --- a/pubber/src/main/java/daq/pubber/impl/manager/PubberPointsetManager.java +++ b/pubber/src/main/java/daq/pubber/impl/manager/PubberPointsetManager.java @@ -138,10 +138,6 @@ private static PointPointsetModel makePointPointsetModel(int value, double toler @Override public void updatePointConfig(AbstractPoint point, PointPointsetConfig pointConfig) { - if (pointConfig == null || pointConfig.set_value == null) { - return; - } - boolean slowWrite = getOptions().slowWrite != null && getOptions().slowWrite; boolean delayWrite = getOptions().delayWrite != null && getOptions().delayWrite; @@ -156,7 +152,7 @@ public void updatePointConfig(AbstractPoint point, PointPointsetConfig pointConf } private void handleSlowWriteback(AbstractPoint point, - PointPointsetConfig pointConfig,int delay) { + PointPointsetConfig pointConfig, int delay) { info(format("Applying slow writeback for point %s with %ds delay", point.getName(), delay)); getPointsetState().points.get(point.getName()).value_state = Value_state.UPDATING; diff --git a/validator/src/main/java/com/google/daq/mqtt/sequencer/sequences/WritebackSequences.java b/validator/src/main/java/com/google/daq/mqtt/sequencer/sequences/WritebackSequences.java index 28846b4b1a..089d1a5fca 100644 --- a/validator/src/main/java/com/google/daq/mqtt/sequencer/sequences/WritebackSequences.java +++ b/validator/src/main/java/com/google/daq/mqtt/sequencer/sequences/WritebackSequences.java @@ -128,14 +128,10 @@ public void writeback_operation() { try { waitUntil(expectedValueState(UPDATING.value()), () -> valueStateIs(targetPoint, UPDATING.value())); - } catch (AbortMessageLoop exception) { - try { - waitUntil(expectedValueState(APPLIED_STATE), - () -> valueStateIs(targetPoint, APPLIED_STATE)); - } catch (AbortMessageLoop ex) { - skipTest("This is the fast writeback operation"); - } - skipTest("This is the delayed writeback operation"); + } catch (RuntimeException exception) { + waitUntil(expectedValueState(APPLIED_STATE), + () -> valueStateIs(targetPoint, APPLIED_STATE)); + skipTest("fast writeback operation"); } waitUntil(expectedValueState(APPLIED_STATE), () -> valueStateIs(targetPoint, APPLIED_STATE)); waitUntil("target point to have target expected value", () -> presentValueIs(targetModel)); From 036c44e7e6fb7acb3d398c39dc49c3951ed403d4 Mon Sep 17 00:00:00 2001 From: Nitish Jain Date: Sun, 17 Aug 2025 12:40:27 +0000 Subject: [PATCH 18/68] sequencer changes --- etc/test_itemized.in | 4 ++-- pubber/src/main/java/daq/pubber/impl/PubberManager.java | 7 +++++++ .../daq/pubber/impl/manager/PubberPointsetManager.java | 5 +++-- 3 files changed, 12 insertions(+), 4 deletions(-) diff --git a/etc/test_itemized.in b/etc/test_itemized.in index 63697124cd..6162b696c6 100644 --- a/etc/test_itemized.in +++ b/etc/test_itemized.in @@ -10,8 +10,8 @@ TEST valid_serial_no msTimestamp TEST writeback_success extraPoint=filter_differential_pressure_setpoint TEST writeback_success noWriteback TEST writeback_success noPointState -TEST writeback_operation slowWrite -TEST writeback_operation delayWrite +TEST writeback_operation slowWrite=true +TEST writeback_operation delayWrite=true TEST pointset_publish_interval fixedSampleRate=10 TEST system_min_loglevel fixedLogLevel=100 TEST system_mode_restart noPersist diff --git a/pubber/src/main/java/daq/pubber/impl/PubberManager.java b/pubber/src/main/java/daq/pubber/impl/PubberManager.java index 1df729fb32..4520fb74fd 100644 --- a/pubber/src/main/java/daq/pubber/impl/PubberManager.java +++ b/pubber/src/main/java/daq/pubber/impl/PubberManager.java @@ -224,4 +224,11 @@ public boolean isExtraDevice() { return isTrue(options.extraDevice); } // + protected boolean isSlowWrite() { + return isTrue(options.slowWrite); + } + + protected boolean isDelayWrite() { + return isTrue(options.delayWrite); + } } diff --git a/pubber/src/main/java/daq/pubber/impl/manager/PubberPointsetManager.java b/pubber/src/main/java/daq/pubber/impl/manager/PubberPointsetManager.java index a4e9bd990d..ba8e126e07 100644 --- a/pubber/src/main/java/daq/pubber/impl/manager/PubberPointsetManager.java +++ b/pubber/src/main/java/daq/pubber/impl/manager/PubberPointsetManager.java @@ -138,9 +138,10 @@ private static PointPointsetModel makePointPointsetModel(int value, double toler @Override public void updatePointConfig(AbstractPoint point, PointPointsetConfig pointConfig) { - boolean slowWrite = getOptions().slowWrite != null && getOptions().slowWrite; - boolean delayWrite = getOptions().delayWrite != null && getOptions().delayWrite; + boolean slowWrite = isSlowWrite(); + boolean delayWrite = isDelayWrite(); + info("slowWrite : " + slowWrite); if (delayWrite) { handleDelayWriteback(point, pointConfig, TIMEOUT_WRITE_DELAY_SEC); } else if (slowWrite) { From d438a138c31462f2f521a4cf344aa143c23ccac0 Mon Sep 17 00:00:00 2001 From: Nitish Jain Date: Sun, 17 Aug 2025 12:40:27 +0000 Subject: [PATCH 19/68] sequencer changes --- etc/test_itemized.in | 4 ++-- pubber/src/main/java/daq/pubber/impl/PubberManager.java | 7 +++++++ .../daq/pubber/impl/manager/PubberPointsetManager.java | 4 ++-- 3 files changed, 11 insertions(+), 4 deletions(-) diff --git a/etc/test_itemized.in b/etc/test_itemized.in index 63697124cd..6162b696c6 100644 --- a/etc/test_itemized.in +++ b/etc/test_itemized.in @@ -10,8 +10,8 @@ TEST valid_serial_no msTimestamp TEST writeback_success extraPoint=filter_differential_pressure_setpoint TEST writeback_success noWriteback TEST writeback_success noPointState -TEST writeback_operation slowWrite -TEST writeback_operation delayWrite +TEST writeback_operation slowWrite=true +TEST writeback_operation delayWrite=true TEST pointset_publish_interval fixedSampleRate=10 TEST system_min_loglevel fixedLogLevel=100 TEST system_mode_restart noPersist diff --git a/pubber/src/main/java/daq/pubber/impl/PubberManager.java b/pubber/src/main/java/daq/pubber/impl/PubberManager.java index 1df729fb32..4520fb74fd 100644 --- a/pubber/src/main/java/daq/pubber/impl/PubberManager.java +++ b/pubber/src/main/java/daq/pubber/impl/PubberManager.java @@ -224,4 +224,11 @@ public boolean isExtraDevice() { return isTrue(options.extraDevice); } // + protected boolean isSlowWrite() { + return isTrue(options.slowWrite); + } + + protected boolean isDelayWrite() { + return isTrue(options.delayWrite); + } } diff --git a/pubber/src/main/java/daq/pubber/impl/manager/PubberPointsetManager.java b/pubber/src/main/java/daq/pubber/impl/manager/PubberPointsetManager.java index a4e9bd990d..df434c638e 100644 --- a/pubber/src/main/java/daq/pubber/impl/manager/PubberPointsetManager.java +++ b/pubber/src/main/java/daq/pubber/impl/manager/PubberPointsetManager.java @@ -138,8 +138,8 @@ private static PointPointsetModel makePointPointsetModel(int value, double toler @Override public void updatePointConfig(AbstractPoint point, PointPointsetConfig pointConfig) { - boolean slowWrite = getOptions().slowWrite != null && getOptions().slowWrite; - boolean delayWrite = getOptions().delayWrite != null && getOptions().delayWrite; + boolean slowWrite = isSlowWrite(); + boolean delayWrite = isDelayWrite(); if (delayWrite) { handleDelayWriteback(point, pointConfig, TIMEOUT_WRITE_DELAY_SEC); From f111bfa41edd10cc4604346dac4425834ca7f27b Mon Sep 17 00:00:00 2001 From: Nitish Jain Date: Sun, 17 Aug 2025 12:57:46 +0000 Subject: [PATCH 20/68] Sequencer test for updating transitional state --- pubber/src/main/java/daq/pubber/impl/PubberManager.java | 1 + .../java/daq/pubber/impl/manager/PubberPointsetManager.java | 5 ++--- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/pubber/src/main/java/daq/pubber/impl/PubberManager.java b/pubber/src/main/java/daq/pubber/impl/PubberManager.java index 4520fb74fd..839c41940d 100644 --- a/pubber/src/main/java/daq/pubber/impl/PubberManager.java +++ b/pubber/src/main/java/daq/pubber/impl/PubberManager.java @@ -224,6 +224,7 @@ public boolean isExtraDevice() { return isTrue(options.extraDevice); } // + protected boolean isSlowWrite() { return isTrue(options.slowWrite); } diff --git a/pubber/src/main/java/daq/pubber/impl/manager/PubberPointsetManager.java b/pubber/src/main/java/daq/pubber/impl/manager/PubberPointsetManager.java index ba8e126e07..037f96cfa1 100644 --- a/pubber/src/main/java/daq/pubber/impl/manager/PubberPointsetManager.java +++ b/pubber/src/main/java/daq/pubber/impl/manager/PubberPointsetManager.java @@ -31,8 +31,8 @@ public class PubberPointsetManager extends PubberManager implements PointsetMana private final ExtraPointsetEvent pointsetEvent = new ExtraPointsetEvent(); private final Map managedPoints = new HashMap<>(); private final ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1); - private static final int SLOW_WRITE_DELAY_SEC = 5; - private static final int TIMEOUT_WRITE_DELAY_SEC = 90; + private static final int SLOW_WRITE_DELAY_SEC = 3; + private static final int TIMEOUT_WRITE_DELAY_SEC = 12; private int pointsetUpdateCount = -1; @@ -141,7 +141,6 @@ public void updatePointConfig(AbstractPoint point, PointPointsetConfig pointConf boolean slowWrite = isSlowWrite(); boolean delayWrite = isDelayWrite(); - info("slowWrite : " + slowWrite); if (delayWrite) { handleDelayWriteback(point, pointConfig, TIMEOUT_WRITE_DELAY_SEC); } else if (slowWrite) { From 9763401ce1a78779f31958bf668cb594250662f3 Mon Sep 17 00:00:00 2001 From: Nitish Jain Date: Sun, 17 Aug 2025 13:06:44 +0000 Subject: [PATCH 21/68] Sequencer test for updating transitional state --- .../java/daq/pubber/impl/manager/PubberPointsetManager.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pubber/src/main/java/daq/pubber/impl/manager/PubberPointsetManager.java b/pubber/src/main/java/daq/pubber/impl/manager/PubberPointsetManager.java index 037f96cfa1..dc56cd542a 100644 --- a/pubber/src/main/java/daq/pubber/impl/manager/PubberPointsetManager.java +++ b/pubber/src/main/java/daq/pubber/impl/manager/PubberPointsetManager.java @@ -32,7 +32,7 @@ public class PubberPointsetManager extends PubberManager implements PointsetMana private final Map managedPoints = new HashMap<>(); private final ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1); private static final int SLOW_WRITE_DELAY_SEC = 3; - private static final int TIMEOUT_WRITE_DELAY_SEC = 12; + private static final int TIMEOUT_WRITE_DELAY_SEC = 30; private int pointsetUpdateCount = -1; From 7651530f57fa7f26b1f5aec0d38737a77411413b Mon Sep 17 00:00:00 2001 From: Nitish Jain Date: Sun, 17 Aug 2025 13:18:20 +0000 Subject: [PATCH 22/68] Sequencer test for updating transitional state --- .../java/daq/pubber/impl/manager/PubberPointsetManager.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pubber/src/main/java/daq/pubber/impl/manager/PubberPointsetManager.java b/pubber/src/main/java/daq/pubber/impl/manager/PubberPointsetManager.java index dc56cd542a..deaa7d1656 100644 --- a/pubber/src/main/java/daq/pubber/impl/manager/PubberPointsetManager.java +++ b/pubber/src/main/java/daq/pubber/impl/manager/PubberPointsetManager.java @@ -32,7 +32,7 @@ public class PubberPointsetManager extends PubberManager implements PointsetMana private final Map managedPoints = new HashMap<>(); private final ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1); private static final int SLOW_WRITE_DELAY_SEC = 3; - private static final int TIMEOUT_WRITE_DELAY_SEC = 30; + private static final int TIMEOUT_WRITE_DELAY_SEC = 60; private int pointsetUpdateCount = -1; From 52e8f8a8d8b6a9fd466d2a2224085361168c4b6c Mon Sep 17 00:00:00 2001 From: Nitish Jain Date: Wed, 20 Aug 2025 03:53:32 +0000 Subject: [PATCH 23/68] sequencer changes --- .../java/daq/pubber/impl/PubberManager.java | 4 +-- .../impl/manager/PubberPointsetManager.java | 14 +++++----- .../sequences/writeback_operation/sequence.md | 26 ------------------- .../sequences/WritebackSequences.java | 26 +++++++++++-------- 4 files changed, 24 insertions(+), 46 deletions(-) delete mode 100644 validator/sequences/writeback_operation/sequence.md diff --git a/pubber/src/main/java/daq/pubber/impl/PubberManager.java b/pubber/src/main/java/daq/pubber/impl/PubberManager.java index 839c41940d..441cfa433f 100644 --- a/pubber/src/main/java/daq/pubber/impl/PubberManager.java +++ b/pubber/src/main/java/daq/pubber/impl/PubberManager.java @@ -226,10 +226,10 @@ public boolean isExtraDevice() { // protected boolean isSlowWrite() { - return isTrue(options.slowWrite); + return options.slowWrite != null; } protected boolean isDelayWrite() { - return isTrue(options.delayWrite); + return options.delayWrite != null; } } diff --git a/pubber/src/main/java/daq/pubber/impl/manager/PubberPointsetManager.java b/pubber/src/main/java/daq/pubber/impl/manager/PubberPointsetManager.java index deaa7d1656..7f34621f35 100644 --- a/pubber/src/main/java/daq/pubber/impl/manager/PubberPointsetManager.java +++ b/pubber/src/main/java/daq/pubber/impl/manager/PubberPointsetManager.java @@ -144,16 +144,16 @@ public void updatePointConfig(AbstractPoint point, PointPointsetConfig pointConf if (delayWrite) { handleDelayWriteback(point, pointConfig, TIMEOUT_WRITE_DELAY_SEC); } else if (slowWrite) { - handleSlowWriteback(point, pointConfig, SLOW_WRITE_DELAY_SEC); + PointsetManager.super.updatePointConfig(point, pointConfig); } else { // default implementation from the interface, ensuring we don't impact existing functionality. - PointsetManager.super.updatePointConfig(point, pointConfig); + handleSlowWriteback(point, pointConfig, SLOW_WRITE_DELAY_SEC); } } private void handleSlowWriteback(AbstractPoint point, - PointPointsetConfig pointConfig, int delay) { - info(format("Applying slow writeback for point %s with %ds delay", point.getName(), delay)); + PointPointsetConfig pointConfig, int delaySec) { + info(format("Applying slow writeback for point %s with %ds delay", point.getName(), delaySec)); getPointsetState().points.get(point.getName()).value_state = Value_state.UPDATING; updateState(); @@ -166,11 +166,11 @@ private void handleSlowWriteback(AbstractPoint point, } catch (Exception e) { error("Error during scheduled writeback for " + point.getName(), e); } - }, delay, TimeUnit.SECONDS); + }, delaySec, TimeUnit.SECONDS); } private void handleDelayWriteback(AbstractPoint point, - PointPointsetConfig pointConfig, int delay) { + PointPointsetConfig pointConfig, int delaySec) { scheduler.schedule(() -> { try { info(format("Completing delayed writeback for %s", point.getName())); @@ -179,6 +179,6 @@ private void handleDelayWriteback(AbstractPoint point, } catch (Exception e) { error("Error during scheduled writeback for " + point.getName(), e); } - }, delay, TimeUnit.SECONDS); + }, delaySec, TimeUnit.SECONDS); } } diff --git a/validator/sequences/writeback_operation/sequence.md b/validator/sequences/writeback_operation/sequence.md deleted file mode 100644 index 39512ed9dc..0000000000 --- a/validator/sequences/writeback_operation/sequence.md +++ /dev/null @@ -1,26 +0,0 @@ -## writeback_operation (ALPHA) - -Tests the UDMI writeback functionality, covering fast, slow, and delayed scenarios based on the pubber's startup options. - -### Default Behavior (Fast Operation) - -When run without any options, this test validates a standard, successful writeback operation. -1. **Clean state:** Ensures the target point has no `set_value`. -2. **Trigger writeback:** Sends a config update to set the target point's value. -3. **Wait for `applied`:** Waits for the device to report the point's `value_state` as `applied`. -4. **Verify value:** Confirms the point's `present_value` matches the value that was set. - -### `slowWrite` Option Behavior (Slow Operation) - -When the pubber is launched with the `slowWrite` option, this test validates the device's ability to handle long-running operations by reporting an intermediate `updating` state. -1. **Clean state:** Ensures the target point has no `set_value`. -2. **Trigger writeback:** Sends a standard config update to set the point's value. -3. **Wait for `updating`:** Waits for the device to report the `value_state` as `updating`. -4. **Wait for `applied`:** After a delay, waits for the `value_state` to become `applied`. -5. **Verify value:** Confirms the point's `present_value` matches the set value. - -### `delayWrite` Option Behavior (Failed/Timeout Operation) - -When the pubber is launched with the `delayWrite` option, this test validates that the system correctly handles a device that takes too long to respond. The pubber is configured to delay for 90 seconds, but the test will time out much sooner. The test is **skipped** after the timeout is confirmed, as this is the expected outcome for this scenario. - -Test passed. diff --git a/validator/src/main/java/com/google/daq/mqtt/sequencer/sequences/WritebackSequences.java b/validator/src/main/java/com/google/daq/mqtt/sequencer/sequences/WritebackSequences.java index 089d1a5fca..13af8e31f0 100644 --- a/validator/src/main/java/com/google/daq/mqtt/sequencer/sequences/WritebackSequences.java +++ b/validator/src/main/java/com/google/daq/mqtt/sequencer/sequences/WritebackSequences.java @@ -7,9 +7,11 @@ import static udmi.schema.FeatureDiscovery.FeatureStage.ALPHA; import static udmi.schema.PointPointsetState.Value_state.UPDATING; + import com.google.daq.mqtt.sequencer.Feature; import com.google.daq.mqtt.sequencer.PointsetBase; import com.google.daq.mqtt.sequencer.Summary; +import java.time.Duration; import java.util.List; import java.util.Objects; import org.junit.Before; @@ -25,6 +27,7 @@ public class WritebackSequences extends PointsetBase { public static final String DEFAULT_STATE = null; private Object lastPresentValue; + private static final Duration UPDATING_WAIT_DURATION = Duration.ofSeconds(10); @Before public void setupExpectedParameters() { @@ -114,7 +117,7 @@ public void writeback_failure() { @Test(timeout = FOUR_MINUTES_MS) @Feature(stage = ALPHA, bucket = WRITEBACK) - @Summary("Tests fast, slow, and timeout writeback operations based on pubber options.") + @Summary("Implements writeback operations") public void writeback_operation() { TargetTestingModel targetModel = getTarget(APPLIED_STATE); String targetPoint = targetModel.target_point; @@ -124,18 +127,19 @@ public void writeback_operation() { waitUntil(expectedValueState(DEFAULT_STATE), () -> valueStateIs(targetPoint, DEFAULT_STATE)); deviceConfig.pointset.points.get(targetPoint).set_value = targetValue; + // Wait until the intermediate UPDATING state. In other cases, this should: + // 1. Skip if it ends up APPLIED too quickly. + // 2. Error out if it takes too long to get to UPDATING. + waitUntil(expectedValueState(UPDATING.value()), UPDATING_WAIT_DURATION, () -> { + String appliedCheck = valueStateIs(targetPoint, APPLIED_STATE); - try { - waitUntil(expectedValueState(UPDATING.value()), - () -> valueStateIs(targetPoint, UPDATING.value())); - } catch (RuntimeException exception) { - waitUntil(expectedValueState(APPLIED_STATE), - () -> valueStateIs(targetPoint, APPLIED_STATE)); - skipTest("fast writeback operation"); - } - waitUntil(expectedValueState(APPLIED_STATE), () -> valueStateIs(targetPoint, APPLIED_STATE)); - waitUntil("target point to have target expected value", () -> presentValueIs(targetModel)); + // TODO: Skip test isn't working correctly here, need to fix! + ifNullSkipTest(appliedCheck, "operation completed quickly"); + + return valueStateIs(targetPoint, UPDATING.value()); + }); + waitUntil(expectedValueState(APPLIED_STATE), () -> valueStateIs(targetPoint, APPLIED_STATE)); } } From 455e66768fc994e5ef126cc309c0eb475e30ac68 Mon Sep 17 00:00:00 2001 From: Nitish Jain Date: Wed, 20 Aug 2025 12:06:56 +0000 Subject: [PATCH 24/68] Sequencer test for updating transitional state --- etc/test_itemized.in | 4 ++-- gencode/java/udmi/schema/PubberOptions.java | 14 +++++------ gencode/python/udmi/schema/options_pubber.py | 8 +++---- .../java/daq/pubber/impl/PubberManager.java | 4 ++-- .../impl/manager/PubberPointsetManager.java | 11 ++++----- schema/options_pubber.json | 4 ++-- .../sequences/WritebackSequences.java | 24 +++++++++++-------- 7 files changed, 36 insertions(+), 33 deletions(-) diff --git a/etc/test_itemized.in b/etc/test_itemized.in index 6162b696c6..2597a63506 100644 --- a/etc/test_itemized.in +++ b/etc/test_itemized.in @@ -10,8 +10,8 @@ TEST valid_serial_no msTimestamp TEST writeback_success extraPoint=filter_differential_pressure_setpoint TEST writeback_success noWriteback TEST writeback_success noPointState -TEST writeback_operation slowWrite=true -TEST writeback_operation delayWrite=true +TEST writeback_operation fastWrite +TEST writeback_operation delayWrite TEST pointset_publish_interval fixedSampleRate=10 TEST system_min_loglevel fixedLogLevel=100 TEST system_mode_restart noPersist diff --git a/gencode/java/udmi/schema/PubberOptions.java b/gencode/java/udmi/schema/PubberOptions.java index 0f25cda5ba..2a44843b9b 100644 --- a/gencode/java/udmi/schema/PubberOptions.java +++ b/gencode/java/udmi/schema/PubberOptions.java @@ -52,7 +52,7 @@ "disableWriteback", "noWriteback", "fixedLogLevel", - "slowWrite", + "fastWrite", "delayWrite", "softwareFirmwareValue" }) @@ -143,12 +143,12 @@ public class PubberOptions { @JsonProperty("fixedLogLevel") public Integer fixedLogLevel; /** - * If true, the pubber will simulate a slow writeback operations. + * If true, the pubber will simulate a fast writeback operations. * */ - @JsonProperty("slowWrite") - @JsonPropertyDescription("If true, the pubber will simulate a slow writeback operations.") - public Boolean slowWrite; + @JsonProperty("fastWrite") + @JsonPropertyDescription("If true, the pubber will simulate a fast writeback operations.") + public Boolean fastWrite; /** * If true, the pubber will simulate a delayed writeback operations, leading to timeout. * @@ -179,6 +179,7 @@ public int hashCode() { result = ((result* 31)+((this.badState == null)? 0 :this.badState.hashCode())); result = ((result* 31)+((this.baseState == null)? 0 :this.baseState.hashCode())); result = ((result* 31)+((this.noStatus == null)? 0 :this.noStatus.hashCode())); + result = ((result* 31)+((this.fastWrite == null)? 0 :this.fastWrite.hashCode())); result = ((result* 31)+((this.noFolder == null)? 0 :this.noFolder.hashCode())); result = ((result* 31)+((this.noProxy == null)? 0 :this.noProxy.hashCode())); result = ((result* 31)+((this.missingPoint == null)? 0 :this.missingPoint.hashCode())); @@ -200,7 +201,6 @@ public int hashCode() { result = ((result* 31)+((this.noConfigAck == null)? 0 :this.noConfigAck.hashCode())); result = ((result* 31)+((this.badVersion == null)? 0 :this.badVersion.hashCode())); result = ((result* 31)+((this.fixedLogLevel == null)? 0 :this.fixedLogLevel.hashCode())); - result = ((result* 31)+((this.slowWrite == null)? 0 :this.slowWrite.hashCode())); result = ((result* 31)+((this.configStateDelay == null)? 0 :this.configStateDelay.hashCode())); return result; } @@ -214,7 +214,7 @@ public boolean equals(Object other) { return false; } PubberOptions rhs = ((PubberOptions) other); - return (((((((((((((((((((((((((((((((((((((((((this.skewClock == rhs.skewClock)||((this.skewClock!= null)&&this.skewClock.equals(rhs.skewClock)))&&((this.noPersist == rhs.noPersist)||((this.noPersist!= null)&&this.noPersist.equals(rhs.noPersist))))&&((this.noLastConfig == rhs.noLastConfig)||((this.noLastConfig!= null)&&this.noLastConfig.equals(rhs.noLastConfig))))&&((this.noLog == rhs.noLog)||((this.noLog!= null)&&this.noLog.equals(rhs.noLog))))&&((this.noHardware == rhs.noHardware)||((this.noHardware!= null)&&this.noHardware.equals(rhs.noHardware))))&&((this.messageTrace == rhs.messageTrace)||((this.messageTrace!= null)&&this.messageTrace.equals(rhs.messageTrace))))&&((this.softwareFirmwareValue == rhs.softwareFirmwareValue)||((this.softwareFirmwareValue!= null)&&this.softwareFirmwareValue.equals(rhs.softwareFirmwareValue))))&&((this.noWriteback == rhs.noWriteback)||((this.noWriteback!= null)&&this.noWriteback.equals(rhs.noWriteback))))&&((this.msTimestamp == rhs.msTimestamp)||((this.msTimestamp!= null)&&this.msTimestamp.equals(rhs.msTimestamp))))&&((this.noLastStart == rhs.noLastStart)||((this.noLastStart!= null)&&this.noLastStart.equals(rhs.noLastStart))))&&((this.badLevel == rhs.badLevel)||((this.badLevel!= null)&&this.badLevel.equals(rhs.badLevel))))&&((this.tweakState == rhs.tweakState)||((this.tweakState!= null)&&this.tweakState.equals(rhs.tweakState))))&&((this.spamState == rhs.spamState)||((this.spamState!= null)&&this.spamState.equals(rhs.spamState))))&&((this.noState == rhs.noState)||((this.noState!= null)&&this.noState.equals(rhs.noState))))&&((this.badState == rhs.badState)||((this.badState!= null)&&this.badState.equals(rhs.badState))))&&((this.baseState == rhs.baseState)||((this.baseState!= null)&&this.baseState.equals(rhs.baseState))))&&((this.noStatus == rhs.noStatus)||((this.noStatus!= null)&&this.noStatus.equals(rhs.noStatus))))&&((this.noFolder == rhs.noFolder)||((this.noFolder!= null)&&this.noFolder.equals(rhs.noFolder))))&&((this.noProxy == rhs.noProxy)||((this.noProxy!= null)&&this.noProxy.equals(rhs.noProxy))))&&((this.missingPoint == rhs.missingPoint)||((this.missingPoint!= null)&&this.missingPoint.equals(rhs.missingPoint))))&&((this.badCategory == rhs.badCategory)||((this.badCategory!= null)&&this.badCategory.equals(rhs.badCategory))))&&((this.extraPoint == rhs.extraPoint)||((this.extraPoint!= null)&&this.extraPoint.equals(rhs.extraPoint))))&&((this.badAddr == rhs.badAddr)||((this.badAddr!= null)&&this.badAddr.equals(rhs.badAddr))))&&((this.smokeCheck == rhs.smokeCheck)||((this.smokeCheck!= null)&&this.smokeCheck.equals(rhs.smokeCheck))))&&((this.redirectRegistry == rhs.redirectRegistry)||((this.redirectRegistry!= null)&&this.redirectRegistry.equals(rhs.redirectRegistry))))&&((this.noPointState == rhs.noPointState)||((this.noPointState!= null)&&this.noPointState.equals(rhs.noPointState))))&&((this.disableWriteback == rhs.disableWriteback)||((this.disableWriteback!= null)&&this.disableWriteback.equals(rhs.disableWriteback))))&&((this.barfConfig == rhs.barfConfig)||((this.barfConfig!= null)&&this.barfConfig.equals(rhs.barfConfig))))&&((this.extraField == rhs.extraField)||((this.extraField!= null)&&this.extraField.equals(rhs.extraField))))&&((this.emptyMissing == rhs.emptyMissing)||((this.emptyMissing!= null)&&this.emptyMissing.equals(rhs.emptyMissing))))&&((this.fixedSampleRate == rhs.fixedSampleRate)||((this.fixedSampleRate!= null)&&this.fixedSampleRate.equals(rhs.fixedSampleRate))))&&((this.dupeState == rhs.dupeState)||((this.dupeState!= null)&&this.dupeState.equals(rhs.dupeState))))&&((this.featureEnableSwap == rhs.featureEnableSwap)||((this.featureEnableSwap!= null)&&this.featureEnableSwap.equals(rhs.featureEnableSwap))))&&((this.delayWrite == rhs.delayWrite)||((this.delayWrite!= null)&&this.delayWrite.equals(rhs.delayWrite))))&&((this.extraDevice == rhs.extraDevice)||((this.extraDevice!= null)&&this.extraDevice.equals(rhs.extraDevice))))&&((this.noConfigAck == rhs.noConfigAck)||((this.noConfigAck!= null)&&this.noConfigAck.equals(rhs.noConfigAck))))&&((this.badVersion == rhs.badVersion)||((this.badVersion!= null)&&this.badVersion.equals(rhs.badVersion))))&&((this.fixedLogLevel == rhs.fixedLogLevel)||((this.fixedLogLevel!= null)&&this.fixedLogLevel.equals(rhs.fixedLogLevel))))&&((this.slowWrite == rhs.slowWrite)||((this.slowWrite!= null)&&this.slowWrite.equals(rhs.slowWrite))))&&((this.configStateDelay == rhs.configStateDelay)||((this.configStateDelay!= null)&&this.configStateDelay.equals(rhs.configStateDelay)))); + return (((((((((((((((((((((((((((((((((((((((((this.skewClock == rhs.skewClock)||((this.skewClock!= null)&&this.skewClock.equals(rhs.skewClock)))&&((this.noPersist == rhs.noPersist)||((this.noPersist!= null)&&this.noPersist.equals(rhs.noPersist))))&&((this.noLastConfig == rhs.noLastConfig)||((this.noLastConfig!= null)&&this.noLastConfig.equals(rhs.noLastConfig))))&&((this.noLog == rhs.noLog)||((this.noLog!= null)&&this.noLog.equals(rhs.noLog))))&&((this.noHardware == rhs.noHardware)||((this.noHardware!= null)&&this.noHardware.equals(rhs.noHardware))))&&((this.messageTrace == rhs.messageTrace)||((this.messageTrace!= null)&&this.messageTrace.equals(rhs.messageTrace))))&&((this.softwareFirmwareValue == rhs.softwareFirmwareValue)||((this.softwareFirmwareValue!= null)&&this.softwareFirmwareValue.equals(rhs.softwareFirmwareValue))))&&((this.noWriteback == rhs.noWriteback)||((this.noWriteback!= null)&&this.noWriteback.equals(rhs.noWriteback))))&&((this.msTimestamp == rhs.msTimestamp)||((this.msTimestamp!= null)&&this.msTimestamp.equals(rhs.msTimestamp))))&&((this.noLastStart == rhs.noLastStart)||((this.noLastStart!= null)&&this.noLastStart.equals(rhs.noLastStart))))&&((this.badLevel == rhs.badLevel)||((this.badLevel!= null)&&this.badLevel.equals(rhs.badLevel))))&&((this.tweakState == rhs.tweakState)||((this.tweakState!= null)&&this.tweakState.equals(rhs.tweakState))))&&((this.spamState == rhs.spamState)||((this.spamState!= null)&&this.spamState.equals(rhs.spamState))))&&((this.noState == rhs.noState)||((this.noState!= null)&&this.noState.equals(rhs.noState))))&&((this.badState == rhs.badState)||((this.badState!= null)&&this.badState.equals(rhs.badState))))&&((this.baseState == rhs.baseState)||((this.baseState!= null)&&this.baseState.equals(rhs.baseState))))&&((this.noStatus == rhs.noStatus)||((this.noStatus!= null)&&this.noStatus.equals(rhs.noStatus))))&&((this.fastWrite == rhs.fastWrite)||((this.fastWrite!= null)&&this.fastWrite.equals(rhs.fastWrite))))&&((this.noFolder == rhs.noFolder)||((this.noFolder!= null)&&this.noFolder.equals(rhs.noFolder))))&&((this.noProxy == rhs.noProxy)||((this.noProxy!= null)&&this.noProxy.equals(rhs.noProxy))))&&((this.missingPoint == rhs.missingPoint)||((this.missingPoint!= null)&&this.missingPoint.equals(rhs.missingPoint))))&&((this.badCategory == rhs.badCategory)||((this.badCategory!= null)&&this.badCategory.equals(rhs.badCategory))))&&((this.extraPoint == rhs.extraPoint)||((this.extraPoint!= null)&&this.extraPoint.equals(rhs.extraPoint))))&&((this.badAddr == rhs.badAddr)||((this.badAddr!= null)&&this.badAddr.equals(rhs.badAddr))))&&((this.smokeCheck == rhs.smokeCheck)||((this.smokeCheck!= null)&&this.smokeCheck.equals(rhs.smokeCheck))))&&((this.redirectRegistry == rhs.redirectRegistry)||((this.redirectRegistry!= null)&&this.redirectRegistry.equals(rhs.redirectRegistry))))&&((this.noPointState == rhs.noPointState)||((this.noPointState!= null)&&this.noPointState.equals(rhs.noPointState))))&&((this.disableWriteback == rhs.disableWriteback)||((this.disableWriteback!= null)&&this.disableWriteback.equals(rhs.disableWriteback))))&&((this.barfConfig == rhs.barfConfig)||((this.barfConfig!= null)&&this.barfConfig.equals(rhs.barfConfig))))&&((this.extraField == rhs.extraField)||((this.extraField!= null)&&this.extraField.equals(rhs.extraField))))&&((this.emptyMissing == rhs.emptyMissing)||((this.emptyMissing!= null)&&this.emptyMissing.equals(rhs.emptyMissing))))&&((this.fixedSampleRate == rhs.fixedSampleRate)||((this.fixedSampleRate!= null)&&this.fixedSampleRate.equals(rhs.fixedSampleRate))))&&((this.dupeState == rhs.dupeState)||((this.dupeState!= null)&&this.dupeState.equals(rhs.dupeState))))&&((this.featureEnableSwap == rhs.featureEnableSwap)||((this.featureEnableSwap!= null)&&this.featureEnableSwap.equals(rhs.featureEnableSwap))))&&((this.delayWrite == rhs.delayWrite)||((this.delayWrite!= null)&&this.delayWrite.equals(rhs.delayWrite))))&&((this.extraDevice == rhs.extraDevice)||((this.extraDevice!= null)&&this.extraDevice.equals(rhs.extraDevice))))&&((this.noConfigAck == rhs.noConfigAck)||((this.noConfigAck!= null)&&this.noConfigAck.equals(rhs.noConfigAck))))&&((this.badVersion == rhs.badVersion)||((this.badVersion!= null)&&this.badVersion.equals(rhs.badVersion))))&&((this.fixedLogLevel == rhs.fixedLogLevel)||((this.fixedLogLevel!= null)&&this.fixedLogLevel.equals(rhs.fixedLogLevel))))&&((this.configStateDelay == rhs.configStateDelay)||((this.configStateDelay!= null)&&this.configStateDelay.equals(rhs.configStateDelay)))); } } diff --git a/gencode/python/udmi/schema/options_pubber.py b/gencode/python/udmi/schema/options_pubber.py index e702bbfd20..0555c522d3 100644 --- a/gencode/python/udmi/schema/options_pubber.py +++ b/gencode/python/udmi/schema/options_pubber.py @@ -42,7 +42,7 @@ def __init__(self): self.disableWriteback = None self.noWriteback = None self.fixedLogLevel = None - self.slowWrite = None + self.fastWrite = None self.delayWrite = None self.softwareFirmwareValue = None @@ -88,7 +88,7 @@ def from_dict(source): result.disableWriteback = source.get('disableWriteback') result.noWriteback = source.get('noWriteback') result.fixedLogLevel = source.get('fixedLogLevel') - result.slowWrite = source.get('slowWrite') + result.fastWrite = source.get('fastWrite') result.delayWrite = source.get('delayWrite') result.softwareFirmwareValue = source.get('softwareFirmwareValue') return result @@ -185,8 +185,8 @@ def to_dict(self): result['noWriteback'] = self.noWriteback # 5 if self.fixedLogLevel: result['fixedLogLevel'] = self.fixedLogLevel # 5 - if self.slowWrite: - result['slowWrite'] = self.slowWrite # 5 + if self.fastWrite: + result['fastWrite'] = self.fastWrite # 5 if self.delayWrite: result['delayWrite'] = self.delayWrite # 5 if self.softwareFirmwareValue: diff --git a/pubber/src/main/java/daq/pubber/impl/PubberManager.java b/pubber/src/main/java/daq/pubber/impl/PubberManager.java index 441cfa433f..275c121c8e 100644 --- a/pubber/src/main/java/daq/pubber/impl/PubberManager.java +++ b/pubber/src/main/java/daq/pubber/impl/PubberManager.java @@ -225,8 +225,8 @@ public boolean isExtraDevice() { } // - protected boolean isSlowWrite() { - return options.slowWrite != null; + protected boolean isFastWrite() { + return options.fastWrite != null; } protected boolean isDelayWrite() { diff --git a/pubber/src/main/java/daq/pubber/impl/manager/PubberPointsetManager.java b/pubber/src/main/java/daq/pubber/impl/manager/PubberPointsetManager.java index 7f34621f35..f41e7b5b01 100644 --- a/pubber/src/main/java/daq/pubber/impl/manager/PubberPointsetManager.java +++ b/pubber/src/main/java/daq/pubber/impl/manager/PubberPointsetManager.java @@ -138,15 +138,14 @@ private static PointPointsetModel makePointPointsetModel(int value, double toler @Override public void updatePointConfig(AbstractPoint point, PointPointsetConfig pointConfig) { - boolean slowWrite = isSlowWrite(); - boolean delayWrite = isDelayWrite(); + boolean isFastWrite = isFastWrite(); + boolean isDelayWrite = isDelayWrite(); - if (delayWrite) { - handleDelayWriteback(point, pointConfig, TIMEOUT_WRITE_DELAY_SEC); - } else if (slowWrite) { + if (isFastWrite) { PointsetManager.super.updatePointConfig(point, pointConfig); + } else if (isDelayWrite) { + handleDelayWriteback(point, pointConfig, TIMEOUT_WRITE_DELAY_SEC); } else { - // default implementation from the interface, ensuring we don't impact existing functionality. handleSlowWriteback(point, pointConfig, SLOW_WRITE_DELAY_SEC); } } diff --git a/schema/options_pubber.json b/schema/options_pubber.json index 866bc2db73..6eac64449e 100644 --- a/schema/options_pubber.json +++ b/schema/options_pubber.json @@ -117,9 +117,9 @@ "fixedLogLevel": { "type": "integer" }, - "slowWrite": { + "fastWrite": { "type": "boolean", - "description": "If true, the pubber will simulate a slow writeback operations." + "description": "If true, the pubber will simulate a fast writeback operations." }, "delayWrite": { "type": "boolean", diff --git a/validator/src/main/java/com/google/daq/mqtt/sequencer/sequences/WritebackSequences.java b/validator/src/main/java/com/google/daq/mqtt/sequencer/sequences/WritebackSequences.java index 13af8e31f0..f621ad4a36 100644 --- a/validator/src/main/java/com/google/daq/mqtt/sequencer/sequences/WritebackSequences.java +++ b/validator/src/main/java/com/google/daq/mqtt/sequencer/sequences/WritebackSequences.java @@ -28,6 +28,7 @@ public class WritebackSequences extends PointsetBase { public static final String DEFAULT_STATE = null; private Object lastPresentValue; private static final Duration UPDATING_WAIT_DURATION = Duration.ofSeconds(10); + private static final Duration MAX_WAIT_TIME = Duration.ofSeconds(25); @Before public void setupExpectedParameters() { @@ -98,7 +99,7 @@ private TargetTestingModel testTargetState(String targetState) { deviceConfig.pointset.points.get(targetPoint).set_value = targetValue; - waitUntil(expectedValueState(targetState), () -> valueStateIs(targetPoint, targetState)); + waitUntil(expectedValueState(targetState), MAX_WAIT_TIME, () -> valueStateIs(targetPoint, targetState)); return targetModel; } @@ -130,15 +131,18 @@ public void writeback_operation() { // Wait until the intermediate UPDATING state. In other cases, this should: // 1. Skip if it ends up APPLIED too quickly. // 2. Error out if it takes too long to get to UPDATING. - waitUntil(expectedValueState(UPDATING.value()), UPDATING_WAIT_DURATION, () -> { - String appliedCheck = valueStateIs(targetPoint, APPLIED_STATE); - - // TODO: Skip test isn't working correctly here, need to fix! - ifNullSkipTest(appliedCheck, "operation completed quickly"); - - return valueStateIs(targetPoint, UPDATING.value()); - }); - + try { + waitUntil(expectedValueState(UPDATING.value()), UPDATING_WAIT_DURATION, () -> { + String appliedCheck = valueStateIs(targetPoint, APPLIED_STATE); + + ifNullSkipTest(appliedCheck, "operation completed quickly"); + return valueStateIs(targetPoint, UPDATING.value()); + }); + } catch (RuntimeException e) { + if (!e.getMessage().isBlank() && e.getMessage().equals("operation completed quickly")) { + skipTest("operation completed quickly"); + } + } waitUntil(expectedValueState(APPLIED_STATE), () -> valueStateIs(targetPoint, APPLIED_STATE)); } } From 38d873f361e3dff2dfba2d8cb0b76060fb9aee0f Mon Sep 17 00:00:00 2001 From: Nitish Jain Date: Wed, 20 Aug 2025 13:11:23 +0000 Subject: [PATCH 25/68] sequencer changes --- .../daq/mqtt/sequencer/sequences/WritebackSequences.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/validator/src/main/java/com/google/daq/mqtt/sequencer/sequences/WritebackSequences.java b/validator/src/main/java/com/google/daq/mqtt/sequencer/sequences/WritebackSequences.java index f621ad4a36..fe5e5e638c 100644 --- a/validator/src/main/java/com/google/daq/mqtt/sequencer/sequences/WritebackSequences.java +++ b/validator/src/main/java/com/google/daq/mqtt/sequencer/sequences/WritebackSequences.java @@ -7,7 +7,6 @@ import static udmi.schema.FeatureDiscovery.FeatureStage.ALPHA; import static udmi.schema.PointPointsetState.Value_state.UPDATING; - import com.google.daq.mqtt.sequencer.Feature; import com.google.daq.mqtt.sequencer.PointsetBase; import com.google.daq.mqtt.sequencer.Summary; @@ -99,7 +98,8 @@ private TargetTestingModel testTargetState(String targetState) { deviceConfig.pointset.points.get(targetPoint).set_value = targetValue; - waitUntil(expectedValueState(targetState), MAX_WAIT_TIME, () -> valueStateIs(targetPoint, targetState)); + waitUntil(expectedValueState(targetState), MAX_WAIT_TIME, + () -> valueStateIs(targetPoint, targetState)); return targetModel; } From f6769c1376416914f9fdf26348822ddfa4e352df Mon Sep 17 00:00:00 2001 From: Nitish Jain Date: Wed, 20 Aug 2025 14:59:13 +0000 Subject: [PATCH 26/68] Sequencer test for updating transitional state --- .gencode_hash.txt | 6 +++--- gencode/docs/configuration_pubber.html | 18 +++++++++--------- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/.gencode_hash.txt b/.gencode_hash.txt index d450b6ca76..76eb9ec9e6 100644 --- a/.gencode_hash.txt +++ b/.gencode_hash.txt @@ -4,7 +4,7 @@ c21266e8de23b6e8acfac16a177db782375bf71df470c343c3f8eb8b822ef56a gencode/docs/c 0bb798c8db6be37266946569a096e2f0b7520ee54d65e7e8d37675ef17820f14 gencode/docs/configuration_endpoint.html 7caf6f29bff7c358536444c0d8502169f708bcc6f32a3d0a8aae155708b2cd04 gencode/docs/configuration_execution.html 11b21f73b6a4065102968a4c09979639b8a7ea6efb20e40d52cd21b2a60167bb gencode/docs/configuration_pod.html -409933c1288264f540525d9ce88c8c777df14ab98135ce89915df69d34093176 gencode/docs/configuration_pubber.html +582fd70f63c3872eb650189891fbb8bafe16395a5633e94a94d7c2bea3030a48 gencode/docs/configuration_pubber.html 1057fa40fb7a31a23bb2773d21c38cf4590a935bd8b5ea4218e695c6204f5dd9 gencode/docs/data_template.html 046ed76860a187d3e17a4d90a1dcea3462bece897e8726839bfeb7fcbdda78c0 gencode/docs/events.html 65a890087a21577db420cc26a6bfd878753b475a06cf56eb2037f5a04719cabf gencode/docs/events_discovery.html @@ -112,7 +112,7 @@ c73ad6dde0db8a520f3fee5a563c55a79fc7e6d1cd7875723b10c3d34036a46b gencode/java/u 9637f95e8a1185b1b028308a8caa2ca5a78cb46ae97f9cc11e2731066129540e gencode/java/udmi/schema/Position.java d87deaba67bb3272c528e3491d378bde059b626964a4a2aed15f5643305c2463 gencode/java/udmi/schema/Properties.java 4cdd5dc6b2e054a43f2e70adeb46ef8e3ff78288d4315923a925415f87e871aa gencode/java/udmi/schema/PubberConfiguration.java -e25115bd0b7fd19c6c82d599ec71d5e5d335271e011b7a9a0a36bda6eae71e0c gencode/java/udmi/schema/PubberOptions.java +3a6b03591dba54554af728171d2f23f86ee9e95f372adb8869212e46bd554704 gencode/java/udmi/schema/PubberOptions.java cd2c7580a75391393c2f761f4434e4e7e83e2d2d1f35e9e62d69c19e65ea2557 gencode/java/udmi/schema/RefDiscovery.java 14faa115d13ee46d10935b13753bff85758f3b64b5136a59f60d36b5b541687c gencode/java/udmi/schema/SchemaValidationState.java fadf083200e73d46cfdec2f710d40e3d2bc4dbf05196e4d0900186e72b62d95e gencode/java/udmi/schema/Scoring.java @@ -208,7 +208,7 @@ b48ae013d203eb31cc388a084c0cc6f93d4d5534336d4da2ecbccd84a085ea2b gencode/python 5c50847e136a033ea511209238bb570499b43fbee6189dae06603132dcb9f01f gencode/python/udmi/schema/model_testing_target.py 7c9a755ae06c44fc2b8117d7918b6401ce08a7218b86033fb3320eda7286e581 gencode/python/udmi/schema/monitoring.py e7e0b1ff8a58b904f30169641e633abf9fe19420607a867eda371eb50a86304e gencode/python/udmi/schema/monitoring_metric.py -3c7f82653fda254006acd91daac666b66392401c9d0cbf9a2ca4d45c55490ea3 gencode/python/udmi/schema/options_pubber.py +6d51b357fcea5fb9aa3113b3801675d26a3aaa8b1d435648786bb942c16c1809 gencode/python/udmi/schema/options_pubber.py 6c5f3dd1c5ca9d821e3c48298af118fc7eafd97af9265dfd34b2ed8642efca77 gencode/python/udmi/schema/persistent_device.py a58f8c98e837a5b56126ca0f410e02f1e9cfcd80a8cb429e0ef522defab1f690 gencode/python/udmi/schema/properties.py a84e00db471b2038a473c2c83d72ea59b02c3d2bab56d38bc22435309f01e763 gencode/python/udmi/schema/query_cloud.py diff --git a/gencode/docs/configuration_pubber.html b/gencode/docs/configuration_pubber.html index 5b0e14379d..028c307653 100644 --- a/gencode/docs/configuration_pubber.html +++ b/gencode/docs/configuration_pubber.html @@ -3183,18 +3183,18 @@

-
+
-
+

- +

-
+
Type: boolean
-

If true, the pubber will simulate a slow writeback operations.

+ fastWrite
Type: boolean
+

If true, the pubber will simulate a fast writeback operations.

From 4730ceaa29fa90ddfc3b262691eb8db05f514703 Mon Sep 17 00:00:00 2001 From: Nitish Jain Date: Thu, 21 Aug 2025 06:59:35 +0000 Subject: [PATCH 27/68] Sequencer test for updating transitional state --- .../impl/manager/PubberPointsetManager.java | 15 +++------------ .../sequencer/sequences/WritebackSequences.java | 13 ++++++++----- 2 files changed, 11 insertions(+), 17 deletions(-) diff --git a/pubber/src/main/java/daq/pubber/impl/manager/PubberPointsetManager.java b/pubber/src/main/java/daq/pubber/impl/manager/PubberPointsetManager.java index f41e7b5b01..3bd128158f 100644 --- a/pubber/src/main/java/daq/pubber/impl/manager/PubberPointsetManager.java +++ b/pubber/src/main/java/daq/pubber/impl/manager/PubberPointsetManager.java @@ -31,7 +31,7 @@ public class PubberPointsetManager extends PubberManager implements PointsetMana private final ExtraPointsetEvent pointsetEvent = new ExtraPointsetEvent(); private final Map managedPoints = new HashMap<>(); private final ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1); - private static final int SLOW_WRITE_DELAY_SEC = 3; + private static final int WRITE_DELAY_SEC = 3; private static final int TIMEOUT_WRITE_DELAY_SEC = 60; @@ -146,7 +146,7 @@ public void updatePointConfig(AbstractPoint point, PointPointsetConfig pointConf } else if (isDelayWrite) { handleDelayWriteback(point, pointConfig, TIMEOUT_WRITE_DELAY_SEC); } else { - handleSlowWriteback(point, pointConfig, SLOW_WRITE_DELAY_SEC); + handleSlowWriteback(point, pointConfig, WRITE_DELAY_SEC); } } @@ -156,16 +156,7 @@ private void handleSlowWriteback(AbstractPoint point, getPointsetState().points.get(point.getName()).value_state = Value_state.UPDATING; updateState(); - - scheduler.schedule(() -> { - try { - info(format("Completing slow writeback for %s", point.getName())); - // Use the default interface method to apply the final state. - PointsetManager.super.updatePointConfig(point, pointConfig); - } catch (Exception e) { - error("Error during scheduled writeback for " + point.getName(), e); - } - }, delaySec, TimeUnit.SECONDS); + handleDelayWriteback(point, pointConfig, delaySec); } private void handleDelayWriteback(AbstractPoint point, diff --git a/validator/src/main/java/com/google/daq/mqtt/sequencer/sequences/WritebackSequences.java b/validator/src/main/java/com/google/daq/mqtt/sequencer/sequences/WritebackSequences.java index fe5e5e638c..d919401a60 100644 --- a/validator/src/main/java/com/google/daq/mqtt/sequencer/sequences/WritebackSequences.java +++ b/validator/src/main/java/com/google/daq/mqtt/sequencer/sequences/WritebackSequences.java @@ -5,6 +5,7 @@ import static java.lang.String.format; import static udmi.schema.Bucket.WRITEBACK; import static udmi.schema.FeatureDiscovery.FeatureStage.ALPHA; +import static udmi.schema.PointPointsetState.Value_state.APPLIED; import static udmi.schema.PointPointsetState.Value_state.UPDATING; import com.google.daq.mqtt.sequencer.Feature; @@ -13,6 +14,7 @@ import java.time.Duration; import java.util.List; import java.util.Objects; +import java.util.concurrent.atomic.AtomicReference; import org.junit.Before; import org.junit.Test; import udmi.schema.PointPointsetState.Value_state; @@ -83,7 +85,7 @@ private String presentValueIs(TargetTestingModel targetModel) { @Feature(stage = ALPHA, bucket = WRITEBACK) @Summary("Implements UDMI writeback and can successfully writeback to a point") public void writeback_success() { - TargetTestingModel targetModel = testTargetState(APPLIED_STATE); + TargetTestingModel targetModel = testTargetState(APPLIED.value()); waitUntil("target point to have target expected value", () -> presentValueIs(targetModel)); } @@ -120,9 +122,10 @@ public void writeback_failure() { @Feature(stage = ALPHA, bucket = WRITEBACK) @Summary("Implements writeback operations") public void writeback_operation() { - TargetTestingModel targetModel = getTarget(APPLIED_STATE); + TargetTestingModel targetModel = getTarget(APPLIED.value()); String targetPoint = targetModel.target_point; Object targetValue = targetModel.target_value; + AtomicReference appliedCheck = new AtomicReference<>(""); deviceConfig.pointset.points.get(targetPoint).set_value = null; waitUntil(expectedValueState(DEFAULT_STATE), () -> valueStateIs(targetPoint, DEFAULT_STATE)); @@ -133,17 +136,17 @@ public void writeback_operation() { // 2. Error out if it takes too long to get to UPDATING. try { waitUntil(expectedValueState(UPDATING.value()), UPDATING_WAIT_DURATION, () -> { - String appliedCheck = valueStateIs(targetPoint, APPLIED_STATE); + appliedCheck.set(valueStateIs(targetPoint, APPLIED.value())); ifNullSkipTest(appliedCheck, "operation completed quickly"); return valueStateIs(targetPoint, UPDATING.value()); }); } catch (RuntimeException e) { - if (!e.getMessage().isBlank() && e.getMessage().equals("operation completed quickly")) { + if (appliedCheck.get() == null) { skipTest("operation completed quickly"); } } - waitUntil(expectedValueState(APPLIED_STATE), () -> valueStateIs(targetPoint, APPLIED_STATE)); + waitUntil(expectedValueState(APPLIED.value()), () -> valueStateIs(targetPoint, APPLIED.value())); } } From a07b2a92c3f79cef1f11c507830aa92743cc66ae Mon Sep 17 00:00:00 2001 From: Nitish Jain Date: Thu, 21 Aug 2025 07:07:54 +0000 Subject: [PATCH 28/68] Sequencer test for updating transitional state --- .../writeback_operation/config_discovery.attr | 10 + .../writeback_operation/config_discovery.json | 3 + .../writeback_operation/config_localnet.attr | 10 + .../writeback_operation/config_localnet.json | 3 + .../writeback_operation/config_pointset.attr | 10 + .../writeback_operation/config_pointset.json | 3 + .../writeback_operation/config_system.attr | 10 + .../writeback_operation/config_system.json | 3 + .../writeback_operation/config_update.attr | 10 + .../writeback_operation/config_update.json | 44 + .../writeback_operation/device_system.log | 56 + .../writeback_operation/events_pointset.attr | 10 + .../writeback_operation/events_pointset.json | 15 + .../writeback_operation/events_system.attr | 10 + .../writeback_operation/events_system.json | 156 ++ .../writeback_operation/local_discovery.json | 6 + .../writeback_operation/local_localnet.json | 8 + .../writeback_operation/local_pointset.json | 16 + .../writeback_operation/local_system.json | 10 + .../writeback_operation/local_update.json | 44 + .../writeback_operation/sequence.log | 1568 +++++++++++++++++ .../sequences/writeback_operation/sequence.md | 14 + .../writeback_operation/state_discovery.attr | 10 + .../writeback_operation/state_discovery.json | 5 + .../writeback_operation/state_localnet.attr | 10 + .../writeback_operation/state_localnet.json | 18 + .../writeback_operation/state_pointset.attr | 10 + .../writeback_operation/state_pointset.json | 18 + .../writeback_operation/state_system.attr | 10 + .../writeback_operation/state_system.json | 25 + .../writeback_operation/state_update.attr | 10 + .../writeback_operation/state_update.json | 60 + .../writeback_operation/state_validation.attr | 10 + .../writeback_operation/state_validation.json | 3 + 34 files changed, 2208 insertions(+) create mode 100644 validator/sequences/writeback_operation/config_discovery.attr create mode 100644 validator/sequences/writeback_operation/config_discovery.json create mode 100644 validator/sequences/writeback_operation/config_localnet.attr create mode 100644 validator/sequences/writeback_operation/config_localnet.json create mode 100644 validator/sequences/writeback_operation/config_pointset.attr create mode 100644 validator/sequences/writeback_operation/config_pointset.json create mode 100644 validator/sequences/writeback_operation/config_system.attr create mode 100644 validator/sequences/writeback_operation/config_system.json create mode 100644 validator/sequences/writeback_operation/config_update.attr create mode 100644 validator/sequences/writeback_operation/config_update.json create mode 100644 validator/sequences/writeback_operation/device_system.log create mode 100644 validator/sequences/writeback_operation/events_pointset.attr create mode 100644 validator/sequences/writeback_operation/events_pointset.json create mode 100644 validator/sequences/writeback_operation/events_system.attr create mode 100644 validator/sequences/writeback_operation/events_system.json create mode 100644 validator/sequences/writeback_operation/local_discovery.json create mode 100644 validator/sequences/writeback_operation/local_localnet.json create mode 100644 validator/sequences/writeback_operation/local_pointset.json create mode 100644 validator/sequences/writeback_operation/local_system.json create mode 100644 validator/sequences/writeback_operation/local_update.json create mode 100644 validator/sequences/writeback_operation/sequence.log create mode 100644 validator/sequences/writeback_operation/sequence.md create mode 100644 validator/sequences/writeback_operation/state_discovery.attr create mode 100644 validator/sequences/writeback_operation/state_discovery.json create mode 100644 validator/sequences/writeback_operation/state_localnet.attr create mode 100644 validator/sequences/writeback_operation/state_localnet.json create mode 100644 validator/sequences/writeback_operation/state_pointset.attr create mode 100644 validator/sequences/writeback_operation/state_pointset.json create mode 100644 validator/sequences/writeback_operation/state_system.attr create mode 100644 validator/sequences/writeback_operation/state_system.json create mode 100644 validator/sequences/writeback_operation/state_update.attr create mode 100644 validator/sequences/writeback_operation/state_update.json create mode 100644 validator/sequences/writeback_operation/state_validation.attr create mode 100644 validator/sequences/writeback_operation/state_validation.json diff --git a/validator/sequences/writeback_operation/config_discovery.attr b/validator/sequences/writeback_operation/config_discovery.attr new file mode 100644 index 0000000000..adad21e950 --- /dev/null +++ b/validator/sequences/writeback_operation/config_discovery.attr @@ -0,0 +1,10 @@ +{ + "deviceId" : "AHU-1", + "deviceNumId" : "123456789101112", + "deviceRegistryId" : "ZZ-TRI-FECTA", + "projectId" : "localhost", + "transactionId" : "CU:3109d1.0000000b", + "publishTime" : "2025-08-21T06:57:03Z", + "subFolder" : "discovery", + "subType" : "config" +} \ No newline at end of file diff --git a/validator/sequences/writeback_operation/config_discovery.json b/validator/sequences/writeback_operation/config_discovery.json new file mode 100644 index 0000000000..4930737629 --- /dev/null +++ b/validator/sequences/writeback_operation/config_discovery.json @@ -0,0 +1,3 @@ +{ + "operation" : "REPLY" +} \ No newline at end of file diff --git a/validator/sequences/writeback_operation/config_localnet.attr b/validator/sequences/writeback_operation/config_localnet.attr new file mode 100644 index 0000000000..f5d41d29b7 --- /dev/null +++ b/validator/sequences/writeback_operation/config_localnet.attr @@ -0,0 +1,10 @@ +{ + "deviceId" : "AHU-1", + "deviceNumId" : "123456789101112", + "deviceRegistryId" : "ZZ-TRI-FECTA", + "projectId" : "localhost", + "transactionId" : "CU:3109d1.0000000a", + "publishTime" : "2025-08-21T06:57:01Z", + "subFolder" : "localnet", + "subType" : "config" +} \ No newline at end of file diff --git a/validator/sequences/writeback_operation/config_localnet.json b/validator/sequences/writeback_operation/config_localnet.json new file mode 100644 index 0000000000..4930737629 --- /dev/null +++ b/validator/sequences/writeback_operation/config_localnet.json @@ -0,0 +1,3 @@ +{ + "operation" : "REPLY" +} \ No newline at end of file diff --git a/validator/sequences/writeback_operation/config_pointset.attr b/validator/sequences/writeback_operation/config_pointset.attr new file mode 100644 index 0000000000..fee98711e8 --- /dev/null +++ b/validator/sequences/writeback_operation/config_pointset.attr @@ -0,0 +1,10 @@ +{ + "deviceId" : "AHU-1", + "deviceNumId" : "123456789101112", + "deviceRegistryId" : "ZZ-TRI-FECTA", + "projectId" : "localhost", + "transactionId" : "CU:3109d1.0000000c", + "publishTime" : "2025-08-21T06:57:07Z", + "subFolder" : "pointset", + "subType" : "config" +} \ No newline at end of file diff --git a/validator/sequences/writeback_operation/config_pointset.json b/validator/sequences/writeback_operation/config_pointset.json new file mode 100644 index 0000000000..4930737629 --- /dev/null +++ b/validator/sequences/writeback_operation/config_pointset.json @@ -0,0 +1,3 @@ +{ + "operation" : "REPLY" +} \ No newline at end of file diff --git a/validator/sequences/writeback_operation/config_system.attr b/validator/sequences/writeback_operation/config_system.attr new file mode 100644 index 0000000000..1a14e06472 --- /dev/null +++ b/validator/sequences/writeback_operation/config_system.attr @@ -0,0 +1,10 @@ +{ + "deviceId" : "AHU-1", + "deviceNumId" : "123456789101112", + "deviceRegistryId" : "ZZ-TRI-FECTA", + "projectId" : "localhost", + "transactionId" : "CU:3109d1.00000008", + "publishTime" : "2025-08-21T06:57:00Z", + "subFolder" : "system", + "subType" : "config" +} \ No newline at end of file diff --git a/validator/sequences/writeback_operation/config_system.json b/validator/sequences/writeback_operation/config_system.json new file mode 100644 index 0000000000..4930737629 --- /dev/null +++ b/validator/sequences/writeback_operation/config_system.json @@ -0,0 +1,3 @@ +{ + "operation" : "REPLY" +} \ No newline at end of file diff --git a/validator/sequences/writeback_operation/config_update.attr b/validator/sequences/writeback_operation/config_update.attr new file mode 100644 index 0000000000..8a8d388e9f --- /dev/null +++ b/validator/sequences/writeback_operation/config_update.attr @@ -0,0 +1,10 @@ +{ + "deviceId" : "AHU-1", + "deviceNumId" : "123456789101112", + "deviceRegistryId" : "ZZ-TRI-FECTA", + "projectId" : "localhost", + "transactionId" : "RC:3109d1.0000000c", + "publishTime" : "2025-08-21T06:57:06Z", + "subFolder" : "update", + "subType" : "config" +} \ No newline at end of file diff --git a/validator/sequences/writeback_operation/config_update.json b/validator/sequences/writeback_operation/config_update.json new file mode 100644 index 0000000000..d5258ba9b2 --- /dev/null +++ b/validator/sequences/writeback_operation/config_update.json @@ -0,0 +1,44 @@ +{ + "timestamp" : "2025-08-21T06:57:06Z", + "version" : "@@@cloud udmi version###1.5.1-265-gf6769c13-dirty", + "system" : { + "min_loglevel" : 200, + "metrics_rate_sec" : 10, + "operation" : { + "last_start" : "2025-08-21T06:55:44Z" + }, + "testing" : { + "sequence_name" : "writeback_operation" + } + }, + "discovery" : { + "families" : { + "vendor" : { }, + "bacnet" : { } + } + }, + "localnet" : { + "families" : { + "ether" : { }, + "ipv4" : { }, + "vendor" : { }, + "bacnet" : { } + } + }, + "pointset" : { + "points" : { + "filter_differential_pressure_setpoint" : { + "units" : "Bars", + "set_value" : 60 + }, + "filter_alarm_pressure_status" : { + "ref" : "BV11.present_value", + "units" : "No-units" + }, + "filter_differential_pressure_sensor" : { + "ref" : "AV12.present_value", + "units" : "Degrees-Celsius" + } + } + } +} \ No newline at end of file diff --git a/validator/sequences/writeback_operation/device_system.log b/validator/sequences/writeback_operation/device_system.log new file mode 100644 index 0000000000..5142667806 --- /dev/null +++ b/validator/sequences/writeback_operation/device_system.log @@ -0,0 +1,56 @@ +2025-08-21T06:56:47Z INFO device.log Device AHU-1 config handler +2025-08-21T06:56:47Z INFO device.log 2025-08-21T06:56:47Z received config 2025-08-21T06:56:47Z +2025-08-21T06:56:47Z INFO device.log Applying slow writeback for point filter_alarm_pressure_status with 3s delay +2025-08-21T06:56:47Z INFO device.log Applying slow writeback for point filter_differential_pressure_setpoint with 3s delay +2025-08-21T06:56:47Z INFO device.log Applying slow writeback for point filter_differential_pressure_sensor with 3s delay +2025-08-21T06:56:47Z NOTICE system.config.apply success +2025-08-21T06:56:47Z INFO device.log Device AHU-1 config handler +2025-08-21T06:56:47Z INFO device.log 2025-08-21T06:56:47Z received config 2025-08-21T06:56:47Z +2025-08-21T06:56:47Z INFO device.log Applying slow writeback for point filter_alarm_pressure_status with 3s delay +2025-08-21T06:56:47Z INFO device.log Applying slow writeback for point filter_differential_pressure_setpoint with 3s delay +2025-08-21T06:56:47Z INFO device.log Applying slow writeback for point filter_differential_pressure_sensor with 3s delay +2025-08-21T06:56:47Z NOTICE system.config.apply success +2025-08-21T06:56:49Z INFO device.log Update state 2025-08-21T06:56:49Z last_config 2025-08-21T06:56:47Z +2025-08-21T06:56:50Z INFO device.log Completing delayed writeback for filter_alarm_pressure_status +2025-08-21T06:56:50Z INFO device.log Completing delayed writeback for filter_differential_pressure_setpoint +2025-08-21T06:56:50Z INFO device.log Completing delayed writeback for filter_differential_pressure_sensor +2025-08-21T06:56:50Z INFO device.log Completing delayed writeback for filter_alarm_pressure_status +2025-08-21T06:56:50Z INFO device.log Completing delayed writeback for filter_differential_pressure_setpoint +2025-08-21T06:56:50Z INFO device.log Completing delayed writeback for filter_differential_pressure_sensor +2025-08-21T06:56:51Z INFO device.log Update state 2025-08-21T06:56:51Z last_config 2025-08-21T06:56:47Z +2025-08-21T06:56:51Z INFO device.log Device AHU-1 config handler +2025-08-21T06:56:51Z INFO device.log 2025-08-21T06:56:51Z received config 2025-08-21T06:56:51Z +2025-08-21T06:56:51Z INFO device.log Applying slow writeback for point filter_alarm_pressure_status with 3s delay +2025-08-21T06:56:51Z INFO device.log Applying slow writeback for point filter_differential_pressure_setpoint with 3s delay +2025-08-21T06:56:51Z INFO device.log Applying slow writeback for point filter_differential_pressure_sensor with 3s delay +2025-08-21T06:56:51Z NOTICE system.config.apply success +2025-08-21T06:56:53Z INFO device.log Update state 2025-08-21T06:56:53Z last_config 2025-08-21T06:56:51Z +2025-08-21T06:56:54Z INFO device.log Completing delayed writeback for filter_alarm_pressure_status +2025-08-21T06:56:54Z INFO device.log Completing delayed writeback for filter_differential_pressure_setpoint +2025-08-21T06:56:54Z INFO device.log Completing delayed writeback for filter_differential_pressure_sensor +2025-08-21T06:56:55Z INFO device.log Update state 2025-08-21T06:56:55Z last_config 2025-08-21T06:56:51Z +2025-08-21T06:56:55Z INFO device.log Device AHU-1 config handler +2025-08-21T06:56:55Z INFO device.log 2025-08-21T06:56:55Z received config 2025-08-21T06:56:55Z +2025-08-21T06:56:55Z INFO device.log Applying slow writeback for point filter_alarm_pressure_status with 3s delay +2025-08-21T06:56:55Z INFO device.log Applying slow writeback for point filter_differential_pressure_setpoint with 3s delay +2025-08-21T06:56:55Z INFO device.log Applying slow writeback for point filter_differential_pressure_sensor with 3s delay +2025-08-21T06:56:55Z NOTICE system.config.apply success +2025-08-21T06:56:57Z INFO device.log Update state 2025-08-21T06:56:57Z last_config 2025-08-21T06:56:55Z +2025-08-21T06:56:58Z INFO device.log Completing delayed writeback for filter_alarm_pressure_status +2025-08-21T06:56:58Z INFO device.log Completing delayed writeback for filter_differential_pressure_setpoint +2025-08-21T06:56:58Z INFO device.log Completing delayed writeback for filter_differential_pressure_sensor +2025-08-21T06:56:59Z INFO device.log Update state 2025-08-21T06:56:59Z last_config 2025-08-21T06:56:55Z +2025-08-21T06:56:59Z INFO device.log Device AHU-1 config handler +2025-08-21T06:56:59Z INFO device.log 2025-08-21T06:56:59Z received config 2025-08-21T06:56:59Z +2025-08-21T06:56:59Z INFO device.log Applying slow writeback for point filter_alarm_pressure_status with 3s delay +2025-08-21T06:56:59Z INFO device.log Applying slow writeback for point filter_differential_pressure_setpoint with 3s delay +2025-08-21T06:56:59Z INFO device.log Applying slow writeback for point filter_differential_pressure_sensor with 3s delay +2025-08-21T06:56:59Z NOTICE system.config.apply success +2025-08-21T06:57:00Z INFO device.log Device AHU-1 config handler +2025-08-21T06:57:00Z INFO device.log 2025-08-21T06:57:00Z received config 2025-08-21T06:57:00Z +2025-08-21T06:57:00Z INFO device.log Applying slow writeback for point filter_alarm_pressure_status with 3s delay +2025-08-21T06:57:00Z INFO device.log Applying slow writeback for point filter_differential_pressure_setpoint with 3s delay +2025-08-21T06:57:00Z INFO device.log Applying slow writeback for point filter_differential_pressure_sensor with 3s delay +2025-08-21T06:57:00Z NOTICE system.config.apply success +2025-08-21T06:57:01Z INFO device.log Update state 2025-08-21T06:57:01Z last_config 2025-08-21T06:57:00Z +2025-08-21T06:57:10Z NOTICE validation.feature.sequence Sequence complete diff --git a/validator/sequences/writeback_operation/events_pointset.attr b/validator/sequences/writeback_operation/events_pointset.attr new file mode 100644 index 0000000000..f30153aa27 --- /dev/null +++ b/validator/sequences/writeback_operation/events_pointset.attr @@ -0,0 +1,10 @@ +{ + "deviceId" : "AHU-1", + "deviceNumId" : "123456789101112", + "deviceRegistryId" : "ZZ-TRI-FECTA", + "projectId" : "localhost", + "transactionId" : "MP:a1c2eeae", + "publishTime" : "2025-08-21T06:57:01Z", + "subFolder" : "pointset", + "subType" : "events" +} \ No newline at end of file diff --git a/validator/sequences/writeback_operation/events_pointset.json b/validator/sequences/writeback_operation/events_pointset.json new file mode 100644 index 0000000000..1472ca8a50 --- /dev/null +++ b/validator/sequences/writeback_operation/events_pointset.json @@ -0,0 +1,15 @@ +{ + "points" : { + "filter_alarm_pressure_status" : { + "present_value" : false + }, + "filter_differential_pressure_setpoint" : { + "present_value" : 98 + }, + "filter_differential_pressure_sensor" : { + "present_value" : 8 + } + }, + "timestamp" : "2025-08-21T06:57:01Z", + "version" : "1.5.3" +} \ No newline at end of file diff --git a/validator/sequences/writeback_operation/events_system.attr b/validator/sequences/writeback_operation/events_system.attr new file mode 100644 index 0000000000..0ccaceb799 --- /dev/null +++ b/validator/sequences/writeback_operation/events_system.attr @@ -0,0 +1,10 @@ +{ + "deviceId" : "AHU-1", + "deviceNumId" : "123456789101112", + "deviceRegistryId" : "ZZ-TRI-FECTA", + "projectId" : "localhost", + "transactionId" : "MP:9b90253e", + "publishTime" : "2025-08-21T06:57:01Z", + "subFolder" : "system", + "subType" : "events" +} \ No newline at end of file diff --git a/validator/sequences/writeback_operation/events_system.json b/validator/sequences/writeback_operation/events_system.json new file mode 100644 index 0000000000..966ae8825b --- /dev/null +++ b/validator/sequences/writeback_operation/events_system.json @@ -0,0 +1,156 @@ +{ + "event_no" : 8, + "last_config" : "2025-08-21T06:57:00Z", + "logentries" : [ { + "message" : "Update state 2025-08-21T06:56:53Z last_config 2025-08-21T06:56:51Z", + "category" : "device.log", + "timestamp" : "2025-08-21T06:56:53Z", + "level" : 200 + }, { + "message" : "Completing delayed writeback for filter_alarm_pressure_status", + "category" : "device.log", + "timestamp" : "2025-08-21T06:56:54Z", + "level" : 200 + }, { + "message" : "Completing delayed writeback for filter_differential_pressure_setpoint", + "category" : "device.log", + "timestamp" : "2025-08-21T06:56:54Z", + "level" : 200 + }, { + "message" : "Completing delayed writeback for filter_differential_pressure_sensor", + "category" : "device.log", + "timestamp" : "2025-08-21T06:56:54Z", + "level" : 200 + }, { + "message" : "Update state 2025-08-21T06:56:55Z last_config 2025-08-21T06:56:51Z", + "category" : "device.log", + "timestamp" : "2025-08-21T06:56:55Z", + "level" : 200 + }, { + "message" : "Device AHU-1 config handler", + "category" : "device.log", + "timestamp" : "2025-08-21T06:56:55Z", + "level" : 200 + }, { + "message" : "2025-08-21T06:56:55Z received config 2025-08-21T06:56:55Z", + "category" : "device.log", + "timestamp" : "2025-08-21T06:56:55Z", + "level" : 200 + }, { + "message" : "Applying slow writeback for point filter_alarm_pressure_status with 3s delay", + "category" : "device.log", + "timestamp" : "2025-08-21T06:56:55Z", + "level" : 200 + }, { + "message" : "Applying slow writeback for point filter_differential_pressure_setpoint with 3s delay", + "category" : "device.log", + "timestamp" : "2025-08-21T06:56:55Z", + "level" : 200 + }, { + "message" : "Applying slow writeback for point filter_differential_pressure_sensor with 3s delay", + "category" : "device.log", + "timestamp" : "2025-08-21T06:56:55Z", + "level" : 200 + }, { + "message" : "success", + "category" : "system.config.apply", + "timestamp" : "2025-08-21T06:56:55Z", + "level" : 300 + }, { + "message" : "Update state 2025-08-21T06:56:57Z last_config 2025-08-21T06:56:55Z", + "category" : "device.log", + "timestamp" : "2025-08-21T06:56:57Z", + "level" : 200 + }, { + "message" : "Completing delayed writeback for filter_alarm_pressure_status", + "category" : "device.log", + "timestamp" : "2025-08-21T06:56:58Z", + "level" : 200 + }, { + "message" : "Completing delayed writeback for filter_differential_pressure_setpoint", + "category" : "device.log", + "timestamp" : "2025-08-21T06:56:58Z", + "level" : 200 + }, { + "message" : "Completing delayed writeback for filter_differential_pressure_sensor", + "category" : "device.log", + "timestamp" : "2025-08-21T06:56:58Z", + "level" : 200 + }, { + "message" : "Update state 2025-08-21T06:56:59Z last_config 2025-08-21T06:56:55Z", + "category" : "device.log", + "timestamp" : "2025-08-21T06:56:59Z", + "level" : 200 + }, { + "message" : "Device AHU-1 config handler", + "category" : "device.log", + "timestamp" : "2025-08-21T06:56:59Z", + "level" : 200 + }, { + "message" : "2025-08-21T06:56:59Z received config 2025-08-21T06:56:59Z", + "category" : "device.log", + "timestamp" : "2025-08-21T06:56:59Z", + "level" : 200 + }, { + "message" : "Applying slow writeback for point filter_alarm_pressure_status with 3s delay", + "category" : "device.log", + "timestamp" : "2025-08-21T06:56:59Z", + "level" : 200 + }, { + "message" : "Applying slow writeback for point filter_differential_pressure_setpoint with 3s delay", + "category" : "device.log", + "timestamp" : "2025-08-21T06:56:59Z", + "level" : 200 + }, { + "message" : "Applying slow writeback for point filter_differential_pressure_sensor with 3s delay", + "category" : "device.log", + "timestamp" : "2025-08-21T06:56:59Z", + "level" : 200 + }, { + "message" : "success", + "category" : "system.config.apply", + "timestamp" : "2025-08-21T06:56:59Z", + "level" : 300 + }, { + "message" : "Device AHU-1 config handler", + "category" : "device.log", + "timestamp" : "2025-08-21T06:57:00Z", + "level" : 200 + }, { + "message" : "2025-08-21T06:57:00Z received config 2025-08-21T06:57:00Z", + "category" : "device.log", + "timestamp" : "2025-08-21T06:57:00Z", + "level" : 200 + }, { + "message" : "Applying slow writeback for point filter_alarm_pressure_status with 3s delay", + "category" : "device.log", + "timestamp" : "2025-08-21T06:57:00Z", + "level" : 200 + }, { + "message" : "Applying slow writeback for point filter_differential_pressure_setpoint with 3s delay", + "category" : "device.log", + "timestamp" : "2025-08-21T06:57:00Z", + "level" : 200 + }, { + "message" : "Applying slow writeback for point filter_differential_pressure_sensor with 3s delay", + "category" : "device.log", + "timestamp" : "2025-08-21T06:57:00Z", + "level" : 200 + }, { + "message" : "success", + "category" : "system.config.apply", + "timestamp" : "2025-08-21T06:57:00Z", + "level" : 300 + }, { + "message" : "Update state 2025-08-21T06:57:01Z last_config 2025-08-21T06:57:00Z", + "category" : "device.log", + "timestamp" : "2025-08-21T06:57:01Z", + "level" : 200 + } ], + "metrics" : { + "mem_total_mb" : 112.0, + "mem_free_mb" : 36.660736083984375 + }, + "timestamp" : "2025-08-21T06:57:01Z", + "version" : "1.5.3" +} \ No newline at end of file diff --git a/validator/sequences/writeback_operation/local_discovery.json b/validator/sequences/writeback_operation/local_discovery.json new file mode 100644 index 0000000000..9c2dd36cff --- /dev/null +++ b/validator/sequences/writeback_operation/local_discovery.json @@ -0,0 +1,6 @@ +{ + "families" : { + "vendor" : { }, + "bacnet" : { } + } +} \ No newline at end of file diff --git a/validator/sequences/writeback_operation/local_localnet.json b/validator/sequences/writeback_operation/local_localnet.json new file mode 100644 index 0000000000..4b6e825e32 --- /dev/null +++ b/validator/sequences/writeback_operation/local_localnet.json @@ -0,0 +1,8 @@ +{ + "families" : { + "ether" : { }, + "ipv4" : { }, + "vendor" : { }, + "bacnet" : { } + } +} \ No newline at end of file diff --git a/validator/sequences/writeback_operation/local_pointset.json b/validator/sequences/writeback_operation/local_pointset.json new file mode 100644 index 0000000000..2d06bb7e6c --- /dev/null +++ b/validator/sequences/writeback_operation/local_pointset.json @@ -0,0 +1,16 @@ +{ + "points" : { + "filter_differential_pressure_setpoint" : { + "units" : "Bars", + "set_value" : 60 + }, + "filter_alarm_pressure_status" : { + "ref" : "BV11.present_value", + "units" : "No-units" + }, + "filter_differential_pressure_sensor" : { + "ref" : "AV12.present_value", + "units" : "Degrees-Celsius" + } + } +} \ No newline at end of file diff --git a/validator/sequences/writeback_operation/local_system.json b/validator/sequences/writeback_operation/local_system.json new file mode 100644 index 0000000000..15107ce14e --- /dev/null +++ b/validator/sequences/writeback_operation/local_system.json @@ -0,0 +1,10 @@ +{ + "min_loglevel" : 200, + "metrics_rate_sec" : 10, + "operation" : { + "last_start" : "2025-08-21T06:55:44Z" + }, + "testing" : { + "sequence_name" : "writeback_operation" + } +} \ No newline at end of file diff --git a/validator/sequences/writeback_operation/local_update.json b/validator/sequences/writeback_operation/local_update.json new file mode 100644 index 0000000000..540899e78e --- /dev/null +++ b/validator/sequences/writeback_operation/local_update.json @@ -0,0 +1,44 @@ +{ + "timestamp" : "2025-08-21T06:56:51Z", + "version" : "@@@cloud udmi version###1.5.1-265-gf6769c13-dirty", + "system" : { + "min_loglevel" : 200, + "metrics_rate_sec" : 10, + "operation" : { + "last_start" : "2025-08-21T06:55:44Z" + }, + "testing" : { + "sequence_name" : "writeback_operation" + } + }, + "discovery" : { + "families" : { + "vendor" : { }, + "bacnet" : { } + } + }, + "localnet" : { + "families" : { + "ether" : { }, + "ipv4" : { }, + "vendor" : { }, + "bacnet" : { } + } + }, + "pointset" : { + "points" : { + "filter_differential_pressure_setpoint" : { + "units" : "Bars", + "set_value" : 98 + }, + "filter_alarm_pressure_status" : { + "ref" : "BV11.present_value", + "units" : "No-units" + }, + "filter_differential_pressure_sensor" : { + "ref" : "AV12.present_value", + "units" : "Degrees-Celsius" + } + } + } +} \ No newline at end of file diff --git a/validator/sequences/writeback_operation/sequence.log b/validator/sequences/writeback_operation/sequence.log new file mode 100644 index 0000000000..24d4ab768d --- /dev/null +++ b/validator/sequences/writeback_operation/sequence.log @@ -0,0 +1,1568 @@ +2025-08-21T06:56:39Z NOTICE Starting test writeback_operation ################################ +2025-08-21T06:56:39Z INFO Stage start waiting for starting test wrapper at @0s +2025-08-21T06:56:47Z DEBUG Clear configTransactions and reset device config +2025-08-21T06:56:47Z TRACE Suppressing exception: java.lang.NullPointerException: Cannot read field "system" because "this.deviceState" is null, at com.google.daq.mqtt.sequencer.SequenceBase.lambda$resetDeviceConfig$13(SequenceBase.java:788) +2025-08-21T06:56:47Z DEBUG Configuring device last_start to be 1970-01-01T00:01:13Z +2025-08-21T06:56:47Z DEBUG Set last_start changed true, last_start 1970-01-01T00:01:13Z +2025-08-21T06:56:47Z DEBUG Set extraFieldChanged false because extra_field null +2025-08-21T06:56:47Z DEBUG Allowing device state change (everything) +2025-08-21T06:56:47Z DEBUG Starting reset_config full reset true +2025-08-21T06:56:47Z DEBUG Clear configTransactions and reset device config +2025-08-21T06:56:47Z TRACE Suppressing exception: java.lang.NullPointerException: Cannot read field "system" because "this.deviceState" is null, at com.google.daq.mqtt.sequencer.SequenceBase.lambda$resetDeviceConfig$13(SequenceBase.java:788) +2025-08-21T06:56:47Z DEBUG Configuring device last_start to be 1970-01-01T00:01:13Z +2025-08-21T06:56:47Z DEBUG Set last_start changed true, last_start 1970-01-01T00:01:13Z +2025-08-21T06:56:47Z DEBUG Set extraFieldChanged false because extra_field null +2025-08-21T06:56:47Z DEBUG Set extraFieldChanged true because extra_field reset_config +2025-08-21T06:56:47Z DEBUG Clear configTransactions and reset device config +2025-08-21T06:56:47Z TRACE Suppressing exception: java.lang.NullPointerException: Cannot read field "system" because "this.deviceState" is null, at com.google.daq.mqtt.sequencer.SequenceBase.lambda$resetDeviceConfig$13(SequenceBase.java:788) +2025-08-21T06:56:47Z DEBUG Configuring device last_start to be 1970-01-01T00:01:13Z +2025-08-21T06:56:47Z DEBUG Set last_start changed true, last_start 1970-01-01T00:01:13Z +2025-08-21T06:56:47Z DEBUG Set extraFieldChanged true because extra_field null +2025-08-21T06:56:47Z TRACE Suppressing exception: java.lang.NullPointerException: Cannot read field "timestamp" because "this.deviceState" is null, at com.google.daq.mqtt.sequencer.SequenceBase.lambda$ensureStateConfigHoldoff$48(SequenceBase.java:1404) +2025-08-21T06:56:47Z DEBUG Delay from lastConfigApplied 2025-08-21T06:56:39.087632192Z is -6052ms +2025-08-21T06:56:47Z TRACE Updated check config_update: true +2025-08-21T06:56:47Z DEBUG Update config_update, adding configTransaction RC:3109d1.00000004 +2025-08-21T06:56:47Z TRACE Suppressing exception: java.lang.NullPointerException: Cannot read field "system" because "this.deviceState" is null, at com.google.daq.mqtt.sequencer.SequenceBase.lambda$configIsPending$105(SequenceBase.java:2247) +2025-08-21T06:56:47Z TRACE Suppressing exception: java.lang.NullPointerException: Cannot read field "system" because "this.deviceState" is null, at com.google.daq.mqtt.sequencer.SequenceBase.lambda$configIsPending$107(SequenceBase.java:2251) +2025-08-21T06:56:47Z TRACE Suppressing exception: java.lang.NullPointerException: Cannot read field "timestamp" because "this.deviceState" is null, at com.google.daq.mqtt.sequencer.SequenceBase.lambda$configIsPending$109(SequenceBase.java:2258) +2025-08-21T06:56:47Z TRACE Suppressing exception: java.lang.NullPointerException: Cannot read field "system" because "this.deviceState" is null, at com.google.daq.mqtt.sequencer.SequenceBase.lambda$configIsPending$105(SequenceBase.java:2247) +2025-08-21T06:56:47Z TRACE Suppressing exception: java.lang.NullPointerException: Cannot read field "system" because "this.deviceState" is null, at com.google.daq.mqtt.sequencer.SequenceBase.lambda$configIsPending$107(SequenceBase.java:2251) +2025-08-21T06:56:47Z TRACE Suppressing exception: java.lang.NullPointerException: Cannot read field "timestamp" because "this.deviceState" is null, at com.google.daq.mqtt.sequencer.SequenceBase.lambda$configIsPending$109(SequenceBase.java:2258) +2025-08-21T06:56:47Z DEBUG Using pre-config state timestamp 1970-01-01T00:00:00Z +2025-08-21T06:56:47Z DEBUG Update lastConfigIssued 2025-08-21T06:56:47Z, because soft reset +2025-08-21T06:56:47Z TRACE Stage suspend waiting for starting test wrapper at @8s +2025-08-21T06:56:47Z INFO Stage start waiting for config update synchronized at @8s +2025-08-21T06:56:47Z DEBUG Received command AHU-1/state/validation as RC:3109d1.00000002 +2025-08-21T06:56:47Z TRACE Received state_validation: { +2025-08-21T06:56:47Z TRACE Received state_validation: "operation" : "REPLY" +2025-08-21T06:56:47Z TRACE Received state_validation: } +2025-08-21T06:56:47Z DEBUG Handling device message state_validation RC:3109d1.00000002 +2025-08-21T06:56:47Z TRACE Ignoring partial state update +2025-08-21T06:56:47Z TRACE Suppressing exception: java.lang.NullPointerException: Cannot read field "system" because "this.deviceState" is null, at com.google.daq.mqtt.sequencer.SequenceBase.lambda$configIsPending$105(SequenceBase.java:2247) +2025-08-21T06:56:47Z TRACE Suppressing exception: java.lang.NullPointerException: Cannot read field "system" because "this.deviceState" is null, at com.google.daq.mqtt.sequencer.SequenceBase.lambda$configIsPending$107(SequenceBase.java:2251) +2025-08-21T06:56:47Z TRACE Suppressing exception: java.lang.NullPointerException: Cannot read field "timestamp" because "this.deviceState" is null, at com.google.daq.mqtt.sequencer.SequenceBase.lambda$configIsPending$109(SequenceBase.java:2258) +2025-08-21T06:56:47Z DEBUG Received command AHU-1/state/validation as RC:3109d1.00000003 +2025-08-21T06:56:47Z TRACE Received state_validation: { +2025-08-21T06:56:47Z TRACE Received state_validation: "operation" : "REPLY" +2025-08-21T06:56:47Z TRACE Received state_validation: } +2025-08-21T06:56:47Z DEBUG Handling device message state_validation RC:3109d1.00000003 +2025-08-21T06:56:47Z TRACE Ignoring partial state update +2025-08-21T06:56:47Z TRACE Suppressing exception: java.lang.NullPointerException: Cannot read field "system" because "this.deviceState" is null, at com.google.daq.mqtt.sequencer.SequenceBase.lambda$configIsPending$105(SequenceBase.java:2247) +2025-08-21T06:56:47Z TRACE Suppressing exception: java.lang.NullPointerException: Cannot read field "system" because "this.deviceState" is null, at com.google.daq.mqtt.sequencer.SequenceBase.lambda$configIsPending$107(SequenceBase.java:2251) +2025-08-21T06:56:47Z TRACE Suppressing exception: java.lang.NullPointerException: Cannot read field "timestamp" because "this.deviceState" is null, at com.google.daq.mqtt.sequencer.SequenceBase.lambda$configIsPending$109(SequenceBase.java:2258) +2025-08-21T06:56:47Z DEBUG Received command AHU-1/events/system as MP:655a6cc7 +2025-08-21T06:56:47Z DEBUG Received events_system (no logs) +2025-08-21T06:56:47Z DEBUG Handling device message events_system MP:655a6cc7 +2025-08-21T06:56:47Z DEBUG Capturing AHU-1 message events_system +2025-08-21T06:56:47Z DEBUG Received command AHU-1/events/pointset as MP:a2d85f0c +2025-08-21T06:56:47Z TRACE Received events_pointset: { +2025-08-21T06:56:47Z TRACE Received events_pointset: "points" : { +2025-08-21T06:56:47Z TRACE Received events_pointset: "filter_alarm_pressure_status" : { +2025-08-21T06:56:47Z TRACE Received events_pointset: "present_value" : true +2025-08-21T06:56:47Z TRACE Received events_pointset: }, +2025-08-21T06:56:47Z TRACE Received events_pointset: "filter_differential_pressure_setpoint" : { +2025-08-21T06:56:47Z TRACE Received events_pointset: "present_value" : 60 +2025-08-21T06:56:47Z TRACE Received events_pointset: }, +2025-08-21T06:56:47Z TRACE Received events_pointset: "filter_differential_pressure_sensor" : { +2025-08-21T06:56:47Z TRACE Received events_pointset: "present_value" : 9 +2025-08-21T06:56:47Z TRACE Received events_pointset: } +2025-08-21T06:56:47Z TRACE Received events_pointset: }, +2025-08-21T06:56:47Z TRACE Received events_pointset: "timestamp" : "2025-08-21T06:56:41Z", +2025-08-21T06:56:47Z TRACE Received events_pointset: "version" : "1.5.3" +2025-08-21T06:56:47Z TRACE Received events_pointset: } +2025-08-21T06:56:47Z DEBUG Handling device message events_pointset MP:a2d85f0c +2025-08-21T06:56:47Z DEBUG Capturing AHU-1 message events_pointset +2025-08-21T06:56:47Z TRACE Suppressing exception: java.lang.NullPointerException: Cannot read field "system" because "this.deviceState" is null, at com.google.daq.mqtt.sequencer.SequenceBase.lambda$configIsPending$105(SequenceBase.java:2247) +2025-08-21T06:56:47Z TRACE Suppressing exception: java.lang.NullPointerException: Cannot read field "system" because "this.deviceState" is null, at com.google.daq.mqtt.sequencer.SequenceBase.lambda$configIsPending$107(SequenceBase.java:2251) +2025-08-21T06:56:47Z TRACE Suppressing exception: java.lang.NullPointerException: Cannot read field "timestamp" because "this.deviceState" is null, at com.google.daq.mqtt.sequencer.SequenceBase.lambda$configIsPending$109(SequenceBase.java:2258) +2025-08-21T06:56:48Z DEBUG Received command AHU-1/state/update as MP:453746c5 +2025-08-21T06:56:48Z DEBUG Received state_update +2025-08-21T06:56:48Z DEBUG Handling update message state_update MP:453746c5 +2025-08-21T06:56:48Z DEBUG Capturing AHU-1 message state_update +2025-08-21T06:56:48Z DEBUG Updated state after 1s 2025-08-21T06:56:47Z MP:453746c5 +2025-08-21T06:56:48Z INFO Initial state #001: { +2025-08-21T06:56:48Z INFO Initial state #001: "timestamp" : "2025-08-21T06:56:47Z", +2025-08-21T06:56:48Z INFO Initial state #001: "version" : "1.5.3", +2025-08-21T06:56:48Z INFO Initial state #001: "system" : { +2025-08-21T06:56:48Z INFO Initial state #001: "last_config" : "2025-08-21T06:54:08Z", +2025-08-21T06:56:48Z INFO Initial state #001: "operation" : { +2025-08-21T06:56:48Z INFO Initial state #001: "operational" : true, +2025-08-21T06:56:48Z INFO Initial state #001: "last_start" : "2025-08-21T06:55:44Z", +2025-08-21T06:56:48Z INFO Initial state #001: "restart_count" : 1, +2025-08-21T06:56:48Z INFO Initial state #001: "mode" : "initial" +2025-08-21T06:56:48Z INFO Initial state #001: }, +2025-08-21T06:56:48Z INFO Initial state #001: "serial_no" : "742132", +2025-08-21T06:56:48Z INFO Initial state #001: "hardware" : { +2025-08-21T06:56:48Z INFO Initial state #001: "make" : "BOS", +2025-08-21T06:56:48Z INFO Initial state #001: "model" : "pubber" +2025-08-21T06:56:48Z INFO Initial state #001: }, +2025-08-21T06:56:48Z INFO Initial state #001: "software" : { +2025-08-21T06:56:48Z INFO Initial state #001: "firmware" : "v1" +2025-08-21T06:56:48Z INFO Initial state #001: }, +2025-08-21T06:56:48Z INFO Initial state #001: "status" : { +2025-08-21T06:56:48Z INFO Initial state #001: "message" : "success", +2025-08-21T06:56:48Z INFO Initial state #001: "category" : "system.config.parse", +2025-08-21T06:56:48Z INFO Initial state #001: "timestamp" : "2025-08-21T06:56:47Z", +2025-08-21T06:56:48Z INFO Initial state #001: "level" : 100 +2025-08-21T06:56:48Z INFO Initial state #001: } +2025-08-21T06:56:48Z INFO Initial state #001: }, +2025-08-21T06:56:48Z INFO Initial state #001: "discovery" : { +2025-08-21T06:56:48Z INFO Initial state #001: "families" : { } +2025-08-21T06:56:48Z INFO Initial state #001: }, +2025-08-21T06:56:48Z INFO Initial state #001: "localnet" : { +2025-08-21T06:56:48Z INFO Initial state #001: "families" : { +2025-08-21T06:56:48Z INFO Initial state #001: "ether" : { +2025-08-21T06:56:48Z INFO Initial state #001: "addr" : "42:01:ac:10:83:22" +2025-08-21T06:56:48Z INFO Initial state #001: }, +2025-08-21T06:56:48Z INFO Initial state #001: "ipv4" : { +2025-08-21T06:56:48Z INFO Initial state #001: "addr" : "172.16.131.34" +2025-08-21T06:56:48Z INFO Initial state #001: }, +2025-08-21T06:56:48Z INFO Initial state #001: "vendor" : { +2025-08-21T06:56:48Z INFO Initial state #001: "addr" : "28179023" +2025-08-21T06:56:48Z INFO Initial state #001: }, +2025-08-21T06:56:48Z INFO Initial state #001: "bacnet" : { +2025-08-21T06:56:48Z INFO Initial state #001: "addr" : "27312" +2025-08-21T06:56:48Z INFO Initial state #001: } +2025-08-21T06:56:48Z INFO Initial state #001: } +2025-08-21T06:56:48Z INFO Initial state #001: }, +2025-08-21T06:56:48Z INFO Initial state #001: "pointset" : { +2025-08-21T06:56:48Z INFO Initial state #001: "points" : { +2025-08-21T06:56:48Z INFO Initial state #001: "filter_alarm_pressure_status" : { +2025-08-21T06:56:48Z INFO Initial state #001: "units" : "No-units" +2025-08-21T06:56:48Z INFO Initial state #001: }, +2025-08-21T06:56:48Z INFO Initial state #001: "filter_differential_pressure_setpoint" : { +2025-08-21T06:56:48Z INFO Initial state #001: "units" : "Bars", +2025-08-21T06:56:48Z INFO Initial state #001: "value_state" : "applied" +2025-08-21T06:56:48Z INFO Initial state #001: }, +2025-08-21T06:56:48Z INFO Initial state #001: "filter_differential_pressure_sensor" : { +2025-08-21T06:56:48Z INFO Initial state #001: "units" : "Degrees-Celsius" +2025-08-21T06:56:48Z INFO Initial state #001: } +2025-08-21T06:56:48Z INFO Initial state #001: } +2025-08-21T06:56:48Z INFO Initial state #001: } +2025-08-21T06:56:48Z INFO Initial state #001: } +2025-08-21T06:56:48Z NOTICE Received serial number 742132 +2025-08-21T06:56:48Z DEBUG Updated state has last_config 2025-08-21T06:54:08Z (expecting null) +2025-08-21T06:56:48Z DEBUG Detail config update synchronized is now: last_start not synced in config, config transactions not cleared, last_config not synced in state +2025-08-21T06:56:48Z DEBUG Received command AHU-1/config/update as RC:3109d1.00000004 +2025-08-21T06:56:48Z DEBUG Received config_update +2025-08-21T06:56:48Z DEBUG Handling update message config_update RC:3109d1.00000004 +2025-08-21T06:56:48Z DEBUG Removed configTransaction RC:3109d1.00000004 +2025-08-21T06:56:48Z DEBUG Set last_start changed false, last_start 1970-01-01T00:01:13Z +2025-08-21T06:56:48Z DEBUG Updated config 2025-08-21T06:56:47Z RC:3109d1.00000004 +2025-08-21T06:56:48Z INFO Updated config #001: { +2025-08-21T06:56:48Z INFO Updated config #001: "timestamp" : "2025-08-21T06:56:47Z", +2025-08-21T06:56:48Z INFO Updated config #001: "version" : "@@@cloud udmi version###1.5.1-265-gf6769c13-dirty", +2025-08-21T06:56:48Z INFO Updated config #001: "system" : { +2025-08-21T06:56:48Z INFO Updated config #001: "min_loglevel" : 200, +2025-08-21T06:56:48Z INFO Updated config #001: "metrics_rate_sec" : 10, +2025-08-21T06:56:48Z INFO Updated config #001: "operation" : { +2025-08-21T06:56:48Z INFO Updated config #001: "last_start" : "1970-01-01T00:01:13Z" +2025-08-21T06:56:48Z INFO Updated config #001: }, +2025-08-21T06:56:48Z INFO Updated config #001: "testing" : { +2025-08-21T06:56:48Z INFO Updated config #001: "sequence_name" : "writeback_operation" +2025-08-21T06:56:48Z INFO Updated config #001: } +2025-08-21T06:56:48Z INFO Updated config #001: }, +2025-08-21T06:56:48Z INFO Updated config #001: "discovery" : { +2025-08-21T06:56:48Z INFO Updated config #001: "families" : { +2025-08-21T06:56:48Z INFO Updated config #001: "vendor" : { }, +2025-08-21T06:56:48Z INFO Updated config #001: "bacnet" : { } +2025-08-21T06:56:48Z INFO Updated config #001: } +2025-08-21T06:56:48Z INFO Updated config #001: }, +2025-08-21T06:56:48Z INFO Updated config #001: "localnet" : { +2025-08-21T06:56:48Z INFO Updated config #001: "families" : { +2025-08-21T06:56:48Z INFO Updated config #001: "ether" : { }, +2025-08-21T06:56:48Z INFO Updated config #001: "ipv4" : { }, +2025-08-21T06:56:48Z INFO Updated config #001: "vendor" : { }, +2025-08-21T06:56:48Z INFO Updated config #001: "bacnet" : { } +2025-08-21T06:56:48Z INFO Updated config #001: } +2025-08-21T06:56:48Z INFO Updated config #001: }, +2025-08-21T06:56:48Z INFO Updated config #001: "pointset" : { +2025-08-21T06:56:48Z INFO Updated config #001: "points" : { +2025-08-21T06:56:48Z INFO Updated config #001: "filter_differential_pressure_setpoint" : { +2025-08-21T06:56:48Z INFO Updated config #001: "units" : "Bars", +2025-08-21T06:56:48Z INFO Updated config #001: "set_value" : 98 +2025-08-21T06:56:48Z INFO Updated config #001: }, +2025-08-21T06:56:48Z INFO Updated config #001: "filter_alarm_pressure_status" : { +2025-08-21T06:56:48Z INFO Updated config #001: "ref" : "BV11.present_value", +2025-08-21T06:56:48Z INFO Updated config #001: "units" : "No-units" +2025-08-21T06:56:48Z INFO Updated config #001: }, +2025-08-21T06:56:48Z INFO Updated config #001: "filter_differential_pressure_sensor" : { +2025-08-21T06:56:48Z INFO Updated config #001: "ref" : "AV12.present_value", +2025-08-21T06:56:48Z INFO Updated config #001: "units" : "Degrees-Celsius" +2025-08-21T06:56:48Z INFO Updated config #001: } +2025-08-21T06:56:48Z INFO Updated config #001: } +2025-08-21T06:56:48Z INFO Updated config #001: } +2025-08-21T06:56:48Z INFO Updated config #001: } +2025-08-21T06:56:48Z DEBUG Expected last_config now 2025-08-21T06:56:47Z +2025-08-21T06:56:48Z DEBUG Received command AHU-1/config/update as CU:3109d1.00000004 +2025-08-21T06:56:48Z DEBUG Received config_update +2025-08-21T06:56:48Z DEBUG Handling update message config_update CU:3109d1.00000004 +2025-08-21T06:56:48Z DEBUG Ignoring operation reply CU:3109d1.00000004 +2025-08-21T06:56:48Z DEBUG Detail config update synchronized is now: last_start not synced in config, last_config not synced in state +2025-08-21T06:56:48Z DEBUG Received command AHU-1/state/system as MP:453746c5-0 +2025-08-21T06:56:48Z TRACE Received state_system: { +2025-08-21T06:56:48Z TRACE Received state_system: "hardware" : { +2025-08-21T06:56:48Z TRACE Received state_system: "make" : "BOS", +2025-08-21T06:56:48Z TRACE Received state_system: "model" : "pubber" +2025-08-21T06:56:48Z TRACE Received state_system: }, +2025-08-21T06:56:48Z TRACE Received state_system: "last_config" : "2025-08-21T06:54:08Z", +2025-08-21T06:56:48Z TRACE Received state_system: "operation" : { +2025-08-21T06:56:48Z TRACE Received state_system: "operational" : true, +2025-08-21T06:56:48Z TRACE Received state_system: "last_start" : "2025-08-21T06:55:44Z", +2025-08-21T06:56:48Z TRACE Received state_system: "restart_count" : 1, +2025-08-21T06:56:48Z TRACE Received state_system: "mode" : "initial" +2025-08-21T06:56:48Z TRACE Received state_system: }, +2025-08-21T06:56:48Z TRACE Received state_system: "serial_no" : "742132", +2025-08-21T06:56:48Z TRACE Received state_system: "software" : { +2025-08-21T06:56:48Z TRACE Received state_system: "firmware" : "v1" +2025-08-21T06:56:48Z TRACE Received state_system: }, +2025-08-21T06:56:48Z TRACE Received state_system: "status" : { +2025-08-21T06:56:48Z TRACE Received state_system: "message" : "success", +2025-08-21T06:56:48Z TRACE Received state_system: "category" : "system.config.parse", +2025-08-21T06:56:48Z TRACE Received state_system: "timestamp" : "2025-08-21T06:56:47Z", +2025-08-21T06:56:48Z TRACE Received state_system: "level" : 100 +2025-08-21T06:56:48Z TRACE Received state_system: }, +2025-08-21T06:56:48Z TRACE Received state_system: "timestamp" : "2025-08-21T06:56:47Z", +2025-08-21T06:56:48Z TRACE Received state_system: "version" : "1.5.3" +2025-08-21T06:56:48Z TRACE Received state_system: } +2025-08-21T06:56:48Z DEBUG Handling device message state_system MP:453746c5-0 +2025-08-21T06:56:48Z TRACE Ignoring partial state update +2025-08-21T06:56:48Z DEBUG Received command AHU-1/state/discovery as MP:453746c5-1 +2025-08-21T06:56:48Z TRACE Received state_discovery: { +2025-08-21T06:56:48Z TRACE Received state_discovery: "families" : { }, +2025-08-21T06:56:48Z TRACE Received state_discovery: "timestamp" : "2025-08-21T06:56:47Z", +2025-08-21T06:56:48Z TRACE Received state_discovery: "version" : "1.5.3" +2025-08-21T06:56:48Z TRACE Received state_discovery: } +2025-08-21T06:56:48Z DEBUG Handling device message state_discovery MP:453746c5-1 +2025-08-21T06:56:48Z TRACE Ignoring partial state update +2025-08-21T06:56:48Z DEBUG Received command AHU-1/state/localnet as MP:453746c5-2 +2025-08-21T06:56:48Z TRACE Received state_localnet: { +2025-08-21T06:56:48Z TRACE Received state_localnet: "families" : { +2025-08-21T06:56:48Z TRACE Received state_localnet: "ether" : { +2025-08-21T06:56:48Z TRACE Received state_localnet: "addr" : "42:01:ac:10:83:22" +2025-08-21T06:56:48Z TRACE Received state_localnet: }, +2025-08-21T06:56:48Z TRACE Received state_localnet: "ipv4" : { +2025-08-21T06:56:48Z TRACE Received state_localnet: "addr" : "172.16.131.34" +2025-08-21T06:56:48Z TRACE Received state_localnet: }, +2025-08-21T06:56:48Z TRACE Received state_localnet: "vendor" : { +2025-08-21T06:56:48Z TRACE Received state_localnet: "addr" : "28179023" +2025-08-21T06:56:48Z TRACE Received state_localnet: }, +2025-08-21T06:56:48Z TRACE Received state_localnet: "bacnet" : { +2025-08-21T06:56:48Z TRACE Received state_localnet: "addr" : "27312" +2025-08-21T06:56:48Z TRACE Received state_localnet: } +2025-08-21T06:56:48Z TRACE Received state_localnet: }, +2025-08-21T06:56:48Z TRACE Received state_localnet: "timestamp" : "2025-08-21T06:56:47Z", +2025-08-21T06:56:48Z TRACE Received state_localnet: "version" : "1.5.3" +2025-08-21T06:56:48Z TRACE Received state_localnet: } +2025-08-21T06:56:48Z DEBUG Handling device message state_localnet MP:453746c5-2 +2025-08-21T06:56:48Z TRACE Ignoring partial state update +2025-08-21T06:56:48Z DEBUG Received command AHU-1/state/pointset as MP:453746c5-3 +2025-08-21T06:56:48Z TRACE Received state_pointset: { +2025-08-21T06:56:48Z TRACE Received state_pointset: "points" : { +2025-08-21T06:56:48Z TRACE Received state_pointset: "filter_alarm_pressure_status" : { +2025-08-21T06:56:48Z TRACE Received state_pointset: "units" : "No-units" +2025-08-21T06:56:48Z TRACE Received state_pointset: }, +2025-08-21T06:56:48Z TRACE Received state_pointset: "filter_differential_pressure_setpoint" : { +2025-08-21T06:56:48Z TRACE Received state_pointset: "units" : "Bars", +2025-08-21T06:56:48Z TRACE Received state_pointset: "value_state" : "applied" +2025-08-21T06:56:48Z TRACE Received state_pointset: }, +2025-08-21T06:56:48Z TRACE Received state_pointset: "filter_differential_pressure_sensor" : { +2025-08-21T06:56:48Z TRACE Received state_pointset: "units" : "Degrees-Celsius" +2025-08-21T06:56:48Z TRACE Received state_pointset: } +2025-08-21T06:56:48Z TRACE Received state_pointset: }, +2025-08-21T06:56:48Z TRACE Received state_pointset: "timestamp" : "2025-08-21T06:56:47Z", +2025-08-21T06:56:48Z TRACE Received state_pointset: "version" : "1.5.3" +2025-08-21T06:56:48Z TRACE Received state_pointset: } +2025-08-21T06:56:48Z DEBUG Handling device message state_pointset MP:453746c5-3 +2025-08-21T06:56:48Z TRACE Ignoring partial state update +2025-08-21T06:56:48Z DEBUG Received command AHU-1/config/update as MP:453746c5 +2025-08-21T06:56:48Z DEBUG Received config_update +2025-08-21T06:56:48Z DEBUG Handling update message config_update MP:453746c5 +2025-08-21T06:56:48Z DEBUG Set last_start changed true, last_start 2025-08-21T06:55:44Z +2025-08-21T06:56:48Z DEBUG Updated config 2025-08-21T06:56:47Z MP:453746c5 +2025-08-21T06:56:48Z INFO Updated config #002: Changed 0 fields. +2025-08-21T06:56:48Z DEBUG Expected last_config now 2025-08-21T06:56:47Z +2025-08-21T06:56:49Z DEBUG Detail config update synchronized is now: last_config not synced in state +2025-08-21T06:56:49Z DEBUG Received command AHU-1/state/update as MP:0a2c33fb +2025-08-21T06:56:49Z DEBUG Received state_update +2025-08-21T06:56:49Z DEBUG Handling update message state_update MP:0a2c33fb +2025-08-21T06:56:49Z DEBUG Capturing AHU-1 message state_update +2025-08-21T06:56:49Z DEBUG Updated state after 0s 2025-08-21T06:56:49Z MP:0a2c33fb +2025-08-21T06:56:49Z INFO Updated state #002: Changed 7 fields: +2025-08-21T06:56:49Z INFO Updated state #002: Set `system.last_config` = `2025-08-21T06:56:47Z` +2025-08-21T06:56:49Z INFO Updated state #002: Set `system.status.level` = `300` +2025-08-21T06:56:49Z INFO Updated state #002: Set `system.status.category` = `system.config.apply` +2025-08-21T06:56:49Z INFO Updated state #002: Add `pointset.points.filter_alarm_pressure_status.value_state` = `updating` +2025-08-21T06:56:49Z INFO Updated state #002: Set `pointset.points.filter_differential_pressure_setpoint.value_state` = `updating` +2025-08-21T06:56:49Z INFO Updated state #002: Add `pointset.points.filter_differential_pressure_sensor.value_state` = `updating` +2025-08-21T06:56:49Z INFO Updated state #002: Set `timestamp` = `2025-08-21T06:56:49Z` +2025-08-21T06:56:49Z DEBUG Updated state has last_config 2025-08-21T06:56:47Z (expecting 2025-08-21T06:56:47Z) +2025-08-21T06:56:49Z DEBUG Received command AHU-1/state/system as MP:0a2c33fb-0 +2025-08-21T06:56:49Z TRACE Received state_system: { +2025-08-21T06:56:49Z TRACE Received state_system: "hardware" : { +2025-08-21T06:56:49Z TRACE Received state_system: "make" : "BOS", +2025-08-21T06:56:49Z TRACE Received state_system: "model" : "pubber" +2025-08-21T06:56:49Z TRACE Received state_system: }, +2025-08-21T06:56:49Z TRACE Received state_system: "last_config" : "2025-08-21T06:56:47Z", +2025-08-21T06:56:49Z TRACE Received state_system: "operation" : { +2025-08-21T06:56:49Z TRACE Received state_system: "operational" : true, +2025-08-21T06:56:49Z TRACE Received state_system: "last_start" : "2025-08-21T06:55:44Z", +2025-08-21T06:56:49Z TRACE Received state_system: "restart_count" : 1, +2025-08-21T06:56:49Z TRACE Received state_system: "mode" : "initial" +2025-08-21T06:56:49Z TRACE Received state_system: }, +2025-08-21T06:56:49Z TRACE Received state_system: "serial_no" : "742132", +2025-08-21T06:56:49Z TRACE Received state_system: "software" : { +2025-08-21T06:56:49Z TRACE Received state_system: "firmware" : "v1" +2025-08-21T06:56:49Z TRACE Received state_system: }, +2025-08-21T06:56:49Z TRACE Received state_system: "status" : { +2025-08-21T06:56:49Z TRACE Received state_system: "message" : "success", +2025-08-21T06:56:49Z TRACE Received state_system: "category" : "system.config.apply", +2025-08-21T06:56:49Z TRACE Received state_system: "timestamp" : "2025-08-21T06:56:47Z", +2025-08-21T06:56:49Z TRACE Received state_system: "level" : 300 +2025-08-21T06:56:49Z TRACE Received state_system: }, +2025-08-21T06:56:49Z TRACE Received state_system: "timestamp" : "2025-08-21T06:56:49Z", +2025-08-21T06:56:49Z TRACE Received state_system: "version" : "1.5.3" +2025-08-21T06:56:49Z TRACE Received state_system: } +2025-08-21T06:56:49Z DEBUG Handling device message state_system MP:0a2c33fb-0 +2025-08-21T06:56:49Z TRACE Ignoring partial state update +2025-08-21T06:56:49Z DEBUG Detail config update synchronized is now: null +2025-08-21T06:56:49Z DEBUG Stage finished waiting for config update synchronized at @10s after 2s +2025-08-21T06:56:49Z TRACE Stage resume waiting for starting test wrapper at @10s +2025-08-21T06:56:49Z DEBUG Config sync took 2s +2025-08-21T06:56:49Z DEBUG Finished wait for config sync pending: null +2025-08-21T06:56:49Z DEBUG New lastConfigApplied at 2025-08-21T06:56:49Z +2025-08-21T06:56:49Z DEBUG Update config soft reset timestamp 2025-08-21T06:56:47Z +2025-08-21T06:56:49Z TRACE Update config soft reset: Add `discovery` = { "families": { "vendor": { }, "bacnet": { } } } +2025-08-21T06:56:49Z TRACE Update config soft reset: Add `pointset` = { "points": { "filter_differential_pressure_setpoint": { "set_value": `98`, "units": `Bars` }, "filter_alarm_pressure_status": { "ref": `BV11.present_value`, "units": `No-units` }, "filter_differential_pressure_sensor": { "ref": `AV12.present_value`, "units": `Degrees-Celsius` } } } +2025-08-21T06:56:49Z TRACE Update config soft reset: Add `localnet` = { "families": { "ether": { }, "ipv4": { }, "vendor": { }, "bacnet": { } } } +2025-08-21T06:56:49Z TRACE Update config soft reset: Add `timestamp` = `generated timestamp` +2025-08-21T06:56:49Z DEBUG Done with reset_config +2025-08-21T06:56:49Z TRACE Stage suspend waiting for starting test wrapper at @10s +2025-08-21T06:56:49Z INFO Stage start waiting for config update synchronized at @10s +2025-08-21T06:56:49Z DEBUG Received command AHU-1/state/discovery as MP:0a2c33fb-1 +2025-08-21T06:56:49Z TRACE Received state_discovery: { +2025-08-21T06:56:49Z TRACE Received state_discovery: "families" : { }, +2025-08-21T06:56:49Z TRACE Received state_discovery: "timestamp" : "2025-08-21T06:56:49Z", +2025-08-21T06:56:49Z TRACE Received state_discovery: "version" : "1.5.3" +2025-08-21T06:56:49Z TRACE Received state_discovery: } +2025-08-21T06:56:49Z DEBUG Handling device message state_discovery MP:0a2c33fb-1 +2025-08-21T06:56:49Z TRACE Ignoring partial state update +2025-08-21T06:56:49Z DEBUG Received command AHU-1/state/localnet as MP:0a2c33fb-2 +2025-08-21T06:56:49Z TRACE Received state_localnet: { +2025-08-21T06:56:49Z TRACE Received state_localnet: "families" : { +2025-08-21T06:56:49Z TRACE Received state_localnet: "ether" : { +2025-08-21T06:56:49Z TRACE Received state_localnet: "addr" : "42:01:ac:10:83:22" +2025-08-21T06:56:49Z TRACE Received state_localnet: }, +2025-08-21T06:56:49Z TRACE Received state_localnet: "ipv4" : { +2025-08-21T06:56:49Z TRACE Received state_localnet: "addr" : "172.16.131.34" +2025-08-21T06:56:49Z TRACE Received state_localnet: }, +2025-08-21T06:56:49Z TRACE Received state_localnet: "vendor" : { +2025-08-21T06:56:49Z TRACE Received state_localnet: "addr" : "28179023" +2025-08-21T06:56:49Z TRACE Received state_localnet: }, +2025-08-21T06:56:49Z TRACE Received state_localnet: "bacnet" : { +2025-08-21T06:56:49Z TRACE Received state_localnet: "addr" : "27312" +2025-08-21T06:56:49Z TRACE Received state_localnet: } +2025-08-21T06:56:49Z TRACE Received state_localnet: }, +2025-08-21T06:56:49Z TRACE Received state_localnet: "timestamp" : "2025-08-21T06:56:49Z", +2025-08-21T06:56:49Z TRACE Received state_localnet: "version" : "1.5.3" +2025-08-21T06:56:49Z TRACE Received state_localnet: } +2025-08-21T06:56:49Z DEBUG Handling device message state_localnet MP:0a2c33fb-2 +2025-08-21T06:56:49Z TRACE Ignoring partial state update +2025-08-21T06:56:49Z DEBUG Stage finished waiting for config update synchronized at @10s after 0s +2025-08-21T06:56:49Z TRACE Stage resume waiting for starting test wrapper at @10s +2025-08-21T06:56:49Z DEBUG Config sync took 2s +2025-08-21T06:56:49Z DEBUG Finished wait for config sync pending: null +2025-08-21T06:56:49Z DEBUG Disallowing device state change (everything) +2025-08-21T06:56:49Z DEBUG Delay from lastConfigApplied 2025-08-21T06:56:49.443140649Z is 1444ms +2025-08-21T06:56:49Z DEBUG Rate-limiting config by 1444ms +2025-08-21T06:56:51Z TRACE Updated check config_update: true +2025-08-21T06:56:51Z DEBUG Update config_update, adding configTransaction RC:3109d1.00000005 +2025-08-21T06:56:51Z DEBUG Using pre-config state timestamp 2025-08-21T06:56:49Z +2025-08-21T06:56:51Z DEBUG Update lastConfigIssued 2025-08-21T06:56:51Z, because initial setup +2025-08-21T06:56:51Z TRACE Stage suspend waiting for starting test wrapper at @12s +2025-08-21T06:56:51Z INFO Stage start waiting for config update synchronized at @12s +2025-08-21T06:56:51Z DEBUG Received command AHU-1/state/pointset as MP:0a2c33fb-3 +2025-08-21T06:56:51Z TRACE Received state_pointset: { +2025-08-21T06:56:51Z TRACE Received state_pointset: "points" : { +2025-08-21T06:56:51Z TRACE Received state_pointset: "filter_alarm_pressure_status" : { +2025-08-21T06:56:51Z TRACE Received state_pointset: "units" : "No-units", +2025-08-21T06:56:51Z TRACE Received state_pointset: "value_state" : "updating" +2025-08-21T06:56:51Z TRACE Received state_pointset: }, +2025-08-21T06:56:51Z TRACE Received state_pointset: "filter_differential_pressure_setpoint" : { +2025-08-21T06:56:51Z TRACE Received state_pointset: "units" : "Bars", +2025-08-21T06:56:51Z TRACE Received state_pointset: "value_state" : "updating" +2025-08-21T06:56:51Z TRACE Received state_pointset: }, +2025-08-21T06:56:51Z TRACE Received state_pointset: "filter_differential_pressure_sensor" : { +2025-08-21T06:56:51Z TRACE Received state_pointset: "units" : "Degrees-Celsius", +2025-08-21T06:56:51Z TRACE Received state_pointset: "value_state" : "updating" +2025-08-21T06:56:51Z TRACE Received state_pointset: } +2025-08-21T06:56:51Z TRACE Received state_pointset: }, +2025-08-21T06:56:51Z TRACE Received state_pointset: "timestamp" : "2025-08-21T06:56:49Z", +2025-08-21T06:56:51Z TRACE Received state_pointset: "version" : "1.5.3" +2025-08-21T06:56:51Z TRACE Received state_pointset: } +2025-08-21T06:56:51Z DEBUG Handling device message state_pointset MP:0a2c33fb-3 +2025-08-21T06:56:51Z TRACE Ignoring partial state update +2025-08-21T06:56:51Z DEBUG Received command AHU-1/state/update as MP:127decc2 +2025-08-21T06:56:51Z DEBUG Received state_update +2025-08-21T06:56:51Z DEBUG Handling update message state_update MP:127decc2 +2025-08-21T06:56:51Z DEBUG Capturing AHU-1 message state_update +2025-08-21T06:56:51Z DEBUG Updated state after 0s 2025-08-21T06:56:51Z MP:127decc2 +2025-08-21T06:56:51Z INFO Updated state #003: Changed 4 fields: +2025-08-21T06:56:51Z INFO Updated state #003: Remove `pointset.points.filter_alarm_pressure_status.value_state` +2025-08-21T06:56:51Z INFO Updated state #003: Set `pointset.points.filter_differential_pressure_setpoint.value_state` = `applied` +2025-08-21T06:56:51Z INFO Updated state #003: Remove `pointset.points.filter_differential_pressure_sensor.value_state` +2025-08-21T06:56:51Z INFO Updated state #003: Set `timestamp` = `2025-08-21T06:56:51Z` +2025-08-21T06:56:51Z DEBUG Updated state has last_config 2025-08-21T06:56:47Z (expecting 2025-08-21T06:56:47Z) +2025-08-21T06:56:51Z DEBUG Received command AHU-1/state/system as MP:127decc2-0 +2025-08-21T06:56:51Z TRACE Received state_system: { +2025-08-21T06:56:51Z TRACE Received state_system: "hardware" : { +2025-08-21T06:56:51Z TRACE Received state_system: "make" : "BOS", +2025-08-21T06:56:51Z TRACE Received state_system: "model" : "pubber" +2025-08-21T06:56:51Z TRACE Received state_system: }, +2025-08-21T06:56:51Z TRACE Received state_system: "last_config" : "2025-08-21T06:56:47Z", +2025-08-21T06:56:51Z TRACE Received state_system: "operation" : { +2025-08-21T06:56:51Z TRACE Received state_system: "operational" : true, +2025-08-21T06:56:51Z TRACE Received state_system: "last_start" : "2025-08-21T06:55:44Z", +2025-08-21T06:56:51Z TRACE Received state_system: "restart_count" : 1, +2025-08-21T06:56:51Z TRACE Received state_system: "mode" : "initial" +2025-08-21T06:56:51Z TRACE Received state_system: }, +2025-08-21T06:56:51Z TRACE Received state_system: "serial_no" : "742132", +2025-08-21T06:56:51Z TRACE Received state_system: "software" : { +2025-08-21T06:56:51Z TRACE Received state_system: "firmware" : "v1" +2025-08-21T06:56:51Z TRACE Received state_system: }, +2025-08-21T06:56:51Z TRACE Received state_system: "status" : { +2025-08-21T06:56:51Z TRACE Received state_system: "message" : "success", +2025-08-21T06:56:51Z TRACE Received state_system: "category" : "system.config.apply", +2025-08-21T06:56:51Z TRACE Received state_system: "timestamp" : "2025-08-21T06:56:47Z", +2025-08-21T06:56:51Z TRACE Received state_system: "level" : 300 +2025-08-21T06:56:51Z TRACE Received state_system: }, +2025-08-21T06:56:51Z TRACE Received state_system: "timestamp" : "2025-08-21T06:56:51Z", +2025-08-21T06:56:51Z TRACE Received state_system: "version" : "1.5.3" +2025-08-21T06:56:51Z TRACE Received state_system: } +2025-08-21T06:56:51Z DEBUG Handling device message state_system MP:127decc2-0 +2025-08-21T06:56:51Z TRACE Ignoring partial state update +2025-08-21T06:56:51Z DEBUG Received command AHU-1/state/discovery as MP:127decc2-1 +2025-08-21T06:56:51Z TRACE Received state_discovery: { +2025-08-21T06:56:51Z TRACE Received state_discovery: "families" : { }, +2025-08-21T06:56:51Z TRACE Received state_discovery: "timestamp" : "2025-08-21T06:56:51Z", +2025-08-21T06:56:51Z TRACE Received state_discovery: "version" : "1.5.3" +2025-08-21T06:56:51Z TRACE Received state_discovery: } +2025-08-21T06:56:51Z DEBUG Handling device message state_discovery MP:127decc2-1 +2025-08-21T06:56:51Z TRACE Ignoring partial state update +2025-08-21T06:56:51Z DEBUG Received command AHU-1/state/localnet as MP:127decc2-2 +2025-08-21T06:56:51Z TRACE Received state_localnet: { +2025-08-21T06:56:51Z TRACE Received state_localnet: "families" : { +2025-08-21T06:56:51Z TRACE Received state_localnet: "ether" : { +2025-08-21T06:56:51Z TRACE Received state_localnet: "addr" : "42:01:ac:10:83:22" +2025-08-21T06:56:51Z TRACE Received state_localnet: }, +2025-08-21T06:56:51Z TRACE Received state_localnet: "ipv4" : { +2025-08-21T06:56:51Z TRACE Received state_localnet: "addr" : "172.16.131.34" +2025-08-21T06:56:51Z TRACE Received state_localnet: }, +2025-08-21T06:56:51Z TRACE Received state_localnet: "vendor" : { +2025-08-21T06:56:51Z TRACE Received state_localnet: "addr" : "28179023" +2025-08-21T06:56:51Z TRACE Received state_localnet: }, +2025-08-21T06:56:51Z TRACE Received state_localnet: "bacnet" : { +2025-08-21T06:56:51Z TRACE Received state_localnet: "addr" : "27312" +2025-08-21T06:56:51Z TRACE Received state_localnet: } +2025-08-21T06:56:51Z TRACE Received state_localnet: }, +2025-08-21T06:56:51Z TRACE Received state_localnet: "timestamp" : "2025-08-21T06:56:51Z", +2025-08-21T06:56:51Z TRACE Received state_localnet: "version" : "1.5.3" +2025-08-21T06:56:51Z TRACE Received state_localnet: } +2025-08-21T06:56:51Z DEBUG Handling device message state_localnet MP:127decc2-2 +2025-08-21T06:56:51Z TRACE Ignoring partial state update +2025-08-21T06:56:51Z DEBUG Received command AHU-1/state/pointset as MP:127decc2-3 +2025-08-21T06:56:51Z TRACE Received state_pointset: { +2025-08-21T06:56:51Z TRACE Received state_pointset: "points" : { +2025-08-21T06:56:51Z TRACE Received state_pointset: "filter_alarm_pressure_status" : { +2025-08-21T06:56:51Z TRACE Received state_pointset: "units" : "No-units" +2025-08-21T06:56:51Z TRACE Received state_pointset: }, +2025-08-21T06:56:51Z TRACE Received state_pointset: "filter_differential_pressure_setpoint" : { +2025-08-21T06:56:51Z TRACE Received state_pointset: "units" : "Bars", +2025-08-21T06:56:51Z TRACE Received state_pointset: "value_state" : "applied" +2025-08-21T06:56:51Z TRACE Received state_pointset: }, +2025-08-21T06:56:51Z TRACE Received state_pointset: "filter_differential_pressure_sensor" : { +2025-08-21T06:56:51Z TRACE Received state_pointset: "units" : "Degrees-Celsius" +2025-08-21T06:56:51Z TRACE Received state_pointset: } +2025-08-21T06:56:51Z TRACE Received state_pointset: }, +2025-08-21T06:56:51Z TRACE Received state_pointset: "timestamp" : "2025-08-21T06:56:51Z", +2025-08-21T06:56:51Z TRACE Received state_pointset: "version" : "1.5.3" +2025-08-21T06:56:51Z TRACE Received state_pointset: } +2025-08-21T06:56:51Z DEBUG Handling device message state_pointset MP:127decc2-3 +2025-08-21T06:56:51Z TRACE Ignoring partial state update +2025-08-21T06:56:52Z DEBUG Received command AHU-1/config/update as RC:3109d1.00000005 +2025-08-21T06:56:52Z DEBUG Received config_update +2025-08-21T06:56:52Z DEBUG Handling update message config_update RC:3109d1.00000005 +2025-08-21T06:56:52Z DEBUG Removed configTransaction RC:3109d1.00000005 +2025-08-21T06:56:52Z DEBUG Set last_start changed false, last_start 2025-08-21T06:55:44Z +2025-08-21T06:56:52Z DEBUG Updated config 2025-08-21T06:56:51Z RC:3109d1.00000005 +2025-08-21T06:56:52Z INFO Updated config #003: Changed 0 fields. +2025-08-21T06:56:52Z DEBUG Expected last_config now 2025-08-21T06:56:51Z +2025-08-21T06:56:52Z DEBUG Detail config update synchronized is now: last_config not synced in state +2025-08-21T06:56:52Z DEBUG Received command AHU-1/config/update as CU:3109d1.00000005 +2025-08-21T06:56:52Z DEBUG Received config_update +2025-08-21T06:56:52Z DEBUG Handling update message config_update CU:3109d1.00000005 +2025-08-21T06:56:52Z DEBUG Ignoring operation reply CU:3109d1.00000005 +2025-08-21T06:56:52Z DEBUG Received command AHU-1/events/pointset as MP:a2fdfdcb +2025-08-21T06:56:52Z TRACE Received events_pointset: { +2025-08-21T06:56:52Z TRACE Received events_pointset: "points" : { +2025-08-21T06:56:52Z TRACE Received events_pointset: "filter_alarm_pressure_status" : { +2025-08-21T06:56:52Z TRACE Received events_pointset: "present_value" : false +2025-08-21T06:56:52Z TRACE Received events_pointset: }, +2025-08-21T06:56:52Z TRACE Received events_pointset: "filter_differential_pressure_setpoint" : { +2025-08-21T06:56:52Z TRACE Received events_pointset: "present_value" : 98 +2025-08-21T06:56:52Z TRACE Received events_pointset: }, +2025-08-21T06:56:52Z TRACE Received events_pointset: "filter_differential_pressure_sensor" : { +2025-08-21T06:56:52Z TRACE Received events_pointset: "present_value" : 9 +2025-08-21T06:56:52Z TRACE Received events_pointset: } +2025-08-21T06:56:52Z TRACE Received events_pointset: }, +2025-08-21T06:56:52Z TRACE Received events_pointset: "timestamp" : "2025-08-21T06:56:51Z", +2025-08-21T06:56:52Z TRACE Received events_pointset: "version" : "1.5.3" +2025-08-21T06:56:52Z TRACE Received events_pointset: } +2025-08-21T06:56:52Z DEBUG Handling device message events_pointset MP:a2fdfdcb +2025-08-21T06:56:52Z DEBUG Capturing AHU-1 message events_pointset +2025-08-21T06:56:52Z DEBUG Received command AHU-1/events/system as MP:594cea24 +2025-08-21T06:56:52Z DEBUG Received events_system 2025-08-21T06:56:47Z INFO device.log: Device AHU-1 config handler +2025-08-21T06:56:52Z DEBUG Received events_system 2025-08-21T06:56:47Z INFO device.log: 2025-08-21T06:56:47Z received config 2025-08-21T06:56:47Z +2025-08-21T06:56:52Z DEBUG Received events_system 2025-08-21T06:56:47Z INFO device.log: Applying slow writeback for point filter_alarm_pressure_status with 3s delay +2025-08-21T06:56:52Z DEBUG Received events_system 2025-08-21T06:56:47Z INFO device.log: Applying slow writeback for point filter_differential_pressure_setpoint with 3s delay +2025-08-21T06:56:52Z DEBUG Received events_system 2025-08-21T06:56:47Z INFO device.log: Applying slow writeback for point filter_differential_pressure_sensor with 3s delay +2025-08-21T06:56:52Z DEBUG Received events_system 2025-08-21T06:56:47Z NOTICE system.config.apply: success +2025-08-21T06:56:52Z DEBUG Received events_system 2025-08-21T06:56:47Z INFO device.log: Device AHU-1 config handler +2025-08-21T06:56:52Z DEBUG Received events_system 2025-08-21T06:56:47Z INFO device.log: 2025-08-21T06:56:47Z received config 2025-08-21T06:56:47Z +2025-08-21T06:56:52Z DEBUG Received events_system 2025-08-21T06:56:47Z INFO device.log: Applying slow writeback for point filter_alarm_pressure_status with 3s delay +2025-08-21T06:56:52Z DEBUG Received events_system 2025-08-21T06:56:47Z INFO device.log: Applying slow writeback for point filter_differential_pressure_setpoint with 3s delay +2025-08-21T06:56:52Z DEBUG Received events_system 2025-08-21T06:56:47Z INFO device.log: Applying slow writeback for point filter_differential_pressure_sensor with 3s delay +2025-08-21T06:56:52Z DEBUG Received events_system 2025-08-21T06:56:47Z NOTICE system.config.apply: success +2025-08-21T06:56:52Z DEBUG Received events_system 2025-08-21T06:56:49Z INFO device.log: Update state 2025-08-21T06:56:49Z last_config 2025-08-21T06:56:47Z +2025-08-21T06:56:52Z DEBUG Received events_system 2025-08-21T06:56:50Z INFO device.log: Completing delayed writeback for filter_alarm_pressure_status +2025-08-21T06:56:52Z DEBUG Received events_system 2025-08-21T06:56:50Z INFO device.log: Completing delayed writeback for filter_differential_pressure_setpoint +2025-08-21T06:56:52Z DEBUG Received events_system 2025-08-21T06:56:50Z INFO device.log: Completing delayed writeback for filter_differential_pressure_sensor +2025-08-21T06:56:52Z DEBUG Received events_system 2025-08-21T06:56:50Z INFO device.log: Completing delayed writeback for filter_alarm_pressure_status +2025-08-21T06:56:52Z DEBUG Received events_system 2025-08-21T06:56:50Z INFO device.log: Completing delayed writeback for filter_differential_pressure_setpoint +2025-08-21T06:56:52Z DEBUG Received events_system 2025-08-21T06:56:50Z INFO device.log: Completing delayed writeback for filter_differential_pressure_sensor +2025-08-21T06:56:52Z DEBUG Received events_system 2025-08-21T06:56:51Z INFO device.log: Update state 2025-08-21T06:56:51Z last_config 2025-08-21T06:56:47Z +2025-08-21T06:56:52Z DEBUG Received events_system 2025-08-21T06:56:51Z INFO device.log: Device AHU-1 config handler +2025-08-21T06:56:52Z DEBUG Received events_system 2025-08-21T06:56:51Z INFO device.log: 2025-08-21T06:56:51Z received config 2025-08-21T06:56:51Z +2025-08-21T06:56:52Z DEBUG Received events_system 2025-08-21T06:56:51Z INFO device.log: Applying slow writeback for point filter_alarm_pressure_status with 3s delay +2025-08-21T06:56:52Z DEBUG Received events_system 2025-08-21T06:56:51Z INFO device.log: Applying slow writeback for point filter_differential_pressure_setpoint with 3s delay +2025-08-21T06:56:52Z DEBUG Received events_system 2025-08-21T06:56:51Z INFO device.log: Applying slow writeback for point filter_differential_pressure_sensor with 3s delay +2025-08-21T06:56:52Z DEBUG Received events_system 2025-08-21T06:56:51Z NOTICE system.config.apply: success +2025-08-21T06:56:52Z DEBUG Handling device message events_system MP:594cea24 +2025-08-21T06:56:52Z DEBUG Capturing AHU-1 message events_system +2025-08-21T06:56:53Z DEBUG Received command AHU-1/state/update as MP:af120d02 +2025-08-21T06:56:53Z DEBUG Received state_update +2025-08-21T06:56:53Z DEBUG Handling update message state_update MP:af120d02 +2025-08-21T06:56:53Z DEBUG Capturing AHU-1 message state_update +2025-08-21T06:56:53Z DEBUG Updated state after 0s 2025-08-21T06:56:53Z MP:af120d02 +2025-08-21T06:56:53Z INFO Updated state #004: Changed 6 fields: +2025-08-21T06:56:53Z INFO Updated state #004: Set `system.last_config` = `2025-08-21T06:56:51Z` +2025-08-21T06:56:53Z INFO Updated state #004: Set `system.status.timestamp` = `2025-08-21T06:56:51Z` +2025-08-21T06:56:53Z INFO Updated state #004: Add `pointset.points.filter_alarm_pressure_status.value_state` = `updating` +2025-08-21T06:56:53Z INFO Updated state #004: Set `pointset.points.filter_differential_pressure_setpoint.value_state` = `updating` +2025-08-21T06:56:53Z INFO Updated state #004: Add `pointset.points.filter_differential_pressure_sensor.value_state` = `updating` +2025-08-21T06:56:53Z INFO Updated state #004: Set `timestamp` = `2025-08-21T06:56:53Z` +2025-08-21T06:56:53Z DEBUG Updated state has last_config 2025-08-21T06:56:51Z (expecting 2025-08-21T06:56:51Z) +2025-08-21T06:56:53Z DEBUG Received command AHU-1/state/system as MP:af120d02-0 +2025-08-21T06:56:53Z TRACE Received state_system: { +2025-08-21T06:56:53Z TRACE Received state_system: "hardware" : { +2025-08-21T06:56:53Z TRACE Received state_system: "make" : "BOS", +2025-08-21T06:56:53Z TRACE Received state_system: "model" : "pubber" +2025-08-21T06:56:53Z TRACE Received state_system: }, +2025-08-21T06:56:53Z TRACE Received state_system: "last_config" : "2025-08-21T06:56:51Z", +2025-08-21T06:56:53Z TRACE Received state_system: "operation" : { +2025-08-21T06:56:53Z TRACE Received state_system: "operational" : true, +2025-08-21T06:56:53Z TRACE Received state_system: "last_start" : "2025-08-21T06:55:44Z", +2025-08-21T06:56:53Z TRACE Received state_system: "restart_count" : 1, +2025-08-21T06:56:53Z TRACE Received state_system: "mode" : "initial" +2025-08-21T06:56:53Z TRACE Received state_system: }, +2025-08-21T06:56:53Z TRACE Received state_system: "serial_no" : "742132", +2025-08-21T06:56:53Z TRACE Received state_system: "software" : { +2025-08-21T06:56:53Z TRACE Received state_system: "firmware" : "v1" +2025-08-21T06:56:53Z TRACE Received state_system: }, +2025-08-21T06:56:53Z TRACE Received state_system: "status" : { +2025-08-21T06:56:53Z TRACE Received state_system: "message" : "success", +2025-08-21T06:56:53Z TRACE Received state_system: "category" : "system.config.apply", +2025-08-21T06:56:53Z TRACE Received state_system: "timestamp" : "2025-08-21T06:56:51Z", +2025-08-21T06:56:53Z TRACE Received state_system: "level" : 300 +2025-08-21T06:56:53Z TRACE Received state_system: }, +2025-08-21T06:56:53Z TRACE Received state_system: "timestamp" : "2025-08-21T06:56:53Z", +2025-08-21T06:56:53Z TRACE Received state_system: "version" : "1.5.3" +2025-08-21T06:56:53Z TRACE Received state_system: } +2025-08-21T06:56:53Z DEBUG Handling device message state_system MP:af120d02-0 +2025-08-21T06:56:53Z TRACE Ignoring partial state update +2025-08-21T06:56:53Z DEBUG Detail config update synchronized is now: null +2025-08-21T06:56:53Z DEBUG Stage finished waiting for config update synchronized at @14s after 2s +2025-08-21T06:56:53Z TRACE Stage resume waiting for starting test wrapper at @14s +2025-08-21T06:56:53Z DEBUG Config sync took 2s +2025-08-21T06:56:53Z DEBUG Finished wait for config sync pending: null +2025-08-21T06:56:53Z DEBUG New lastConfigApplied at 2025-08-21T06:56:53Z +2025-08-21T06:56:53Z DEBUG Update config initial setup timestamp 2025-08-21T06:56:51Z +2025-08-21T06:56:53Z DEBUG Stale state cutoff threshold is 2025-08-21T06:56:37Z +2025-08-21T06:56:53Z DEBUG Waiting for device stateTransaction RC:3109d1.00000006 (was null) +2025-08-21T06:56:53Z TRACE Stage suspend waiting for starting test wrapper at @14s +2025-08-21T06:56:53Z INFO Stage start waiting for state query at @14s +2025-08-21T06:56:53Z DEBUG Received command AHU-1/state/discovery as MP:af120d02-1 +2025-08-21T06:56:53Z TRACE Received state_discovery: { +2025-08-21T06:56:53Z TRACE Received state_discovery: "families" : { }, +2025-08-21T06:56:53Z TRACE Received state_discovery: "timestamp" : "2025-08-21T06:56:53Z", +2025-08-21T06:56:53Z TRACE Received state_discovery: "version" : "1.5.3" +2025-08-21T06:56:53Z TRACE Received state_discovery: } +2025-08-21T06:56:53Z DEBUG Handling device message state_discovery MP:af120d02-1 +2025-08-21T06:56:53Z TRACE Ignoring partial state update +2025-08-21T06:56:53Z DEBUG Received command AHU-1/state/localnet as MP:af120d02-2 +2025-08-21T06:56:53Z TRACE Received state_localnet: { +2025-08-21T06:56:53Z TRACE Received state_localnet: "families" : { +2025-08-21T06:56:53Z TRACE Received state_localnet: "ether" : { +2025-08-21T06:56:53Z TRACE Received state_localnet: "addr" : "42:01:ac:10:83:22" +2025-08-21T06:56:53Z TRACE Received state_localnet: }, +2025-08-21T06:56:53Z TRACE Received state_localnet: "ipv4" : { +2025-08-21T06:56:53Z TRACE Received state_localnet: "addr" : "172.16.131.34" +2025-08-21T06:56:53Z TRACE Received state_localnet: }, +2025-08-21T06:56:53Z TRACE Received state_localnet: "vendor" : { +2025-08-21T06:56:53Z TRACE Received state_localnet: "addr" : "28179023" +2025-08-21T06:56:53Z TRACE Received state_localnet: }, +2025-08-21T06:56:53Z TRACE Received state_localnet: "bacnet" : { +2025-08-21T06:56:53Z TRACE Received state_localnet: "addr" : "27312" +2025-08-21T06:56:53Z TRACE Received state_localnet: } +2025-08-21T06:56:53Z TRACE Received state_localnet: }, +2025-08-21T06:56:53Z TRACE Received state_localnet: "timestamp" : "2025-08-21T06:56:53Z", +2025-08-21T06:56:53Z TRACE Received state_localnet: "version" : "1.5.3" +2025-08-21T06:56:53Z TRACE Received state_localnet: } +2025-08-21T06:56:53Z DEBUG Handling device message state_localnet MP:af120d02-2 +2025-08-21T06:56:53Z TRACE Ignoring partial state update +2025-08-21T06:56:53Z DEBUG Received command AHU-1/state/pointset as MP:af120d02-3 +2025-08-21T06:56:53Z TRACE Received state_pointset: { +2025-08-21T06:56:53Z TRACE Received state_pointset: "points" : { +2025-08-21T06:56:53Z TRACE Received state_pointset: "filter_alarm_pressure_status" : { +2025-08-21T06:56:53Z TRACE Received state_pointset: "units" : "No-units", +2025-08-21T06:56:53Z TRACE Received state_pointset: "value_state" : "updating" +2025-08-21T06:56:53Z TRACE Received state_pointset: }, +2025-08-21T06:56:53Z TRACE Received state_pointset: "filter_differential_pressure_setpoint" : { +2025-08-21T06:56:53Z TRACE Received state_pointset: "units" : "Bars", +2025-08-21T06:56:53Z TRACE Received state_pointset: "value_state" : "updating" +2025-08-21T06:56:53Z TRACE Received state_pointset: }, +2025-08-21T06:56:53Z TRACE Received state_pointset: "filter_differential_pressure_sensor" : { +2025-08-21T06:56:53Z TRACE Received state_pointset: "units" : "Degrees-Celsius", +2025-08-21T06:56:53Z TRACE Received state_pointset: "value_state" : "updating" +2025-08-21T06:56:53Z TRACE Received state_pointset: } +2025-08-21T06:56:53Z TRACE Received state_pointset: }, +2025-08-21T06:56:53Z TRACE Received state_pointset: "timestamp" : "2025-08-21T06:56:53Z", +2025-08-21T06:56:53Z TRACE Received state_pointset: "version" : "1.5.3" +2025-08-21T06:56:53Z TRACE Received state_pointset: } +2025-08-21T06:56:53Z DEBUG Handling device message state_pointset MP:af120d02-3 +2025-08-21T06:56:53Z TRACE Ignoring partial state update +2025-08-21T06:56:54Z DEBUG Received command AHU-1/state/update as RC:3109d1.00000006 +2025-08-21T06:56:54Z DEBUG Received state_update +2025-08-21T06:56:54Z DEBUG Handling update message state_update RC:3109d1.00000006 +2025-08-21T06:56:54Z DEBUG Removed stateTransaction RC:3109d1.00000006 +2025-08-21T06:56:54Z DEBUG Capturing AHU-1 message state_update +2025-08-21T06:56:54Z DEBUG Updated state after 1s 2025-08-21T06:56:53Z RC:3109d1.00000006 +2025-08-21T06:56:54Z INFO Updated state #005: Changed 0 fields. +2025-08-21T06:56:54Z DEBUG Updated state has last_config 2025-08-21T06:56:51Z (expecting 2025-08-21T06:56:51Z) +2025-08-21T06:56:54Z DEBUG Stage finished waiting for state query at @15s after 1s +2025-08-21T06:56:54Z TRACE Stage resume waiting for starting test wrapper at @15s +2025-08-21T06:56:54Z TRACE Stage suspend waiting for starting test wrapper at @15s +2025-08-21T06:56:54Z INFO Stage start waiting for initial device state at @15s +2025-08-21T06:56:54Z DEBUG Delay from lastConfigApplied 2025-08-21T06:56:53.495166168Z is 982ms +2025-08-21T06:56:54Z DEBUG Rate-limiting config by 982ms +2025-08-21T06:56:55Z TRACE Updated check config_update: true +2025-08-21T06:56:55Z DEBUG Update config_update, adding configTransaction RC:3109d1.00000007 +2025-08-21T06:56:55Z DEBUG Using pre-config state timestamp 2025-08-21T06:56:53Z +2025-08-21T06:56:55Z DEBUG Update lastConfigIssued 2025-08-21T06:56:55Z, because before initial device state +2025-08-21T06:56:55Z TRACE Stage suspend waiting for initial device state at @16s +2025-08-21T06:56:55Z INFO Stage start waiting for config update synchronized at @16s +2025-08-21T06:56:55Z DEBUG Received command AHU-1/reply/update as RC:3109d1.00000006 +2025-08-21T06:56:55Z DEBUG Received command AHU-1/state/update as MP:210c68f1 +2025-08-21T06:56:55Z DEBUG Received state_update +2025-08-21T06:56:55Z DEBUG Handling update message state_update MP:210c68f1 +2025-08-21T06:56:55Z DEBUG Capturing AHU-1 message state_update +2025-08-21T06:56:55Z DEBUG Updated state after 0s 2025-08-21T06:56:55Z MP:210c68f1 +2025-08-21T06:56:55Z INFO Updated state #006: Changed 4 fields: +2025-08-21T06:56:55Z INFO Updated state #006: Remove `pointset.points.filter_alarm_pressure_status.value_state` +2025-08-21T06:56:55Z INFO Updated state #006: Set `pointset.points.filter_differential_pressure_setpoint.value_state` = `applied` +2025-08-21T06:56:55Z INFO Updated state #006: Remove `pointset.points.filter_differential_pressure_sensor.value_state` +2025-08-21T06:56:55Z INFO Updated state #006: Set `timestamp` = `2025-08-21T06:56:55Z` +2025-08-21T06:56:55Z DEBUG Updated state has last_config 2025-08-21T06:56:51Z (expecting 2025-08-21T06:56:51Z) +2025-08-21T06:56:55Z DEBUG Received command AHU-1/state/system as MP:210c68f1-0 +2025-08-21T06:56:55Z TRACE Received state_system: { +2025-08-21T06:56:55Z TRACE Received state_system: "hardware" : { +2025-08-21T06:56:55Z TRACE Received state_system: "make" : "BOS", +2025-08-21T06:56:55Z TRACE Received state_system: "model" : "pubber" +2025-08-21T06:56:55Z TRACE Received state_system: }, +2025-08-21T06:56:55Z TRACE Received state_system: "last_config" : "2025-08-21T06:56:51Z", +2025-08-21T06:56:55Z TRACE Received state_system: "operation" : { +2025-08-21T06:56:55Z TRACE Received state_system: "operational" : true, +2025-08-21T06:56:55Z TRACE Received state_system: "last_start" : "2025-08-21T06:55:44Z", +2025-08-21T06:56:55Z TRACE Received state_system: "restart_count" : 1, +2025-08-21T06:56:55Z TRACE Received state_system: "mode" : "initial" +2025-08-21T06:56:55Z TRACE Received state_system: }, +2025-08-21T06:56:55Z TRACE Received state_system: "serial_no" : "742132", +2025-08-21T06:56:55Z TRACE Received state_system: "software" : { +2025-08-21T06:56:55Z TRACE Received state_system: "firmware" : "v1" +2025-08-21T06:56:55Z TRACE Received state_system: }, +2025-08-21T06:56:55Z TRACE Received state_system: "status" : { +2025-08-21T06:56:55Z TRACE Received state_system: "message" : "success", +2025-08-21T06:56:55Z TRACE Received state_system: "category" : "system.config.apply", +2025-08-21T06:56:55Z TRACE Received state_system: "timestamp" : "2025-08-21T06:56:51Z", +2025-08-21T06:56:55Z TRACE Received state_system: "level" : 300 +2025-08-21T06:56:55Z TRACE Received state_system: }, +2025-08-21T06:56:55Z TRACE Received state_system: "timestamp" : "2025-08-21T06:56:55Z", +2025-08-21T06:56:55Z TRACE Received state_system: "version" : "1.5.3" +2025-08-21T06:56:55Z TRACE Received state_system: } +2025-08-21T06:56:55Z DEBUG Handling device message state_system MP:210c68f1-0 +2025-08-21T06:56:55Z TRACE Ignoring partial state update +2025-08-21T06:56:55Z DEBUG Received command AHU-1/state/discovery as MP:210c68f1-1 +2025-08-21T06:56:55Z TRACE Received state_discovery: { +2025-08-21T06:56:55Z TRACE Received state_discovery: "families" : { }, +2025-08-21T06:56:55Z TRACE Received state_discovery: "timestamp" : "2025-08-21T06:56:55Z", +2025-08-21T06:56:55Z TRACE Received state_discovery: "version" : "1.5.3" +2025-08-21T06:56:55Z TRACE Received state_discovery: } +2025-08-21T06:56:55Z DEBUG Handling device message state_discovery MP:210c68f1-1 +2025-08-21T06:56:55Z TRACE Ignoring partial state update +2025-08-21T06:56:55Z DEBUG Received command AHU-1/state/localnet as MP:210c68f1-2 +2025-08-21T06:56:55Z TRACE Received state_localnet: { +2025-08-21T06:56:55Z TRACE Received state_localnet: "families" : { +2025-08-21T06:56:55Z TRACE Received state_localnet: "ether" : { +2025-08-21T06:56:55Z TRACE Received state_localnet: "addr" : "42:01:ac:10:83:22" +2025-08-21T06:56:55Z TRACE Received state_localnet: }, +2025-08-21T06:56:55Z TRACE Received state_localnet: "ipv4" : { +2025-08-21T06:56:55Z TRACE Received state_localnet: "addr" : "172.16.131.34" +2025-08-21T06:56:55Z TRACE Received state_localnet: }, +2025-08-21T06:56:55Z TRACE Received state_localnet: "vendor" : { +2025-08-21T06:56:55Z TRACE Received state_localnet: "addr" : "28179023" +2025-08-21T06:56:55Z TRACE Received state_localnet: }, +2025-08-21T06:56:55Z TRACE Received state_localnet: "bacnet" : { +2025-08-21T06:56:55Z TRACE Received state_localnet: "addr" : "27312" +2025-08-21T06:56:55Z TRACE Received state_localnet: } +2025-08-21T06:56:55Z TRACE Received state_localnet: }, +2025-08-21T06:56:55Z TRACE Received state_localnet: "timestamp" : "2025-08-21T06:56:55Z", +2025-08-21T06:56:55Z TRACE Received state_localnet: "version" : "1.5.3" +2025-08-21T06:56:55Z TRACE Received state_localnet: } +2025-08-21T06:56:55Z DEBUG Handling device message state_localnet MP:210c68f1-2 +2025-08-21T06:56:55Z TRACE Ignoring partial state update +2025-08-21T06:56:55Z DEBUG Received command AHU-1/state/pointset as MP:210c68f1-3 +2025-08-21T06:56:55Z TRACE Received state_pointset: { +2025-08-21T06:56:55Z TRACE Received state_pointset: "points" : { +2025-08-21T06:56:55Z TRACE Received state_pointset: "filter_alarm_pressure_status" : { +2025-08-21T06:56:55Z TRACE Received state_pointset: "units" : "No-units" +2025-08-21T06:56:55Z TRACE Received state_pointset: }, +2025-08-21T06:56:55Z TRACE Received state_pointset: "filter_differential_pressure_setpoint" : { +2025-08-21T06:56:55Z TRACE Received state_pointset: "units" : "Bars", +2025-08-21T06:56:55Z TRACE Received state_pointset: "value_state" : "applied" +2025-08-21T06:56:55Z TRACE Received state_pointset: }, +2025-08-21T06:56:55Z TRACE Received state_pointset: "filter_differential_pressure_sensor" : { +2025-08-21T06:56:55Z TRACE Received state_pointset: "units" : "Degrees-Celsius" +2025-08-21T06:56:55Z TRACE Received state_pointset: } +2025-08-21T06:56:55Z TRACE Received state_pointset: }, +2025-08-21T06:56:55Z TRACE Received state_pointset: "timestamp" : "2025-08-21T06:56:55Z", +2025-08-21T06:56:55Z TRACE Received state_pointset: "version" : "1.5.3" +2025-08-21T06:56:55Z TRACE Received state_pointset: } +2025-08-21T06:56:55Z DEBUG Handling device message state_pointset MP:210c68f1-3 +2025-08-21T06:56:55Z TRACE Ignoring partial state update +2025-08-21T06:56:56Z DEBUG Received command AHU-1/config/update as RC:3109d1.00000007 +2025-08-21T06:56:56Z DEBUG Received config_update +2025-08-21T06:56:56Z DEBUG Handling update message config_update RC:3109d1.00000007 +2025-08-21T06:56:56Z DEBUG Removed configTransaction RC:3109d1.00000007 +2025-08-21T06:56:56Z DEBUG Set last_start changed false, last_start 2025-08-21T06:55:44Z +2025-08-21T06:56:56Z DEBUG Updated config 2025-08-21T06:56:55Z RC:3109d1.00000007 +2025-08-21T06:56:56Z INFO Updated config #004: Changed 0 fields. +2025-08-21T06:56:56Z DEBUG Expected last_config now 2025-08-21T06:56:55Z +2025-08-21T06:56:56Z DEBUG Detail config update synchronized is now: last_config not synced in state +2025-08-21T06:56:56Z DEBUG Received command AHU-1/config/update as CU:3109d1.00000007 +2025-08-21T06:56:56Z DEBUG Received config_update +2025-08-21T06:56:56Z DEBUG Handling update message config_update CU:3109d1.00000007 +2025-08-21T06:56:56Z DEBUG Ignoring operation reply CU:3109d1.00000007 +2025-08-21T06:56:57Z DEBUG Received command AHU-1/state/update as MP:ee8a8f53 +2025-08-21T06:56:57Z DEBUG Received state_update +2025-08-21T06:56:57Z DEBUG Handling update message state_update MP:ee8a8f53 +2025-08-21T06:56:57Z DEBUG Capturing AHU-1 message state_update +2025-08-21T06:56:57Z DEBUG Updated state after 0s 2025-08-21T06:56:57Z MP:ee8a8f53 +2025-08-21T06:56:57Z INFO Updated state #007: Changed 6 fields: +2025-08-21T06:56:57Z INFO Updated state #007: Set `system.last_config` = `2025-08-21T06:56:55Z` +2025-08-21T06:56:57Z INFO Updated state #007: Set `system.status.timestamp` = `2025-08-21T06:56:55Z` +2025-08-21T06:56:57Z INFO Updated state #007: Add `pointset.points.filter_alarm_pressure_status.value_state` = `updating` +2025-08-21T06:56:57Z INFO Updated state #007: Set `pointset.points.filter_differential_pressure_setpoint.value_state` = `updating` +2025-08-21T06:56:57Z INFO Updated state #007: Add `pointset.points.filter_differential_pressure_sensor.value_state` = `updating` +2025-08-21T06:56:57Z INFO Updated state #007: Set `timestamp` = `2025-08-21T06:56:57Z` +2025-08-21T06:56:57Z DEBUG Updated state has last_config 2025-08-21T06:56:55Z (expecting 2025-08-21T06:56:55Z) +2025-08-21T06:56:57Z DEBUG Received command AHU-1/state/system as MP:ee8a8f53-0 +2025-08-21T06:56:57Z TRACE Received state_system: { +2025-08-21T06:56:57Z TRACE Received state_system: "hardware" : { +2025-08-21T06:56:57Z TRACE Received state_system: "make" : "BOS", +2025-08-21T06:56:57Z TRACE Received state_system: "model" : "pubber" +2025-08-21T06:56:57Z TRACE Received state_system: }, +2025-08-21T06:56:57Z TRACE Received state_system: "last_config" : "2025-08-21T06:56:55Z", +2025-08-21T06:56:57Z TRACE Received state_system: "operation" : { +2025-08-21T06:56:57Z TRACE Received state_system: "operational" : true, +2025-08-21T06:56:57Z TRACE Received state_system: "last_start" : "2025-08-21T06:55:44Z", +2025-08-21T06:56:57Z TRACE Received state_system: "restart_count" : 1, +2025-08-21T06:56:57Z TRACE Received state_system: "mode" : "initial" +2025-08-21T06:56:57Z TRACE Received state_system: }, +2025-08-21T06:56:57Z TRACE Received state_system: "serial_no" : "742132", +2025-08-21T06:56:57Z TRACE Received state_system: "software" : { +2025-08-21T06:56:57Z TRACE Received state_system: "firmware" : "v1" +2025-08-21T06:56:57Z TRACE Received state_system: }, +2025-08-21T06:56:57Z TRACE Received state_system: "status" : { +2025-08-21T06:56:57Z TRACE Received state_system: "message" : "success", +2025-08-21T06:56:57Z TRACE Received state_system: "category" : "system.config.apply", +2025-08-21T06:56:57Z TRACE Received state_system: "timestamp" : "2025-08-21T06:56:55Z", +2025-08-21T06:56:57Z TRACE Received state_system: "level" : 300 +2025-08-21T06:56:57Z TRACE Received state_system: }, +2025-08-21T06:56:57Z TRACE Received state_system: "timestamp" : "2025-08-21T06:56:57Z", +2025-08-21T06:56:57Z TRACE Received state_system: "version" : "1.5.3" +2025-08-21T06:56:57Z TRACE Received state_system: } +2025-08-21T06:56:57Z DEBUG Handling device message state_system MP:ee8a8f53-0 +2025-08-21T06:56:57Z TRACE Ignoring partial state update +2025-08-21T06:56:57Z DEBUG Detail config update synchronized is now: null +2025-08-21T06:56:57Z DEBUG Stage finished waiting for config update synchronized at @18s after 2s +2025-08-21T06:56:57Z TRACE Stage resume waiting for initial device state at @18s +2025-08-21T06:56:57Z DEBUG Config sync took 2s +2025-08-21T06:56:57Z DEBUG Finished wait for config sync pending: null +2025-08-21T06:56:57Z DEBUG New lastConfigApplied at 2025-08-21T06:56:57Z +2025-08-21T06:56:57Z DEBUG Update config before initial device state timestamp 2025-08-21T06:56:55Z +2025-08-21T06:56:57Z DEBUG Stage finished waiting for initial device state at @18s after 3s +2025-08-21T06:56:57Z TRACE Stage resume waiting for starting test wrapper at @18s +2025-08-21T06:56:57Z DEBUG Device state system status level is now 300 +2025-08-21T06:56:57Z TRACE Stage suspend waiting for starting test wrapper at @18s +2025-08-21T06:56:57Z INFO Stage start waiting for config update synchronized at @18s +2025-08-21T06:56:57Z DEBUG Received command AHU-1/state/discovery as MP:ee8a8f53-1 +2025-08-21T06:56:57Z TRACE Received state_discovery: { +2025-08-21T06:56:57Z TRACE Received state_discovery: "families" : { }, +2025-08-21T06:56:57Z TRACE Received state_discovery: "timestamp" : "2025-08-21T06:56:57Z", +2025-08-21T06:56:57Z TRACE Received state_discovery: "version" : "1.5.3" +2025-08-21T06:56:57Z TRACE Received state_discovery: } +2025-08-21T06:56:57Z DEBUG Handling device message state_discovery MP:ee8a8f53-1 +2025-08-21T06:56:57Z TRACE Ignoring partial state update +2025-08-21T06:56:57Z DEBUG Received command AHU-1/state/localnet as MP:ee8a8f53-2 +2025-08-21T06:56:57Z TRACE Received state_localnet: { +2025-08-21T06:56:57Z TRACE Received state_localnet: "families" : { +2025-08-21T06:56:57Z TRACE Received state_localnet: "ether" : { +2025-08-21T06:56:57Z TRACE Received state_localnet: "addr" : "42:01:ac:10:83:22" +2025-08-21T06:56:57Z TRACE Received state_localnet: }, +2025-08-21T06:56:57Z TRACE Received state_localnet: "ipv4" : { +2025-08-21T06:56:57Z TRACE Received state_localnet: "addr" : "172.16.131.34" +2025-08-21T06:56:57Z TRACE Received state_localnet: }, +2025-08-21T06:56:57Z TRACE Received state_localnet: "vendor" : { +2025-08-21T06:56:57Z TRACE Received state_localnet: "addr" : "28179023" +2025-08-21T06:56:57Z TRACE Received state_localnet: }, +2025-08-21T06:56:57Z TRACE Received state_localnet: "bacnet" : { +2025-08-21T06:56:57Z TRACE Received state_localnet: "addr" : "27312" +2025-08-21T06:56:57Z TRACE Received state_localnet: } +2025-08-21T06:56:57Z TRACE Received state_localnet: }, +2025-08-21T06:56:57Z TRACE Received state_localnet: "timestamp" : "2025-08-21T06:56:57Z", +2025-08-21T06:56:57Z TRACE Received state_localnet: "version" : "1.5.3" +2025-08-21T06:56:57Z TRACE Received state_localnet: } +2025-08-21T06:56:57Z DEBUG Handling device message state_localnet MP:ee8a8f53-2 +2025-08-21T06:56:57Z TRACE Ignoring partial state update +2025-08-21T06:56:57Z DEBUG Stage finished waiting for config update synchronized at @18s after 0s +2025-08-21T06:56:57Z TRACE Stage resume waiting for starting test wrapper at @18s +2025-08-21T06:56:57Z DEBUG Config sync took 2s +2025-08-21T06:56:57Z DEBUG Finished wait for config sync pending: null +2025-08-21T06:56:57Z TRACE Stage suspend waiting for starting test wrapper at @18s +2025-08-21T06:56:57Z INFO Stage start waiting for executing test at @18s +2025-08-21T06:56:57Z DEBUG stage begin waiting for executing test at @18s +2025-08-21T06:56:57Z DEBUG Allowing device state change pointset.points. +2025-08-21T06:56:57Z TRACE Stage suspend waiting for executing test at @18s +2025-08-21T06:56:57Z INFO Stage start waiting for target point has value_state default (null) at @18s +2025-08-21T06:56:57Z DEBUG Delay from lastConfigApplied 2025-08-21T06:56:57.530035711Z is 1531ms +2025-08-21T06:56:57Z DEBUG Rate-limiting config by 1531ms +2025-08-21T06:56:59Z DEBUG System config extra field null +2025-08-21T06:56:59Z TRACE Updated check config_system: true +2025-08-21T06:56:59Z DEBUG Update config_system, adding configTransaction RC:3109d1.00000008 +2025-08-21T06:56:59Z TRACE Updated check config_pointset: true +2025-08-21T06:56:59Z DEBUG Update config_pointset, adding configTransaction RC:3109d1.00000009 +2025-08-21T06:56:59Z TRACE Updated check config_gateway: false +2025-08-21T06:56:59Z TRACE Updated check config_localnet: true +2025-08-21T06:56:59Z DEBUG Update config_localnet, adding configTransaction RC:3109d1.0000000a +2025-08-21T06:56:59Z TRACE Updated check config_blobset: false +2025-08-21T06:56:59Z TRACE Updated check config_discovery: true +2025-08-21T06:56:59Z DEBUG Update config_discovery, adding configTransaction RC:3109d1.0000000b +2025-08-21T06:56:59Z DEBUG Using pre-config state timestamp 2025-08-21T06:56:57Z +2025-08-21T06:56:59Z DEBUG Update lastConfigIssued 2025-08-21T06:56:59Z, because before target point has value_state default (null) +2025-08-21T06:56:59Z TRACE Stage suspend waiting for target point has value_state default (null) at @20s +2025-08-21T06:56:59Z INFO Stage start waiting for config update synchronized at @20s +2025-08-21T06:56:59Z DEBUG Received command AHU-1/state/pointset as MP:ee8a8f53-3 +2025-08-21T06:56:59Z TRACE Received state_pointset: { +2025-08-21T06:56:59Z TRACE Received state_pointset: "points" : { +2025-08-21T06:56:59Z TRACE Received state_pointset: "filter_alarm_pressure_status" : { +2025-08-21T06:56:59Z TRACE Received state_pointset: "units" : "No-units", +2025-08-21T06:56:59Z TRACE Received state_pointset: "value_state" : "updating" +2025-08-21T06:56:59Z TRACE Received state_pointset: }, +2025-08-21T06:56:59Z TRACE Received state_pointset: "filter_differential_pressure_setpoint" : { +2025-08-21T06:56:59Z TRACE Received state_pointset: "units" : "Bars", +2025-08-21T06:56:59Z TRACE Received state_pointset: "value_state" : "updating" +2025-08-21T06:56:59Z TRACE Received state_pointset: }, +2025-08-21T06:56:59Z TRACE Received state_pointset: "filter_differential_pressure_sensor" : { +2025-08-21T06:56:59Z TRACE Received state_pointset: "units" : "Degrees-Celsius", +2025-08-21T06:56:59Z TRACE Received state_pointset: "value_state" : "updating" +2025-08-21T06:56:59Z TRACE Received state_pointset: } +2025-08-21T06:56:59Z TRACE Received state_pointset: }, +2025-08-21T06:56:59Z TRACE Received state_pointset: "timestamp" : "2025-08-21T06:56:57Z", +2025-08-21T06:56:59Z TRACE Received state_pointset: "version" : "1.5.3" +2025-08-21T06:56:59Z TRACE Received state_pointset: } +2025-08-21T06:56:59Z DEBUG Handling device message state_pointset MP:ee8a8f53-3 +2025-08-21T06:56:59Z TRACE Ignoring partial state update +2025-08-21T06:56:59Z DEBUG Received command AHU-1/state/update as MP:7eaf900b +2025-08-21T06:56:59Z DEBUG Received state_update +2025-08-21T06:56:59Z DEBUG Handling update message state_update MP:7eaf900b +2025-08-21T06:56:59Z DEBUG Capturing AHU-1 message state_update +2025-08-21T06:56:59Z DEBUG Updated state after 0s 2025-08-21T06:56:59Z MP:7eaf900b +2025-08-21T06:56:59Z INFO Updated state #008: Changed 4 fields: +2025-08-21T06:56:59Z INFO Updated state #008: Remove `pointset.points.filter_alarm_pressure_status.value_state` +2025-08-21T06:56:59Z INFO Updated state #008: Set `pointset.points.filter_differential_pressure_setpoint.value_state` = `applied` +2025-08-21T06:56:59Z INFO Updated state #008: Remove `pointset.points.filter_differential_pressure_sensor.value_state` +2025-08-21T06:56:59Z INFO Updated state #008: Set `timestamp` = `2025-08-21T06:56:59Z` +2025-08-21T06:56:59Z DEBUG Updated state has last_config 2025-08-21T06:56:55Z (expecting 2025-08-21T06:56:55Z) +2025-08-21T06:56:59Z DEBUG Received command AHU-1/state/system as MP:7eaf900b-0 +2025-08-21T06:56:59Z TRACE Received state_system: { +2025-08-21T06:56:59Z TRACE Received state_system: "hardware" : { +2025-08-21T06:56:59Z TRACE Received state_system: "make" : "BOS", +2025-08-21T06:56:59Z TRACE Received state_system: "model" : "pubber" +2025-08-21T06:56:59Z TRACE Received state_system: }, +2025-08-21T06:56:59Z TRACE Received state_system: "last_config" : "2025-08-21T06:56:55Z", +2025-08-21T06:56:59Z TRACE Received state_system: "operation" : { +2025-08-21T06:56:59Z TRACE Received state_system: "operational" : true, +2025-08-21T06:56:59Z TRACE Received state_system: "last_start" : "2025-08-21T06:55:44Z", +2025-08-21T06:56:59Z TRACE Received state_system: "restart_count" : 1, +2025-08-21T06:56:59Z TRACE Received state_system: "mode" : "initial" +2025-08-21T06:56:59Z TRACE Received state_system: }, +2025-08-21T06:56:59Z TRACE Received state_system: "serial_no" : "742132", +2025-08-21T06:56:59Z TRACE Received state_system: "software" : { +2025-08-21T06:56:59Z TRACE Received state_system: "firmware" : "v1" +2025-08-21T06:56:59Z TRACE Received state_system: }, +2025-08-21T06:56:59Z TRACE Received state_system: "status" : { +2025-08-21T06:56:59Z TRACE Received state_system: "message" : "success", +2025-08-21T06:56:59Z TRACE Received state_system: "category" : "system.config.apply", +2025-08-21T06:56:59Z TRACE Received state_system: "timestamp" : "2025-08-21T06:56:55Z", +2025-08-21T06:56:59Z TRACE Received state_system: "level" : 300 +2025-08-21T06:56:59Z TRACE Received state_system: }, +2025-08-21T06:56:59Z TRACE Received state_system: "timestamp" : "2025-08-21T06:56:59Z", +2025-08-21T06:56:59Z TRACE Received state_system: "version" : "1.5.3" +2025-08-21T06:56:59Z TRACE Received state_system: } +2025-08-21T06:56:59Z DEBUG Handling device message state_system MP:7eaf900b-0 +2025-08-21T06:56:59Z TRACE Ignoring partial state update +2025-08-21T06:56:59Z DEBUG Received command AHU-1/state/discovery as MP:7eaf900b-1 +2025-08-21T06:56:59Z TRACE Received state_discovery: { +2025-08-21T06:56:59Z TRACE Received state_discovery: "families" : { }, +2025-08-21T06:56:59Z TRACE Received state_discovery: "timestamp" : "2025-08-21T06:56:59Z", +2025-08-21T06:56:59Z TRACE Received state_discovery: "version" : "1.5.3" +2025-08-21T06:56:59Z TRACE Received state_discovery: } +2025-08-21T06:56:59Z DEBUG Handling device message state_discovery MP:7eaf900b-1 +2025-08-21T06:56:59Z TRACE Ignoring partial state update +2025-08-21T06:56:59Z DEBUG Received command AHU-1/state/localnet as MP:7eaf900b-2 +2025-08-21T06:56:59Z TRACE Received state_localnet: { +2025-08-21T06:56:59Z TRACE Received state_localnet: "families" : { +2025-08-21T06:56:59Z TRACE Received state_localnet: "ether" : { +2025-08-21T06:56:59Z TRACE Received state_localnet: "addr" : "42:01:ac:10:83:22" +2025-08-21T06:56:59Z TRACE Received state_localnet: }, +2025-08-21T06:56:59Z TRACE Received state_localnet: "ipv4" : { +2025-08-21T06:56:59Z TRACE Received state_localnet: "addr" : "172.16.131.34" +2025-08-21T06:56:59Z TRACE Received state_localnet: }, +2025-08-21T06:56:59Z TRACE Received state_localnet: "vendor" : { +2025-08-21T06:56:59Z TRACE Received state_localnet: "addr" : "28179023" +2025-08-21T06:56:59Z TRACE Received state_localnet: }, +2025-08-21T06:56:59Z TRACE Received state_localnet: "bacnet" : { +2025-08-21T06:56:59Z TRACE Received state_localnet: "addr" : "27312" +2025-08-21T06:56:59Z TRACE Received state_localnet: } +2025-08-21T06:56:59Z TRACE Received state_localnet: }, +2025-08-21T06:56:59Z TRACE Received state_localnet: "timestamp" : "2025-08-21T06:56:59Z", +2025-08-21T06:56:59Z TRACE Received state_localnet: "version" : "1.5.3" +2025-08-21T06:56:59Z TRACE Received state_localnet: } +2025-08-21T06:56:59Z DEBUG Handling device message state_localnet MP:7eaf900b-2 +2025-08-21T06:56:59Z TRACE Ignoring partial state update +2025-08-21T06:56:59Z DEBUG Received command AHU-1/state/pointset as MP:7eaf900b-3 +2025-08-21T06:56:59Z TRACE Received state_pointset: { +2025-08-21T06:56:59Z TRACE Received state_pointset: "points" : { +2025-08-21T06:56:59Z TRACE Received state_pointset: "filter_alarm_pressure_status" : { +2025-08-21T06:56:59Z TRACE Received state_pointset: "units" : "No-units" +2025-08-21T06:56:59Z TRACE Received state_pointset: }, +2025-08-21T06:56:59Z TRACE Received state_pointset: "filter_differential_pressure_setpoint" : { +2025-08-21T06:56:59Z TRACE Received state_pointset: "units" : "Bars", +2025-08-21T06:56:59Z TRACE Received state_pointset: "value_state" : "applied" +2025-08-21T06:56:59Z TRACE Received state_pointset: }, +2025-08-21T06:56:59Z TRACE Received state_pointset: "filter_differential_pressure_sensor" : { +2025-08-21T06:56:59Z TRACE Received state_pointset: "units" : "Degrees-Celsius" +2025-08-21T06:56:59Z TRACE Received state_pointset: } +2025-08-21T06:56:59Z TRACE Received state_pointset: }, +2025-08-21T06:56:59Z TRACE Received state_pointset: "timestamp" : "2025-08-21T06:56:59Z", +2025-08-21T06:56:59Z TRACE Received state_pointset: "version" : "1.5.3" +2025-08-21T06:56:59Z TRACE Received state_pointset: } +2025-08-21T06:56:59Z DEBUG Handling device message state_pointset MP:7eaf900b-3 +2025-08-21T06:56:59Z TRACE Ignoring partial state update +2025-08-21T06:57:00Z DEBUG Received command AHU-1/config/update as RC:3109d1.00000008 +2025-08-21T06:57:00Z DEBUG Received config_update +2025-08-21T06:57:00Z DEBUG Handling update message config_update RC:3109d1.00000008 +2025-08-21T06:57:00Z DEBUG Removed configTransaction RC:3109d1.00000008 +2025-08-21T06:57:00Z DEBUG Set last_start changed false, last_start 2025-08-21T06:55:44Z +2025-08-21T06:57:00Z DEBUG Updated config 2025-08-21T06:56:59Z RC:3109d1.00000008 +2025-08-21T06:57:00Z INFO Updated config #005: Changed 1 fields: +2025-08-21T06:57:00Z INFO Updated config #005: Remove `pointset.points.filter_differential_pressure_setpoint.set_value` +2025-08-21T06:57:00Z DEBUG Expected last_config now 2025-08-21T06:56:59Z +2025-08-21T06:57:00Z DEBUG Detail config update synchronized is now: config transactions not cleared, last_config not synced in state +2025-08-21T06:57:00Z DEBUG Received command AHU-1/config/system as CU:3109d1.00000008 +2025-08-21T06:57:00Z TRACE Received config_system: { +2025-08-21T06:57:00Z TRACE Received config_system: "operation" : "REPLY" +2025-08-21T06:57:00Z TRACE Received config_system: } +2025-08-21T06:57:00Z DEBUG Handling device message config_system CU:3109d1.00000008 +2025-08-21T06:57:00Z TRACE Ignoring echo configTransaction CU:3109d1.00000008 +2025-08-21T06:57:00Z DEBUG Received command null/config/udmi as null +2025-08-21T06:57:01Z DEBUG Received command AHU-1/config/update as RC:3109d1.0000000a +2025-08-21T06:57:01Z DEBUG Received config_update +2025-08-21T06:57:01Z DEBUG Handling update message config_update RC:3109d1.0000000a +2025-08-21T06:57:01Z DEBUG Removed configTransaction RC:3109d1.0000000a +2025-08-21T06:57:01Z DEBUG Set last_start changed false, last_start 2025-08-21T06:55:44Z +2025-08-21T06:57:01Z DEBUG Updated config 2025-08-21T06:57:00Z RC:3109d1.0000000a +2025-08-21T06:57:01Z INFO Updated config #006: Changed 0 fields. +2025-08-21T06:57:01Z DEBUG Expected last_config now 2025-08-21T06:57:00Z +2025-08-21T06:57:01Z DEBUG Received command AHU-1/config/localnet as CU:3109d1.0000000a +2025-08-21T06:57:01Z TRACE Received config_localnet: { +2025-08-21T06:57:01Z TRACE Received config_localnet: "operation" : "REPLY" +2025-08-21T06:57:01Z TRACE Received config_localnet: } +2025-08-21T06:57:01Z DEBUG Handling device message config_localnet CU:3109d1.0000000a +2025-08-21T06:57:01Z TRACE Ignoring echo configTransaction CU:3109d1.0000000a +2025-08-21T06:57:01Z DEBUG Received command AHU-1/state/update as MP:13eb1e08 +2025-08-21T06:57:01Z DEBUG Received state_update +2025-08-21T06:57:01Z DEBUG Handling update message state_update MP:13eb1e08 +2025-08-21T06:57:01Z DEBUG Capturing AHU-1 message state_update +2025-08-21T06:57:01Z DEBUG Updated state after 0s 2025-08-21T06:57:01Z MP:13eb1e08 +2025-08-21T06:57:01Z INFO Updated state #009: Changed 6 fields: +2025-08-21T06:57:01Z INFO Updated state #009: Set `system.last_config` = `2025-08-21T06:57:00Z` +2025-08-21T06:57:01Z INFO Updated state #009: Set `system.status.timestamp` = `2025-08-21T06:57:00Z` +2025-08-21T06:57:01Z INFO Updated state #009: Add `pointset.points.filter_alarm_pressure_status.value_state` = `updating` +2025-08-21T06:57:01Z INFO Updated state #009: Set `pointset.points.filter_differential_pressure_setpoint.value_state` = `updating` +2025-08-21T06:57:01Z INFO Updated state #009: Add `pointset.points.filter_differential_pressure_sensor.value_state` = `updating` +2025-08-21T06:57:01Z INFO Updated state #009: Set `timestamp` = `2025-08-21T06:57:01Z` +2025-08-21T06:57:01Z DEBUG Updated state has last_config 2025-08-21T06:57:00Z (expecting 2025-08-21T06:57:00Z) +2025-08-21T06:57:01Z DEBUG Detail config update synchronized is now: config transactions not cleared +2025-08-21T06:57:01Z DEBUG Received command AHU-1/state/system as MP:13eb1e08-0 +2025-08-21T06:57:01Z TRACE Received state_system: { +2025-08-21T06:57:01Z TRACE Received state_system: "hardware" : { +2025-08-21T06:57:01Z TRACE Received state_system: "make" : "BOS", +2025-08-21T06:57:01Z TRACE Received state_system: "model" : "pubber" +2025-08-21T06:57:01Z TRACE Received state_system: }, +2025-08-21T06:57:01Z TRACE Received state_system: "last_config" : "2025-08-21T06:57:00Z", +2025-08-21T06:57:01Z TRACE Received state_system: "operation" : { +2025-08-21T06:57:01Z TRACE Received state_system: "operational" : true, +2025-08-21T06:57:01Z TRACE Received state_system: "last_start" : "2025-08-21T06:55:44Z", +2025-08-21T06:57:01Z TRACE Received state_system: "restart_count" : 1, +2025-08-21T06:57:01Z TRACE Received state_system: "mode" : "initial" +2025-08-21T06:57:01Z TRACE Received state_system: }, +2025-08-21T06:57:01Z TRACE Received state_system: "serial_no" : "742132", +2025-08-21T06:57:01Z TRACE Received state_system: "software" : { +2025-08-21T06:57:01Z TRACE Received state_system: "firmware" : "v1" +2025-08-21T06:57:01Z TRACE Received state_system: }, +2025-08-21T06:57:01Z TRACE Received state_system: "status" : { +2025-08-21T06:57:01Z TRACE Received state_system: "message" : "success", +2025-08-21T06:57:01Z TRACE Received state_system: "category" : "system.config.apply", +2025-08-21T06:57:01Z TRACE Received state_system: "timestamp" : "2025-08-21T06:57:00Z", +2025-08-21T06:57:01Z TRACE Received state_system: "level" : 300 +2025-08-21T06:57:01Z TRACE Received state_system: }, +2025-08-21T06:57:01Z TRACE Received state_system: "timestamp" : "2025-08-21T06:57:01Z", +2025-08-21T06:57:01Z TRACE Received state_system: "version" : "1.5.3" +2025-08-21T06:57:01Z TRACE Received state_system: } +2025-08-21T06:57:01Z DEBUG Handling device message state_system MP:13eb1e08-0 +2025-08-21T06:57:01Z TRACE Ignoring partial state update +2025-08-21T06:57:01Z DEBUG Received command AHU-1/state/discovery as MP:13eb1e08-1 +2025-08-21T06:57:01Z TRACE Received state_discovery: { +2025-08-21T06:57:01Z TRACE Received state_discovery: "families" : { }, +2025-08-21T06:57:01Z TRACE Received state_discovery: "timestamp" : "2025-08-21T06:57:01Z", +2025-08-21T06:57:01Z TRACE Received state_discovery: "version" : "1.5.3" +2025-08-21T06:57:01Z TRACE Received state_discovery: } +2025-08-21T06:57:01Z DEBUG Handling device message state_discovery MP:13eb1e08-1 +2025-08-21T06:57:01Z TRACE Ignoring partial state update +2025-08-21T06:57:01Z DEBUG Received command AHU-1/state/localnet as MP:13eb1e08-2 +2025-08-21T06:57:01Z TRACE Received state_localnet: { +2025-08-21T06:57:01Z TRACE Received state_localnet: "families" : { +2025-08-21T06:57:01Z TRACE Received state_localnet: "ether" : { +2025-08-21T06:57:01Z TRACE Received state_localnet: "addr" : "42:01:ac:10:83:22" +2025-08-21T06:57:01Z TRACE Received state_localnet: }, +2025-08-21T06:57:01Z TRACE Received state_localnet: "ipv4" : { +2025-08-21T06:57:01Z TRACE Received state_localnet: "addr" : "172.16.131.34" +2025-08-21T06:57:01Z TRACE Received state_localnet: }, +2025-08-21T06:57:01Z TRACE Received state_localnet: "vendor" : { +2025-08-21T06:57:01Z TRACE Received state_localnet: "addr" : "28179023" +2025-08-21T06:57:01Z TRACE Received state_localnet: }, +2025-08-21T06:57:01Z TRACE Received state_localnet: "bacnet" : { +2025-08-21T06:57:01Z TRACE Received state_localnet: "addr" : "27312" +2025-08-21T06:57:01Z TRACE Received state_localnet: } +2025-08-21T06:57:01Z TRACE Received state_localnet: }, +2025-08-21T06:57:01Z TRACE Received state_localnet: "timestamp" : "2025-08-21T06:57:01Z", +2025-08-21T06:57:01Z TRACE Received state_localnet: "version" : "1.5.3" +2025-08-21T06:57:01Z TRACE Received state_localnet: } +2025-08-21T06:57:01Z DEBUG Handling device message state_localnet MP:13eb1e08-2 +2025-08-21T06:57:01Z TRACE Ignoring partial state update +2025-08-21T06:57:01Z DEBUG Received command AHU-1/state/pointset as MP:13eb1e08-3 +2025-08-21T06:57:01Z TRACE Received state_pointset: { +2025-08-21T06:57:01Z TRACE Received state_pointset: "points" : { +2025-08-21T06:57:01Z TRACE Received state_pointset: "filter_alarm_pressure_status" : { +2025-08-21T06:57:01Z TRACE Received state_pointset: "units" : "No-units", +2025-08-21T06:57:01Z TRACE Received state_pointset: "value_state" : "updating" +2025-08-21T06:57:01Z TRACE Received state_pointset: }, +2025-08-21T06:57:01Z TRACE Received state_pointset: "filter_differential_pressure_setpoint" : { +2025-08-21T06:57:01Z TRACE Received state_pointset: "units" : "Bars", +2025-08-21T06:57:01Z TRACE Received state_pointset: "value_state" : "updating" +2025-08-21T06:57:01Z TRACE Received state_pointset: }, +2025-08-21T06:57:01Z TRACE Received state_pointset: "filter_differential_pressure_sensor" : { +2025-08-21T06:57:01Z TRACE Received state_pointset: "units" : "Degrees-Celsius", +2025-08-21T06:57:01Z TRACE Received state_pointset: "value_state" : "updating" +2025-08-21T06:57:01Z TRACE Received state_pointset: } +2025-08-21T06:57:01Z TRACE Received state_pointset: }, +2025-08-21T06:57:01Z TRACE Received state_pointset: "timestamp" : "2025-08-21T06:57:01Z", +2025-08-21T06:57:01Z TRACE Received state_pointset: "version" : "1.5.3" +2025-08-21T06:57:01Z TRACE Received state_pointset: } +2025-08-21T06:57:01Z DEBUG Handling device message state_pointset MP:13eb1e08-3 +2025-08-21T06:57:01Z TRACE Ignoring partial state update +2025-08-21T06:57:02Z DEBUG Received command AHU-1/events/pointset as MP:a1c2eeae +2025-08-21T06:57:02Z TRACE Received events_pointset: { +2025-08-21T06:57:02Z TRACE Received events_pointset: "points" : { +2025-08-21T06:57:02Z TRACE Received events_pointset: "filter_alarm_pressure_status" : { +2025-08-21T06:57:02Z TRACE Received events_pointset: "present_value" : false +2025-08-21T06:57:02Z TRACE Received events_pointset: }, +2025-08-21T06:57:02Z TRACE Received events_pointset: "filter_differential_pressure_setpoint" : { +2025-08-21T06:57:02Z TRACE Received events_pointset: "present_value" : 98 +2025-08-21T06:57:02Z TRACE Received events_pointset: }, +2025-08-21T06:57:02Z TRACE Received events_pointset: "filter_differential_pressure_sensor" : { +2025-08-21T06:57:02Z TRACE Received events_pointset: "present_value" : 8 +2025-08-21T06:57:02Z TRACE Received events_pointset: } +2025-08-21T06:57:02Z TRACE Received events_pointset: }, +2025-08-21T06:57:02Z TRACE Received events_pointset: "timestamp" : "2025-08-21T06:57:01Z", +2025-08-21T06:57:02Z TRACE Received events_pointset: "version" : "1.5.3" +2025-08-21T06:57:02Z TRACE Received events_pointset: } +2025-08-21T06:57:02Z DEBUG Handling device message events_pointset MP:a1c2eeae +2025-08-21T06:57:02Z DEBUG Capturing AHU-1 message events_pointset +2025-08-21T06:57:02Z DEBUG Received command AHU-1/events/system as MP:9b90253e +2025-08-21T06:57:02Z DEBUG Received events_system 2025-08-21T06:56:53Z INFO device.log: Update state 2025-08-21T06:56:53Z last_config 2025-08-21T06:56:51Z +2025-08-21T06:57:02Z DEBUG Received events_system 2025-08-21T06:56:54Z INFO device.log: Completing delayed writeback for filter_alarm_pressure_status +2025-08-21T06:57:02Z DEBUG Received events_system 2025-08-21T06:56:54Z INFO device.log: Completing delayed writeback for filter_differential_pressure_setpoint +2025-08-21T06:57:02Z DEBUG Received events_system 2025-08-21T06:56:54Z INFO device.log: Completing delayed writeback for filter_differential_pressure_sensor +2025-08-21T06:57:02Z DEBUG Received events_system 2025-08-21T06:56:55Z INFO device.log: Update state 2025-08-21T06:56:55Z last_config 2025-08-21T06:56:51Z +2025-08-21T06:57:02Z DEBUG Received events_system 2025-08-21T06:56:55Z INFO device.log: Device AHU-1 config handler +2025-08-21T06:57:02Z DEBUG Received events_system 2025-08-21T06:56:55Z INFO device.log: 2025-08-21T06:56:55Z received config 2025-08-21T06:56:55Z +2025-08-21T06:57:02Z DEBUG Received events_system 2025-08-21T06:56:55Z INFO device.log: Applying slow writeback for point filter_alarm_pressure_status with 3s delay +2025-08-21T06:57:02Z DEBUG Received events_system 2025-08-21T06:56:55Z INFO device.log: Applying slow writeback for point filter_differential_pressure_setpoint with 3s delay +2025-08-21T06:57:02Z DEBUG Received events_system 2025-08-21T06:56:55Z INFO device.log: Applying slow writeback for point filter_differential_pressure_sensor with 3s delay +2025-08-21T06:57:02Z DEBUG Received events_system 2025-08-21T06:56:55Z NOTICE system.config.apply: success +2025-08-21T06:57:02Z DEBUG Received events_system 2025-08-21T06:56:57Z INFO device.log: Update state 2025-08-21T06:56:57Z last_config 2025-08-21T06:56:55Z +2025-08-21T06:57:02Z DEBUG Received events_system 2025-08-21T06:56:58Z INFO device.log: Completing delayed writeback for filter_alarm_pressure_status +2025-08-21T06:57:02Z DEBUG Received events_system 2025-08-21T06:56:58Z INFO device.log: Completing delayed writeback for filter_differential_pressure_setpoint +2025-08-21T06:57:02Z DEBUG Received events_system 2025-08-21T06:56:58Z INFO device.log: Completing delayed writeback for filter_differential_pressure_sensor +2025-08-21T06:57:02Z DEBUG Received events_system 2025-08-21T06:56:59Z INFO device.log: Update state 2025-08-21T06:56:59Z last_config 2025-08-21T06:56:55Z +2025-08-21T06:57:02Z DEBUG Received events_system 2025-08-21T06:56:59Z INFO device.log: Device AHU-1 config handler +2025-08-21T06:57:02Z DEBUG Received events_system 2025-08-21T06:56:59Z INFO device.log: 2025-08-21T06:56:59Z received config 2025-08-21T06:56:59Z +2025-08-21T06:57:02Z DEBUG Received events_system 2025-08-21T06:56:59Z INFO device.log: Applying slow writeback for point filter_alarm_pressure_status with 3s delay +2025-08-21T06:57:02Z DEBUG Received events_system 2025-08-21T06:56:59Z INFO device.log: Applying slow writeback for point filter_differential_pressure_setpoint with 3s delay +2025-08-21T06:57:02Z DEBUG Received events_system 2025-08-21T06:56:59Z INFO device.log: Applying slow writeback for point filter_differential_pressure_sensor with 3s delay +2025-08-21T06:57:02Z DEBUG Received events_system 2025-08-21T06:56:59Z NOTICE system.config.apply: success +2025-08-21T06:57:02Z DEBUG Received events_system 2025-08-21T06:57:00Z INFO device.log: Device AHU-1 config handler +2025-08-21T06:57:02Z DEBUG Received events_system 2025-08-21T06:57:00Z INFO device.log: 2025-08-21T06:57:00Z received config 2025-08-21T06:57:00Z +2025-08-21T06:57:02Z DEBUG Received events_system 2025-08-21T06:57:00Z INFO device.log: Applying slow writeback for point filter_alarm_pressure_status with 3s delay +2025-08-21T06:57:02Z DEBUG Received events_system 2025-08-21T06:57:00Z INFO device.log: Applying slow writeback for point filter_differential_pressure_setpoint with 3s delay +2025-08-21T06:57:02Z DEBUG Received events_system 2025-08-21T06:57:00Z INFO device.log: Applying slow writeback for point filter_differential_pressure_sensor with 3s delay +2025-08-21T06:57:02Z DEBUG Received events_system 2025-08-21T06:57:00Z NOTICE system.config.apply: success +2025-08-21T06:57:02Z DEBUG Received events_system 2025-08-21T06:57:01Z INFO device.log: Update state 2025-08-21T06:57:01Z last_config 2025-08-21T06:57:00Z +2025-08-21T06:57:02Z DEBUG Handling device message events_system MP:9b90253e +2025-08-21T06:57:02Z DEBUG Capturing AHU-1 message events_system +2025-08-21T06:57:02Z DEBUG Received command AHU-1/config/update as RC:3109d1.00000009 +2025-08-21T06:57:02Z DEBUG Received config_update +2025-08-21T06:57:02Z DEBUG Handling update message config_update RC:3109d1.00000009 +2025-08-21T06:57:02Z DEBUG Removed configTransaction RC:3109d1.00000009 +2025-08-21T06:57:02Z DEBUG Set last_start changed false, last_start 2025-08-21T06:55:44Z +2025-08-21T06:57:02Z DEBUG Updated config 2025-08-21T06:57:01Z RC:3109d1.00000009 +2025-08-21T06:57:02Z INFO Updated config #007: Changed 0 fields. +2025-08-21T06:57:02Z DEBUG Expected last_config now 2025-08-21T06:57:01Z +2025-08-21T06:57:02Z DEBUG Detail config update synchronized is now: config transactions not cleared, last_config not synced in state +2025-08-21T06:57:02Z DEBUG Received command AHU-1/config/pointset as CU:3109d1.00000009 +2025-08-21T06:57:02Z TRACE Received config_pointset: { +2025-08-21T06:57:02Z TRACE Received config_pointset: "operation" : "REPLY" +2025-08-21T06:57:02Z TRACE Received config_pointset: } +2025-08-21T06:57:02Z DEBUG Handling device message config_pointset CU:3109d1.00000009 +2025-08-21T06:57:02Z TRACE Ignoring echo configTransaction CU:3109d1.00000009 +2025-08-21T06:57:03Z DEBUG Received command AHU-1/config/update as RC:3109d1.0000000b +2025-08-21T06:57:03Z DEBUG Received config_update +2025-08-21T06:57:03Z DEBUG Handling update message config_update RC:3109d1.0000000b +2025-08-21T06:57:03Z DEBUG Removed configTransaction RC:3109d1.0000000b +2025-08-21T06:57:03Z DEBUG Set last_start changed false, last_start 2025-08-21T06:55:44Z +2025-08-21T06:57:03Z DEBUG Updated config 2025-08-21T06:57:02Z RC:3109d1.0000000b +2025-08-21T06:57:03Z INFO Updated config #008: Changed 0 fields. +2025-08-21T06:57:03Z DEBUG Expected last_config now 2025-08-21T06:57:02Z +2025-08-21T06:57:03Z DEBUG Received command AHU-1/config/discovery as CU:3109d1.0000000b +2025-08-21T06:57:03Z TRACE Received config_discovery: { +2025-08-21T06:57:03Z TRACE Received config_discovery: "operation" : "REPLY" +2025-08-21T06:57:03Z TRACE Received config_discovery: } +2025-08-21T06:57:03Z DEBUG Handling device message config_discovery CU:3109d1.0000000b +2025-08-21T06:57:03Z TRACE Ignoring echo configTransaction CU:3109d1.0000000b +2025-08-21T06:57:03Z DEBUG Detail config update synchronized is now: last_config not synced in state +2025-08-21T06:57:03Z DEBUG Received command AHU-1/state/update as MP:1914aef5 +2025-08-21T06:57:03Z DEBUG Received state_update +2025-08-21T06:57:03Z DEBUG Handling update message state_update MP:1914aef5 +2025-08-21T06:57:03Z DEBUG Capturing AHU-1 message state_update +2025-08-21T06:57:03Z DEBUG Updated state after 0s 2025-08-21T06:57:03Z MP:1914aef5 +2025-08-21T06:57:03Z INFO Updated state #010: Changed 3 fields: +2025-08-21T06:57:03Z INFO Updated state #010: Set `system.last_config` = `2025-08-21T06:57:02Z` +2025-08-21T06:57:03Z INFO Updated state #010: Set `system.status.timestamp` = `2025-08-21T06:57:02Z` +2025-08-21T06:57:03Z INFO Updated state #010: Set `timestamp` = `2025-08-21T06:57:03Z` +2025-08-21T06:57:03Z DEBUG Updated state has last_config 2025-08-21T06:57:02Z (expecting 2025-08-21T06:57:02Z) +2025-08-21T06:57:03Z DEBUG Received command AHU-1/state/system as MP:1914aef5-0 +2025-08-21T06:57:03Z TRACE Received state_system: { +2025-08-21T06:57:03Z TRACE Received state_system: "hardware" : { +2025-08-21T06:57:03Z TRACE Received state_system: "make" : "BOS", +2025-08-21T06:57:03Z TRACE Received state_system: "model" : "pubber" +2025-08-21T06:57:03Z TRACE Received state_system: }, +2025-08-21T06:57:03Z TRACE Received state_system: "last_config" : "2025-08-21T06:57:02Z", +2025-08-21T06:57:03Z TRACE Received state_system: "operation" : { +2025-08-21T06:57:03Z TRACE Received state_system: "operational" : true, +2025-08-21T06:57:03Z TRACE Received state_system: "last_start" : "2025-08-21T06:55:44Z", +2025-08-21T06:57:03Z TRACE Received state_system: "restart_count" : 1, +2025-08-21T06:57:03Z TRACE Received state_system: "mode" : "initial" +2025-08-21T06:57:03Z TRACE Received state_system: }, +2025-08-21T06:57:03Z TRACE Received state_system: "serial_no" : "742132", +2025-08-21T06:57:03Z TRACE Received state_system: "software" : { +2025-08-21T06:57:03Z TRACE Received state_system: "firmware" : "v1" +2025-08-21T06:57:03Z TRACE Received state_system: }, +2025-08-21T06:57:03Z TRACE Received state_system: "status" : { +2025-08-21T06:57:03Z TRACE Received state_system: "message" : "success", +2025-08-21T06:57:03Z TRACE Received state_system: "category" : "system.config.apply", +2025-08-21T06:57:03Z TRACE Received state_system: "timestamp" : "2025-08-21T06:57:02Z", +2025-08-21T06:57:03Z TRACE Received state_system: "level" : 300 +2025-08-21T06:57:03Z TRACE Received state_system: }, +2025-08-21T06:57:03Z TRACE Received state_system: "timestamp" : "2025-08-21T06:57:03Z", +2025-08-21T06:57:03Z TRACE Received state_system: "version" : "1.5.3" +2025-08-21T06:57:03Z TRACE Received state_system: } +2025-08-21T06:57:03Z DEBUG Handling device message state_system MP:1914aef5-0 +2025-08-21T06:57:03Z TRACE Ignoring partial state update +2025-08-21T06:57:03Z DEBUG Detail config update synchronized is now: null +2025-08-21T06:57:03Z DEBUG Stage finished waiting for config update synchronized at @24s after 4s +2025-08-21T06:57:03Z TRACE Stage resume waiting for target point has value_state default (null) at @24s +2025-08-21T06:57:03Z DEBUG Config sync took 4s +2025-08-21T06:57:03Z DEBUG Finished wait for config sync pending: null +2025-08-21T06:57:03Z DEBUG New lastConfigApplied at 2025-08-21T06:57:03Z +2025-08-21T06:57:03Z DEBUG Update config before target point has value_state default (null) timestamp 2025-08-21T06:57:02Z +2025-08-21T06:57:03Z DEBUG Recorded sequence: 1. Update config before target point has value_state default (null) +2025-08-21T06:57:03Z INFO Device config Remove `pointset.points.filter_differential_pressure_setpoint.set_value` +2025-08-21T06:57:03Z TRACE Update config before target point has value_state default (null): Remove `pointset.points.filter_differential_pressure_setpoint.set_value` +2025-08-21T06:57:03Z DEBUG Value state updating == null (false) +2025-08-21T06:57:03Z DEBUG Value state updating == null (false) +2025-08-21T06:57:03Z DEBUG Received command AHU-1/state/discovery as MP:1914aef5-1 +2025-08-21T06:57:03Z TRACE Received state_discovery: { +2025-08-21T06:57:03Z TRACE Received state_discovery: "families" : { }, +2025-08-21T06:57:03Z TRACE Received state_discovery: "timestamp" : "2025-08-21T06:57:03Z", +2025-08-21T06:57:03Z TRACE Received state_discovery: "version" : "1.5.3" +2025-08-21T06:57:03Z TRACE Received state_discovery: } +2025-08-21T06:57:03Z DEBUG Handling device message state_discovery MP:1914aef5-1 +2025-08-21T06:57:03Z TRACE Ignoring partial state update +2025-08-21T06:57:03Z DEBUG Value state updating == null (false) +2025-08-21T06:57:03Z DEBUG Received command AHU-1/state/localnet as MP:1914aef5-2 +2025-08-21T06:57:03Z TRACE Received state_localnet: { +2025-08-21T06:57:03Z TRACE Received state_localnet: "families" : { +2025-08-21T06:57:03Z TRACE Received state_localnet: "ether" : { +2025-08-21T06:57:03Z TRACE Received state_localnet: "addr" : "42:01:ac:10:83:22" +2025-08-21T06:57:03Z TRACE Received state_localnet: }, +2025-08-21T06:57:03Z TRACE Received state_localnet: "ipv4" : { +2025-08-21T06:57:03Z TRACE Received state_localnet: "addr" : "172.16.131.34" +2025-08-21T06:57:03Z TRACE Received state_localnet: }, +2025-08-21T06:57:03Z TRACE Received state_localnet: "vendor" : { +2025-08-21T06:57:03Z TRACE Received state_localnet: "addr" : "28179023" +2025-08-21T06:57:03Z TRACE Received state_localnet: }, +2025-08-21T06:57:03Z TRACE Received state_localnet: "bacnet" : { +2025-08-21T06:57:03Z TRACE Received state_localnet: "addr" : "27312" +2025-08-21T06:57:03Z TRACE Received state_localnet: } +2025-08-21T06:57:03Z TRACE Received state_localnet: }, +2025-08-21T06:57:03Z TRACE Received state_localnet: "timestamp" : "2025-08-21T06:57:03Z", +2025-08-21T06:57:03Z TRACE Received state_localnet: "version" : "1.5.3" +2025-08-21T06:57:03Z TRACE Received state_localnet: } +2025-08-21T06:57:03Z DEBUG Handling device message state_localnet MP:1914aef5-2 +2025-08-21T06:57:03Z TRACE Ignoring partial state update +2025-08-21T06:57:03Z DEBUG Value state updating == null (false) +2025-08-21T06:57:03Z DEBUG Received command AHU-1/state/pointset as MP:1914aef5-3 +2025-08-21T06:57:03Z TRACE Received state_pointset: { +2025-08-21T06:57:03Z TRACE Received state_pointset: "points" : { +2025-08-21T06:57:03Z TRACE Received state_pointset: "filter_alarm_pressure_status" : { +2025-08-21T06:57:03Z TRACE Received state_pointset: "units" : "No-units", +2025-08-21T06:57:03Z TRACE Received state_pointset: "value_state" : "updating" +2025-08-21T06:57:03Z TRACE Received state_pointset: }, +2025-08-21T06:57:03Z TRACE Received state_pointset: "filter_differential_pressure_setpoint" : { +2025-08-21T06:57:03Z TRACE Received state_pointset: "units" : "Bars", +2025-08-21T06:57:03Z TRACE Received state_pointset: "value_state" : "updating" +2025-08-21T06:57:03Z TRACE Received state_pointset: }, +2025-08-21T06:57:03Z TRACE Received state_pointset: "filter_differential_pressure_sensor" : { +2025-08-21T06:57:03Z TRACE Received state_pointset: "units" : "Degrees-Celsius", +2025-08-21T06:57:03Z TRACE Received state_pointset: "value_state" : "updating" +2025-08-21T06:57:03Z TRACE Received state_pointset: } +2025-08-21T06:57:03Z TRACE Received state_pointset: }, +2025-08-21T06:57:03Z TRACE Received state_pointset: "timestamp" : "2025-08-21T06:57:03Z", +2025-08-21T06:57:03Z TRACE Received state_pointset: "version" : "1.5.3" +2025-08-21T06:57:03Z TRACE Received state_pointset: } +2025-08-21T06:57:03Z DEBUG Handling device message state_pointset MP:1914aef5-3 +2025-08-21T06:57:03Z TRACE Ignoring partial state update +2025-08-21T06:57:03Z DEBUG Value state updating == null (false) +2025-08-21T06:57:04Z DEBUG Value state updating == null (false) +2025-08-21T06:57:05Z DEBUG Value state updating == null (false) +2025-08-21T06:57:05Z DEBUG Received command AHU-1/state/update as MP:51d894a1 +2025-08-21T06:57:05Z DEBUG Received state_update +2025-08-21T06:57:05Z DEBUG Handling update message state_update MP:51d894a1 +2025-08-21T06:57:05Z DEBUG Capturing AHU-1 message state_update +2025-08-21T06:57:05Z DEBUG Updated state after 0s 2025-08-21T06:57:05Z MP:51d894a1 +2025-08-21T06:57:05Z INFO Updated state #011: Changed 4 fields: +2025-08-21T06:57:05Z INFO Updated state #011: Remove `pointset.points.filter_alarm_pressure_status.value_state` +2025-08-21T06:57:05Z INFO Updated state #011: Remove `pointset.points.filter_differential_pressure_setpoint.value_state` +2025-08-21T06:57:05Z INFO Updated state #011: Remove `pointset.points.filter_differential_pressure_sensor.value_state` +2025-08-21T06:57:05Z INFO Updated state #011: Set `timestamp` = `2025-08-21T06:57:05Z` +2025-08-21T06:57:05Z DEBUG Updated state has last_config 2025-08-21T06:57:02Z (expecting 2025-08-21T06:57:02Z) +2025-08-21T06:57:05Z DEBUG Value state null == null (true) +2025-08-21T06:57:05Z DEBUG Detail target point has value_state default (null) is now: null +2025-08-21T06:57:05Z DEBUG Recorded sequence: 1. Wait until target point has value_state default (null) +2025-08-21T06:57:05Z DEBUG Stage finished waiting for target point has value_state default (null) at @26s after 8s +2025-08-21T06:57:05Z TRACE Stage resume waiting for executing test at @26s +2025-08-21T06:57:05Z TRACE Stage suspend waiting for executing test at @26s +2025-08-21T06:57:05Z INFO Stage start waiting for target point has value_state updating at @26s +2025-08-21T06:57:05Z DEBUG Delay from lastConfigApplied 2025-08-21T06:57:03.605917991Z is -393ms +2025-08-21T06:57:05Z DEBUG System config extra field null +2025-08-21T06:57:06Z TRACE Updated check config_system: false +2025-08-21T06:57:06Z TRACE Updated check config_pointset: true +2025-08-21T06:57:06Z DEBUG Update config_pointset, adding configTransaction RC:3109d1.0000000c +2025-08-21T06:57:06Z TRACE Updated check config_gateway: false +2025-08-21T06:57:06Z TRACE Updated check config_localnet: false +2025-08-21T06:57:06Z TRACE Updated check config_blobset: false +2025-08-21T06:57:06Z TRACE Updated check config_discovery: false +2025-08-21T06:57:06Z DEBUG Using pre-config state timestamp 2025-08-21T06:57:05Z +2025-08-21T06:57:06Z DEBUG Update lastConfigIssued 2025-08-21T06:57:06Z, because before target point has value_state updating +2025-08-21T06:57:06Z TRACE Stage suspend waiting for target point has value_state updating at @26s +2025-08-21T06:57:06Z INFO Stage start waiting for config update synchronized at @26s +2025-08-21T06:57:06Z DEBUG Received command AHU-1/state/system as MP:51d894a1-0 +2025-08-21T06:57:06Z TRACE Received state_system: { +2025-08-21T06:57:06Z TRACE Received state_system: "hardware" : { +2025-08-21T06:57:06Z TRACE Received state_system: "make" : "BOS", +2025-08-21T06:57:06Z TRACE Received state_system: "model" : "pubber" +2025-08-21T06:57:06Z TRACE Received state_system: }, +2025-08-21T06:57:06Z TRACE Received state_system: "last_config" : "2025-08-21T06:57:02Z", +2025-08-21T06:57:06Z TRACE Received state_system: "operation" : { +2025-08-21T06:57:06Z TRACE Received state_system: "operational" : true, +2025-08-21T06:57:06Z TRACE Received state_system: "last_start" : "2025-08-21T06:55:44Z", +2025-08-21T06:57:06Z TRACE Received state_system: "restart_count" : 1, +2025-08-21T06:57:06Z TRACE Received state_system: "mode" : "initial" +2025-08-21T06:57:06Z TRACE Received state_system: }, +2025-08-21T06:57:06Z TRACE Received state_system: "serial_no" : "742132", +2025-08-21T06:57:06Z TRACE Received state_system: "software" : { +2025-08-21T06:57:06Z TRACE Received state_system: "firmware" : "v1" +2025-08-21T06:57:06Z TRACE Received state_system: }, +2025-08-21T06:57:06Z TRACE Received state_system: "status" : { +2025-08-21T06:57:06Z TRACE Received state_system: "message" : "success", +2025-08-21T06:57:06Z TRACE Received state_system: "category" : "system.config.apply", +2025-08-21T06:57:06Z TRACE Received state_system: "timestamp" : "2025-08-21T06:57:02Z", +2025-08-21T06:57:06Z TRACE Received state_system: "level" : 300 +2025-08-21T06:57:06Z TRACE Received state_system: }, +2025-08-21T06:57:06Z TRACE Received state_system: "timestamp" : "2025-08-21T06:57:05Z", +2025-08-21T06:57:06Z TRACE Received state_system: "version" : "1.5.3" +2025-08-21T06:57:06Z TRACE Received state_system: } +2025-08-21T06:57:06Z DEBUG Handling device message state_system MP:51d894a1-0 +2025-08-21T06:57:06Z TRACE Ignoring partial state update +2025-08-21T06:57:06Z DEBUG Received command AHU-1/state/discovery as MP:51d894a1-1 +2025-08-21T06:57:06Z TRACE Received state_discovery: { +2025-08-21T06:57:06Z TRACE Received state_discovery: "families" : { }, +2025-08-21T06:57:06Z TRACE Received state_discovery: "timestamp" : "2025-08-21T06:57:05Z", +2025-08-21T06:57:06Z TRACE Received state_discovery: "version" : "1.5.3" +2025-08-21T06:57:06Z TRACE Received state_discovery: } +2025-08-21T06:57:06Z DEBUG Handling device message state_discovery MP:51d894a1-1 +2025-08-21T06:57:06Z TRACE Ignoring partial state update +2025-08-21T06:57:06Z DEBUG Received command AHU-1/state/localnet as MP:51d894a1-2 +2025-08-21T06:57:06Z TRACE Received state_localnet: { +2025-08-21T06:57:06Z TRACE Received state_localnet: "families" : { +2025-08-21T06:57:06Z TRACE Received state_localnet: "ether" : { +2025-08-21T06:57:06Z TRACE Received state_localnet: "addr" : "42:01:ac:10:83:22" +2025-08-21T06:57:06Z TRACE Received state_localnet: }, +2025-08-21T06:57:06Z TRACE Received state_localnet: "ipv4" : { +2025-08-21T06:57:06Z TRACE Received state_localnet: "addr" : "172.16.131.34" +2025-08-21T06:57:06Z TRACE Received state_localnet: }, +2025-08-21T06:57:06Z TRACE Received state_localnet: "vendor" : { +2025-08-21T06:57:06Z TRACE Received state_localnet: "addr" : "28179023" +2025-08-21T06:57:06Z TRACE Received state_localnet: }, +2025-08-21T06:57:06Z TRACE Received state_localnet: "bacnet" : { +2025-08-21T06:57:06Z TRACE Received state_localnet: "addr" : "27312" +2025-08-21T06:57:06Z TRACE Received state_localnet: } +2025-08-21T06:57:06Z TRACE Received state_localnet: }, +2025-08-21T06:57:06Z TRACE Received state_localnet: "timestamp" : "2025-08-21T06:57:05Z", +2025-08-21T06:57:06Z TRACE Received state_localnet: "version" : "1.5.3" +2025-08-21T06:57:06Z TRACE Received state_localnet: } +2025-08-21T06:57:06Z DEBUG Handling device message state_localnet MP:51d894a1-2 +2025-08-21T06:57:06Z TRACE Ignoring partial state update +2025-08-21T06:57:06Z DEBUG Received command AHU-1/state/pointset as MP:51d894a1-3 +2025-08-21T06:57:06Z TRACE Received state_pointset: { +2025-08-21T06:57:06Z TRACE Received state_pointset: "points" : { +2025-08-21T06:57:06Z TRACE Received state_pointset: "filter_alarm_pressure_status" : { +2025-08-21T06:57:06Z TRACE Received state_pointset: "units" : "No-units" +2025-08-21T06:57:06Z TRACE Received state_pointset: }, +2025-08-21T06:57:06Z TRACE Received state_pointset: "filter_differential_pressure_setpoint" : { +2025-08-21T06:57:06Z TRACE Received state_pointset: "units" : "Bars" +2025-08-21T06:57:06Z TRACE Received state_pointset: }, +2025-08-21T06:57:06Z TRACE Received state_pointset: "filter_differential_pressure_sensor" : { +2025-08-21T06:57:06Z TRACE Received state_pointset: "units" : "Degrees-Celsius" +2025-08-21T06:57:06Z TRACE Received state_pointset: } +2025-08-21T06:57:06Z TRACE Received state_pointset: }, +2025-08-21T06:57:06Z TRACE Received state_pointset: "timestamp" : "2025-08-21T06:57:05Z", +2025-08-21T06:57:06Z TRACE Received state_pointset: "version" : "1.5.3" +2025-08-21T06:57:06Z TRACE Received state_pointset: } +2025-08-21T06:57:06Z DEBUG Handling device message state_pointset MP:51d894a1-3 +2025-08-21T06:57:06Z TRACE Ignoring partial state update +2025-08-21T06:57:07Z DEBUG Received command AHU-1/config/update as RC:3109d1.0000000c +2025-08-21T06:57:07Z DEBUG Received config_update +2025-08-21T06:57:07Z DEBUG Handling update message config_update RC:3109d1.0000000c +2025-08-21T06:57:07Z DEBUG Removed configTransaction RC:3109d1.0000000c +2025-08-21T06:57:07Z DEBUG Set last_start changed false, last_start 2025-08-21T06:55:44Z +2025-08-21T06:57:07Z DEBUG Updated config 2025-08-21T06:57:06Z RC:3109d1.0000000c +2025-08-21T06:57:07Z INFO Updated config #009: Changed 1 fields: +2025-08-21T06:57:07Z INFO Updated config #009: Add `pointset.points.filter_differential_pressure_setpoint.set_value` = `60` +2025-08-21T06:57:07Z DEBUG Expected last_config now 2025-08-21T06:57:06Z +2025-08-21T06:57:07Z DEBUG Detail config update synchronized is now: device state not updated since config issued, last_config not synced in state +2025-08-21T06:57:07Z DEBUG Received command AHU-1/config/pointset as CU:3109d1.0000000c +2025-08-21T06:57:07Z TRACE Received config_pointset: { +2025-08-21T06:57:07Z TRACE Received config_pointset: "operation" : "REPLY" +2025-08-21T06:57:07Z TRACE Received config_pointset: } +2025-08-21T06:57:07Z DEBUG Handling device message config_pointset CU:3109d1.0000000c +2025-08-21T06:57:07Z TRACE Ignoring echo configTransaction CU:3109d1.0000000c +2025-08-21T06:57:08Z DEBUG Received command AHU-1/state/update as MP:cec94173 +2025-08-21T06:57:08Z DEBUG Received state_update +2025-08-21T06:57:08Z DEBUG Handling update message state_update MP:cec94173 +2025-08-21T06:57:08Z DEBUG Capturing AHU-1 message state_update +2025-08-21T06:57:08Z DEBUG Updated state after 1s 2025-08-21T06:57:07Z MP:cec94173 +2025-08-21T06:57:08Z INFO Updated state #012: Changed 6 fields: +2025-08-21T06:57:08Z INFO Updated state #012: Set `system.last_config` = `2025-08-21T06:57:06Z` +2025-08-21T06:57:08Z INFO Updated state #012: Set `system.status.timestamp` = `2025-08-21T06:57:06Z` +2025-08-21T06:57:08Z INFO Updated state #012: Add `pointset.points.filter_alarm_pressure_status.value_state` = `updating` +2025-08-21T06:57:08Z INFO Updated state #012: Add `pointset.points.filter_differential_pressure_setpoint.value_state` = `updating` +2025-08-21T06:57:08Z INFO Updated state #012: Add `pointset.points.filter_differential_pressure_sensor.value_state` = `updating` +2025-08-21T06:57:08Z INFO Updated state #012: Set `timestamp` = `2025-08-21T06:57:07Z` +2025-08-21T06:57:08Z DEBUG Updated state has last_config 2025-08-21T06:57:06Z (expecting 2025-08-21T06:57:06Z) +2025-08-21T06:57:08Z DEBUG Received command AHU-1/state/system as MP:cec94173-0 +2025-08-21T06:57:08Z TRACE Received state_system: { +2025-08-21T06:57:08Z TRACE Received state_system: "hardware" : { +2025-08-21T06:57:08Z TRACE Received state_system: "make" : "BOS", +2025-08-21T06:57:08Z TRACE Received state_system: "model" : "pubber" +2025-08-21T06:57:08Z TRACE Received state_system: }, +2025-08-21T06:57:08Z TRACE Received state_system: "last_config" : "2025-08-21T06:57:06Z", +2025-08-21T06:57:08Z TRACE Received state_system: "operation" : { +2025-08-21T06:57:08Z TRACE Received state_system: "operational" : true, +2025-08-21T06:57:08Z TRACE Received state_system: "last_start" : "2025-08-21T06:55:44Z", +2025-08-21T06:57:08Z TRACE Received state_system: "restart_count" : 1, +2025-08-21T06:57:08Z TRACE Received state_system: "mode" : "initial" +2025-08-21T06:57:08Z TRACE Received state_system: }, +2025-08-21T06:57:08Z TRACE Received state_system: "serial_no" : "742132", +2025-08-21T06:57:08Z TRACE Received state_system: "software" : { +2025-08-21T06:57:08Z TRACE Received state_system: "firmware" : "v1" +2025-08-21T06:57:08Z TRACE Received state_system: }, +2025-08-21T06:57:08Z TRACE Received state_system: "status" : { +2025-08-21T06:57:08Z TRACE Received state_system: "message" : "success", +2025-08-21T06:57:08Z TRACE Received state_system: "category" : "system.config.apply", +2025-08-21T06:57:08Z TRACE Received state_system: "timestamp" : "2025-08-21T06:57:06Z", +2025-08-21T06:57:08Z TRACE Received state_system: "level" : 300 +2025-08-21T06:57:08Z TRACE Received state_system: }, +2025-08-21T06:57:08Z TRACE Received state_system: "timestamp" : "2025-08-21T06:57:07Z", +2025-08-21T06:57:08Z TRACE Received state_system: "version" : "1.5.3" +2025-08-21T06:57:08Z TRACE Received state_system: } +2025-08-21T06:57:08Z DEBUG Handling device message state_system MP:cec94173-0 +2025-08-21T06:57:08Z TRACE Ignoring partial state update +2025-08-21T06:57:08Z DEBUG Detail config update synchronized is now: null +2025-08-21T06:57:08Z DEBUG Stage finished waiting for config update synchronized at @28s after 2s +2025-08-21T06:57:08Z TRACE Stage resume waiting for target point has value_state updating at @28s +2025-08-21T06:57:08Z DEBUG Config sync took 2s +2025-08-21T06:57:08Z DEBUG Finished wait for config sync pending: null +2025-08-21T06:57:08Z DEBUG New lastConfigApplied at 2025-08-21T06:57:08Z +2025-08-21T06:57:08Z DEBUG Update config before target point has value_state updating timestamp 2025-08-21T06:57:06Z +2025-08-21T06:57:08Z DEBUG Recorded sequence: 1. Update config before target point has value_state updating +2025-08-21T06:57:08Z INFO Device config Add `pointset.points.filter_differential_pressure_setpoint.set_value` = `60` +2025-08-21T06:57:08Z TRACE Update config before target point has value_state updating: Add `pointset.points.filter_differential_pressure_setpoint.set_value` = `60` +2025-08-21T06:57:08Z DEBUG Value state updating == applied (false) +2025-08-21T06:57:08Z DEBUG Value state updating == updating (true) +2025-08-21T06:57:08Z DEBUG Value state updating == applied (false) +2025-08-21T06:57:08Z DEBUG Value state updating == updating (true) +2025-08-21T06:57:08Z DEBUG Recorded sequence: 1. Wait until target point has value_state updating +2025-08-21T06:57:08Z DEBUG Stage finished waiting for target point has value_state updating at @28s after 2s +2025-08-21T06:57:08Z TRACE Stage resume waiting for executing test at @28s +2025-08-21T06:57:08Z TRACE Stage suspend waiting for executing test at @28s +2025-08-21T06:57:08Z INFO Stage start waiting for target point has value_state applied at @28s +2025-08-21T06:57:08Z DEBUG Delay from lastConfigApplied 2025-08-21T06:57:08.025285455Z is 1999ms +2025-08-21T06:57:08Z DEBUG Rate-limiting config by 1999ms +2025-08-21T06:57:10Z DEBUG System config extra field null +2025-08-21T06:57:10Z TRACE Updated check config_system: false +2025-08-21T06:57:10Z TRACE Updated check config_pointset: false +2025-08-21T06:57:10Z TRACE Updated check config_gateway: false +2025-08-21T06:57:10Z TRACE Updated check config_localnet: false +2025-08-21T06:57:10Z TRACE Updated check config_blobset: false +2025-08-21T06:57:10Z TRACE Updated check config_discovery: false +2025-08-21T06:57:10Z DEBUG New lastConfigApplied at 2025-08-21T06:57:10Z +2025-08-21T06:57:10Z DEBUG Update config before target point has value_state applied timestamp 2025-08-21T06:57:06Z +2025-08-21T06:57:10Z DEBUG Value state updating == applied (false) +2025-08-21T06:57:10Z DEBUG Value state updating == applied (false) +2025-08-21T06:57:10Z DEBUG Received command AHU-1/state/discovery as MP:cec94173-1 +2025-08-21T06:57:10Z TRACE Received state_discovery: { +2025-08-21T06:57:10Z TRACE Received state_discovery: "families" : { }, +2025-08-21T06:57:10Z TRACE Received state_discovery: "timestamp" : "2025-08-21T06:57:07Z", +2025-08-21T06:57:10Z TRACE Received state_discovery: "version" : "1.5.3" +2025-08-21T06:57:10Z TRACE Received state_discovery: } +2025-08-21T06:57:10Z DEBUG Handling device message state_discovery MP:cec94173-1 +2025-08-21T06:57:10Z TRACE Ignoring partial state update +2025-08-21T06:57:10Z DEBUG Value state updating == applied (false) +2025-08-21T06:57:10Z DEBUG Received command AHU-1/state/localnet as MP:cec94173-2 +2025-08-21T06:57:10Z TRACE Received state_localnet: { +2025-08-21T06:57:10Z TRACE Received state_localnet: "families" : { +2025-08-21T06:57:10Z TRACE Received state_localnet: "ether" : { +2025-08-21T06:57:10Z TRACE Received state_localnet: "addr" : "42:01:ac:10:83:22" +2025-08-21T06:57:10Z TRACE Received state_localnet: }, +2025-08-21T06:57:10Z TRACE Received state_localnet: "ipv4" : { +2025-08-21T06:57:10Z TRACE Received state_localnet: "addr" : "172.16.131.34" +2025-08-21T06:57:10Z TRACE Received state_localnet: }, +2025-08-21T06:57:10Z TRACE Received state_localnet: "vendor" : { +2025-08-21T06:57:10Z TRACE Received state_localnet: "addr" : "28179023" +2025-08-21T06:57:10Z TRACE Received state_localnet: }, +2025-08-21T06:57:10Z TRACE Received state_localnet: "bacnet" : { +2025-08-21T06:57:10Z TRACE Received state_localnet: "addr" : "27312" +2025-08-21T06:57:10Z TRACE Received state_localnet: } +2025-08-21T06:57:10Z TRACE Received state_localnet: }, +2025-08-21T06:57:10Z TRACE Received state_localnet: "timestamp" : "2025-08-21T06:57:07Z", +2025-08-21T06:57:10Z TRACE Received state_localnet: "version" : "1.5.3" +2025-08-21T06:57:10Z TRACE Received state_localnet: } +2025-08-21T06:57:10Z DEBUG Handling device message state_localnet MP:cec94173-2 +2025-08-21T06:57:10Z TRACE Ignoring partial state update +2025-08-21T06:57:10Z DEBUG Value state updating == applied (false) +2025-08-21T06:57:10Z DEBUG Received command AHU-1/state/pointset as MP:cec94173-3 +2025-08-21T06:57:10Z TRACE Received state_pointset: { +2025-08-21T06:57:10Z TRACE Received state_pointset: "points" : { +2025-08-21T06:57:10Z TRACE Received state_pointset: "filter_alarm_pressure_status" : { +2025-08-21T06:57:10Z TRACE Received state_pointset: "units" : "No-units", +2025-08-21T06:57:10Z TRACE Received state_pointset: "value_state" : "updating" +2025-08-21T06:57:10Z TRACE Received state_pointset: }, +2025-08-21T06:57:10Z TRACE Received state_pointset: "filter_differential_pressure_setpoint" : { +2025-08-21T06:57:10Z TRACE Received state_pointset: "units" : "Bars", +2025-08-21T06:57:10Z TRACE Received state_pointset: "value_state" : "updating" +2025-08-21T06:57:10Z TRACE Received state_pointset: }, +2025-08-21T06:57:10Z TRACE Received state_pointset: "filter_differential_pressure_sensor" : { +2025-08-21T06:57:10Z TRACE Received state_pointset: "units" : "Degrees-Celsius", +2025-08-21T06:57:10Z TRACE Received state_pointset: "value_state" : "updating" +2025-08-21T06:57:10Z TRACE Received state_pointset: } +2025-08-21T06:57:10Z TRACE Received state_pointset: }, +2025-08-21T06:57:10Z TRACE Received state_pointset: "timestamp" : "2025-08-21T06:57:07Z", +2025-08-21T06:57:10Z TRACE Received state_pointset: "version" : "1.5.3" +2025-08-21T06:57:10Z TRACE Received state_pointset: } +2025-08-21T06:57:10Z DEBUG Handling device message state_pointset MP:cec94173-3 +2025-08-21T06:57:10Z TRACE Ignoring partial state update +2025-08-21T06:57:10Z DEBUG Value state updating == applied (false) +2025-08-21T06:57:10Z DEBUG Received command AHU-1/state/update as MP:fa216e61 +2025-08-21T06:57:10Z DEBUG Received state_update +2025-08-21T06:57:10Z DEBUG Handling update message state_update MP:fa216e61 +2025-08-21T06:57:10Z DEBUG Capturing AHU-1 message state_update +2025-08-21T06:57:10Z DEBUG Updated state after 1s 2025-08-21T06:57:09Z MP:fa216e61 +2025-08-21T06:57:10Z INFO Updated state #013: Changed 4 fields: +2025-08-21T06:57:10Z INFO Updated state #013: Remove `pointset.points.filter_alarm_pressure_status.value_state` +2025-08-21T06:57:10Z INFO Updated state #013: Set `pointset.points.filter_differential_pressure_setpoint.value_state` = `applied` +2025-08-21T06:57:10Z INFO Updated state #013: Remove `pointset.points.filter_differential_pressure_sensor.value_state` +2025-08-21T06:57:10Z INFO Updated state #013: Set `timestamp` = `2025-08-21T06:57:09Z` +2025-08-21T06:57:10Z DEBUG Updated state has last_config 2025-08-21T06:57:06Z (expecting 2025-08-21T06:57:06Z) +2025-08-21T06:57:10Z DEBUG Value state applied == applied (true) +2025-08-21T06:57:10Z DEBUG Detail target point has value_state applied is now: null +2025-08-21T06:57:10Z DEBUG Recorded sequence: 1. Wait until target point has value_state applied +2025-08-21T06:57:10Z DEBUG Stage finished waiting for target point has value_state applied at @30s after 2s +2025-08-21T06:57:10Z TRACE Stage resume waiting for executing test at @30s +2025-08-21T06:57:10Z DEBUG stage done waiting for executing test at @30s +2025-08-21T06:57:10Z DEBUG Removing implicit system capability LAST_CONFIG +2025-08-21T06:57:10Z NOTICE RESULT pass writeback writeback_operation ALPHA 10/10 Sequence complete +2025-08-21T06:57:10Z NOTICE Sequence complete +2025-08-21T06:57:10Z NOTICE Ending test writeback_operation after @30s ################################ diff --git a/validator/sequences/writeback_operation/sequence.md b/validator/sequences/writeback_operation/sequence.md new file mode 100644 index 0000000000..f717b4f3a8 --- /dev/null +++ b/validator/sequences/writeback_operation/sequence.md @@ -0,0 +1,14 @@ + +## writeback_operation (ALPHA) + +Implements writeback operations + +1. Update config before target point has value_state default (null) + * Remove `pointset.points.filter_differential_pressure_setpoint.set_value` +1. Wait until target point has value_state default (null) +1. Update config before target point has value_state updating + * Add `pointset.points.filter_differential_pressure_setpoint.set_value` = `60` +1. Wait until target point has value_state updating +1. Wait until target point has value_state applied + +Test passed. diff --git a/validator/sequences/writeback_operation/state_discovery.attr b/validator/sequences/writeback_operation/state_discovery.attr new file mode 100644 index 0000000000..5c99e161b8 --- /dev/null +++ b/validator/sequences/writeback_operation/state_discovery.attr @@ -0,0 +1,10 @@ +{ + "deviceId" : "AHU-1", + "deviceNumId" : "123456789101112", + "deviceRegistryId" : "ZZ-TRI-FECTA", + "projectId" : "localhost", + "transactionId" : "MP:cec94173-1", + "publishTime" : "2025-08-21T06:57:07Z", + "subFolder" : "discovery", + "subType" : "state" +} \ No newline at end of file diff --git a/validator/sequences/writeback_operation/state_discovery.json b/validator/sequences/writeback_operation/state_discovery.json new file mode 100644 index 0000000000..1153894160 --- /dev/null +++ b/validator/sequences/writeback_operation/state_discovery.json @@ -0,0 +1,5 @@ +{ + "families" : { }, + "timestamp" : "2025-08-21T06:57:07Z", + "version" : "1.5.3" +} \ No newline at end of file diff --git a/validator/sequences/writeback_operation/state_localnet.attr b/validator/sequences/writeback_operation/state_localnet.attr new file mode 100644 index 0000000000..39dcaa095f --- /dev/null +++ b/validator/sequences/writeback_operation/state_localnet.attr @@ -0,0 +1,10 @@ +{ + "deviceId" : "AHU-1", + "deviceNumId" : "123456789101112", + "deviceRegistryId" : "ZZ-TRI-FECTA", + "projectId" : "localhost", + "transactionId" : "MP:cec94173-2", + "publishTime" : "2025-08-21T06:57:07Z", + "subFolder" : "localnet", + "subType" : "state" +} \ No newline at end of file diff --git a/validator/sequences/writeback_operation/state_localnet.json b/validator/sequences/writeback_operation/state_localnet.json new file mode 100644 index 0000000000..ebbfb11467 --- /dev/null +++ b/validator/sequences/writeback_operation/state_localnet.json @@ -0,0 +1,18 @@ +{ + "families" : { + "ether" : { + "addr" : "42:01:ac:10:83:22" + }, + "ipv4" : { + "addr" : "172.16.131.34" + }, + "vendor" : { + "addr" : "28179023" + }, + "bacnet" : { + "addr" : "27312" + } + }, + "timestamp" : "2025-08-21T06:57:07Z", + "version" : "1.5.3" +} \ No newline at end of file diff --git a/validator/sequences/writeback_operation/state_pointset.attr b/validator/sequences/writeback_operation/state_pointset.attr new file mode 100644 index 0000000000..2d208e9375 --- /dev/null +++ b/validator/sequences/writeback_operation/state_pointset.attr @@ -0,0 +1,10 @@ +{ + "deviceId" : "AHU-1", + "deviceNumId" : "123456789101112", + "deviceRegistryId" : "ZZ-TRI-FECTA", + "projectId" : "localhost", + "transactionId" : "MP:cec94173-3", + "publishTime" : "2025-08-21T06:57:07Z", + "subFolder" : "pointset", + "subType" : "state" +} \ No newline at end of file diff --git a/validator/sequences/writeback_operation/state_pointset.json b/validator/sequences/writeback_operation/state_pointset.json new file mode 100644 index 0000000000..2c8e566cb8 --- /dev/null +++ b/validator/sequences/writeback_operation/state_pointset.json @@ -0,0 +1,18 @@ +{ + "points" : { + "filter_alarm_pressure_status" : { + "units" : "No-units", + "value_state" : "updating" + }, + "filter_differential_pressure_setpoint" : { + "units" : "Bars", + "value_state" : "updating" + }, + "filter_differential_pressure_sensor" : { + "units" : "Degrees-Celsius", + "value_state" : "updating" + } + }, + "timestamp" : "2025-08-21T06:57:07Z", + "version" : "1.5.3" +} \ No newline at end of file diff --git a/validator/sequences/writeback_operation/state_system.attr b/validator/sequences/writeback_operation/state_system.attr new file mode 100644 index 0000000000..600015fc37 --- /dev/null +++ b/validator/sequences/writeback_operation/state_system.attr @@ -0,0 +1,10 @@ +{ + "deviceId" : "AHU-1", + "deviceNumId" : "123456789101112", + "deviceRegistryId" : "ZZ-TRI-FECTA", + "projectId" : "localhost", + "transactionId" : "MP:cec94173-0", + "publishTime" : "2025-08-21T06:57:07Z", + "subFolder" : "system", + "subType" : "state" +} \ No newline at end of file diff --git a/validator/sequences/writeback_operation/state_system.json b/validator/sequences/writeback_operation/state_system.json new file mode 100644 index 0000000000..00a5ce81c9 --- /dev/null +++ b/validator/sequences/writeback_operation/state_system.json @@ -0,0 +1,25 @@ +{ + "hardware" : { + "make" : "BOS", + "model" : "pubber" + }, + "last_config" : "2025-08-21T06:57:06Z", + "operation" : { + "operational" : true, + "last_start" : "2025-08-21T06:55:44Z", + "restart_count" : 1, + "mode" : "initial" + }, + "serial_no" : "742132", + "software" : { + "firmware" : "v1" + }, + "status" : { + "message" : "success", + "category" : "system.config.apply", + "timestamp" : "2025-08-21T06:57:06Z", + "level" : 300 + }, + "timestamp" : "2025-08-21T06:57:07Z", + "version" : "1.5.3" +} \ No newline at end of file diff --git a/validator/sequences/writeback_operation/state_update.attr b/validator/sequences/writeback_operation/state_update.attr new file mode 100644 index 0000000000..157264e34a --- /dev/null +++ b/validator/sequences/writeback_operation/state_update.attr @@ -0,0 +1,10 @@ +{ + "deviceId" : "AHU-1", + "deviceNumId" : "123456789101112", + "deviceRegistryId" : "ZZ-TRI-FECTA", + "projectId" : "localhost", + "transactionId" : "MP:fa216e61", + "publishTime" : "2025-08-21T06:57:09Z", + "subFolder" : "update", + "subType" : "state" +} \ No newline at end of file diff --git a/validator/sequences/writeback_operation/state_update.json b/validator/sequences/writeback_operation/state_update.json new file mode 100644 index 0000000000..e60223709b --- /dev/null +++ b/validator/sequences/writeback_operation/state_update.json @@ -0,0 +1,60 @@ +{ + "discovery" : { + "families" : { } + }, + "localnet" : { + "families" : { + "ether" : { + "addr" : "42:01:ac:10:83:22" + }, + "ipv4" : { + "addr" : "172.16.131.34" + }, + "vendor" : { + "addr" : "28179023" + }, + "bacnet" : { + "addr" : "27312" + } + } + }, + "pointset" : { + "points" : { + "filter_alarm_pressure_status" : { + "units" : "No-units" + }, + "filter_differential_pressure_setpoint" : { + "units" : "Bars", + "value_state" : "applied" + }, + "filter_differential_pressure_sensor" : { + "units" : "Degrees-Celsius" + } + } + }, + "system" : { + "last_config" : "2025-08-21T06:57:06Z", + "operation" : { + "operational" : true, + "last_start" : "2025-08-21T06:55:44Z", + "restart_count" : 1, + "mode" : "initial" + }, + "serial_no" : "742132", + "hardware" : { + "make" : "BOS", + "model" : "pubber" + }, + "software" : { + "firmware" : "v1" + }, + "status" : { + "message" : "success", + "category" : "system.config.apply", + "timestamp" : "2025-08-21T06:57:06Z", + "level" : 300 + } + }, + "timestamp" : "2025-08-21T06:57:09Z", + "version" : "1.5.3" +} \ No newline at end of file diff --git a/validator/sequences/writeback_operation/state_validation.attr b/validator/sequences/writeback_operation/state_validation.attr new file mode 100644 index 0000000000..ebb372fcdd --- /dev/null +++ b/validator/sequences/writeback_operation/state_validation.attr @@ -0,0 +1,10 @@ +{ + "deviceId" : "AHU-1", + "deviceNumId" : "123456789101112", + "deviceRegistryId" : "ZZ-TRI-FECTA", + "projectId" : "localhost", + "transactionId" : "RC:3109d1.00000003", + "publishTime" : "2025-08-21T06:56:47Z", + "subFolder" : "validation", + "subType" : "state" +} \ No newline at end of file diff --git a/validator/sequences/writeback_operation/state_validation.json b/validator/sequences/writeback_operation/state_validation.json new file mode 100644 index 0000000000..4930737629 --- /dev/null +++ b/validator/sequences/writeback_operation/state_validation.json @@ -0,0 +1,3 @@ +{ + "operation" : "REPLY" +} \ No newline at end of file From 98386b91c8cba91b3c4f191dc8aacd84fb1f0c35 Mon Sep 17 00:00:00 2001 From: Nitish Jain Date: Thu, 21 Aug 2025 09:40:45 +0000 Subject: [PATCH 29/68] Sequencer test for updating transitional state --- .../com/google/daq/mqtt/sequencer/SequenceBase.java | 6 ++++++ .../sequencer/sequences/WritebackSequences.java | 13 ++++++------- 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/validator/src/main/java/com/google/daq/mqtt/sequencer/SequenceBase.java b/validator/src/main/java/com/google/daq/mqtt/sequencer/SequenceBase.java index 76960af6d7..a727eed8bb 100644 --- a/validator/src/main/java/com/google/daq/mqtt/sequencer/SequenceBase.java +++ b/validator/src/main/java/com/google/daq/mqtt/sequencer/SequenceBase.java @@ -2732,6 +2732,12 @@ public CapabilitySuccess(Class capability) { } } + protected static class AppliedTooQuicklyException extends RuntimeException { + public AppliedTooQuicklyException(String message) { + super(message); + } + } + class SequenceTestWatcher extends TestWatcher { @Override diff --git a/validator/src/main/java/com/google/daq/mqtt/sequencer/sequences/WritebackSequences.java b/validator/src/main/java/com/google/daq/mqtt/sequencer/sequences/WritebackSequences.java index d919401a60..f66d3af743 100644 --- a/validator/src/main/java/com/google/daq/mqtt/sequencer/sequences/WritebackSequences.java +++ b/validator/src/main/java/com/google/daq/mqtt/sequencer/sequences/WritebackSequences.java @@ -136,15 +136,14 @@ public void writeback_operation() { // 2. Error out if it takes too long to get to UPDATING. try { waitUntil(expectedValueState(UPDATING.value()), UPDATING_WAIT_DURATION, () -> { - appliedCheck.set(valueStateIs(targetPoint, APPLIED.value())); - - ifNullSkipTest(appliedCheck, "operation completed quickly"); + if (valueStateIs(targetPoint, APPLIED.value()) == null) { + throw new AppliedTooQuicklyException("Operation completed quickly."); + } return valueStateIs(targetPoint, UPDATING.value()); }); - } catch (RuntimeException e) { - if (appliedCheck.get() == null) { - skipTest("operation completed quickly"); - } + } catch (AppliedTooQuicklyException e) { + // The operation was too fast; this is a valid outcome, so we skip the test. + skipTest(e.getMessage()); } waitUntil(expectedValueState(APPLIED.value()), () -> valueStateIs(targetPoint, APPLIED.value())); } From 2f58d604110924c794fb0331911dc47989446242 Mon Sep 17 00:00:00 2001 From: Nitish Jain Date: Thu, 21 Aug 2025 10:12:23 +0000 Subject: [PATCH 30/68] sequencer changes --- .../main/java/com/google/daq/mqtt/sequencer/SequenceBase.java | 4 ++++ .../daq/mqtt/sequencer/sequences/WritebackSequences.java | 3 ++- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/validator/src/main/java/com/google/daq/mqtt/sequencer/SequenceBase.java b/validator/src/main/java/com/google/daq/mqtt/sequencer/SequenceBase.java index a727eed8bb..a420c19e2c 100644 --- a/validator/src/main/java/com/google/daq/mqtt/sequencer/SequenceBase.java +++ b/validator/src/main/java/com/google/daq/mqtt/sequencer/SequenceBase.java @@ -2732,6 +2732,10 @@ public CapabilitySuccess(Class capability) { } } + /** + * Exception to indicate that the point transitioned to the final state + * before the intermediate state was observed. + */ protected static class AppliedTooQuicklyException extends RuntimeException { public AppliedTooQuicklyException(String message) { super(message); diff --git a/validator/src/main/java/com/google/daq/mqtt/sequencer/sequences/WritebackSequences.java b/validator/src/main/java/com/google/daq/mqtt/sequencer/sequences/WritebackSequences.java index f66d3af743..2ef96c3ce8 100644 --- a/validator/src/main/java/com/google/daq/mqtt/sequencer/sequences/WritebackSequences.java +++ b/validator/src/main/java/com/google/daq/mqtt/sequencer/sequences/WritebackSequences.java @@ -145,7 +145,8 @@ public void writeback_operation() { // The operation was too fast; this is a valid outcome, so we skip the test. skipTest(e.getMessage()); } - waitUntil(expectedValueState(APPLIED.value()), () -> valueStateIs(targetPoint, APPLIED.value())); + waitUntil(expectedValueState(APPLIED.value()), + () -> valueStateIs(targetPoint, APPLIED.value())); } } From 965eb10008097dd8420e32e5881ed508601bbe46 Mon Sep 17 00:00:00 2001 From: Nitish Jain Date: Thu, 21 Aug 2025 13:55:52 +0000 Subject: [PATCH 31/68] Sequencer test for updating transitional state --- .gencode_hash.txt | 4 +-- gencode/docs/configuration_pubber.html | 2 +- gencode/java/udmi/schema/PubberOptions.java | 4 +-- .../impl/manager/PubberPointsetManager.java | 6 ++-- schema/options_pubber.json | 2 +- .../daq/mqtt/sequencer/PointsetBase.java | 1 + .../daq/mqtt/sequencer/SequenceBase.java | 17 +++++----- .../sequences/WritebackSequences.java | 31 +++++++------------ 8 files changed, 28 insertions(+), 39 deletions(-) diff --git a/.gencode_hash.txt b/.gencode_hash.txt index 76eb9ec9e6..bd75713f20 100644 --- a/.gencode_hash.txt +++ b/.gencode_hash.txt @@ -4,7 +4,7 @@ c21266e8de23b6e8acfac16a177db782375bf71df470c343c3f8eb8b822ef56a gencode/docs/c 0bb798c8db6be37266946569a096e2f0b7520ee54d65e7e8d37675ef17820f14 gencode/docs/configuration_endpoint.html 7caf6f29bff7c358536444c0d8502169f708bcc6f32a3d0a8aae155708b2cd04 gencode/docs/configuration_execution.html 11b21f73b6a4065102968a4c09979639b8a7ea6efb20e40d52cd21b2a60167bb gencode/docs/configuration_pod.html -582fd70f63c3872eb650189891fbb8bafe16395a5633e94a94d7c2bea3030a48 gencode/docs/configuration_pubber.html +b34c136cee32cb88f32a427ff400c3898ed49168f6dcaca1bc9ba65365bc5ae4 gencode/docs/configuration_pubber.html 1057fa40fb7a31a23bb2773d21c38cf4590a935bd8b5ea4218e695c6204f5dd9 gencode/docs/data_template.html 046ed76860a187d3e17a4d90a1dcea3462bece897e8726839bfeb7fcbdda78c0 gencode/docs/events.html 65a890087a21577db420cc26a6bfd878753b475a06cf56eb2037f5a04719cabf gencode/docs/events_discovery.html @@ -112,7 +112,7 @@ c73ad6dde0db8a520f3fee5a563c55a79fc7e6d1cd7875723b10c3d34036a46b gencode/java/u 9637f95e8a1185b1b028308a8caa2ca5a78cb46ae97f9cc11e2731066129540e gencode/java/udmi/schema/Position.java d87deaba67bb3272c528e3491d378bde059b626964a4a2aed15f5643305c2463 gencode/java/udmi/schema/Properties.java 4cdd5dc6b2e054a43f2e70adeb46ef8e3ff78288d4315923a925415f87e871aa gencode/java/udmi/schema/PubberConfiguration.java -3a6b03591dba54554af728171d2f23f86ee9e95f372adb8869212e46bd554704 gencode/java/udmi/schema/PubberOptions.java +86b4de51f2ba6e9afe34a5a9069e34cf5aa14b7e08d7ac2ed688bad42a769205 gencode/java/udmi/schema/PubberOptions.java cd2c7580a75391393c2f761f4434e4e7e83e2d2d1f35e9e62d69c19e65ea2557 gencode/java/udmi/schema/RefDiscovery.java 14faa115d13ee46d10935b13753bff85758f3b64b5136a59f60d36b5b541687c gencode/java/udmi/schema/SchemaValidationState.java fadf083200e73d46cfdec2f710d40e3d2bc4dbf05196e4d0900186e72b62d95e gencode/java/udmi/schema/Scoring.java diff --git a/gencode/docs/configuration_pubber.html b/gencode/docs/configuration_pubber.html index 028c307653..b1ede1ae25 100644 --- a/gencode/docs/configuration_pubber.html +++ b/gencode/docs/configuration_pubber.html @@ -3253,7 +3253,7 @@

/> delayWrite

Type: boolean
-

If true, the pubber will simulate a delayed writeback operations, leading to timeout.

+

If true, the pubber will simulate a delayed writeback operations, leading to slow writeback without an intermediate updating state.

diff --git a/gencode/java/udmi/schema/PubberOptions.java b/gencode/java/udmi/schema/PubberOptions.java index 2a44843b9b..4ea29397b9 100644 --- a/gencode/java/udmi/schema/PubberOptions.java +++ b/gencode/java/udmi/schema/PubberOptions.java @@ -150,11 +150,11 @@ public class PubberOptions { @JsonPropertyDescription("If true, the pubber will simulate a fast writeback operations.") public Boolean fastWrite; /** - * If true, the pubber will simulate a delayed writeback operations, leading to timeout. + * If true, the pubber will simulate a delayed writeback operations, leading to slow writeback without an intermediate updating state. * */ @JsonProperty("delayWrite") - @JsonPropertyDescription("If true, the pubber will simulate a delayed writeback operations, leading to timeout.") + @JsonPropertyDescription("If true, the pubber will simulate a delayed writeback operations, leading to slow writeback without an intermediate updating state.") public Boolean delayWrite; @JsonProperty("softwareFirmwareValue") public String softwareFirmwareValue; diff --git a/pubber/src/main/java/daq/pubber/impl/manager/PubberPointsetManager.java b/pubber/src/main/java/daq/pubber/impl/manager/PubberPointsetManager.java index 3bd128158f..03ab879aef 100644 --- a/pubber/src/main/java/daq/pubber/impl/manager/PubberPointsetManager.java +++ b/pubber/src/main/java/daq/pubber/impl/manager/PubberPointsetManager.java @@ -32,7 +32,7 @@ public class PubberPointsetManager extends PubberManager implements PointsetMana private final Map managedPoints = new HashMap<>(); private final ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1); private static final int WRITE_DELAY_SEC = 3; - private static final int TIMEOUT_WRITE_DELAY_SEC = 60; + private static final int WRITE_DELAY_WITHOUT_UPDATING_STATE_SEC= 60; private int pointsetUpdateCount = -1; @@ -140,11 +140,11 @@ private static PointPointsetModel makePointPointsetModel(int value, double toler public void updatePointConfig(AbstractPoint point, PointPointsetConfig pointConfig) { boolean isFastWrite = isFastWrite(); boolean isDelayWrite = isDelayWrite(); - + if (isFastWrite) { PointsetManager.super.updatePointConfig(point, pointConfig); } else if (isDelayWrite) { - handleDelayWriteback(point, pointConfig, TIMEOUT_WRITE_DELAY_SEC); + handleDelayWriteback(point, pointConfig, WRITE_DELAY_WITHOUT_UPDATING_STATE_SEC); } else { handleSlowWriteback(point, pointConfig, WRITE_DELAY_SEC); } diff --git a/schema/options_pubber.json b/schema/options_pubber.json index 6eac64449e..064e21a964 100644 --- a/schema/options_pubber.json +++ b/schema/options_pubber.json @@ -123,7 +123,7 @@ }, "delayWrite": { "type": "boolean", - "description": "If true, the pubber will simulate a delayed writeback operations, leading to timeout." + "description": "If true, the pubber will simulate a delayed writeback operations, leading to slow writeback without an intermediate updating state." }, "softwareFirmwareValue": { "type": "string" diff --git a/validator/src/main/java/com/google/daq/mqtt/sequencer/PointsetBase.java b/validator/src/main/java/com/google/daq/mqtt/sequencer/PointsetBase.java index ecb33d563c..913230a411 100644 --- a/validator/src/main/java/com/google/daq/mqtt/sequencer/PointsetBase.java +++ b/validator/src/main/java/com/google/daq/mqtt/sequencer/PointsetBase.java @@ -18,6 +18,7 @@ public abstract class PointsetBase extends SequenceBase { public static final String FAILURE_STATE = "failure"; public static final String APPLIED_STATE = "applied"; public static final String TWEAKED_REF = "tweaked_ref"; + public static final String UPDATING_STATE = "updating"; @Override public void setUp() { diff --git a/validator/src/main/java/com/google/daq/mqtt/sequencer/SequenceBase.java b/validator/src/main/java/com/google/daq/mqtt/sequencer/SequenceBase.java index a420c19e2c..60f8baa22f 100644 --- a/validator/src/main/java/com/google/daq/mqtt/sequencer/SequenceBase.java +++ b/validator/src/main/java/com/google/daq/mqtt/sequencer/SequenceBase.java @@ -1596,6 +1596,9 @@ protected void waitUntil(String description, Duration maxWait, Supplier waitEvaluateLoop(sanitizedDescription, maxWait, evaluator, detail); recordSequence("Wait until", description); }, detail::get); + } catch (AssumptionViolatedException e) { + // Re-throw to allow the test framework to handle the skip. + throw e; } catch (Exception e) { String message = format("Failed waiting until %s: %s", sanitizedDescription, detail.get()); recordSequence(message); @@ -1740,6 +1743,8 @@ private void whileDoing(String description, Runnable action, Consumer // This is some fundamental problem, so just pass it along without the waiting detail. catcher.accept(e); throw e; + } catch (AssumptionViolatedException e) { + throw e; } catch (Exception e) { catcher.accept(e); String detail = ifNotNullGet(detailer, Supplier::get); @@ -1747,6 +1752,8 @@ private void whileDoing(String description, Runnable action, Consumer throw ifNotNullGet(detail, message -> new RuntimeException(e.getMessage() + " because " + message), e); } + } catch (AssumptionViolatedException e) { + throw e; } catch (Exception e) { throw new RuntimeException("While " + description, e); } @@ -2732,16 +2739,6 @@ public CapabilitySuccess(Class capability) { } } - /** - * Exception to indicate that the point transitioned to the final state - * before the intermediate state was observed. - */ - protected static class AppliedTooQuicklyException extends RuntimeException { - public AppliedTooQuicklyException(String message) { - super(message); - } - } - class SequenceTestWatcher extends TestWatcher { @Override diff --git a/validator/src/main/java/com/google/daq/mqtt/sequencer/sequences/WritebackSequences.java b/validator/src/main/java/com/google/daq/mqtt/sequencer/sequences/WritebackSequences.java index 2ef96c3ce8..409cf527b3 100644 --- a/validator/src/main/java/com/google/daq/mqtt/sequencer/sequences/WritebackSequences.java +++ b/validator/src/main/java/com/google/daq/mqtt/sequencer/sequences/WritebackSequences.java @@ -5,8 +5,6 @@ import static java.lang.String.format; import static udmi.schema.Bucket.WRITEBACK; import static udmi.schema.FeatureDiscovery.FeatureStage.ALPHA; -import static udmi.schema.PointPointsetState.Value_state.APPLIED; -import static udmi.schema.PointPointsetState.Value_state.UPDATING; import com.google.daq.mqtt.sequencer.Feature; import com.google.daq.mqtt.sequencer.PointsetBase; @@ -28,7 +26,7 @@ public class WritebackSequences extends PointsetBase { public static final String DEFAULT_STATE = null; private Object lastPresentValue; - private static final Duration UPDATING_WAIT_DURATION = Duration.ofSeconds(10); + private static final Duration UPDATING_WAIT_DURATION = Duration.ofSeconds(15); private static final Duration MAX_WAIT_TIME = Duration.ofSeconds(25); @Before @@ -85,7 +83,7 @@ private String presentValueIs(TargetTestingModel targetModel) { @Feature(stage = ALPHA, bucket = WRITEBACK) @Summary("Implements UDMI writeback and can successfully writeback to a point") public void writeback_success() { - TargetTestingModel targetModel = testTargetState(APPLIED.value()); + TargetTestingModel targetModel = testTargetState(APPLIED_STATE); waitUntil("target point to have target expected value", () -> presentValueIs(targetModel)); } @@ -120,12 +118,11 @@ public void writeback_failure() { @Test(timeout = FOUR_MINUTES_MS) @Feature(stage = ALPHA, bucket = WRITEBACK) - @Summary("Implements writeback operations") + @Summary("Tests intermediate UPDATING state of a writeback operation") public void writeback_operation() { - TargetTestingModel targetModel = getTarget(APPLIED.value()); + TargetTestingModel targetModel = getTarget(APPLIED_STATE); String targetPoint = targetModel.target_point; Object targetValue = targetModel.target_value; - AtomicReference appliedCheck = new AtomicReference<>(""); deviceConfig.pointset.points.get(targetPoint).set_value = null; waitUntil(expectedValueState(DEFAULT_STATE), () -> valueStateIs(targetPoint, DEFAULT_STATE)); @@ -134,19 +131,13 @@ public void writeback_operation() { // Wait until the intermediate UPDATING state. In other cases, this should: // 1. Skip if it ends up APPLIED too quickly. // 2. Error out if it takes too long to get to UPDATING. - try { - waitUntil(expectedValueState(UPDATING.value()), UPDATING_WAIT_DURATION, () -> { - if (valueStateIs(targetPoint, APPLIED.value()) == null) { - throw new AppliedTooQuicklyException("Operation completed quickly."); - } - return valueStateIs(targetPoint, UPDATING.value()); - }); - } catch (AppliedTooQuicklyException e) { - // The operation was too fast; this is a valid outcome, so we skip the test. - skipTest(e.getMessage()); - } - waitUntil(expectedValueState(APPLIED.value()), - () -> valueStateIs(targetPoint, APPLIED.value())); + waitUntil(expectedValueState(UPDATING_STATE), UPDATING_WAIT_DURATION, () -> { + String appliedCheck = valueStateIs(targetPoint, APPLIED_STATE); + ifNullSkipTest(appliedCheck, "operation completed quickly"); + + return valueStateIs(targetPoint, UPDATING_STATE); + }); + waitUntil(expectedValueState(APPLIED_STATE), () -> valueStateIs(targetPoint, APPLIED_STATE)); } } From e6cbb488d63d069153d3212d6b1fea339b51ca78 Mon Sep 17 00:00:00 2001 From: Nitish Jain Date: Thu, 21 Aug 2025 13:55:52 +0000 Subject: [PATCH 32/68] sequencer changes --- .gencode_hash.txt | 4 +- gencode/docs/configuration_pubber.html | 2 +- gencode/java/udmi/schema/PubberOptions.java | 4 +- .../impl/manager/PubberPointsetManager.java | 6 +- schema/options_pubber.json | 2 +- .../writeback_operation/config_discovery.attr | 4 +- .../writeback_operation/config_localnet.attr | 4 +- .../writeback_operation/config_pointset.attr | 4 +- .../writeback_operation/config_system.attr | 4 +- .../writeback_operation/config_update.attr | 4 +- .../writeback_operation/config_update.json | 4 +- .../writeback_operation/device_system.log | 141 +- .../writeback_operation/events_pointset.attr | 4 +- .../writeback_operation/events_pointset.json | 8 +- .../writeback_operation/events_system.attr | 4 +- .../writeback_operation/events_system.json | 194 +- .../writeback_operation/local_system.json | 2 +- .../writeback_operation/local_update.json | 4 +- .../writeback_operation/sequence.log | 3165 +++++++++-------- .../sequences/writeback_operation/sequence.md | 2 +- .../writeback_operation/state_discovery.attr | 4 +- .../writeback_operation/state_discovery.json | 2 +- .../writeback_operation/state_localnet.attr | 4 +- .../writeback_operation/state_localnet.json | 2 +- .../writeback_operation/state_pointset.attr | 4 +- .../writeback_operation/state_pointset.json | 2 +- .../writeback_operation/state_system.attr | 4 +- .../writeback_operation/state_system.json | 10 +- .../writeback_operation/state_update.attr | 4 +- .../writeback_operation/state_update.json | 10 +- .../writeback_operation/state_validation.attr | 4 +- .../daq/mqtt/sequencer/PointsetBase.java | 1 + .../daq/mqtt/sequencer/SequenceBase.java | 17 +- .../sequences/WritebackSequences.java | 31 +- 34 files changed, 1906 insertions(+), 1759 deletions(-) diff --git a/.gencode_hash.txt b/.gencode_hash.txt index 76eb9ec9e6..bd75713f20 100644 --- a/.gencode_hash.txt +++ b/.gencode_hash.txt @@ -4,7 +4,7 @@ c21266e8de23b6e8acfac16a177db782375bf71df470c343c3f8eb8b822ef56a gencode/docs/c 0bb798c8db6be37266946569a096e2f0b7520ee54d65e7e8d37675ef17820f14 gencode/docs/configuration_endpoint.html 7caf6f29bff7c358536444c0d8502169f708bcc6f32a3d0a8aae155708b2cd04 gencode/docs/configuration_execution.html 11b21f73b6a4065102968a4c09979639b8a7ea6efb20e40d52cd21b2a60167bb gencode/docs/configuration_pod.html -582fd70f63c3872eb650189891fbb8bafe16395a5633e94a94d7c2bea3030a48 gencode/docs/configuration_pubber.html +b34c136cee32cb88f32a427ff400c3898ed49168f6dcaca1bc9ba65365bc5ae4 gencode/docs/configuration_pubber.html 1057fa40fb7a31a23bb2773d21c38cf4590a935bd8b5ea4218e695c6204f5dd9 gencode/docs/data_template.html 046ed76860a187d3e17a4d90a1dcea3462bece897e8726839bfeb7fcbdda78c0 gencode/docs/events.html 65a890087a21577db420cc26a6bfd878753b475a06cf56eb2037f5a04719cabf gencode/docs/events_discovery.html @@ -112,7 +112,7 @@ c73ad6dde0db8a520f3fee5a563c55a79fc7e6d1cd7875723b10c3d34036a46b gencode/java/u 9637f95e8a1185b1b028308a8caa2ca5a78cb46ae97f9cc11e2731066129540e gencode/java/udmi/schema/Position.java d87deaba67bb3272c528e3491d378bde059b626964a4a2aed15f5643305c2463 gencode/java/udmi/schema/Properties.java 4cdd5dc6b2e054a43f2e70adeb46ef8e3ff78288d4315923a925415f87e871aa gencode/java/udmi/schema/PubberConfiguration.java -3a6b03591dba54554af728171d2f23f86ee9e95f372adb8869212e46bd554704 gencode/java/udmi/schema/PubberOptions.java +86b4de51f2ba6e9afe34a5a9069e34cf5aa14b7e08d7ac2ed688bad42a769205 gencode/java/udmi/schema/PubberOptions.java cd2c7580a75391393c2f761f4434e4e7e83e2d2d1f35e9e62d69c19e65ea2557 gencode/java/udmi/schema/RefDiscovery.java 14faa115d13ee46d10935b13753bff85758f3b64b5136a59f60d36b5b541687c gencode/java/udmi/schema/SchemaValidationState.java fadf083200e73d46cfdec2f710d40e3d2bc4dbf05196e4d0900186e72b62d95e gencode/java/udmi/schema/Scoring.java diff --git a/gencode/docs/configuration_pubber.html b/gencode/docs/configuration_pubber.html index 028c307653..b1ede1ae25 100644 --- a/gencode/docs/configuration_pubber.html +++ b/gencode/docs/configuration_pubber.html @@ -3253,7 +3253,7 @@

/> delayWrite

Type: boolean
-

If true, the pubber will simulate a delayed writeback operations, leading to timeout.

+

If true, the pubber will simulate a delayed writeback operations, leading to slow writeback without an intermediate updating state.

diff --git a/gencode/java/udmi/schema/PubberOptions.java b/gencode/java/udmi/schema/PubberOptions.java index 2a44843b9b..4ea29397b9 100644 --- a/gencode/java/udmi/schema/PubberOptions.java +++ b/gencode/java/udmi/schema/PubberOptions.java @@ -150,11 +150,11 @@ public class PubberOptions { @JsonPropertyDescription("If true, the pubber will simulate a fast writeback operations.") public Boolean fastWrite; /** - * If true, the pubber will simulate a delayed writeback operations, leading to timeout. + * If true, the pubber will simulate a delayed writeback operations, leading to slow writeback without an intermediate updating state. * */ @JsonProperty("delayWrite") - @JsonPropertyDescription("If true, the pubber will simulate a delayed writeback operations, leading to timeout.") + @JsonPropertyDescription("If true, the pubber will simulate a delayed writeback operations, leading to slow writeback without an intermediate updating state.") public Boolean delayWrite; @JsonProperty("softwareFirmwareValue") public String softwareFirmwareValue; diff --git a/pubber/src/main/java/daq/pubber/impl/manager/PubberPointsetManager.java b/pubber/src/main/java/daq/pubber/impl/manager/PubberPointsetManager.java index 3bd128158f..03ab879aef 100644 --- a/pubber/src/main/java/daq/pubber/impl/manager/PubberPointsetManager.java +++ b/pubber/src/main/java/daq/pubber/impl/manager/PubberPointsetManager.java @@ -32,7 +32,7 @@ public class PubberPointsetManager extends PubberManager implements PointsetMana private final Map managedPoints = new HashMap<>(); private final ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1); private static final int WRITE_DELAY_SEC = 3; - private static final int TIMEOUT_WRITE_DELAY_SEC = 60; + private static final int WRITE_DELAY_WITHOUT_UPDATING_STATE_SEC= 60; private int pointsetUpdateCount = -1; @@ -140,11 +140,11 @@ private static PointPointsetModel makePointPointsetModel(int value, double toler public void updatePointConfig(AbstractPoint point, PointPointsetConfig pointConfig) { boolean isFastWrite = isFastWrite(); boolean isDelayWrite = isDelayWrite(); - + if (isFastWrite) { PointsetManager.super.updatePointConfig(point, pointConfig); } else if (isDelayWrite) { - handleDelayWriteback(point, pointConfig, TIMEOUT_WRITE_DELAY_SEC); + handleDelayWriteback(point, pointConfig, WRITE_DELAY_WITHOUT_UPDATING_STATE_SEC); } else { handleSlowWriteback(point, pointConfig, WRITE_DELAY_SEC); } diff --git a/schema/options_pubber.json b/schema/options_pubber.json index 6eac64449e..064e21a964 100644 --- a/schema/options_pubber.json +++ b/schema/options_pubber.json @@ -123,7 +123,7 @@ }, "delayWrite": { "type": "boolean", - "description": "If true, the pubber will simulate a delayed writeback operations, leading to timeout." + "description": "If true, the pubber will simulate a delayed writeback operations, leading to slow writeback without an intermediate updating state." }, "softwareFirmwareValue": { "type": "string" diff --git a/validator/sequences/writeback_operation/config_discovery.attr b/validator/sequences/writeback_operation/config_discovery.attr index adad21e950..a4fc4f464b 100644 --- a/validator/sequences/writeback_operation/config_discovery.attr +++ b/validator/sequences/writeback_operation/config_discovery.attr @@ -3,8 +3,8 @@ "deviceNumId" : "123456789101112", "deviceRegistryId" : "ZZ-TRI-FECTA", "projectId" : "localhost", - "transactionId" : "CU:3109d1.0000000b", - "publishTime" : "2025-08-21T06:57:03Z", + "transactionId" : "CU:785c42.0000000b", + "publishTime" : "2025-08-21T14:02:59Z", "subFolder" : "discovery", "subType" : "config" } \ No newline at end of file diff --git a/validator/sequences/writeback_operation/config_localnet.attr b/validator/sequences/writeback_operation/config_localnet.attr index f5d41d29b7..fd609cad67 100644 --- a/validator/sequences/writeback_operation/config_localnet.attr +++ b/validator/sequences/writeback_operation/config_localnet.attr @@ -3,8 +3,8 @@ "deviceNumId" : "123456789101112", "deviceRegistryId" : "ZZ-TRI-FECTA", "projectId" : "localhost", - "transactionId" : "CU:3109d1.0000000a", - "publishTime" : "2025-08-21T06:57:01Z", + "transactionId" : "CU:785c42.0000000a", + "publishTime" : "2025-08-21T14:02:58Z", "subFolder" : "localnet", "subType" : "config" } \ No newline at end of file diff --git a/validator/sequences/writeback_operation/config_pointset.attr b/validator/sequences/writeback_operation/config_pointset.attr index fee98711e8..2bf3bd01ee 100644 --- a/validator/sequences/writeback_operation/config_pointset.attr +++ b/validator/sequences/writeback_operation/config_pointset.attr @@ -3,8 +3,8 @@ "deviceNumId" : "123456789101112", "deviceRegistryId" : "ZZ-TRI-FECTA", "projectId" : "localhost", - "transactionId" : "CU:3109d1.0000000c", - "publishTime" : "2025-08-21T06:57:07Z", + "transactionId" : "CU:785c42.0000000c", + "publishTime" : "2025-08-21T14:03:03Z", "subFolder" : "pointset", "subType" : "config" } \ No newline at end of file diff --git a/validator/sequences/writeback_operation/config_system.attr b/validator/sequences/writeback_operation/config_system.attr index 1a14e06472..bc4b5a11a5 100644 --- a/validator/sequences/writeback_operation/config_system.attr +++ b/validator/sequences/writeback_operation/config_system.attr @@ -3,8 +3,8 @@ "deviceNumId" : "123456789101112", "deviceRegistryId" : "ZZ-TRI-FECTA", "projectId" : "localhost", - "transactionId" : "CU:3109d1.00000008", - "publishTime" : "2025-08-21T06:57:00Z", + "transactionId" : "CU:785c42.00000008", + "publishTime" : "2025-08-21T14:02:56Z", "subFolder" : "system", "subType" : "config" } \ No newline at end of file diff --git a/validator/sequences/writeback_operation/config_update.attr b/validator/sequences/writeback_operation/config_update.attr index 8a8d388e9f..c6f546dc46 100644 --- a/validator/sequences/writeback_operation/config_update.attr +++ b/validator/sequences/writeback_operation/config_update.attr @@ -3,8 +3,8 @@ "deviceNumId" : "123456789101112", "deviceRegistryId" : "ZZ-TRI-FECTA", "projectId" : "localhost", - "transactionId" : "RC:3109d1.0000000c", - "publishTime" : "2025-08-21T06:57:06Z", + "transactionId" : "RC:785c42.0000000c", + "publishTime" : "2025-08-21T14:03:02Z", "subFolder" : "update", "subType" : "config" } \ No newline at end of file diff --git a/validator/sequences/writeback_operation/config_update.json b/validator/sequences/writeback_operation/config_update.json index d5258ba9b2..f9e6e42b3d 100644 --- a/validator/sequences/writeback_operation/config_update.json +++ b/validator/sequences/writeback_operation/config_update.json @@ -1,11 +1,11 @@ { - "timestamp" : "2025-08-21T06:57:06Z", + "timestamp" : "2025-08-21T14:03:02Z", "version" : "@@@cloud udmi version###1.5.1-265-gf6769c13-dirty", "system" : { "min_loglevel" : 200, "metrics_rate_sec" : 10, "operation" : { - "last_start" : "2025-08-21T06:55:44Z" + "last_start" : "2025-08-21T14:02:13Z" }, "testing" : { "sequence_name" : "writeback_operation" diff --git a/validator/sequences/writeback_operation/device_system.log b/validator/sequences/writeback_operation/device_system.log index 5142667806..84b821d35e 100644 --- a/validator/sequences/writeback_operation/device_system.log +++ b/validator/sequences/writeback_operation/device_system.log @@ -1,56 +1,85 @@ -2025-08-21T06:56:47Z INFO device.log Device AHU-1 config handler -2025-08-21T06:56:47Z INFO device.log 2025-08-21T06:56:47Z received config 2025-08-21T06:56:47Z -2025-08-21T06:56:47Z INFO device.log Applying slow writeback for point filter_alarm_pressure_status with 3s delay -2025-08-21T06:56:47Z INFO device.log Applying slow writeback for point filter_differential_pressure_setpoint with 3s delay -2025-08-21T06:56:47Z INFO device.log Applying slow writeback for point filter_differential_pressure_sensor with 3s delay -2025-08-21T06:56:47Z NOTICE system.config.apply success -2025-08-21T06:56:47Z INFO device.log Device AHU-1 config handler -2025-08-21T06:56:47Z INFO device.log 2025-08-21T06:56:47Z received config 2025-08-21T06:56:47Z -2025-08-21T06:56:47Z INFO device.log Applying slow writeback for point filter_alarm_pressure_status with 3s delay -2025-08-21T06:56:47Z INFO device.log Applying slow writeback for point filter_differential_pressure_setpoint with 3s delay -2025-08-21T06:56:47Z INFO device.log Applying slow writeback for point filter_differential_pressure_sensor with 3s delay -2025-08-21T06:56:47Z NOTICE system.config.apply success -2025-08-21T06:56:49Z INFO device.log Update state 2025-08-21T06:56:49Z last_config 2025-08-21T06:56:47Z -2025-08-21T06:56:50Z INFO device.log Completing delayed writeback for filter_alarm_pressure_status -2025-08-21T06:56:50Z INFO device.log Completing delayed writeback for filter_differential_pressure_setpoint -2025-08-21T06:56:50Z INFO device.log Completing delayed writeback for filter_differential_pressure_sensor -2025-08-21T06:56:50Z INFO device.log Completing delayed writeback for filter_alarm_pressure_status -2025-08-21T06:56:50Z INFO device.log Completing delayed writeback for filter_differential_pressure_setpoint -2025-08-21T06:56:50Z INFO device.log Completing delayed writeback for filter_differential_pressure_sensor -2025-08-21T06:56:51Z INFO device.log Update state 2025-08-21T06:56:51Z last_config 2025-08-21T06:56:47Z -2025-08-21T06:56:51Z INFO device.log Device AHU-1 config handler -2025-08-21T06:56:51Z INFO device.log 2025-08-21T06:56:51Z received config 2025-08-21T06:56:51Z -2025-08-21T06:56:51Z INFO device.log Applying slow writeback for point filter_alarm_pressure_status with 3s delay -2025-08-21T06:56:51Z INFO device.log Applying slow writeback for point filter_differential_pressure_setpoint with 3s delay -2025-08-21T06:56:51Z INFO device.log Applying slow writeback for point filter_differential_pressure_sensor with 3s delay -2025-08-21T06:56:51Z NOTICE system.config.apply success -2025-08-21T06:56:53Z INFO device.log Update state 2025-08-21T06:56:53Z last_config 2025-08-21T06:56:51Z -2025-08-21T06:56:54Z INFO device.log Completing delayed writeback for filter_alarm_pressure_status -2025-08-21T06:56:54Z INFO device.log Completing delayed writeback for filter_differential_pressure_setpoint -2025-08-21T06:56:54Z INFO device.log Completing delayed writeback for filter_differential_pressure_sensor -2025-08-21T06:56:55Z INFO device.log Update state 2025-08-21T06:56:55Z last_config 2025-08-21T06:56:51Z -2025-08-21T06:56:55Z INFO device.log Device AHU-1 config handler -2025-08-21T06:56:55Z INFO device.log 2025-08-21T06:56:55Z received config 2025-08-21T06:56:55Z -2025-08-21T06:56:55Z INFO device.log Applying slow writeback for point filter_alarm_pressure_status with 3s delay -2025-08-21T06:56:55Z INFO device.log Applying slow writeback for point filter_differential_pressure_setpoint with 3s delay -2025-08-21T06:56:55Z INFO device.log Applying slow writeback for point filter_differential_pressure_sensor with 3s delay -2025-08-21T06:56:55Z NOTICE system.config.apply success -2025-08-21T06:56:57Z INFO device.log Update state 2025-08-21T06:56:57Z last_config 2025-08-21T06:56:55Z -2025-08-21T06:56:58Z INFO device.log Completing delayed writeback for filter_alarm_pressure_status -2025-08-21T06:56:58Z INFO device.log Completing delayed writeback for filter_differential_pressure_setpoint -2025-08-21T06:56:58Z INFO device.log Completing delayed writeback for filter_differential_pressure_sensor -2025-08-21T06:56:59Z INFO device.log Update state 2025-08-21T06:56:59Z last_config 2025-08-21T06:56:55Z -2025-08-21T06:56:59Z INFO device.log Device AHU-1 config handler -2025-08-21T06:56:59Z INFO device.log 2025-08-21T06:56:59Z received config 2025-08-21T06:56:59Z -2025-08-21T06:56:59Z INFO device.log Applying slow writeback for point filter_alarm_pressure_status with 3s delay -2025-08-21T06:56:59Z INFO device.log Applying slow writeback for point filter_differential_pressure_setpoint with 3s delay -2025-08-21T06:56:59Z INFO device.log Applying slow writeback for point filter_differential_pressure_sensor with 3s delay -2025-08-21T06:56:59Z NOTICE system.config.apply success -2025-08-21T06:57:00Z INFO device.log Device AHU-1 config handler -2025-08-21T06:57:00Z INFO device.log 2025-08-21T06:57:00Z received config 2025-08-21T06:57:00Z -2025-08-21T06:57:00Z INFO device.log Applying slow writeback for point filter_alarm_pressure_status with 3s delay -2025-08-21T06:57:00Z INFO device.log Applying slow writeback for point filter_differential_pressure_setpoint with 3s delay -2025-08-21T06:57:00Z INFO device.log Applying slow writeback for point filter_differential_pressure_sensor with 3s delay -2025-08-21T06:57:00Z NOTICE system.config.apply success -2025-08-21T06:57:01Z INFO device.log Update state 2025-08-21T06:57:01Z last_config 2025-08-21T06:57:00Z -2025-08-21T06:57:10Z NOTICE validation.feature.sequence Sequence complete +2025-08-21T14:02:43Z INFO device.log Device AHU-1 config handler +2025-08-21T14:02:43Z INFO device.log 2025-08-21T14:02:43Z received config 2025-08-21T14:02:43Z +2025-08-21T14:02:43Z INFO device.log Applying slow writeback for point filter_alarm_pressure_status with 3s delay +2025-08-21T14:02:43Z INFO device.log Applying slow writeback for point filter_differential_pressure_setpoint with 3s delay +2025-08-21T14:02:43Z INFO device.log Applying slow writeback for point filter_differential_pressure_sensor with 3s delay +2025-08-21T14:02:43Z NOTICE system.config.apply success +2025-08-21T14:02:43Z INFO device.log Device AHU-1 config handler +2025-08-21T14:02:43Z INFO device.log 2025-08-21T14:02:43Z received config 2025-08-21T14:02:43Z +2025-08-21T14:02:43Z INFO device.log Applying slow writeback for point filter_alarm_pressure_status with 3s delay +2025-08-21T14:02:43Z INFO device.log Applying slow writeback for point filter_differential_pressure_setpoint with 3s delay +2025-08-21T14:02:43Z INFO device.log Applying slow writeback for point filter_differential_pressure_sensor with 3s delay +2025-08-21T14:02:43Z NOTICE system.config.apply success +2025-08-21T14:02:45Z INFO device.log Update state 2025-08-21T14:02:45Z last_config 2025-08-21T14:02:43Z +2025-08-21T14:02:46Z INFO device.log Completing delayed writeback for filter_alarm_pressure_status +2025-08-21T14:02:46Z INFO device.log Completing delayed writeback for filter_differential_pressure_setpoint +2025-08-21T14:02:46Z INFO device.log Completing delayed writeback for filter_alarm_pressure_status +2025-08-21T14:02:46Z INFO device.log Completing delayed writeback for filter_differential_pressure_setpoint +2025-08-21T14:02:46Z INFO device.log Completing delayed writeback for filter_differential_pressure_sensor +2025-08-21T14:02:47Z INFO device.log Update state 2025-08-21T14:02:47Z last_config 2025-08-21T14:02:43Z +2025-08-21T14:02:47Z INFO device.log Device AHU-1 config handler +2025-08-21T14:02:47Z INFO device.log 2025-08-21T14:02:47Z received config 2025-08-21T14:02:47Z +2025-08-21T14:02:47Z INFO device.log Applying slow writeback for point filter_alarm_pressure_status with 3s delay +2025-08-21T14:02:47Z INFO device.log Applying slow writeback for point filter_differential_pressure_setpoint with 3s delay +2025-08-21T14:02:47Z INFO device.log Applying slow writeback for point filter_differential_pressure_sensor with 3s delay +2025-08-21T14:02:47Z NOTICE system.config.apply success +2025-08-21T14:02:49Z INFO device.log Update state 2025-08-21T14:02:49Z last_config 2025-08-21T14:02:47Z +2025-08-21T14:02:50Z INFO device.log Completing delayed writeback for filter_alarm_pressure_status +2025-08-21T14:02:50Z INFO device.log Completing delayed writeback for filter_differential_pressure_setpoint +2025-08-21T14:02:51Z INFO device.log Update state 2025-08-21T14:02:51Z last_config 2025-08-21T14:02:47Z +2025-08-21T14:02:51Z INFO device.log 2025-08-21T14:02:51Z received config 2025-08-21T14:02:51Z +2025-08-21T14:02:51Z INFO device.log Applying slow writeback for point filter_alarm_pressure_status with 3s delay +2025-08-21T14:02:51Z INFO device.log Applying slow writeback for point filter_differential_pressure_setpoint with 3s delay +2025-08-21T14:02:51Z INFO device.log Applying slow writeback for point filter_differential_pressure_sensor with 3s delay +2025-08-21T14:02:51Z NOTICE system.config.apply success +2025-08-21T14:02:53Z INFO device.log Update state 2025-08-21T14:02:53Z last_config 2025-08-21T14:02:51Z +2025-08-21T14:02:54Z INFO device.log Completing delayed writeback for filter_alarm_pressure_status +2025-08-21T14:02:54Z INFO device.log Completing delayed writeback for filter_differential_pressure_sensor +2025-08-21T14:02:55Z INFO device.log Update state 2025-08-21T14:02:55Z last_config 2025-08-21T14:02:51Z +2025-08-21T14:02:55Z INFO device.log Device AHU-1 config handler +2025-08-21T14:02:55Z INFO device.log 2025-08-21T14:02:55Z received config 2025-08-21T14:02:55Z +2025-08-21T14:02:55Z INFO device.log Applying slow writeback for point filter_alarm_pressure_status with 3s delay +2025-08-21T14:02:55Z INFO device.log Applying slow writeback for point filter_differential_pressure_setpoint with 3s delay +2025-08-21T14:02:55Z INFO device.log Applying slow writeback for point filter_differential_pressure_sensor with 3s delay +2025-08-21T14:02:55Z NOTICE system.config.apply success +2025-08-21T14:02:56Z INFO device.log Device AHU-1 config handler +2025-08-21T14:02:56Z INFO device.log 2025-08-21T14:02:56Z received config 2025-08-21T14:02:56Z +2025-08-21T14:02:56Z INFO device.log Applying slow writeback for point filter_alarm_pressure_status with 3s delay +2025-08-21T14:02:56Z INFO device.log Applying slow writeback for point filter_differential_pressure_setpoint with 3s delay +2025-08-21T14:02:56Z INFO device.log Applying slow writeback for point filter_differential_pressure_sensor with 3s delay +2025-08-21T14:02:56Z NOTICE system.config.apply success +2025-08-21T14:02:57Z INFO device.log Update state 2025-08-21T14:02:57Z last_config 2025-08-21T14:02:56Z +2025-08-21T14:02:57Z INFO device.log Device AHU-1 config handler +2025-08-21T14:02:57Z INFO device.log 2025-08-21T14:02:57Z received config 2025-08-21T14:02:57Z +2025-08-21T14:02:57Z INFO device.log Applying slow writeback for point filter_alarm_pressure_status with 3s delay +2025-08-21T14:02:57Z INFO device.log Applying slow writeback for point filter_differential_pressure_setpoint with 3s delay +2025-08-21T14:02:57Z INFO device.log Applying slow writeback for point filter_differential_pressure_sensor with 3s delay +2025-08-21T14:02:57Z NOTICE system.config.apply success +2025-08-21T14:02:58Z INFO device.log Completing delayed writeback for filter_alarm_pressure_status +2025-08-21T14:02:58Z INFO device.log Completing delayed writeback for filter_differential_pressure_setpoint +2025-08-21T14:02:58Z INFO device.log Completing delayed writeback for filter_differential_pressure_sensor +2025-08-21T14:02:58Z INFO device.log Device AHU-1 config handler +2025-08-21T14:02:58Z INFO device.log 2025-08-21T14:02:58Z received config 2025-08-21T14:02:58Z +2025-08-21T14:02:58Z INFO device.log Applying slow writeback for point filter_alarm_pressure_status with 3s delay +2025-08-21T14:02:58Z INFO device.log Applying slow writeback for point filter_differential_pressure_setpoint with 3s delay +2025-08-21T14:02:58Z INFO device.log Applying slow writeback for point filter_differential_pressure_sensor with 3s delay +2025-08-21T14:02:58Z NOTICE system.config.apply success +2025-08-21T14:02:59Z INFO device.log Update state 2025-08-21T14:02:59Z last_config 2025-08-21T14:02:58Z +2025-08-21T14:02:59Z INFO device.log Completing delayed writeback for filter_alarm_pressure_status +2025-08-21T14:02:59Z INFO device.log Completing delayed writeback for filter_differential_pressure_setpoint +2025-08-21T14:02:59Z INFO device.log Completing delayed writeback for filter_differential_pressure_sensor +2025-08-21T14:03:00Z INFO device.log Completing delayed writeback for filter_alarm_pressure_status +2025-08-21T14:03:00Z INFO device.log Completing delayed writeback for filter_differential_pressure_setpoint +2025-08-21T14:03:00Z INFO device.log Completing delayed writeback for filter_differential_pressure_sensor +2025-08-21T14:03:01Z INFO device.log Update state 2025-08-21T14:03:01Z last_config 2025-08-21T14:02:58Z +2025-08-21T14:03:01Z INFO device.log Completing delayed writeback for filter_alarm_pressure_status +2025-08-21T14:03:01Z INFO device.log Completing delayed writeback for filter_differential_pressure_setpoint +2025-08-21T14:03:01Z INFO device.log Completing delayed writeback for filter_differential_pressure_sensor +2025-08-21T14:03:02Z INFO device.log Device AHU-1 config handler +2025-08-21T14:03:02Z INFO device.log 2025-08-21T14:03:02Z received config 2025-08-21T14:03:02Z +2025-08-21T14:03:02Z INFO device.log Applying slow writeback for point filter_alarm_pressure_status with 3s delay +2025-08-21T14:03:02Z INFO device.log Applying slow writeback for point filter_differential_pressure_setpoint with 3s delay +2025-08-21T14:03:02Z INFO device.log Applying slow writeback for point filter_differential_pressure_sensor with 3s delay +2025-08-21T14:03:02Z NOTICE system.config.apply success +2025-08-21T14:03:03Z INFO device.log Update state 2025-08-21T14:03:03Z last_config 2025-08-21T14:03:02Z +2025-08-21T14:03:06Z NOTICE validation.feature.sequence Sequence complete diff --git a/validator/sequences/writeback_operation/events_pointset.attr b/validator/sequences/writeback_operation/events_pointset.attr index f30153aa27..608f5a32a6 100644 --- a/validator/sequences/writeback_operation/events_pointset.attr +++ b/validator/sequences/writeback_operation/events_pointset.attr @@ -3,8 +3,8 @@ "deviceNumId" : "123456789101112", "deviceRegistryId" : "ZZ-TRI-FECTA", "projectId" : "localhost", - "transactionId" : "MP:a1c2eeae", - "publishTime" : "2025-08-21T06:57:01Z", + "transactionId" : "MP:66f951e3", + "publishTime" : "2025-08-21T14:03:04Z", "subFolder" : "pointset", "subType" : "events" } \ No newline at end of file diff --git a/validator/sequences/writeback_operation/events_pointset.json b/validator/sequences/writeback_operation/events_pointset.json index 1472ca8a50..4363a601c2 100644 --- a/validator/sequences/writeback_operation/events_pointset.json +++ b/validator/sequences/writeback_operation/events_pointset.json @@ -1,15 +1,15 @@ { "points" : { "filter_alarm_pressure_status" : { - "present_value" : false + "present_value" : true }, "filter_differential_pressure_setpoint" : { - "present_value" : 98 + "present_value" : 51 }, "filter_differential_pressure_sensor" : { - "present_value" : 8 + "present_value" : 12 } }, - "timestamp" : "2025-08-21T06:57:01Z", + "timestamp" : "2025-08-21T14:03:04Z", "version" : "1.5.3" } \ No newline at end of file diff --git a/validator/sequences/writeback_operation/events_system.attr b/validator/sequences/writeback_operation/events_system.attr index 0ccaceb799..3e97f457f9 100644 --- a/validator/sequences/writeback_operation/events_system.attr +++ b/validator/sequences/writeback_operation/events_system.attr @@ -3,8 +3,8 @@ "deviceNumId" : "123456789101112", "deviceRegistryId" : "ZZ-TRI-FECTA", "projectId" : "localhost", - "transactionId" : "MP:9b90253e", - "publishTime" : "2025-08-21T06:57:01Z", + "transactionId" : "MP:a188b29f", + "publishTime" : "2025-08-21T14:03:04Z", "subFolder" : "system", "subType" : "events" } \ No newline at end of file diff --git a/validator/sequences/writeback_operation/events_system.json b/validator/sequences/writeback_operation/events_system.json index 966ae8825b..b673062629 100644 --- a/validator/sequences/writeback_operation/events_system.json +++ b/validator/sequences/writeback_operation/events_system.json @@ -1,156 +1,256 @@ { - "event_no" : 8, - "last_config" : "2025-08-21T06:57:00Z", + "event_no" : 6, + "last_config" : "2025-08-21T14:03:02Z", "logentries" : [ { - "message" : "Update state 2025-08-21T06:56:53Z last_config 2025-08-21T06:56:51Z", + "message" : "Completing delayed writeback for filter_alarm_pressure_status", "category" : "device.log", - "timestamp" : "2025-08-21T06:56:53Z", + "timestamp" : "2025-08-21T14:02:54Z", "level" : 200 }, { - "message" : "Completing delayed writeback for filter_alarm_pressure_status", + "message" : "Completing delayed writeback for filter_differential_pressure_sensor", "category" : "device.log", - "timestamp" : "2025-08-21T06:56:54Z", + "timestamp" : "2025-08-21T14:02:54Z", "level" : 200 }, { - "message" : "Completing delayed writeback for filter_differential_pressure_setpoint", + "message" : "Update state 2025-08-21T14:02:55Z last_config 2025-08-21T14:02:51Z", "category" : "device.log", - "timestamp" : "2025-08-21T06:56:54Z", + "timestamp" : "2025-08-21T14:02:55Z", "level" : 200 }, { - "message" : "Completing delayed writeback for filter_differential_pressure_sensor", + "message" : "Device AHU-1 config handler", "category" : "device.log", - "timestamp" : "2025-08-21T06:56:54Z", + "timestamp" : "2025-08-21T14:02:55Z", "level" : 200 }, { - "message" : "Update state 2025-08-21T06:56:55Z last_config 2025-08-21T06:56:51Z", + "message" : "2025-08-21T14:02:55Z received config 2025-08-21T14:02:55Z", "category" : "device.log", - "timestamp" : "2025-08-21T06:56:55Z", + "timestamp" : "2025-08-21T14:02:55Z", "level" : 200 + }, { + "message" : "Applying slow writeback for point filter_alarm_pressure_status with 3s delay", + "category" : "device.log", + "timestamp" : "2025-08-21T14:02:55Z", + "level" : 200 + }, { + "message" : "Applying slow writeback for point filter_differential_pressure_setpoint with 3s delay", + "category" : "device.log", + "timestamp" : "2025-08-21T14:02:55Z", + "level" : 200 + }, { + "message" : "Applying slow writeback for point filter_differential_pressure_sensor with 3s delay", + "category" : "device.log", + "timestamp" : "2025-08-21T14:02:55Z", + "level" : 200 + }, { + "message" : "success", + "category" : "system.config.apply", + "timestamp" : "2025-08-21T14:02:55Z", + "level" : 300 }, { "message" : "Device AHU-1 config handler", "category" : "device.log", - "timestamp" : "2025-08-21T06:56:55Z", + "timestamp" : "2025-08-21T14:02:56Z", "level" : 200 }, { - "message" : "2025-08-21T06:56:55Z received config 2025-08-21T06:56:55Z", + "message" : "2025-08-21T14:02:56Z received config 2025-08-21T14:02:56Z", "category" : "device.log", - "timestamp" : "2025-08-21T06:56:55Z", + "timestamp" : "2025-08-21T14:02:56Z", "level" : 200 }, { "message" : "Applying slow writeback for point filter_alarm_pressure_status with 3s delay", "category" : "device.log", - "timestamp" : "2025-08-21T06:56:55Z", + "timestamp" : "2025-08-21T14:02:56Z", "level" : 200 }, { "message" : "Applying slow writeback for point filter_differential_pressure_setpoint with 3s delay", "category" : "device.log", - "timestamp" : "2025-08-21T06:56:55Z", + "timestamp" : "2025-08-21T14:02:56Z", "level" : 200 }, { "message" : "Applying slow writeback for point filter_differential_pressure_sensor with 3s delay", "category" : "device.log", - "timestamp" : "2025-08-21T06:56:55Z", + "timestamp" : "2025-08-21T14:02:56Z", "level" : 200 }, { "message" : "success", "category" : "system.config.apply", - "timestamp" : "2025-08-21T06:56:55Z", + "timestamp" : "2025-08-21T14:02:56Z", "level" : 300 }, { - "message" : "Update state 2025-08-21T06:56:57Z last_config 2025-08-21T06:56:55Z", + "message" : "Update state 2025-08-21T14:02:57Z last_config 2025-08-21T14:02:56Z", "category" : "device.log", - "timestamp" : "2025-08-21T06:56:57Z", + "timestamp" : "2025-08-21T14:02:57Z", "level" : 200 }, { - "message" : "Completing delayed writeback for filter_alarm_pressure_status", + "message" : "Device AHU-1 config handler", "category" : "device.log", - "timestamp" : "2025-08-21T06:56:58Z", + "timestamp" : "2025-08-21T14:02:57Z", "level" : 200 }, { - "message" : "Completing delayed writeback for filter_differential_pressure_setpoint", + "message" : "2025-08-21T14:02:57Z received config 2025-08-21T14:02:57Z", "category" : "device.log", - "timestamp" : "2025-08-21T06:56:58Z", + "timestamp" : "2025-08-21T14:02:57Z", "level" : 200 }, { - "message" : "Completing delayed writeback for filter_differential_pressure_sensor", + "message" : "Applying slow writeback for point filter_alarm_pressure_status with 3s delay", + "category" : "device.log", + "timestamp" : "2025-08-21T14:02:57Z", + "level" : 200 + }, { + "message" : "Applying slow writeback for point filter_differential_pressure_setpoint with 3s delay", + "category" : "device.log", + "timestamp" : "2025-08-21T14:02:57Z", + "level" : 200 + }, { + "message" : "Applying slow writeback for point filter_differential_pressure_sensor with 3s delay", + "category" : "device.log", + "timestamp" : "2025-08-21T14:02:57Z", + "level" : 200 + }, { + "message" : "success", + "category" : "system.config.apply", + "timestamp" : "2025-08-21T14:02:57Z", + "level" : 300 + }, { + "message" : "Completing delayed writeback for filter_alarm_pressure_status", + "category" : "device.log", + "timestamp" : "2025-08-21T14:02:58Z", + "level" : 200 + }, { + "message" : "Completing delayed writeback for filter_differential_pressure_setpoint", "category" : "device.log", - "timestamp" : "2025-08-21T06:56:58Z", + "timestamp" : "2025-08-21T14:02:58Z", "level" : 200 }, { - "message" : "Update state 2025-08-21T06:56:59Z last_config 2025-08-21T06:56:55Z", + "message" : "Completing delayed writeback for filter_differential_pressure_sensor", "category" : "device.log", - "timestamp" : "2025-08-21T06:56:59Z", + "timestamp" : "2025-08-21T14:02:58Z", "level" : 200 }, { "message" : "Device AHU-1 config handler", "category" : "device.log", - "timestamp" : "2025-08-21T06:56:59Z", + "timestamp" : "2025-08-21T14:02:58Z", "level" : 200 }, { - "message" : "2025-08-21T06:56:59Z received config 2025-08-21T06:56:59Z", + "message" : "2025-08-21T14:02:58Z received config 2025-08-21T14:02:58Z", "category" : "device.log", - "timestamp" : "2025-08-21T06:56:59Z", + "timestamp" : "2025-08-21T14:02:58Z", "level" : 200 }, { "message" : "Applying slow writeback for point filter_alarm_pressure_status with 3s delay", "category" : "device.log", - "timestamp" : "2025-08-21T06:56:59Z", + "timestamp" : "2025-08-21T14:02:58Z", "level" : 200 }, { "message" : "Applying slow writeback for point filter_differential_pressure_setpoint with 3s delay", "category" : "device.log", - "timestamp" : "2025-08-21T06:56:59Z", + "timestamp" : "2025-08-21T14:02:58Z", "level" : 200 }, { "message" : "Applying slow writeback for point filter_differential_pressure_sensor with 3s delay", "category" : "device.log", - "timestamp" : "2025-08-21T06:56:59Z", + "timestamp" : "2025-08-21T14:02:58Z", "level" : 200 }, { "message" : "success", "category" : "system.config.apply", - "timestamp" : "2025-08-21T06:56:59Z", + "timestamp" : "2025-08-21T14:02:58Z", "level" : 300 + }, { + "message" : "Update state 2025-08-21T14:02:59Z last_config 2025-08-21T14:02:58Z", + "category" : "device.log", + "timestamp" : "2025-08-21T14:02:59Z", + "level" : 200 + }, { + "message" : "Completing delayed writeback for filter_alarm_pressure_status", + "category" : "device.log", + "timestamp" : "2025-08-21T14:02:59Z", + "level" : 200 + }, { + "message" : "Completing delayed writeback for filter_differential_pressure_setpoint", + "category" : "device.log", + "timestamp" : "2025-08-21T14:02:59Z", + "level" : 200 + }, { + "message" : "Completing delayed writeback for filter_differential_pressure_sensor", + "category" : "device.log", + "timestamp" : "2025-08-21T14:02:59Z", + "level" : 200 + }, { + "message" : "Completing delayed writeback for filter_alarm_pressure_status", + "category" : "device.log", + "timestamp" : "2025-08-21T14:03:00Z", + "level" : 200 + }, { + "message" : "Completing delayed writeback for filter_differential_pressure_setpoint", + "category" : "device.log", + "timestamp" : "2025-08-21T14:03:00Z", + "level" : 200 + }, { + "message" : "Completing delayed writeback for filter_differential_pressure_sensor", + "category" : "device.log", + "timestamp" : "2025-08-21T14:03:00Z", + "level" : 200 + }, { + "message" : "Update state 2025-08-21T14:03:01Z last_config 2025-08-21T14:02:58Z", + "category" : "device.log", + "timestamp" : "2025-08-21T14:03:01Z", + "level" : 200 + }, { + "message" : "Completing delayed writeback for filter_alarm_pressure_status", + "category" : "device.log", + "timestamp" : "2025-08-21T14:03:01Z", + "level" : 200 + }, { + "message" : "Completing delayed writeback for filter_differential_pressure_setpoint", + "category" : "device.log", + "timestamp" : "2025-08-21T14:03:01Z", + "level" : 200 + }, { + "message" : "Completing delayed writeback for filter_differential_pressure_sensor", + "category" : "device.log", + "timestamp" : "2025-08-21T14:03:01Z", + "level" : 200 }, { "message" : "Device AHU-1 config handler", "category" : "device.log", - "timestamp" : "2025-08-21T06:57:00Z", + "timestamp" : "2025-08-21T14:03:02Z", "level" : 200 }, { - "message" : "2025-08-21T06:57:00Z received config 2025-08-21T06:57:00Z", + "message" : "2025-08-21T14:03:02Z received config 2025-08-21T14:03:02Z", "category" : "device.log", - "timestamp" : "2025-08-21T06:57:00Z", + "timestamp" : "2025-08-21T14:03:02Z", "level" : 200 }, { "message" : "Applying slow writeback for point filter_alarm_pressure_status with 3s delay", "category" : "device.log", - "timestamp" : "2025-08-21T06:57:00Z", + "timestamp" : "2025-08-21T14:03:02Z", "level" : 200 }, { "message" : "Applying slow writeback for point filter_differential_pressure_setpoint with 3s delay", "category" : "device.log", - "timestamp" : "2025-08-21T06:57:00Z", + "timestamp" : "2025-08-21T14:03:02Z", "level" : 200 }, { "message" : "Applying slow writeback for point filter_differential_pressure_sensor with 3s delay", "category" : "device.log", - "timestamp" : "2025-08-21T06:57:00Z", + "timestamp" : "2025-08-21T14:03:02Z", "level" : 200 }, { "message" : "success", "category" : "system.config.apply", - "timestamp" : "2025-08-21T06:57:00Z", + "timestamp" : "2025-08-21T14:03:02Z", "level" : 300 }, { - "message" : "Update state 2025-08-21T06:57:01Z last_config 2025-08-21T06:57:00Z", + "message" : "Update state 2025-08-21T14:03:03Z last_config 2025-08-21T14:03:02Z", "category" : "device.log", - "timestamp" : "2025-08-21T06:57:01Z", + "timestamp" : "2025-08-21T14:03:03Z", "level" : 200 } ], "metrics" : { "mem_total_mb" : 112.0, - "mem_free_mb" : 36.660736083984375 + "mem_free_mb" : 82.58006286621094 }, - "timestamp" : "2025-08-21T06:57:01Z", + "timestamp" : "2025-08-21T14:03:04Z", "version" : "1.5.3" } \ No newline at end of file diff --git a/validator/sequences/writeback_operation/local_system.json b/validator/sequences/writeback_operation/local_system.json index 15107ce14e..bb0932b749 100644 --- a/validator/sequences/writeback_operation/local_system.json +++ b/validator/sequences/writeback_operation/local_system.json @@ -2,7 +2,7 @@ "min_loglevel" : 200, "metrics_rate_sec" : 10, "operation" : { - "last_start" : "2025-08-21T06:55:44Z" + "last_start" : "2025-08-21T14:02:13Z" }, "testing" : { "sequence_name" : "writeback_operation" diff --git a/validator/sequences/writeback_operation/local_update.json b/validator/sequences/writeback_operation/local_update.json index 540899e78e..8cff1d3855 100644 --- a/validator/sequences/writeback_operation/local_update.json +++ b/validator/sequences/writeback_operation/local_update.json @@ -1,11 +1,11 @@ { - "timestamp" : "2025-08-21T06:56:51Z", + "timestamp" : "2025-08-21T14:02:47Z", "version" : "@@@cloud udmi version###1.5.1-265-gf6769c13-dirty", "system" : { "min_loglevel" : 200, "metrics_rate_sec" : 10, "operation" : { - "last_start" : "2025-08-21T06:55:44Z" + "last_start" : "2025-08-21T14:02:13Z" }, "testing" : { "sequence_name" : "writeback_operation" diff --git a/validator/sequences/writeback_operation/sequence.log b/validator/sequences/writeback_operation/sequence.log index 24d4ab768d..b2e8007522 100644 --- a/validator/sequences/writeback_operation/sequence.log +++ b/validator/sequences/writeback_operation/sequence.log @@ -1,1568 +1,1597 @@ -2025-08-21T06:56:39Z NOTICE Starting test writeback_operation ################################ -2025-08-21T06:56:39Z INFO Stage start waiting for starting test wrapper at @0s -2025-08-21T06:56:47Z DEBUG Clear configTransactions and reset device config -2025-08-21T06:56:47Z TRACE Suppressing exception: java.lang.NullPointerException: Cannot read field "system" because "this.deviceState" is null, at com.google.daq.mqtt.sequencer.SequenceBase.lambda$resetDeviceConfig$13(SequenceBase.java:788) -2025-08-21T06:56:47Z DEBUG Configuring device last_start to be 1970-01-01T00:01:13Z -2025-08-21T06:56:47Z DEBUG Set last_start changed true, last_start 1970-01-01T00:01:13Z -2025-08-21T06:56:47Z DEBUG Set extraFieldChanged false because extra_field null -2025-08-21T06:56:47Z DEBUG Allowing device state change (everything) -2025-08-21T06:56:47Z DEBUG Starting reset_config full reset true -2025-08-21T06:56:47Z DEBUG Clear configTransactions and reset device config -2025-08-21T06:56:47Z TRACE Suppressing exception: java.lang.NullPointerException: Cannot read field "system" because "this.deviceState" is null, at com.google.daq.mqtt.sequencer.SequenceBase.lambda$resetDeviceConfig$13(SequenceBase.java:788) -2025-08-21T06:56:47Z DEBUG Configuring device last_start to be 1970-01-01T00:01:13Z -2025-08-21T06:56:47Z DEBUG Set last_start changed true, last_start 1970-01-01T00:01:13Z -2025-08-21T06:56:47Z DEBUG Set extraFieldChanged false because extra_field null -2025-08-21T06:56:47Z DEBUG Set extraFieldChanged true because extra_field reset_config -2025-08-21T06:56:47Z DEBUG Clear configTransactions and reset device config -2025-08-21T06:56:47Z TRACE Suppressing exception: java.lang.NullPointerException: Cannot read field "system" because "this.deviceState" is null, at com.google.daq.mqtt.sequencer.SequenceBase.lambda$resetDeviceConfig$13(SequenceBase.java:788) -2025-08-21T06:56:47Z DEBUG Configuring device last_start to be 1970-01-01T00:01:13Z -2025-08-21T06:56:47Z DEBUG Set last_start changed true, last_start 1970-01-01T00:01:13Z -2025-08-21T06:56:47Z DEBUG Set extraFieldChanged true because extra_field null -2025-08-21T06:56:47Z TRACE Suppressing exception: java.lang.NullPointerException: Cannot read field "timestamp" because "this.deviceState" is null, at com.google.daq.mqtt.sequencer.SequenceBase.lambda$ensureStateConfigHoldoff$48(SequenceBase.java:1404) -2025-08-21T06:56:47Z DEBUG Delay from lastConfigApplied 2025-08-21T06:56:39.087632192Z is -6052ms -2025-08-21T06:56:47Z TRACE Updated check config_update: true -2025-08-21T06:56:47Z DEBUG Update config_update, adding configTransaction RC:3109d1.00000004 -2025-08-21T06:56:47Z TRACE Suppressing exception: java.lang.NullPointerException: Cannot read field "system" because "this.deviceState" is null, at com.google.daq.mqtt.sequencer.SequenceBase.lambda$configIsPending$105(SequenceBase.java:2247) -2025-08-21T06:56:47Z TRACE Suppressing exception: java.lang.NullPointerException: Cannot read field "system" because "this.deviceState" is null, at com.google.daq.mqtt.sequencer.SequenceBase.lambda$configIsPending$107(SequenceBase.java:2251) -2025-08-21T06:56:47Z TRACE Suppressing exception: java.lang.NullPointerException: Cannot read field "timestamp" because "this.deviceState" is null, at com.google.daq.mqtt.sequencer.SequenceBase.lambda$configIsPending$109(SequenceBase.java:2258) -2025-08-21T06:56:47Z TRACE Suppressing exception: java.lang.NullPointerException: Cannot read field "system" because "this.deviceState" is null, at com.google.daq.mqtt.sequencer.SequenceBase.lambda$configIsPending$105(SequenceBase.java:2247) -2025-08-21T06:56:47Z TRACE Suppressing exception: java.lang.NullPointerException: Cannot read field "system" because "this.deviceState" is null, at com.google.daq.mqtt.sequencer.SequenceBase.lambda$configIsPending$107(SequenceBase.java:2251) -2025-08-21T06:56:47Z TRACE Suppressing exception: java.lang.NullPointerException: Cannot read field "timestamp" because "this.deviceState" is null, at com.google.daq.mqtt.sequencer.SequenceBase.lambda$configIsPending$109(SequenceBase.java:2258) -2025-08-21T06:56:47Z DEBUG Using pre-config state timestamp 1970-01-01T00:00:00Z -2025-08-21T06:56:47Z DEBUG Update lastConfigIssued 2025-08-21T06:56:47Z, because soft reset -2025-08-21T06:56:47Z TRACE Stage suspend waiting for starting test wrapper at @8s -2025-08-21T06:56:47Z INFO Stage start waiting for config update synchronized at @8s -2025-08-21T06:56:47Z DEBUG Received command AHU-1/state/validation as RC:3109d1.00000002 -2025-08-21T06:56:47Z TRACE Received state_validation: { -2025-08-21T06:56:47Z TRACE Received state_validation: "operation" : "REPLY" -2025-08-21T06:56:47Z TRACE Received state_validation: } -2025-08-21T06:56:47Z DEBUG Handling device message state_validation RC:3109d1.00000002 -2025-08-21T06:56:47Z TRACE Ignoring partial state update -2025-08-21T06:56:47Z TRACE Suppressing exception: java.lang.NullPointerException: Cannot read field "system" because "this.deviceState" is null, at com.google.daq.mqtt.sequencer.SequenceBase.lambda$configIsPending$105(SequenceBase.java:2247) -2025-08-21T06:56:47Z TRACE Suppressing exception: java.lang.NullPointerException: Cannot read field "system" because "this.deviceState" is null, at com.google.daq.mqtt.sequencer.SequenceBase.lambda$configIsPending$107(SequenceBase.java:2251) -2025-08-21T06:56:47Z TRACE Suppressing exception: java.lang.NullPointerException: Cannot read field "timestamp" because "this.deviceState" is null, at com.google.daq.mqtt.sequencer.SequenceBase.lambda$configIsPending$109(SequenceBase.java:2258) -2025-08-21T06:56:47Z DEBUG Received command AHU-1/state/validation as RC:3109d1.00000003 -2025-08-21T06:56:47Z TRACE Received state_validation: { -2025-08-21T06:56:47Z TRACE Received state_validation: "operation" : "REPLY" -2025-08-21T06:56:47Z TRACE Received state_validation: } -2025-08-21T06:56:47Z DEBUG Handling device message state_validation RC:3109d1.00000003 -2025-08-21T06:56:47Z TRACE Ignoring partial state update -2025-08-21T06:56:47Z TRACE Suppressing exception: java.lang.NullPointerException: Cannot read field "system" because "this.deviceState" is null, at com.google.daq.mqtt.sequencer.SequenceBase.lambda$configIsPending$105(SequenceBase.java:2247) -2025-08-21T06:56:47Z TRACE Suppressing exception: java.lang.NullPointerException: Cannot read field "system" because "this.deviceState" is null, at com.google.daq.mqtt.sequencer.SequenceBase.lambda$configIsPending$107(SequenceBase.java:2251) -2025-08-21T06:56:47Z TRACE Suppressing exception: java.lang.NullPointerException: Cannot read field "timestamp" because "this.deviceState" is null, at com.google.daq.mqtt.sequencer.SequenceBase.lambda$configIsPending$109(SequenceBase.java:2258) -2025-08-21T06:56:47Z DEBUG Received command AHU-1/events/system as MP:655a6cc7 -2025-08-21T06:56:47Z DEBUG Received events_system (no logs) -2025-08-21T06:56:47Z DEBUG Handling device message events_system MP:655a6cc7 -2025-08-21T06:56:47Z DEBUG Capturing AHU-1 message events_system -2025-08-21T06:56:47Z DEBUG Received command AHU-1/events/pointset as MP:a2d85f0c -2025-08-21T06:56:47Z TRACE Received events_pointset: { -2025-08-21T06:56:47Z TRACE Received events_pointset: "points" : { -2025-08-21T06:56:47Z TRACE Received events_pointset: "filter_alarm_pressure_status" : { -2025-08-21T06:56:47Z TRACE Received events_pointset: "present_value" : true -2025-08-21T06:56:47Z TRACE Received events_pointset: }, -2025-08-21T06:56:47Z TRACE Received events_pointset: "filter_differential_pressure_setpoint" : { -2025-08-21T06:56:47Z TRACE Received events_pointset: "present_value" : 60 -2025-08-21T06:56:47Z TRACE Received events_pointset: }, -2025-08-21T06:56:47Z TRACE Received events_pointset: "filter_differential_pressure_sensor" : { -2025-08-21T06:56:47Z TRACE Received events_pointset: "present_value" : 9 -2025-08-21T06:56:47Z TRACE Received events_pointset: } -2025-08-21T06:56:47Z TRACE Received events_pointset: }, -2025-08-21T06:56:47Z TRACE Received events_pointset: "timestamp" : "2025-08-21T06:56:41Z", -2025-08-21T06:56:47Z TRACE Received events_pointset: "version" : "1.5.3" -2025-08-21T06:56:47Z TRACE Received events_pointset: } -2025-08-21T06:56:47Z DEBUG Handling device message events_pointset MP:a2d85f0c -2025-08-21T06:56:47Z DEBUG Capturing AHU-1 message events_pointset -2025-08-21T06:56:47Z TRACE Suppressing exception: java.lang.NullPointerException: Cannot read field "system" because "this.deviceState" is null, at com.google.daq.mqtt.sequencer.SequenceBase.lambda$configIsPending$105(SequenceBase.java:2247) -2025-08-21T06:56:47Z TRACE Suppressing exception: java.lang.NullPointerException: Cannot read field "system" because "this.deviceState" is null, at com.google.daq.mqtt.sequencer.SequenceBase.lambda$configIsPending$107(SequenceBase.java:2251) -2025-08-21T06:56:47Z TRACE Suppressing exception: java.lang.NullPointerException: Cannot read field "timestamp" because "this.deviceState" is null, at com.google.daq.mqtt.sequencer.SequenceBase.lambda$configIsPending$109(SequenceBase.java:2258) -2025-08-21T06:56:48Z DEBUG Received command AHU-1/state/update as MP:453746c5 -2025-08-21T06:56:48Z DEBUG Received state_update -2025-08-21T06:56:48Z DEBUG Handling update message state_update MP:453746c5 -2025-08-21T06:56:48Z DEBUG Capturing AHU-1 message state_update -2025-08-21T06:56:48Z DEBUG Updated state after 1s 2025-08-21T06:56:47Z MP:453746c5 -2025-08-21T06:56:48Z INFO Initial state #001: { -2025-08-21T06:56:48Z INFO Initial state #001: "timestamp" : "2025-08-21T06:56:47Z", -2025-08-21T06:56:48Z INFO Initial state #001: "version" : "1.5.3", -2025-08-21T06:56:48Z INFO Initial state #001: "system" : { -2025-08-21T06:56:48Z INFO Initial state #001: "last_config" : "2025-08-21T06:54:08Z", -2025-08-21T06:56:48Z INFO Initial state #001: "operation" : { -2025-08-21T06:56:48Z INFO Initial state #001: "operational" : true, -2025-08-21T06:56:48Z INFO Initial state #001: "last_start" : "2025-08-21T06:55:44Z", -2025-08-21T06:56:48Z INFO Initial state #001: "restart_count" : 1, -2025-08-21T06:56:48Z INFO Initial state #001: "mode" : "initial" -2025-08-21T06:56:48Z INFO Initial state #001: }, -2025-08-21T06:56:48Z INFO Initial state #001: "serial_no" : "742132", -2025-08-21T06:56:48Z INFO Initial state #001: "hardware" : { -2025-08-21T06:56:48Z INFO Initial state #001: "make" : "BOS", -2025-08-21T06:56:48Z INFO Initial state #001: "model" : "pubber" -2025-08-21T06:56:48Z INFO Initial state #001: }, -2025-08-21T06:56:48Z INFO Initial state #001: "software" : { -2025-08-21T06:56:48Z INFO Initial state #001: "firmware" : "v1" -2025-08-21T06:56:48Z INFO Initial state #001: }, -2025-08-21T06:56:48Z INFO Initial state #001: "status" : { -2025-08-21T06:56:48Z INFO Initial state #001: "message" : "success", -2025-08-21T06:56:48Z INFO Initial state #001: "category" : "system.config.parse", -2025-08-21T06:56:48Z INFO Initial state #001: "timestamp" : "2025-08-21T06:56:47Z", -2025-08-21T06:56:48Z INFO Initial state #001: "level" : 100 -2025-08-21T06:56:48Z INFO Initial state #001: } -2025-08-21T06:56:48Z INFO Initial state #001: }, -2025-08-21T06:56:48Z INFO Initial state #001: "discovery" : { -2025-08-21T06:56:48Z INFO Initial state #001: "families" : { } -2025-08-21T06:56:48Z INFO Initial state #001: }, -2025-08-21T06:56:48Z INFO Initial state #001: "localnet" : { -2025-08-21T06:56:48Z INFO Initial state #001: "families" : { -2025-08-21T06:56:48Z INFO Initial state #001: "ether" : { -2025-08-21T06:56:48Z INFO Initial state #001: "addr" : "42:01:ac:10:83:22" -2025-08-21T06:56:48Z INFO Initial state #001: }, -2025-08-21T06:56:48Z INFO Initial state #001: "ipv4" : { -2025-08-21T06:56:48Z INFO Initial state #001: "addr" : "172.16.131.34" -2025-08-21T06:56:48Z INFO Initial state #001: }, -2025-08-21T06:56:48Z INFO Initial state #001: "vendor" : { -2025-08-21T06:56:48Z INFO Initial state #001: "addr" : "28179023" -2025-08-21T06:56:48Z INFO Initial state #001: }, -2025-08-21T06:56:48Z INFO Initial state #001: "bacnet" : { -2025-08-21T06:56:48Z INFO Initial state #001: "addr" : "27312" -2025-08-21T06:56:48Z INFO Initial state #001: } -2025-08-21T06:56:48Z INFO Initial state #001: } -2025-08-21T06:56:48Z INFO Initial state #001: }, -2025-08-21T06:56:48Z INFO Initial state #001: "pointset" : { -2025-08-21T06:56:48Z INFO Initial state #001: "points" : { -2025-08-21T06:56:48Z INFO Initial state #001: "filter_alarm_pressure_status" : { -2025-08-21T06:56:48Z INFO Initial state #001: "units" : "No-units" -2025-08-21T06:56:48Z INFO Initial state #001: }, -2025-08-21T06:56:48Z INFO Initial state #001: "filter_differential_pressure_setpoint" : { -2025-08-21T06:56:48Z INFO Initial state #001: "units" : "Bars", -2025-08-21T06:56:48Z INFO Initial state #001: "value_state" : "applied" -2025-08-21T06:56:48Z INFO Initial state #001: }, -2025-08-21T06:56:48Z INFO Initial state #001: "filter_differential_pressure_sensor" : { -2025-08-21T06:56:48Z INFO Initial state #001: "units" : "Degrees-Celsius" -2025-08-21T06:56:48Z INFO Initial state #001: } -2025-08-21T06:56:48Z INFO Initial state #001: } -2025-08-21T06:56:48Z INFO Initial state #001: } -2025-08-21T06:56:48Z INFO Initial state #001: } -2025-08-21T06:56:48Z NOTICE Received serial number 742132 -2025-08-21T06:56:48Z DEBUG Updated state has last_config 2025-08-21T06:54:08Z (expecting null) -2025-08-21T06:56:48Z DEBUG Detail config update synchronized is now: last_start not synced in config, config transactions not cleared, last_config not synced in state -2025-08-21T06:56:48Z DEBUG Received command AHU-1/config/update as RC:3109d1.00000004 -2025-08-21T06:56:48Z DEBUG Received config_update -2025-08-21T06:56:48Z DEBUG Handling update message config_update RC:3109d1.00000004 -2025-08-21T06:56:48Z DEBUG Removed configTransaction RC:3109d1.00000004 -2025-08-21T06:56:48Z DEBUG Set last_start changed false, last_start 1970-01-01T00:01:13Z -2025-08-21T06:56:48Z DEBUG Updated config 2025-08-21T06:56:47Z RC:3109d1.00000004 -2025-08-21T06:56:48Z INFO Updated config #001: { -2025-08-21T06:56:48Z INFO Updated config #001: "timestamp" : "2025-08-21T06:56:47Z", -2025-08-21T06:56:48Z INFO Updated config #001: "version" : "@@@cloud udmi version###1.5.1-265-gf6769c13-dirty", -2025-08-21T06:56:48Z INFO Updated config #001: "system" : { -2025-08-21T06:56:48Z INFO Updated config #001: "min_loglevel" : 200, -2025-08-21T06:56:48Z INFO Updated config #001: "metrics_rate_sec" : 10, -2025-08-21T06:56:48Z INFO Updated config #001: "operation" : { -2025-08-21T06:56:48Z INFO Updated config #001: "last_start" : "1970-01-01T00:01:13Z" -2025-08-21T06:56:48Z INFO Updated config #001: }, -2025-08-21T06:56:48Z INFO Updated config #001: "testing" : { -2025-08-21T06:56:48Z INFO Updated config #001: "sequence_name" : "writeback_operation" -2025-08-21T06:56:48Z INFO Updated config #001: } -2025-08-21T06:56:48Z INFO Updated config #001: }, -2025-08-21T06:56:48Z INFO Updated config #001: "discovery" : { -2025-08-21T06:56:48Z INFO Updated config #001: "families" : { -2025-08-21T06:56:48Z INFO Updated config #001: "vendor" : { }, -2025-08-21T06:56:48Z INFO Updated config #001: "bacnet" : { } -2025-08-21T06:56:48Z INFO Updated config #001: } -2025-08-21T06:56:48Z INFO Updated config #001: }, -2025-08-21T06:56:48Z INFO Updated config #001: "localnet" : { -2025-08-21T06:56:48Z INFO Updated config #001: "families" : { -2025-08-21T06:56:48Z INFO Updated config #001: "ether" : { }, -2025-08-21T06:56:48Z INFO Updated config #001: "ipv4" : { }, -2025-08-21T06:56:48Z INFO Updated config #001: "vendor" : { }, -2025-08-21T06:56:48Z INFO Updated config #001: "bacnet" : { } -2025-08-21T06:56:48Z INFO Updated config #001: } -2025-08-21T06:56:48Z INFO Updated config #001: }, -2025-08-21T06:56:48Z INFO Updated config #001: "pointset" : { -2025-08-21T06:56:48Z INFO Updated config #001: "points" : { -2025-08-21T06:56:48Z INFO Updated config #001: "filter_differential_pressure_setpoint" : { -2025-08-21T06:56:48Z INFO Updated config #001: "units" : "Bars", -2025-08-21T06:56:48Z INFO Updated config #001: "set_value" : 98 -2025-08-21T06:56:48Z INFO Updated config #001: }, -2025-08-21T06:56:48Z INFO Updated config #001: "filter_alarm_pressure_status" : { -2025-08-21T06:56:48Z INFO Updated config #001: "ref" : "BV11.present_value", -2025-08-21T06:56:48Z INFO Updated config #001: "units" : "No-units" -2025-08-21T06:56:48Z INFO Updated config #001: }, -2025-08-21T06:56:48Z INFO Updated config #001: "filter_differential_pressure_sensor" : { -2025-08-21T06:56:48Z INFO Updated config #001: "ref" : "AV12.present_value", -2025-08-21T06:56:48Z INFO Updated config #001: "units" : "Degrees-Celsius" -2025-08-21T06:56:48Z INFO Updated config #001: } -2025-08-21T06:56:48Z INFO Updated config #001: } -2025-08-21T06:56:48Z INFO Updated config #001: } -2025-08-21T06:56:48Z INFO Updated config #001: } -2025-08-21T06:56:48Z DEBUG Expected last_config now 2025-08-21T06:56:47Z -2025-08-21T06:56:48Z DEBUG Received command AHU-1/config/update as CU:3109d1.00000004 -2025-08-21T06:56:48Z DEBUG Received config_update -2025-08-21T06:56:48Z DEBUG Handling update message config_update CU:3109d1.00000004 -2025-08-21T06:56:48Z DEBUG Ignoring operation reply CU:3109d1.00000004 -2025-08-21T06:56:48Z DEBUG Detail config update synchronized is now: last_start not synced in config, last_config not synced in state -2025-08-21T06:56:48Z DEBUG Received command AHU-1/state/system as MP:453746c5-0 -2025-08-21T06:56:48Z TRACE Received state_system: { -2025-08-21T06:56:48Z TRACE Received state_system: "hardware" : { -2025-08-21T06:56:48Z TRACE Received state_system: "make" : "BOS", -2025-08-21T06:56:48Z TRACE Received state_system: "model" : "pubber" -2025-08-21T06:56:48Z TRACE Received state_system: }, -2025-08-21T06:56:48Z TRACE Received state_system: "last_config" : "2025-08-21T06:54:08Z", -2025-08-21T06:56:48Z TRACE Received state_system: "operation" : { -2025-08-21T06:56:48Z TRACE Received state_system: "operational" : true, -2025-08-21T06:56:48Z TRACE Received state_system: "last_start" : "2025-08-21T06:55:44Z", -2025-08-21T06:56:48Z TRACE Received state_system: "restart_count" : 1, -2025-08-21T06:56:48Z TRACE Received state_system: "mode" : "initial" -2025-08-21T06:56:48Z TRACE Received state_system: }, -2025-08-21T06:56:48Z TRACE Received state_system: "serial_no" : "742132", -2025-08-21T06:56:48Z TRACE Received state_system: "software" : { -2025-08-21T06:56:48Z TRACE Received state_system: "firmware" : "v1" -2025-08-21T06:56:48Z TRACE Received state_system: }, -2025-08-21T06:56:48Z TRACE Received state_system: "status" : { -2025-08-21T06:56:48Z TRACE Received state_system: "message" : "success", -2025-08-21T06:56:48Z TRACE Received state_system: "category" : "system.config.parse", -2025-08-21T06:56:48Z TRACE Received state_system: "timestamp" : "2025-08-21T06:56:47Z", -2025-08-21T06:56:48Z TRACE Received state_system: "level" : 100 -2025-08-21T06:56:48Z TRACE Received state_system: }, -2025-08-21T06:56:48Z TRACE Received state_system: "timestamp" : "2025-08-21T06:56:47Z", -2025-08-21T06:56:48Z TRACE Received state_system: "version" : "1.5.3" -2025-08-21T06:56:48Z TRACE Received state_system: } -2025-08-21T06:56:48Z DEBUG Handling device message state_system MP:453746c5-0 -2025-08-21T06:56:48Z TRACE Ignoring partial state update -2025-08-21T06:56:48Z DEBUG Received command AHU-1/state/discovery as MP:453746c5-1 -2025-08-21T06:56:48Z TRACE Received state_discovery: { -2025-08-21T06:56:48Z TRACE Received state_discovery: "families" : { }, -2025-08-21T06:56:48Z TRACE Received state_discovery: "timestamp" : "2025-08-21T06:56:47Z", -2025-08-21T06:56:48Z TRACE Received state_discovery: "version" : "1.5.3" -2025-08-21T06:56:48Z TRACE Received state_discovery: } -2025-08-21T06:56:48Z DEBUG Handling device message state_discovery MP:453746c5-1 -2025-08-21T06:56:48Z TRACE Ignoring partial state update -2025-08-21T06:56:48Z DEBUG Received command AHU-1/state/localnet as MP:453746c5-2 -2025-08-21T06:56:48Z TRACE Received state_localnet: { -2025-08-21T06:56:48Z TRACE Received state_localnet: "families" : { -2025-08-21T06:56:48Z TRACE Received state_localnet: "ether" : { -2025-08-21T06:56:48Z TRACE Received state_localnet: "addr" : "42:01:ac:10:83:22" -2025-08-21T06:56:48Z TRACE Received state_localnet: }, -2025-08-21T06:56:48Z TRACE Received state_localnet: "ipv4" : { -2025-08-21T06:56:48Z TRACE Received state_localnet: "addr" : "172.16.131.34" -2025-08-21T06:56:48Z TRACE Received state_localnet: }, -2025-08-21T06:56:48Z TRACE Received state_localnet: "vendor" : { -2025-08-21T06:56:48Z TRACE Received state_localnet: "addr" : "28179023" -2025-08-21T06:56:48Z TRACE Received state_localnet: }, -2025-08-21T06:56:48Z TRACE Received state_localnet: "bacnet" : { -2025-08-21T06:56:48Z TRACE Received state_localnet: "addr" : "27312" -2025-08-21T06:56:48Z TRACE Received state_localnet: } -2025-08-21T06:56:48Z TRACE Received state_localnet: }, -2025-08-21T06:56:48Z TRACE Received state_localnet: "timestamp" : "2025-08-21T06:56:47Z", -2025-08-21T06:56:48Z TRACE Received state_localnet: "version" : "1.5.3" -2025-08-21T06:56:48Z TRACE Received state_localnet: } -2025-08-21T06:56:48Z DEBUG Handling device message state_localnet MP:453746c5-2 -2025-08-21T06:56:48Z TRACE Ignoring partial state update -2025-08-21T06:56:48Z DEBUG Received command AHU-1/state/pointset as MP:453746c5-3 -2025-08-21T06:56:48Z TRACE Received state_pointset: { -2025-08-21T06:56:48Z TRACE Received state_pointset: "points" : { -2025-08-21T06:56:48Z TRACE Received state_pointset: "filter_alarm_pressure_status" : { -2025-08-21T06:56:48Z TRACE Received state_pointset: "units" : "No-units" -2025-08-21T06:56:48Z TRACE Received state_pointset: }, -2025-08-21T06:56:48Z TRACE Received state_pointset: "filter_differential_pressure_setpoint" : { -2025-08-21T06:56:48Z TRACE Received state_pointset: "units" : "Bars", -2025-08-21T06:56:48Z TRACE Received state_pointset: "value_state" : "applied" -2025-08-21T06:56:48Z TRACE Received state_pointset: }, -2025-08-21T06:56:48Z TRACE Received state_pointset: "filter_differential_pressure_sensor" : { -2025-08-21T06:56:48Z TRACE Received state_pointset: "units" : "Degrees-Celsius" -2025-08-21T06:56:48Z TRACE Received state_pointset: } -2025-08-21T06:56:48Z TRACE Received state_pointset: }, -2025-08-21T06:56:48Z TRACE Received state_pointset: "timestamp" : "2025-08-21T06:56:47Z", -2025-08-21T06:56:48Z TRACE Received state_pointset: "version" : "1.5.3" -2025-08-21T06:56:48Z TRACE Received state_pointset: } -2025-08-21T06:56:48Z DEBUG Handling device message state_pointset MP:453746c5-3 -2025-08-21T06:56:48Z TRACE Ignoring partial state update -2025-08-21T06:56:48Z DEBUG Received command AHU-1/config/update as MP:453746c5 -2025-08-21T06:56:48Z DEBUG Received config_update -2025-08-21T06:56:48Z DEBUG Handling update message config_update MP:453746c5 -2025-08-21T06:56:48Z DEBUG Set last_start changed true, last_start 2025-08-21T06:55:44Z -2025-08-21T06:56:48Z DEBUG Updated config 2025-08-21T06:56:47Z MP:453746c5 -2025-08-21T06:56:48Z INFO Updated config #002: Changed 0 fields. -2025-08-21T06:56:48Z DEBUG Expected last_config now 2025-08-21T06:56:47Z -2025-08-21T06:56:49Z DEBUG Detail config update synchronized is now: last_config not synced in state -2025-08-21T06:56:49Z DEBUG Received command AHU-1/state/update as MP:0a2c33fb -2025-08-21T06:56:49Z DEBUG Received state_update -2025-08-21T06:56:49Z DEBUG Handling update message state_update MP:0a2c33fb -2025-08-21T06:56:49Z DEBUG Capturing AHU-1 message state_update -2025-08-21T06:56:49Z DEBUG Updated state after 0s 2025-08-21T06:56:49Z MP:0a2c33fb -2025-08-21T06:56:49Z INFO Updated state #002: Changed 7 fields: -2025-08-21T06:56:49Z INFO Updated state #002: Set `system.last_config` = `2025-08-21T06:56:47Z` -2025-08-21T06:56:49Z INFO Updated state #002: Set `system.status.level` = `300` -2025-08-21T06:56:49Z INFO Updated state #002: Set `system.status.category` = `system.config.apply` -2025-08-21T06:56:49Z INFO Updated state #002: Add `pointset.points.filter_alarm_pressure_status.value_state` = `updating` -2025-08-21T06:56:49Z INFO Updated state #002: Set `pointset.points.filter_differential_pressure_setpoint.value_state` = `updating` -2025-08-21T06:56:49Z INFO Updated state #002: Add `pointset.points.filter_differential_pressure_sensor.value_state` = `updating` -2025-08-21T06:56:49Z INFO Updated state #002: Set `timestamp` = `2025-08-21T06:56:49Z` -2025-08-21T06:56:49Z DEBUG Updated state has last_config 2025-08-21T06:56:47Z (expecting 2025-08-21T06:56:47Z) -2025-08-21T06:56:49Z DEBUG Received command AHU-1/state/system as MP:0a2c33fb-0 -2025-08-21T06:56:49Z TRACE Received state_system: { -2025-08-21T06:56:49Z TRACE Received state_system: "hardware" : { -2025-08-21T06:56:49Z TRACE Received state_system: "make" : "BOS", -2025-08-21T06:56:49Z TRACE Received state_system: "model" : "pubber" -2025-08-21T06:56:49Z TRACE Received state_system: }, -2025-08-21T06:56:49Z TRACE Received state_system: "last_config" : "2025-08-21T06:56:47Z", -2025-08-21T06:56:49Z TRACE Received state_system: "operation" : { -2025-08-21T06:56:49Z TRACE Received state_system: "operational" : true, -2025-08-21T06:56:49Z TRACE Received state_system: "last_start" : "2025-08-21T06:55:44Z", -2025-08-21T06:56:49Z TRACE Received state_system: "restart_count" : 1, -2025-08-21T06:56:49Z TRACE Received state_system: "mode" : "initial" -2025-08-21T06:56:49Z TRACE Received state_system: }, -2025-08-21T06:56:49Z TRACE Received state_system: "serial_no" : "742132", -2025-08-21T06:56:49Z TRACE Received state_system: "software" : { -2025-08-21T06:56:49Z TRACE Received state_system: "firmware" : "v1" -2025-08-21T06:56:49Z TRACE Received state_system: }, -2025-08-21T06:56:49Z TRACE Received state_system: "status" : { -2025-08-21T06:56:49Z TRACE Received state_system: "message" : "success", -2025-08-21T06:56:49Z TRACE Received state_system: "category" : "system.config.apply", -2025-08-21T06:56:49Z TRACE Received state_system: "timestamp" : "2025-08-21T06:56:47Z", -2025-08-21T06:56:49Z TRACE Received state_system: "level" : 300 -2025-08-21T06:56:49Z TRACE Received state_system: }, -2025-08-21T06:56:49Z TRACE Received state_system: "timestamp" : "2025-08-21T06:56:49Z", -2025-08-21T06:56:49Z TRACE Received state_system: "version" : "1.5.3" -2025-08-21T06:56:49Z TRACE Received state_system: } -2025-08-21T06:56:49Z DEBUG Handling device message state_system MP:0a2c33fb-0 -2025-08-21T06:56:49Z TRACE Ignoring partial state update -2025-08-21T06:56:49Z DEBUG Detail config update synchronized is now: null -2025-08-21T06:56:49Z DEBUG Stage finished waiting for config update synchronized at @10s after 2s -2025-08-21T06:56:49Z TRACE Stage resume waiting for starting test wrapper at @10s -2025-08-21T06:56:49Z DEBUG Config sync took 2s -2025-08-21T06:56:49Z DEBUG Finished wait for config sync pending: null -2025-08-21T06:56:49Z DEBUG New lastConfigApplied at 2025-08-21T06:56:49Z -2025-08-21T06:56:49Z DEBUG Update config soft reset timestamp 2025-08-21T06:56:47Z -2025-08-21T06:56:49Z TRACE Update config soft reset: Add `discovery` = { "families": { "vendor": { }, "bacnet": { } } } -2025-08-21T06:56:49Z TRACE Update config soft reset: Add `pointset` = { "points": { "filter_differential_pressure_setpoint": { "set_value": `98`, "units": `Bars` }, "filter_alarm_pressure_status": { "ref": `BV11.present_value`, "units": `No-units` }, "filter_differential_pressure_sensor": { "ref": `AV12.present_value`, "units": `Degrees-Celsius` } } } -2025-08-21T06:56:49Z TRACE Update config soft reset: Add `localnet` = { "families": { "ether": { }, "ipv4": { }, "vendor": { }, "bacnet": { } } } -2025-08-21T06:56:49Z TRACE Update config soft reset: Add `timestamp` = `generated timestamp` -2025-08-21T06:56:49Z DEBUG Done with reset_config -2025-08-21T06:56:49Z TRACE Stage suspend waiting for starting test wrapper at @10s -2025-08-21T06:56:49Z INFO Stage start waiting for config update synchronized at @10s -2025-08-21T06:56:49Z DEBUG Received command AHU-1/state/discovery as MP:0a2c33fb-1 -2025-08-21T06:56:49Z TRACE Received state_discovery: { -2025-08-21T06:56:49Z TRACE Received state_discovery: "families" : { }, -2025-08-21T06:56:49Z TRACE Received state_discovery: "timestamp" : "2025-08-21T06:56:49Z", -2025-08-21T06:56:49Z TRACE Received state_discovery: "version" : "1.5.3" -2025-08-21T06:56:49Z TRACE Received state_discovery: } -2025-08-21T06:56:49Z DEBUG Handling device message state_discovery MP:0a2c33fb-1 -2025-08-21T06:56:49Z TRACE Ignoring partial state update -2025-08-21T06:56:49Z DEBUG Received command AHU-1/state/localnet as MP:0a2c33fb-2 -2025-08-21T06:56:49Z TRACE Received state_localnet: { -2025-08-21T06:56:49Z TRACE Received state_localnet: "families" : { -2025-08-21T06:56:49Z TRACE Received state_localnet: "ether" : { -2025-08-21T06:56:49Z TRACE Received state_localnet: "addr" : "42:01:ac:10:83:22" -2025-08-21T06:56:49Z TRACE Received state_localnet: }, -2025-08-21T06:56:49Z TRACE Received state_localnet: "ipv4" : { -2025-08-21T06:56:49Z TRACE Received state_localnet: "addr" : "172.16.131.34" -2025-08-21T06:56:49Z TRACE Received state_localnet: }, -2025-08-21T06:56:49Z TRACE Received state_localnet: "vendor" : { -2025-08-21T06:56:49Z TRACE Received state_localnet: "addr" : "28179023" -2025-08-21T06:56:49Z TRACE Received state_localnet: }, -2025-08-21T06:56:49Z TRACE Received state_localnet: "bacnet" : { -2025-08-21T06:56:49Z TRACE Received state_localnet: "addr" : "27312" -2025-08-21T06:56:49Z TRACE Received state_localnet: } -2025-08-21T06:56:49Z TRACE Received state_localnet: }, -2025-08-21T06:56:49Z TRACE Received state_localnet: "timestamp" : "2025-08-21T06:56:49Z", -2025-08-21T06:56:49Z TRACE Received state_localnet: "version" : "1.5.3" -2025-08-21T06:56:49Z TRACE Received state_localnet: } -2025-08-21T06:56:49Z DEBUG Handling device message state_localnet MP:0a2c33fb-2 -2025-08-21T06:56:49Z TRACE Ignoring partial state update -2025-08-21T06:56:49Z DEBUG Stage finished waiting for config update synchronized at @10s after 0s -2025-08-21T06:56:49Z TRACE Stage resume waiting for starting test wrapper at @10s -2025-08-21T06:56:49Z DEBUG Config sync took 2s -2025-08-21T06:56:49Z DEBUG Finished wait for config sync pending: null -2025-08-21T06:56:49Z DEBUG Disallowing device state change (everything) -2025-08-21T06:56:49Z DEBUG Delay from lastConfigApplied 2025-08-21T06:56:49.443140649Z is 1444ms -2025-08-21T06:56:49Z DEBUG Rate-limiting config by 1444ms -2025-08-21T06:56:51Z TRACE Updated check config_update: true -2025-08-21T06:56:51Z DEBUG Update config_update, adding configTransaction RC:3109d1.00000005 -2025-08-21T06:56:51Z DEBUG Using pre-config state timestamp 2025-08-21T06:56:49Z -2025-08-21T06:56:51Z DEBUG Update lastConfigIssued 2025-08-21T06:56:51Z, because initial setup -2025-08-21T06:56:51Z TRACE Stage suspend waiting for starting test wrapper at @12s -2025-08-21T06:56:51Z INFO Stage start waiting for config update synchronized at @12s -2025-08-21T06:56:51Z DEBUG Received command AHU-1/state/pointset as MP:0a2c33fb-3 -2025-08-21T06:56:51Z TRACE Received state_pointset: { -2025-08-21T06:56:51Z TRACE Received state_pointset: "points" : { -2025-08-21T06:56:51Z TRACE Received state_pointset: "filter_alarm_pressure_status" : { -2025-08-21T06:56:51Z TRACE Received state_pointset: "units" : "No-units", -2025-08-21T06:56:51Z TRACE Received state_pointset: "value_state" : "updating" -2025-08-21T06:56:51Z TRACE Received state_pointset: }, -2025-08-21T06:56:51Z TRACE Received state_pointset: "filter_differential_pressure_setpoint" : { -2025-08-21T06:56:51Z TRACE Received state_pointset: "units" : "Bars", -2025-08-21T06:56:51Z TRACE Received state_pointset: "value_state" : "updating" -2025-08-21T06:56:51Z TRACE Received state_pointset: }, -2025-08-21T06:56:51Z TRACE Received state_pointset: "filter_differential_pressure_sensor" : { -2025-08-21T06:56:51Z TRACE Received state_pointset: "units" : "Degrees-Celsius", -2025-08-21T06:56:51Z TRACE Received state_pointset: "value_state" : "updating" -2025-08-21T06:56:51Z TRACE Received state_pointset: } -2025-08-21T06:56:51Z TRACE Received state_pointset: }, -2025-08-21T06:56:51Z TRACE Received state_pointset: "timestamp" : "2025-08-21T06:56:49Z", -2025-08-21T06:56:51Z TRACE Received state_pointset: "version" : "1.5.3" -2025-08-21T06:56:51Z TRACE Received state_pointset: } -2025-08-21T06:56:51Z DEBUG Handling device message state_pointset MP:0a2c33fb-3 -2025-08-21T06:56:51Z TRACE Ignoring partial state update -2025-08-21T06:56:51Z DEBUG Received command AHU-1/state/update as MP:127decc2 -2025-08-21T06:56:51Z DEBUG Received state_update -2025-08-21T06:56:51Z DEBUG Handling update message state_update MP:127decc2 -2025-08-21T06:56:51Z DEBUG Capturing AHU-1 message state_update -2025-08-21T06:56:51Z DEBUG Updated state after 0s 2025-08-21T06:56:51Z MP:127decc2 -2025-08-21T06:56:51Z INFO Updated state #003: Changed 4 fields: -2025-08-21T06:56:51Z INFO Updated state #003: Remove `pointset.points.filter_alarm_pressure_status.value_state` -2025-08-21T06:56:51Z INFO Updated state #003: Set `pointset.points.filter_differential_pressure_setpoint.value_state` = `applied` -2025-08-21T06:56:51Z INFO Updated state #003: Remove `pointset.points.filter_differential_pressure_sensor.value_state` -2025-08-21T06:56:51Z INFO Updated state #003: Set `timestamp` = `2025-08-21T06:56:51Z` -2025-08-21T06:56:51Z DEBUG Updated state has last_config 2025-08-21T06:56:47Z (expecting 2025-08-21T06:56:47Z) -2025-08-21T06:56:51Z DEBUG Received command AHU-1/state/system as MP:127decc2-0 -2025-08-21T06:56:51Z TRACE Received state_system: { -2025-08-21T06:56:51Z TRACE Received state_system: "hardware" : { -2025-08-21T06:56:51Z TRACE Received state_system: "make" : "BOS", -2025-08-21T06:56:51Z TRACE Received state_system: "model" : "pubber" -2025-08-21T06:56:51Z TRACE Received state_system: }, -2025-08-21T06:56:51Z TRACE Received state_system: "last_config" : "2025-08-21T06:56:47Z", -2025-08-21T06:56:51Z TRACE Received state_system: "operation" : { -2025-08-21T06:56:51Z TRACE Received state_system: "operational" : true, -2025-08-21T06:56:51Z TRACE Received state_system: "last_start" : "2025-08-21T06:55:44Z", -2025-08-21T06:56:51Z TRACE Received state_system: "restart_count" : 1, -2025-08-21T06:56:51Z TRACE Received state_system: "mode" : "initial" -2025-08-21T06:56:51Z TRACE Received state_system: }, -2025-08-21T06:56:51Z TRACE Received state_system: "serial_no" : "742132", -2025-08-21T06:56:51Z TRACE Received state_system: "software" : { -2025-08-21T06:56:51Z TRACE Received state_system: "firmware" : "v1" -2025-08-21T06:56:51Z TRACE Received state_system: }, -2025-08-21T06:56:51Z TRACE Received state_system: "status" : { -2025-08-21T06:56:51Z TRACE Received state_system: "message" : "success", -2025-08-21T06:56:51Z TRACE Received state_system: "category" : "system.config.apply", -2025-08-21T06:56:51Z TRACE Received state_system: "timestamp" : "2025-08-21T06:56:47Z", -2025-08-21T06:56:51Z TRACE Received state_system: "level" : 300 -2025-08-21T06:56:51Z TRACE Received state_system: }, -2025-08-21T06:56:51Z TRACE Received state_system: "timestamp" : "2025-08-21T06:56:51Z", -2025-08-21T06:56:51Z TRACE Received state_system: "version" : "1.5.3" -2025-08-21T06:56:51Z TRACE Received state_system: } -2025-08-21T06:56:51Z DEBUG Handling device message state_system MP:127decc2-0 -2025-08-21T06:56:51Z TRACE Ignoring partial state update -2025-08-21T06:56:51Z DEBUG Received command AHU-1/state/discovery as MP:127decc2-1 -2025-08-21T06:56:51Z TRACE Received state_discovery: { -2025-08-21T06:56:51Z TRACE Received state_discovery: "families" : { }, -2025-08-21T06:56:51Z TRACE Received state_discovery: "timestamp" : "2025-08-21T06:56:51Z", -2025-08-21T06:56:51Z TRACE Received state_discovery: "version" : "1.5.3" -2025-08-21T06:56:51Z TRACE Received state_discovery: } -2025-08-21T06:56:51Z DEBUG Handling device message state_discovery MP:127decc2-1 -2025-08-21T06:56:51Z TRACE Ignoring partial state update -2025-08-21T06:56:51Z DEBUG Received command AHU-1/state/localnet as MP:127decc2-2 -2025-08-21T06:56:51Z TRACE Received state_localnet: { -2025-08-21T06:56:51Z TRACE Received state_localnet: "families" : { -2025-08-21T06:56:51Z TRACE Received state_localnet: "ether" : { -2025-08-21T06:56:51Z TRACE Received state_localnet: "addr" : "42:01:ac:10:83:22" -2025-08-21T06:56:51Z TRACE Received state_localnet: }, -2025-08-21T06:56:51Z TRACE Received state_localnet: "ipv4" : { -2025-08-21T06:56:51Z TRACE Received state_localnet: "addr" : "172.16.131.34" -2025-08-21T06:56:51Z TRACE Received state_localnet: }, -2025-08-21T06:56:51Z TRACE Received state_localnet: "vendor" : { -2025-08-21T06:56:51Z TRACE Received state_localnet: "addr" : "28179023" -2025-08-21T06:56:51Z TRACE Received state_localnet: }, -2025-08-21T06:56:51Z TRACE Received state_localnet: "bacnet" : { -2025-08-21T06:56:51Z TRACE Received state_localnet: "addr" : "27312" -2025-08-21T06:56:51Z TRACE Received state_localnet: } -2025-08-21T06:56:51Z TRACE Received state_localnet: }, -2025-08-21T06:56:51Z TRACE Received state_localnet: "timestamp" : "2025-08-21T06:56:51Z", -2025-08-21T06:56:51Z TRACE Received state_localnet: "version" : "1.5.3" -2025-08-21T06:56:51Z TRACE Received state_localnet: } -2025-08-21T06:56:51Z DEBUG Handling device message state_localnet MP:127decc2-2 -2025-08-21T06:56:51Z TRACE Ignoring partial state update -2025-08-21T06:56:51Z DEBUG Received command AHU-1/state/pointset as MP:127decc2-3 -2025-08-21T06:56:51Z TRACE Received state_pointset: { -2025-08-21T06:56:51Z TRACE Received state_pointset: "points" : { -2025-08-21T06:56:51Z TRACE Received state_pointset: "filter_alarm_pressure_status" : { -2025-08-21T06:56:51Z TRACE Received state_pointset: "units" : "No-units" -2025-08-21T06:56:51Z TRACE Received state_pointset: }, -2025-08-21T06:56:51Z TRACE Received state_pointset: "filter_differential_pressure_setpoint" : { -2025-08-21T06:56:51Z TRACE Received state_pointset: "units" : "Bars", -2025-08-21T06:56:51Z TRACE Received state_pointset: "value_state" : "applied" -2025-08-21T06:56:51Z TRACE Received state_pointset: }, -2025-08-21T06:56:51Z TRACE Received state_pointset: "filter_differential_pressure_sensor" : { -2025-08-21T06:56:51Z TRACE Received state_pointset: "units" : "Degrees-Celsius" -2025-08-21T06:56:51Z TRACE Received state_pointset: } -2025-08-21T06:56:51Z TRACE Received state_pointset: }, -2025-08-21T06:56:51Z TRACE Received state_pointset: "timestamp" : "2025-08-21T06:56:51Z", -2025-08-21T06:56:51Z TRACE Received state_pointset: "version" : "1.5.3" -2025-08-21T06:56:51Z TRACE Received state_pointset: } -2025-08-21T06:56:51Z DEBUG Handling device message state_pointset MP:127decc2-3 -2025-08-21T06:56:51Z TRACE Ignoring partial state update -2025-08-21T06:56:52Z DEBUG Received command AHU-1/config/update as RC:3109d1.00000005 -2025-08-21T06:56:52Z DEBUG Received config_update -2025-08-21T06:56:52Z DEBUG Handling update message config_update RC:3109d1.00000005 -2025-08-21T06:56:52Z DEBUG Removed configTransaction RC:3109d1.00000005 -2025-08-21T06:56:52Z DEBUG Set last_start changed false, last_start 2025-08-21T06:55:44Z -2025-08-21T06:56:52Z DEBUG Updated config 2025-08-21T06:56:51Z RC:3109d1.00000005 -2025-08-21T06:56:52Z INFO Updated config #003: Changed 0 fields. -2025-08-21T06:56:52Z DEBUG Expected last_config now 2025-08-21T06:56:51Z -2025-08-21T06:56:52Z DEBUG Detail config update synchronized is now: last_config not synced in state -2025-08-21T06:56:52Z DEBUG Received command AHU-1/config/update as CU:3109d1.00000005 -2025-08-21T06:56:52Z DEBUG Received config_update -2025-08-21T06:56:52Z DEBUG Handling update message config_update CU:3109d1.00000005 -2025-08-21T06:56:52Z DEBUG Ignoring operation reply CU:3109d1.00000005 -2025-08-21T06:56:52Z DEBUG Received command AHU-1/events/pointset as MP:a2fdfdcb -2025-08-21T06:56:52Z TRACE Received events_pointset: { -2025-08-21T06:56:52Z TRACE Received events_pointset: "points" : { -2025-08-21T06:56:52Z TRACE Received events_pointset: "filter_alarm_pressure_status" : { -2025-08-21T06:56:52Z TRACE Received events_pointset: "present_value" : false -2025-08-21T06:56:52Z TRACE Received events_pointset: }, -2025-08-21T06:56:52Z TRACE Received events_pointset: "filter_differential_pressure_setpoint" : { -2025-08-21T06:56:52Z TRACE Received events_pointset: "present_value" : 98 -2025-08-21T06:56:52Z TRACE Received events_pointset: }, -2025-08-21T06:56:52Z TRACE Received events_pointset: "filter_differential_pressure_sensor" : { -2025-08-21T06:56:52Z TRACE Received events_pointset: "present_value" : 9 -2025-08-21T06:56:52Z TRACE Received events_pointset: } -2025-08-21T06:56:52Z TRACE Received events_pointset: }, -2025-08-21T06:56:52Z TRACE Received events_pointset: "timestamp" : "2025-08-21T06:56:51Z", -2025-08-21T06:56:52Z TRACE Received events_pointset: "version" : "1.5.3" -2025-08-21T06:56:52Z TRACE Received events_pointset: } -2025-08-21T06:56:52Z DEBUG Handling device message events_pointset MP:a2fdfdcb -2025-08-21T06:56:52Z DEBUG Capturing AHU-1 message events_pointset -2025-08-21T06:56:52Z DEBUG Received command AHU-1/events/system as MP:594cea24 -2025-08-21T06:56:52Z DEBUG Received events_system 2025-08-21T06:56:47Z INFO device.log: Device AHU-1 config handler -2025-08-21T06:56:52Z DEBUG Received events_system 2025-08-21T06:56:47Z INFO device.log: 2025-08-21T06:56:47Z received config 2025-08-21T06:56:47Z -2025-08-21T06:56:52Z DEBUG Received events_system 2025-08-21T06:56:47Z INFO device.log: Applying slow writeback for point filter_alarm_pressure_status with 3s delay -2025-08-21T06:56:52Z DEBUG Received events_system 2025-08-21T06:56:47Z INFO device.log: Applying slow writeback for point filter_differential_pressure_setpoint with 3s delay -2025-08-21T06:56:52Z DEBUG Received events_system 2025-08-21T06:56:47Z INFO device.log: Applying slow writeback for point filter_differential_pressure_sensor with 3s delay -2025-08-21T06:56:52Z DEBUG Received events_system 2025-08-21T06:56:47Z NOTICE system.config.apply: success -2025-08-21T06:56:52Z DEBUG Received events_system 2025-08-21T06:56:47Z INFO device.log: Device AHU-1 config handler -2025-08-21T06:56:52Z DEBUG Received events_system 2025-08-21T06:56:47Z INFO device.log: 2025-08-21T06:56:47Z received config 2025-08-21T06:56:47Z -2025-08-21T06:56:52Z DEBUG Received events_system 2025-08-21T06:56:47Z INFO device.log: Applying slow writeback for point filter_alarm_pressure_status with 3s delay -2025-08-21T06:56:52Z DEBUG Received events_system 2025-08-21T06:56:47Z INFO device.log: Applying slow writeback for point filter_differential_pressure_setpoint with 3s delay -2025-08-21T06:56:52Z DEBUG Received events_system 2025-08-21T06:56:47Z INFO device.log: Applying slow writeback for point filter_differential_pressure_sensor with 3s delay -2025-08-21T06:56:52Z DEBUG Received events_system 2025-08-21T06:56:47Z NOTICE system.config.apply: success -2025-08-21T06:56:52Z DEBUG Received events_system 2025-08-21T06:56:49Z INFO device.log: Update state 2025-08-21T06:56:49Z last_config 2025-08-21T06:56:47Z -2025-08-21T06:56:52Z DEBUG Received events_system 2025-08-21T06:56:50Z INFO device.log: Completing delayed writeback for filter_alarm_pressure_status -2025-08-21T06:56:52Z DEBUG Received events_system 2025-08-21T06:56:50Z INFO device.log: Completing delayed writeback for filter_differential_pressure_setpoint -2025-08-21T06:56:52Z DEBUG Received events_system 2025-08-21T06:56:50Z INFO device.log: Completing delayed writeback for filter_differential_pressure_sensor -2025-08-21T06:56:52Z DEBUG Received events_system 2025-08-21T06:56:50Z INFO device.log: Completing delayed writeback for filter_alarm_pressure_status -2025-08-21T06:56:52Z DEBUG Received events_system 2025-08-21T06:56:50Z INFO device.log: Completing delayed writeback for filter_differential_pressure_setpoint -2025-08-21T06:56:52Z DEBUG Received events_system 2025-08-21T06:56:50Z INFO device.log: Completing delayed writeback for filter_differential_pressure_sensor -2025-08-21T06:56:52Z DEBUG Received events_system 2025-08-21T06:56:51Z INFO device.log: Update state 2025-08-21T06:56:51Z last_config 2025-08-21T06:56:47Z -2025-08-21T06:56:52Z DEBUG Received events_system 2025-08-21T06:56:51Z INFO device.log: Device AHU-1 config handler -2025-08-21T06:56:52Z DEBUG Received events_system 2025-08-21T06:56:51Z INFO device.log: 2025-08-21T06:56:51Z received config 2025-08-21T06:56:51Z -2025-08-21T06:56:52Z DEBUG Received events_system 2025-08-21T06:56:51Z INFO device.log: Applying slow writeback for point filter_alarm_pressure_status with 3s delay -2025-08-21T06:56:52Z DEBUG Received events_system 2025-08-21T06:56:51Z INFO device.log: Applying slow writeback for point filter_differential_pressure_setpoint with 3s delay -2025-08-21T06:56:52Z DEBUG Received events_system 2025-08-21T06:56:51Z INFO device.log: Applying slow writeback for point filter_differential_pressure_sensor with 3s delay -2025-08-21T06:56:52Z DEBUG Received events_system 2025-08-21T06:56:51Z NOTICE system.config.apply: success -2025-08-21T06:56:52Z DEBUG Handling device message events_system MP:594cea24 -2025-08-21T06:56:52Z DEBUG Capturing AHU-1 message events_system -2025-08-21T06:56:53Z DEBUG Received command AHU-1/state/update as MP:af120d02 -2025-08-21T06:56:53Z DEBUG Received state_update -2025-08-21T06:56:53Z DEBUG Handling update message state_update MP:af120d02 -2025-08-21T06:56:53Z DEBUG Capturing AHU-1 message state_update -2025-08-21T06:56:53Z DEBUG Updated state after 0s 2025-08-21T06:56:53Z MP:af120d02 -2025-08-21T06:56:53Z INFO Updated state #004: Changed 6 fields: -2025-08-21T06:56:53Z INFO Updated state #004: Set `system.last_config` = `2025-08-21T06:56:51Z` -2025-08-21T06:56:53Z INFO Updated state #004: Set `system.status.timestamp` = `2025-08-21T06:56:51Z` -2025-08-21T06:56:53Z INFO Updated state #004: Add `pointset.points.filter_alarm_pressure_status.value_state` = `updating` -2025-08-21T06:56:53Z INFO Updated state #004: Set `pointset.points.filter_differential_pressure_setpoint.value_state` = `updating` -2025-08-21T06:56:53Z INFO Updated state #004: Add `pointset.points.filter_differential_pressure_sensor.value_state` = `updating` -2025-08-21T06:56:53Z INFO Updated state #004: Set `timestamp` = `2025-08-21T06:56:53Z` -2025-08-21T06:56:53Z DEBUG Updated state has last_config 2025-08-21T06:56:51Z (expecting 2025-08-21T06:56:51Z) -2025-08-21T06:56:53Z DEBUG Received command AHU-1/state/system as MP:af120d02-0 -2025-08-21T06:56:53Z TRACE Received state_system: { -2025-08-21T06:56:53Z TRACE Received state_system: "hardware" : { -2025-08-21T06:56:53Z TRACE Received state_system: "make" : "BOS", -2025-08-21T06:56:53Z TRACE Received state_system: "model" : "pubber" -2025-08-21T06:56:53Z TRACE Received state_system: }, -2025-08-21T06:56:53Z TRACE Received state_system: "last_config" : "2025-08-21T06:56:51Z", -2025-08-21T06:56:53Z TRACE Received state_system: "operation" : { -2025-08-21T06:56:53Z TRACE Received state_system: "operational" : true, -2025-08-21T06:56:53Z TRACE Received state_system: "last_start" : "2025-08-21T06:55:44Z", -2025-08-21T06:56:53Z TRACE Received state_system: "restart_count" : 1, -2025-08-21T06:56:53Z TRACE Received state_system: "mode" : "initial" -2025-08-21T06:56:53Z TRACE Received state_system: }, -2025-08-21T06:56:53Z TRACE Received state_system: "serial_no" : "742132", -2025-08-21T06:56:53Z TRACE Received state_system: "software" : { -2025-08-21T06:56:53Z TRACE Received state_system: "firmware" : "v1" -2025-08-21T06:56:53Z TRACE Received state_system: }, -2025-08-21T06:56:53Z TRACE Received state_system: "status" : { -2025-08-21T06:56:53Z TRACE Received state_system: "message" : "success", -2025-08-21T06:56:53Z TRACE Received state_system: "category" : "system.config.apply", -2025-08-21T06:56:53Z TRACE Received state_system: "timestamp" : "2025-08-21T06:56:51Z", -2025-08-21T06:56:53Z TRACE Received state_system: "level" : 300 -2025-08-21T06:56:53Z TRACE Received state_system: }, -2025-08-21T06:56:53Z TRACE Received state_system: "timestamp" : "2025-08-21T06:56:53Z", -2025-08-21T06:56:53Z TRACE Received state_system: "version" : "1.5.3" -2025-08-21T06:56:53Z TRACE Received state_system: } -2025-08-21T06:56:53Z DEBUG Handling device message state_system MP:af120d02-0 -2025-08-21T06:56:53Z TRACE Ignoring partial state update -2025-08-21T06:56:53Z DEBUG Detail config update synchronized is now: null -2025-08-21T06:56:53Z DEBUG Stage finished waiting for config update synchronized at @14s after 2s -2025-08-21T06:56:53Z TRACE Stage resume waiting for starting test wrapper at @14s -2025-08-21T06:56:53Z DEBUG Config sync took 2s -2025-08-21T06:56:53Z DEBUG Finished wait for config sync pending: null -2025-08-21T06:56:53Z DEBUG New lastConfigApplied at 2025-08-21T06:56:53Z -2025-08-21T06:56:53Z DEBUG Update config initial setup timestamp 2025-08-21T06:56:51Z -2025-08-21T06:56:53Z DEBUG Stale state cutoff threshold is 2025-08-21T06:56:37Z -2025-08-21T06:56:53Z DEBUG Waiting for device stateTransaction RC:3109d1.00000006 (was null) -2025-08-21T06:56:53Z TRACE Stage suspend waiting for starting test wrapper at @14s -2025-08-21T06:56:53Z INFO Stage start waiting for state query at @14s -2025-08-21T06:56:53Z DEBUG Received command AHU-1/state/discovery as MP:af120d02-1 -2025-08-21T06:56:53Z TRACE Received state_discovery: { -2025-08-21T06:56:53Z TRACE Received state_discovery: "families" : { }, -2025-08-21T06:56:53Z TRACE Received state_discovery: "timestamp" : "2025-08-21T06:56:53Z", -2025-08-21T06:56:53Z TRACE Received state_discovery: "version" : "1.5.3" -2025-08-21T06:56:53Z TRACE Received state_discovery: } -2025-08-21T06:56:53Z DEBUG Handling device message state_discovery MP:af120d02-1 -2025-08-21T06:56:53Z TRACE Ignoring partial state update -2025-08-21T06:56:53Z DEBUG Received command AHU-1/state/localnet as MP:af120d02-2 -2025-08-21T06:56:53Z TRACE Received state_localnet: { -2025-08-21T06:56:53Z TRACE Received state_localnet: "families" : { -2025-08-21T06:56:53Z TRACE Received state_localnet: "ether" : { -2025-08-21T06:56:53Z TRACE Received state_localnet: "addr" : "42:01:ac:10:83:22" -2025-08-21T06:56:53Z TRACE Received state_localnet: }, -2025-08-21T06:56:53Z TRACE Received state_localnet: "ipv4" : { -2025-08-21T06:56:53Z TRACE Received state_localnet: "addr" : "172.16.131.34" -2025-08-21T06:56:53Z TRACE Received state_localnet: }, -2025-08-21T06:56:53Z TRACE Received state_localnet: "vendor" : { -2025-08-21T06:56:53Z TRACE Received state_localnet: "addr" : "28179023" -2025-08-21T06:56:53Z TRACE Received state_localnet: }, -2025-08-21T06:56:53Z TRACE Received state_localnet: "bacnet" : { -2025-08-21T06:56:53Z TRACE Received state_localnet: "addr" : "27312" -2025-08-21T06:56:53Z TRACE Received state_localnet: } -2025-08-21T06:56:53Z TRACE Received state_localnet: }, -2025-08-21T06:56:53Z TRACE Received state_localnet: "timestamp" : "2025-08-21T06:56:53Z", -2025-08-21T06:56:53Z TRACE Received state_localnet: "version" : "1.5.3" -2025-08-21T06:56:53Z TRACE Received state_localnet: } -2025-08-21T06:56:53Z DEBUG Handling device message state_localnet MP:af120d02-2 -2025-08-21T06:56:53Z TRACE Ignoring partial state update -2025-08-21T06:56:53Z DEBUG Received command AHU-1/state/pointset as MP:af120d02-3 -2025-08-21T06:56:53Z TRACE Received state_pointset: { -2025-08-21T06:56:53Z TRACE Received state_pointset: "points" : { -2025-08-21T06:56:53Z TRACE Received state_pointset: "filter_alarm_pressure_status" : { -2025-08-21T06:56:53Z TRACE Received state_pointset: "units" : "No-units", -2025-08-21T06:56:53Z TRACE Received state_pointset: "value_state" : "updating" -2025-08-21T06:56:53Z TRACE Received state_pointset: }, -2025-08-21T06:56:53Z TRACE Received state_pointset: "filter_differential_pressure_setpoint" : { -2025-08-21T06:56:53Z TRACE Received state_pointset: "units" : "Bars", -2025-08-21T06:56:53Z TRACE Received state_pointset: "value_state" : "updating" -2025-08-21T06:56:53Z TRACE Received state_pointset: }, -2025-08-21T06:56:53Z TRACE Received state_pointset: "filter_differential_pressure_sensor" : { -2025-08-21T06:56:53Z TRACE Received state_pointset: "units" : "Degrees-Celsius", -2025-08-21T06:56:53Z TRACE Received state_pointset: "value_state" : "updating" -2025-08-21T06:56:53Z TRACE Received state_pointset: } -2025-08-21T06:56:53Z TRACE Received state_pointset: }, -2025-08-21T06:56:53Z TRACE Received state_pointset: "timestamp" : "2025-08-21T06:56:53Z", -2025-08-21T06:56:53Z TRACE Received state_pointset: "version" : "1.5.3" -2025-08-21T06:56:53Z TRACE Received state_pointset: } -2025-08-21T06:56:53Z DEBUG Handling device message state_pointset MP:af120d02-3 -2025-08-21T06:56:53Z TRACE Ignoring partial state update -2025-08-21T06:56:54Z DEBUG Received command AHU-1/state/update as RC:3109d1.00000006 -2025-08-21T06:56:54Z DEBUG Received state_update -2025-08-21T06:56:54Z DEBUG Handling update message state_update RC:3109d1.00000006 -2025-08-21T06:56:54Z DEBUG Removed stateTransaction RC:3109d1.00000006 -2025-08-21T06:56:54Z DEBUG Capturing AHU-1 message state_update -2025-08-21T06:56:54Z DEBUG Updated state after 1s 2025-08-21T06:56:53Z RC:3109d1.00000006 -2025-08-21T06:56:54Z INFO Updated state #005: Changed 0 fields. -2025-08-21T06:56:54Z DEBUG Updated state has last_config 2025-08-21T06:56:51Z (expecting 2025-08-21T06:56:51Z) -2025-08-21T06:56:54Z DEBUG Stage finished waiting for state query at @15s after 1s -2025-08-21T06:56:54Z TRACE Stage resume waiting for starting test wrapper at @15s -2025-08-21T06:56:54Z TRACE Stage suspend waiting for starting test wrapper at @15s -2025-08-21T06:56:54Z INFO Stage start waiting for initial device state at @15s -2025-08-21T06:56:54Z DEBUG Delay from lastConfigApplied 2025-08-21T06:56:53.495166168Z is 982ms -2025-08-21T06:56:54Z DEBUG Rate-limiting config by 982ms -2025-08-21T06:56:55Z TRACE Updated check config_update: true -2025-08-21T06:56:55Z DEBUG Update config_update, adding configTransaction RC:3109d1.00000007 -2025-08-21T06:56:55Z DEBUG Using pre-config state timestamp 2025-08-21T06:56:53Z -2025-08-21T06:56:55Z DEBUG Update lastConfigIssued 2025-08-21T06:56:55Z, because before initial device state -2025-08-21T06:56:55Z TRACE Stage suspend waiting for initial device state at @16s -2025-08-21T06:56:55Z INFO Stage start waiting for config update synchronized at @16s -2025-08-21T06:56:55Z DEBUG Received command AHU-1/reply/update as RC:3109d1.00000006 -2025-08-21T06:56:55Z DEBUG Received command AHU-1/state/update as MP:210c68f1 -2025-08-21T06:56:55Z DEBUG Received state_update -2025-08-21T06:56:55Z DEBUG Handling update message state_update MP:210c68f1 -2025-08-21T06:56:55Z DEBUG Capturing AHU-1 message state_update -2025-08-21T06:56:55Z DEBUG Updated state after 0s 2025-08-21T06:56:55Z MP:210c68f1 -2025-08-21T06:56:55Z INFO Updated state #006: Changed 4 fields: -2025-08-21T06:56:55Z INFO Updated state #006: Remove `pointset.points.filter_alarm_pressure_status.value_state` -2025-08-21T06:56:55Z INFO Updated state #006: Set `pointset.points.filter_differential_pressure_setpoint.value_state` = `applied` -2025-08-21T06:56:55Z INFO Updated state #006: Remove `pointset.points.filter_differential_pressure_sensor.value_state` -2025-08-21T06:56:55Z INFO Updated state #006: Set `timestamp` = `2025-08-21T06:56:55Z` -2025-08-21T06:56:55Z DEBUG Updated state has last_config 2025-08-21T06:56:51Z (expecting 2025-08-21T06:56:51Z) -2025-08-21T06:56:55Z DEBUG Received command AHU-1/state/system as MP:210c68f1-0 -2025-08-21T06:56:55Z TRACE Received state_system: { -2025-08-21T06:56:55Z TRACE Received state_system: "hardware" : { -2025-08-21T06:56:55Z TRACE Received state_system: "make" : "BOS", -2025-08-21T06:56:55Z TRACE Received state_system: "model" : "pubber" -2025-08-21T06:56:55Z TRACE Received state_system: }, -2025-08-21T06:56:55Z TRACE Received state_system: "last_config" : "2025-08-21T06:56:51Z", -2025-08-21T06:56:55Z TRACE Received state_system: "operation" : { -2025-08-21T06:56:55Z TRACE Received state_system: "operational" : true, -2025-08-21T06:56:55Z TRACE Received state_system: "last_start" : "2025-08-21T06:55:44Z", -2025-08-21T06:56:55Z TRACE Received state_system: "restart_count" : 1, -2025-08-21T06:56:55Z TRACE Received state_system: "mode" : "initial" -2025-08-21T06:56:55Z TRACE Received state_system: }, -2025-08-21T06:56:55Z TRACE Received state_system: "serial_no" : "742132", -2025-08-21T06:56:55Z TRACE Received state_system: "software" : { -2025-08-21T06:56:55Z TRACE Received state_system: "firmware" : "v1" -2025-08-21T06:56:55Z TRACE Received state_system: }, -2025-08-21T06:56:55Z TRACE Received state_system: "status" : { -2025-08-21T06:56:55Z TRACE Received state_system: "message" : "success", -2025-08-21T06:56:55Z TRACE Received state_system: "category" : "system.config.apply", -2025-08-21T06:56:55Z TRACE Received state_system: "timestamp" : "2025-08-21T06:56:51Z", -2025-08-21T06:56:55Z TRACE Received state_system: "level" : 300 -2025-08-21T06:56:55Z TRACE Received state_system: }, -2025-08-21T06:56:55Z TRACE Received state_system: "timestamp" : "2025-08-21T06:56:55Z", -2025-08-21T06:56:55Z TRACE Received state_system: "version" : "1.5.3" -2025-08-21T06:56:55Z TRACE Received state_system: } -2025-08-21T06:56:55Z DEBUG Handling device message state_system MP:210c68f1-0 -2025-08-21T06:56:55Z TRACE Ignoring partial state update -2025-08-21T06:56:55Z DEBUG Received command AHU-1/state/discovery as MP:210c68f1-1 -2025-08-21T06:56:55Z TRACE Received state_discovery: { -2025-08-21T06:56:55Z TRACE Received state_discovery: "families" : { }, -2025-08-21T06:56:55Z TRACE Received state_discovery: "timestamp" : "2025-08-21T06:56:55Z", -2025-08-21T06:56:55Z TRACE Received state_discovery: "version" : "1.5.3" -2025-08-21T06:56:55Z TRACE Received state_discovery: } -2025-08-21T06:56:55Z DEBUG Handling device message state_discovery MP:210c68f1-1 -2025-08-21T06:56:55Z TRACE Ignoring partial state update -2025-08-21T06:56:55Z DEBUG Received command AHU-1/state/localnet as MP:210c68f1-2 -2025-08-21T06:56:55Z TRACE Received state_localnet: { -2025-08-21T06:56:55Z TRACE Received state_localnet: "families" : { -2025-08-21T06:56:55Z TRACE Received state_localnet: "ether" : { -2025-08-21T06:56:55Z TRACE Received state_localnet: "addr" : "42:01:ac:10:83:22" -2025-08-21T06:56:55Z TRACE Received state_localnet: }, -2025-08-21T06:56:55Z TRACE Received state_localnet: "ipv4" : { -2025-08-21T06:56:55Z TRACE Received state_localnet: "addr" : "172.16.131.34" -2025-08-21T06:56:55Z TRACE Received state_localnet: }, -2025-08-21T06:56:55Z TRACE Received state_localnet: "vendor" : { -2025-08-21T06:56:55Z TRACE Received state_localnet: "addr" : "28179023" -2025-08-21T06:56:55Z TRACE Received state_localnet: }, -2025-08-21T06:56:55Z TRACE Received state_localnet: "bacnet" : { -2025-08-21T06:56:55Z TRACE Received state_localnet: "addr" : "27312" -2025-08-21T06:56:55Z TRACE Received state_localnet: } -2025-08-21T06:56:55Z TRACE Received state_localnet: }, -2025-08-21T06:56:55Z TRACE Received state_localnet: "timestamp" : "2025-08-21T06:56:55Z", -2025-08-21T06:56:55Z TRACE Received state_localnet: "version" : "1.5.3" -2025-08-21T06:56:55Z TRACE Received state_localnet: } -2025-08-21T06:56:55Z DEBUG Handling device message state_localnet MP:210c68f1-2 -2025-08-21T06:56:55Z TRACE Ignoring partial state update -2025-08-21T06:56:55Z DEBUG Received command AHU-1/state/pointset as MP:210c68f1-3 -2025-08-21T06:56:55Z TRACE Received state_pointset: { -2025-08-21T06:56:55Z TRACE Received state_pointset: "points" : { -2025-08-21T06:56:55Z TRACE Received state_pointset: "filter_alarm_pressure_status" : { -2025-08-21T06:56:55Z TRACE Received state_pointset: "units" : "No-units" -2025-08-21T06:56:55Z TRACE Received state_pointset: }, -2025-08-21T06:56:55Z TRACE Received state_pointset: "filter_differential_pressure_setpoint" : { -2025-08-21T06:56:55Z TRACE Received state_pointset: "units" : "Bars", -2025-08-21T06:56:55Z TRACE Received state_pointset: "value_state" : "applied" -2025-08-21T06:56:55Z TRACE Received state_pointset: }, -2025-08-21T06:56:55Z TRACE Received state_pointset: "filter_differential_pressure_sensor" : { -2025-08-21T06:56:55Z TRACE Received state_pointset: "units" : "Degrees-Celsius" -2025-08-21T06:56:55Z TRACE Received state_pointset: } -2025-08-21T06:56:55Z TRACE Received state_pointset: }, -2025-08-21T06:56:55Z TRACE Received state_pointset: "timestamp" : "2025-08-21T06:56:55Z", -2025-08-21T06:56:55Z TRACE Received state_pointset: "version" : "1.5.3" -2025-08-21T06:56:55Z TRACE Received state_pointset: } -2025-08-21T06:56:55Z DEBUG Handling device message state_pointset MP:210c68f1-3 -2025-08-21T06:56:55Z TRACE Ignoring partial state update -2025-08-21T06:56:56Z DEBUG Received command AHU-1/config/update as RC:3109d1.00000007 -2025-08-21T06:56:56Z DEBUG Received config_update -2025-08-21T06:56:56Z DEBUG Handling update message config_update RC:3109d1.00000007 -2025-08-21T06:56:56Z DEBUG Removed configTransaction RC:3109d1.00000007 -2025-08-21T06:56:56Z DEBUG Set last_start changed false, last_start 2025-08-21T06:55:44Z -2025-08-21T06:56:56Z DEBUG Updated config 2025-08-21T06:56:55Z RC:3109d1.00000007 -2025-08-21T06:56:56Z INFO Updated config #004: Changed 0 fields. -2025-08-21T06:56:56Z DEBUG Expected last_config now 2025-08-21T06:56:55Z -2025-08-21T06:56:56Z DEBUG Detail config update synchronized is now: last_config not synced in state -2025-08-21T06:56:56Z DEBUG Received command AHU-1/config/update as CU:3109d1.00000007 -2025-08-21T06:56:56Z DEBUG Received config_update -2025-08-21T06:56:56Z DEBUG Handling update message config_update CU:3109d1.00000007 -2025-08-21T06:56:56Z DEBUG Ignoring operation reply CU:3109d1.00000007 -2025-08-21T06:56:57Z DEBUG Received command AHU-1/state/update as MP:ee8a8f53 -2025-08-21T06:56:57Z DEBUG Received state_update -2025-08-21T06:56:57Z DEBUG Handling update message state_update MP:ee8a8f53 -2025-08-21T06:56:57Z DEBUG Capturing AHU-1 message state_update -2025-08-21T06:56:57Z DEBUG Updated state after 0s 2025-08-21T06:56:57Z MP:ee8a8f53 -2025-08-21T06:56:57Z INFO Updated state #007: Changed 6 fields: -2025-08-21T06:56:57Z INFO Updated state #007: Set `system.last_config` = `2025-08-21T06:56:55Z` -2025-08-21T06:56:57Z INFO Updated state #007: Set `system.status.timestamp` = `2025-08-21T06:56:55Z` -2025-08-21T06:56:57Z INFO Updated state #007: Add `pointset.points.filter_alarm_pressure_status.value_state` = `updating` -2025-08-21T06:56:57Z INFO Updated state #007: Set `pointset.points.filter_differential_pressure_setpoint.value_state` = `updating` -2025-08-21T06:56:57Z INFO Updated state #007: Add `pointset.points.filter_differential_pressure_sensor.value_state` = `updating` -2025-08-21T06:56:57Z INFO Updated state #007: Set `timestamp` = `2025-08-21T06:56:57Z` -2025-08-21T06:56:57Z DEBUG Updated state has last_config 2025-08-21T06:56:55Z (expecting 2025-08-21T06:56:55Z) -2025-08-21T06:56:57Z DEBUG Received command AHU-1/state/system as MP:ee8a8f53-0 -2025-08-21T06:56:57Z TRACE Received state_system: { -2025-08-21T06:56:57Z TRACE Received state_system: "hardware" : { -2025-08-21T06:56:57Z TRACE Received state_system: "make" : "BOS", -2025-08-21T06:56:57Z TRACE Received state_system: "model" : "pubber" -2025-08-21T06:56:57Z TRACE Received state_system: }, -2025-08-21T06:56:57Z TRACE Received state_system: "last_config" : "2025-08-21T06:56:55Z", -2025-08-21T06:56:57Z TRACE Received state_system: "operation" : { -2025-08-21T06:56:57Z TRACE Received state_system: "operational" : true, -2025-08-21T06:56:57Z TRACE Received state_system: "last_start" : "2025-08-21T06:55:44Z", -2025-08-21T06:56:57Z TRACE Received state_system: "restart_count" : 1, -2025-08-21T06:56:57Z TRACE Received state_system: "mode" : "initial" -2025-08-21T06:56:57Z TRACE Received state_system: }, -2025-08-21T06:56:57Z TRACE Received state_system: "serial_no" : "742132", -2025-08-21T06:56:57Z TRACE Received state_system: "software" : { -2025-08-21T06:56:57Z TRACE Received state_system: "firmware" : "v1" -2025-08-21T06:56:57Z TRACE Received state_system: }, -2025-08-21T06:56:57Z TRACE Received state_system: "status" : { -2025-08-21T06:56:57Z TRACE Received state_system: "message" : "success", -2025-08-21T06:56:57Z TRACE Received state_system: "category" : "system.config.apply", -2025-08-21T06:56:57Z TRACE Received state_system: "timestamp" : "2025-08-21T06:56:55Z", -2025-08-21T06:56:57Z TRACE Received state_system: "level" : 300 -2025-08-21T06:56:57Z TRACE Received state_system: }, -2025-08-21T06:56:57Z TRACE Received state_system: "timestamp" : "2025-08-21T06:56:57Z", -2025-08-21T06:56:57Z TRACE Received state_system: "version" : "1.5.3" -2025-08-21T06:56:57Z TRACE Received state_system: } -2025-08-21T06:56:57Z DEBUG Handling device message state_system MP:ee8a8f53-0 -2025-08-21T06:56:57Z TRACE Ignoring partial state update -2025-08-21T06:56:57Z DEBUG Detail config update synchronized is now: null -2025-08-21T06:56:57Z DEBUG Stage finished waiting for config update synchronized at @18s after 2s -2025-08-21T06:56:57Z TRACE Stage resume waiting for initial device state at @18s -2025-08-21T06:56:57Z DEBUG Config sync took 2s -2025-08-21T06:56:57Z DEBUG Finished wait for config sync pending: null -2025-08-21T06:56:57Z DEBUG New lastConfigApplied at 2025-08-21T06:56:57Z -2025-08-21T06:56:57Z DEBUG Update config before initial device state timestamp 2025-08-21T06:56:55Z -2025-08-21T06:56:57Z DEBUG Stage finished waiting for initial device state at @18s after 3s -2025-08-21T06:56:57Z TRACE Stage resume waiting for starting test wrapper at @18s -2025-08-21T06:56:57Z DEBUG Device state system status level is now 300 -2025-08-21T06:56:57Z TRACE Stage suspend waiting for starting test wrapper at @18s -2025-08-21T06:56:57Z INFO Stage start waiting for config update synchronized at @18s -2025-08-21T06:56:57Z DEBUG Received command AHU-1/state/discovery as MP:ee8a8f53-1 -2025-08-21T06:56:57Z TRACE Received state_discovery: { -2025-08-21T06:56:57Z TRACE Received state_discovery: "families" : { }, -2025-08-21T06:56:57Z TRACE Received state_discovery: "timestamp" : "2025-08-21T06:56:57Z", -2025-08-21T06:56:57Z TRACE Received state_discovery: "version" : "1.5.3" -2025-08-21T06:56:57Z TRACE Received state_discovery: } -2025-08-21T06:56:57Z DEBUG Handling device message state_discovery MP:ee8a8f53-1 -2025-08-21T06:56:57Z TRACE Ignoring partial state update -2025-08-21T06:56:57Z DEBUG Received command AHU-1/state/localnet as MP:ee8a8f53-2 -2025-08-21T06:56:57Z TRACE Received state_localnet: { -2025-08-21T06:56:57Z TRACE Received state_localnet: "families" : { -2025-08-21T06:56:57Z TRACE Received state_localnet: "ether" : { -2025-08-21T06:56:57Z TRACE Received state_localnet: "addr" : "42:01:ac:10:83:22" -2025-08-21T06:56:57Z TRACE Received state_localnet: }, -2025-08-21T06:56:57Z TRACE Received state_localnet: "ipv4" : { -2025-08-21T06:56:57Z TRACE Received state_localnet: "addr" : "172.16.131.34" -2025-08-21T06:56:57Z TRACE Received state_localnet: }, -2025-08-21T06:56:57Z TRACE Received state_localnet: "vendor" : { -2025-08-21T06:56:57Z TRACE Received state_localnet: "addr" : "28179023" -2025-08-21T06:56:57Z TRACE Received state_localnet: }, -2025-08-21T06:56:57Z TRACE Received state_localnet: "bacnet" : { -2025-08-21T06:56:57Z TRACE Received state_localnet: "addr" : "27312" -2025-08-21T06:56:57Z TRACE Received state_localnet: } -2025-08-21T06:56:57Z TRACE Received state_localnet: }, -2025-08-21T06:56:57Z TRACE Received state_localnet: "timestamp" : "2025-08-21T06:56:57Z", -2025-08-21T06:56:57Z TRACE Received state_localnet: "version" : "1.5.3" -2025-08-21T06:56:57Z TRACE Received state_localnet: } -2025-08-21T06:56:57Z DEBUG Handling device message state_localnet MP:ee8a8f53-2 -2025-08-21T06:56:57Z TRACE Ignoring partial state update -2025-08-21T06:56:57Z DEBUG Stage finished waiting for config update synchronized at @18s after 0s -2025-08-21T06:56:57Z TRACE Stage resume waiting for starting test wrapper at @18s -2025-08-21T06:56:57Z DEBUG Config sync took 2s -2025-08-21T06:56:57Z DEBUG Finished wait for config sync pending: null -2025-08-21T06:56:57Z TRACE Stage suspend waiting for starting test wrapper at @18s -2025-08-21T06:56:57Z INFO Stage start waiting for executing test at @18s -2025-08-21T06:56:57Z DEBUG stage begin waiting for executing test at @18s -2025-08-21T06:56:57Z DEBUG Allowing device state change pointset.points. -2025-08-21T06:56:57Z TRACE Stage suspend waiting for executing test at @18s -2025-08-21T06:56:57Z INFO Stage start waiting for target point has value_state default (null) at @18s -2025-08-21T06:56:57Z DEBUG Delay from lastConfigApplied 2025-08-21T06:56:57.530035711Z is 1531ms -2025-08-21T06:56:57Z DEBUG Rate-limiting config by 1531ms -2025-08-21T06:56:59Z DEBUG System config extra field null -2025-08-21T06:56:59Z TRACE Updated check config_system: true -2025-08-21T06:56:59Z DEBUG Update config_system, adding configTransaction RC:3109d1.00000008 -2025-08-21T06:56:59Z TRACE Updated check config_pointset: true -2025-08-21T06:56:59Z DEBUG Update config_pointset, adding configTransaction RC:3109d1.00000009 -2025-08-21T06:56:59Z TRACE Updated check config_gateway: false -2025-08-21T06:56:59Z TRACE Updated check config_localnet: true -2025-08-21T06:56:59Z DEBUG Update config_localnet, adding configTransaction RC:3109d1.0000000a -2025-08-21T06:56:59Z TRACE Updated check config_blobset: false -2025-08-21T06:56:59Z TRACE Updated check config_discovery: true -2025-08-21T06:56:59Z DEBUG Update config_discovery, adding configTransaction RC:3109d1.0000000b -2025-08-21T06:56:59Z DEBUG Using pre-config state timestamp 2025-08-21T06:56:57Z -2025-08-21T06:56:59Z DEBUG Update lastConfigIssued 2025-08-21T06:56:59Z, because before target point has value_state default (null) -2025-08-21T06:56:59Z TRACE Stage suspend waiting for target point has value_state default (null) at @20s -2025-08-21T06:56:59Z INFO Stage start waiting for config update synchronized at @20s -2025-08-21T06:56:59Z DEBUG Received command AHU-1/state/pointset as MP:ee8a8f53-3 -2025-08-21T06:56:59Z TRACE Received state_pointset: { -2025-08-21T06:56:59Z TRACE Received state_pointset: "points" : { -2025-08-21T06:56:59Z TRACE Received state_pointset: "filter_alarm_pressure_status" : { -2025-08-21T06:56:59Z TRACE Received state_pointset: "units" : "No-units", -2025-08-21T06:56:59Z TRACE Received state_pointset: "value_state" : "updating" -2025-08-21T06:56:59Z TRACE Received state_pointset: }, -2025-08-21T06:56:59Z TRACE Received state_pointset: "filter_differential_pressure_setpoint" : { -2025-08-21T06:56:59Z TRACE Received state_pointset: "units" : "Bars", -2025-08-21T06:56:59Z TRACE Received state_pointset: "value_state" : "updating" -2025-08-21T06:56:59Z TRACE Received state_pointset: }, -2025-08-21T06:56:59Z TRACE Received state_pointset: "filter_differential_pressure_sensor" : { -2025-08-21T06:56:59Z TRACE Received state_pointset: "units" : "Degrees-Celsius", -2025-08-21T06:56:59Z TRACE Received state_pointset: "value_state" : "updating" -2025-08-21T06:56:59Z TRACE Received state_pointset: } -2025-08-21T06:56:59Z TRACE Received state_pointset: }, -2025-08-21T06:56:59Z TRACE Received state_pointset: "timestamp" : "2025-08-21T06:56:57Z", -2025-08-21T06:56:59Z TRACE Received state_pointset: "version" : "1.5.3" -2025-08-21T06:56:59Z TRACE Received state_pointset: } -2025-08-21T06:56:59Z DEBUG Handling device message state_pointset MP:ee8a8f53-3 -2025-08-21T06:56:59Z TRACE Ignoring partial state update -2025-08-21T06:56:59Z DEBUG Received command AHU-1/state/update as MP:7eaf900b -2025-08-21T06:56:59Z DEBUG Received state_update -2025-08-21T06:56:59Z DEBUG Handling update message state_update MP:7eaf900b -2025-08-21T06:56:59Z DEBUG Capturing AHU-1 message state_update -2025-08-21T06:56:59Z DEBUG Updated state after 0s 2025-08-21T06:56:59Z MP:7eaf900b -2025-08-21T06:56:59Z INFO Updated state #008: Changed 4 fields: -2025-08-21T06:56:59Z INFO Updated state #008: Remove `pointset.points.filter_alarm_pressure_status.value_state` -2025-08-21T06:56:59Z INFO Updated state #008: Set `pointset.points.filter_differential_pressure_setpoint.value_state` = `applied` -2025-08-21T06:56:59Z INFO Updated state #008: Remove `pointset.points.filter_differential_pressure_sensor.value_state` -2025-08-21T06:56:59Z INFO Updated state #008: Set `timestamp` = `2025-08-21T06:56:59Z` -2025-08-21T06:56:59Z DEBUG Updated state has last_config 2025-08-21T06:56:55Z (expecting 2025-08-21T06:56:55Z) -2025-08-21T06:56:59Z DEBUG Received command AHU-1/state/system as MP:7eaf900b-0 -2025-08-21T06:56:59Z TRACE Received state_system: { -2025-08-21T06:56:59Z TRACE Received state_system: "hardware" : { -2025-08-21T06:56:59Z TRACE Received state_system: "make" : "BOS", -2025-08-21T06:56:59Z TRACE Received state_system: "model" : "pubber" -2025-08-21T06:56:59Z TRACE Received state_system: }, -2025-08-21T06:56:59Z TRACE Received state_system: "last_config" : "2025-08-21T06:56:55Z", -2025-08-21T06:56:59Z TRACE Received state_system: "operation" : { -2025-08-21T06:56:59Z TRACE Received state_system: "operational" : true, -2025-08-21T06:56:59Z TRACE Received state_system: "last_start" : "2025-08-21T06:55:44Z", -2025-08-21T06:56:59Z TRACE Received state_system: "restart_count" : 1, -2025-08-21T06:56:59Z TRACE Received state_system: "mode" : "initial" -2025-08-21T06:56:59Z TRACE Received state_system: }, -2025-08-21T06:56:59Z TRACE Received state_system: "serial_no" : "742132", -2025-08-21T06:56:59Z TRACE Received state_system: "software" : { -2025-08-21T06:56:59Z TRACE Received state_system: "firmware" : "v1" -2025-08-21T06:56:59Z TRACE Received state_system: }, -2025-08-21T06:56:59Z TRACE Received state_system: "status" : { -2025-08-21T06:56:59Z TRACE Received state_system: "message" : "success", -2025-08-21T06:56:59Z TRACE Received state_system: "category" : "system.config.apply", -2025-08-21T06:56:59Z TRACE Received state_system: "timestamp" : "2025-08-21T06:56:55Z", -2025-08-21T06:56:59Z TRACE Received state_system: "level" : 300 -2025-08-21T06:56:59Z TRACE Received state_system: }, -2025-08-21T06:56:59Z TRACE Received state_system: "timestamp" : "2025-08-21T06:56:59Z", -2025-08-21T06:56:59Z TRACE Received state_system: "version" : "1.5.3" -2025-08-21T06:56:59Z TRACE Received state_system: } -2025-08-21T06:56:59Z DEBUG Handling device message state_system MP:7eaf900b-0 -2025-08-21T06:56:59Z TRACE Ignoring partial state update -2025-08-21T06:56:59Z DEBUG Received command AHU-1/state/discovery as MP:7eaf900b-1 -2025-08-21T06:56:59Z TRACE Received state_discovery: { -2025-08-21T06:56:59Z TRACE Received state_discovery: "families" : { }, -2025-08-21T06:56:59Z TRACE Received state_discovery: "timestamp" : "2025-08-21T06:56:59Z", -2025-08-21T06:56:59Z TRACE Received state_discovery: "version" : "1.5.3" -2025-08-21T06:56:59Z TRACE Received state_discovery: } -2025-08-21T06:56:59Z DEBUG Handling device message state_discovery MP:7eaf900b-1 -2025-08-21T06:56:59Z TRACE Ignoring partial state update -2025-08-21T06:56:59Z DEBUG Received command AHU-1/state/localnet as MP:7eaf900b-2 -2025-08-21T06:56:59Z TRACE Received state_localnet: { -2025-08-21T06:56:59Z TRACE Received state_localnet: "families" : { -2025-08-21T06:56:59Z TRACE Received state_localnet: "ether" : { -2025-08-21T06:56:59Z TRACE Received state_localnet: "addr" : "42:01:ac:10:83:22" -2025-08-21T06:56:59Z TRACE Received state_localnet: }, -2025-08-21T06:56:59Z TRACE Received state_localnet: "ipv4" : { -2025-08-21T06:56:59Z TRACE Received state_localnet: "addr" : "172.16.131.34" -2025-08-21T06:56:59Z TRACE Received state_localnet: }, -2025-08-21T06:56:59Z TRACE Received state_localnet: "vendor" : { -2025-08-21T06:56:59Z TRACE Received state_localnet: "addr" : "28179023" -2025-08-21T06:56:59Z TRACE Received state_localnet: }, -2025-08-21T06:56:59Z TRACE Received state_localnet: "bacnet" : { -2025-08-21T06:56:59Z TRACE Received state_localnet: "addr" : "27312" -2025-08-21T06:56:59Z TRACE Received state_localnet: } -2025-08-21T06:56:59Z TRACE Received state_localnet: }, -2025-08-21T06:56:59Z TRACE Received state_localnet: "timestamp" : "2025-08-21T06:56:59Z", -2025-08-21T06:56:59Z TRACE Received state_localnet: "version" : "1.5.3" -2025-08-21T06:56:59Z TRACE Received state_localnet: } -2025-08-21T06:56:59Z DEBUG Handling device message state_localnet MP:7eaf900b-2 -2025-08-21T06:56:59Z TRACE Ignoring partial state update -2025-08-21T06:56:59Z DEBUG Received command AHU-1/state/pointset as MP:7eaf900b-3 -2025-08-21T06:56:59Z TRACE Received state_pointset: { -2025-08-21T06:56:59Z TRACE Received state_pointset: "points" : { -2025-08-21T06:56:59Z TRACE Received state_pointset: "filter_alarm_pressure_status" : { -2025-08-21T06:56:59Z TRACE Received state_pointset: "units" : "No-units" -2025-08-21T06:56:59Z TRACE Received state_pointset: }, -2025-08-21T06:56:59Z TRACE Received state_pointset: "filter_differential_pressure_setpoint" : { -2025-08-21T06:56:59Z TRACE Received state_pointset: "units" : "Bars", -2025-08-21T06:56:59Z TRACE Received state_pointset: "value_state" : "applied" -2025-08-21T06:56:59Z TRACE Received state_pointset: }, -2025-08-21T06:56:59Z TRACE Received state_pointset: "filter_differential_pressure_sensor" : { -2025-08-21T06:56:59Z TRACE Received state_pointset: "units" : "Degrees-Celsius" -2025-08-21T06:56:59Z TRACE Received state_pointset: } -2025-08-21T06:56:59Z TRACE Received state_pointset: }, -2025-08-21T06:56:59Z TRACE Received state_pointset: "timestamp" : "2025-08-21T06:56:59Z", -2025-08-21T06:56:59Z TRACE Received state_pointset: "version" : "1.5.3" -2025-08-21T06:56:59Z TRACE Received state_pointset: } -2025-08-21T06:56:59Z DEBUG Handling device message state_pointset MP:7eaf900b-3 -2025-08-21T06:56:59Z TRACE Ignoring partial state update -2025-08-21T06:57:00Z DEBUG Received command AHU-1/config/update as RC:3109d1.00000008 -2025-08-21T06:57:00Z DEBUG Received config_update -2025-08-21T06:57:00Z DEBUG Handling update message config_update RC:3109d1.00000008 -2025-08-21T06:57:00Z DEBUG Removed configTransaction RC:3109d1.00000008 -2025-08-21T06:57:00Z DEBUG Set last_start changed false, last_start 2025-08-21T06:55:44Z -2025-08-21T06:57:00Z DEBUG Updated config 2025-08-21T06:56:59Z RC:3109d1.00000008 -2025-08-21T06:57:00Z INFO Updated config #005: Changed 1 fields: -2025-08-21T06:57:00Z INFO Updated config #005: Remove `pointset.points.filter_differential_pressure_setpoint.set_value` -2025-08-21T06:57:00Z DEBUG Expected last_config now 2025-08-21T06:56:59Z -2025-08-21T06:57:00Z DEBUG Detail config update synchronized is now: config transactions not cleared, last_config not synced in state -2025-08-21T06:57:00Z DEBUG Received command AHU-1/config/system as CU:3109d1.00000008 -2025-08-21T06:57:00Z TRACE Received config_system: { -2025-08-21T06:57:00Z TRACE Received config_system: "operation" : "REPLY" -2025-08-21T06:57:00Z TRACE Received config_system: } -2025-08-21T06:57:00Z DEBUG Handling device message config_system CU:3109d1.00000008 -2025-08-21T06:57:00Z TRACE Ignoring echo configTransaction CU:3109d1.00000008 -2025-08-21T06:57:00Z DEBUG Received command null/config/udmi as null -2025-08-21T06:57:01Z DEBUG Received command AHU-1/config/update as RC:3109d1.0000000a -2025-08-21T06:57:01Z DEBUG Received config_update -2025-08-21T06:57:01Z DEBUG Handling update message config_update RC:3109d1.0000000a -2025-08-21T06:57:01Z DEBUG Removed configTransaction RC:3109d1.0000000a -2025-08-21T06:57:01Z DEBUG Set last_start changed false, last_start 2025-08-21T06:55:44Z -2025-08-21T06:57:01Z DEBUG Updated config 2025-08-21T06:57:00Z RC:3109d1.0000000a -2025-08-21T06:57:01Z INFO Updated config #006: Changed 0 fields. -2025-08-21T06:57:01Z DEBUG Expected last_config now 2025-08-21T06:57:00Z -2025-08-21T06:57:01Z DEBUG Received command AHU-1/config/localnet as CU:3109d1.0000000a -2025-08-21T06:57:01Z TRACE Received config_localnet: { -2025-08-21T06:57:01Z TRACE Received config_localnet: "operation" : "REPLY" -2025-08-21T06:57:01Z TRACE Received config_localnet: } -2025-08-21T06:57:01Z DEBUG Handling device message config_localnet CU:3109d1.0000000a -2025-08-21T06:57:01Z TRACE Ignoring echo configTransaction CU:3109d1.0000000a -2025-08-21T06:57:01Z DEBUG Received command AHU-1/state/update as MP:13eb1e08 -2025-08-21T06:57:01Z DEBUG Received state_update -2025-08-21T06:57:01Z DEBUG Handling update message state_update MP:13eb1e08 -2025-08-21T06:57:01Z DEBUG Capturing AHU-1 message state_update -2025-08-21T06:57:01Z DEBUG Updated state after 0s 2025-08-21T06:57:01Z MP:13eb1e08 -2025-08-21T06:57:01Z INFO Updated state #009: Changed 6 fields: -2025-08-21T06:57:01Z INFO Updated state #009: Set `system.last_config` = `2025-08-21T06:57:00Z` -2025-08-21T06:57:01Z INFO Updated state #009: Set `system.status.timestamp` = `2025-08-21T06:57:00Z` -2025-08-21T06:57:01Z INFO Updated state #009: Add `pointset.points.filter_alarm_pressure_status.value_state` = `updating` -2025-08-21T06:57:01Z INFO Updated state #009: Set `pointset.points.filter_differential_pressure_setpoint.value_state` = `updating` -2025-08-21T06:57:01Z INFO Updated state #009: Add `pointset.points.filter_differential_pressure_sensor.value_state` = `updating` -2025-08-21T06:57:01Z INFO Updated state #009: Set `timestamp` = `2025-08-21T06:57:01Z` -2025-08-21T06:57:01Z DEBUG Updated state has last_config 2025-08-21T06:57:00Z (expecting 2025-08-21T06:57:00Z) -2025-08-21T06:57:01Z DEBUG Detail config update synchronized is now: config transactions not cleared -2025-08-21T06:57:01Z DEBUG Received command AHU-1/state/system as MP:13eb1e08-0 -2025-08-21T06:57:01Z TRACE Received state_system: { -2025-08-21T06:57:01Z TRACE Received state_system: "hardware" : { -2025-08-21T06:57:01Z TRACE Received state_system: "make" : "BOS", -2025-08-21T06:57:01Z TRACE Received state_system: "model" : "pubber" -2025-08-21T06:57:01Z TRACE Received state_system: }, -2025-08-21T06:57:01Z TRACE Received state_system: "last_config" : "2025-08-21T06:57:00Z", -2025-08-21T06:57:01Z TRACE Received state_system: "operation" : { -2025-08-21T06:57:01Z TRACE Received state_system: "operational" : true, -2025-08-21T06:57:01Z TRACE Received state_system: "last_start" : "2025-08-21T06:55:44Z", -2025-08-21T06:57:01Z TRACE Received state_system: "restart_count" : 1, -2025-08-21T06:57:01Z TRACE Received state_system: "mode" : "initial" -2025-08-21T06:57:01Z TRACE Received state_system: }, -2025-08-21T06:57:01Z TRACE Received state_system: "serial_no" : "742132", -2025-08-21T06:57:01Z TRACE Received state_system: "software" : { -2025-08-21T06:57:01Z TRACE Received state_system: "firmware" : "v1" -2025-08-21T06:57:01Z TRACE Received state_system: }, -2025-08-21T06:57:01Z TRACE Received state_system: "status" : { -2025-08-21T06:57:01Z TRACE Received state_system: "message" : "success", -2025-08-21T06:57:01Z TRACE Received state_system: "category" : "system.config.apply", -2025-08-21T06:57:01Z TRACE Received state_system: "timestamp" : "2025-08-21T06:57:00Z", -2025-08-21T06:57:01Z TRACE Received state_system: "level" : 300 -2025-08-21T06:57:01Z TRACE Received state_system: }, -2025-08-21T06:57:01Z TRACE Received state_system: "timestamp" : "2025-08-21T06:57:01Z", -2025-08-21T06:57:01Z TRACE Received state_system: "version" : "1.5.3" -2025-08-21T06:57:01Z TRACE Received state_system: } -2025-08-21T06:57:01Z DEBUG Handling device message state_system MP:13eb1e08-0 -2025-08-21T06:57:01Z TRACE Ignoring partial state update -2025-08-21T06:57:01Z DEBUG Received command AHU-1/state/discovery as MP:13eb1e08-1 -2025-08-21T06:57:01Z TRACE Received state_discovery: { -2025-08-21T06:57:01Z TRACE Received state_discovery: "families" : { }, -2025-08-21T06:57:01Z TRACE Received state_discovery: "timestamp" : "2025-08-21T06:57:01Z", -2025-08-21T06:57:01Z TRACE Received state_discovery: "version" : "1.5.3" -2025-08-21T06:57:01Z TRACE Received state_discovery: } -2025-08-21T06:57:01Z DEBUG Handling device message state_discovery MP:13eb1e08-1 -2025-08-21T06:57:01Z TRACE Ignoring partial state update -2025-08-21T06:57:01Z DEBUG Received command AHU-1/state/localnet as MP:13eb1e08-2 -2025-08-21T06:57:01Z TRACE Received state_localnet: { -2025-08-21T06:57:01Z TRACE Received state_localnet: "families" : { -2025-08-21T06:57:01Z TRACE Received state_localnet: "ether" : { -2025-08-21T06:57:01Z TRACE Received state_localnet: "addr" : "42:01:ac:10:83:22" -2025-08-21T06:57:01Z TRACE Received state_localnet: }, -2025-08-21T06:57:01Z TRACE Received state_localnet: "ipv4" : { -2025-08-21T06:57:01Z TRACE Received state_localnet: "addr" : "172.16.131.34" -2025-08-21T06:57:01Z TRACE Received state_localnet: }, -2025-08-21T06:57:01Z TRACE Received state_localnet: "vendor" : { -2025-08-21T06:57:01Z TRACE Received state_localnet: "addr" : "28179023" -2025-08-21T06:57:01Z TRACE Received state_localnet: }, -2025-08-21T06:57:01Z TRACE Received state_localnet: "bacnet" : { -2025-08-21T06:57:01Z TRACE Received state_localnet: "addr" : "27312" -2025-08-21T06:57:01Z TRACE Received state_localnet: } -2025-08-21T06:57:01Z TRACE Received state_localnet: }, -2025-08-21T06:57:01Z TRACE Received state_localnet: "timestamp" : "2025-08-21T06:57:01Z", -2025-08-21T06:57:01Z TRACE Received state_localnet: "version" : "1.5.3" -2025-08-21T06:57:01Z TRACE Received state_localnet: } -2025-08-21T06:57:01Z DEBUG Handling device message state_localnet MP:13eb1e08-2 -2025-08-21T06:57:01Z TRACE Ignoring partial state update -2025-08-21T06:57:01Z DEBUG Received command AHU-1/state/pointset as MP:13eb1e08-3 -2025-08-21T06:57:01Z TRACE Received state_pointset: { -2025-08-21T06:57:01Z TRACE Received state_pointset: "points" : { -2025-08-21T06:57:01Z TRACE Received state_pointset: "filter_alarm_pressure_status" : { -2025-08-21T06:57:01Z TRACE Received state_pointset: "units" : "No-units", -2025-08-21T06:57:01Z TRACE Received state_pointset: "value_state" : "updating" -2025-08-21T06:57:01Z TRACE Received state_pointset: }, -2025-08-21T06:57:01Z TRACE Received state_pointset: "filter_differential_pressure_setpoint" : { -2025-08-21T06:57:01Z TRACE Received state_pointset: "units" : "Bars", -2025-08-21T06:57:01Z TRACE Received state_pointset: "value_state" : "updating" -2025-08-21T06:57:01Z TRACE Received state_pointset: }, -2025-08-21T06:57:01Z TRACE Received state_pointset: "filter_differential_pressure_sensor" : { -2025-08-21T06:57:01Z TRACE Received state_pointset: "units" : "Degrees-Celsius", -2025-08-21T06:57:01Z TRACE Received state_pointset: "value_state" : "updating" -2025-08-21T06:57:01Z TRACE Received state_pointset: } -2025-08-21T06:57:01Z TRACE Received state_pointset: }, -2025-08-21T06:57:01Z TRACE Received state_pointset: "timestamp" : "2025-08-21T06:57:01Z", -2025-08-21T06:57:01Z TRACE Received state_pointset: "version" : "1.5.3" -2025-08-21T06:57:01Z TRACE Received state_pointset: } -2025-08-21T06:57:01Z DEBUG Handling device message state_pointset MP:13eb1e08-3 -2025-08-21T06:57:01Z TRACE Ignoring partial state update -2025-08-21T06:57:02Z DEBUG Received command AHU-1/events/pointset as MP:a1c2eeae -2025-08-21T06:57:02Z TRACE Received events_pointset: { -2025-08-21T06:57:02Z TRACE Received events_pointset: "points" : { -2025-08-21T06:57:02Z TRACE Received events_pointset: "filter_alarm_pressure_status" : { -2025-08-21T06:57:02Z TRACE Received events_pointset: "present_value" : false -2025-08-21T06:57:02Z TRACE Received events_pointset: }, -2025-08-21T06:57:02Z TRACE Received events_pointset: "filter_differential_pressure_setpoint" : { -2025-08-21T06:57:02Z TRACE Received events_pointset: "present_value" : 98 -2025-08-21T06:57:02Z TRACE Received events_pointset: }, -2025-08-21T06:57:02Z TRACE Received events_pointset: "filter_differential_pressure_sensor" : { -2025-08-21T06:57:02Z TRACE Received events_pointset: "present_value" : 8 -2025-08-21T06:57:02Z TRACE Received events_pointset: } -2025-08-21T06:57:02Z TRACE Received events_pointset: }, -2025-08-21T06:57:02Z TRACE Received events_pointset: "timestamp" : "2025-08-21T06:57:01Z", -2025-08-21T06:57:02Z TRACE Received events_pointset: "version" : "1.5.3" -2025-08-21T06:57:02Z TRACE Received events_pointset: } -2025-08-21T06:57:02Z DEBUG Handling device message events_pointset MP:a1c2eeae -2025-08-21T06:57:02Z DEBUG Capturing AHU-1 message events_pointset -2025-08-21T06:57:02Z DEBUG Received command AHU-1/events/system as MP:9b90253e -2025-08-21T06:57:02Z DEBUG Received events_system 2025-08-21T06:56:53Z INFO device.log: Update state 2025-08-21T06:56:53Z last_config 2025-08-21T06:56:51Z -2025-08-21T06:57:02Z DEBUG Received events_system 2025-08-21T06:56:54Z INFO device.log: Completing delayed writeback for filter_alarm_pressure_status -2025-08-21T06:57:02Z DEBUG Received events_system 2025-08-21T06:56:54Z INFO device.log: Completing delayed writeback for filter_differential_pressure_setpoint -2025-08-21T06:57:02Z DEBUG Received events_system 2025-08-21T06:56:54Z INFO device.log: Completing delayed writeback for filter_differential_pressure_sensor -2025-08-21T06:57:02Z DEBUG Received events_system 2025-08-21T06:56:55Z INFO device.log: Update state 2025-08-21T06:56:55Z last_config 2025-08-21T06:56:51Z -2025-08-21T06:57:02Z DEBUG Received events_system 2025-08-21T06:56:55Z INFO device.log: Device AHU-1 config handler -2025-08-21T06:57:02Z DEBUG Received events_system 2025-08-21T06:56:55Z INFO device.log: 2025-08-21T06:56:55Z received config 2025-08-21T06:56:55Z -2025-08-21T06:57:02Z DEBUG Received events_system 2025-08-21T06:56:55Z INFO device.log: Applying slow writeback for point filter_alarm_pressure_status with 3s delay -2025-08-21T06:57:02Z DEBUG Received events_system 2025-08-21T06:56:55Z INFO device.log: Applying slow writeback for point filter_differential_pressure_setpoint with 3s delay -2025-08-21T06:57:02Z DEBUG Received events_system 2025-08-21T06:56:55Z INFO device.log: Applying slow writeback for point filter_differential_pressure_sensor with 3s delay -2025-08-21T06:57:02Z DEBUG Received events_system 2025-08-21T06:56:55Z NOTICE system.config.apply: success -2025-08-21T06:57:02Z DEBUG Received events_system 2025-08-21T06:56:57Z INFO device.log: Update state 2025-08-21T06:56:57Z last_config 2025-08-21T06:56:55Z -2025-08-21T06:57:02Z DEBUG Received events_system 2025-08-21T06:56:58Z INFO device.log: Completing delayed writeback for filter_alarm_pressure_status -2025-08-21T06:57:02Z DEBUG Received events_system 2025-08-21T06:56:58Z INFO device.log: Completing delayed writeback for filter_differential_pressure_setpoint -2025-08-21T06:57:02Z DEBUG Received events_system 2025-08-21T06:56:58Z INFO device.log: Completing delayed writeback for filter_differential_pressure_sensor -2025-08-21T06:57:02Z DEBUG Received events_system 2025-08-21T06:56:59Z INFO device.log: Update state 2025-08-21T06:56:59Z last_config 2025-08-21T06:56:55Z -2025-08-21T06:57:02Z DEBUG Received events_system 2025-08-21T06:56:59Z INFO device.log: Device AHU-1 config handler -2025-08-21T06:57:02Z DEBUG Received events_system 2025-08-21T06:56:59Z INFO device.log: 2025-08-21T06:56:59Z received config 2025-08-21T06:56:59Z -2025-08-21T06:57:02Z DEBUG Received events_system 2025-08-21T06:56:59Z INFO device.log: Applying slow writeback for point filter_alarm_pressure_status with 3s delay -2025-08-21T06:57:02Z DEBUG Received events_system 2025-08-21T06:56:59Z INFO device.log: Applying slow writeback for point filter_differential_pressure_setpoint with 3s delay -2025-08-21T06:57:02Z DEBUG Received events_system 2025-08-21T06:56:59Z INFO device.log: Applying slow writeback for point filter_differential_pressure_sensor with 3s delay -2025-08-21T06:57:02Z DEBUG Received events_system 2025-08-21T06:56:59Z NOTICE system.config.apply: success -2025-08-21T06:57:02Z DEBUG Received events_system 2025-08-21T06:57:00Z INFO device.log: Device AHU-1 config handler -2025-08-21T06:57:02Z DEBUG Received events_system 2025-08-21T06:57:00Z INFO device.log: 2025-08-21T06:57:00Z received config 2025-08-21T06:57:00Z -2025-08-21T06:57:02Z DEBUG Received events_system 2025-08-21T06:57:00Z INFO device.log: Applying slow writeback for point filter_alarm_pressure_status with 3s delay -2025-08-21T06:57:02Z DEBUG Received events_system 2025-08-21T06:57:00Z INFO device.log: Applying slow writeback for point filter_differential_pressure_setpoint with 3s delay -2025-08-21T06:57:02Z DEBUG Received events_system 2025-08-21T06:57:00Z INFO device.log: Applying slow writeback for point filter_differential_pressure_sensor with 3s delay -2025-08-21T06:57:02Z DEBUG Received events_system 2025-08-21T06:57:00Z NOTICE system.config.apply: success -2025-08-21T06:57:02Z DEBUG Received events_system 2025-08-21T06:57:01Z INFO device.log: Update state 2025-08-21T06:57:01Z last_config 2025-08-21T06:57:00Z -2025-08-21T06:57:02Z DEBUG Handling device message events_system MP:9b90253e -2025-08-21T06:57:02Z DEBUG Capturing AHU-1 message events_system -2025-08-21T06:57:02Z DEBUG Received command AHU-1/config/update as RC:3109d1.00000009 -2025-08-21T06:57:02Z DEBUG Received config_update -2025-08-21T06:57:02Z DEBUG Handling update message config_update RC:3109d1.00000009 -2025-08-21T06:57:02Z DEBUG Removed configTransaction RC:3109d1.00000009 -2025-08-21T06:57:02Z DEBUG Set last_start changed false, last_start 2025-08-21T06:55:44Z -2025-08-21T06:57:02Z DEBUG Updated config 2025-08-21T06:57:01Z RC:3109d1.00000009 -2025-08-21T06:57:02Z INFO Updated config #007: Changed 0 fields. -2025-08-21T06:57:02Z DEBUG Expected last_config now 2025-08-21T06:57:01Z -2025-08-21T06:57:02Z DEBUG Detail config update synchronized is now: config transactions not cleared, last_config not synced in state -2025-08-21T06:57:02Z DEBUG Received command AHU-1/config/pointset as CU:3109d1.00000009 -2025-08-21T06:57:02Z TRACE Received config_pointset: { -2025-08-21T06:57:02Z TRACE Received config_pointset: "operation" : "REPLY" -2025-08-21T06:57:02Z TRACE Received config_pointset: } -2025-08-21T06:57:02Z DEBUG Handling device message config_pointset CU:3109d1.00000009 -2025-08-21T06:57:02Z TRACE Ignoring echo configTransaction CU:3109d1.00000009 -2025-08-21T06:57:03Z DEBUG Received command AHU-1/config/update as RC:3109d1.0000000b -2025-08-21T06:57:03Z DEBUG Received config_update -2025-08-21T06:57:03Z DEBUG Handling update message config_update RC:3109d1.0000000b -2025-08-21T06:57:03Z DEBUG Removed configTransaction RC:3109d1.0000000b -2025-08-21T06:57:03Z DEBUG Set last_start changed false, last_start 2025-08-21T06:55:44Z -2025-08-21T06:57:03Z DEBUG Updated config 2025-08-21T06:57:02Z RC:3109d1.0000000b -2025-08-21T06:57:03Z INFO Updated config #008: Changed 0 fields. -2025-08-21T06:57:03Z DEBUG Expected last_config now 2025-08-21T06:57:02Z -2025-08-21T06:57:03Z DEBUG Received command AHU-1/config/discovery as CU:3109d1.0000000b -2025-08-21T06:57:03Z TRACE Received config_discovery: { -2025-08-21T06:57:03Z TRACE Received config_discovery: "operation" : "REPLY" -2025-08-21T06:57:03Z TRACE Received config_discovery: } -2025-08-21T06:57:03Z DEBUG Handling device message config_discovery CU:3109d1.0000000b -2025-08-21T06:57:03Z TRACE Ignoring echo configTransaction CU:3109d1.0000000b -2025-08-21T06:57:03Z DEBUG Detail config update synchronized is now: last_config not synced in state -2025-08-21T06:57:03Z DEBUG Received command AHU-1/state/update as MP:1914aef5 -2025-08-21T06:57:03Z DEBUG Received state_update -2025-08-21T06:57:03Z DEBUG Handling update message state_update MP:1914aef5 -2025-08-21T06:57:03Z DEBUG Capturing AHU-1 message state_update -2025-08-21T06:57:03Z DEBUG Updated state after 0s 2025-08-21T06:57:03Z MP:1914aef5 -2025-08-21T06:57:03Z INFO Updated state #010: Changed 3 fields: -2025-08-21T06:57:03Z INFO Updated state #010: Set `system.last_config` = `2025-08-21T06:57:02Z` -2025-08-21T06:57:03Z INFO Updated state #010: Set `system.status.timestamp` = `2025-08-21T06:57:02Z` -2025-08-21T06:57:03Z INFO Updated state #010: Set `timestamp` = `2025-08-21T06:57:03Z` -2025-08-21T06:57:03Z DEBUG Updated state has last_config 2025-08-21T06:57:02Z (expecting 2025-08-21T06:57:02Z) -2025-08-21T06:57:03Z DEBUG Received command AHU-1/state/system as MP:1914aef5-0 -2025-08-21T06:57:03Z TRACE Received state_system: { -2025-08-21T06:57:03Z TRACE Received state_system: "hardware" : { -2025-08-21T06:57:03Z TRACE Received state_system: "make" : "BOS", -2025-08-21T06:57:03Z TRACE Received state_system: "model" : "pubber" -2025-08-21T06:57:03Z TRACE Received state_system: }, -2025-08-21T06:57:03Z TRACE Received state_system: "last_config" : "2025-08-21T06:57:02Z", -2025-08-21T06:57:03Z TRACE Received state_system: "operation" : { -2025-08-21T06:57:03Z TRACE Received state_system: "operational" : true, -2025-08-21T06:57:03Z TRACE Received state_system: "last_start" : "2025-08-21T06:55:44Z", -2025-08-21T06:57:03Z TRACE Received state_system: "restart_count" : 1, -2025-08-21T06:57:03Z TRACE Received state_system: "mode" : "initial" -2025-08-21T06:57:03Z TRACE Received state_system: }, -2025-08-21T06:57:03Z TRACE Received state_system: "serial_no" : "742132", -2025-08-21T06:57:03Z TRACE Received state_system: "software" : { -2025-08-21T06:57:03Z TRACE Received state_system: "firmware" : "v1" -2025-08-21T06:57:03Z TRACE Received state_system: }, -2025-08-21T06:57:03Z TRACE Received state_system: "status" : { -2025-08-21T06:57:03Z TRACE Received state_system: "message" : "success", -2025-08-21T06:57:03Z TRACE Received state_system: "category" : "system.config.apply", -2025-08-21T06:57:03Z TRACE Received state_system: "timestamp" : "2025-08-21T06:57:02Z", -2025-08-21T06:57:03Z TRACE Received state_system: "level" : 300 -2025-08-21T06:57:03Z TRACE Received state_system: }, -2025-08-21T06:57:03Z TRACE Received state_system: "timestamp" : "2025-08-21T06:57:03Z", -2025-08-21T06:57:03Z TRACE Received state_system: "version" : "1.5.3" -2025-08-21T06:57:03Z TRACE Received state_system: } -2025-08-21T06:57:03Z DEBUG Handling device message state_system MP:1914aef5-0 -2025-08-21T06:57:03Z TRACE Ignoring partial state update -2025-08-21T06:57:03Z DEBUG Detail config update synchronized is now: null -2025-08-21T06:57:03Z DEBUG Stage finished waiting for config update synchronized at @24s after 4s -2025-08-21T06:57:03Z TRACE Stage resume waiting for target point has value_state default (null) at @24s -2025-08-21T06:57:03Z DEBUG Config sync took 4s -2025-08-21T06:57:03Z DEBUG Finished wait for config sync pending: null -2025-08-21T06:57:03Z DEBUG New lastConfigApplied at 2025-08-21T06:57:03Z -2025-08-21T06:57:03Z DEBUG Update config before target point has value_state default (null) timestamp 2025-08-21T06:57:02Z -2025-08-21T06:57:03Z DEBUG Recorded sequence: 1. Update config before target point has value_state default (null) -2025-08-21T06:57:03Z INFO Device config Remove `pointset.points.filter_differential_pressure_setpoint.set_value` -2025-08-21T06:57:03Z TRACE Update config before target point has value_state default (null): Remove `pointset.points.filter_differential_pressure_setpoint.set_value` -2025-08-21T06:57:03Z DEBUG Value state updating == null (false) -2025-08-21T06:57:03Z DEBUG Value state updating == null (false) -2025-08-21T06:57:03Z DEBUG Received command AHU-1/state/discovery as MP:1914aef5-1 -2025-08-21T06:57:03Z TRACE Received state_discovery: { -2025-08-21T06:57:03Z TRACE Received state_discovery: "families" : { }, -2025-08-21T06:57:03Z TRACE Received state_discovery: "timestamp" : "2025-08-21T06:57:03Z", -2025-08-21T06:57:03Z TRACE Received state_discovery: "version" : "1.5.3" -2025-08-21T06:57:03Z TRACE Received state_discovery: } -2025-08-21T06:57:03Z DEBUG Handling device message state_discovery MP:1914aef5-1 -2025-08-21T06:57:03Z TRACE Ignoring partial state update -2025-08-21T06:57:03Z DEBUG Value state updating == null (false) -2025-08-21T06:57:03Z DEBUG Received command AHU-1/state/localnet as MP:1914aef5-2 -2025-08-21T06:57:03Z TRACE Received state_localnet: { -2025-08-21T06:57:03Z TRACE Received state_localnet: "families" : { -2025-08-21T06:57:03Z TRACE Received state_localnet: "ether" : { -2025-08-21T06:57:03Z TRACE Received state_localnet: "addr" : "42:01:ac:10:83:22" -2025-08-21T06:57:03Z TRACE Received state_localnet: }, -2025-08-21T06:57:03Z TRACE Received state_localnet: "ipv4" : { -2025-08-21T06:57:03Z TRACE Received state_localnet: "addr" : "172.16.131.34" -2025-08-21T06:57:03Z TRACE Received state_localnet: }, -2025-08-21T06:57:03Z TRACE Received state_localnet: "vendor" : { -2025-08-21T06:57:03Z TRACE Received state_localnet: "addr" : "28179023" -2025-08-21T06:57:03Z TRACE Received state_localnet: }, -2025-08-21T06:57:03Z TRACE Received state_localnet: "bacnet" : { -2025-08-21T06:57:03Z TRACE Received state_localnet: "addr" : "27312" -2025-08-21T06:57:03Z TRACE Received state_localnet: } -2025-08-21T06:57:03Z TRACE Received state_localnet: }, -2025-08-21T06:57:03Z TRACE Received state_localnet: "timestamp" : "2025-08-21T06:57:03Z", -2025-08-21T06:57:03Z TRACE Received state_localnet: "version" : "1.5.3" -2025-08-21T06:57:03Z TRACE Received state_localnet: } -2025-08-21T06:57:03Z DEBUG Handling device message state_localnet MP:1914aef5-2 -2025-08-21T06:57:03Z TRACE Ignoring partial state update -2025-08-21T06:57:03Z DEBUG Value state updating == null (false) -2025-08-21T06:57:03Z DEBUG Received command AHU-1/state/pointset as MP:1914aef5-3 -2025-08-21T06:57:03Z TRACE Received state_pointset: { -2025-08-21T06:57:03Z TRACE Received state_pointset: "points" : { -2025-08-21T06:57:03Z TRACE Received state_pointset: "filter_alarm_pressure_status" : { -2025-08-21T06:57:03Z TRACE Received state_pointset: "units" : "No-units", -2025-08-21T06:57:03Z TRACE Received state_pointset: "value_state" : "updating" -2025-08-21T06:57:03Z TRACE Received state_pointset: }, -2025-08-21T06:57:03Z TRACE Received state_pointset: "filter_differential_pressure_setpoint" : { -2025-08-21T06:57:03Z TRACE Received state_pointset: "units" : "Bars", -2025-08-21T06:57:03Z TRACE Received state_pointset: "value_state" : "updating" -2025-08-21T06:57:03Z TRACE Received state_pointset: }, -2025-08-21T06:57:03Z TRACE Received state_pointset: "filter_differential_pressure_sensor" : { -2025-08-21T06:57:03Z TRACE Received state_pointset: "units" : "Degrees-Celsius", -2025-08-21T06:57:03Z TRACE Received state_pointset: "value_state" : "updating" -2025-08-21T06:57:03Z TRACE Received state_pointset: } -2025-08-21T06:57:03Z TRACE Received state_pointset: }, -2025-08-21T06:57:03Z TRACE Received state_pointset: "timestamp" : "2025-08-21T06:57:03Z", -2025-08-21T06:57:03Z TRACE Received state_pointset: "version" : "1.5.3" -2025-08-21T06:57:03Z TRACE Received state_pointset: } -2025-08-21T06:57:03Z DEBUG Handling device message state_pointset MP:1914aef5-3 -2025-08-21T06:57:03Z TRACE Ignoring partial state update -2025-08-21T06:57:03Z DEBUG Value state updating == null (false) -2025-08-21T06:57:04Z DEBUG Value state updating == null (false) -2025-08-21T06:57:05Z DEBUG Value state updating == null (false) -2025-08-21T06:57:05Z DEBUG Received command AHU-1/state/update as MP:51d894a1 -2025-08-21T06:57:05Z DEBUG Received state_update -2025-08-21T06:57:05Z DEBUG Handling update message state_update MP:51d894a1 -2025-08-21T06:57:05Z DEBUG Capturing AHU-1 message state_update -2025-08-21T06:57:05Z DEBUG Updated state after 0s 2025-08-21T06:57:05Z MP:51d894a1 -2025-08-21T06:57:05Z INFO Updated state #011: Changed 4 fields: -2025-08-21T06:57:05Z INFO Updated state #011: Remove `pointset.points.filter_alarm_pressure_status.value_state` -2025-08-21T06:57:05Z INFO Updated state #011: Remove `pointset.points.filter_differential_pressure_setpoint.value_state` -2025-08-21T06:57:05Z INFO Updated state #011: Remove `pointset.points.filter_differential_pressure_sensor.value_state` -2025-08-21T06:57:05Z INFO Updated state #011: Set `timestamp` = `2025-08-21T06:57:05Z` -2025-08-21T06:57:05Z DEBUG Updated state has last_config 2025-08-21T06:57:02Z (expecting 2025-08-21T06:57:02Z) -2025-08-21T06:57:05Z DEBUG Value state null == null (true) -2025-08-21T06:57:05Z DEBUG Detail target point has value_state default (null) is now: null -2025-08-21T06:57:05Z DEBUG Recorded sequence: 1. Wait until target point has value_state default (null) -2025-08-21T06:57:05Z DEBUG Stage finished waiting for target point has value_state default (null) at @26s after 8s -2025-08-21T06:57:05Z TRACE Stage resume waiting for executing test at @26s -2025-08-21T06:57:05Z TRACE Stage suspend waiting for executing test at @26s -2025-08-21T06:57:05Z INFO Stage start waiting for target point has value_state updating at @26s -2025-08-21T06:57:05Z DEBUG Delay from lastConfigApplied 2025-08-21T06:57:03.605917991Z is -393ms -2025-08-21T06:57:05Z DEBUG System config extra field null -2025-08-21T06:57:06Z TRACE Updated check config_system: false -2025-08-21T06:57:06Z TRACE Updated check config_pointset: true -2025-08-21T06:57:06Z DEBUG Update config_pointset, adding configTransaction RC:3109d1.0000000c -2025-08-21T06:57:06Z TRACE Updated check config_gateway: false -2025-08-21T06:57:06Z TRACE Updated check config_localnet: false -2025-08-21T06:57:06Z TRACE Updated check config_blobset: false -2025-08-21T06:57:06Z TRACE Updated check config_discovery: false -2025-08-21T06:57:06Z DEBUG Using pre-config state timestamp 2025-08-21T06:57:05Z -2025-08-21T06:57:06Z DEBUG Update lastConfigIssued 2025-08-21T06:57:06Z, because before target point has value_state updating -2025-08-21T06:57:06Z TRACE Stage suspend waiting for target point has value_state updating at @26s -2025-08-21T06:57:06Z INFO Stage start waiting for config update synchronized at @26s -2025-08-21T06:57:06Z DEBUG Received command AHU-1/state/system as MP:51d894a1-0 -2025-08-21T06:57:06Z TRACE Received state_system: { -2025-08-21T06:57:06Z TRACE Received state_system: "hardware" : { -2025-08-21T06:57:06Z TRACE Received state_system: "make" : "BOS", -2025-08-21T06:57:06Z TRACE Received state_system: "model" : "pubber" -2025-08-21T06:57:06Z TRACE Received state_system: }, -2025-08-21T06:57:06Z TRACE Received state_system: "last_config" : "2025-08-21T06:57:02Z", -2025-08-21T06:57:06Z TRACE Received state_system: "operation" : { -2025-08-21T06:57:06Z TRACE Received state_system: "operational" : true, -2025-08-21T06:57:06Z TRACE Received state_system: "last_start" : "2025-08-21T06:55:44Z", -2025-08-21T06:57:06Z TRACE Received state_system: "restart_count" : 1, -2025-08-21T06:57:06Z TRACE Received state_system: "mode" : "initial" -2025-08-21T06:57:06Z TRACE Received state_system: }, -2025-08-21T06:57:06Z TRACE Received state_system: "serial_no" : "742132", -2025-08-21T06:57:06Z TRACE Received state_system: "software" : { -2025-08-21T06:57:06Z TRACE Received state_system: "firmware" : "v1" -2025-08-21T06:57:06Z TRACE Received state_system: }, -2025-08-21T06:57:06Z TRACE Received state_system: "status" : { -2025-08-21T06:57:06Z TRACE Received state_system: "message" : "success", -2025-08-21T06:57:06Z TRACE Received state_system: "category" : "system.config.apply", -2025-08-21T06:57:06Z TRACE Received state_system: "timestamp" : "2025-08-21T06:57:02Z", -2025-08-21T06:57:06Z TRACE Received state_system: "level" : 300 -2025-08-21T06:57:06Z TRACE Received state_system: }, -2025-08-21T06:57:06Z TRACE Received state_system: "timestamp" : "2025-08-21T06:57:05Z", -2025-08-21T06:57:06Z TRACE Received state_system: "version" : "1.5.3" -2025-08-21T06:57:06Z TRACE Received state_system: } -2025-08-21T06:57:06Z DEBUG Handling device message state_system MP:51d894a1-0 -2025-08-21T06:57:06Z TRACE Ignoring partial state update -2025-08-21T06:57:06Z DEBUG Received command AHU-1/state/discovery as MP:51d894a1-1 -2025-08-21T06:57:06Z TRACE Received state_discovery: { -2025-08-21T06:57:06Z TRACE Received state_discovery: "families" : { }, -2025-08-21T06:57:06Z TRACE Received state_discovery: "timestamp" : "2025-08-21T06:57:05Z", -2025-08-21T06:57:06Z TRACE Received state_discovery: "version" : "1.5.3" -2025-08-21T06:57:06Z TRACE Received state_discovery: } -2025-08-21T06:57:06Z DEBUG Handling device message state_discovery MP:51d894a1-1 -2025-08-21T06:57:06Z TRACE Ignoring partial state update -2025-08-21T06:57:06Z DEBUG Received command AHU-1/state/localnet as MP:51d894a1-2 -2025-08-21T06:57:06Z TRACE Received state_localnet: { -2025-08-21T06:57:06Z TRACE Received state_localnet: "families" : { -2025-08-21T06:57:06Z TRACE Received state_localnet: "ether" : { -2025-08-21T06:57:06Z TRACE Received state_localnet: "addr" : "42:01:ac:10:83:22" -2025-08-21T06:57:06Z TRACE Received state_localnet: }, -2025-08-21T06:57:06Z TRACE Received state_localnet: "ipv4" : { -2025-08-21T06:57:06Z TRACE Received state_localnet: "addr" : "172.16.131.34" -2025-08-21T06:57:06Z TRACE Received state_localnet: }, -2025-08-21T06:57:06Z TRACE Received state_localnet: "vendor" : { -2025-08-21T06:57:06Z TRACE Received state_localnet: "addr" : "28179023" -2025-08-21T06:57:06Z TRACE Received state_localnet: }, -2025-08-21T06:57:06Z TRACE Received state_localnet: "bacnet" : { -2025-08-21T06:57:06Z TRACE Received state_localnet: "addr" : "27312" -2025-08-21T06:57:06Z TRACE Received state_localnet: } -2025-08-21T06:57:06Z TRACE Received state_localnet: }, -2025-08-21T06:57:06Z TRACE Received state_localnet: "timestamp" : "2025-08-21T06:57:05Z", -2025-08-21T06:57:06Z TRACE Received state_localnet: "version" : "1.5.3" -2025-08-21T06:57:06Z TRACE Received state_localnet: } -2025-08-21T06:57:06Z DEBUG Handling device message state_localnet MP:51d894a1-2 -2025-08-21T06:57:06Z TRACE Ignoring partial state update -2025-08-21T06:57:06Z DEBUG Received command AHU-1/state/pointset as MP:51d894a1-3 -2025-08-21T06:57:06Z TRACE Received state_pointset: { -2025-08-21T06:57:06Z TRACE Received state_pointset: "points" : { -2025-08-21T06:57:06Z TRACE Received state_pointset: "filter_alarm_pressure_status" : { -2025-08-21T06:57:06Z TRACE Received state_pointset: "units" : "No-units" -2025-08-21T06:57:06Z TRACE Received state_pointset: }, -2025-08-21T06:57:06Z TRACE Received state_pointset: "filter_differential_pressure_setpoint" : { -2025-08-21T06:57:06Z TRACE Received state_pointset: "units" : "Bars" -2025-08-21T06:57:06Z TRACE Received state_pointset: }, -2025-08-21T06:57:06Z TRACE Received state_pointset: "filter_differential_pressure_sensor" : { -2025-08-21T06:57:06Z TRACE Received state_pointset: "units" : "Degrees-Celsius" -2025-08-21T06:57:06Z TRACE Received state_pointset: } -2025-08-21T06:57:06Z TRACE Received state_pointset: }, -2025-08-21T06:57:06Z TRACE Received state_pointset: "timestamp" : "2025-08-21T06:57:05Z", -2025-08-21T06:57:06Z TRACE Received state_pointset: "version" : "1.5.3" -2025-08-21T06:57:06Z TRACE Received state_pointset: } -2025-08-21T06:57:06Z DEBUG Handling device message state_pointset MP:51d894a1-3 -2025-08-21T06:57:06Z TRACE Ignoring partial state update -2025-08-21T06:57:07Z DEBUG Received command AHU-1/config/update as RC:3109d1.0000000c -2025-08-21T06:57:07Z DEBUG Received config_update -2025-08-21T06:57:07Z DEBUG Handling update message config_update RC:3109d1.0000000c -2025-08-21T06:57:07Z DEBUG Removed configTransaction RC:3109d1.0000000c -2025-08-21T06:57:07Z DEBUG Set last_start changed false, last_start 2025-08-21T06:55:44Z -2025-08-21T06:57:07Z DEBUG Updated config 2025-08-21T06:57:06Z RC:3109d1.0000000c -2025-08-21T06:57:07Z INFO Updated config #009: Changed 1 fields: -2025-08-21T06:57:07Z INFO Updated config #009: Add `pointset.points.filter_differential_pressure_setpoint.set_value` = `60` -2025-08-21T06:57:07Z DEBUG Expected last_config now 2025-08-21T06:57:06Z -2025-08-21T06:57:07Z DEBUG Detail config update synchronized is now: device state not updated since config issued, last_config not synced in state -2025-08-21T06:57:07Z DEBUG Received command AHU-1/config/pointset as CU:3109d1.0000000c -2025-08-21T06:57:07Z TRACE Received config_pointset: { -2025-08-21T06:57:07Z TRACE Received config_pointset: "operation" : "REPLY" -2025-08-21T06:57:07Z TRACE Received config_pointset: } -2025-08-21T06:57:07Z DEBUG Handling device message config_pointset CU:3109d1.0000000c -2025-08-21T06:57:07Z TRACE Ignoring echo configTransaction CU:3109d1.0000000c -2025-08-21T06:57:08Z DEBUG Received command AHU-1/state/update as MP:cec94173 -2025-08-21T06:57:08Z DEBUG Received state_update -2025-08-21T06:57:08Z DEBUG Handling update message state_update MP:cec94173 -2025-08-21T06:57:08Z DEBUG Capturing AHU-1 message state_update -2025-08-21T06:57:08Z DEBUG Updated state after 1s 2025-08-21T06:57:07Z MP:cec94173 -2025-08-21T06:57:08Z INFO Updated state #012: Changed 6 fields: -2025-08-21T06:57:08Z INFO Updated state #012: Set `system.last_config` = `2025-08-21T06:57:06Z` -2025-08-21T06:57:08Z INFO Updated state #012: Set `system.status.timestamp` = `2025-08-21T06:57:06Z` -2025-08-21T06:57:08Z INFO Updated state #012: Add `pointset.points.filter_alarm_pressure_status.value_state` = `updating` -2025-08-21T06:57:08Z INFO Updated state #012: Add `pointset.points.filter_differential_pressure_setpoint.value_state` = `updating` -2025-08-21T06:57:08Z INFO Updated state #012: Add `pointset.points.filter_differential_pressure_sensor.value_state` = `updating` -2025-08-21T06:57:08Z INFO Updated state #012: Set `timestamp` = `2025-08-21T06:57:07Z` -2025-08-21T06:57:08Z DEBUG Updated state has last_config 2025-08-21T06:57:06Z (expecting 2025-08-21T06:57:06Z) -2025-08-21T06:57:08Z DEBUG Received command AHU-1/state/system as MP:cec94173-0 -2025-08-21T06:57:08Z TRACE Received state_system: { -2025-08-21T06:57:08Z TRACE Received state_system: "hardware" : { -2025-08-21T06:57:08Z TRACE Received state_system: "make" : "BOS", -2025-08-21T06:57:08Z TRACE Received state_system: "model" : "pubber" -2025-08-21T06:57:08Z TRACE Received state_system: }, -2025-08-21T06:57:08Z TRACE Received state_system: "last_config" : "2025-08-21T06:57:06Z", -2025-08-21T06:57:08Z TRACE Received state_system: "operation" : { -2025-08-21T06:57:08Z TRACE Received state_system: "operational" : true, -2025-08-21T06:57:08Z TRACE Received state_system: "last_start" : "2025-08-21T06:55:44Z", -2025-08-21T06:57:08Z TRACE Received state_system: "restart_count" : 1, -2025-08-21T06:57:08Z TRACE Received state_system: "mode" : "initial" -2025-08-21T06:57:08Z TRACE Received state_system: }, -2025-08-21T06:57:08Z TRACE Received state_system: "serial_no" : "742132", -2025-08-21T06:57:08Z TRACE Received state_system: "software" : { -2025-08-21T06:57:08Z TRACE Received state_system: "firmware" : "v1" -2025-08-21T06:57:08Z TRACE Received state_system: }, -2025-08-21T06:57:08Z TRACE Received state_system: "status" : { -2025-08-21T06:57:08Z TRACE Received state_system: "message" : "success", -2025-08-21T06:57:08Z TRACE Received state_system: "category" : "system.config.apply", -2025-08-21T06:57:08Z TRACE Received state_system: "timestamp" : "2025-08-21T06:57:06Z", -2025-08-21T06:57:08Z TRACE Received state_system: "level" : 300 -2025-08-21T06:57:08Z TRACE Received state_system: }, -2025-08-21T06:57:08Z TRACE Received state_system: "timestamp" : "2025-08-21T06:57:07Z", -2025-08-21T06:57:08Z TRACE Received state_system: "version" : "1.5.3" -2025-08-21T06:57:08Z TRACE Received state_system: } -2025-08-21T06:57:08Z DEBUG Handling device message state_system MP:cec94173-0 -2025-08-21T06:57:08Z TRACE Ignoring partial state update -2025-08-21T06:57:08Z DEBUG Detail config update synchronized is now: null -2025-08-21T06:57:08Z DEBUG Stage finished waiting for config update synchronized at @28s after 2s -2025-08-21T06:57:08Z TRACE Stage resume waiting for target point has value_state updating at @28s -2025-08-21T06:57:08Z DEBUG Config sync took 2s -2025-08-21T06:57:08Z DEBUG Finished wait for config sync pending: null -2025-08-21T06:57:08Z DEBUG New lastConfigApplied at 2025-08-21T06:57:08Z -2025-08-21T06:57:08Z DEBUG Update config before target point has value_state updating timestamp 2025-08-21T06:57:06Z -2025-08-21T06:57:08Z DEBUG Recorded sequence: 1. Update config before target point has value_state updating -2025-08-21T06:57:08Z INFO Device config Add `pointset.points.filter_differential_pressure_setpoint.set_value` = `60` -2025-08-21T06:57:08Z TRACE Update config before target point has value_state updating: Add `pointset.points.filter_differential_pressure_setpoint.set_value` = `60` -2025-08-21T06:57:08Z DEBUG Value state updating == applied (false) -2025-08-21T06:57:08Z DEBUG Value state updating == updating (true) -2025-08-21T06:57:08Z DEBUG Value state updating == applied (false) -2025-08-21T06:57:08Z DEBUG Value state updating == updating (true) -2025-08-21T06:57:08Z DEBUG Recorded sequence: 1. Wait until target point has value_state updating -2025-08-21T06:57:08Z DEBUG Stage finished waiting for target point has value_state updating at @28s after 2s -2025-08-21T06:57:08Z TRACE Stage resume waiting for executing test at @28s -2025-08-21T06:57:08Z TRACE Stage suspend waiting for executing test at @28s -2025-08-21T06:57:08Z INFO Stage start waiting for target point has value_state applied at @28s -2025-08-21T06:57:08Z DEBUG Delay from lastConfigApplied 2025-08-21T06:57:08.025285455Z is 1999ms -2025-08-21T06:57:08Z DEBUG Rate-limiting config by 1999ms -2025-08-21T06:57:10Z DEBUG System config extra field null -2025-08-21T06:57:10Z TRACE Updated check config_system: false -2025-08-21T06:57:10Z TRACE Updated check config_pointset: false -2025-08-21T06:57:10Z TRACE Updated check config_gateway: false -2025-08-21T06:57:10Z TRACE Updated check config_localnet: false -2025-08-21T06:57:10Z TRACE Updated check config_blobset: false -2025-08-21T06:57:10Z TRACE Updated check config_discovery: false -2025-08-21T06:57:10Z DEBUG New lastConfigApplied at 2025-08-21T06:57:10Z -2025-08-21T06:57:10Z DEBUG Update config before target point has value_state applied timestamp 2025-08-21T06:57:06Z -2025-08-21T06:57:10Z DEBUG Value state updating == applied (false) -2025-08-21T06:57:10Z DEBUG Value state updating == applied (false) -2025-08-21T06:57:10Z DEBUG Received command AHU-1/state/discovery as MP:cec94173-1 -2025-08-21T06:57:10Z TRACE Received state_discovery: { -2025-08-21T06:57:10Z TRACE Received state_discovery: "families" : { }, -2025-08-21T06:57:10Z TRACE Received state_discovery: "timestamp" : "2025-08-21T06:57:07Z", -2025-08-21T06:57:10Z TRACE Received state_discovery: "version" : "1.5.3" -2025-08-21T06:57:10Z TRACE Received state_discovery: } -2025-08-21T06:57:10Z DEBUG Handling device message state_discovery MP:cec94173-1 -2025-08-21T06:57:10Z TRACE Ignoring partial state update -2025-08-21T06:57:10Z DEBUG Value state updating == applied (false) -2025-08-21T06:57:10Z DEBUG Received command AHU-1/state/localnet as MP:cec94173-2 -2025-08-21T06:57:10Z TRACE Received state_localnet: { -2025-08-21T06:57:10Z TRACE Received state_localnet: "families" : { -2025-08-21T06:57:10Z TRACE Received state_localnet: "ether" : { -2025-08-21T06:57:10Z TRACE Received state_localnet: "addr" : "42:01:ac:10:83:22" -2025-08-21T06:57:10Z TRACE Received state_localnet: }, -2025-08-21T06:57:10Z TRACE Received state_localnet: "ipv4" : { -2025-08-21T06:57:10Z TRACE Received state_localnet: "addr" : "172.16.131.34" -2025-08-21T06:57:10Z TRACE Received state_localnet: }, -2025-08-21T06:57:10Z TRACE Received state_localnet: "vendor" : { -2025-08-21T06:57:10Z TRACE Received state_localnet: "addr" : "28179023" -2025-08-21T06:57:10Z TRACE Received state_localnet: }, -2025-08-21T06:57:10Z TRACE Received state_localnet: "bacnet" : { -2025-08-21T06:57:10Z TRACE Received state_localnet: "addr" : "27312" -2025-08-21T06:57:10Z TRACE Received state_localnet: } -2025-08-21T06:57:10Z TRACE Received state_localnet: }, -2025-08-21T06:57:10Z TRACE Received state_localnet: "timestamp" : "2025-08-21T06:57:07Z", -2025-08-21T06:57:10Z TRACE Received state_localnet: "version" : "1.5.3" -2025-08-21T06:57:10Z TRACE Received state_localnet: } -2025-08-21T06:57:10Z DEBUG Handling device message state_localnet MP:cec94173-2 -2025-08-21T06:57:10Z TRACE Ignoring partial state update -2025-08-21T06:57:10Z DEBUG Value state updating == applied (false) -2025-08-21T06:57:10Z DEBUG Received command AHU-1/state/pointset as MP:cec94173-3 -2025-08-21T06:57:10Z TRACE Received state_pointset: { -2025-08-21T06:57:10Z TRACE Received state_pointset: "points" : { -2025-08-21T06:57:10Z TRACE Received state_pointset: "filter_alarm_pressure_status" : { -2025-08-21T06:57:10Z TRACE Received state_pointset: "units" : "No-units", -2025-08-21T06:57:10Z TRACE Received state_pointset: "value_state" : "updating" -2025-08-21T06:57:10Z TRACE Received state_pointset: }, -2025-08-21T06:57:10Z TRACE Received state_pointset: "filter_differential_pressure_setpoint" : { -2025-08-21T06:57:10Z TRACE Received state_pointset: "units" : "Bars", -2025-08-21T06:57:10Z TRACE Received state_pointset: "value_state" : "updating" -2025-08-21T06:57:10Z TRACE Received state_pointset: }, -2025-08-21T06:57:10Z TRACE Received state_pointset: "filter_differential_pressure_sensor" : { -2025-08-21T06:57:10Z TRACE Received state_pointset: "units" : "Degrees-Celsius", -2025-08-21T06:57:10Z TRACE Received state_pointset: "value_state" : "updating" -2025-08-21T06:57:10Z TRACE Received state_pointset: } -2025-08-21T06:57:10Z TRACE Received state_pointset: }, -2025-08-21T06:57:10Z TRACE Received state_pointset: "timestamp" : "2025-08-21T06:57:07Z", -2025-08-21T06:57:10Z TRACE Received state_pointset: "version" : "1.5.3" -2025-08-21T06:57:10Z TRACE Received state_pointset: } -2025-08-21T06:57:10Z DEBUG Handling device message state_pointset MP:cec94173-3 -2025-08-21T06:57:10Z TRACE Ignoring partial state update -2025-08-21T06:57:10Z DEBUG Value state updating == applied (false) -2025-08-21T06:57:10Z DEBUG Received command AHU-1/state/update as MP:fa216e61 -2025-08-21T06:57:10Z DEBUG Received state_update -2025-08-21T06:57:10Z DEBUG Handling update message state_update MP:fa216e61 -2025-08-21T06:57:10Z DEBUG Capturing AHU-1 message state_update -2025-08-21T06:57:10Z DEBUG Updated state after 1s 2025-08-21T06:57:09Z MP:fa216e61 -2025-08-21T06:57:10Z INFO Updated state #013: Changed 4 fields: -2025-08-21T06:57:10Z INFO Updated state #013: Remove `pointset.points.filter_alarm_pressure_status.value_state` -2025-08-21T06:57:10Z INFO Updated state #013: Set `pointset.points.filter_differential_pressure_setpoint.value_state` = `applied` -2025-08-21T06:57:10Z INFO Updated state #013: Remove `pointset.points.filter_differential_pressure_sensor.value_state` -2025-08-21T06:57:10Z INFO Updated state #013: Set `timestamp` = `2025-08-21T06:57:09Z` -2025-08-21T06:57:10Z DEBUG Updated state has last_config 2025-08-21T06:57:06Z (expecting 2025-08-21T06:57:06Z) -2025-08-21T06:57:10Z DEBUG Value state applied == applied (true) -2025-08-21T06:57:10Z DEBUG Detail target point has value_state applied is now: null -2025-08-21T06:57:10Z DEBUG Recorded sequence: 1. Wait until target point has value_state applied -2025-08-21T06:57:10Z DEBUG Stage finished waiting for target point has value_state applied at @30s after 2s -2025-08-21T06:57:10Z TRACE Stage resume waiting for executing test at @30s -2025-08-21T06:57:10Z DEBUG stage done waiting for executing test at @30s -2025-08-21T06:57:10Z DEBUG Removing implicit system capability LAST_CONFIG -2025-08-21T06:57:10Z NOTICE RESULT pass writeback writeback_operation ALPHA 10/10 Sequence complete -2025-08-21T06:57:10Z NOTICE Sequence complete -2025-08-21T06:57:10Z NOTICE Ending test writeback_operation after @30s ################################ +2025-08-21T14:02:35Z NOTICE Starting test writeback_operation ################################ +2025-08-21T14:02:35Z INFO Stage start waiting for starting test wrapper at @0s +2025-08-21T14:02:43Z DEBUG Clear configTransactions and reset device config +2025-08-21T14:02:43Z TRACE Suppressing exception: java.lang.NullPointerException: Cannot read field "system" because "this.deviceState" is null, at com.google.daq.mqtt.sequencer.SequenceBase.lambda$resetDeviceConfig$13(SequenceBase.java:788) +2025-08-21T14:02:43Z DEBUG Configuring device last_start to be 1970-01-01T00:01:13Z +2025-08-21T14:02:43Z DEBUG Set last_start changed true, last_start 1970-01-01T00:01:13Z +2025-08-21T14:02:43Z DEBUG Set extraFieldChanged false because extra_field null +2025-08-21T14:02:43Z DEBUG Allowing device state change (everything) +2025-08-21T14:02:43Z DEBUG Starting reset_config full reset true +2025-08-21T14:02:43Z DEBUG Clear configTransactions and reset device config +2025-08-21T14:02:43Z TRACE Suppressing exception: java.lang.NullPointerException: Cannot read field "system" because "this.deviceState" is null, at com.google.daq.mqtt.sequencer.SequenceBase.lambda$resetDeviceConfig$13(SequenceBase.java:788) +2025-08-21T14:02:43Z DEBUG Configuring device last_start to be 1970-01-01T00:01:13Z +2025-08-21T14:02:43Z DEBUG Set last_start changed true, last_start 1970-01-01T00:01:13Z +2025-08-21T14:02:43Z DEBUG Set extraFieldChanged false because extra_field null +2025-08-21T14:02:43Z DEBUG Set extraFieldChanged true because extra_field reset_config +2025-08-21T14:02:43Z DEBUG Clear configTransactions and reset device config +2025-08-21T14:02:43Z TRACE Suppressing exception: java.lang.NullPointerException: Cannot read field "system" because "this.deviceState" is null, at com.google.daq.mqtt.sequencer.SequenceBase.lambda$resetDeviceConfig$13(SequenceBase.java:788) +2025-08-21T14:02:43Z DEBUG Configuring device last_start to be 1970-01-01T00:01:13Z +2025-08-21T14:02:43Z DEBUG Set last_start changed true, last_start 1970-01-01T00:01:13Z +2025-08-21T14:02:43Z DEBUG Set extraFieldChanged true because extra_field null +2025-08-21T14:02:43Z TRACE Suppressing exception: java.lang.NullPointerException: Cannot read field "timestamp" because "this.deviceState" is null, at com.google.daq.mqtt.sequencer.SequenceBase.lambda$ensureStateConfigHoldoff$48(SequenceBase.java:1404) +2025-08-21T14:02:43Z DEBUG Delay from lastConfigApplied 2025-08-21T14:02:35.064714689Z is -6058ms +2025-08-21T14:02:43Z TRACE Updated check config_update: true +2025-08-21T14:02:43Z DEBUG Update config_update, adding configTransaction RC:785c42.00000004 +2025-08-21T14:02:43Z TRACE Suppressing exception: java.lang.NullPointerException: Cannot read field "system" because "this.deviceState" is null, at com.google.daq.mqtt.sequencer.SequenceBase.lambda$configIsPending$105(SequenceBase.java:2254) +2025-08-21T14:02:43Z TRACE Suppressing exception: java.lang.NullPointerException: Cannot read field "system" because "this.deviceState" is null, at com.google.daq.mqtt.sequencer.SequenceBase.lambda$configIsPending$107(SequenceBase.java:2258) +2025-08-21T14:02:43Z TRACE Suppressing exception: java.lang.NullPointerException: Cannot read field "timestamp" because "this.deviceState" is null, at com.google.daq.mqtt.sequencer.SequenceBase.lambda$configIsPending$109(SequenceBase.java:2265) +2025-08-21T14:02:43Z TRACE Suppressing exception: java.lang.NullPointerException: Cannot read field "system" because "this.deviceState" is null, at com.google.daq.mqtt.sequencer.SequenceBase.lambda$configIsPending$105(SequenceBase.java:2254) +2025-08-21T14:02:43Z TRACE Suppressing exception: java.lang.NullPointerException: Cannot read field "system" because "this.deviceState" is null, at com.google.daq.mqtt.sequencer.SequenceBase.lambda$configIsPending$107(SequenceBase.java:2258) +2025-08-21T14:02:43Z TRACE Suppressing exception: java.lang.NullPointerException: Cannot read field "timestamp" because "this.deviceState" is null, at com.google.daq.mqtt.sequencer.SequenceBase.lambda$configIsPending$109(SequenceBase.java:2265) +2025-08-21T14:02:43Z DEBUG Using pre-config state timestamp 1970-01-01T00:00:00Z +2025-08-21T14:02:43Z DEBUG Update lastConfigIssued 2025-08-21T14:02:43Z, because soft reset +2025-08-21T14:02:43Z TRACE Stage suspend waiting for starting test wrapper at @8s +2025-08-21T14:02:43Z INFO Stage start waiting for config update synchronized at @8s +2025-08-21T14:02:43Z DEBUG Received command AHU-1/state/validation as RC:785c42.00000002 +2025-08-21T14:02:43Z TRACE Received state_validation: { +2025-08-21T14:02:43Z TRACE Received state_validation: "operation" : "REPLY" +2025-08-21T14:02:43Z TRACE Received state_validation: } +2025-08-21T14:02:43Z DEBUG Handling device message state_validation RC:785c42.00000002 +2025-08-21T14:02:43Z TRACE Ignoring partial state update +2025-08-21T14:02:43Z TRACE Suppressing exception: java.lang.NullPointerException: Cannot read field "system" because "this.deviceState" is null, at com.google.daq.mqtt.sequencer.SequenceBase.lambda$configIsPending$105(SequenceBase.java:2254) +2025-08-21T14:02:43Z TRACE Suppressing exception: java.lang.NullPointerException: Cannot read field "system" because "this.deviceState" is null, at com.google.daq.mqtt.sequencer.SequenceBase.lambda$configIsPending$107(SequenceBase.java:2258) +2025-08-21T14:02:43Z TRACE Suppressing exception: java.lang.NullPointerException: Cannot read field "timestamp" because "this.deviceState" is null, at com.google.daq.mqtt.sequencer.SequenceBase.lambda$configIsPending$109(SequenceBase.java:2265) +2025-08-21T14:02:43Z DEBUG Received command AHU-1/state/validation as RC:785c42.00000003 +2025-08-21T14:02:43Z TRACE Received state_validation: { +2025-08-21T14:02:43Z TRACE Received state_validation: "operation" : "REPLY" +2025-08-21T14:02:43Z TRACE Received state_validation: } +2025-08-21T14:02:43Z DEBUG Handling device message state_validation RC:785c42.00000003 +2025-08-21T14:02:43Z TRACE Ignoring partial state update +2025-08-21T14:02:43Z TRACE Suppressing exception: java.lang.NullPointerException: Cannot read field "system" because "this.deviceState" is null, at com.google.daq.mqtt.sequencer.SequenceBase.lambda$configIsPending$105(SequenceBase.java:2254) +2025-08-21T14:02:43Z TRACE Suppressing exception: java.lang.NullPointerException: Cannot read field "system" because "this.deviceState" is null, at com.google.daq.mqtt.sequencer.SequenceBase.lambda$configIsPending$107(SequenceBase.java:2258) +2025-08-21T14:02:43Z TRACE Suppressing exception: java.lang.NullPointerException: Cannot read field "timestamp" because "this.deviceState" is null, at com.google.daq.mqtt.sequencer.SequenceBase.lambda$configIsPending$109(SequenceBase.java:2265) +2025-08-21T14:02:44Z DEBUG Received command AHU-1/state/update as MP:5940ed1b +2025-08-21T14:02:44Z DEBUG Received state_update +2025-08-21T14:02:44Z DEBUG Handling update message state_update MP:5940ed1b +2025-08-21T14:02:44Z DEBUG Capturing AHU-1 message state_update +2025-08-21T14:02:44Z DEBUG Updated state after 1s 2025-08-21T14:02:43Z MP:5940ed1b +2025-08-21T14:02:44Z INFO Initial state #001: { +2025-08-21T14:02:44Z INFO Initial state #001: "timestamp" : "2025-08-21T14:02:43Z", +2025-08-21T14:02:44Z INFO Initial state #001: "version" : "1.5.3", +2025-08-21T14:02:44Z INFO Initial state #001: "system" : { +2025-08-21T14:02:44Z INFO Initial state #001: "last_config" : "2025-08-21T14:01:29Z", +2025-08-21T14:02:44Z INFO Initial state #001: "operation" : { +2025-08-21T14:02:44Z INFO Initial state #001: "operational" : true, +2025-08-21T14:02:44Z INFO Initial state #001: "last_start" : "2025-08-21T14:02:13Z", +2025-08-21T14:02:44Z INFO Initial state #001: "restart_count" : 1, +2025-08-21T14:02:44Z INFO Initial state #001: "mode" : "initial" +2025-08-21T14:02:44Z INFO Initial state #001: }, +2025-08-21T14:02:44Z INFO Initial state #001: "serial_no" : "742178", +2025-08-21T14:02:44Z INFO Initial state #001: "hardware" : { +2025-08-21T14:02:44Z INFO Initial state #001: "make" : "BOS", +2025-08-21T14:02:44Z INFO Initial state #001: "model" : "pubber" +2025-08-21T14:02:44Z INFO Initial state #001: }, +2025-08-21T14:02:44Z INFO Initial state #001: "software" : { +2025-08-21T14:02:44Z INFO Initial state #001: "firmware" : "v1" +2025-08-21T14:02:44Z INFO Initial state #001: }, +2025-08-21T14:02:44Z INFO Initial state #001: "status" : { +2025-08-21T14:02:44Z INFO Initial state #001: "message" : "success", +2025-08-21T14:02:44Z INFO Initial state #001: "category" : "system.config.parse", +2025-08-21T14:02:44Z INFO Initial state #001: "timestamp" : "2025-08-21T14:02:43Z", +2025-08-21T14:02:44Z INFO Initial state #001: "level" : 100 +2025-08-21T14:02:44Z INFO Initial state #001: } +2025-08-21T14:02:44Z INFO Initial state #001: }, +2025-08-21T14:02:44Z INFO Initial state #001: "discovery" : { +2025-08-21T14:02:44Z INFO Initial state #001: "families" : { } +2025-08-21T14:02:44Z INFO Initial state #001: }, +2025-08-21T14:02:44Z INFO Initial state #001: "localnet" : { +2025-08-21T14:02:44Z INFO Initial state #001: "families" : { +2025-08-21T14:02:44Z INFO Initial state #001: "ether" : { +2025-08-21T14:02:44Z INFO Initial state #001: "addr" : "42:01:ac:10:83:22" +2025-08-21T14:02:44Z INFO Initial state #001: }, +2025-08-21T14:02:44Z INFO Initial state #001: "ipv4" : { +2025-08-21T14:02:44Z INFO Initial state #001: "addr" : "172.16.131.34" +2025-08-21T14:02:44Z INFO Initial state #001: }, +2025-08-21T14:02:44Z INFO Initial state #001: "vendor" : { +2025-08-21T14:02:44Z INFO Initial state #001: "addr" : "28179023" +2025-08-21T14:02:44Z INFO Initial state #001: }, +2025-08-21T14:02:44Z INFO Initial state #001: "bacnet" : { +2025-08-21T14:02:44Z INFO Initial state #001: "addr" : "27312" +2025-08-21T14:02:44Z INFO Initial state #001: } +2025-08-21T14:02:44Z INFO Initial state #001: } +2025-08-21T14:02:44Z INFO Initial state #001: }, +2025-08-21T14:02:44Z INFO Initial state #001: "pointset" : { +2025-08-21T14:02:44Z INFO Initial state #001: "points" : { +2025-08-21T14:02:44Z INFO Initial state #001: "filter_alarm_pressure_status" : { +2025-08-21T14:02:44Z INFO Initial state #001: "units" : "No-units" +2025-08-21T14:02:44Z INFO Initial state #001: }, +2025-08-21T14:02:44Z INFO Initial state #001: "filter_differential_pressure_setpoint" : { +2025-08-21T14:02:44Z INFO Initial state #001: "units" : "Bars", +2025-08-21T14:02:44Z INFO Initial state #001: "value_state" : "applied" +2025-08-21T14:02:44Z INFO Initial state #001: }, +2025-08-21T14:02:44Z INFO Initial state #001: "filter_differential_pressure_sensor" : { +2025-08-21T14:02:44Z INFO Initial state #001: "units" : "Degrees-Celsius" +2025-08-21T14:02:44Z INFO Initial state #001: } +2025-08-21T14:02:44Z INFO Initial state #001: } +2025-08-21T14:02:44Z INFO Initial state #001: } +2025-08-21T14:02:44Z INFO Initial state #001: } +2025-08-21T14:02:44Z NOTICE Received serial number 742178 +2025-08-21T14:02:44Z DEBUG Updated state has last_config 2025-08-21T14:01:29Z (expecting null) +2025-08-21T14:02:44Z DEBUG Detail config update synchronized is now: last_start not synced in config, config transactions not cleared, last_config not synced in state +2025-08-21T14:02:44Z DEBUG Received command AHU-1/config/update as RC:785c42.00000004 +2025-08-21T14:02:44Z DEBUG Received config_update +2025-08-21T14:02:44Z DEBUG Handling update message config_update RC:785c42.00000004 +2025-08-21T14:02:44Z DEBUG Removed configTransaction RC:785c42.00000004 +2025-08-21T14:02:44Z DEBUG Set last_start changed false, last_start 1970-01-01T00:01:13Z +2025-08-21T14:02:44Z DEBUG Updated config 2025-08-21T14:02:43Z RC:785c42.00000004 +2025-08-21T14:02:44Z INFO Updated config #001: { +2025-08-21T14:02:44Z INFO Updated config #001: "timestamp" : "2025-08-21T14:02:43Z", +2025-08-21T14:02:44Z INFO Updated config #001: "version" : "@@@cloud udmi version###1.5.1-265-gf6769c13-dirty", +2025-08-21T14:02:44Z INFO Updated config #001: "system" : { +2025-08-21T14:02:44Z INFO Updated config #001: "min_loglevel" : 200, +2025-08-21T14:02:44Z INFO Updated config #001: "metrics_rate_sec" : 10, +2025-08-21T14:02:44Z INFO Updated config #001: "operation" : { +2025-08-21T14:02:44Z INFO Updated config #001: "last_start" : "1970-01-01T00:01:13Z" +2025-08-21T14:02:44Z INFO Updated config #001: }, +2025-08-21T14:02:44Z INFO Updated config #001: "testing" : { +2025-08-21T14:02:44Z INFO Updated config #001: "sequence_name" : "writeback_operation" +2025-08-21T14:02:44Z INFO Updated config #001: } +2025-08-21T14:02:44Z INFO Updated config #001: }, +2025-08-21T14:02:44Z INFO Updated config #001: "discovery" : { +2025-08-21T14:02:44Z INFO Updated config #001: "families" : { +2025-08-21T14:02:44Z INFO Updated config #001: "vendor" : { }, +2025-08-21T14:02:44Z INFO Updated config #001: "bacnet" : { } +2025-08-21T14:02:44Z INFO Updated config #001: } +2025-08-21T14:02:44Z INFO Updated config #001: }, +2025-08-21T14:02:44Z INFO Updated config #001: "localnet" : { +2025-08-21T14:02:44Z INFO Updated config #001: "families" : { +2025-08-21T14:02:44Z INFO Updated config #001: "ether" : { }, +2025-08-21T14:02:44Z INFO Updated config #001: "ipv4" : { }, +2025-08-21T14:02:44Z INFO Updated config #001: "vendor" : { }, +2025-08-21T14:02:44Z INFO Updated config #001: "bacnet" : { } +2025-08-21T14:02:44Z INFO Updated config #001: } +2025-08-21T14:02:44Z INFO Updated config #001: }, +2025-08-21T14:02:44Z INFO Updated config #001: "pointset" : { +2025-08-21T14:02:44Z INFO Updated config #001: "points" : { +2025-08-21T14:02:44Z INFO Updated config #001: "filter_differential_pressure_setpoint" : { +2025-08-21T14:02:44Z INFO Updated config #001: "units" : "Bars", +2025-08-21T14:02:44Z INFO Updated config #001: "set_value" : 98 +2025-08-21T14:02:44Z INFO Updated config #001: }, +2025-08-21T14:02:44Z INFO Updated config #001: "filter_alarm_pressure_status" : { +2025-08-21T14:02:44Z INFO Updated config #001: "ref" : "BV11.present_value", +2025-08-21T14:02:44Z INFO Updated config #001: "units" : "No-units" +2025-08-21T14:02:44Z INFO Updated config #001: }, +2025-08-21T14:02:44Z INFO Updated config #001: "filter_differential_pressure_sensor" : { +2025-08-21T14:02:44Z INFO Updated config #001: "ref" : "AV12.present_value", +2025-08-21T14:02:44Z INFO Updated config #001: "units" : "Degrees-Celsius" +2025-08-21T14:02:44Z INFO Updated config #001: } +2025-08-21T14:02:44Z INFO Updated config #001: } +2025-08-21T14:02:44Z INFO Updated config #001: } +2025-08-21T14:02:44Z INFO Updated config #001: } +2025-08-21T14:02:44Z DEBUG Expected last_config now 2025-08-21T14:02:43Z +2025-08-21T14:02:44Z DEBUG Received command AHU-1/config/update as CU:785c42.00000004 +2025-08-21T14:02:44Z DEBUG Received config_update +2025-08-21T14:02:44Z DEBUG Handling update message config_update CU:785c42.00000004 +2025-08-21T14:02:44Z DEBUG Ignoring operation reply CU:785c42.00000004 +2025-08-21T14:02:44Z DEBUG Detail config update synchronized is now: last_start not synced in config, last_config not synced in state +2025-08-21T14:02:44Z DEBUG Received command AHU-1/state/system as MP:5940ed1b-0 +2025-08-21T14:02:44Z TRACE Received state_system: { +2025-08-21T14:02:44Z TRACE Received state_system: "hardware" : { +2025-08-21T14:02:44Z TRACE Received state_system: "make" : "BOS", +2025-08-21T14:02:44Z TRACE Received state_system: "model" : "pubber" +2025-08-21T14:02:44Z TRACE Received state_system: }, +2025-08-21T14:02:44Z TRACE Received state_system: "last_config" : "2025-08-21T14:01:29Z", +2025-08-21T14:02:44Z TRACE Received state_system: "operation" : { +2025-08-21T14:02:44Z TRACE Received state_system: "operational" : true, +2025-08-21T14:02:44Z TRACE Received state_system: "last_start" : "2025-08-21T14:02:13Z", +2025-08-21T14:02:44Z TRACE Received state_system: "restart_count" : 1, +2025-08-21T14:02:44Z TRACE Received state_system: "mode" : "initial" +2025-08-21T14:02:44Z TRACE Received state_system: }, +2025-08-21T14:02:44Z TRACE Received state_system: "serial_no" : "742178", +2025-08-21T14:02:44Z TRACE Received state_system: "software" : { +2025-08-21T14:02:44Z TRACE Received state_system: "firmware" : "v1" +2025-08-21T14:02:44Z TRACE Received state_system: }, +2025-08-21T14:02:44Z TRACE Received state_system: "status" : { +2025-08-21T14:02:44Z TRACE Received state_system: "message" : "success", +2025-08-21T14:02:44Z TRACE Received state_system: "category" : "system.config.parse", +2025-08-21T14:02:44Z TRACE Received state_system: "timestamp" : "2025-08-21T14:02:43Z", +2025-08-21T14:02:44Z TRACE Received state_system: "level" : 100 +2025-08-21T14:02:44Z TRACE Received state_system: }, +2025-08-21T14:02:44Z TRACE Received state_system: "timestamp" : "2025-08-21T14:02:43Z", +2025-08-21T14:02:44Z TRACE Received state_system: "version" : "1.5.3" +2025-08-21T14:02:44Z TRACE Received state_system: } +2025-08-21T14:02:44Z DEBUG Handling device message state_system MP:5940ed1b-0 +2025-08-21T14:02:44Z TRACE Ignoring partial state update +2025-08-21T14:02:44Z DEBUG Received command AHU-1/state/discovery as MP:5940ed1b-1 +2025-08-21T14:02:44Z TRACE Received state_discovery: { +2025-08-21T14:02:44Z TRACE Received state_discovery: "families" : { }, +2025-08-21T14:02:44Z TRACE Received state_discovery: "timestamp" : "2025-08-21T14:02:43Z", +2025-08-21T14:02:44Z TRACE Received state_discovery: "version" : "1.5.3" +2025-08-21T14:02:44Z TRACE Received state_discovery: } +2025-08-21T14:02:44Z DEBUG Handling device message state_discovery MP:5940ed1b-1 +2025-08-21T14:02:44Z TRACE Ignoring partial state update +2025-08-21T14:02:44Z DEBUG Received command AHU-1/state/localnet as MP:5940ed1b-2 +2025-08-21T14:02:44Z TRACE Received state_localnet: { +2025-08-21T14:02:44Z TRACE Received state_localnet: "families" : { +2025-08-21T14:02:44Z TRACE Received state_localnet: "ether" : { +2025-08-21T14:02:44Z TRACE Received state_localnet: "addr" : "42:01:ac:10:83:22" +2025-08-21T14:02:44Z TRACE Received state_localnet: }, +2025-08-21T14:02:44Z TRACE Received state_localnet: "ipv4" : { +2025-08-21T14:02:44Z TRACE Received state_localnet: "addr" : "172.16.131.34" +2025-08-21T14:02:44Z TRACE Received state_localnet: }, +2025-08-21T14:02:44Z TRACE Received state_localnet: "vendor" : { +2025-08-21T14:02:44Z TRACE Received state_localnet: "addr" : "28179023" +2025-08-21T14:02:44Z TRACE Received state_localnet: }, +2025-08-21T14:02:44Z TRACE Received state_localnet: "bacnet" : { +2025-08-21T14:02:44Z TRACE Received state_localnet: "addr" : "27312" +2025-08-21T14:02:44Z TRACE Received state_localnet: } +2025-08-21T14:02:44Z TRACE Received state_localnet: }, +2025-08-21T14:02:44Z TRACE Received state_localnet: "timestamp" : "2025-08-21T14:02:43Z", +2025-08-21T14:02:44Z TRACE Received state_localnet: "version" : "1.5.3" +2025-08-21T14:02:44Z TRACE Received state_localnet: } +2025-08-21T14:02:44Z DEBUG Handling device message state_localnet MP:5940ed1b-2 +2025-08-21T14:02:44Z TRACE Ignoring partial state update +2025-08-21T14:02:44Z DEBUG Received command AHU-1/state/pointset as MP:5940ed1b-3 +2025-08-21T14:02:44Z TRACE Received state_pointset: { +2025-08-21T14:02:44Z TRACE Received state_pointset: "points" : { +2025-08-21T14:02:44Z TRACE Received state_pointset: "filter_alarm_pressure_status" : { +2025-08-21T14:02:44Z TRACE Received state_pointset: "units" : "No-units" +2025-08-21T14:02:44Z TRACE Received state_pointset: }, +2025-08-21T14:02:44Z TRACE Received state_pointset: "filter_differential_pressure_setpoint" : { +2025-08-21T14:02:44Z TRACE Received state_pointset: "units" : "Bars", +2025-08-21T14:02:44Z TRACE Received state_pointset: "value_state" : "applied" +2025-08-21T14:02:44Z TRACE Received state_pointset: }, +2025-08-21T14:02:44Z TRACE Received state_pointset: "filter_differential_pressure_sensor" : { +2025-08-21T14:02:44Z TRACE Received state_pointset: "units" : "Degrees-Celsius" +2025-08-21T14:02:44Z TRACE Received state_pointset: } +2025-08-21T14:02:44Z TRACE Received state_pointset: }, +2025-08-21T14:02:44Z TRACE Received state_pointset: "timestamp" : "2025-08-21T14:02:43Z", +2025-08-21T14:02:44Z TRACE Received state_pointset: "version" : "1.5.3" +2025-08-21T14:02:44Z TRACE Received state_pointset: } +2025-08-21T14:02:44Z DEBUG Handling device message state_pointset MP:5940ed1b-3 +2025-08-21T14:02:44Z TRACE Ignoring partial state update +2025-08-21T14:02:44Z DEBUG Received command AHU-1/config/update as MP:5940ed1b +2025-08-21T14:02:44Z DEBUG Received config_update +2025-08-21T14:02:44Z DEBUG Handling update message config_update MP:5940ed1b +2025-08-21T14:02:44Z DEBUG Set last_start changed true, last_start 2025-08-21T14:02:13Z +2025-08-21T14:02:44Z DEBUG Updated config 2025-08-21T14:02:43Z MP:5940ed1b +2025-08-21T14:02:44Z INFO Updated config #002: Changed 0 fields. +2025-08-21T14:02:44Z DEBUG Expected last_config now 2025-08-21T14:02:43Z +2025-08-21T14:02:44Z DEBUG Received command AHU-1/events/system as MP:50b1e927 +2025-08-21T14:02:44Z DEBUG Received events_system 2025-08-21T14:02:43Z INFO device.log: Device AHU-1 config handler +2025-08-21T14:02:44Z DEBUG Received events_system 2025-08-21T14:02:43Z INFO device.log: 2025-08-21T14:02:43Z received config 2025-08-21T14:02:43Z +2025-08-21T14:02:44Z DEBUG Received events_system 2025-08-21T14:02:43Z INFO device.log: Applying slow writeback for point filter_alarm_pressure_status with 3s delay +2025-08-21T14:02:44Z DEBUG Received events_system 2025-08-21T14:02:43Z INFO device.log: Applying slow writeback for point filter_differential_pressure_setpoint with 3s delay +2025-08-21T14:02:44Z DEBUG Received events_system 2025-08-21T14:02:43Z INFO device.log: Applying slow writeback for point filter_differential_pressure_sensor with 3s delay +2025-08-21T14:02:44Z DEBUG Received events_system 2025-08-21T14:02:43Z NOTICE system.config.apply: success +2025-08-21T14:02:44Z DEBUG Received events_system 2025-08-21T14:02:43Z INFO device.log: Device AHU-1 config handler +2025-08-21T14:02:44Z DEBUG Received events_system 2025-08-21T14:02:43Z INFO device.log: 2025-08-21T14:02:43Z received config 2025-08-21T14:02:43Z +2025-08-21T14:02:44Z DEBUG Received events_system 2025-08-21T14:02:43Z INFO device.log: Applying slow writeback for point filter_alarm_pressure_status with 3s delay +2025-08-21T14:02:44Z DEBUG Received events_system 2025-08-21T14:02:43Z INFO device.log: Applying slow writeback for point filter_differential_pressure_setpoint with 3s delay +2025-08-21T14:02:44Z DEBUG Received events_system 2025-08-21T14:02:43Z INFO device.log: Applying slow writeback for point filter_differential_pressure_sensor with 3s delay +2025-08-21T14:02:44Z DEBUG Received events_system 2025-08-21T14:02:43Z NOTICE system.config.apply: success +2025-08-21T14:02:44Z DEBUG Handling device message events_system MP:50b1e927 +2025-08-21T14:02:44Z DEBUG Capturing AHU-1 message events_system +2025-08-21T14:02:44Z DEBUG Detail config update synchronized is now: last_config not synced in state +2025-08-21T14:02:44Z DEBUG Received command AHU-1/events/pointset as MP:b1d506b5 +2025-08-21T14:02:44Z TRACE Received events_pointset: { +2025-08-21T14:02:44Z TRACE Received events_pointset: "points" : { +2025-08-21T14:02:44Z TRACE Received events_pointset: "filter_alarm_pressure_status" : { +2025-08-21T14:02:44Z TRACE Received events_pointset: "present_value" : true +2025-08-21T14:02:44Z TRACE Received events_pointset: }, +2025-08-21T14:02:44Z TRACE Received events_pointset: "filter_differential_pressure_setpoint" : { +2025-08-21T14:02:44Z TRACE Received events_pointset: "present_value" : 60 +2025-08-21T14:02:44Z TRACE Received events_pointset: }, +2025-08-21T14:02:44Z TRACE Received events_pointset: "filter_differential_pressure_sensor" : { +2025-08-21T14:02:44Z TRACE Received events_pointset: "present_value" : 12 +2025-08-21T14:02:44Z TRACE Received events_pointset: } +2025-08-21T14:02:44Z TRACE Received events_pointset: }, +2025-08-21T14:02:44Z TRACE Received events_pointset: "timestamp" : "2025-08-21T14:02:44Z", +2025-08-21T14:02:44Z TRACE Received events_pointset: "version" : "1.5.3" +2025-08-21T14:02:44Z TRACE Received events_pointset: } +2025-08-21T14:02:44Z DEBUG Handling device message events_pointset MP:b1d506b5 +2025-08-21T14:02:44Z DEBUG Capturing AHU-1 message events_pointset +2025-08-21T14:02:45Z DEBUG Received command AHU-1/state/update as MP:15f21bc8 +2025-08-21T14:02:45Z DEBUG Received state_update +2025-08-21T14:02:45Z DEBUG Handling update message state_update MP:15f21bc8 +2025-08-21T14:02:45Z DEBUG Capturing AHU-1 message state_update +2025-08-21T14:02:45Z DEBUG Updated state after 0s 2025-08-21T14:02:45Z MP:15f21bc8 +2025-08-21T14:02:45Z INFO Updated state #002: Changed 7 fields: +2025-08-21T14:02:45Z INFO Updated state #002: Set `system.last_config` = `2025-08-21T14:02:43Z` +2025-08-21T14:02:45Z INFO Updated state #002: Set `system.status.level` = `300` +2025-08-21T14:02:45Z INFO Updated state #002: Set `system.status.category` = `system.config.apply` +2025-08-21T14:02:45Z INFO Updated state #002: Add `pointset.points.filter_alarm_pressure_status.value_state` = `updating` +2025-08-21T14:02:45Z INFO Updated state #002: Set `pointset.points.filter_differential_pressure_setpoint.value_state` = `updating` +2025-08-21T14:02:45Z INFO Updated state #002: Add `pointset.points.filter_differential_pressure_sensor.value_state` = `updating` +2025-08-21T14:02:45Z INFO Updated state #002: Set `timestamp` = `2025-08-21T14:02:45Z` +2025-08-21T14:02:45Z DEBUG Updated state has last_config 2025-08-21T14:02:43Z (expecting 2025-08-21T14:02:43Z) +2025-08-21T14:02:45Z DEBUG Received command AHU-1/state/system as MP:15f21bc8-0 +2025-08-21T14:02:45Z TRACE Received state_system: { +2025-08-21T14:02:45Z TRACE Received state_system: "hardware" : { +2025-08-21T14:02:45Z TRACE Received state_system: "make" : "BOS", +2025-08-21T14:02:45Z TRACE Received state_system: "model" : "pubber" +2025-08-21T14:02:45Z TRACE Received state_system: }, +2025-08-21T14:02:45Z TRACE Received state_system: "last_config" : "2025-08-21T14:02:43Z", +2025-08-21T14:02:45Z TRACE Received state_system: "operation" : { +2025-08-21T14:02:45Z TRACE Received state_system: "operational" : true, +2025-08-21T14:02:45Z TRACE Received state_system: "last_start" : "2025-08-21T14:02:13Z", +2025-08-21T14:02:45Z TRACE Received state_system: "restart_count" : 1, +2025-08-21T14:02:45Z TRACE Received state_system: "mode" : "initial" +2025-08-21T14:02:45Z TRACE Received state_system: }, +2025-08-21T14:02:45Z TRACE Received state_system: "serial_no" : "742178", +2025-08-21T14:02:45Z TRACE Received state_system: "software" : { +2025-08-21T14:02:45Z TRACE Received state_system: "firmware" : "v1" +2025-08-21T14:02:45Z TRACE Received state_system: }, +2025-08-21T14:02:45Z TRACE Received state_system: "status" : { +2025-08-21T14:02:45Z TRACE Received state_system: "message" : "success", +2025-08-21T14:02:45Z TRACE Received state_system: "category" : "system.config.apply", +2025-08-21T14:02:45Z TRACE Received state_system: "timestamp" : "2025-08-21T14:02:43Z", +2025-08-21T14:02:45Z TRACE Received state_system: "level" : 300 +2025-08-21T14:02:45Z TRACE Received state_system: }, +2025-08-21T14:02:45Z TRACE Received state_system: "timestamp" : "2025-08-21T14:02:45Z", +2025-08-21T14:02:45Z TRACE Received state_system: "version" : "1.5.3" +2025-08-21T14:02:45Z TRACE Received state_system: } +2025-08-21T14:02:45Z DEBUG Handling device message state_system MP:15f21bc8-0 +2025-08-21T14:02:45Z TRACE Ignoring partial state update +2025-08-21T14:02:45Z DEBUG Detail config update synchronized is now: null +2025-08-21T14:02:45Z DEBUG Stage finished waiting for config update synchronized at @10s after 2s +2025-08-21T14:02:45Z TRACE Stage resume waiting for starting test wrapper at @10s +2025-08-21T14:02:45Z DEBUG Config sync took 2s +2025-08-21T14:02:45Z DEBUG Finished wait for config sync pending: null +2025-08-21T14:02:45Z DEBUG New lastConfigApplied at 2025-08-21T14:02:45Z +2025-08-21T14:02:45Z DEBUG Update config soft reset timestamp 2025-08-21T14:02:43Z +2025-08-21T14:02:45Z TRACE Update config soft reset: Add `discovery` = { "families": { "vendor": { }, "bacnet": { } } } +2025-08-21T14:02:45Z TRACE Update config soft reset: Add `pointset` = { "points": { "filter_differential_pressure_setpoint": { "set_value": `98`, "units": `Bars` }, "filter_alarm_pressure_status": { "ref": `BV11.present_value`, "units": `No-units` }, "filter_differential_pressure_sensor": { "ref": `AV12.present_value`, "units": `Degrees-Celsius` } } } +2025-08-21T14:02:45Z TRACE Update config soft reset: Add `localnet` = { "families": { "ether": { }, "ipv4": { }, "vendor": { }, "bacnet": { } } } +2025-08-21T14:02:45Z TRACE Update config soft reset: Add `timestamp` = `generated timestamp` +2025-08-21T14:02:45Z DEBUG Done with reset_config +2025-08-21T14:02:45Z TRACE Stage suspend waiting for starting test wrapper at @10s +2025-08-21T14:02:45Z INFO Stage start waiting for config update synchronized at @10s +2025-08-21T14:02:45Z DEBUG Received command AHU-1/state/discovery as MP:15f21bc8-1 +2025-08-21T14:02:45Z TRACE Received state_discovery: { +2025-08-21T14:02:45Z TRACE Received state_discovery: "families" : { }, +2025-08-21T14:02:45Z TRACE Received state_discovery: "timestamp" : "2025-08-21T14:02:45Z", +2025-08-21T14:02:45Z TRACE Received state_discovery: "version" : "1.5.3" +2025-08-21T14:02:45Z TRACE Received state_discovery: } +2025-08-21T14:02:45Z DEBUG Handling device message state_discovery MP:15f21bc8-1 +2025-08-21T14:02:45Z TRACE Ignoring partial state update +2025-08-21T14:02:45Z DEBUG Received command AHU-1/state/localnet as MP:15f21bc8-2 +2025-08-21T14:02:45Z TRACE Received state_localnet: { +2025-08-21T14:02:45Z TRACE Received state_localnet: "families" : { +2025-08-21T14:02:45Z TRACE Received state_localnet: "ether" : { +2025-08-21T14:02:45Z TRACE Received state_localnet: "addr" : "42:01:ac:10:83:22" +2025-08-21T14:02:45Z TRACE Received state_localnet: }, +2025-08-21T14:02:45Z TRACE Received state_localnet: "ipv4" : { +2025-08-21T14:02:45Z TRACE Received state_localnet: "addr" : "172.16.131.34" +2025-08-21T14:02:45Z TRACE Received state_localnet: }, +2025-08-21T14:02:45Z TRACE Received state_localnet: "vendor" : { +2025-08-21T14:02:45Z TRACE Received state_localnet: "addr" : "28179023" +2025-08-21T14:02:45Z TRACE Received state_localnet: }, +2025-08-21T14:02:45Z TRACE Received state_localnet: "bacnet" : { +2025-08-21T14:02:45Z TRACE Received state_localnet: "addr" : "27312" +2025-08-21T14:02:45Z TRACE Received state_localnet: } +2025-08-21T14:02:45Z TRACE Received state_localnet: }, +2025-08-21T14:02:45Z TRACE Received state_localnet: "timestamp" : "2025-08-21T14:02:45Z", +2025-08-21T14:02:45Z TRACE Received state_localnet: "version" : "1.5.3" +2025-08-21T14:02:45Z TRACE Received state_localnet: } +2025-08-21T14:02:45Z DEBUG Handling device message state_localnet MP:15f21bc8-2 +2025-08-21T14:02:45Z TRACE Ignoring partial state update +2025-08-21T14:02:45Z DEBUG Stage finished waiting for config update synchronized at @10s after 0s +2025-08-21T14:02:45Z TRACE Stage resume waiting for starting test wrapper at @10s +2025-08-21T14:02:45Z DEBUG Config sync took 2s +2025-08-21T14:02:45Z DEBUG Finished wait for config sync pending: null +2025-08-21T14:02:45Z DEBUG Disallowing device state change (everything) +2025-08-21T14:02:46Z DEBUG Delay from lastConfigApplied 2025-08-21T14:02:45.460286582Z is 1461ms +2025-08-21T14:02:46Z DEBUG Rate-limiting config by 1461ms +2025-08-21T14:02:47Z TRACE Updated check config_update: true +2025-08-21T14:02:47Z DEBUG Update config_update, adding configTransaction RC:785c42.00000005 +2025-08-21T14:02:47Z DEBUG Using pre-config state timestamp 2025-08-21T14:02:45Z +2025-08-21T14:02:47Z DEBUG Update lastConfigIssued 2025-08-21T14:02:47Z, because initial setup +2025-08-21T14:02:47Z TRACE Stage suspend waiting for starting test wrapper at @12s +2025-08-21T14:02:47Z INFO Stage start waiting for config update synchronized at @12s +2025-08-21T14:02:47Z DEBUG Received command AHU-1/state/pointset as MP:15f21bc8-3 +2025-08-21T14:02:47Z TRACE Received state_pointset: { +2025-08-21T14:02:47Z TRACE Received state_pointset: "points" : { +2025-08-21T14:02:47Z TRACE Received state_pointset: "filter_alarm_pressure_status" : { +2025-08-21T14:02:47Z TRACE Received state_pointset: "units" : "No-units", +2025-08-21T14:02:47Z TRACE Received state_pointset: "value_state" : "updating" +2025-08-21T14:02:47Z TRACE Received state_pointset: }, +2025-08-21T14:02:47Z TRACE Received state_pointset: "filter_differential_pressure_setpoint" : { +2025-08-21T14:02:47Z TRACE Received state_pointset: "units" : "Bars", +2025-08-21T14:02:47Z TRACE Received state_pointset: "value_state" : "updating" +2025-08-21T14:02:47Z TRACE Received state_pointset: }, +2025-08-21T14:02:47Z TRACE Received state_pointset: "filter_differential_pressure_sensor" : { +2025-08-21T14:02:47Z TRACE Received state_pointset: "units" : "Degrees-Celsius", +2025-08-21T14:02:47Z TRACE Received state_pointset: "value_state" : "updating" +2025-08-21T14:02:47Z TRACE Received state_pointset: } +2025-08-21T14:02:47Z TRACE Received state_pointset: }, +2025-08-21T14:02:47Z TRACE Received state_pointset: "timestamp" : "2025-08-21T14:02:45Z", +2025-08-21T14:02:47Z TRACE Received state_pointset: "version" : "1.5.3" +2025-08-21T14:02:47Z TRACE Received state_pointset: } +2025-08-21T14:02:47Z DEBUG Handling device message state_pointset MP:15f21bc8-3 +2025-08-21T14:02:47Z TRACE Ignoring partial state update +2025-08-21T14:02:47Z DEBUG Received command AHU-1/state/update as MP:33276f87 +2025-08-21T14:02:47Z DEBUG Received state_update +2025-08-21T14:02:47Z DEBUG Handling update message state_update MP:33276f87 +2025-08-21T14:02:47Z DEBUG Capturing AHU-1 message state_update +2025-08-21T14:02:47Z DEBUG Updated state after 0s 2025-08-21T14:02:47Z MP:33276f87 +2025-08-21T14:02:47Z INFO Updated state #003: Changed 4 fields: +2025-08-21T14:02:47Z INFO Updated state #003: Remove `pointset.points.filter_alarm_pressure_status.value_state` +2025-08-21T14:02:47Z INFO Updated state #003: Set `pointset.points.filter_differential_pressure_setpoint.value_state` = `applied` +2025-08-21T14:02:47Z INFO Updated state #003: Remove `pointset.points.filter_differential_pressure_sensor.value_state` +2025-08-21T14:02:47Z INFO Updated state #003: Set `timestamp` = `2025-08-21T14:02:47Z` +2025-08-21T14:02:47Z DEBUG Updated state has last_config 2025-08-21T14:02:43Z (expecting 2025-08-21T14:02:43Z) +2025-08-21T14:02:47Z DEBUG Received command AHU-1/state/system as MP:33276f87-0 +2025-08-21T14:02:47Z TRACE Received state_system: { +2025-08-21T14:02:47Z TRACE Received state_system: "hardware" : { +2025-08-21T14:02:47Z TRACE Received state_system: "make" : "BOS", +2025-08-21T14:02:47Z TRACE Received state_system: "model" : "pubber" +2025-08-21T14:02:47Z TRACE Received state_system: }, +2025-08-21T14:02:47Z TRACE Received state_system: "last_config" : "2025-08-21T14:02:43Z", +2025-08-21T14:02:47Z TRACE Received state_system: "operation" : { +2025-08-21T14:02:47Z TRACE Received state_system: "operational" : true, +2025-08-21T14:02:47Z TRACE Received state_system: "last_start" : "2025-08-21T14:02:13Z", +2025-08-21T14:02:47Z TRACE Received state_system: "restart_count" : 1, +2025-08-21T14:02:47Z TRACE Received state_system: "mode" : "initial" +2025-08-21T14:02:47Z TRACE Received state_system: }, +2025-08-21T14:02:47Z TRACE Received state_system: "serial_no" : "742178", +2025-08-21T14:02:47Z TRACE Received state_system: "software" : { +2025-08-21T14:02:47Z TRACE Received state_system: "firmware" : "v1" +2025-08-21T14:02:47Z TRACE Received state_system: }, +2025-08-21T14:02:47Z TRACE Received state_system: "status" : { +2025-08-21T14:02:47Z TRACE Received state_system: "message" : "success", +2025-08-21T14:02:47Z TRACE Received state_system: "category" : "system.config.apply", +2025-08-21T14:02:47Z TRACE Received state_system: "timestamp" : "2025-08-21T14:02:43Z", +2025-08-21T14:02:47Z TRACE Received state_system: "level" : 300 +2025-08-21T14:02:47Z TRACE Received state_system: }, +2025-08-21T14:02:47Z TRACE Received state_system: "timestamp" : "2025-08-21T14:02:47Z", +2025-08-21T14:02:47Z TRACE Received state_system: "version" : "1.5.3" +2025-08-21T14:02:47Z TRACE Received state_system: } +2025-08-21T14:02:47Z DEBUG Handling device message state_system MP:33276f87-0 +2025-08-21T14:02:47Z TRACE Ignoring partial state update +2025-08-21T14:02:47Z DEBUG Received command AHU-1/state/discovery as MP:33276f87-1 +2025-08-21T14:02:47Z TRACE Received state_discovery: { +2025-08-21T14:02:47Z TRACE Received state_discovery: "families" : { }, +2025-08-21T14:02:47Z TRACE Received state_discovery: "timestamp" : "2025-08-21T14:02:47Z", +2025-08-21T14:02:47Z TRACE Received state_discovery: "version" : "1.5.3" +2025-08-21T14:02:47Z TRACE Received state_discovery: } +2025-08-21T14:02:47Z DEBUG Handling device message state_discovery MP:33276f87-1 +2025-08-21T14:02:47Z TRACE Ignoring partial state update +2025-08-21T14:02:47Z DEBUG Received command AHU-1/state/localnet as MP:33276f87-2 +2025-08-21T14:02:47Z TRACE Received state_localnet: { +2025-08-21T14:02:47Z TRACE Received state_localnet: "families" : { +2025-08-21T14:02:47Z TRACE Received state_localnet: "ether" : { +2025-08-21T14:02:47Z TRACE Received state_localnet: "addr" : "42:01:ac:10:83:22" +2025-08-21T14:02:47Z TRACE Received state_localnet: }, +2025-08-21T14:02:47Z TRACE Received state_localnet: "ipv4" : { +2025-08-21T14:02:47Z TRACE Received state_localnet: "addr" : "172.16.131.34" +2025-08-21T14:02:47Z TRACE Received state_localnet: }, +2025-08-21T14:02:47Z TRACE Received state_localnet: "vendor" : { +2025-08-21T14:02:47Z TRACE Received state_localnet: "addr" : "28179023" +2025-08-21T14:02:47Z TRACE Received state_localnet: }, +2025-08-21T14:02:47Z TRACE Received state_localnet: "bacnet" : { +2025-08-21T14:02:47Z TRACE Received state_localnet: "addr" : "27312" +2025-08-21T14:02:47Z TRACE Received state_localnet: } +2025-08-21T14:02:47Z TRACE Received state_localnet: }, +2025-08-21T14:02:47Z TRACE Received state_localnet: "timestamp" : "2025-08-21T14:02:47Z", +2025-08-21T14:02:47Z TRACE Received state_localnet: "version" : "1.5.3" +2025-08-21T14:02:47Z TRACE Received state_localnet: } +2025-08-21T14:02:47Z DEBUG Handling device message state_localnet MP:33276f87-2 +2025-08-21T14:02:47Z TRACE Ignoring partial state update +2025-08-21T14:02:47Z DEBUG Received command AHU-1/state/pointset as MP:33276f87-3 +2025-08-21T14:02:47Z TRACE Received state_pointset: { +2025-08-21T14:02:47Z TRACE Received state_pointset: "points" : { +2025-08-21T14:02:47Z TRACE Received state_pointset: "filter_alarm_pressure_status" : { +2025-08-21T14:02:47Z TRACE Received state_pointset: "units" : "No-units" +2025-08-21T14:02:47Z TRACE Received state_pointset: }, +2025-08-21T14:02:47Z TRACE Received state_pointset: "filter_differential_pressure_setpoint" : { +2025-08-21T14:02:47Z TRACE Received state_pointset: "units" : "Bars", +2025-08-21T14:02:47Z TRACE Received state_pointset: "value_state" : "applied" +2025-08-21T14:02:47Z TRACE Received state_pointset: }, +2025-08-21T14:02:47Z TRACE Received state_pointset: "filter_differential_pressure_sensor" : { +2025-08-21T14:02:47Z TRACE Received state_pointset: "units" : "Degrees-Celsius" +2025-08-21T14:02:47Z TRACE Received state_pointset: } +2025-08-21T14:02:47Z TRACE Received state_pointset: }, +2025-08-21T14:02:47Z TRACE Received state_pointset: "timestamp" : "2025-08-21T14:02:47Z", +2025-08-21T14:02:47Z TRACE Received state_pointset: "version" : "1.5.3" +2025-08-21T14:02:47Z TRACE Received state_pointset: } +2025-08-21T14:02:47Z DEBUG Handling device message state_pointset MP:33276f87-3 +2025-08-21T14:02:47Z TRACE Ignoring partial state update +2025-08-21T14:02:48Z DEBUG Received command AHU-1/config/update as RC:785c42.00000005 +2025-08-21T14:02:48Z DEBUG Received config_update +2025-08-21T14:02:48Z DEBUG Handling update message config_update RC:785c42.00000005 +2025-08-21T14:02:48Z DEBUG Removed configTransaction RC:785c42.00000005 +2025-08-21T14:02:48Z DEBUG Set last_start changed false, last_start 2025-08-21T14:02:13Z +2025-08-21T14:02:48Z DEBUG Updated config 2025-08-21T14:02:47Z RC:785c42.00000005 +2025-08-21T14:02:48Z INFO Updated config #003: Changed 0 fields. +2025-08-21T14:02:48Z DEBUG Expected last_config now 2025-08-21T14:02:47Z +2025-08-21T14:02:48Z DEBUG Detail config update synchronized is now: last_config not synced in state +2025-08-21T14:02:48Z DEBUG Received command AHU-1/config/update as CU:785c42.00000005 +2025-08-21T14:02:48Z DEBUG Received config_update +2025-08-21T14:02:48Z DEBUG Handling update message config_update CU:785c42.00000005 +2025-08-21T14:02:48Z DEBUG Ignoring operation reply CU:785c42.00000005 +2025-08-21T14:02:49Z DEBUG Received command AHU-1/state/update as MP:17635cdb +2025-08-21T14:02:49Z DEBUG Received state_update +2025-08-21T14:02:49Z DEBUG Handling update message state_update MP:17635cdb +2025-08-21T14:02:49Z DEBUG Capturing AHU-1 message state_update +2025-08-21T14:02:49Z DEBUG Updated state after 0s 2025-08-21T14:02:49Z MP:17635cdb +2025-08-21T14:02:49Z INFO Updated state #004: Changed 6 fields: +2025-08-21T14:02:49Z INFO Updated state #004: Set `system.last_config` = `2025-08-21T14:02:47Z` +2025-08-21T14:02:49Z INFO Updated state #004: Set `system.status.timestamp` = `2025-08-21T14:02:47Z` +2025-08-21T14:02:49Z INFO Updated state #004: Add `pointset.points.filter_alarm_pressure_status.value_state` = `updating` +2025-08-21T14:02:49Z INFO Updated state #004: Set `pointset.points.filter_differential_pressure_setpoint.value_state` = `updating` +2025-08-21T14:02:49Z INFO Updated state #004: Add `pointset.points.filter_differential_pressure_sensor.value_state` = `updating` +2025-08-21T14:02:49Z INFO Updated state #004: Set `timestamp` = `2025-08-21T14:02:49Z` +2025-08-21T14:02:49Z DEBUG Updated state has last_config 2025-08-21T14:02:47Z (expecting 2025-08-21T14:02:47Z) +2025-08-21T14:02:49Z DEBUG Received command AHU-1/state/system as MP:17635cdb-0 +2025-08-21T14:02:49Z TRACE Received state_system: { +2025-08-21T14:02:49Z TRACE Received state_system: "hardware" : { +2025-08-21T14:02:49Z TRACE Received state_system: "make" : "BOS", +2025-08-21T14:02:49Z TRACE Received state_system: "model" : "pubber" +2025-08-21T14:02:49Z TRACE Received state_system: }, +2025-08-21T14:02:49Z TRACE Received state_system: "last_config" : "2025-08-21T14:02:47Z", +2025-08-21T14:02:49Z TRACE Received state_system: "operation" : { +2025-08-21T14:02:49Z TRACE Received state_system: "operational" : true, +2025-08-21T14:02:49Z TRACE Received state_system: "last_start" : "2025-08-21T14:02:13Z", +2025-08-21T14:02:49Z TRACE Received state_system: "restart_count" : 1, +2025-08-21T14:02:49Z TRACE Received state_system: "mode" : "initial" +2025-08-21T14:02:49Z TRACE Received state_system: }, +2025-08-21T14:02:49Z TRACE Received state_system: "serial_no" : "742178", +2025-08-21T14:02:49Z TRACE Received state_system: "software" : { +2025-08-21T14:02:49Z TRACE Received state_system: "firmware" : "v1" +2025-08-21T14:02:49Z TRACE Received state_system: }, +2025-08-21T14:02:49Z TRACE Received state_system: "status" : { +2025-08-21T14:02:49Z TRACE Received state_system: "message" : "success", +2025-08-21T14:02:49Z TRACE Received state_system: "category" : "system.config.apply", +2025-08-21T14:02:49Z TRACE Received state_system: "timestamp" : "2025-08-21T14:02:47Z", +2025-08-21T14:02:49Z TRACE Received state_system: "level" : 300 +2025-08-21T14:02:49Z TRACE Received state_system: }, +2025-08-21T14:02:49Z TRACE Received state_system: "timestamp" : "2025-08-21T14:02:49Z", +2025-08-21T14:02:49Z TRACE Received state_system: "version" : "1.5.3" +2025-08-21T14:02:49Z TRACE Received state_system: } +2025-08-21T14:02:49Z DEBUG Handling device message state_system MP:17635cdb-0 +2025-08-21T14:02:49Z TRACE Ignoring partial state update +2025-08-21T14:02:49Z DEBUG Detail config update synchronized is now: null +2025-08-21T14:02:49Z DEBUG Stage finished waiting for config update synchronized at @14s after 2s +2025-08-21T14:02:49Z TRACE Stage resume waiting for starting test wrapper at @14s +2025-08-21T14:02:49Z DEBUG Config sync took 2s +2025-08-21T14:02:49Z DEBUG Finished wait for config sync pending: null +2025-08-21T14:02:49Z DEBUG New lastConfigApplied at 2025-08-21T14:02:49Z +2025-08-21T14:02:49Z DEBUG Update config initial setup timestamp 2025-08-21T14:02:47Z +2025-08-21T14:02:49Z DEBUG Stale state cutoff threshold is 2025-08-21T14:02:33Z +2025-08-21T14:02:49Z DEBUG Waiting for device stateTransaction RC:785c42.00000006 (was null) +2025-08-21T14:02:49Z TRACE Stage suspend waiting for starting test wrapper at @14s +2025-08-21T14:02:49Z INFO Stage start waiting for state query at @14s +2025-08-21T14:02:49Z DEBUG Received command AHU-1/state/discovery as MP:17635cdb-1 +2025-08-21T14:02:49Z TRACE Received state_discovery: { +2025-08-21T14:02:49Z TRACE Received state_discovery: "families" : { }, +2025-08-21T14:02:49Z TRACE Received state_discovery: "timestamp" : "2025-08-21T14:02:49Z", +2025-08-21T14:02:49Z TRACE Received state_discovery: "version" : "1.5.3" +2025-08-21T14:02:49Z TRACE Received state_discovery: } +2025-08-21T14:02:49Z DEBUG Handling device message state_discovery MP:17635cdb-1 +2025-08-21T14:02:49Z TRACE Ignoring partial state update +2025-08-21T14:02:49Z DEBUG Received command AHU-1/state/localnet as MP:17635cdb-2 +2025-08-21T14:02:49Z TRACE Received state_localnet: { +2025-08-21T14:02:49Z TRACE Received state_localnet: "families" : { +2025-08-21T14:02:49Z TRACE Received state_localnet: "ether" : { +2025-08-21T14:02:49Z TRACE Received state_localnet: "addr" : "42:01:ac:10:83:22" +2025-08-21T14:02:49Z TRACE Received state_localnet: }, +2025-08-21T14:02:49Z TRACE Received state_localnet: "ipv4" : { +2025-08-21T14:02:49Z TRACE Received state_localnet: "addr" : "172.16.131.34" +2025-08-21T14:02:49Z TRACE Received state_localnet: }, +2025-08-21T14:02:49Z TRACE Received state_localnet: "vendor" : { +2025-08-21T14:02:49Z TRACE Received state_localnet: "addr" : "28179023" +2025-08-21T14:02:49Z TRACE Received state_localnet: }, +2025-08-21T14:02:49Z TRACE Received state_localnet: "bacnet" : { +2025-08-21T14:02:49Z TRACE Received state_localnet: "addr" : "27312" +2025-08-21T14:02:49Z TRACE Received state_localnet: } +2025-08-21T14:02:49Z TRACE Received state_localnet: }, +2025-08-21T14:02:49Z TRACE Received state_localnet: "timestamp" : "2025-08-21T14:02:49Z", +2025-08-21T14:02:49Z TRACE Received state_localnet: "version" : "1.5.3" +2025-08-21T14:02:49Z TRACE Received state_localnet: } +2025-08-21T14:02:49Z DEBUG Handling device message state_localnet MP:17635cdb-2 +2025-08-21T14:02:49Z TRACE Ignoring partial state update +2025-08-21T14:02:49Z DEBUG Received command AHU-1/state/pointset as MP:17635cdb-3 +2025-08-21T14:02:49Z TRACE Received state_pointset: { +2025-08-21T14:02:49Z TRACE Received state_pointset: "points" : { +2025-08-21T14:02:49Z TRACE Received state_pointset: "filter_alarm_pressure_status" : { +2025-08-21T14:02:49Z TRACE Received state_pointset: "units" : "No-units", +2025-08-21T14:02:49Z TRACE Received state_pointset: "value_state" : "updating" +2025-08-21T14:02:49Z TRACE Received state_pointset: }, +2025-08-21T14:02:49Z TRACE Received state_pointset: "filter_differential_pressure_setpoint" : { +2025-08-21T14:02:49Z TRACE Received state_pointset: "units" : "Bars", +2025-08-21T14:02:49Z TRACE Received state_pointset: "value_state" : "updating" +2025-08-21T14:02:49Z TRACE Received state_pointset: }, +2025-08-21T14:02:49Z TRACE Received state_pointset: "filter_differential_pressure_sensor" : { +2025-08-21T14:02:49Z TRACE Received state_pointset: "units" : "Degrees-Celsius", +2025-08-21T14:02:49Z TRACE Received state_pointset: "value_state" : "updating" +2025-08-21T14:02:49Z TRACE Received state_pointset: } +2025-08-21T14:02:49Z TRACE Received state_pointset: }, +2025-08-21T14:02:49Z TRACE Received state_pointset: "timestamp" : "2025-08-21T14:02:49Z", +2025-08-21T14:02:49Z TRACE Received state_pointset: "version" : "1.5.3" +2025-08-21T14:02:49Z TRACE Received state_pointset: } +2025-08-21T14:02:49Z DEBUG Handling device message state_pointset MP:17635cdb-3 +2025-08-21T14:02:49Z TRACE Ignoring partial state update +2025-08-21T14:02:50Z DEBUG Received command AHU-1/state/update as RC:785c42.00000006 +2025-08-21T14:02:50Z DEBUG Received state_update +2025-08-21T14:02:50Z DEBUG Handling update message state_update RC:785c42.00000006 +2025-08-21T14:02:50Z DEBUG Removed stateTransaction RC:785c42.00000006 +2025-08-21T14:02:50Z DEBUG Capturing AHU-1 message state_update +2025-08-21T14:02:50Z DEBUG Updated state after 1s 2025-08-21T14:02:49Z RC:785c42.00000006 +2025-08-21T14:02:50Z INFO Updated state #005: Changed 0 fields. +2025-08-21T14:02:50Z DEBUG Updated state has last_config 2025-08-21T14:02:47Z (expecting 2025-08-21T14:02:47Z) +2025-08-21T14:02:50Z DEBUG Stage finished waiting for state query at @15s after 1s +2025-08-21T14:02:50Z TRACE Stage resume waiting for starting test wrapper at @15s +2025-08-21T14:02:50Z TRACE Stage suspend waiting for starting test wrapper at @15s +2025-08-21T14:02:50Z INFO Stage start waiting for initial device state at @15s +2025-08-21T14:02:50Z DEBUG Delay from lastConfigApplied 2025-08-21T14:02:49.506873264Z is 980ms +2025-08-21T14:02:50Z DEBUG Rate-limiting config by 980ms +2025-08-21T14:02:51Z TRACE Updated check config_update: true +2025-08-21T14:02:51Z DEBUG Update config_update, adding configTransaction RC:785c42.00000007 +2025-08-21T14:02:51Z DEBUG Using pre-config state timestamp 2025-08-21T14:02:49Z +2025-08-21T14:02:51Z DEBUG Update lastConfigIssued 2025-08-21T14:02:51Z, because before initial device state +2025-08-21T14:02:51Z TRACE Stage suspend waiting for initial device state at @16s +2025-08-21T14:02:51Z INFO Stage start waiting for config update synchronized at @16s +2025-08-21T14:02:51Z DEBUG Received command AHU-1/reply/update as RC:785c42.00000006 +2025-08-21T14:02:51Z DEBUG Received command AHU-1/state/update as MP:e642772a +2025-08-21T14:02:51Z DEBUG Received state_update +2025-08-21T14:02:51Z DEBUG Handling update message state_update MP:e642772a +2025-08-21T14:02:51Z DEBUG Capturing AHU-1 message state_update +2025-08-21T14:02:51Z DEBUG Updated state after 0s 2025-08-21T14:02:51Z MP:e642772a +2025-08-21T14:02:51Z INFO Updated state #006: Changed 4 fields: +2025-08-21T14:02:51Z INFO Updated state #006: Remove `pointset.points.filter_alarm_pressure_status.value_state` +2025-08-21T14:02:51Z INFO Updated state #006: Set `pointset.points.filter_differential_pressure_setpoint.value_state` = `applied` +2025-08-21T14:02:51Z INFO Updated state #006: Remove `pointset.points.filter_differential_pressure_sensor.value_state` +2025-08-21T14:02:51Z INFO Updated state #006: Set `timestamp` = `2025-08-21T14:02:51Z` +2025-08-21T14:02:51Z DEBUG Updated state has last_config 2025-08-21T14:02:47Z (expecting 2025-08-21T14:02:47Z) +2025-08-21T14:02:51Z DEBUG Received command AHU-1/state/system as MP:e642772a-0 +2025-08-21T14:02:51Z TRACE Received state_system: { +2025-08-21T14:02:51Z TRACE Received state_system: "hardware" : { +2025-08-21T14:02:51Z TRACE Received state_system: "make" : "BOS", +2025-08-21T14:02:51Z TRACE Received state_system: "model" : "pubber" +2025-08-21T14:02:51Z TRACE Received state_system: }, +2025-08-21T14:02:51Z TRACE Received state_system: "last_config" : "2025-08-21T14:02:47Z", +2025-08-21T14:02:51Z TRACE Received state_system: "operation" : { +2025-08-21T14:02:51Z TRACE Received state_system: "operational" : true, +2025-08-21T14:02:51Z TRACE Received state_system: "last_start" : "2025-08-21T14:02:13Z", +2025-08-21T14:02:51Z TRACE Received state_system: "restart_count" : 1, +2025-08-21T14:02:51Z TRACE Received state_system: "mode" : "initial" +2025-08-21T14:02:51Z TRACE Received state_system: }, +2025-08-21T14:02:51Z TRACE Received state_system: "serial_no" : "742178", +2025-08-21T14:02:51Z TRACE Received state_system: "software" : { +2025-08-21T14:02:51Z TRACE Received state_system: "firmware" : "v1" +2025-08-21T14:02:51Z TRACE Received state_system: }, +2025-08-21T14:02:51Z TRACE Received state_system: "status" : { +2025-08-21T14:02:51Z TRACE Received state_system: "message" : "success", +2025-08-21T14:02:51Z TRACE Received state_system: "category" : "system.config.apply", +2025-08-21T14:02:51Z TRACE Received state_system: "timestamp" : "2025-08-21T14:02:47Z", +2025-08-21T14:02:51Z TRACE Received state_system: "level" : 300 +2025-08-21T14:02:51Z TRACE Received state_system: }, +2025-08-21T14:02:51Z TRACE Received state_system: "timestamp" : "2025-08-21T14:02:51Z", +2025-08-21T14:02:51Z TRACE Received state_system: "version" : "1.5.3" +2025-08-21T14:02:51Z TRACE Received state_system: } +2025-08-21T14:02:51Z DEBUG Handling device message state_system MP:e642772a-0 +2025-08-21T14:02:51Z TRACE Ignoring partial state update +2025-08-21T14:02:51Z DEBUG Received command AHU-1/state/discovery as MP:e642772a-1 +2025-08-21T14:02:51Z TRACE Received state_discovery: { +2025-08-21T14:02:51Z TRACE Received state_discovery: "families" : { }, +2025-08-21T14:02:51Z TRACE Received state_discovery: "timestamp" : "2025-08-21T14:02:51Z", +2025-08-21T14:02:51Z TRACE Received state_discovery: "version" : "1.5.3" +2025-08-21T14:02:51Z TRACE Received state_discovery: } +2025-08-21T14:02:51Z DEBUG Handling device message state_discovery MP:e642772a-1 +2025-08-21T14:02:51Z TRACE Ignoring partial state update +2025-08-21T14:02:51Z DEBUG Received command AHU-1/state/localnet as MP:e642772a-2 +2025-08-21T14:02:51Z TRACE Received state_localnet: { +2025-08-21T14:02:51Z TRACE Received state_localnet: "families" : { +2025-08-21T14:02:51Z TRACE Received state_localnet: "ether" : { +2025-08-21T14:02:51Z TRACE Received state_localnet: "addr" : "42:01:ac:10:83:22" +2025-08-21T14:02:51Z TRACE Received state_localnet: }, +2025-08-21T14:02:51Z TRACE Received state_localnet: "ipv4" : { +2025-08-21T14:02:51Z TRACE Received state_localnet: "addr" : "172.16.131.34" +2025-08-21T14:02:51Z TRACE Received state_localnet: }, +2025-08-21T14:02:51Z TRACE Received state_localnet: "vendor" : { +2025-08-21T14:02:51Z TRACE Received state_localnet: "addr" : "28179023" +2025-08-21T14:02:51Z TRACE Received state_localnet: }, +2025-08-21T14:02:51Z TRACE Received state_localnet: "bacnet" : { +2025-08-21T14:02:51Z TRACE Received state_localnet: "addr" : "27312" +2025-08-21T14:02:51Z TRACE Received state_localnet: } +2025-08-21T14:02:51Z TRACE Received state_localnet: }, +2025-08-21T14:02:51Z TRACE Received state_localnet: "timestamp" : "2025-08-21T14:02:51Z", +2025-08-21T14:02:51Z TRACE Received state_localnet: "version" : "1.5.3" +2025-08-21T14:02:51Z TRACE Received state_localnet: } +2025-08-21T14:02:51Z DEBUG Handling device message state_localnet MP:e642772a-2 +2025-08-21T14:02:51Z TRACE Ignoring partial state update +2025-08-21T14:02:51Z DEBUG Received command AHU-1/state/pointset as MP:e642772a-3 +2025-08-21T14:02:51Z TRACE Received state_pointset: { +2025-08-21T14:02:51Z TRACE Received state_pointset: "points" : { +2025-08-21T14:02:51Z TRACE Received state_pointset: "filter_alarm_pressure_status" : { +2025-08-21T14:02:51Z TRACE Received state_pointset: "units" : "No-units" +2025-08-21T14:02:51Z TRACE Received state_pointset: }, +2025-08-21T14:02:51Z TRACE Received state_pointset: "filter_differential_pressure_setpoint" : { +2025-08-21T14:02:51Z TRACE Received state_pointset: "units" : "Bars", +2025-08-21T14:02:51Z TRACE Received state_pointset: "value_state" : "applied" +2025-08-21T14:02:51Z TRACE Received state_pointset: }, +2025-08-21T14:02:51Z TRACE Received state_pointset: "filter_differential_pressure_sensor" : { +2025-08-21T14:02:51Z TRACE Received state_pointset: "units" : "Degrees-Celsius" +2025-08-21T14:02:51Z TRACE Received state_pointset: } +2025-08-21T14:02:51Z TRACE Received state_pointset: }, +2025-08-21T14:02:51Z TRACE Received state_pointset: "timestamp" : "2025-08-21T14:02:51Z", +2025-08-21T14:02:51Z TRACE Received state_pointset: "version" : "1.5.3" +2025-08-21T14:02:51Z TRACE Received state_pointset: } +2025-08-21T14:02:51Z DEBUG Handling device message state_pointset MP:e642772a-3 +2025-08-21T14:02:51Z TRACE Ignoring partial state update +2025-08-21T14:02:52Z DEBUG Received command AHU-1/config/update as RC:785c42.00000007 +2025-08-21T14:02:52Z DEBUG Received config_update +2025-08-21T14:02:52Z DEBUG Handling update message config_update RC:785c42.00000007 +2025-08-21T14:02:52Z DEBUG Removed configTransaction RC:785c42.00000007 +2025-08-21T14:02:52Z DEBUG Set last_start changed false, last_start 2025-08-21T14:02:13Z +2025-08-21T14:02:52Z DEBUG Updated config 2025-08-21T14:02:51Z RC:785c42.00000007 +2025-08-21T14:02:52Z INFO Updated config #004: Changed 0 fields. +2025-08-21T14:02:52Z DEBUG Expected last_config now 2025-08-21T14:02:51Z +2025-08-21T14:02:52Z DEBUG Detail config update synchronized is now: last_config not synced in state +2025-08-21T14:02:52Z DEBUG Received command AHU-1/config/update as CU:785c42.00000007 +2025-08-21T14:02:52Z DEBUG Received config_update +2025-08-21T14:02:52Z DEBUG Handling update message config_update CU:785c42.00000007 +2025-08-21T14:02:52Z DEBUG Ignoring operation reply CU:785c42.00000007 +2025-08-21T14:02:53Z DEBUG Received command AHU-1/state/update as MP:dc6ebc6d +2025-08-21T14:02:53Z DEBUG Received state_update +2025-08-21T14:02:53Z DEBUG Handling update message state_update MP:dc6ebc6d +2025-08-21T14:02:53Z DEBUG Capturing AHU-1 message state_update +2025-08-21T14:02:53Z DEBUG Updated state after 0s 2025-08-21T14:02:53Z MP:dc6ebc6d +2025-08-21T14:02:53Z INFO Updated state #007: Changed 6 fields: +2025-08-21T14:02:53Z INFO Updated state #007: Set `system.last_config` = `2025-08-21T14:02:51Z` +2025-08-21T14:02:53Z INFO Updated state #007: Set `system.status.timestamp` = `2025-08-21T14:02:51Z` +2025-08-21T14:02:53Z INFO Updated state #007: Add `pointset.points.filter_alarm_pressure_status.value_state` = `updating` +2025-08-21T14:02:53Z INFO Updated state #007: Set `pointset.points.filter_differential_pressure_setpoint.value_state` = `updating` +2025-08-21T14:02:53Z INFO Updated state #007: Add `pointset.points.filter_differential_pressure_sensor.value_state` = `updating` +2025-08-21T14:02:53Z INFO Updated state #007: Set `timestamp` = `2025-08-21T14:02:53Z` +2025-08-21T14:02:53Z DEBUG Updated state has last_config 2025-08-21T14:02:51Z (expecting 2025-08-21T14:02:51Z) +2025-08-21T14:02:53Z DEBUG Received command AHU-1/state/system as MP:dc6ebc6d-0 +2025-08-21T14:02:53Z TRACE Received state_system: { +2025-08-21T14:02:53Z TRACE Received state_system: "hardware" : { +2025-08-21T14:02:53Z TRACE Received state_system: "make" : "BOS", +2025-08-21T14:02:53Z TRACE Received state_system: "model" : "pubber" +2025-08-21T14:02:53Z TRACE Received state_system: }, +2025-08-21T14:02:53Z TRACE Received state_system: "last_config" : "2025-08-21T14:02:51Z", +2025-08-21T14:02:53Z TRACE Received state_system: "operation" : { +2025-08-21T14:02:53Z TRACE Received state_system: "operational" : true, +2025-08-21T14:02:53Z TRACE Received state_system: "last_start" : "2025-08-21T14:02:13Z", +2025-08-21T14:02:53Z TRACE Received state_system: "restart_count" : 1, +2025-08-21T14:02:53Z TRACE Received state_system: "mode" : "initial" +2025-08-21T14:02:53Z TRACE Received state_system: }, +2025-08-21T14:02:53Z TRACE Received state_system: "serial_no" : "742178", +2025-08-21T14:02:53Z TRACE Received state_system: "software" : { +2025-08-21T14:02:53Z TRACE Received state_system: "firmware" : "v1" +2025-08-21T14:02:53Z TRACE Received state_system: }, +2025-08-21T14:02:53Z TRACE Received state_system: "status" : { +2025-08-21T14:02:53Z TRACE Received state_system: "message" : "success", +2025-08-21T14:02:53Z TRACE Received state_system: "category" : "system.config.apply", +2025-08-21T14:02:53Z TRACE Received state_system: "timestamp" : "2025-08-21T14:02:51Z", +2025-08-21T14:02:53Z TRACE Received state_system: "level" : 300 +2025-08-21T14:02:53Z TRACE Received state_system: }, +2025-08-21T14:02:53Z TRACE Received state_system: "timestamp" : "2025-08-21T14:02:53Z", +2025-08-21T14:02:53Z TRACE Received state_system: "version" : "1.5.3" +2025-08-21T14:02:53Z TRACE Received state_system: } +2025-08-21T14:02:53Z DEBUG Handling device message state_system MP:dc6ebc6d-0 +2025-08-21T14:02:53Z TRACE Ignoring partial state update +2025-08-21T14:02:53Z DEBUG Detail config update synchronized is now: null +2025-08-21T14:02:53Z DEBUG Stage finished waiting for config update synchronized at @18s after 2s +2025-08-21T14:02:53Z TRACE Stage resume waiting for initial device state at @18s +2025-08-21T14:02:53Z DEBUG Config sync took 2s +2025-08-21T14:02:53Z DEBUG Finished wait for config sync pending: null +2025-08-21T14:02:53Z DEBUG New lastConfigApplied at 2025-08-21T14:02:53Z +2025-08-21T14:02:53Z DEBUG Update config before initial device state timestamp 2025-08-21T14:02:51Z +2025-08-21T14:02:53Z DEBUG Stage finished waiting for initial device state at @18s after 3s +2025-08-21T14:02:53Z TRACE Stage resume waiting for starting test wrapper at @18s +2025-08-21T14:02:53Z DEBUG Device state system status level is now 300 +2025-08-21T14:02:53Z TRACE Stage suspend waiting for starting test wrapper at @18s +2025-08-21T14:02:53Z INFO Stage start waiting for config update synchronized at @18s +2025-08-21T14:02:53Z DEBUG Received command AHU-1/state/discovery as MP:dc6ebc6d-1 +2025-08-21T14:02:53Z TRACE Received state_discovery: { +2025-08-21T14:02:53Z TRACE Received state_discovery: "families" : { }, +2025-08-21T14:02:53Z TRACE Received state_discovery: "timestamp" : "2025-08-21T14:02:53Z", +2025-08-21T14:02:53Z TRACE Received state_discovery: "version" : "1.5.3" +2025-08-21T14:02:53Z TRACE Received state_discovery: } +2025-08-21T14:02:53Z DEBUG Handling device message state_discovery MP:dc6ebc6d-1 +2025-08-21T14:02:53Z TRACE Ignoring partial state update +2025-08-21T14:02:53Z DEBUG Received command AHU-1/state/localnet as MP:dc6ebc6d-2 +2025-08-21T14:02:53Z TRACE Received state_localnet: { +2025-08-21T14:02:53Z TRACE Received state_localnet: "families" : { +2025-08-21T14:02:53Z TRACE Received state_localnet: "ether" : { +2025-08-21T14:02:53Z TRACE Received state_localnet: "addr" : "42:01:ac:10:83:22" +2025-08-21T14:02:53Z TRACE Received state_localnet: }, +2025-08-21T14:02:53Z TRACE Received state_localnet: "ipv4" : { +2025-08-21T14:02:53Z TRACE Received state_localnet: "addr" : "172.16.131.34" +2025-08-21T14:02:53Z TRACE Received state_localnet: }, +2025-08-21T14:02:53Z TRACE Received state_localnet: "vendor" : { +2025-08-21T14:02:53Z TRACE Received state_localnet: "addr" : "28179023" +2025-08-21T14:02:53Z TRACE Received state_localnet: }, +2025-08-21T14:02:53Z TRACE Received state_localnet: "bacnet" : { +2025-08-21T14:02:53Z TRACE Received state_localnet: "addr" : "27312" +2025-08-21T14:02:53Z TRACE Received state_localnet: } +2025-08-21T14:02:53Z TRACE Received state_localnet: }, +2025-08-21T14:02:53Z TRACE Received state_localnet: "timestamp" : "2025-08-21T14:02:53Z", +2025-08-21T14:02:53Z TRACE Received state_localnet: "version" : "1.5.3" +2025-08-21T14:02:53Z TRACE Received state_localnet: } +2025-08-21T14:02:53Z DEBUG Handling device message state_localnet MP:dc6ebc6d-2 +2025-08-21T14:02:53Z TRACE Ignoring partial state update +2025-08-21T14:02:53Z DEBUG Stage finished waiting for config update synchronized at @18s after 0s +2025-08-21T14:02:53Z TRACE Stage resume waiting for starting test wrapper at @18s +2025-08-21T14:02:53Z DEBUG Config sync took 2s +2025-08-21T14:02:53Z DEBUG Finished wait for config sync pending: null +2025-08-21T14:02:53Z TRACE Stage suspend waiting for starting test wrapper at @18s +2025-08-21T14:02:53Z INFO Stage start waiting for executing test at @18s +2025-08-21T14:02:53Z DEBUG stage begin waiting for executing test at @18s +2025-08-21T14:02:53Z DEBUG Allowing device state change pointset.points. +2025-08-21T14:02:53Z TRACE Stage suspend waiting for executing test at @18s +2025-08-21T14:02:53Z INFO Stage start waiting for target point has value_state default (null) at @18s +2025-08-21T14:02:54Z DEBUG Delay from lastConfigApplied 2025-08-21T14:02:53.543819380Z is 1544ms +2025-08-21T14:02:54Z DEBUG Rate-limiting config by 1544ms +2025-08-21T14:02:55Z DEBUG System config extra field null +2025-08-21T14:02:55Z TRACE Updated check config_system: true +2025-08-21T14:02:55Z DEBUG Update config_system, adding configTransaction RC:785c42.00000008 +2025-08-21T14:02:55Z TRACE Updated check config_pointset: true +2025-08-21T14:02:55Z DEBUG Update config_pointset, adding configTransaction RC:785c42.00000009 +2025-08-21T14:02:55Z TRACE Updated check config_gateway: false +2025-08-21T14:02:55Z TRACE Updated check config_localnet: true +2025-08-21T14:02:55Z DEBUG Update config_localnet, adding configTransaction RC:785c42.0000000a +2025-08-21T14:02:55Z TRACE Updated check config_blobset: false +2025-08-21T14:02:55Z TRACE Updated check config_discovery: true +2025-08-21T14:02:55Z DEBUG Update config_discovery, adding configTransaction RC:785c42.0000000b +2025-08-21T14:02:55Z DEBUG Using pre-config state timestamp 2025-08-21T14:02:53Z +2025-08-21T14:02:55Z DEBUG Update lastConfigIssued 2025-08-21T14:02:55Z, because before target point has value_state default (null) +2025-08-21T14:02:55Z TRACE Stage suspend waiting for target point has value_state default (null) at @20s +2025-08-21T14:02:55Z INFO Stage start waiting for config update synchronized at @20s +2025-08-21T14:02:55Z DEBUG Received command AHU-1/state/pointset as MP:dc6ebc6d-3 +2025-08-21T14:02:55Z TRACE Received state_pointset: { +2025-08-21T14:02:55Z TRACE Received state_pointset: "points" : { +2025-08-21T14:02:55Z TRACE Received state_pointset: "filter_alarm_pressure_status" : { +2025-08-21T14:02:55Z TRACE Received state_pointset: "units" : "No-units", +2025-08-21T14:02:55Z TRACE Received state_pointset: "value_state" : "updating" +2025-08-21T14:02:55Z TRACE Received state_pointset: }, +2025-08-21T14:02:55Z TRACE Received state_pointset: "filter_differential_pressure_setpoint" : { +2025-08-21T14:02:55Z TRACE Received state_pointset: "units" : "Bars", +2025-08-21T14:02:55Z TRACE Received state_pointset: "value_state" : "updating" +2025-08-21T14:02:55Z TRACE Received state_pointset: }, +2025-08-21T14:02:55Z TRACE Received state_pointset: "filter_differential_pressure_sensor" : { +2025-08-21T14:02:55Z TRACE Received state_pointset: "units" : "Degrees-Celsius", +2025-08-21T14:02:55Z TRACE Received state_pointset: "value_state" : "updating" +2025-08-21T14:02:55Z TRACE Received state_pointset: } +2025-08-21T14:02:55Z TRACE Received state_pointset: }, +2025-08-21T14:02:55Z TRACE Received state_pointset: "timestamp" : "2025-08-21T14:02:53Z", +2025-08-21T14:02:55Z TRACE Received state_pointset: "version" : "1.5.3" +2025-08-21T14:02:55Z TRACE Received state_pointset: } +2025-08-21T14:02:55Z DEBUG Handling device message state_pointset MP:dc6ebc6d-3 +2025-08-21T14:02:55Z TRACE Ignoring partial state update +2025-08-21T14:02:55Z DEBUG Received command AHU-1/events/system as MP:57cd84bc +2025-08-21T14:02:55Z DEBUG Received events_system 2025-08-21T14:02:45Z INFO device.log: Update state 2025-08-21T14:02:45Z last_config 2025-08-21T14:02:43Z +2025-08-21T14:02:55Z DEBUG Received events_system 2025-08-21T14:02:46Z INFO device.log: Completing delayed writeback for filter_alarm_pressure_status +2025-08-21T14:02:55Z DEBUG Received events_system 2025-08-21T14:02:46Z INFO device.log: Completing delayed writeback for filter_differential_pressure_setpoint +2025-08-21T14:02:55Z DEBUG Received events_system 2025-08-21T14:02:46Z INFO device.log: Completing delayed writeback for filter_alarm_pressure_status +2025-08-21T14:02:55Z DEBUG Received events_system 2025-08-21T14:02:46Z INFO device.log: Completing delayed writeback for filter_differential_pressure_setpoint +2025-08-21T14:02:55Z DEBUG Received events_system 2025-08-21T14:02:46Z INFO device.log: Completing delayed writeback for filter_differential_pressure_sensor +2025-08-21T14:02:55Z DEBUG Received events_system 2025-08-21T14:02:47Z INFO device.log: Update state 2025-08-21T14:02:47Z last_config 2025-08-21T14:02:43Z +2025-08-21T14:02:55Z DEBUG Received events_system 2025-08-21T14:02:47Z INFO device.log: Device AHU-1 config handler +2025-08-21T14:02:55Z DEBUG Received events_system 2025-08-21T14:02:47Z INFO device.log: 2025-08-21T14:02:47Z received config 2025-08-21T14:02:47Z +2025-08-21T14:02:55Z DEBUG Received events_system 2025-08-21T14:02:47Z INFO device.log: Applying slow writeback for point filter_alarm_pressure_status with 3s delay +2025-08-21T14:02:55Z DEBUG Received events_system 2025-08-21T14:02:47Z INFO device.log: Applying slow writeback for point filter_differential_pressure_setpoint with 3s delay +2025-08-21T14:02:55Z DEBUG Received events_system 2025-08-21T14:02:47Z INFO device.log: Applying slow writeback for point filter_differential_pressure_sensor with 3s delay +2025-08-21T14:02:55Z DEBUG Received events_system 2025-08-21T14:02:47Z NOTICE system.config.apply: success +2025-08-21T14:02:55Z DEBUG Received events_system 2025-08-21T14:02:49Z INFO device.log: Update state 2025-08-21T14:02:49Z last_config 2025-08-21T14:02:47Z +2025-08-21T14:02:55Z DEBUG Received events_system 2025-08-21T14:02:50Z INFO device.log: Completing delayed writeback for filter_alarm_pressure_status +2025-08-21T14:02:55Z DEBUG Received events_system 2025-08-21T14:02:50Z INFO device.log: Completing delayed writeback for filter_differential_pressure_setpoint +2025-08-21T14:02:55Z DEBUG Received events_system 2025-08-21T14:02:51Z INFO device.log: Update state 2025-08-21T14:02:51Z last_config 2025-08-21T14:02:47Z +2025-08-21T14:02:55Z DEBUG Received events_system 2025-08-21T14:02:51Z INFO device.log: 2025-08-21T14:02:51Z received config 2025-08-21T14:02:51Z +2025-08-21T14:02:55Z DEBUG Received events_system 2025-08-21T14:02:51Z INFO device.log: Applying slow writeback for point filter_alarm_pressure_status with 3s delay +2025-08-21T14:02:55Z DEBUG Received events_system 2025-08-21T14:02:51Z INFO device.log: Applying slow writeback for point filter_differential_pressure_setpoint with 3s delay +2025-08-21T14:02:55Z DEBUG Received events_system 2025-08-21T14:02:51Z INFO device.log: Applying slow writeback for point filter_differential_pressure_sensor with 3s delay +2025-08-21T14:02:55Z DEBUG Received events_system 2025-08-21T14:02:51Z NOTICE system.config.apply: success +2025-08-21T14:02:55Z DEBUG Received events_system 2025-08-21T14:02:53Z INFO device.log: Update state 2025-08-21T14:02:53Z last_config 2025-08-21T14:02:51Z +2025-08-21T14:02:55Z DEBUG Handling device message events_system MP:57cd84bc +2025-08-21T14:02:55Z DEBUG Capturing AHU-1 message events_system +2025-08-21T14:02:55Z DEBUG Received command AHU-1/events/pointset as MP:e711316f +2025-08-21T14:02:55Z TRACE Received events_pointset: { +2025-08-21T14:02:55Z TRACE Received events_pointset: "points" : { +2025-08-21T14:02:55Z TRACE Received events_pointset: "filter_alarm_pressure_status" : { +2025-08-21T14:02:55Z TRACE Received events_pointset: "present_value" : true +2025-08-21T14:02:55Z TRACE Received events_pointset: }, +2025-08-21T14:02:55Z TRACE Received events_pointset: "filter_differential_pressure_setpoint" : { +2025-08-21T14:02:55Z TRACE Received events_pointset: "present_value" : 98 +2025-08-21T14:02:55Z TRACE Received events_pointset: }, +2025-08-21T14:02:55Z TRACE Received events_pointset: "filter_differential_pressure_sensor" : { +2025-08-21T14:02:55Z TRACE Received events_pointset: "present_value" : 10 +2025-08-21T14:02:55Z TRACE Received events_pointset: } +2025-08-21T14:02:55Z TRACE Received events_pointset: }, +2025-08-21T14:02:55Z TRACE Received events_pointset: "timestamp" : "2025-08-21T14:02:54Z", +2025-08-21T14:02:55Z TRACE Received events_pointset: "version" : "1.5.3" +2025-08-21T14:02:55Z TRACE Received events_pointset: } +2025-08-21T14:02:55Z DEBUG Handling device message events_pointset MP:e711316f +2025-08-21T14:02:55Z DEBUG Capturing AHU-1 message events_pointset +2025-08-21T14:02:55Z DEBUG Received command AHU-1/state/update as MP:7d5aa38f +2025-08-21T14:02:55Z DEBUG Received state_update +2025-08-21T14:02:55Z DEBUG Handling update message state_update MP:7d5aa38f +2025-08-21T14:02:55Z DEBUG Capturing AHU-1 message state_update +2025-08-21T14:02:55Z DEBUG Updated state after 0s 2025-08-21T14:02:55Z MP:7d5aa38f +2025-08-21T14:02:55Z INFO Updated state #008: Changed 4 fields: +2025-08-21T14:02:55Z INFO Updated state #008: Remove `pointset.points.filter_alarm_pressure_status.value_state` +2025-08-21T14:02:55Z INFO Updated state #008: Set `pointset.points.filter_differential_pressure_setpoint.value_state` = `applied` +2025-08-21T14:02:55Z INFO Updated state #008: Remove `pointset.points.filter_differential_pressure_sensor.value_state` +2025-08-21T14:02:55Z INFO Updated state #008: Set `timestamp` = `2025-08-21T14:02:55Z` +2025-08-21T14:02:55Z DEBUG Updated state has last_config 2025-08-21T14:02:51Z (expecting 2025-08-21T14:02:51Z) +2025-08-21T14:02:55Z DEBUG Received command AHU-1/state/system as MP:7d5aa38f-0 +2025-08-21T14:02:55Z TRACE Received state_system: { +2025-08-21T14:02:55Z TRACE Received state_system: "hardware" : { +2025-08-21T14:02:55Z TRACE Received state_system: "make" : "BOS", +2025-08-21T14:02:55Z TRACE Received state_system: "model" : "pubber" +2025-08-21T14:02:55Z TRACE Received state_system: }, +2025-08-21T14:02:55Z TRACE Received state_system: "last_config" : "2025-08-21T14:02:51Z", +2025-08-21T14:02:55Z TRACE Received state_system: "operation" : { +2025-08-21T14:02:55Z TRACE Received state_system: "operational" : true, +2025-08-21T14:02:55Z TRACE Received state_system: "last_start" : "2025-08-21T14:02:13Z", +2025-08-21T14:02:55Z TRACE Received state_system: "restart_count" : 1, +2025-08-21T14:02:55Z TRACE Received state_system: "mode" : "initial" +2025-08-21T14:02:55Z TRACE Received state_system: }, +2025-08-21T14:02:55Z TRACE Received state_system: "serial_no" : "742178", +2025-08-21T14:02:55Z TRACE Received state_system: "software" : { +2025-08-21T14:02:55Z TRACE Received state_system: "firmware" : "v1" +2025-08-21T14:02:55Z TRACE Received state_system: }, +2025-08-21T14:02:55Z TRACE Received state_system: "status" : { +2025-08-21T14:02:55Z TRACE Received state_system: "message" : "success", +2025-08-21T14:02:55Z TRACE Received state_system: "category" : "system.config.apply", +2025-08-21T14:02:55Z TRACE Received state_system: "timestamp" : "2025-08-21T14:02:51Z", +2025-08-21T14:02:55Z TRACE Received state_system: "level" : 300 +2025-08-21T14:02:55Z TRACE Received state_system: }, +2025-08-21T14:02:55Z TRACE Received state_system: "timestamp" : "2025-08-21T14:02:55Z", +2025-08-21T14:02:55Z TRACE Received state_system: "version" : "1.5.3" +2025-08-21T14:02:55Z TRACE Received state_system: } +2025-08-21T14:02:55Z DEBUG Handling device message state_system MP:7d5aa38f-0 +2025-08-21T14:02:55Z TRACE Ignoring partial state update +2025-08-21T14:02:55Z DEBUG Received command AHU-1/state/discovery as MP:7d5aa38f-1 +2025-08-21T14:02:55Z TRACE Received state_discovery: { +2025-08-21T14:02:55Z TRACE Received state_discovery: "families" : { }, +2025-08-21T14:02:55Z TRACE Received state_discovery: "timestamp" : "2025-08-21T14:02:55Z", +2025-08-21T14:02:55Z TRACE Received state_discovery: "version" : "1.5.3" +2025-08-21T14:02:55Z TRACE Received state_discovery: } +2025-08-21T14:02:55Z DEBUG Handling device message state_discovery MP:7d5aa38f-1 +2025-08-21T14:02:55Z TRACE Ignoring partial state update +2025-08-21T14:02:55Z DEBUG Received command AHU-1/state/localnet as MP:7d5aa38f-2 +2025-08-21T14:02:55Z TRACE Received state_localnet: { +2025-08-21T14:02:55Z TRACE Received state_localnet: "families" : { +2025-08-21T14:02:55Z TRACE Received state_localnet: "ether" : { +2025-08-21T14:02:55Z TRACE Received state_localnet: "addr" : "42:01:ac:10:83:22" +2025-08-21T14:02:55Z TRACE Received state_localnet: }, +2025-08-21T14:02:55Z TRACE Received state_localnet: "ipv4" : { +2025-08-21T14:02:55Z TRACE Received state_localnet: "addr" : "172.16.131.34" +2025-08-21T14:02:55Z TRACE Received state_localnet: }, +2025-08-21T14:02:55Z TRACE Received state_localnet: "vendor" : { +2025-08-21T14:02:55Z TRACE Received state_localnet: "addr" : "28179023" +2025-08-21T14:02:55Z TRACE Received state_localnet: }, +2025-08-21T14:02:55Z TRACE Received state_localnet: "bacnet" : { +2025-08-21T14:02:55Z TRACE Received state_localnet: "addr" : "27312" +2025-08-21T14:02:55Z TRACE Received state_localnet: } +2025-08-21T14:02:55Z TRACE Received state_localnet: }, +2025-08-21T14:02:55Z TRACE Received state_localnet: "timestamp" : "2025-08-21T14:02:55Z", +2025-08-21T14:02:55Z TRACE Received state_localnet: "version" : "1.5.3" +2025-08-21T14:02:55Z TRACE Received state_localnet: } +2025-08-21T14:02:55Z DEBUG Handling device message state_localnet MP:7d5aa38f-2 +2025-08-21T14:02:55Z TRACE Ignoring partial state update +2025-08-21T14:02:55Z DEBUG Received command AHU-1/state/pointset as MP:7d5aa38f-3 +2025-08-21T14:02:55Z TRACE Received state_pointset: { +2025-08-21T14:02:55Z TRACE Received state_pointset: "points" : { +2025-08-21T14:02:55Z TRACE Received state_pointset: "filter_alarm_pressure_status" : { +2025-08-21T14:02:55Z TRACE Received state_pointset: "units" : "No-units" +2025-08-21T14:02:55Z TRACE Received state_pointset: }, +2025-08-21T14:02:55Z TRACE Received state_pointset: "filter_differential_pressure_setpoint" : { +2025-08-21T14:02:55Z TRACE Received state_pointset: "units" : "Bars", +2025-08-21T14:02:55Z TRACE Received state_pointset: "value_state" : "applied" +2025-08-21T14:02:55Z TRACE Received state_pointset: }, +2025-08-21T14:02:55Z TRACE Received state_pointset: "filter_differential_pressure_sensor" : { +2025-08-21T14:02:55Z TRACE Received state_pointset: "units" : "Degrees-Celsius" +2025-08-21T14:02:55Z TRACE Received state_pointset: } +2025-08-21T14:02:55Z TRACE Received state_pointset: }, +2025-08-21T14:02:55Z TRACE Received state_pointset: "timestamp" : "2025-08-21T14:02:55Z", +2025-08-21T14:02:55Z TRACE Received state_pointset: "version" : "1.5.3" +2025-08-21T14:02:55Z TRACE Received state_pointset: } +2025-08-21T14:02:55Z DEBUG Handling device message state_pointset MP:7d5aa38f-3 +2025-08-21T14:02:55Z TRACE Ignoring partial state update +2025-08-21T14:02:56Z DEBUG Received command AHU-1/config/update as RC:785c42.00000008 +2025-08-21T14:02:56Z DEBUG Received config_update +2025-08-21T14:02:56Z DEBUG Handling update message config_update RC:785c42.00000008 +2025-08-21T14:02:56Z DEBUG Removed configTransaction RC:785c42.00000008 +2025-08-21T14:02:56Z DEBUG Set last_start changed false, last_start 2025-08-21T14:02:13Z +2025-08-21T14:02:56Z DEBUG Updated config 2025-08-21T14:02:55Z RC:785c42.00000008 +2025-08-21T14:02:56Z INFO Updated config #005: Changed 1 fields: +2025-08-21T14:02:56Z INFO Updated config #005: Remove `pointset.points.filter_differential_pressure_setpoint.set_value` +2025-08-21T14:02:56Z DEBUG Expected last_config now 2025-08-21T14:02:55Z +2025-08-21T14:02:56Z DEBUG Detail config update synchronized is now: config transactions not cleared, last_config not synced in state +2025-08-21T14:02:56Z DEBUG Received command AHU-1/config/system as CU:785c42.00000008 +2025-08-21T14:02:56Z TRACE Received config_system: { +2025-08-21T14:02:56Z TRACE Received config_system: "operation" : "REPLY" +2025-08-21T14:02:56Z TRACE Received config_system: } +2025-08-21T14:02:56Z DEBUG Handling device message config_system CU:785c42.00000008 +2025-08-21T14:02:56Z TRACE Ignoring echo configTransaction CU:785c42.00000008 +2025-08-21T14:02:57Z DEBUG Received command AHU-1/config/update as RC:785c42.00000009 +2025-08-21T14:02:57Z DEBUG Received config_update +2025-08-21T14:02:57Z DEBUG Handling update message config_update RC:785c42.00000009 +2025-08-21T14:02:57Z DEBUG Removed configTransaction RC:785c42.00000009 +2025-08-21T14:02:57Z DEBUG Set last_start changed false, last_start 2025-08-21T14:02:13Z +2025-08-21T14:02:57Z DEBUG Updated config 2025-08-21T14:02:56Z RC:785c42.00000009 +2025-08-21T14:02:57Z INFO Updated config #006: Changed 0 fields. +2025-08-21T14:02:57Z DEBUG Expected last_config now 2025-08-21T14:02:56Z +2025-08-21T14:02:57Z DEBUG Received command AHU-1/config/pointset as CU:785c42.00000009 +2025-08-21T14:02:57Z TRACE Received config_pointset: { +2025-08-21T14:02:57Z TRACE Received config_pointset: "operation" : "REPLY" +2025-08-21T14:02:57Z TRACE Received config_pointset: } +2025-08-21T14:02:57Z DEBUG Handling device message config_pointset CU:785c42.00000009 +2025-08-21T14:02:57Z TRACE Ignoring echo configTransaction CU:785c42.00000009 +2025-08-21T14:02:57Z DEBUG Received command AHU-1/state/update as MP:9e631813 +2025-08-21T14:02:57Z DEBUG Received state_update +2025-08-21T14:02:57Z DEBUG Handling update message state_update MP:9e631813 +2025-08-21T14:02:57Z DEBUG Capturing AHU-1 message state_update +2025-08-21T14:02:57Z DEBUG Updated state after 0s 2025-08-21T14:02:57Z MP:9e631813 +2025-08-21T14:02:57Z INFO Updated state #009: Changed 6 fields: +2025-08-21T14:02:57Z INFO Updated state #009: Set `system.last_config` = `2025-08-21T14:02:56Z` +2025-08-21T14:02:57Z INFO Updated state #009: Set `system.status.timestamp` = `2025-08-21T14:02:56Z` +2025-08-21T14:02:57Z INFO Updated state #009: Add `pointset.points.filter_alarm_pressure_status.value_state` = `updating` +2025-08-21T14:02:57Z INFO Updated state #009: Set `pointset.points.filter_differential_pressure_setpoint.value_state` = `updating` +2025-08-21T14:02:57Z INFO Updated state #009: Add `pointset.points.filter_differential_pressure_sensor.value_state` = `updating` +2025-08-21T14:02:57Z INFO Updated state #009: Set `timestamp` = `2025-08-21T14:02:57Z` +2025-08-21T14:02:57Z DEBUG Updated state has last_config 2025-08-21T14:02:56Z (expecting 2025-08-21T14:02:56Z) +2025-08-21T14:02:57Z DEBUG Received command AHU-1/state/system as MP:9e631813-0 +2025-08-21T14:02:57Z TRACE Received state_system: { +2025-08-21T14:02:57Z TRACE Received state_system: "hardware" : { +2025-08-21T14:02:57Z TRACE Received state_system: "make" : "BOS", +2025-08-21T14:02:57Z TRACE Received state_system: "model" : "pubber" +2025-08-21T14:02:57Z TRACE Received state_system: }, +2025-08-21T14:02:57Z TRACE Received state_system: "last_config" : "2025-08-21T14:02:56Z", +2025-08-21T14:02:57Z TRACE Received state_system: "operation" : { +2025-08-21T14:02:57Z TRACE Received state_system: "operational" : true, +2025-08-21T14:02:57Z TRACE Received state_system: "last_start" : "2025-08-21T14:02:13Z", +2025-08-21T14:02:57Z TRACE Received state_system: "restart_count" : 1, +2025-08-21T14:02:57Z TRACE Received state_system: "mode" : "initial" +2025-08-21T14:02:57Z TRACE Received state_system: }, +2025-08-21T14:02:57Z TRACE Received state_system: "serial_no" : "742178", +2025-08-21T14:02:57Z TRACE Received state_system: "software" : { +2025-08-21T14:02:57Z TRACE Received state_system: "firmware" : "v1" +2025-08-21T14:02:57Z TRACE Received state_system: }, +2025-08-21T14:02:57Z TRACE Received state_system: "status" : { +2025-08-21T14:02:57Z TRACE Received state_system: "message" : "success", +2025-08-21T14:02:57Z TRACE Received state_system: "category" : "system.config.apply", +2025-08-21T14:02:57Z TRACE Received state_system: "timestamp" : "2025-08-21T14:02:56Z", +2025-08-21T14:02:57Z TRACE Received state_system: "level" : 300 +2025-08-21T14:02:57Z TRACE Received state_system: }, +2025-08-21T14:02:57Z TRACE Received state_system: "timestamp" : "2025-08-21T14:02:57Z", +2025-08-21T14:02:57Z TRACE Received state_system: "version" : "1.5.3" +2025-08-21T14:02:57Z TRACE Received state_system: } +2025-08-21T14:02:57Z DEBUG Handling device message state_system MP:9e631813-0 +2025-08-21T14:02:57Z TRACE Ignoring partial state update +2025-08-21T14:02:57Z DEBUG Detail config update synchronized is now: config transactions not cleared +2025-08-21T14:02:57Z DEBUG Received command AHU-1/state/discovery as MP:9e631813-1 +2025-08-21T14:02:57Z TRACE Received state_discovery: { +2025-08-21T14:02:57Z TRACE Received state_discovery: "families" : { }, +2025-08-21T14:02:57Z TRACE Received state_discovery: "timestamp" : "2025-08-21T14:02:57Z", +2025-08-21T14:02:57Z TRACE Received state_discovery: "version" : "1.5.3" +2025-08-21T14:02:57Z TRACE Received state_discovery: } +2025-08-21T14:02:57Z DEBUG Handling device message state_discovery MP:9e631813-1 +2025-08-21T14:02:57Z TRACE Ignoring partial state update +2025-08-21T14:02:57Z DEBUG Received command AHU-1/state/localnet as MP:9e631813-2 +2025-08-21T14:02:57Z TRACE Received state_localnet: { +2025-08-21T14:02:57Z TRACE Received state_localnet: "families" : { +2025-08-21T14:02:57Z TRACE Received state_localnet: "ether" : { +2025-08-21T14:02:57Z TRACE Received state_localnet: "addr" : "42:01:ac:10:83:22" +2025-08-21T14:02:57Z TRACE Received state_localnet: }, +2025-08-21T14:02:57Z TRACE Received state_localnet: "ipv4" : { +2025-08-21T14:02:57Z TRACE Received state_localnet: "addr" : "172.16.131.34" +2025-08-21T14:02:57Z TRACE Received state_localnet: }, +2025-08-21T14:02:57Z TRACE Received state_localnet: "vendor" : { +2025-08-21T14:02:57Z TRACE Received state_localnet: "addr" : "28179023" +2025-08-21T14:02:57Z TRACE Received state_localnet: }, +2025-08-21T14:02:57Z TRACE Received state_localnet: "bacnet" : { +2025-08-21T14:02:57Z TRACE Received state_localnet: "addr" : "27312" +2025-08-21T14:02:57Z TRACE Received state_localnet: } +2025-08-21T14:02:57Z TRACE Received state_localnet: }, +2025-08-21T14:02:57Z TRACE Received state_localnet: "timestamp" : "2025-08-21T14:02:57Z", +2025-08-21T14:02:57Z TRACE Received state_localnet: "version" : "1.5.3" +2025-08-21T14:02:57Z TRACE Received state_localnet: } +2025-08-21T14:02:57Z DEBUG Handling device message state_localnet MP:9e631813-2 +2025-08-21T14:02:57Z TRACE Ignoring partial state update +2025-08-21T14:02:57Z DEBUG Received command AHU-1/state/pointset as MP:9e631813-3 +2025-08-21T14:02:57Z TRACE Received state_pointset: { +2025-08-21T14:02:57Z TRACE Received state_pointset: "points" : { +2025-08-21T14:02:57Z TRACE Received state_pointset: "filter_alarm_pressure_status" : { +2025-08-21T14:02:57Z TRACE Received state_pointset: "units" : "No-units", +2025-08-21T14:02:57Z TRACE Received state_pointset: "value_state" : "updating" +2025-08-21T14:02:57Z TRACE Received state_pointset: }, +2025-08-21T14:02:57Z TRACE Received state_pointset: "filter_differential_pressure_setpoint" : { +2025-08-21T14:02:57Z TRACE Received state_pointset: "units" : "Bars", +2025-08-21T14:02:57Z TRACE Received state_pointset: "value_state" : "updating" +2025-08-21T14:02:57Z TRACE Received state_pointset: }, +2025-08-21T14:02:57Z TRACE Received state_pointset: "filter_differential_pressure_sensor" : { +2025-08-21T14:02:57Z TRACE Received state_pointset: "units" : "Degrees-Celsius", +2025-08-21T14:02:57Z TRACE Received state_pointset: "value_state" : "updating" +2025-08-21T14:02:57Z TRACE Received state_pointset: } +2025-08-21T14:02:57Z TRACE Received state_pointset: }, +2025-08-21T14:02:57Z TRACE Received state_pointset: "timestamp" : "2025-08-21T14:02:57Z", +2025-08-21T14:02:57Z TRACE Received state_pointset: "version" : "1.5.3" +2025-08-21T14:02:57Z TRACE Received state_pointset: } +2025-08-21T14:02:57Z DEBUG Handling device message state_pointset MP:9e631813-3 +2025-08-21T14:02:57Z TRACE Ignoring partial state update +2025-08-21T14:02:58Z DEBUG Received command AHU-1/config/update as RC:785c42.0000000a +2025-08-21T14:02:58Z DEBUG Received config_update +2025-08-21T14:02:58Z DEBUG Handling update message config_update RC:785c42.0000000a +2025-08-21T14:02:58Z DEBUG Removed configTransaction RC:785c42.0000000a +2025-08-21T14:02:58Z DEBUG Set last_start changed false, last_start 2025-08-21T14:02:13Z +2025-08-21T14:02:58Z DEBUG Updated config 2025-08-21T14:02:57Z RC:785c42.0000000a +2025-08-21T14:02:58Z INFO Updated config #007: Changed 0 fields. +2025-08-21T14:02:58Z DEBUG Expected last_config now 2025-08-21T14:02:57Z +2025-08-21T14:02:58Z DEBUG Received command AHU-1/config/localnet as CU:785c42.0000000a +2025-08-21T14:02:58Z TRACE Received config_localnet: { +2025-08-21T14:02:58Z TRACE Received config_localnet: "operation" : "REPLY" +2025-08-21T14:02:58Z TRACE Received config_localnet: } +2025-08-21T14:02:58Z DEBUG Handling device message config_localnet CU:785c42.0000000a +2025-08-21T14:02:58Z TRACE Ignoring echo configTransaction CU:785c42.0000000a +2025-08-21T14:02:58Z DEBUG Detail config update synchronized is now: config transactions not cleared, last_config not synced in state +2025-08-21T14:02:59Z DEBUG Received command AHU-1/config/update as RC:785c42.0000000b +2025-08-21T14:02:59Z DEBUG Received config_update +2025-08-21T14:02:59Z DEBUG Handling update message config_update RC:785c42.0000000b +2025-08-21T14:02:59Z DEBUG Removed configTransaction RC:785c42.0000000b +2025-08-21T14:02:59Z DEBUG Set last_start changed false, last_start 2025-08-21T14:02:13Z +2025-08-21T14:02:59Z DEBUG Updated config 2025-08-21T14:02:58Z RC:785c42.0000000b +2025-08-21T14:02:59Z INFO Updated config #008: Changed 0 fields. +2025-08-21T14:02:59Z DEBUG Expected last_config now 2025-08-21T14:02:58Z +2025-08-21T14:02:59Z DEBUG Detail config update synchronized is now: last_config not synced in state +2025-08-21T14:02:59Z DEBUG Received command AHU-1/config/discovery as CU:785c42.0000000b +2025-08-21T14:02:59Z TRACE Received config_discovery: { +2025-08-21T14:02:59Z TRACE Received config_discovery: "operation" : "REPLY" +2025-08-21T14:02:59Z TRACE Received config_discovery: } +2025-08-21T14:02:59Z DEBUG Handling device message config_discovery CU:785c42.0000000b +2025-08-21T14:02:59Z TRACE Ignoring echo configTransaction CU:785c42.0000000b +2025-08-21T14:02:59Z DEBUG Received command AHU-1/state/update as MP:a90a5b87 +2025-08-21T14:02:59Z DEBUG Received state_update +2025-08-21T14:02:59Z DEBUG Handling update message state_update MP:a90a5b87 +2025-08-21T14:02:59Z DEBUG Capturing AHU-1 message state_update +2025-08-21T14:02:59Z DEBUG Updated state after 0s 2025-08-21T14:02:59Z MP:a90a5b87 +2025-08-21T14:02:59Z INFO Updated state #010: Changed 3 fields: +2025-08-21T14:02:59Z INFO Updated state #010: Set `system.last_config` = `2025-08-21T14:02:58Z` +2025-08-21T14:02:59Z INFO Updated state #010: Set `system.status.timestamp` = `2025-08-21T14:02:58Z` +2025-08-21T14:02:59Z INFO Updated state #010: Set `timestamp` = `2025-08-21T14:02:59Z` +2025-08-21T14:02:59Z DEBUG Updated state has last_config 2025-08-21T14:02:58Z (expecting 2025-08-21T14:02:58Z) +2025-08-21T14:02:59Z DEBUG Detail config update synchronized is now: null +2025-08-21T14:02:59Z DEBUG Stage finished waiting for config update synchronized at @24s after 4s +2025-08-21T14:02:59Z TRACE Stage resume waiting for target point has value_state default (null) at @24s +2025-08-21T14:02:59Z DEBUG Config sync took 4s +2025-08-21T14:02:59Z DEBUG Finished wait for config sync pending: null +2025-08-21T14:02:59Z DEBUG New lastConfigApplied at 2025-08-21T14:02:59Z +2025-08-21T14:02:59Z DEBUG Update config before target point has value_state default (null) timestamp 2025-08-21T14:02:58Z +2025-08-21T14:02:59Z DEBUG Recorded sequence: 1. Update config before target point has value_state default (null) +2025-08-21T14:02:59Z INFO Device config Remove `pointset.points.filter_differential_pressure_setpoint.set_value` +2025-08-21T14:02:59Z TRACE Update config before target point has value_state default (null): Remove `pointset.points.filter_differential_pressure_setpoint.set_value` +2025-08-21T14:02:59Z DEBUG Value state updating == null (false) +2025-08-21T14:02:59Z DEBUG Value state updating == null (false) +2025-08-21T14:02:59Z DEBUG Received command AHU-1/state/system as MP:a90a5b87-0 +2025-08-21T14:02:59Z TRACE Received state_system: { +2025-08-21T14:02:59Z TRACE Received state_system: "hardware" : { +2025-08-21T14:02:59Z TRACE Received state_system: "make" : "BOS", +2025-08-21T14:02:59Z TRACE Received state_system: "model" : "pubber" +2025-08-21T14:02:59Z TRACE Received state_system: }, +2025-08-21T14:02:59Z TRACE Received state_system: "last_config" : "2025-08-21T14:02:58Z", +2025-08-21T14:02:59Z TRACE Received state_system: "operation" : { +2025-08-21T14:02:59Z TRACE Received state_system: "operational" : true, +2025-08-21T14:02:59Z TRACE Received state_system: "last_start" : "2025-08-21T14:02:13Z", +2025-08-21T14:02:59Z TRACE Received state_system: "restart_count" : 1, +2025-08-21T14:02:59Z TRACE Received state_system: "mode" : "initial" +2025-08-21T14:02:59Z TRACE Received state_system: }, +2025-08-21T14:02:59Z TRACE Received state_system: "serial_no" : "742178", +2025-08-21T14:02:59Z TRACE Received state_system: "software" : { +2025-08-21T14:02:59Z TRACE Received state_system: "firmware" : "v1" +2025-08-21T14:02:59Z TRACE Received state_system: }, +2025-08-21T14:02:59Z TRACE Received state_system: "status" : { +2025-08-21T14:02:59Z TRACE Received state_system: "message" : "success", +2025-08-21T14:02:59Z TRACE Received state_system: "category" : "system.config.apply", +2025-08-21T14:02:59Z TRACE Received state_system: "timestamp" : "2025-08-21T14:02:58Z", +2025-08-21T14:02:59Z TRACE Received state_system: "level" : 300 +2025-08-21T14:02:59Z TRACE Received state_system: }, +2025-08-21T14:02:59Z TRACE Received state_system: "timestamp" : "2025-08-21T14:02:59Z", +2025-08-21T14:02:59Z TRACE Received state_system: "version" : "1.5.3" +2025-08-21T14:02:59Z TRACE Received state_system: } +2025-08-21T14:02:59Z DEBUG Handling device message state_system MP:a90a5b87-0 +2025-08-21T14:02:59Z TRACE Ignoring partial state update +2025-08-21T14:02:59Z DEBUG Value state updating == null (false) +2025-08-21T14:02:59Z DEBUG Received command AHU-1/state/discovery as MP:a90a5b87-1 +2025-08-21T14:02:59Z TRACE Received state_discovery: { +2025-08-21T14:02:59Z TRACE Received state_discovery: "families" : { }, +2025-08-21T14:02:59Z TRACE Received state_discovery: "timestamp" : "2025-08-21T14:02:59Z", +2025-08-21T14:02:59Z TRACE Received state_discovery: "version" : "1.5.3" +2025-08-21T14:02:59Z TRACE Received state_discovery: } +2025-08-21T14:02:59Z DEBUG Handling device message state_discovery MP:a90a5b87-1 +2025-08-21T14:02:59Z TRACE Ignoring partial state update +2025-08-21T14:02:59Z DEBUG Value state updating == null (false) +2025-08-21T14:02:59Z DEBUG Received command AHU-1/state/localnet as MP:a90a5b87-2 +2025-08-21T14:02:59Z TRACE Received state_localnet: { +2025-08-21T14:02:59Z TRACE Received state_localnet: "families" : { +2025-08-21T14:02:59Z TRACE Received state_localnet: "ether" : { +2025-08-21T14:02:59Z TRACE Received state_localnet: "addr" : "42:01:ac:10:83:22" +2025-08-21T14:02:59Z TRACE Received state_localnet: }, +2025-08-21T14:02:59Z TRACE Received state_localnet: "ipv4" : { +2025-08-21T14:02:59Z TRACE Received state_localnet: "addr" : "172.16.131.34" +2025-08-21T14:02:59Z TRACE Received state_localnet: }, +2025-08-21T14:02:59Z TRACE Received state_localnet: "vendor" : { +2025-08-21T14:02:59Z TRACE Received state_localnet: "addr" : "28179023" +2025-08-21T14:02:59Z TRACE Received state_localnet: }, +2025-08-21T14:02:59Z TRACE Received state_localnet: "bacnet" : { +2025-08-21T14:02:59Z TRACE Received state_localnet: "addr" : "27312" +2025-08-21T14:02:59Z TRACE Received state_localnet: } +2025-08-21T14:02:59Z TRACE Received state_localnet: }, +2025-08-21T14:02:59Z TRACE Received state_localnet: "timestamp" : "2025-08-21T14:02:59Z", +2025-08-21T14:02:59Z TRACE Received state_localnet: "version" : "1.5.3" +2025-08-21T14:02:59Z TRACE Received state_localnet: } +2025-08-21T14:02:59Z DEBUG Handling device message state_localnet MP:a90a5b87-2 +2025-08-21T14:02:59Z TRACE Ignoring partial state update +2025-08-21T14:02:59Z DEBUG Value state updating == null (false) +2025-08-21T14:02:59Z DEBUG Received command AHU-1/state/pointset as MP:a90a5b87-3 +2025-08-21T14:02:59Z TRACE Received state_pointset: { +2025-08-21T14:02:59Z TRACE Received state_pointset: "points" : { +2025-08-21T14:02:59Z TRACE Received state_pointset: "filter_alarm_pressure_status" : { +2025-08-21T14:02:59Z TRACE Received state_pointset: "units" : "No-units", +2025-08-21T14:02:59Z TRACE Received state_pointset: "value_state" : "updating" +2025-08-21T14:02:59Z TRACE Received state_pointset: }, +2025-08-21T14:02:59Z TRACE Received state_pointset: "filter_differential_pressure_setpoint" : { +2025-08-21T14:02:59Z TRACE Received state_pointset: "units" : "Bars", +2025-08-21T14:02:59Z TRACE Received state_pointset: "value_state" : "updating" +2025-08-21T14:02:59Z TRACE Received state_pointset: }, +2025-08-21T14:02:59Z TRACE Received state_pointset: "filter_differential_pressure_sensor" : { +2025-08-21T14:02:59Z TRACE Received state_pointset: "units" : "Degrees-Celsius", +2025-08-21T14:02:59Z TRACE Received state_pointset: "value_state" : "updating" +2025-08-21T14:02:59Z TRACE Received state_pointset: } +2025-08-21T14:02:59Z TRACE Received state_pointset: }, +2025-08-21T14:02:59Z TRACE Received state_pointset: "timestamp" : "2025-08-21T14:02:59Z", +2025-08-21T14:02:59Z TRACE Received state_pointset: "version" : "1.5.3" +2025-08-21T14:02:59Z TRACE Received state_pointset: } +2025-08-21T14:02:59Z DEBUG Handling device message state_pointset MP:a90a5b87-3 +2025-08-21T14:02:59Z TRACE Ignoring partial state update +2025-08-21T14:02:59Z DEBUG Value state updating == null (false) +2025-08-21T14:03:00Z DEBUG Value state updating == null (false) +2025-08-21T14:03:00Z DEBUG Received command null/config/udmi as null +2025-08-21T14:03:00Z DEBUG Value state updating == null (false) +2025-08-21T14:03:01Z DEBUG Value state updating == null (false) +2025-08-21T14:03:01Z DEBUG Received command AHU-1/state/update as MP:f288c153 +2025-08-21T14:03:01Z DEBUG Received state_update +2025-08-21T14:03:01Z DEBUG Handling update message state_update MP:f288c153 +2025-08-21T14:03:01Z DEBUG Capturing AHU-1 message state_update +2025-08-21T14:03:01Z DEBUG Updated state after 0s 2025-08-21T14:03:01Z MP:f288c153 +2025-08-21T14:03:01Z INFO Updated state #011: Changed 4 fields: +2025-08-21T14:03:01Z INFO Updated state #011: Remove `pointset.points.filter_alarm_pressure_status.value_state` +2025-08-21T14:03:01Z INFO Updated state #011: Remove `pointset.points.filter_differential_pressure_setpoint.value_state` +2025-08-21T14:03:01Z INFO Updated state #011: Remove `pointset.points.filter_differential_pressure_sensor.value_state` +2025-08-21T14:03:01Z INFO Updated state #011: Set `timestamp` = `2025-08-21T14:03:01Z` +2025-08-21T14:03:01Z DEBUG Updated state has last_config 2025-08-21T14:02:58Z (expecting 2025-08-21T14:02:58Z) +2025-08-21T14:03:01Z DEBUG Value state null == null (true) +2025-08-21T14:03:01Z DEBUG Detail target point has value_state default (null) is now: null +2025-08-21T14:03:01Z DEBUG Recorded sequence: 1. Wait until target point has value_state default (null) +2025-08-21T14:03:01Z DEBUG Stage finished waiting for target point has value_state default (null) at @26s after 8s +2025-08-21T14:03:01Z TRACE Stage resume waiting for executing test at @26s +2025-08-21T14:03:01Z TRACE Stage suspend waiting for executing test at @26s +2025-08-21T14:03:01Z INFO Stage start waiting for target point has value_state updating at @26s +2025-08-21T14:03:01Z DEBUG Delay from lastConfigApplied 2025-08-21T14:02:59.617244021Z is -382ms +2025-08-21T14:03:01Z DEBUG System config extra field null +2025-08-21T14:03:02Z TRACE Updated check config_system: false +2025-08-21T14:03:02Z TRACE Updated check config_pointset: true +2025-08-21T14:03:02Z DEBUG Update config_pointset, adding configTransaction RC:785c42.0000000c +2025-08-21T14:03:02Z TRACE Updated check config_gateway: false +2025-08-21T14:03:02Z TRACE Updated check config_localnet: false +2025-08-21T14:03:02Z TRACE Updated check config_blobset: false +2025-08-21T14:03:02Z TRACE Updated check config_discovery: false +2025-08-21T14:03:02Z DEBUG Using pre-config state timestamp 2025-08-21T14:03:01Z +2025-08-21T14:03:02Z DEBUG Update lastConfigIssued 2025-08-21T14:03:02Z, because before target point has value_state updating +2025-08-21T14:03:02Z TRACE Stage suspend waiting for target point has value_state updating at @26s +2025-08-21T14:03:02Z INFO Stage start waiting for config update synchronized at @26s +2025-08-21T14:03:02Z DEBUG Received command AHU-1/state/system as MP:f288c153-0 +2025-08-21T14:03:02Z TRACE Received state_system: { +2025-08-21T14:03:02Z TRACE Received state_system: "hardware" : { +2025-08-21T14:03:02Z TRACE Received state_system: "make" : "BOS", +2025-08-21T14:03:02Z TRACE Received state_system: "model" : "pubber" +2025-08-21T14:03:02Z TRACE Received state_system: }, +2025-08-21T14:03:02Z TRACE Received state_system: "last_config" : "2025-08-21T14:02:58Z", +2025-08-21T14:03:02Z TRACE Received state_system: "operation" : { +2025-08-21T14:03:02Z TRACE Received state_system: "operational" : true, +2025-08-21T14:03:02Z TRACE Received state_system: "last_start" : "2025-08-21T14:02:13Z", +2025-08-21T14:03:02Z TRACE Received state_system: "restart_count" : 1, +2025-08-21T14:03:02Z TRACE Received state_system: "mode" : "initial" +2025-08-21T14:03:02Z TRACE Received state_system: }, +2025-08-21T14:03:02Z TRACE Received state_system: "serial_no" : "742178", +2025-08-21T14:03:02Z TRACE Received state_system: "software" : { +2025-08-21T14:03:02Z TRACE Received state_system: "firmware" : "v1" +2025-08-21T14:03:02Z TRACE Received state_system: }, +2025-08-21T14:03:02Z TRACE Received state_system: "status" : { +2025-08-21T14:03:02Z TRACE Received state_system: "message" : "success", +2025-08-21T14:03:02Z TRACE Received state_system: "category" : "system.config.apply", +2025-08-21T14:03:02Z TRACE Received state_system: "timestamp" : "2025-08-21T14:02:58Z", +2025-08-21T14:03:02Z TRACE Received state_system: "level" : 300 +2025-08-21T14:03:02Z TRACE Received state_system: }, +2025-08-21T14:03:02Z TRACE Received state_system: "timestamp" : "2025-08-21T14:03:01Z", +2025-08-21T14:03:02Z TRACE Received state_system: "version" : "1.5.3" +2025-08-21T14:03:02Z TRACE Received state_system: } +2025-08-21T14:03:02Z DEBUG Handling device message state_system MP:f288c153-0 +2025-08-21T14:03:02Z TRACE Ignoring partial state update +2025-08-21T14:03:02Z DEBUG Received command AHU-1/state/discovery as MP:f288c153-1 +2025-08-21T14:03:02Z TRACE Received state_discovery: { +2025-08-21T14:03:02Z TRACE Received state_discovery: "families" : { }, +2025-08-21T14:03:02Z TRACE Received state_discovery: "timestamp" : "2025-08-21T14:03:01Z", +2025-08-21T14:03:02Z TRACE Received state_discovery: "version" : "1.5.3" +2025-08-21T14:03:02Z TRACE Received state_discovery: } +2025-08-21T14:03:02Z DEBUG Handling device message state_discovery MP:f288c153-1 +2025-08-21T14:03:02Z TRACE Ignoring partial state update +2025-08-21T14:03:02Z DEBUG Received command AHU-1/state/localnet as MP:f288c153-2 +2025-08-21T14:03:02Z TRACE Received state_localnet: { +2025-08-21T14:03:02Z TRACE Received state_localnet: "families" : { +2025-08-21T14:03:02Z TRACE Received state_localnet: "ether" : { +2025-08-21T14:03:02Z TRACE Received state_localnet: "addr" : "42:01:ac:10:83:22" +2025-08-21T14:03:02Z TRACE Received state_localnet: }, +2025-08-21T14:03:02Z TRACE Received state_localnet: "ipv4" : { +2025-08-21T14:03:02Z TRACE Received state_localnet: "addr" : "172.16.131.34" +2025-08-21T14:03:02Z TRACE Received state_localnet: }, +2025-08-21T14:03:02Z TRACE Received state_localnet: "vendor" : { +2025-08-21T14:03:02Z TRACE Received state_localnet: "addr" : "28179023" +2025-08-21T14:03:02Z TRACE Received state_localnet: }, +2025-08-21T14:03:02Z TRACE Received state_localnet: "bacnet" : { +2025-08-21T14:03:02Z TRACE Received state_localnet: "addr" : "27312" +2025-08-21T14:03:02Z TRACE Received state_localnet: } +2025-08-21T14:03:02Z TRACE Received state_localnet: }, +2025-08-21T14:03:02Z TRACE Received state_localnet: "timestamp" : "2025-08-21T14:03:01Z", +2025-08-21T14:03:02Z TRACE Received state_localnet: "version" : "1.5.3" +2025-08-21T14:03:02Z TRACE Received state_localnet: } +2025-08-21T14:03:02Z DEBUG Handling device message state_localnet MP:f288c153-2 +2025-08-21T14:03:02Z TRACE Ignoring partial state update +2025-08-21T14:03:02Z DEBUG Received command AHU-1/state/pointset as MP:f288c153-3 +2025-08-21T14:03:02Z TRACE Received state_pointset: { +2025-08-21T14:03:02Z TRACE Received state_pointset: "points" : { +2025-08-21T14:03:02Z TRACE Received state_pointset: "filter_alarm_pressure_status" : { +2025-08-21T14:03:02Z TRACE Received state_pointset: "units" : "No-units" +2025-08-21T14:03:02Z TRACE Received state_pointset: }, +2025-08-21T14:03:02Z TRACE Received state_pointset: "filter_differential_pressure_setpoint" : { +2025-08-21T14:03:02Z TRACE Received state_pointset: "units" : "Bars" +2025-08-21T14:03:02Z TRACE Received state_pointset: }, +2025-08-21T14:03:02Z TRACE Received state_pointset: "filter_differential_pressure_sensor" : { +2025-08-21T14:03:02Z TRACE Received state_pointset: "units" : "Degrees-Celsius" +2025-08-21T14:03:02Z TRACE Received state_pointset: } +2025-08-21T14:03:02Z TRACE Received state_pointset: }, +2025-08-21T14:03:02Z TRACE Received state_pointset: "timestamp" : "2025-08-21T14:03:01Z", +2025-08-21T14:03:02Z TRACE Received state_pointset: "version" : "1.5.3" +2025-08-21T14:03:02Z TRACE Received state_pointset: } +2025-08-21T14:03:02Z DEBUG Handling device message state_pointset MP:f288c153-3 +2025-08-21T14:03:02Z TRACE Ignoring partial state update +2025-08-21T14:03:03Z DEBUG Received command AHU-1/config/update as RC:785c42.0000000c +2025-08-21T14:03:03Z DEBUG Received config_update +2025-08-21T14:03:03Z DEBUG Handling update message config_update RC:785c42.0000000c +2025-08-21T14:03:03Z DEBUG Removed configTransaction RC:785c42.0000000c +2025-08-21T14:03:03Z DEBUG Set last_start changed false, last_start 2025-08-21T14:02:13Z +2025-08-21T14:03:03Z DEBUG Updated config 2025-08-21T14:03:02Z RC:785c42.0000000c +2025-08-21T14:03:03Z INFO Updated config #009: Changed 1 fields: +2025-08-21T14:03:03Z INFO Updated config #009: Add `pointset.points.filter_differential_pressure_setpoint.set_value` = `60` +2025-08-21T14:03:03Z DEBUG Expected last_config now 2025-08-21T14:03:02Z +2025-08-21T14:03:03Z DEBUG Detail config update synchronized is now: device state not updated since config issued, last_config not synced in state +2025-08-21T14:03:03Z DEBUG Received command AHU-1/config/pointset as CU:785c42.0000000c +2025-08-21T14:03:03Z TRACE Received config_pointset: { +2025-08-21T14:03:03Z TRACE Received config_pointset: "operation" : "REPLY" +2025-08-21T14:03:03Z TRACE Received config_pointset: } +2025-08-21T14:03:03Z DEBUG Handling device message config_pointset CU:785c42.0000000c +2025-08-21T14:03:03Z TRACE Ignoring echo configTransaction CU:785c42.0000000c +2025-08-21T14:03:04Z DEBUG Received command AHU-1/state/update as MP:c9037ee8 +2025-08-21T14:03:04Z DEBUG Received state_update +2025-08-21T14:03:04Z DEBUG Handling update message state_update MP:c9037ee8 +2025-08-21T14:03:04Z DEBUG Capturing AHU-1 message state_update +2025-08-21T14:03:04Z DEBUG Updated state after 1s 2025-08-21T14:03:03Z MP:c9037ee8 +2025-08-21T14:03:04Z INFO Updated state #012: Changed 6 fields: +2025-08-21T14:03:04Z INFO Updated state #012: Set `system.last_config` = `2025-08-21T14:03:02Z` +2025-08-21T14:03:04Z INFO Updated state #012: Set `system.status.timestamp` = `2025-08-21T14:03:02Z` +2025-08-21T14:03:04Z INFO Updated state #012: Add `pointset.points.filter_alarm_pressure_status.value_state` = `updating` +2025-08-21T14:03:04Z INFO Updated state #012: Add `pointset.points.filter_differential_pressure_setpoint.value_state` = `updating` +2025-08-21T14:03:04Z INFO Updated state #012: Add `pointset.points.filter_differential_pressure_sensor.value_state` = `updating` +2025-08-21T14:03:04Z INFO Updated state #012: Set `timestamp` = `2025-08-21T14:03:03Z` +2025-08-21T14:03:04Z DEBUG Updated state has last_config 2025-08-21T14:03:02Z (expecting 2025-08-21T14:03:02Z) +2025-08-21T14:03:04Z DEBUG Received command AHU-1/state/system as MP:c9037ee8-0 +2025-08-21T14:03:04Z TRACE Received state_system: { +2025-08-21T14:03:04Z TRACE Received state_system: "hardware" : { +2025-08-21T14:03:04Z TRACE Received state_system: "make" : "BOS", +2025-08-21T14:03:04Z TRACE Received state_system: "model" : "pubber" +2025-08-21T14:03:04Z TRACE Received state_system: }, +2025-08-21T14:03:04Z TRACE Received state_system: "last_config" : "2025-08-21T14:03:02Z", +2025-08-21T14:03:04Z TRACE Received state_system: "operation" : { +2025-08-21T14:03:04Z TRACE Received state_system: "operational" : true, +2025-08-21T14:03:04Z TRACE Received state_system: "last_start" : "2025-08-21T14:02:13Z", +2025-08-21T14:03:04Z TRACE Received state_system: "restart_count" : 1, +2025-08-21T14:03:04Z TRACE Received state_system: "mode" : "initial" +2025-08-21T14:03:04Z TRACE Received state_system: }, +2025-08-21T14:03:04Z TRACE Received state_system: "serial_no" : "742178", +2025-08-21T14:03:04Z TRACE Received state_system: "software" : { +2025-08-21T14:03:04Z TRACE Received state_system: "firmware" : "v1" +2025-08-21T14:03:04Z TRACE Received state_system: }, +2025-08-21T14:03:04Z TRACE Received state_system: "status" : { +2025-08-21T14:03:04Z TRACE Received state_system: "message" : "success", +2025-08-21T14:03:04Z TRACE Received state_system: "category" : "system.config.apply", +2025-08-21T14:03:04Z TRACE Received state_system: "timestamp" : "2025-08-21T14:03:02Z", +2025-08-21T14:03:04Z TRACE Received state_system: "level" : 300 +2025-08-21T14:03:04Z TRACE Received state_system: }, +2025-08-21T14:03:04Z TRACE Received state_system: "timestamp" : "2025-08-21T14:03:03Z", +2025-08-21T14:03:04Z TRACE Received state_system: "version" : "1.5.3" +2025-08-21T14:03:04Z TRACE Received state_system: } +2025-08-21T14:03:04Z DEBUG Handling device message state_system MP:c9037ee8-0 +2025-08-21T14:03:04Z TRACE Ignoring partial state update +2025-08-21T14:03:04Z DEBUG Detail config update synchronized is now: null +2025-08-21T14:03:04Z DEBUG Stage finished waiting for config update synchronized at @28s after 2s +2025-08-21T14:03:04Z TRACE Stage resume waiting for target point has value_state updating at @28s +2025-08-21T14:03:04Z DEBUG Config sync took 2s +2025-08-21T14:03:04Z DEBUG Finished wait for config sync pending: null +2025-08-21T14:03:04Z DEBUG New lastConfigApplied at 2025-08-21T14:03:04Z +2025-08-21T14:03:04Z DEBUG Update config before target point has value_state updating timestamp 2025-08-21T14:03:02Z +2025-08-21T14:03:04Z DEBUG Recorded sequence: 1. Update config before target point has value_state updating +2025-08-21T14:03:04Z INFO Device config Add `pointset.points.filter_differential_pressure_setpoint.set_value` = `60` +2025-08-21T14:03:04Z TRACE Update config before target point has value_state updating: Add `pointset.points.filter_differential_pressure_setpoint.set_value` = `60` +2025-08-21T14:03:04Z DEBUG Value state updating == applied (false) +2025-08-21T14:03:04Z DEBUG Value state updating == updating (true) +2025-08-21T14:03:04Z DEBUG Value state updating == applied (false) +2025-08-21T14:03:04Z DEBUG Value state updating == updating (true) +2025-08-21T14:03:04Z DEBUG Recorded sequence: 1. Wait until target point has value_state updating +2025-08-21T14:03:04Z DEBUG Stage finished waiting for target point has value_state updating at @28s after 2s +2025-08-21T14:03:04Z TRACE Stage resume waiting for executing test at @28s +2025-08-21T14:03:04Z TRACE Stage suspend waiting for executing test at @28s +2025-08-21T14:03:04Z INFO Stage start waiting for target point has value_state applied at @28s +2025-08-21T14:03:04Z DEBUG Delay from lastConfigApplied 2025-08-21T14:03:04.026378158Z is 1999ms +2025-08-21T14:03:04Z DEBUG Rate-limiting config by 1999ms +2025-08-21T14:03:06Z DEBUG System config extra field null +2025-08-21T14:03:06Z TRACE Updated check config_system: false +2025-08-21T14:03:06Z TRACE Updated check config_pointset: false +2025-08-21T14:03:06Z TRACE Updated check config_gateway: false +2025-08-21T14:03:06Z TRACE Updated check config_localnet: false +2025-08-21T14:03:06Z TRACE Updated check config_blobset: false +2025-08-21T14:03:06Z TRACE Updated check config_discovery: false +2025-08-21T14:03:06Z DEBUG New lastConfigApplied at 2025-08-21T14:03:06Z +2025-08-21T14:03:06Z DEBUG Update config before target point has value_state applied timestamp 2025-08-21T14:03:02Z +2025-08-21T14:03:06Z DEBUG Value state updating == applied (false) +2025-08-21T14:03:06Z DEBUG Value state updating == applied (false) +2025-08-21T14:03:06Z DEBUG Received command AHU-1/state/discovery as MP:c9037ee8-1 +2025-08-21T14:03:06Z TRACE Received state_discovery: { +2025-08-21T14:03:06Z TRACE Received state_discovery: "families" : { }, +2025-08-21T14:03:06Z TRACE Received state_discovery: "timestamp" : "2025-08-21T14:03:03Z", +2025-08-21T14:03:06Z TRACE Received state_discovery: "version" : "1.5.3" +2025-08-21T14:03:06Z TRACE Received state_discovery: } +2025-08-21T14:03:06Z DEBUG Handling device message state_discovery MP:c9037ee8-1 +2025-08-21T14:03:06Z TRACE Ignoring partial state update +2025-08-21T14:03:06Z DEBUG Value state updating == applied (false) +2025-08-21T14:03:06Z DEBUG Received command AHU-1/state/localnet as MP:c9037ee8-2 +2025-08-21T14:03:06Z TRACE Received state_localnet: { +2025-08-21T14:03:06Z TRACE Received state_localnet: "families" : { +2025-08-21T14:03:06Z TRACE Received state_localnet: "ether" : { +2025-08-21T14:03:06Z TRACE Received state_localnet: "addr" : "42:01:ac:10:83:22" +2025-08-21T14:03:06Z TRACE Received state_localnet: }, +2025-08-21T14:03:06Z TRACE Received state_localnet: "ipv4" : { +2025-08-21T14:03:06Z TRACE Received state_localnet: "addr" : "172.16.131.34" +2025-08-21T14:03:06Z TRACE Received state_localnet: }, +2025-08-21T14:03:06Z TRACE Received state_localnet: "vendor" : { +2025-08-21T14:03:06Z TRACE Received state_localnet: "addr" : "28179023" +2025-08-21T14:03:06Z TRACE Received state_localnet: }, +2025-08-21T14:03:06Z TRACE Received state_localnet: "bacnet" : { +2025-08-21T14:03:06Z TRACE Received state_localnet: "addr" : "27312" +2025-08-21T14:03:06Z TRACE Received state_localnet: } +2025-08-21T14:03:06Z TRACE Received state_localnet: }, +2025-08-21T14:03:06Z TRACE Received state_localnet: "timestamp" : "2025-08-21T14:03:03Z", +2025-08-21T14:03:06Z TRACE Received state_localnet: "version" : "1.5.3" +2025-08-21T14:03:06Z TRACE Received state_localnet: } +2025-08-21T14:03:06Z DEBUG Handling device message state_localnet MP:c9037ee8-2 +2025-08-21T14:03:06Z TRACE Ignoring partial state update +2025-08-21T14:03:06Z DEBUG Value state updating == applied (false) +2025-08-21T14:03:06Z DEBUG Received command AHU-1/state/pointset as MP:c9037ee8-3 +2025-08-21T14:03:06Z TRACE Received state_pointset: { +2025-08-21T14:03:06Z TRACE Received state_pointset: "points" : { +2025-08-21T14:03:06Z TRACE Received state_pointset: "filter_alarm_pressure_status" : { +2025-08-21T14:03:06Z TRACE Received state_pointset: "units" : "No-units", +2025-08-21T14:03:06Z TRACE Received state_pointset: "value_state" : "updating" +2025-08-21T14:03:06Z TRACE Received state_pointset: }, +2025-08-21T14:03:06Z TRACE Received state_pointset: "filter_differential_pressure_setpoint" : { +2025-08-21T14:03:06Z TRACE Received state_pointset: "units" : "Bars", +2025-08-21T14:03:06Z TRACE Received state_pointset: "value_state" : "updating" +2025-08-21T14:03:06Z TRACE Received state_pointset: }, +2025-08-21T14:03:06Z TRACE Received state_pointset: "filter_differential_pressure_sensor" : { +2025-08-21T14:03:06Z TRACE Received state_pointset: "units" : "Degrees-Celsius", +2025-08-21T14:03:06Z TRACE Received state_pointset: "value_state" : "updating" +2025-08-21T14:03:06Z TRACE Received state_pointset: } +2025-08-21T14:03:06Z TRACE Received state_pointset: }, +2025-08-21T14:03:06Z TRACE Received state_pointset: "timestamp" : "2025-08-21T14:03:03Z", +2025-08-21T14:03:06Z TRACE Received state_pointset: "version" : "1.5.3" +2025-08-21T14:03:06Z TRACE Received state_pointset: } +2025-08-21T14:03:06Z DEBUG Handling device message state_pointset MP:c9037ee8-3 +2025-08-21T14:03:06Z TRACE Ignoring partial state update +2025-08-21T14:03:06Z DEBUG Value state updating == applied (false) +2025-08-21T14:03:06Z DEBUG Received command AHU-1/events/pointset as MP:66f951e3 +2025-08-21T14:03:06Z TRACE Received events_pointset: { +2025-08-21T14:03:06Z TRACE Received events_pointset: "points" : { +2025-08-21T14:03:06Z TRACE Received events_pointset: "filter_alarm_pressure_status" : { +2025-08-21T14:03:06Z TRACE Received events_pointset: "present_value" : true +2025-08-21T14:03:06Z TRACE Received events_pointset: }, +2025-08-21T14:03:06Z TRACE Received events_pointset: "filter_differential_pressure_setpoint" : { +2025-08-21T14:03:06Z TRACE Received events_pointset: "present_value" : 51 +2025-08-21T14:03:06Z TRACE Received events_pointset: }, +2025-08-21T14:03:06Z TRACE Received events_pointset: "filter_differential_pressure_sensor" : { +2025-08-21T14:03:06Z TRACE Received events_pointset: "present_value" : 12 +2025-08-21T14:03:06Z TRACE Received events_pointset: } +2025-08-21T14:03:06Z TRACE Received events_pointset: }, +2025-08-21T14:03:06Z TRACE Received events_pointset: "timestamp" : "2025-08-21T14:03:04Z", +2025-08-21T14:03:06Z TRACE Received events_pointset: "version" : "1.5.3" +2025-08-21T14:03:06Z TRACE Received events_pointset: } +2025-08-21T14:03:06Z DEBUG Handling device message events_pointset MP:66f951e3 +2025-08-21T14:03:06Z DEBUG Capturing AHU-1 message events_pointset +2025-08-21T14:03:06Z DEBUG Value state updating == applied (false) +2025-08-21T14:03:06Z DEBUG Received command AHU-1/events/system as MP:a188b29f +2025-08-21T14:03:06Z DEBUG Received events_system 2025-08-21T14:02:54Z INFO device.log: Completing delayed writeback for filter_alarm_pressure_status +2025-08-21T14:03:06Z DEBUG Received events_system 2025-08-21T14:02:54Z INFO device.log: Completing delayed writeback for filter_differential_pressure_sensor +2025-08-21T14:03:06Z DEBUG Received events_system 2025-08-21T14:02:55Z INFO device.log: Update state 2025-08-21T14:02:55Z last_config 2025-08-21T14:02:51Z +2025-08-21T14:03:06Z DEBUG Received events_system 2025-08-21T14:02:55Z INFO device.log: Device AHU-1 config handler +2025-08-21T14:03:06Z DEBUG Received events_system 2025-08-21T14:02:55Z INFO device.log: 2025-08-21T14:02:55Z received config 2025-08-21T14:02:55Z +2025-08-21T14:03:06Z DEBUG Received events_system 2025-08-21T14:02:55Z INFO device.log: Applying slow writeback for point filter_alarm_pressure_status with 3s delay +2025-08-21T14:03:06Z DEBUG Received events_system 2025-08-21T14:02:55Z INFO device.log: Applying slow writeback for point filter_differential_pressure_setpoint with 3s delay +2025-08-21T14:03:06Z DEBUG Received events_system 2025-08-21T14:02:55Z INFO device.log: Applying slow writeback for point filter_differential_pressure_sensor with 3s delay +2025-08-21T14:03:06Z DEBUG Received events_system 2025-08-21T14:02:55Z NOTICE system.config.apply: success +2025-08-21T14:03:06Z DEBUG Received events_system 2025-08-21T14:02:56Z INFO device.log: Device AHU-1 config handler +2025-08-21T14:03:06Z DEBUG Received events_system 2025-08-21T14:02:56Z INFO device.log: 2025-08-21T14:02:56Z received config 2025-08-21T14:02:56Z +2025-08-21T14:03:06Z DEBUG Received events_system 2025-08-21T14:02:56Z INFO device.log: Applying slow writeback for point filter_alarm_pressure_status with 3s delay +2025-08-21T14:03:06Z DEBUG Received events_system 2025-08-21T14:02:56Z INFO device.log: Applying slow writeback for point filter_differential_pressure_setpoint with 3s delay +2025-08-21T14:03:06Z DEBUG Received events_system 2025-08-21T14:02:56Z INFO device.log: Applying slow writeback for point filter_differential_pressure_sensor with 3s delay +2025-08-21T14:03:06Z DEBUG Received events_system 2025-08-21T14:02:56Z NOTICE system.config.apply: success +2025-08-21T14:03:06Z DEBUG Received events_system 2025-08-21T14:02:57Z INFO device.log: Update state 2025-08-21T14:02:57Z last_config 2025-08-21T14:02:56Z +2025-08-21T14:03:06Z DEBUG Received events_system 2025-08-21T14:02:57Z INFO device.log: Device AHU-1 config handler +2025-08-21T14:03:06Z DEBUG Received events_system 2025-08-21T14:02:57Z INFO device.log: 2025-08-21T14:02:57Z received config 2025-08-21T14:02:57Z +2025-08-21T14:03:06Z DEBUG Received events_system 2025-08-21T14:02:57Z INFO device.log: Applying slow writeback for point filter_alarm_pressure_status with 3s delay +2025-08-21T14:03:06Z DEBUG Received events_system 2025-08-21T14:02:57Z INFO device.log: Applying slow writeback for point filter_differential_pressure_setpoint with 3s delay +2025-08-21T14:03:06Z DEBUG Received events_system 2025-08-21T14:02:57Z INFO device.log: Applying slow writeback for point filter_differential_pressure_sensor with 3s delay +2025-08-21T14:03:06Z DEBUG Received events_system 2025-08-21T14:02:57Z NOTICE system.config.apply: success +2025-08-21T14:03:06Z DEBUG Received events_system 2025-08-21T14:02:58Z INFO device.log: Completing delayed writeback for filter_alarm_pressure_status +2025-08-21T14:03:06Z DEBUG Received events_system 2025-08-21T14:02:58Z INFO device.log: Completing delayed writeback for filter_differential_pressure_setpoint +2025-08-21T14:03:06Z DEBUG Received events_system 2025-08-21T14:02:58Z INFO device.log: Completing delayed writeback for filter_differential_pressure_sensor +2025-08-21T14:03:06Z DEBUG Received events_system 2025-08-21T14:02:58Z INFO device.log: Device AHU-1 config handler +2025-08-21T14:03:06Z DEBUG Received events_system 2025-08-21T14:02:58Z INFO device.log: 2025-08-21T14:02:58Z received config 2025-08-21T14:02:58Z +2025-08-21T14:03:06Z DEBUG Received events_system 2025-08-21T14:02:58Z INFO device.log: Applying slow writeback for point filter_alarm_pressure_status with 3s delay +2025-08-21T14:03:06Z DEBUG Received events_system 2025-08-21T14:02:58Z INFO device.log: Applying slow writeback for point filter_differential_pressure_setpoint with 3s delay +2025-08-21T14:03:06Z DEBUG Received events_system 2025-08-21T14:02:58Z INFO device.log: Applying slow writeback for point filter_differential_pressure_sensor with 3s delay +2025-08-21T14:03:06Z DEBUG Received events_system 2025-08-21T14:02:58Z NOTICE system.config.apply: success +2025-08-21T14:03:06Z DEBUG Received events_system 2025-08-21T14:02:59Z INFO device.log: Update state 2025-08-21T14:02:59Z last_config 2025-08-21T14:02:58Z +2025-08-21T14:03:06Z DEBUG Received events_system 2025-08-21T14:02:59Z INFO device.log: Completing delayed writeback for filter_alarm_pressure_status +2025-08-21T14:03:06Z DEBUG Received events_system 2025-08-21T14:02:59Z INFO device.log: Completing delayed writeback for filter_differential_pressure_setpoint +2025-08-21T14:03:06Z DEBUG Received events_system 2025-08-21T14:02:59Z INFO device.log: Completing delayed writeback for filter_differential_pressure_sensor +2025-08-21T14:03:06Z DEBUG Received events_system 2025-08-21T14:03:00Z INFO device.log: Completing delayed writeback for filter_alarm_pressure_status +2025-08-21T14:03:06Z DEBUG Received events_system 2025-08-21T14:03:00Z INFO device.log: Completing delayed writeback for filter_differential_pressure_setpoint +2025-08-21T14:03:06Z DEBUG Received events_system 2025-08-21T14:03:00Z INFO device.log: Completing delayed writeback for filter_differential_pressure_sensor +2025-08-21T14:03:06Z DEBUG Received events_system 2025-08-21T14:03:01Z INFO device.log: Update state 2025-08-21T14:03:01Z last_config 2025-08-21T14:02:58Z +2025-08-21T14:03:06Z DEBUG Received events_system 2025-08-21T14:03:01Z INFO device.log: Completing delayed writeback for filter_alarm_pressure_status +2025-08-21T14:03:06Z DEBUG Received events_system 2025-08-21T14:03:01Z INFO device.log: Completing delayed writeback for filter_differential_pressure_setpoint +2025-08-21T14:03:06Z DEBUG Received events_system 2025-08-21T14:03:01Z INFO device.log: Completing delayed writeback for filter_differential_pressure_sensor +2025-08-21T14:03:06Z DEBUG Received events_system 2025-08-21T14:03:02Z INFO device.log: Device AHU-1 config handler +2025-08-21T14:03:06Z DEBUG Received events_system 2025-08-21T14:03:02Z INFO device.log: 2025-08-21T14:03:02Z received config 2025-08-21T14:03:02Z +2025-08-21T14:03:06Z DEBUG Received events_system 2025-08-21T14:03:02Z INFO device.log: Applying slow writeback for point filter_alarm_pressure_status with 3s delay +2025-08-21T14:03:06Z DEBUG Received events_system 2025-08-21T14:03:02Z INFO device.log: Applying slow writeback for point filter_differential_pressure_setpoint with 3s delay +2025-08-21T14:03:06Z DEBUG Received events_system 2025-08-21T14:03:02Z INFO device.log: Applying slow writeback for point filter_differential_pressure_sensor with 3s delay +2025-08-21T14:03:06Z DEBUG Received events_system 2025-08-21T14:03:02Z NOTICE system.config.apply: success +2025-08-21T14:03:06Z DEBUG Received events_system 2025-08-21T14:03:03Z INFO device.log: Update state 2025-08-21T14:03:03Z last_config 2025-08-21T14:03:02Z +2025-08-21T14:03:06Z DEBUG Handling device message events_system MP:a188b29f +2025-08-21T14:03:06Z DEBUG Capturing AHU-1 message events_system +2025-08-21T14:03:06Z DEBUG Value state updating == applied (false) +2025-08-21T14:03:06Z DEBUG Received command AHU-1/state/update as MP:cc44bc82 +2025-08-21T14:03:06Z DEBUG Received state_update +2025-08-21T14:03:06Z DEBUG Handling update message state_update MP:cc44bc82 +2025-08-21T14:03:06Z DEBUG Capturing AHU-1 message state_update +2025-08-21T14:03:06Z DEBUG Updated state after 1s 2025-08-21T14:03:05Z MP:cc44bc82 +2025-08-21T14:03:06Z INFO Updated state #013: Changed 4 fields: +2025-08-21T14:03:06Z INFO Updated state #013: Remove `pointset.points.filter_alarm_pressure_status.value_state` +2025-08-21T14:03:06Z INFO Updated state #013: Set `pointset.points.filter_differential_pressure_setpoint.value_state` = `applied` +2025-08-21T14:03:06Z INFO Updated state #013: Remove `pointset.points.filter_differential_pressure_sensor.value_state` +2025-08-21T14:03:06Z INFO Updated state #013: Set `timestamp` = `2025-08-21T14:03:05Z` +2025-08-21T14:03:06Z DEBUG Updated state has last_config 2025-08-21T14:03:02Z (expecting 2025-08-21T14:03:02Z) +2025-08-21T14:03:06Z DEBUG Value state applied == applied (true) +2025-08-21T14:03:06Z DEBUG Detail target point has value_state applied is now: null +2025-08-21T14:03:06Z DEBUG Recorded sequence: 1. Wait until target point has value_state applied +2025-08-21T14:03:06Z DEBUG Stage finished waiting for target point has value_state applied at @30s after 2s +2025-08-21T14:03:06Z TRACE Stage resume waiting for executing test at @30s +2025-08-21T14:03:06Z DEBUG stage done waiting for executing test at @30s +2025-08-21T14:03:06Z DEBUG Removing implicit system capability LAST_CONFIG +2025-08-21T14:03:06Z NOTICE RESULT pass writeback writeback_operation ALPHA 10/10 Sequence complete +2025-08-21T14:03:06Z NOTICE Sequence complete +2025-08-21T14:03:06Z NOTICE Ending test writeback_operation after @30s ################################ diff --git a/validator/sequences/writeback_operation/sequence.md b/validator/sequences/writeback_operation/sequence.md index f717b4f3a8..3c8a717c93 100644 --- a/validator/sequences/writeback_operation/sequence.md +++ b/validator/sequences/writeback_operation/sequence.md @@ -1,7 +1,7 @@ ## writeback_operation (ALPHA) -Implements writeback operations +Tests intermediate UPDATING state of a writeback operation 1. Update config before target point has value_state default (null) * Remove `pointset.points.filter_differential_pressure_setpoint.set_value` diff --git a/validator/sequences/writeback_operation/state_discovery.attr b/validator/sequences/writeback_operation/state_discovery.attr index 5c99e161b8..f0a1530acb 100644 --- a/validator/sequences/writeback_operation/state_discovery.attr +++ b/validator/sequences/writeback_operation/state_discovery.attr @@ -3,8 +3,8 @@ "deviceNumId" : "123456789101112", "deviceRegistryId" : "ZZ-TRI-FECTA", "projectId" : "localhost", - "transactionId" : "MP:cec94173-1", - "publishTime" : "2025-08-21T06:57:07Z", + "transactionId" : "MP:c9037ee8-1", + "publishTime" : "2025-08-21T14:03:03Z", "subFolder" : "discovery", "subType" : "state" } \ No newline at end of file diff --git a/validator/sequences/writeback_operation/state_discovery.json b/validator/sequences/writeback_operation/state_discovery.json index 1153894160..885e62480e 100644 --- a/validator/sequences/writeback_operation/state_discovery.json +++ b/validator/sequences/writeback_operation/state_discovery.json @@ -1,5 +1,5 @@ { "families" : { }, - "timestamp" : "2025-08-21T06:57:07Z", + "timestamp" : "2025-08-21T14:03:03Z", "version" : "1.5.3" } \ No newline at end of file diff --git a/validator/sequences/writeback_operation/state_localnet.attr b/validator/sequences/writeback_operation/state_localnet.attr index 39dcaa095f..f05afc91ef 100644 --- a/validator/sequences/writeback_operation/state_localnet.attr +++ b/validator/sequences/writeback_operation/state_localnet.attr @@ -3,8 +3,8 @@ "deviceNumId" : "123456789101112", "deviceRegistryId" : "ZZ-TRI-FECTA", "projectId" : "localhost", - "transactionId" : "MP:cec94173-2", - "publishTime" : "2025-08-21T06:57:07Z", + "transactionId" : "MP:c9037ee8-2", + "publishTime" : "2025-08-21T14:03:03Z", "subFolder" : "localnet", "subType" : "state" } \ No newline at end of file diff --git a/validator/sequences/writeback_operation/state_localnet.json b/validator/sequences/writeback_operation/state_localnet.json index ebbfb11467..ad7f0db2d7 100644 --- a/validator/sequences/writeback_operation/state_localnet.json +++ b/validator/sequences/writeback_operation/state_localnet.json @@ -13,6 +13,6 @@ "addr" : "27312" } }, - "timestamp" : "2025-08-21T06:57:07Z", + "timestamp" : "2025-08-21T14:03:03Z", "version" : "1.5.3" } \ No newline at end of file diff --git a/validator/sequences/writeback_operation/state_pointset.attr b/validator/sequences/writeback_operation/state_pointset.attr index 2d208e9375..06a6f7e77d 100644 --- a/validator/sequences/writeback_operation/state_pointset.attr +++ b/validator/sequences/writeback_operation/state_pointset.attr @@ -3,8 +3,8 @@ "deviceNumId" : "123456789101112", "deviceRegistryId" : "ZZ-TRI-FECTA", "projectId" : "localhost", - "transactionId" : "MP:cec94173-3", - "publishTime" : "2025-08-21T06:57:07Z", + "transactionId" : "MP:c9037ee8-3", + "publishTime" : "2025-08-21T14:03:03Z", "subFolder" : "pointset", "subType" : "state" } \ No newline at end of file diff --git a/validator/sequences/writeback_operation/state_pointset.json b/validator/sequences/writeback_operation/state_pointset.json index 2c8e566cb8..c805863531 100644 --- a/validator/sequences/writeback_operation/state_pointset.json +++ b/validator/sequences/writeback_operation/state_pointset.json @@ -13,6 +13,6 @@ "value_state" : "updating" } }, - "timestamp" : "2025-08-21T06:57:07Z", + "timestamp" : "2025-08-21T14:03:03Z", "version" : "1.5.3" } \ No newline at end of file diff --git a/validator/sequences/writeback_operation/state_system.attr b/validator/sequences/writeback_operation/state_system.attr index 600015fc37..73f48b1958 100644 --- a/validator/sequences/writeback_operation/state_system.attr +++ b/validator/sequences/writeback_operation/state_system.attr @@ -3,8 +3,8 @@ "deviceNumId" : "123456789101112", "deviceRegistryId" : "ZZ-TRI-FECTA", "projectId" : "localhost", - "transactionId" : "MP:cec94173-0", - "publishTime" : "2025-08-21T06:57:07Z", + "transactionId" : "MP:c9037ee8-0", + "publishTime" : "2025-08-21T14:03:03Z", "subFolder" : "system", "subType" : "state" } \ No newline at end of file diff --git a/validator/sequences/writeback_operation/state_system.json b/validator/sequences/writeback_operation/state_system.json index 00a5ce81c9..5595f1bf8d 100644 --- a/validator/sequences/writeback_operation/state_system.json +++ b/validator/sequences/writeback_operation/state_system.json @@ -3,23 +3,23 @@ "make" : "BOS", "model" : "pubber" }, - "last_config" : "2025-08-21T06:57:06Z", + "last_config" : "2025-08-21T14:03:02Z", "operation" : { "operational" : true, - "last_start" : "2025-08-21T06:55:44Z", + "last_start" : "2025-08-21T14:02:13Z", "restart_count" : 1, "mode" : "initial" }, - "serial_no" : "742132", + "serial_no" : "742178", "software" : { "firmware" : "v1" }, "status" : { "message" : "success", "category" : "system.config.apply", - "timestamp" : "2025-08-21T06:57:06Z", + "timestamp" : "2025-08-21T14:03:02Z", "level" : 300 }, - "timestamp" : "2025-08-21T06:57:07Z", + "timestamp" : "2025-08-21T14:03:03Z", "version" : "1.5.3" } \ No newline at end of file diff --git a/validator/sequences/writeback_operation/state_update.attr b/validator/sequences/writeback_operation/state_update.attr index 157264e34a..9e6d27e086 100644 --- a/validator/sequences/writeback_operation/state_update.attr +++ b/validator/sequences/writeback_operation/state_update.attr @@ -3,8 +3,8 @@ "deviceNumId" : "123456789101112", "deviceRegistryId" : "ZZ-TRI-FECTA", "projectId" : "localhost", - "transactionId" : "MP:fa216e61", - "publishTime" : "2025-08-21T06:57:09Z", + "transactionId" : "MP:cc44bc82", + "publishTime" : "2025-08-21T14:03:05Z", "subFolder" : "update", "subType" : "state" } \ No newline at end of file diff --git a/validator/sequences/writeback_operation/state_update.json b/validator/sequences/writeback_operation/state_update.json index e60223709b..0623950ecd 100644 --- a/validator/sequences/writeback_operation/state_update.json +++ b/validator/sequences/writeback_operation/state_update.json @@ -33,14 +33,14 @@ } }, "system" : { - "last_config" : "2025-08-21T06:57:06Z", + "last_config" : "2025-08-21T14:03:02Z", "operation" : { "operational" : true, - "last_start" : "2025-08-21T06:55:44Z", + "last_start" : "2025-08-21T14:02:13Z", "restart_count" : 1, "mode" : "initial" }, - "serial_no" : "742132", + "serial_no" : "742178", "hardware" : { "make" : "BOS", "model" : "pubber" @@ -51,10 +51,10 @@ "status" : { "message" : "success", "category" : "system.config.apply", - "timestamp" : "2025-08-21T06:57:06Z", + "timestamp" : "2025-08-21T14:03:02Z", "level" : 300 } }, - "timestamp" : "2025-08-21T06:57:09Z", + "timestamp" : "2025-08-21T14:03:05Z", "version" : "1.5.3" } \ No newline at end of file diff --git a/validator/sequences/writeback_operation/state_validation.attr b/validator/sequences/writeback_operation/state_validation.attr index ebb372fcdd..29f1fe5c00 100644 --- a/validator/sequences/writeback_operation/state_validation.attr +++ b/validator/sequences/writeback_operation/state_validation.attr @@ -3,8 +3,8 @@ "deviceNumId" : "123456789101112", "deviceRegistryId" : "ZZ-TRI-FECTA", "projectId" : "localhost", - "transactionId" : "RC:3109d1.00000003", - "publishTime" : "2025-08-21T06:56:47Z", + "transactionId" : "RC:785c42.00000003", + "publishTime" : "2025-08-21T14:02:43Z", "subFolder" : "validation", "subType" : "state" } \ No newline at end of file diff --git a/validator/src/main/java/com/google/daq/mqtt/sequencer/PointsetBase.java b/validator/src/main/java/com/google/daq/mqtt/sequencer/PointsetBase.java index ecb33d563c..913230a411 100644 --- a/validator/src/main/java/com/google/daq/mqtt/sequencer/PointsetBase.java +++ b/validator/src/main/java/com/google/daq/mqtt/sequencer/PointsetBase.java @@ -18,6 +18,7 @@ public abstract class PointsetBase extends SequenceBase { public static final String FAILURE_STATE = "failure"; public static final String APPLIED_STATE = "applied"; public static final String TWEAKED_REF = "tweaked_ref"; + public static final String UPDATING_STATE = "updating"; @Override public void setUp() { diff --git a/validator/src/main/java/com/google/daq/mqtt/sequencer/SequenceBase.java b/validator/src/main/java/com/google/daq/mqtt/sequencer/SequenceBase.java index a420c19e2c..60f8baa22f 100644 --- a/validator/src/main/java/com/google/daq/mqtt/sequencer/SequenceBase.java +++ b/validator/src/main/java/com/google/daq/mqtt/sequencer/SequenceBase.java @@ -1596,6 +1596,9 @@ protected void waitUntil(String description, Duration maxWait, Supplier waitEvaluateLoop(sanitizedDescription, maxWait, evaluator, detail); recordSequence("Wait until", description); }, detail::get); + } catch (AssumptionViolatedException e) { + // Re-throw to allow the test framework to handle the skip. + throw e; } catch (Exception e) { String message = format("Failed waiting until %s: %s", sanitizedDescription, detail.get()); recordSequence(message); @@ -1740,6 +1743,8 @@ private void whileDoing(String description, Runnable action, Consumer // This is some fundamental problem, so just pass it along without the waiting detail. catcher.accept(e); throw e; + } catch (AssumptionViolatedException e) { + throw e; } catch (Exception e) { catcher.accept(e); String detail = ifNotNullGet(detailer, Supplier::get); @@ -1747,6 +1752,8 @@ private void whileDoing(String description, Runnable action, Consumer throw ifNotNullGet(detail, message -> new RuntimeException(e.getMessage() + " because " + message), e); } + } catch (AssumptionViolatedException e) { + throw e; } catch (Exception e) { throw new RuntimeException("While " + description, e); } @@ -2732,16 +2739,6 @@ public CapabilitySuccess(Class capability) { } } - /** - * Exception to indicate that the point transitioned to the final state - * before the intermediate state was observed. - */ - protected static class AppliedTooQuicklyException extends RuntimeException { - public AppliedTooQuicklyException(String message) { - super(message); - } - } - class SequenceTestWatcher extends TestWatcher { @Override diff --git a/validator/src/main/java/com/google/daq/mqtt/sequencer/sequences/WritebackSequences.java b/validator/src/main/java/com/google/daq/mqtt/sequencer/sequences/WritebackSequences.java index 2ef96c3ce8..409cf527b3 100644 --- a/validator/src/main/java/com/google/daq/mqtt/sequencer/sequences/WritebackSequences.java +++ b/validator/src/main/java/com/google/daq/mqtt/sequencer/sequences/WritebackSequences.java @@ -5,8 +5,6 @@ import static java.lang.String.format; import static udmi.schema.Bucket.WRITEBACK; import static udmi.schema.FeatureDiscovery.FeatureStage.ALPHA; -import static udmi.schema.PointPointsetState.Value_state.APPLIED; -import static udmi.schema.PointPointsetState.Value_state.UPDATING; import com.google.daq.mqtt.sequencer.Feature; import com.google.daq.mqtt.sequencer.PointsetBase; @@ -28,7 +26,7 @@ public class WritebackSequences extends PointsetBase { public static final String DEFAULT_STATE = null; private Object lastPresentValue; - private static final Duration UPDATING_WAIT_DURATION = Duration.ofSeconds(10); + private static final Duration UPDATING_WAIT_DURATION = Duration.ofSeconds(15); private static final Duration MAX_WAIT_TIME = Duration.ofSeconds(25); @Before @@ -85,7 +83,7 @@ private String presentValueIs(TargetTestingModel targetModel) { @Feature(stage = ALPHA, bucket = WRITEBACK) @Summary("Implements UDMI writeback and can successfully writeback to a point") public void writeback_success() { - TargetTestingModel targetModel = testTargetState(APPLIED.value()); + TargetTestingModel targetModel = testTargetState(APPLIED_STATE); waitUntil("target point to have target expected value", () -> presentValueIs(targetModel)); } @@ -120,12 +118,11 @@ public void writeback_failure() { @Test(timeout = FOUR_MINUTES_MS) @Feature(stage = ALPHA, bucket = WRITEBACK) - @Summary("Implements writeback operations") + @Summary("Tests intermediate UPDATING state of a writeback operation") public void writeback_operation() { - TargetTestingModel targetModel = getTarget(APPLIED.value()); + TargetTestingModel targetModel = getTarget(APPLIED_STATE); String targetPoint = targetModel.target_point; Object targetValue = targetModel.target_value; - AtomicReference appliedCheck = new AtomicReference<>(""); deviceConfig.pointset.points.get(targetPoint).set_value = null; waitUntil(expectedValueState(DEFAULT_STATE), () -> valueStateIs(targetPoint, DEFAULT_STATE)); @@ -134,19 +131,13 @@ public void writeback_operation() { // Wait until the intermediate UPDATING state. In other cases, this should: // 1. Skip if it ends up APPLIED too quickly. // 2. Error out if it takes too long to get to UPDATING. - try { - waitUntil(expectedValueState(UPDATING.value()), UPDATING_WAIT_DURATION, () -> { - if (valueStateIs(targetPoint, APPLIED.value()) == null) { - throw new AppliedTooQuicklyException("Operation completed quickly."); - } - return valueStateIs(targetPoint, UPDATING.value()); - }); - } catch (AppliedTooQuicklyException e) { - // The operation was too fast; this is a valid outcome, so we skip the test. - skipTest(e.getMessage()); - } - waitUntil(expectedValueState(APPLIED.value()), - () -> valueStateIs(targetPoint, APPLIED.value())); + waitUntil(expectedValueState(UPDATING_STATE), UPDATING_WAIT_DURATION, () -> { + String appliedCheck = valueStateIs(targetPoint, APPLIED_STATE); + ifNullSkipTest(appliedCheck, "operation completed quickly"); + + return valueStateIs(targetPoint, UPDATING_STATE); + }); + waitUntil(expectedValueState(APPLIED_STATE), () -> valueStateIs(targetPoint, APPLIED_STATE)); } } From 54ec5708da2f7201f3c3a172510fcd177c522401 Mon Sep 17 00:00:00 2001 From: Nitish Jain Date: Thu, 21 Aug 2025 16:08:23 +0000 Subject: [PATCH 33/68] sequencer changes --- .../google/daq/mqtt/sequencer/sequences/WritebackSequences.java | 1 - 1 file changed, 1 deletion(-) diff --git a/validator/src/main/java/com/google/daq/mqtt/sequencer/sequences/WritebackSequences.java b/validator/src/main/java/com/google/daq/mqtt/sequencer/sequences/WritebackSequences.java index 409cf527b3..4818d21f1c 100644 --- a/validator/src/main/java/com/google/daq/mqtt/sequencer/sequences/WritebackSequences.java +++ b/validator/src/main/java/com/google/daq/mqtt/sequencer/sequences/WritebackSequences.java @@ -12,7 +12,6 @@ import java.time.Duration; import java.util.List; import java.util.Objects; -import java.util.concurrent.atomic.AtomicReference; import org.junit.Before; import org.junit.Test; import udmi.schema.PointPointsetState.Value_state; From fa54d675acf5e4bae02c12356cdead68507ddd12 Mon Sep 17 00:00:00 2001 From: Nitish Jain Date: Thu, 21 Aug 2025 16:27:31 +0000 Subject: [PATCH 34/68] sequencer changes --- .../java/daq/pubber/impl/manager/PubberPointsetManager.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pubber/src/main/java/daq/pubber/impl/manager/PubberPointsetManager.java b/pubber/src/main/java/daq/pubber/impl/manager/PubberPointsetManager.java index 03ab879aef..7c40fe651d 100644 --- a/pubber/src/main/java/daq/pubber/impl/manager/PubberPointsetManager.java +++ b/pubber/src/main/java/daq/pubber/impl/manager/PubberPointsetManager.java @@ -32,7 +32,7 @@ public class PubberPointsetManager extends PubberManager implements PointsetMana private final Map managedPoints = new HashMap<>(); private final ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1); private static final int WRITE_DELAY_SEC = 3; - private static final int WRITE_DELAY_WITHOUT_UPDATING_STATE_SEC= 60; + private static final int WRITE_DELAY_WITHOUT_UPDATING_STATE_SEC = 60; private int pointsetUpdateCount = -1; From 340c59fc60a08116ca882b971b97e36c1f84cfab Mon Sep 17 00:00:00 2001 From: Nitish Jain Date: Sat, 23 Aug 2025 05:52:29 +0000 Subject: [PATCH 35/68] sequencer changes --- .../daq/pubber/impl/manager/PubberPointsetManager.java | 4 +--- .../daq/mqtt/sequencer/sequences/WritebackSequences.java | 7 +++---- 2 files changed, 4 insertions(+), 7 deletions(-) diff --git a/pubber/src/main/java/daq/pubber/impl/manager/PubberPointsetManager.java b/pubber/src/main/java/daq/pubber/impl/manager/PubberPointsetManager.java index 7c40fe651d..ba4d57b211 100644 --- a/pubber/src/main/java/daq/pubber/impl/manager/PubberPointsetManager.java +++ b/pubber/src/main/java/daq/pubber/impl/manager/PubberPointsetManager.java @@ -32,8 +32,6 @@ public class PubberPointsetManager extends PubberManager implements PointsetMana private final Map managedPoints = new HashMap<>(); private final ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1); private static final int WRITE_DELAY_SEC = 3; - private static final int WRITE_DELAY_WITHOUT_UPDATING_STATE_SEC = 60; - private int pointsetUpdateCount = -1; private PointsetState pointsetState; @@ -144,7 +142,7 @@ public void updatePointConfig(AbstractPoint point, PointPointsetConfig pointConf if (isFastWrite) { PointsetManager.super.updatePointConfig(point, pointConfig); } else if (isDelayWrite) { - handleDelayWriteback(point, pointConfig, WRITE_DELAY_WITHOUT_UPDATING_STATE_SEC); + handleDelayWriteback(point, pointConfig, WRITE_DELAY_SEC); } else { handleSlowWriteback(point, pointConfig, WRITE_DELAY_SEC); } diff --git a/validator/src/main/java/com/google/daq/mqtt/sequencer/sequences/WritebackSequences.java b/validator/src/main/java/com/google/daq/mqtt/sequencer/sequences/WritebackSequences.java index 4818d21f1c..e01bfc9ca3 100644 --- a/validator/src/main/java/com/google/daq/mqtt/sequencer/sequences/WritebackSequences.java +++ b/validator/src/main/java/com/google/daq/mqtt/sequencer/sequences/WritebackSequences.java @@ -1,6 +1,5 @@ package com.google.daq.mqtt.sequencer.sequences; -import static com.google.daq.mqtt.util.TimePeriodConstants.FOUR_MINUTES_MS; import static com.google.daq.mqtt.util.TimePeriodConstants.TWO_MINUTES_MS; import static java.lang.String.format; import static udmi.schema.Bucket.WRITEBACK; @@ -25,8 +24,8 @@ public class WritebackSequences extends PointsetBase { public static final String DEFAULT_STATE = null; private Object lastPresentValue; - private static final Duration UPDATING_WAIT_DURATION = Duration.ofSeconds(15); - private static final Duration MAX_WAIT_TIME = Duration.ofSeconds(25); + private static final Duration UPDATING_WAIT_DURATION = Duration.ofSeconds(3); + private static final Duration MAX_WAIT_TIME = Duration.ofSeconds(15); @Before public void setupExpectedParameters() { @@ -115,7 +114,7 @@ public void writeback_failure() { testTargetState(FAILURE_STATE); } - @Test(timeout = FOUR_MINUTES_MS) + @Test(timeout = TWO_MINUTES_MS) @Feature(stage = ALPHA, bucket = WRITEBACK) @Summary("Tests intermediate UPDATING state of a writeback operation") public void writeback_operation() { From 56b19fc37d40cdf349482ff67c51c3a9d400085a Mon Sep 17 00:00:00 2001 From: Nitish Jain Date: Sat, 23 Aug 2025 09:53:57 +0000 Subject: [PATCH 36/68] sequencer changes --- bin/test_redirect | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/bin/test_redirect b/bin/test_redirect index 79c772b22d..3079f6e5e0 100755 --- a/bin/test_redirect +++ b/bin/test_redirect @@ -49,7 +49,7 @@ bin/registrar $site_path bin/reset_config $site_path $project_spec $device_id log Running pubber with redirectRegistry on timeout -timeout 1m unbuffer bin/pubber $site_path $project_spec $device_id $serial_no redirectRegistry=missing > $PUBBER_LOG.1 2>&1 || true +timeout 1m unbuffer bin/pubber $site_path $project_spec $device_id $serial_no redirectRegistry=missing fastWrite > $PUBBER_LOG.1 2>&1 || true log Checks that a redirect happened and failed... egrep -q '/r(egistries)?/(.*~)?ZZ-TRI-FECTA(_.*)?/d(evices)?/' $PUBBER_LOG.1 || bin/fail no ZZ-TRI-FECTA registry reference @@ -58,7 +58,7 @@ fgrep -q 'While waiting for connection start: Connection error' $PUBBER_LOG.1 || fgrep -q 'Endpoint connection restored to last working endpoint' $PUBBER_LOG.1 || bin/fail no restore log message log Done with timeout, running pubber in background... -bin/pubber $site_path $project_spec $device_id $serial_no > $PUBBER_LOG.2 2>&1 & +bin/pubber $site_path $project_spec $device_id $serial_no fastWrite > $PUBBER_LOG.2 2>&1 & # Wait for initial connection, then reset config to redirect sleep 20 From f06413f9c1d6bc027d7ac244e3a61a967217ba5a Mon Sep 17 00:00:00 2001 From: Nitish Jain Date: Sat, 23 Aug 2025 17:14:25 +0000 Subject: [PATCH 37/68] sequencer changes --- .../java/daq/pubber/impl/manager/PubberPointsetManager.java | 6 +++--- .../daq/mqtt/sequencer/sequences/WritebackSequences.java | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/pubber/src/main/java/daq/pubber/impl/manager/PubberPointsetManager.java b/pubber/src/main/java/daq/pubber/impl/manager/PubberPointsetManager.java index ba4d57b211..18243b8e5e 100644 --- a/pubber/src/main/java/daq/pubber/impl/manager/PubberPointsetManager.java +++ b/pubber/src/main/java/daq/pubber/impl/manager/PubberPointsetManager.java @@ -31,7 +31,7 @@ public class PubberPointsetManager extends PubberManager implements PointsetMana private final ExtraPointsetEvent pointsetEvent = new ExtraPointsetEvent(); private final Map managedPoints = new HashMap<>(); private final ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1); - private static final int WRITE_DELAY_SEC = 3; + private static final int WRITE_DELAY_SEC = 10; private int pointsetUpdateCount = -1; private PointsetState pointsetState; @@ -138,8 +138,8 @@ private static PointPointsetModel makePointPointsetModel(int value, double toler public void updatePointConfig(AbstractPoint point, PointPointsetConfig pointConfig) { boolean isFastWrite = isFastWrite(); boolean isDelayWrite = isDelayWrite(); - - if (isFastWrite) { + + if (isFastWrite || pointConfig == null || pointConfig.set_value == null) { PointsetManager.super.updatePointConfig(point, pointConfig); } else if (isDelayWrite) { handleDelayWriteback(point, pointConfig, WRITE_DELAY_SEC); diff --git a/validator/src/main/java/com/google/daq/mqtt/sequencer/sequences/WritebackSequences.java b/validator/src/main/java/com/google/daq/mqtt/sequencer/sequences/WritebackSequences.java index e01bfc9ca3..cea202bdbd 100644 --- a/validator/src/main/java/com/google/daq/mqtt/sequencer/sequences/WritebackSequences.java +++ b/validator/src/main/java/com/google/daq/mqtt/sequencer/sequences/WritebackSequences.java @@ -24,7 +24,7 @@ public class WritebackSequences extends PointsetBase { public static final String DEFAULT_STATE = null; private Object lastPresentValue; - private static final Duration UPDATING_WAIT_DURATION = Duration.ofSeconds(3); + private static final Duration UPDATING_WAIT_DURATION = Duration.ofSeconds(12); private static final Duration MAX_WAIT_TIME = Duration.ofSeconds(15); @Before From 651b939f2c873b7286f39b8703269c3baeb9c5f5 Mon Sep 17 00:00:00 2001 From: Nitish Jain Date: Sun, 24 Aug 2025 07:57:37 +0000 Subject: [PATCH 38/68] Trying to fix itemized tests --- etc/test_itemized.in | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/etc/test_itemized.in b/etc/test_itemized.in index 2597a63506..7c3aec7974 100644 --- a/etc/test_itemized.in +++ b/etc/test_itemized.in @@ -7,9 +7,9 @@ TEST enumerate_features featureEnableSwap TEST valid_serial_no noLastStart TEST valid_serial_no noFolder TEST valid_serial_no msTimestamp -TEST writeback_success extraPoint=filter_differential_pressure_setpoint -TEST writeback_success noWriteback -TEST writeback_success noPointState +TEST writeback_success fastWrite extraPoint=filter_differential_pressure_setpoint +TEST writeback_success fastWrite noWriteback +TEST writeback_success fastWrite noPointState TEST writeback_operation fastWrite TEST writeback_operation delayWrite TEST pointset_publish_interval fixedSampleRate=10 From c6e3bdb64f85d909614f1f48eca3ac5fcd43cfb6 Mon Sep 17 00:00:00 2001 From: Nitish Jain Date: Sun, 24 Aug 2025 08:58:28 +0000 Subject: [PATCH 39/68] Trying to fix itemized test for system_last_update --- etc/test_itemized.in | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/etc/test_itemized.in b/etc/test_itemized.in index 7c3aec7974..84446db95a 100644 --- a/etc/test_itemized.in +++ b/etc/test_itemized.in @@ -24,7 +24,7 @@ TEST broken_config noLog TEST broken_config badCategory TEST broken_config badLevel TEST system_last_update extraField=fnooz -TEST system_last_update dupeState +TEST system_last_update fastWrite dupeState TEST system_last_update badLevel TEST state_make_model badState From 69c4c111e6c9d1549146b9b56dc4567c8677d01f Mon Sep 17 00:00:00 2001 From: Nitish Jain Date: Sun, 24 Aug 2025 14:15:16 +0000 Subject: [PATCH 40/68] increasing time for checking the set value during the writeback success --- .../daq/mqtt/sequencer/sequences/WritebackSequences.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/validator/src/main/java/com/google/daq/mqtt/sequencer/sequences/WritebackSequences.java b/validator/src/main/java/com/google/daq/mqtt/sequencer/sequences/WritebackSequences.java index cea202bdbd..6934f8fc50 100644 --- a/validator/src/main/java/com/google/daq/mqtt/sequencer/sequences/WritebackSequences.java +++ b/validator/src/main/java/com/google/daq/mqtt/sequencer/sequences/WritebackSequences.java @@ -24,7 +24,7 @@ public class WritebackSequences extends PointsetBase { public static final String DEFAULT_STATE = null; private Object lastPresentValue; - private static final Duration UPDATING_WAIT_DURATION = Duration.ofSeconds(12); + private static final Duration UPDATING_WAIT_DURATION = Duration.ofSeconds(8); private static final Duration MAX_WAIT_TIME = Duration.ofSeconds(15); @Before @@ -82,7 +82,8 @@ private String presentValueIs(TargetTestingModel targetModel) { @Summary("Implements UDMI writeback and can successfully writeback to a point") public void writeback_success() { TargetTestingModel targetModel = testTargetState(APPLIED_STATE); - waitUntil("target point to have target expected value", () -> presentValueIs(targetModel)); + waitUntil("target point to have target expected value", MAX_WAIT_TIME, + () -> presentValueIs(targetModel)); } private TargetTestingModel testTargetState(String targetState) { From ab059768458c531b23a210df89c1cf4674c755f9 Mon Sep 17 00:00:00 2001 From: Nitish Jain Date: Sun, 24 Aug 2025 14:26:36 +0000 Subject: [PATCH 41/68] fixing test_mosquitto step in UDMIS local setup --- bin/test_mosquitto | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/bin/test_mosquitto b/bin/test_mosquitto index f6581fa274..7deb5e3ba2 100755 --- a/bin/test_mosquitto +++ b/bin/test_mosquitto @@ -81,7 +81,8 @@ cat < /tmp/pubber_config.json "deviceId": "$device_id", "serialNo": "$serial_no", "options": { - "smokeCheck": true + "smokeCheck": true, + "fastWrite" } } EOF From d6ec35c7796a984fc286ac9ff9f7e562ecbb1d02 Mon Sep 17 00:00:00 2001 From: Nitish Jain Date: Sun, 24 Aug 2025 14:59:11 +0000 Subject: [PATCH 42/68] fixing test_mosquitto step in UDMIS local setup, updating the options correctly --- bin/test_mosquitto | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bin/test_mosquitto b/bin/test_mosquitto index 7deb5e3ba2..fee918d6b1 100755 --- a/bin/test_mosquitto +++ b/bin/test_mosquitto @@ -82,7 +82,7 @@ cat < /tmp/pubber_config.json "serialNo": "$serial_no", "options": { "smokeCheck": true, - "fastWrite" + "fastWrite" : true } } EOF From 6c1e51c1285bdb3a12bc15d02af9522197dde0e8 Mon Sep 17 00:00:00 2001 From: Nitish Jain Date: Mon, 25 Aug 2025 14:50:27 +0000 Subject: [PATCH 43/68] addressing review comments --- bin/test_redirect | 4 ++-- etc/test_itemized.in | 8 ++++---- .../daq/mqtt/sequencer/sequences/WritebackSequences.java | 2 +- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/bin/test_redirect b/bin/test_redirect index 3079f6e5e0..79c772b22d 100755 --- a/bin/test_redirect +++ b/bin/test_redirect @@ -49,7 +49,7 @@ bin/registrar $site_path bin/reset_config $site_path $project_spec $device_id log Running pubber with redirectRegistry on timeout -timeout 1m unbuffer bin/pubber $site_path $project_spec $device_id $serial_no redirectRegistry=missing fastWrite > $PUBBER_LOG.1 2>&1 || true +timeout 1m unbuffer bin/pubber $site_path $project_spec $device_id $serial_no redirectRegistry=missing > $PUBBER_LOG.1 2>&1 || true log Checks that a redirect happened and failed... egrep -q '/r(egistries)?/(.*~)?ZZ-TRI-FECTA(_.*)?/d(evices)?/' $PUBBER_LOG.1 || bin/fail no ZZ-TRI-FECTA registry reference @@ -58,7 +58,7 @@ fgrep -q 'While waiting for connection start: Connection error' $PUBBER_LOG.1 || fgrep -q 'Endpoint connection restored to last working endpoint' $PUBBER_LOG.1 || bin/fail no restore log message log Done with timeout, running pubber in background... -bin/pubber $site_path $project_spec $device_id $serial_no fastWrite > $PUBBER_LOG.2 2>&1 & +bin/pubber $site_path $project_spec $device_id $serial_no > $PUBBER_LOG.2 2>&1 & # Wait for initial connection, then reset config to redirect sleep 20 diff --git a/etc/test_itemized.in b/etc/test_itemized.in index 84446db95a..2597a63506 100644 --- a/etc/test_itemized.in +++ b/etc/test_itemized.in @@ -7,9 +7,9 @@ TEST enumerate_features featureEnableSwap TEST valid_serial_no noLastStart TEST valid_serial_no noFolder TEST valid_serial_no msTimestamp -TEST writeback_success fastWrite extraPoint=filter_differential_pressure_setpoint -TEST writeback_success fastWrite noWriteback -TEST writeback_success fastWrite noPointState +TEST writeback_success extraPoint=filter_differential_pressure_setpoint +TEST writeback_success noWriteback +TEST writeback_success noPointState TEST writeback_operation fastWrite TEST writeback_operation delayWrite TEST pointset_publish_interval fixedSampleRate=10 @@ -24,7 +24,7 @@ TEST broken_config noLog TEST broken_config badCategory TEST broken_config badLevel TEST system_last_update extraField=fnooz -TEST system_last_update fastWrite dupeState +TEST system_last_update dupeState TEST system_last_update badLevel TEST state_make_model badState diff --git a/validator/src/main/java/com/google/daq/mqtt/sequencer/sequences/WritebackSequences.java b/validator/src/main/java/com/google/daq/mqtt/sequencer/sequences/WritebackSequences.java index 6934f8fc50..dc039474b3 100644 --- a/validator/src/main/java/com/google/daq/mqtt/sequencer/sequences/WritebackSequences.java +++ b/validator/src/main/java/com/google/daq/mqtt/sequencer/sequences/WritebackSequences.java @@ -25,7 +25,7 @@ public class WritebackSequences extends PointsetBase { public static final String DEFAULT_STATE = null; private Object lastPresentValue; private static final Duration UPDATING_WAIT_DURATION = Duration.ofSeconds(8); - private static final Duration MAX_WAIT_TIME = Duration.ofSeconds(15); + private static final Duration MAX_WAIT_TIME = Duration.ofSeconds(20); @Before public void setupExpectedParameters() { From 9e9b4b1914598a2edbbdfb3641f247305385c153 Mon Sep 17 00:00:00 2001 From: Nitish Jain Date: Mon, 25 Aug 2025 17:50:39 +0000 Subject: [PATCH 44/68] adding out files --- etc/sequencer.out | 1 + etc/test_itemized.out | 6 ++++-- .../daq/mqtt/sequencer/sequences/WritebackSequences.java | 6 ++++-- 3 files changed, 9 insertions(+), 4 deletions(-) diff --git a/etc/sequencer.out b/etc/sequencer.out index f2f50fb301..f711758768 100644 --- a/etc/sequencer.out +++ b/etc/sequencer.out @@ -47,3 +47,4 @@ RESULT pass system valid_serial_no STABLE 10/10 Sequence complete RESULT pass writeback writeback_failure ALPHA 10/10 Sequence complete RESULT pass writeback writeback_invalid ALPHA 10/10 Sequence complete RESULT pass writeback writeback_success ALPHA 10/10 Sequence complete +RESULT pass writeback writeback_operation ALPHA 10/10 Sequence complete diff --git a/etc/test_itemized.out b/etc/test_itemized.out index 4c74982c28..e5e18bdee0 100644 --- a/etc/test_itemized.out +++ b/etc/test_itemized.out @@ -8,8 +8,10 @@ 1 RESULT pass system valid_serial_no STABLE 10/10 Sequence complete 1 RESULT pass system valid_serial_no STABLE 10/10 Sequence complete 1 RESULT fail writeback writeback_success ALPHA 0/10 Failed waiting until target point has value_state default (null): point filter_differential_pressure_setpoint is applied, expected null -1 RESULT fail writeback writeback_success ALPHA 0/10 Failed waiting until target point has value_state applied: point filter_differential_pressure_setpoint is null, expected applied -1 RESULT fail writeback writeback_success ALPHA 0/10 Failed waiting until target point has value_state applied: point filter_differential_pressure_setpoint is null, expected applied +1 RESULT fail writeback writeback_success ALPHA 0/10 Failed waiting until target point has value_state default (null): point filter_differential_pressure_setpoint is updating, expected null +1 RESULT RESULT fail writeback writeback_success ALPHA 0/10 Failed waiting until target point has value_state applied: point filter_differential_pressure_setpoint is updating, expected applied +1 RESULT skip writeback writeback_operation ALPHA 0/0 operation completed quickly +1 RESULT fail writeback writeback_operation ALPHA 0/10 Failed waiting until target point has value_state updating: point filter_differential_pressure_setpoint is applied, expected updating 1 RESULT fail pointset pointset_publish_interval STABLE 0/10 Failed check that time period between successive pointset events is between 5 and 8 seconds 1 RESULT fail system system_min_loglevel ALPHA 0/10 Failed check that log level `NOTICE` (or greater) category `system.config.apply` was not logged 1 RESULT fail system.mode system_mode_restart PREVIEW 0/10 Failed check that restart count increased by one diff --git a/validator/src/main/java/com/google/daq/mqtt/sequencer/sequences/WritebackSequences.java b/validator/src/main/java/com/google/daq/mqtt/sequencer/sequences/WritebackSequences.java index dc039474b3..8f19ae4253 100644 --- a/validator/src/main/java/com/google/daq/mqtt/sequencer/sequences/WritebackSequences.java +++ b/validator/src/main/java/com/google/daq/mqtt/sequencer/sequences/WritebackSequences.java @@ -131,8 +131,10 @@ public void writeback_operation() { // 1. Skip if it ends up APPLIED too quickly. // 2. Error out if it takes too long to get to UPDATING. waitUntil(expectedValueState(UPDATING_STATE), UPDATING_WAIT_DURATION, () -> { - String appliedCheck = valueStateIs(targetPoint, APPLIED_STATE); - ifNullSkipTest(appliedCheck, "operation completed quickly"); + String appliedStateCheck = valueStateIs(targetPoint, APPLIED_STATE); + String appliedValueCheck = presentValueIs(targetModel); + ifTrueSkipTest(appliedStateCheck == null && appliedValueCheck == null, + "operation completed quickly"); return valueStateIs(targetPoint, UPDATING_STATE); }); From 9e7e3abdbc6773ffa0fcfe31c7546c39d0810fab Mon Sep 17 00:00:00 2001 From: Trevor Date: Mon, 25 Aug 2025 21:00:30 -0700 Subject: [PATCH 45/68] Testing updates and tweaks (#3) * Few fixings * Fix sequencer out order * Exit prematurely --- bin/test_sequcheck | 28 +++++++++++++++------------- etc/schema_itemized.out | 2 ++ etc/sequencer.out | 2 +- etc/test_itemized.out | 2 +- 4 files changed, 19 insertions(+), 15 deletions(-) diff --git a/bin/test_sequcheck b/bin/test_sequcheck index adb651454d..8d94ba7817 100755 --- a/bin/test_sequcheck +++ b/bin/test_sequcheck @@ -31,19 +31,6 @@ echo '####################' Finished schema.out tests: $failures [[ -n ${suffix} ]] && echo Done with suffix test checks. && exit 0 -echo '####################' Starting gencode tests -cp $UDMI_ROOT/docs/specs/sequences/generated.md out/generated.tmp # Save for test/comparison -$UDMI_ROOT/bin/gencode_seq || failures+="gencode " -echo '####################' Finished gencode tests: $failures - -echo '####################' Starting gencode_seq tests -mv $UDMI_ROOT/docs/specs/sequences/generated.md out/generated${suffix}.out -mv out/generated.tmp $UDMI_ROOT/docs/specs/sequences/generated.md - -echo Comparing diff out/generated${suffix}.out $UDMI_ROOT/docs/specs/sequences/generated.md -diff -u out/generated${suffix}.out $UDMI_ROOT/docs/specs/sequences/generated.md || failures+="gencode_seq " -echo '####################' Finished gencode_seq tests: $failures - echo '####################' Starting expected tests targets=sites/udmi_site_model*/out*/devices/AHU-1/results.md cat $targets > out/all_results.md @@ -57,6 +44,21 @@ echo Checking for duplication in out/sequencer${suffix}.out and etc/sequencer_pl $UDMI_ROOT/bin/test_sequencer_plan || failures+="plan " echo '####################' Finished plan tests: $failures +echo '####################' Starting gencode tests +cp $UDMI_ROOT/docs/specs/sequences/generated.md out/generated.tmp # Save for test/comparison +$UDMI_ROOT/bin/gencode_seq || failures+="gencode " +echo '####################' Finished gencode tests: $failures + +[[ -z $failures ]] || fail Ending tests prematurely because of { $failures } + +echo '####################' Starting gencode_seq tests +mv $UDMI_ROOT/docs/specs/sequences/generated.md out/generated${suffix}.out +mv out/generated.tmp $UDMI_ROOT/docs/specs/sequences/generated.md + +echo Comparing diff out/generated${suffix}.out $UDMI_ROOT/docs/specs/sequences/generated.md +diff -u out/generated${suffix}.out $UDMI_ROOT/docs/specs/sequences/generated.md || failures+="gencode_seq " +echo '####################' Finished gencode_seq tests: $failures + [[ -z $failures ]] || fail sequencer checks failed because of { $failures } echo Done with sequencer checks. diff --git a/etc/schema_itemized.out b/etc/schema_itemized.out index cfea45ec24..2d6b81f85b 100644 --- a/etc/schema_itemized.out +++ b/etc/schema_itemized.out @@ -15,6 +15,8 @@ 1 writeback_success 1 writeback_success 1 writeback_success +1 writeback_operation +1 writeback_operation 1 pointset_publish_interval 1 system_min_loglevel 1 system_mode_restart diff --git a/etc/sequencer.out b/etc/sequencer.out index f711758768..8d80eb22a7 100644 --- a/etc/sequencer.out +++ b/etc/sequencer.out @@ -46,5 +46,5 @@ RESULT pass system too_much_state ALPHA 10/10 Sequence complete RESULT pass system valid_serial_no STABLE 10/10 Sequence complete RESULT pass writeback writeback_failure ALPHA 10/10 Sequence complete RESULT pass writeback writeback_invalid ALPHA 10/10 Sequence complete -RESULT pass writeback writeback_success ALPHA 10/10 Sequence complete RESULT pass writeback writeback_operation ALPHA 10/10 Sequence complete +RESULT pass writeback writeback_success ALPHA 10/10 Sequence complete diff --git a/etc/test_itemized.out b/etc/test_itemized.out index e5e18bdee0..a09f94c09c 100644 --- a/etc/test_itemized.out +++ b/etc/test_itemized.out @@ -9,7 +9,7 @@ 1 RESULT pass system valid_serial_no STABLE 10/10 Sequence complete 1 RESULT fail writeback writeback_success ALPHA 0/10 Failed waiting until target point has value_state default (null): point filter_differential_pressure_setpoint is applied, expected null 1 RESULT fail writeback writeback_success ALPHA 0/10 Failed waiting until target point has value_state default (null): point filter_differential_pressure_setpoint is updating, expected null -1 RESULT RESULT fail writeback writeback_success ALPHA 0/10 Failed waiting until target point has value_state applied: point filter_differential_pressure_setpoint is updating, expected applied +1 RESULT fail writeback writeback_success ALPHA 0/10 Failed waiting until target point has value_state applied: point filter_differential_pressure_setpoint is updating, expected applied 1 RESULT skip writeback writeback_operation ALPHA 0/0 operation completed quickly 1 RESULT fail writeback writeback_operation ALPHA 0/10 Failed waiting until target point has value_state updating: point filter_differential_pressure_setpoint is applied, expected updating 1 RESULT fail pointset pointset_publish_interval STABLE 0/10 Failed check that time period between successive pointset events is between 5 and 8 seconds From ba49f749e323cd7b48e2ad9522bb4859672eb503 Mon Sep 17 00:00:00 2001 From: Nitish Jain Date: Tue, 26 Aug 2025 12:04:57 +0000 Subject: [PATCH 46/68] avoiding updating state with intermediate state every time --- etc/test_itemized.out | 4 ++-- .../impl/manager/PubberPointsetManager.java | 15 +++++---------- .../src/main/java/udmi/lib/base/BasicPoint.java | 14 ++++++++++++++ .../lib/client/manager/PointsetManager.java | 17 +++++++++++++++++ .../main/java/udmi/lib/intf/AbstractPoint.java | 3 +++ 5 files changed, 41 insertions(+), 12 deletions(-) diff --git a/etc/test_itemized.out b/etc/test_itemized.out index a09f94c09c..8dadd85346 100644 --- a/etc/test_itemized.out +++ b/etc/test_itemized.out @@ -8,8 +8,8 @@ 1 RESULT pass system valid_serial_no STABLE 10/10 Sequence complete 1 RESULT pass system valid_serial_no STABLE 10/10 Sequence complete 1 RESULT fail writeback writeback_success ALPHA 0/10 Failed waiting until target point has value_state default (null): point filter_differential_pressure_setpoint is applied, expected null -1 RESULT fail writeback writeback_success ALPHA 0/10 Failed waiting until target point has value_state default (null): point filter_differential_pressure_setpoint is updating, expected null -1 RESULT fail writeback writeback_success ALPHA 0/10 Failed waiting until target point has value_state applied: point filter_differential_pressure_setpoint is updating, expected applied +1 RESULT fail writeback writeback_success ALPHA 0/10 Failed waiting until target point has value_state applied: point filter_differential_pressure_setpoint is null, expected applied +1 RESULT fail writeback writeback_success ALPHA 0/10 Failed waiting until target point has value_state applied: point filter_differential_pressure_setpoint is null, expected applied 1 RESULT skip writeback writeback_operation ALPHA 0/0 operation completed quickly 1 RESULT fail writeback writeback_operation ALPHA 0/10 Failed waiting until target point has value_state updating: point filter_differential_pressure_setpoint is applied, expected updating 1 RESULT fail pointset pointset_publish_interval STABLE 0/10 Failed check that time period between successive pointset events is between 5 and 8 seconds diff --git a/pubber/src/main/java/daq/pubber/impl/manager/PubberPointsetManager.java b/pubber/src/main/java/daq/pubber/impl/manager/PubberPointsetManager.java index 18243b8e5e..5704ca9d44 100644 --- a/pubber/src/main/java/daq/pubber/impl/manager/PubberPointsetManager.java +++ b/pubber/src/main/java/daq/pubber/impl/manager/PubberPointsetManager.java @@ -144,25 +144,20 @@ public void updatePointConfig(AbstractPoint point, PointPointsetConfig pointConf } else if (isDelayWrite) { handleDelayWriteback(point, pointConfig, WRITE_DELAY_SEC); } else { - handleSlowWriteback(point, pointConfig, WRITE_DELAY_SEC); + info(format("Applying slow writeback for point %s with %ds delay", point.getName(), + WRITE_DELAY_SEC)); + PointsetManager.super.updatePointIntermediateState(point, pointConfig); + handleDelayWriteback(point, pointConfig, WRITE_DELAY_SEC); } } - private void handleSlowWriteback(AbstractPoint point, - PointPointsetConfig pointConfig, int delaySec) { - info(format("Applying slow writeback for point %s with %ds delay", point.getName(), delaySec)); - - getPointsetState().points.get(point.getName()).value_state = Value_state.UPDATING; - updateState(); - handleDelayWriteback(point, pointConfig, delaySec); - } - private void handleDelayWriteback(AbstractPoint point, PointPointsetConfig pointConfig, int delaySec) { scheduler.schedule(() -> { try { info(format("Completing delayed writeback for %s", point.getName())); // Use the default interface method to apply the final state. + debug(format("setting value state as %s", pointConfig.set_value)); PointsetManager.super.updatePointConfig(point, pointConfig); } catch (Exception e) { error("Error during scheduled writeback for " + point.getName(), e); diff --git a/pubber/src/main/java/udmi/lib/base/BasicPoint.java b/pubber/src/main/java/udmi/lib/base/BasicPoint.java index 0ec7583bdc..470e8579a9 100644 --- a/pubber/src/main/java/udmi/lib/base/BasicPoint.java +++ b/pubber/src/main/java/udmi/lib/base/BasicPoint.java @@ -80,11 +80,25 @@ public void setConfig(PointPointsetConfig config) { Value_state previousValueState = state.value_state; Entry previousStatus = deepCopy(state.status); updateStateConfig(config); + updateDirtyState(previousValueState, previousStatus); + } + + private void updateDirtyState(Value_state previousValueState, Entry previousStatus) { dirty = dirty || state.value_state != previousValueState || !Objects.equals(state.status, previousStatus); } + /** + * Set the Intermediate State of the PointSet and update Dirty State if needed + */ + public void setIntermediateState() { + Value_state previousValueState = state.value_state; + Entry previousStatus = deepCopy(state.status); + state.value_state = Value_state.UPDATING; + updateDirtyState(previousValueState, previousStatus); + } + /** * Update the state of this point based off of a new config. */ diff --git a/pubber/src/main/java/udmi/lib/client/manager/PointsetManager.java b/pubber/src/main/java/udmi/lib/client/manager/PointsetManager.java index 9952d62d74..b52c7ccad4 100644 --- a/pubber/src/main/java/udmi/lib/client/manager/PointsetManager.java +++ b/pubber/src/main/java/udmi/lib/client/manager/PointsetManager.java @@ -26,6 +26,7 @@ import udmi.schema.PointPointsetEvents; import udmi.schema.PointPointsetModel; import udmi.schema.PointPointsetState; +import udmi.schema.PointPointsetState.Value_state; import udmi.schema.PointsetConfig; import udmi.schema.PointsetEvents; import udmi.schema.PointsetModel; @@ -287,6 +288,22 @@ default void updatePointConfig(AbstractPoint point, PointPointsetConfig pointCon }); } + /** + * Update Point Intermediate State + * @param point + * @param pointConfig + */ + default void updatePointIntermediateState(AbstractPoint point, PointPointsetConfig pointConfig) { + ifNotTrueThen(isNoWriteback(), () -> { + try { + point.setIntermediateState(); + } catch (Exception e) { + error("Unable to set intermediate state", e); + } + updatePoint(point); + }); + } + default boolean isNoWriteback() { return false; } diff --git a/pubber/src/main/java/udmi/lib/intf/AbstractPoint.java b/pubber/src/main/java/udmi/lib/intf/AbstractPoint.java index c855802c72..f45408be37 100644 --- a/pubber/src/main/java/udmi/lib/intf/AbstractPoint.java +++ b/pubber/src/main/java/udmi/lib/intf/AbstractPoint.java @@ -1,8 +1,10 @@ package udmi.lib.intf; +import udmi.schema.Entry; import udmi.schema.PointPointsetConfig; import udmi.schema.PointPointsetEvents; import udmi.schema.PointPointsetState; +import udmi.schema.PointPointsetState.Value_state; import udmi.schema.RefDiscovery; /** @@ -21,6 +23,7 @@ public interface AbstractPoint { PointPointsetState getState(); void setConfig(PointPointsetConfig config); + void setIntermediateState(); RefDiscovery enumerate(); } From 8270d4352fef8a7aa8f37ced5ddc8c48a2fcc46c Mon Sep 17 00:00:00 2001 From: Nitish Jain Date: Tue, 26 Aug 2025 12:29:21 +0000 Subject: [PATCH 47/68] fixing checkstyleMain error --- .../java/daq/pubber/impl/manager/PubberPointsetManager.java | 3 +-- pubber/src/main/java/udmi/lib/base/BasicPoint.java | 2 +- .../main/java/udmi/lib/client/manager/PointsetManager.java | 6 ++---- pubber/src/main/java/udmi/lib/intf/AbstractPoint.java | 3 +-- 4 files changed, 5 insertions(+), 9 deletions(-) diff --git a/pubber/src/main/java/daq/pubber/impl/manager/PubberPointsetManager.java b/pubber/src/main/java/daq/pubber/impl/manager/PubberPointsetManager.java index 5704ca9d44..fc9a4c1c36 100644 --- a/pubber/src/main/java/daq/pubber/impl/manager/PubberPointsetManager.java +++ b/pubber/src/main/java/daq/pubber/impl/manager/PubberPointsetManager.java @@ -19,7 +19,6 @@ import udmi.lib.intf.ManagerHost; import udmi.schema.PointPointsetConfig; import udmi.schema.PointPointsetModel; -import udmi.schema.PointPointsetState.Value_state; import udmi.schema.PointsetState; import udmi.schema.PubberConfiguration; @@ -146,7 +145,7 @@ public void updatePointConfig(AbstractPoint point, PointPointsetConfig pointConf } else { info(format("Applying slow writeback for point %s with %ds delay", point.getName(), WRITE_DELAY_SEC)); - PointsetManager.super.updatePointIntermediateState(point, pointConfig); + PointsetManager.super.updatePointIntermediateState(point); handleDelayWriteback(point, pointConfig, WRITE_DELAY_SEC); } } diff --git a/pubber/src/main/java/udmi/lib/base/BasicPoint.java b/pubber/src/main/java/udmi/lib/base/BasicPoint.java index 470e8579a9..a581eedc71 100644 --- a/pubber/src/main/java/udmi/lib/base/BasicPoint.java +++ b/pubber/src/main/java/udmi/lib/base/BasicPoint.java @@ -90,7 +90,7 @@ private void updateDirtyState(Value_state previousValueState, Entry previousStat } /** - * Set the Intermediate State of the PointSet and update Dirty State if needed + * Set the Intermediate State of the PointSet and update Dirty State if needed. */ public void setIntermediateState() { Value_state previousValueState = state.value_state; diff --git a/pubber/src/main/java/udmi/lib/client/manager/PointsetManager.java b/pubber/src/main/java/udmi/lib/client/manager/PointsetManager.java index b52c7ccad4..2823e35d82 100644 --- a/pubber/src/main/java/udmi/lib/client/manager/PointsetManager.java +++ b/pubber/src/main/java/udmi/lib/client/manager/PointsetManager.java @@ -26,7 +26,6 @@ import udmi.schema.PointPointsetEvents; import udmi.schema.PointPointsetModel; import udmi.schema.PointPointsetState; -import udmi.schema.PointPointsetState.Value_state; import udmi.schema.PointsetConfig; import udmi.schema.PointsetEvents; import udmi.schema.PointsetModel; @@ -289,11 +288,10 @@ default void updatePointConfig(AbstractPoint point, PointPointsetConfig pointCon } /** - * Update Point Intermediate State + * Update Point Intermediate State. * @param point - * @param pointConfig */ - default void updatePointIntermediateState(AbstractPoint point, PointPointsetConfig pointConfig) { + default void updatePointIntermediateState(AbstractPoint point) { ifNotTrueThen(isNoWriteback(), () -> { try { point.setIntermediateState(); diff --git a/pubber/src/main/java/udmi/lib/intf/AbstractPoint.java b/pubber/src/main/java/udmi/lib/intf/AbstractPoint.java index f45408be37..9e8a8aed27 100644 --- a/pubber/src/main/java/udmi/lib/intf/AbstractPoint.java +++ b/pubber/src/main/java/udmi/lib/intf/AbstractPoint.java @@ -1,10 +1,8 @@ package udmi.lib.intf; -import udmi.schema.Entry; import udmi.schema.PointPointsetConfig; import udmi.schema.PointPointsetEvents; import udmi.schema.PointPointsetState; -import udmi.schema.PointPointsetState.Value_state; import udmi.schema.RefDiscovery; /** @@ -23,6 +21,7 @@ public interface AbstractPoint { PointPointsetState getState(); void setConfig(PointPointsetConfig config); + void setIntermediateState(); RefDiscovery enumerate(); From 37caa4f39cb9bf71b8c63717836efd8ec27bed3d Mon Sep 17 00:00:00 2001 From: Nitish Jain Date: Tue, 26 Aug 2025 12:41:37 +0000 Subject: [PATCH 48/68] fixing checkstyleMain error --- .../src/main/java/udmi/lib/client/manager/PointsetManager.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/pubber/src/main/java/udmi/lib/client/manager/PointsetManager.java b/pubber/src/main/java/udmi/lib/client/manager/PointsetManager.java index 2823e35d82..9e70e7b88a 100644 --- a/pubber/src/main/java/udmi/lib/client/manager/PointsetManager.java +++ b/pubber/src/main/java/udmi/lib/client/manager/PointsetManager.java @@ -289,7 +289,8 @@ default void updatePointConfig(AbstractPoint point, PointPointsetConfig pointCon /** * Update Point Intermediate State. - * @param point + * + * @param point PointSet Point. */ default void updatePointIntermediateState(AbstractPoint point) { ifNotTrueThen(isNoWriteback(), () -> { From 53df7aea6ee09fd50bec5b73dbbc9451ff5c073e Mon Sep 17 00:00:00 2001 From: Trevor Date: Tue, 26 Aug 2025 20:45:36 -0700 Subject: [PATCH 49/68] config change detection (#4) * Cached change-of-value * Fix JLS order --- .../pubber/impl/manager/PubberPointsetManager.java | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/pubber/src/main/java/daq/pubber/impl/manager/PubberPointsetManager.java b/pubber/src/main/java/daq/pubber/impl/manager/PubberPointsetManager.java index fc9a4c1c36..bed6cb78f2 100644 --- a/pubber/src/main/java/daq/pubber/impl/manager/PubberPointsetManager.java +++ b/pubber/src/main/java/daq/pubber/impl/manager/PubberPointsetManager.java @@ -1,6 +1,8 @@ package daq.pubber.impl.manager; import static com.google.common.base.Preconditions.checkState; +import static com.google.udmi.util.GeneralUtils.catchToNull; +import static com.google.udmi.util.JsonUtil.stringify; import static java.lang.String.format; import com.google.common.collect.ImmutableMap; @@ -10,7 +12,9 @@ import daq.pubber.impl.point.PubberRandomPoint; import java.util.HashMap; import java.util.Map; +import java.util.Objects; import java.util.Set; +import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.TimeUnit; @@ -30,6 +34,7 @@ public class PubberPointsetManager extends PubberManager implements PointsetMana private final ExtraPointsetEvent pointsetEvent = new ExtraPointsetEvent(); private final Map managedPoints = new HashMap<>(); private final ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1); + private final Map setValueCache = new ConcurrentHashMap<>(); private static final int WRITE_DELAY_SEC = 10; private int pointsetUpdateCount = -1; @@ -137,13 +142,18 @@ private static PointPointsetModel makePointPointsetModel(int value, double toler public void updatePointConfig(AbstractPoint point, PointPointsetConfig pointConfig) { boolean isFastWrite = isFastWrite(); boolean isDelayWrite = isDelayWrite(); + String newPointValue = stringify(catchToNull(() -> pointConfig.set_value)); + String prevPointValue = setValueCache.put(point.getName(), newPointValue); + boolean isUnmodified = Objects.equals(newPointValue, prevPointValue); - if (isFastWrite || pointConfig == null || pointConfig.set_value == null) { + if (isFastWrite || isUnmodified) { PointsetManager.super.updatePointConfig(point, pointConfig); } else if (isDelayWrite) { + debug(format("Applying delayed writeback for point %s with %ds delay", point.getName(), + WRITE_DELAY_SEC)); handleDelayWriteback(point, pointConfig, WRITE_DELAY_SEC); } else { - info(format("Applying slow writeback for point %s with %ds delay", point.getName(), + debug(format("Applying slow writeback for point %s with %ds delay", point.getName(), WRITE_DELAY_SEC)); PointsetManager.super.updatePointIntermediateState(point); handleDelayWriteback(point, pointConfig, WRITE_DELAY_SEC); From 24732965943d43e0c01723a0baff881bab1b64df Mon Sep 17 00:00:00 2001 From: Nitish Jain Date: Wed, 27 Aug 2025 16:26:36 +0000 Subject: [PATCH 50/68] addressing review comments --- bin/test_mosquitto | 3 +-- .../java/daq/pubber/impl/manager/PubberPointsetManager.java | 2 +- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/bin/test_mosquitto b/bin/test_mosquitto index fee918d6b1..f6581fa274 100755 --- a/bin/test_mosquitto +++ b/bin/test_mosquitto @@ -81,8 +81,7 @@ cat < /tmp/pubber_config.json "deviceId": "$device_id", "serialNo": "$serial_no", "options": { - "smokeCheck": true, - "fastWrite" : true + "smokeCheck": true } } EOF diff --git a/pubber/src/main/java/daq/pubber/impl/manager/PubberPointsetManager.java b/pubber/src/main/java/daq/pubber/impl/manager/PubberPointsetManager.java index bed6cb78f2..df173b7787 100644 --- a/pubber/src/main/java/daq/pubber/impl/manager/PubberPointsetManager.java +++ b/pubber/src/main/java/daq/pubber/impl/manager/PubberPointsetManager.java @@ -155,7 +155,7 @@ public void updatePointConfig(AbstractPoint point, PointPointsetConfig pointConf } else { debug(format("Applying slow writeback for point %s with %ds delay", point.getName(), WRITE_DELAY_SEC)); - PointsetManager.super.updatePointIntermediateState(point); + updateState(); handleDelayWriteback(point, pointConfig, WRITE_DELAY_SEC); } } From b43e99e9e01f23a33349208407a91a05c576e9d4 Mon Sep 17 00:00:00 2001 From: Nitish Jain Date: Wed, 27 Aug 2025 16:44:21 +0000 Subject: [PATCH 51/68] addressing review comments --- pubber/src/main/java/daq/pubber/impl/PubberManager.java | 4 ++-- .../java/daq/pubber/impl/manager/PubberPointsetManager.java | 4 +++- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/pubber/src/main/java/daq/pubber/impl/PubberManager.java b/pubber/src/main/java/daq/pubber/impl/PubberManager.java index 275c121c8e..411dd20ebd 100644 --- a/pubber/src/main/java/daq/pubber/impl/PubberManager.java +++ b/pubber/src/main/java/daq/pubber/impl/PubberManager.java @@ -226,10 +226,10 @@ public boolean isExtraDevice() { // protected boolean isFastWrite() { - return options.fastWrite != null; + return isTrue(options.fastWrite); } protected boolean isDelayWrite() { - return options.delayWrite != null; + return isTrue(options.delayWrite); } } diff --git a/pubber/src/main/java/daq/pubber/impl/manager/PubberPointsetManager.java b/pubber/src/main/java/daq/pubber/impl/manager/PubberPointsetManager.java index df173b7787..087ac63819 100644 --- a/pubber/src/main/java/daq/pubber/impl/manager/PubberPointsetManager.java +++ b/pubber/src/main/java/daq/pubber/impl/manager/PubberPointsetManager.java @@ -23,6 +23,7 @@ import udmi.lib.intf.ManagerHost; import udmi.schema.PointPointsetConfig; import udmi.schema.PointPointsetModel; +import udmi.schema.PointPointsetState.Value_state; import udmi.schema.PointsetState; import udmi.schema.PubberConfiguration; @@ -145,7 +146,7 @@ public void updatePointConfig(AbstractPoint point, PointPointsetConfig pointConf String newPointValue = stringify(catchToNull(() -> pointConfig.set_value)); String prevPointValue = setValueCache.put(point.getName(), newPointValue); boolean isUnmodified = Objects.equals(newPointValue, prevPointValue); - + if (isFastWrite || isUnmodified) { PointsetManager.super.updatePointConfig(point, pointConfig); } else if (isDelayWrite) { @@ -155,6 +156,7 @@ public void updatePointConfig(AbstractPoint point, PointPointsetConfig pointConf } else { debug(format("Applying slow writeback for point %s with %ds delay", point.getName(), WRITE_DELAY_SEC)); + getPointsetState().points.get(point.getName()).value_state = Value_state.UPDATING; updateState(); handleDelayWriteback(point, pointConfig, WRITE_DELAY_SEC); } From 9b077ee277231a4a66d1958df2d60a3bbdeb3b7b Mon Sep 17 00:00:00 2001 From: Nitish Jain Date: Wed, 27 Aug 2025 17:23:25 +0000 Subject: [PATCH 52/68] addressing review comments --- .../daq/pubber/impl/manager/PubberPointsetManager.java | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/pubber/src/main/java/daq/pubber/impl/manager/PubberPointsetManager.java b/pubber/src/main/java/daq/pubber/impl/manager/PubberPointsetManager.java index 087ac63819..e4eedb034e 100644 --- a/pubber/src/main/java/daq/pubber/impl/manager/PubberPointsetManager.java +++ b/pubber/src/main/java/daq/pubber/impl/manager/PubberPointsetManager.java @@ -143,11 +143,13 @@ private static PointPointsetModel makePointPointsetModel(int value, double toler public void updatePointConfig(AbstractPoint point, PointPointsetConfig pointConfig) { boolean isFastWrite = isFastWrite(); boolean isDelayWrite = isDelayWrite(); + boolean isNoWriteback = isNoWriteback(); + String newPointValue = stringify(catchToNull(() -> pointConfig.set_value)); String prevPointValue = setValueCache.put(point.getName(), newPointValue); boolean isUnmodified = Objects.equals(newPointValue, prevPointValue); - - if (isFastWrite || isUnmodified) { + + if (isFastWrite || isUnmodified || isNoWriteback) { PointsetManager.super.updatePointConfig(point, pointConfig); } else if (isDelayWrite) { debug(format("Applying delayed writeback for point %s with %ds delay", point.getName(), @@ -157,7 +159,7 @@ public void updatePointConfig(AbstractPoint point, PointPointsetConfig pointConf debug(format("Applying slow writeback for point %s with %ds delay", point.getName(), WRITE_DELAY_SEC)); getPointsetState().points.get(point.getName()).value_state = Value_state.UPDATING; - updateState(); + updatePoint(point); handleDelayWriteback(point, pointConfig, WRITE_DELAY_SEC); } } From bb3539ff8b59af71538d8eabb5ace32d153771ab Mon Sep 17 00:00:00 2001 From: Nitish Jain Date: Thu, 28 Aug 2025 04:43:27 +0000 Subject: [PATCH 53/68] adding fastWrite in test_mosquitto as it is failing most of the times --- bin/test_mosquitto | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/bin/test_mosquitto b/bin/test_mosquitto index f6581fa274..fee918d6b1 100755 --- a/bin/test_mosquitto +++ b/bin/test_mosquitto @@ -81,7 +81,8 @@ cat < /tmp/pubber_config.json "deviceId": "$device_id", "serialNo": "$serial_no", "options": { - "smokeCheck": true + "smokeCheck": true, + "fastWrite" : true } } EOF From 99ef254533b4ab98d859cb45742f8b50c35ba7d1 Mon Sep 17 00:00:00 2001 From: Trevor Date: Wed, 27 Aug 2025 22:28:54 -0700 Subject: [PATCH 54/68] Use timeout instead of fastWrite (#5) * Remove fastWrite * Increase timeout --- bin/test_mosquitto | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/bin/test_mosquitto b/bin/test_mosquitto index fee918d6b1..642f337ebe 100755 --- a/bin/test_mosquitto +++ b/bin/test_mosquitto @@ -81,8 +81,7 @@ cat < /tmp/pubber_config.json "deviceId": "$device_id", "serialNo": "$serial_no", "options": { - "smokeCheck": true, - "fastWrite" : true + "smokeCheck": true } } EOF @@ -99,7 +98,7 @@ mosquitto_pub $CLIENT_OPTS -r -t /r/$registry_id/d/$device_id/config -f $DEV_CON echo Running pubber smoke check # TODO: Replace this with proper smoke check when backend is working. -timeout 20s pubber/bin/run /tmp/pubber_config.json || true +timeout 30s pubber/bin/run /tmp/pubber_config.json || true echo Publishing ending test message mosquitto_pub $CLIENT_OPTS -t $topic -m "Hello Rudolph" From e910900ef0672460dbb0d743f269e5080ebe0570 Mon Sep 17 00:00:00 2001 From: Nitish Jain Date: Thu, 28 Aug 2025 08:15:29 +0000 Subject: [PATCH 55/68] increasing timeout in bin/test_mosquitto --- bin/test_mosquitto | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bin/test_mosquitto b/bin/test_mosquitto index 642f337ebe..5a02e662e2 100755 --- a/bin/test_mosquitto +++ b/bin/test_mosquitto @@ -98,7 +98,7 @@ mosquitto_pub $CLIENT_OPTS -r -t /r/$registry_id/d/$device_id/config -f $DEV_CON echo Running pubber smoke check # TODO: Replace this with proper smoke check when backend is working. -timeout 30s pubber/bin/run /tmp/pubber_config.json || true +timeout 40s pubber/bin/run /tmp/pubber_config.json || true echo Publishing ending test message mosquitto_pub $CLIENT_OPTS -t $topic -m "Hello Rudolph" From 4b180e3be628de8c8f3731853137293dc9be74f1 Mon Sep 17 00:00:00 2001 From: Nitish Jain Date: Thu, 28 Aug 2025 16:16:01 +0000 Subject: [PATCH 56/68] trying checking the older implementation --- .../pubber/impl/manager/PubberPointsetManager.java | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/pubber/src/main/java/daq/pubber/impl/manager/PubberPointsetManager.java b/pubber/src/main/java/daq/pubber/impl/manager/PubberPointsetManager.java index e4eedb034e..4feae8eab4 100644 --- a/pubber/src/main/java/daq/pubber/impl/manager/PubberPointsetManager.java +++ b/pubber/src/main/java/daq/pubber/impl/manager/PubberPointsetManager.java @@ -143,13 +143,14 @@ private static PointPointsetModel makePointPointsetModel(int value, double toler public void updatePointConfig(AbstractPoint point, PointPointsetConfig pointConfig) { boolean isFastWrite = isFastWrite(); boolean isDelayWrite = isDelayWrite(); - boolean isNoWriteback = isNoWriteback(); +// boolean isNoWriteback = isNoWriteback(); +// debug(format("value of noWriteback: %s", isNoWriteback)); String newPointValue = stringify(catchToNull(() -> pointConfig.set_value)); - String prevPointValue = setValueCache.put(point.getName(), newPointValue); - boolean isUnmodified = Objects.equals(newPointValue, prevPointValue); +// String prevPointValue = setValueCache.put(point.getName(), newPointValue); +// boolean isUnmodified = Objects.equals(newPointValue, prevPointValue); - if (isFastWrite || isUnmodified || isNoWriteback) { + if (isFastWrite || newPointValue == null) { PointsetManager.super.updatePointConfig(point, pointConfig); } else if (isDelayWrite) { debug(format("Applying delayed writeback for point %s with %ds delay", point.getName(), @@ -158,8 +159,9 @@ public void updatePointConfig(AbstractPoint point, PointPointsetConfig pointConf } else { debug(format("Applying slow writeback for point %s with %ds delay", point.getName(), WRITE_DELAY_SEC)); - getPointsetState().points.get(point.getName()).value_state = Value_state.UPDATING; - updatePoint(point); +// getPointsetState().points.get(point.getName()).value_state = Value_state.UPDATING; +// updatePoint(point); + PointsetManager.super.updatePointIntermediateState(point); handleDelayWriteback(point, pointConfig, WRITE_DELAY_SEC); } } From 98e7b7ab06f4faa50c5e0ed6179dd9840036dfea Mon Sep 17 00:00:00 2001 From: Nitish Jain Date: Thu, 28 Aug 2025 16:23:56 +0000 Subject: [PATCH 57/68] trying checking the older implementation --- .../java/daq/pubber/impl/manager/PubberPointsetManager.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pubber/src/main/java/daq/pubber/impl/manager/PubberPointsetManager.java b/pubber/src/main/java/daq/pubber/impl/manager/PubberPointsetManager.java index 4feae8eab4..84275fd5ff 100644 --- a/pubber/src/main/java/daq/pubber/impl/manager/PubberPointsetManager.java +++ b/pubber/src/main/java/daq/pubber/impl/manager/PubberPointsetManager.java @@ -146,11 +146,11 @@ public void updatePointConfig(AbstractPoint point, PointPointsetConfig pointConf // boolean isNoWriteback = isNoWriteback(); // debug(format("value of noWriteback: %s", isNoWriteback)); - String newPointValue = stringify(catchToNull(() -> pointConfig.set_value)); +// String newPointValue = stringify(catchToNull(() -> pointConfig.set_value)); // String prevPointValue = setValueCache.put(point.getName(), newPointValue); // boolean isUnmodified = Objects.equals(newPointValue, prevPointValue); - if (isFastWrite || newPointValue == null) { + if (isFastWrite || pointConfig == null || pointConfig.set_value == null) { PointsetManager.super.updatePointConfig(point, pointConfig); } else if (isDelayWrite) { debug(format("Applying delayed writeback for point %s with %ds delay", point.getName(), From 378ee260d79a3c01c622ef6385a512a196775abe Mon Sep 17 00:00:00 2001 From: Nitish Jain Date: Thu, 28 Aug 2025 16:27:43 +0000 Subject: [PATCH 58/68] trying checking the older implementation --- .../java/daq/pubber/impl/manager/PubberPointsetManager.java | 4 ---- 1 file changed, 4 deletions(-) diff --git a/pubber/src/main/java/daq/pubber/impl/manager/PubberPointsetManager.java b/pubber/src/main/java/daq/pubber/impl/manager/PubberPointsetManager.java index 84275fd5ff..e593d69347 100644 --- a/pubber/src/main/java/daq/pubber/impl/manager/PubberPointsetManager.java +++ b/pubber/src/main/java/daq/pubber/impl/manager/PubberPointsetManager.java @@ -1,8 +1,6 @@ package daq.pubber.impl.manager; import static com.google.common.base.Preconditions.checkState; -import static com.google.udmi.util.GeneralUtils.catchToNull; -import static com.google.udmi.util.JsonUtil.stringify; import static java.lang.String.format; import com.google.common.collect.ImmutableMap; @@ -12,7 +10,6 @@ import daq.pubber.impl.point.PubberRandomPoint; import java.util.HashMap; import java.util.Map; -import java.util.Objects; import java.util.Set; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.Executors; @@ -23,7 +20,6 @@ import udmi.lib.intf.ManagerHost; import udmi.schema.PointPointsetConfig; import udmi.schema.PointPointsetModel; -import udmi.schema.PointPointsetState.Value_state; import udmi.schema.PointsetState; import udmi.schema.PubberConfiguration; From 8e53e83544873a78fd55811b87fbdeefba673d03 Mon Sep 17 00:00:00 2001 From: Nitish Jain Date: Fri, 29 Aug 2025 04:39:29 +0000 Subject: [PATCH 59/68] cleanup ofn intermediate state method changes --- bin/test_validator | 4 ++-- .../impl/manager/PubberPointsetManager.java | 21 +++++++++++-------- .../main/java/udmi/lib/base/BasicPoint.java | 14 ------------- .../lib/client/manager/PointsetManager.java | 16 -------------- .../java/udmi/lib/intf/AbstractPoint.java | 2 -- 5 files changed, 14 insertions(+), 43 deletions(-) diff --git a/bin/test_validator b/bin/test_validator index ede516e3f3..2835a450b3 100755 --- a/bin/test_validator +++ b/bin/test_validator @@ -81,8 +81,8 @@ fi echo Reported cloud version: $(jq .cloud_version.udmi_ref $report_file) -pubber_bg AHU-1 extraField=prlagle skewClock -pubber_bg GAT-123 emptyMissing extraPoint=llama fixedSampleRate=2 +pubber_bg AHU-1 extraField=prlagle skewClock fastWrite +pubber_bg GAT-123 emptyMissing extraPoint=llama fixedSampleRate=2 fastWrite echo Waiting for system to run for a bit... cat $VALIDATOR_LOG && timeout 60s tail -f $VALIDATOR_LOG || true diff --git a/pubber/src/main/java/daq/pubber/impl/manager/PubberPointsetManager.java b/pubber/src/main/java/daq/pubber/impl/manager/PubberPointsetManager.java index e593d69347..142c7fd210 100644 --- a/pubber/src/main/java/daq/pubber/impl/manager/PubberPointsetManager.java +++ b/pubber/src/main/java/daq/pubber/impl/manager/PubberPointsetManager.java @@ -1,6 +1,8 @@ package daq.pubber.impl.manager; import static com.google.common.base.Preconditions.checkState; +import static com.google.udmi.util.GeneralUtils.catchToNull; +import static com.google.udmi.util.JsonUtil.stringify; import static java.lang.String.format; import com.google.common.collect.ImmutableMap; @@ -10,6 +12,7 @@ import daq.pubber.impl.point.PubberRandomPoint; import java.util.HashMap; import java.util.Map; +import java.util.Objects; import java.util.Set; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.Executors; @@ -20,6 +23,7 @@ import udmi.lib.intf.ManagerHost; import udmi.schema.PointPointsetConfig; import udmi.schema.PointPointsetModel; +import udmi.schema.PointPointsetState.Value_state; import udmi.schema.PointsetState; import udmi.schema.PubberConfiguration; @@ -139,14 +143,14 @@ private static PointPointsetModel makePointPointsetModel(int value, double toler public void updatePointConfig(AbstractPoint point, PointPointsetConfig pointConfig) { boolean isFastWrite = isFastWrite(); boolean isDelayWrite = isDelayWrite(); -// boolean isNoWriteback = isNoWriteback(); + boolean isNoWriteback = isNoWriteback(); -// debug(format("value of noWriteback: %s", isNoWriteback)); -// String newPointValue = stringify(catchToNull(() -> pointConfig.set_value)); -// String prevPointValue = setValueCache.put(point.getName(), newPointValue); -// boolean isUnmodified = Objects.equals(newPointValue, prevPointValue); + debug(format("value of noWriteback: %s", isNoWriteback)); + String newPointValue = stringify(catchToNull(() -> pointConfig.set_value)); + String prevPointValue = setValueCache.put(point.getName(), newPointValue); + boolean isUnmodified = Objects.equals(newPointValue, prevPointValue); - if (isFastWrite || pointConfig == null || pointConfig.set_value == null) { + if (isFastWrite || isUnmodified) { PointsetManager.super.updatePointConfig(point, pointConfig); } else if (isDelayWrite) { debug(format("Applying delayed writeback for point %s with %ds delay", point.getName(), @@ -155,9 +159,8 @@ public void updatePointConfig(AbstractPoint point, PointPointsetConfig pointConf } else { debug(format("Applying slow writeback for point %s with %ds delay", point.getName(), WRITE_DELAY_SEC)); -// getPointsetState().points.get(point.getName()).value_state = Value_state.UPDATING; -// updatePoint(point); - PointsetManager.super.updatePointIntermediateState(point); + getPointsetState().points.get(point.getName()).value_state = Value_state.UPDATING; + updatePoint(point); handleDelayWriteback(point, pointConfig, WRITE_DELAY_SEC); } } diff --git a/pubber/src/main/java/udmi/lib/base/BasicPoint.java b/pubber/src/main/java/udmi/lib/base/BasicPoint.java index a581eedc71..0ec7583bdc 100644 --- a/pubber/src/main/java/udmi/lib/base/BasicPoint.java +++ b/pubber/src/main/java/udmi/lib/base/BasicPoint.java @@ -80,25 +80,11 @@ public void setConfig(PointPointsetConfig config) { Value_state previousValueState = state.value_state; Entry previousStatus = deepCopy(state.status); updateStateConfig(config); - updateDirtyState(previousValueState, previousStatus); - } - - private void updateDirtyState(Value_state previousValueState, Entry previousStatus) { dirty = dirty || state.value_state != previousValueState || !Objects.equals(state.status, previousStatus); } - /** - * Set the Intermediate State of the PointSet and update Dirty State if needed. - */ - public void setIntermediateState() { - Value_state previousValueState = state.value_state; - Entry previousStatus = deepCopy(state.status); - state.value_state = Value_state.UPDATING; - updateDirtyState(previousValueState, previousStatus); - } - /** * Update the state of this point based off of a new config. */ diff --git a/pubber/src/main/java/udmi/lib/client/manager/PointsetManager.java b/pubber/src/main/java/udmi/lib/client/manager/PointsetManager.java index 9e70e7b88a..9952d62d74 100644 --- a/pubber/src/main/java/udmi/lib/client/manager/PointsetManager.java +++ b/pubber/src/main/java/udmi/lib/client/manager/PointsetManager.java @@ -287,22 +287,6 @@ default void updatePointConfig(AbstractPoint point, PointPointsetConfig pointCon }); } - /** - * Update Point Intermediate State. - * - * @param point PointSet Point. - */ - default void updatePointIntermediateState(AbstractPoint point) { - ifNotTrueThen(isNoWriteback(), () -> { - try { - point.setIntermediateState(); - } catch (Exception e) { - error("Unable to set intermediate state", e); - } - updatePoint(point); - }); - } - default boolean isNoWriteback() { return false; } diff --git a/pubber/src/main/java/udmi/lib/intf/AbstractPoint.java b/pubber/src/main/java/udmi/lib/intf/AbstractPoint.java index 9e8a8aed27..c855802c72 100644 --- a/pubber/src/main/java/udmi/lib/intf/AbstractPoint.java +++ b/pubber/src/main/java/udmi/lib/intf/AbstractPoint.java @@ -22,7 +22,5 @@ public interface AbstractPoint { void setConfig(PointPointsetConfig config); - void setIntermediateState(); - RefDiscovery enumerate(); } From 5babcf4d7c43eb3e5397ea054d98aa2a362204d6 Mon Sep 17 00:00:00 2001 From: Nitish Jain Date: Fri, 29 Aug 2025 09:47:30 +0000 Subject: [PATCH 60/68] uodating itemized out --- bin/test_mosquitto | 2 +- etc/test_itemized.out | 2 +- .../java/daq/pubber/impl/manager/PubberPointsetManager.java | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/bin/test_mosquitto b/bin/test_mosquitto index 5a02e662e2..642f337ebe 100755 --- a/bin/test_mosquitto +++ b/bin/test_mosquitto @@ -98,7 +98,7 @@ mosquitto_pub $CLIENT_OPTS -r -t /r/$registry_id/d/$device_id/config -f $DEV_CON echo Running pubber smoke check # TODO: Replace this with proper smoke check when backend is working. -timeout 40s pubber/bin/run /tmp/pubber_config.json || true +timeout 30s pubber/bin/run /tmp/pubber_config.json || true echo Publishing ending test message mosquitto_pub $CLIENT_OPTS -t $topic -m "Hello Rudolph" diff --git a/etc/test_itemized.out b/etc/test_itemized.out index 36f8bc1077..60596a6c4c 100644 --- a/etc/test_itemized.out +++ b/etc/test_itemized.out @@ -8,7 +8,7 @@ 1 RESULT pass system valid_serial_no STABLE 10/10 Sequence complete 1 RESULT pass system valid_serial_no STABLE 10/10 Sequence complete 1 RESULT fail writeback writeback_success ALPHA 0/10 Failed waiting until target point has value_state default (null): point filter_differential_pressure_setpoint is applied, expected null -1 RESULT fail writeback writeback_success ALPHA 0/10 Failed waiting until target point has value_state applied: point filter_differential_pressure_setpoint is null, expected applied +1 RESULT fail writeback writeback_success ALPHA 0/10 Failed waiting until target point has value_state default (null): point filter_differential_pressure_setpoint is updating, expected null 1 RESULT fail writeback writeback_success ALPHA 0/10 Failed waiting until target point has value_state applied: point filter_differential_pressure_setpoint is null, expected applied 1 RESULT skip writeback writeback_operation ALPHA 0/0 operation completed quickly 1 RESULT fail writeback writeback_operation ALPHA 0/10 Failed waiting until target point has value_state updating: point filter_differential_pressure_setpoint is applied, expected updating diff --git a/pubber/src/main/java/daq/pubber/impl/manager/PubberPointsetManager.java b/pubber/src/main/java/daq/pubber/impl/manager/PubberPointsetManager.java index 142c7fd210..3890fca3a2 100644 --- a/pubber/src/main/java/daq/pubber/impl/manager/PubberPointsetManager.java +++ b/pubber/src/main/java/daq/pubber/impl/manager/PubberPointsetManager.java @@ -160,7 +160,7 @@ public void updatePointConfig(AbstractPoint point, PointPointsetConfig pointConf debug(format("Applying slow writeback for point %s with %ds delay", point.getName(), WRITE_DELAY_SEC)); getPointsetState().points.get(point.getName()).value_state = Value_state.UPDATING; - updatePoint(point); + updateState(); handleDelayWriteback(point, pointConfig, WRITE_DELAY_SEC); } } From 52a5725277c089be93f3d26ecdddd9d0565bbad3 Mon Sep 17 00:00:00 2001 From: Nitish Jain Date: Fri, 12 Sep 2025 12:00:44 +0000 Subject: [PATCH 61/68] public/private key validation in registrar --- .../daq/mqtt/registrar/LocalDevice.java | 44 +++++ .../google/daq/mqtt/util/KeyValidator.java | 183 ++++++++++++++++++ 2 files changed, 227 insertions(+) create mode 100644 validator/src/main/java/com/google/daq/mqtt/util/KeyValidator.java diff --git a/validator/src/main/java/com/google/daq/mqtt/registrar/LocalDevice.java b/validator/src/main/java/com/google/daq/mqtt/registrar/LocalDevice.java index d0b1ec3541..eaf6f4dfb5 100644 --- a/validator/src/main/java/com/google/daq/mqtt/registrar/LocalDevice.java +++ b/validator/src/main/java/com/google/daq/mqtt/registrar/LocalDevice.java @@ -45,6 +45,7 @@ import com.google.daq.mqtt.util.CloudIotManager; import com.google.daq.mqtt.util.ConfigManager; import com.google.daq.mqtt.util.DeviceExceptionManager; +import com.google.daq.mqtt.util.KeyValidator; import com.google.udmi.util.ErrorMap; import com.google.udmi.util.ErrorMap.ErrorMapException; import com.google.udmi.util.ExceptionMap; @@ -191,6 +192,8 @@ class LocalDevice { private ConfigManager config; private final DeviceExceptionManager exceptionManager; private final SiteModel siteModel; + // In LocalDevice.java, add with other member variables. + private final KeyValidator keyValidator = new KeyValidator(); private String deviceNumId; @@ -228,6 +231,8 @@ class LocalDevice { public void initialize() { prepareOutDir(); ifTrueThen(deviceKind == DeviceKind.LOCAL && metadata != null, this::validateMetadata); + ifTrueThen(deviceKind == DeviceKind.LOCAL && metadata != null, this::validateKeyPair); + configure(); } @@ -428,6 +433,45 @@ private Set keyFiles() { return addCertFile ? Sets.union(combined, certFile) : combined; } + /** + * Validates that if a private key is provided, the corresponding public key + * exists and they form a valid cryptographic pair. + */ + private void validateKeyPair() { + try { + String authType = getAuthType(); + if (authType == null || !(authType.startsWith("RS") || authType.startsWith("ES"))) { + return; + } + + String keyAlgorithm = authType.startsWith("RS") ? "rsa" : "ec"; + String pemFileName = keyAlgorithm + "_private.pem"; + File privateKeyFile = new File(deviceDir, pemFileName); + + if (!privateKeyFile.exists()) { + return; + } + + String publicKeyFileName = getPublicKeyFile(); + if (publicKeyFileName == null) { + throw new RuntimeException("Private key " + privateKeyFile.getName() + " found, but no public key is defined for auth_type " + authType); + } + + File publicKeyFile = new File(deviceDir, publicKeyFileName); + if (!publicKeyFile.exists()) { + throw new RuntimeException("Private key " + privateKeyFile.getName() + " found, but corresponding public key " + publicKeyFileName + " is missing."); + } + + if (!keyValidator.keysMatch(privateKeyFile, publicKeyFile)) { + throw new RuntimeException("CRITICAL: Key pair mismatch for " + publicKeyFile.getName() + " and " + privateKeyFile.getName()); + } + } catch (Exception e) { + captureError(ExceptionCategory.credentials, e); + throw new RuntimeException("Aborting due to key validation failure for device " + deviceId, e); + } + } + + private Set getPrivateKeyFiles() { if (isDeviceKeySource() || !hasAuthType()) { return Set.of(); diff --git a/validator/src/main/java/com/google/daq/mqtt/util/KeyValidator.java b/validator/src/main/java/com/google/daq/mqtt/util/KeyValidator.java new file mode 100644 index 0000000000..8aba2f4901 --- /dev/null +++ b/validator/src/main/java/com/google/daq/mqtt/util/KeyValidator.java @@ -0,0 +1,183 @@ +package com.google.daq.mqtt.util; + +import java.io.File; +import java.io.IOException; +import java.nio.charset.StandardCharsets; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.security.KeyFactory; +import java.security.PrivateKey; +import java.security.PublicKey; +import java.security.Signature; +import java.security.spec.InvalidKeySpecException; +import java.security.spec.PKCS8EncodedKeySpec; +import java.security.spec.X509EncodedKeySpec; +import java.util.Base64; +import java.util.Optional; + + +/** + * KeyValidator class holds the logic for validating the keys. + */ +public class KeyValidator { + private static final String PRIVATE_KEY_HEADER = "-----BEGIN PRIVATE KEY-----"; + private static final String PRIVATE_KEY_FOOTER = "-----END PRIVATE KEY-----"; + private static final String RSA_PRIVATE_KEY_HEADER = "-----BEGIN RSA PRIVATE KEY-----"; + private static final String RSA_PRIVATE_KEY_FOOTER = "-----END RSA PRIVATE KEY-----"; + private static final String PUBLIC_KEY_HEADER = "-----BEGIN PUBLIC KEY-----"; + private static final String PUBLIC_KEY_FOOTER = "-----END PUBLIC KEY-----"; + + /** + * Extracts the Base64 encoded key material from a string based on header and footer. + */ + private Optional extractKeyMaterial(String content, String header, String footer) { + int start = content.indexOf(header); + if (start == -1) { + return Optional.empty(); + } + start += header.length(); + + int end = content.indexOf(footer, start); + if (end == -1) { + System.err.println("Warning: Found header '" + header + "' but no matching footer."); + return Optional.empty(); + } + + String base64Content = content.substring(start, end); + String cleanedContent = base64Content.replaceAll("\\s+", ""); + if (cleanedContent.isEmpty()) { + System.err.println("Warning: No Base64 content between " + header + " and " + footer); + return Optional.empty(); + } + try { + return Optional.of(Base64.getDecoder().decode(cleanedContent)); + } catch (IllegalArgumentException e) { + System.err.println("Warning: Invalid Base64 encoding between " + header + " and " + footer); + return Optional.empty(); + } + } + + /** + * Loads a PrivateKey from decoded bytes. Handles PKCS#8. + */ + private PrivateKey loadPrivateKeyFromBytes(byte[] keyBytes) throws Exception { + KeyFactory keyFactory = KeyFactory.getInstance("RSA"); + PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(keyBytes); + return keyFactory.generatePrivate(keySpec); + } + + /** + * Loads a PublicKey from decoded bytes. Handles X.509. + */ + private PublicKey loadPublicKeyFromBytes(byte[] keyBytes) throws Exception { + KeyFactory keyFactory = KeyFactory.getInstance("RSA"); + X509EncodedKeySpec keySpec = new X509EncodedKeySpec(keyBytes); + return keyFactory.generatePublic(keySpec); + } + + /** + * Loads a PrivateKey from a PEM file path. + */ + private PrivateKey loadPrivateKey(Path path) throws Exception { + if (!Files.exists(path)) { + throw new IOException("Private key file not found: " + path); + } + String content = new String(Files.readAllBytes(path), StandardCharsets.UTF_8); + Optional keyBytes = extractKeyMaterial(content, PRIVATE_KEY_HEADER, PRIVATE_KEY_FOOTER); + boolean isPkcs1 = false; + + if (!keyBytes.isPresent()) { + keyBytes = extractKeyMaterial(content, RSA_PRIVATE_KEY_HEADER, RSA_PRIVATE_KEY_FOOTER); + isPkcs1 = true; + if (!keyBytes.isPresent()) { + throw new IllegalArgumentException("No private key block found in " + path); + } + } + + try { + return loadPrivateKeyFromBytes(keyBytes.get()); + } catch (InvalidKeySpecException e) { + if (isPkcs1) { + throw new InvalidKeySpecException( + "Failed to load private key from " + path, e); + } else { + throw new InvalidKeySpecException("Failed to parse private key from " + path, e); + } + } + } + + /** + * Loads a PublicKey from a PEM file path. + */ + private PublicKey loadPublicKey(Path path) throws Exception { + if (!Files.exists(path)) { + throw new IOException("Public key file not found: " + path); + } + String content = new String(Files.readAllBytes(path), StandardCharsets.UTF_8); + Optional keyBytes = extractKeyMaterial(content, PUBLIC_KEY_HEADER, PUBLIC_KEY_FOOTER); + + if (!keyBytes.isPresent()) { + throw new IllegalArgumentException("No public key block found in " + path); + } + return loadPublicKeyFromBytes(keyBytes.get()); + } + + /** + * Performs the signature test to verify key match. + */ + private boolean checkKeyPairMatch(PrivateKey privateKey, PublicKey publicKey) throws Exception { + byte[] challenge = new byte[1024]; + Signature sig = Signature.getInstance("SHA256withRSA"); + + sig.initSign(privateKey); + sig.update(challenge); + byte[] signature = sig.sign(); + + sig.initVerify(publicKey); + sig.update(challenge); + return sig.verify(signature); + } + + /** + * Checks if the private key and public key in SEPARATE PEM files form a valid pair. + * Accepts String paths. + * + * @param privateKeyPath Path to the private key PEM file. + * @param publicKeyPath Path to the public key PEM file. + * @return true if the keys match, false otherwise. + */ + public boolean keysMatch(String privateKeyPath, String publicKeyPath) { + return keysMatch(Paths.get(privateKeyPath), Paths.get(publicKeyPath)); + } + + /** + * Checks if the private key and public key in SEPARATE PEM files form a valid pair. + * Accepts File objects. + * + * @param privateKeyFile File object for the private key PEM file. + * @param publicKeyFile File object for the public key PEM file. + * @return true if the keys match, false otherwise. + */ + public boolean keysMatch(File privateKeyFile, File publicKeyFile) { + if (privateKeyFile == null || publicKeyFile == null) { + System.err.println("Error: File objects cannot be null."); + return false; + } + return keysMatch(privateKeyFile.toPath(), publicKeyFile.toPath()); + } + + /** + * Internal helper to check keysMatch using Path objects. + */ + private boolean keysMatch(Path privateKeyPath, Path publicKeyPath) { + try { + PrivateKey privateKey = loadPrivateKey(privateKeyPath); + PublicKey publicKey = loadPublicKey(publicKeyPath); + return checkKeyPairMatch(privateKey, publicKey); + } catch (Exception e) { + System.err.println("Error during key matching: " + e.getClass().getSimpleName() + " - " + e.getMessage()); + return false; + } + } +} From 5f469a2a35472c24034e5591e469741f1449a7c1 Mon Sep 17 00:00:00 2001 From: Nitish Jain Date: Fri, 12 Sep 2025 12:04:15 +0000 Subject: [PATCH 62/68] public/private key validation in registrar --- .../google/daq/mqtt/registrar/LocalDevice.java | 12 ++++++++---- .../com/google/daq/mqtt/util/KeyValidator.java | 16 ++-------------- 2 files changed, 10 insertions(+), 18 deletions(-) diff --git a/validator/src/main/java/com/google/daq/mqtt/registrar/LocalDevice.java b/validator/src/main/java/com/google/daq/mqtt/registrar/LocalDevice.java index eaf6f4dfb5..5d4d2f1039 100644 --- a/validator/src/main/java/com/google/daq/mqtt/registrar/LocalDevice.java +++ b/validator/src/main/java/com/google/daq/mqtt/registrar/LocalDevice.java @@ -454,20 +454,24 @@ private void validateKeyPair() { String publicKeyFileName = getPublicKeyFile(); if (publicKeyFileName == null) { - throw new RuntimeException("Private key " + privateKeyFile.getName() + " found, but no public key is defined for auth_type " + authType); + throw new RuntimeException("Private key " + privateKeyFile.getName() + + " found, but no public key is defined for auth_type " + authType); } File publicKeyFile = new File(deviceDir, publicKeyFileName); if (!publicKeyFile.exists()) { - throw new RuntimeException("Private key " + privateKeyFile.getName() + " found, but corresponding public key " + publicKeyFileName + " is missing."); + throw new RuntimeException("Private key " + privateKeyFile.getName() + + " found, but corresponding public key " + publicKeyFileName + " is missing."); } if (!keyValidator.keysMatch(privateKeyFile, publicKeyFile)) { - throw new RuntimeException("CRITICAL: Key pair mismatch for " + publicKeyFile.getName() + " and " + privateKeyFile.getName()); + throw new RuntimeException("CRITICAL: Key pair mismatch for " + publicKeyFile.getName() + + " and " + privateKeyFile.getName()); } } catch (Exception e) { captureError(ExceptionCategory.credentials, e); - throw new RuntimeException("Aborting due to key validation failure for device " + deviceId, e); + throw new RuntimeException("Aborting due to key validation failure for device " + + deviceId, e); } } diff --git a/validator/src/main/java/com/google/daq/mqtt/util/KeyValidator.java b/validator/src/main/java/com/google/daq/mqtt/util/KeyValidator.java index 8aba2f4901..43859df824 100644 --- a/validator/src/main/java/com/google/daq/mqtt/util/KeyValidator.java +++ b/validator/src/main/java/com/google/daq/mqtt/util/KeyValidator.java @@ -5,7 +5,6 @@ import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.nio.file.Path; -import java.nio.file.Paths; import java.security.KeyFactory; import java.security.PrivateKey; import java.security.PublicKey; @@ -139,18 +138,6 @@ private boolean checkKeyPairMatch(PrivateKey privateKey, PublicKey publicKey) th return sig.verify(signature); } - /** - * Checks if the private key and public key in SEPARATE PEM files form a valid pair. - * Accepts String paths. - * - * @param privateKeyPath Path to the private key PEM file. - * @param publicKeyPath Path to the public key PEM file. - * @return true if the keys match, false otherwise. - */ - public boolean keysMatch(String privateKeyPath, String publicKeyPath) { - return keysMatch(Paths.get(privateKeyPath), Paths.get(publicKeyPath)); - } - /** * Checks if the private key and public key in SEPARATE PEM files form a valid pair. * Accepts File objects. @@ -176,7 +163,8 @@ private boolean keysMatch(Path privateKeyPath, Path publicKeyPath) { PublicKey publicKey = loadPublicKey(publicKeyPath); return checkKeyPairMatch(privateKey, publicKey); } catch (Exception e) { - System.err.println("Error during key matching: " + e.getClass().getSimpleName() + " - " + e.getMessage()); + System.err.println("Error during key matching: " + e.getClass().getSimpleName() + " - " + + e.getMessage()); return false; } } From 02259c074fd623d8cbb6788d06a39238251b7a23 Mon Sep 17 00:00:00 2001 From: Nitish Jain Date: Fri, 12 Sep 2025 16:32:35 +0000 Subject: [PATCH 63/68] public/private key validation in registrar --- .../daq/mqtt/registrar/LocalDevice.java | 2 +- .../google/daq/mqtt/util/KeyValidator.java | 215 ++++++++---------- 2 files changed, 94 insertions(+), 123 deletions(-) diff --git a/validator/src/main/java/com/google/daq/mqtt/registrar/LocalDevice.java b/validator/src/main/java/com/google/daq/mqtt/registrar/LocalDevice.java index 5d4d2f1039..79d538a312 100644 --- a/validator/src/main/java/com/google/daq/mqtt/registrar/LocalDevice.java +++ b/validator/src/main/java/com/google/daq/mqtt/registrar/LocalDevice.java @@ -464,7 +464,7 @@ private void validateKeyPair() { " found, but corresponding public key " + publicKeyFileName + " is missing."); } - if (!keyValidator.keysMatch(privateKeyFile, publicKeyFile)) { + if (!keyValidator.keysMatch(privateKeyFile, publicKeyFile, keyAlgorithm)) { throw new RuntimeException("CRITICAL: Key pair mismatch for " + publicKeyFile.getName() + " and " + privateKeyFile.getName()); } diff --git a/validator/src/main/java/com/google/daq/mqtt/util/KeyValidator.java b/validator/src/main/java/com/google/daq/mqtt/util/KeyValidator.java index 43859df824..1e74618624 100644 --- a/validator/src/main/java/com/google/daq/mqtt/util/KeyValidator.java +++ b/validator/src/main/java/com/google/daq/mqtt/util/KeyValidator.java @@ -1,170 +1,141 @@ package com.google.daq.mqtt.util; import java.io.File; +import java.io.FileReader; import java.io.IOException; -import java.nio.charset.StandardCharsets; -import java.nio.file.Files; import java.nio.file.Path; -import java.security.KeyFactory; import java.security.PrivateKey; import java.security.PublicKey; +import java.security.Security; import java.security.Signature; -import java.security.spec.InvalidKeySpecException; -import java.security.spec.PKCS8EncodedKeySpec; -import java.security.spec.X509EncodedKeySpec; -import java.util.Base64; -import java.util.Optional; +import org.bouncycastle.asn1.pkcs.PrivateKeyInfo; +import org.bouncycastle.asn1.x509.SubjectPublicKeyInfo; +import org.bouncycastle.jce.provider.BouncyCastleProvider; +import org.bouncycastle.openssl.PEMKeyPair; +import org.bouncycastle.openssl.PEMParser; +import org.bouncycastle.openssl.jcajce.JcaPEMKeyConverter; +import org.bouncycastle.pkcs.PKCS8EncryptedPrivateKeyInfo; - -/** - * KeyValidator class holds the logic for validating the keys. - */ public class KeyValidator { - private static final String PRIVATE_KEY_HEADER = "-----BEGIN PRIVATE KEY-----"; - private static final String PRIVATE_KEY_FOOTER = "-----END PRIVATE KEY-----"; - private static final String RSA_PRIVATE_KEY_HEADER = "-----BEGIN RSA PRIVATE KEY-----"; - private static final String RSA_PRIVATE_KEY_FOOTER = "-----END RSA PRIVATE KEY-----"; - private static final String PUBLIC_KEY_HEADER = "-----BEGIN PUBLIC KEY-----"; - private static final String PUBLIC_KEY_FOOTER = "-----END PUBLIC KEY-----"; - - /** - * Extracts the Base64 encoded key material from a string based on header and footer. - */ - private Optional extractKeyMaterial(String content, String header, String footer) { - int start = content.indexOf(header); - if (start == -1) { - return Optional.empty(); - } - start += header.length(); - int end = content.indexOf(footer, start); - if (end == -1) { - System.err.println("Warning: Found header '" + header + "' but no matching footer."); - return Optional.empty(); - } + private static final BouncyCastleProvider BC_PROVIDER = new BouncyCastleProvider(); - String base64Content = content.substring(start, end); - String cleanedContent = base64Content.replaceAll("\\s+", ""); - if (cleanedContent.isEmpty()) { - System.err.println("Warning: No Base64 content between " + header + " and " + footer); - return Optional.empty(); + static { + if (Security.getProvider(BouncyCastleProvider.PROVIDER_NAME) == null) { + Security.addProvider(BC_PROVIDER); } - try { - return Optional.of(Base64.getDecoder().decode(cleanedContent)); - } catch (IllegalArgumentException e) { - System.err.println("Warning: Invalid Base64 encoding between " + header + " and " + footer); - return Optional.empty(); - } - } - - /** - * Loads a PrivateKey from decoded bytes. Handles PKCS#8. - */ - private PrivateKey loadPrivateKeyFromBytes(byte[] keyBytes) throws Exception { - KeyFactory keyFactory = KeyFactory.getInstance("RSA"); - PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(keyBytes); - return keyFactory.generatePrivate(keySpec); } - /** - * Loads a PublicKey from decoded bytes. Handles X.509. - */ - private PublicKey loadPublicKeyFromBytes(byte[] keyBytes) throws Exception { - KeyFactory keyFactory = KeyFactory.getInstance("RSA"); - X509EncodedKeySpec keySpec = new X509EncodedKeySpec(keyBytes); - return keyFactory.generatePublic(keySpec); - } - - /** - * Loads a PrivateKey from a PEM file path. - */ - private PrivateKey loadPrivateKey(Path path) throws Exception { - if (!Files.exists(path)) { - throw new IOException("Private key file not found: " + path); + private Object readPemObject(Path path) throws IOException { + if (!path.toFile().exists()) { + throw new IOException("Key file not found: " + path); } - String content = new String(Files.readAllBytes(path), StandardCharsets.UTF_8); - Optional keyBytes = extractKeyMaterial(content, PRIVATE_KEY_HEADER, PRIVATE_KEY_FOOTER); - boolean isPkcs1 = false; - - if (!keyBytes.isPresent()) { - keyBytes = extractKeyMaterial(content, RSA_PRIVATE_KEY_HEADER, RSA_PRIVATE_KEY_FOOTER); - isPkcs1 = true; - if (!keyBytes.isPresent()) { - throw new IllegalArgumentException("No private key block found in " + path); + try (FileReader fileReader = new FileReader(path.toFile()); + PEMParser pemParser = new PEMParser(fileReader)) { + Object object = pemParser.readObject(); + if (object == null) { + throw new IOException("No PEM object found in " + path); } + return object; } + } + + private PrivateKey loadPrivateKey(Path path) throws Exception { + Object pemObject = readPemObject(path); + JcaPEMKeyConverter converter = new JcaPEMKeyConverter().setProvider(BC_PROVIDER); + PrivateKey privateKey; try { - return loadPrivateKeyFromBytes(keyBytes.get()); - } catch (InvalidKeySpecException e) { - if (isPkcs1) { - throw new InvalidKeySpecException( - "Failed to load private key from " + path, e); + if (pemObject instanceof PEMKeyPair) { + privateKey = converter.getPrivateKey(((PEMKeyPair) pemObject).getPrivateKeyInfo()); + } else if (pemObject instanceof PrivateKeyInfo) { + privateKey = converter.getPrivateKey((PrivateKeyInfo) pemObject); + } else if (pemObject instanceof PKCS8EncryptedPrivateKeyInfo) { + throw new IllegalArgumentException("Private key in " + path.getFileName() + + " is encrypted. Please provide a decrypted key."); } else { - throw new InvalidKeySpecException("Failed to parse private key from " + path, e); + throw new IllegalArgumentException("Unsupported PEM object type for private key: " + + pemObject.getClass().getName()); } + } catch (Exception e) { + throw new Exception("Failed to convert PEM object to PrivateKey for " + path.getFileName() + + ": " + e.getMessage(), e); + } + + if (privateKey == null) { + throw new Exception("JcaPEMKeyConverter returned null private key from " + + path.getFileName()); } + return privateKey; } - /** - * Loads a PublicKey from a PEM file path. - */ private PublicKey loadPublicKey(Path path) throws Exception { - if (!Files.exists(path)) { - throw new IOException("Public key file not found: " + path); + Object pemObject = readPemObject(path); + JcaPEMKeyConverter converter = new JcaPEMKeyConverter().setProvider(BC_PROVIDER); + PublicKey publicKey; + + try { + if (pemObject instanceof SubjectPublicKeyInfo) { + publicKey = converter.getPublicKey((SubjectPublicKeyInfo) pemObject); + } else if (pemObject instanceof PEMKeyPair) { + publicKey = converter.getPublicKey(((PEMKeyPair) pemObject).getPublicKeyInfo()); + } else { + throw new IllegalArgumentException("Unsupported PEM object type for public key: " + + pemObject.getClass().getName()); + } + } catch (Exception e) { + throw new Exception("Failed to convert PEM object to PublicKey for " + path.getFileName() + + ": " + e.getMessage(), e); } - String content = new String(Files.readAllBytes(path), StandardCharsets.UTF_8); - Optional keyBytes = extractKeyMaterial(content, PUBLIC_KEY_HEADER, PUBLIC_KEY_FOOTER); - if (!keyBytes.isPresent()) { - throw new IllegalArgumentException("No public key block found in " + path); + if (publicKey == null) { + throw new Exception("JcaPEMKeyConverter returned null public key from " + path.getFileName()); } - return loadPublicKeyFromBytes(keyBytes.get()); + return publicKey; } - /** - * Performs the signature test to verify key match. - */ - private boolean checkKeyPairMatch(PrivateKey privateKey, PublicKey publicKey) throws Exception { + private boolean checkKeyPairMatch(PrivateKey privateKey, PublicKey publicKey, String keyAlgorithm) + throws Exception { + String signatureAlgorithm; + if ("RSA".equalsIgnoreCase(keyAlgorithm)) { + signatureAlgorithm = "SHA256withRSA"; + } else if ("EC".equalsIgnoreCase(keyAlgorithm)) { + signatureAlgorithm = "SHA256withECDSA"; + } else { + throw new IllegalArgumentException("Unsupported key algorithm for signature: " + + keyAlgorithm); + } + byte[] challenge = new byte[1024]; - Signature sig = Signature.getInstance("SHA256withRSA"); + Signature signature = Signature.getInstance(signatureAlgorithm, BC_PROVIDER); - sig.initSign(privateKey); - sig.update(challenge); - byte[] signature = sig.sign(); + signature.initSign(privateKey); + signature.update(challenge); + byte[] signatureInBytes = signature.sign(); - sig.initVerify(publicKey); - sig.update(challenge); - return sig.verify(signature); + signature.initVerify(publicKey); + signature.update(challenge); + boolean isValid = signature.verify(signatureInBytes); + return isValid; } - /** - * Checks if the private key and public key in SEPARATE PEM files form a valid pair. - * Accepts File objects. - * - * @param privateKeyFile File object for the private key PEM file. - * @param publicKeyFile File object for the public key PEM file. - * @return true if the keys match, false otherwise. - */ - public boolean keysMatch(File privateKeyFile, File publicKeyFile) { + public boolean keysMatch(File privateKeyFile, File publicKeyFile, String keyAlgorithm) { if (privateKeyFile == null || publicKeyFile == null) { - System.err.println("Error: File objects cannot be null."); return false; } - return keysMatch(privateKeyFile.toPath(), publicKeyFile.toPath()); + if (!("RSA".equalsIgnoreCase(keyAlgorithm) || "EC".equalsIgnoreCase(keyAlgorithm))) { + return false; + } + return keysMatch(privateKeyFile.toPath(), publicKeyFile.toPath(), keyAlgorithm.toUpperCase()); } - /** - * Internal helper to check keysMatch using Path objects. - */ - private boolean keysMatch(Path privateKeyPath, Path publicKeyPath) { + private boolean keysMatch(Path privateKeyPath, Path publicKeyPath, String keyAlgorithm) { try { PrivateKey privateKey = loadPrivateKey(privateKeyPath); PublicKey publicKey = loadPublicKey(publicKeyPath); - return checkKeyPairMatch(privateKey, publicKey); + + return checkKeyPairMatch(privateKey, publicKey, keyAlgorithm); } catch (Exception e) { - System.err.println("Error during key matching: " + e.getClass().getSimpleName() + " - " - + e.getMessage()); return false; } } From a40535d30fbad6ff3d384d05e583bf8c65269cee Mon Sep 17 00:00:00 2001 From: Nitish Jain Date: Fri, 12 Sep 2025 16:35:35 +0000 Subject: [PATCH 64/68] public/private key validation in registrar --- .../main/java/com/google/daq/mqtt/registrar/LocalDevice.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/validator/src/main/java/com/google/daq/mqtt/registrar/LocalDevice.java b/validator/src/main/java/com/google/daq/mqtt/registrar/LocalDevice.java index 79d538a312..37d4b5e80a 100644 --- a/validator/src/main/java/com/google/daq/mqtt/registrar/LocalDevice.java +++ b/validator/src/main/java/com/google/daq/mqtt/registrar/LocalDevice.java @@ -465,7 +465,7 @@ private void validateKeyPair() { } if (!keyValidator.keysMatch(privateKeyFile, publicKeyFile, keyAlgorithm)) { - throw new RuntimeException("CRITICAL: Key pair mismatch for " + publicKeyFile.getName() + + throw new RuntimeException("Key pair mismatch for " + publicKeyFile.getName() + " and " + privateKeyFile.getName()); } } catch (Exception e) { From 7514d2ddcdc299583dfac2ca6c48d1c60dcdb744 Mon Sep 17 00:00:00 2001 From: Nitish Jain Date: Sat, 13 Sep 2025 10:06:06 +0000 Subject: [PATCH 65/68] public/private key validation in registrar --- .../daq/mqtt/registrar/LocalDevice.java | 12 +++--- .../google/daq/mqtt/util/KeyValidator.java | 41 ++++++++++++------- 2 files changed, 33 insertions(+), 20 deletions(-) diff --git a/validator/src/main/java/com/google/daq/mqtt/registrar/LocalDevice.java b/validator/src/main/java/com/google/daq/mqtt/registrar/LocalDevice.java index 37d4b5e80a..53b18cca4b 100644 --- a/validator/src/main/java/com/google/daq/mqtt/registrar/LocalDevice.java +++ b/validator/src/main/java/com/google/daq/mqtt/registrar/LocalDevice.java @@ -454,19 +454,19 @@ private void validateKeyPair() { String publicKeyFileName = getPublicKeyFile(); if (publicKeyFileName == null) { - throw new RuntimeException("Private key " + privateKeyFile.getName() + - " found, but no public key is defined for auth_type " + authType); + throw new RuntimeException("Private key " + privateKeyFile.getName() + + " found, but no public key is defined for auth_type " + authType); } File publicKeyFile = new File(deviceDir, publicKeyFileName); if (!publicKeyFile.exists()) { - throw new RuntimeException("Private key " + privateKeyFile.getName() + - " found, but corresponding public key " + publicKeyFileName + " is missing."); + throw new RuntimeException("Private key " + privateKeyFile.getName() + + " found, but corresponding public key " + publicKeyFileName + " is missing."); } if (!keyValidator.keysMatch(privateKeyFile, publicKeyFile, keyAlgorithm)) { - throw new RuntimeException("Key pair mismatch for " + publicKeyFile.getName() + - " and " + privateKeyFile.getName()); + throw new RuntimeException("Key pair mismatch for " + publicKeyFile.getName() + + " and " + privateKeyFile.getName()); } } catch (Exception e) { captureError(ExceptionCategory.credentials, e); diff --git a/validator/src/main/java/com/google/daq/mqtt/util/KeyValidator.java b/validator/src/main/java/com/google/daq/mqtt/util/KeyValidator.java index 1e74618624..a90fd49fe7 100644 --- a/validator/src/main/java/com/google/daq/mqtt/util/KeyValidator.java +++ b/validator/src/main/java/com/google/daq/mqtt/util/KeyValidator.java @@ -16,6 +16,9 @@ import org.bouncycastle.openssl.jcajce.JcaPEMKeyConverter; import org.bouncycastle.pkcs.PKCS8EncryptedPrivateKeyInfo; +/** + * A helper class to validate cryptographic key pairs. + */ public class KeyValidator { private static final BouncyCastleProvider BC_PROVIDER = new BouncyCastleProvider(); @@ -51,20 +54,20 @@ private PrivateKey loadPrivateKey(Path path) throws Exception { } else if (pemObject instanceof PrivateKeyInfo) { privateKey = converter.getPrivateKey((PrivateKeyInfo) pemObject); } else if (pemObject instanceof PKCS8EncryptedPrivateKeyInfo) { - throw new IllegalArgumentException("Private key in " + path.getFileName() + - " is encrypted. Please provide a decrypted key."); + throw new IllegalArgumentException("Private key in " + path.getFileName() + + " is encrypted. Please provide a decrypted key."); } else { - throw new IllegalArgumentException("Unsupported PEM object type for private key: " + - pemObject.getClass().getName()); + throw new IllegalArgumentException("Unsupported PEM object type for private key: " + + pemObject.getClass().getName()); } } catch (Exception e) { - throw new Exception("Failed to convert PEM object to PrivateKey for " + path.getFileName() + - ": " + e.getMessage(), e); + throw new Exception("Failed to convert PEM object to PrivateKey for " + path.getFileName() + + ": " + e.getMessage(), e); } if (privateKey == null) { - throw new Exception("JcaPEMKeyConverter returned null private key from " + - path.getFileName()); + throw new Exception("JcaPEMKeyConverter returned null private key from " + + path.getFileName()); } return privateKey; } @@ -80,12 +83,12 @@ private PublicKey loadPublicKey(Path path) throws Exception { } else if (pemObject instanceof PEMKeyPair) { publicKey = converter.getPublicKey(((PEMKeyPair) pemObject).getPublicKeyInfo()); } else { - throw new IllegalArgumentException("Unsupported PEM object type for public key: " + - pemObject.getClass().getName()); + throw new IllegalArgumentException("Unsupported PEM object type for public key: " + + pemObject.getClass().getName()); } } catch (Exception e) { - throw new Exception("Failed to convert PEM object to PublicKey for " + path.getFileName() + - ": " + e.getMessage(), e); + throw new Exception("Failed to convert PEM object to PublicKey for " + path.getFileName() + + ": " + e.getMessage(), e); } if (publicKey == null) { @@ -102,8 +105,8 @@ private boolean checkKeyPairMatch(PrivateKey privateKey, PublicKey publicKey, St } else if ("EC".equalsIgnoreCase(keyAlgorithm)) { signatureAlgorithm = "SHA256withECDSA"; } else { - throw new IllegalArgumentException("Unsupported key algorithm for signature: " + - keyAlgorithm); + throw new IllegalArgumentException("Unsupported key algorithm for signature: " + + keyAlgorithm); } byte[] challenge = new byte[1024]; @@ -119,6 +122,16 @@ private boolean checkKeyPairMatch(PrivateKey privateKey, PublicKey publicKey, St return isValid; } + /** + * Checks if the provided private and public key files form a valid cryptographic pair + * for the specified key algorithm. + * + * @param privateKeyFile the {@link File} object for the private key PEM file. + * @param publicKeyFile the {@link File} object for the public key PEM file. + * @param keyAlgorithm the expected key algorithm, either "RSA" or "EC" (case-insensitive). + * @return {@code true} if the keys match and are valid for the algorithm, else {@code false}. + * Errors during loading or validation also result in {@code false}. + */ public boolean keysMatch(File privateKeyFile, File publicKeyFile, String keyAlgorithm) { if (privateKeyFile == null || publicKeyFile == null) { return false; From 39beb07008a8c66e7260548374d4126028d0c279 Mon Sep 17 00:00:00 2001 From: Nitish Jain Date: Sun, 14 Sep 2025 16:31:03 +0000 Subject: [PATCH 66/68] script for importing num_ids into site_model --- bin/update_site_num_ids | 157 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 157 insertions(+) create mode 100755 bin/update_site_num_ids diff --git a/bin/update_site_num_ids b/bin/update_site_num_ids new file mode 100755 index 0000000000..5a4c1bfde0 --- /dev/null +++ b/bin/update_site_num_ids @@ -0,0 +1,157 @@ +#!/bin/bash -e + +# This script automates the process of updating num_ids for a list of site models +# as requested in b/435662022. + +# --- USER ACTION REQUIRED --- +# The script will now prompt for the project specification. + +# Please populate this array with the list of your site models. +# For example: SITE_MODELS=("US-SVL-BRGUP1" "US-SVL-OTHER" "etc") +SITE_MODELS=(UK-LON-AVLAB) + +UDMI_ROOT=$(dirname $0)/.. +cd $UDMI_ROOT + +# ============================================================================== + +# Get the gcloud email address. +GCLOUD_EMAIL=$(gcloud config get-value account 2>/dev/null) + +if [ -z "$GCLOUD_EMAIL" ]; then + echo "Error: Could not get gcloud email address." + echo "Please make sure you are authenticated with gcloud ('gcloud auth login')." + exit 1 +fi + +echo "Using gcloud email: $GCLOUD_EMAIL" + +# Prompt user for the project specification. +read -p "Enter the project_spec (e.g., //gbos/bos-platform-prod or //gbos/bos-platform-dev/namespace): " project_spec + +# Validate the project_spec format and extract the project ID. +# The project ID is expected to be the component after "//gbos/". +if [[ ! "$project_spec" =~ ^//gbos/ ]]; then + echo "Error: project_spec must start with //gbos/" + exit 1 +fi + +# Extracts the part like 'bos-platform-prod' or 'bos-platform-dev' +project_id=$(echo "$project_spec" | cut -d'/' -f4) + +if [ -z "$project_id" ]; then + echo "Error: Could not extract project ID from project_spec '$project_spec'." + echo "Ensure it has at least one component after //gbos/ (e.g., //gbos/project-id)." + exit 1 +fi + +echo "Using Project ID: $project_id" + +# Check if the SITE_MODELS array is empty. +if [ ${#SITE_MODELS[@]} -eq 0 ]; then + echo "Please edit this script and populate the SITE_MODELS array with your site models." + exit 1 +fi + +# Loop through each site model provided in the array. +for site_model in "${SITE_MODELS[@]}"; do + echo "-----------------------------------------------------" + echo "Processing site model: $site_model" + echo "-----------------------------------------------------" + + SITE_PATH="$UDMI_ROOT/sites/$site_model" + + # Prepare a clean directory for the site model. + if [ -d "$SITE_PATH/.git" ]; then + echo "Repository exists. Cleaning and pulling latest changes." + ( + cd "$SITE_PATH" || exit + git reset --hard origin/main + git clean -fdx + git pull origin main + ) + else + echo "Repository not found. Cloning a new one." + rm -rf "$SITE_PATH" + GIT_CLONE_URL="ssh://${GCLOUD_EMAIL}@source.developers.google.com:2022/p/${project_id}/r/${site_model}" + git clone "$GIT_CLONE_URL" "$SITE_PATH" + fi + + # Create a new branch for this site model's changes + BRANCH_NAME="feat/import-numids-${site_model}-$(date +%s)" + ( + cd "$SITE_PATH" || exit + git checkout -b "$BRANCH_NAME" + ) + + DEVICES_PATH="$SITE_PATH/udmi/devices" + + if [ ! -d "$DEVICES_PATH" ]; then + echo " WARNING: Devices directory not found at '$DEVICES_PATH'. Skipping device-level operations." + continue + fi + + # Step A: Normalize metadata.json files in the devices directory. + echo "Normalizing metadata for $site_model..." + ( + cd "$DEVICES_PATH" || exit + for device in */; do + device_name=${device%/} + if [ -f "$device_name/metadata.json" ]; then + echo " Normalizing $device_name/metadata.json" + jq -S . "$device_name/metadata.json" | sponge "$device_name/metadata.json" + fi + done + ) + + # --- Commit and Push normalized files for Review --- + echo "Committing and pushing normalized files for $site_model..." + ( + cd "$SITE_PATH" || exit + git add . + git commit -m "Normalize metadata for $site_model" + ) + + # Step B: Run the registrar utility to update from IoT Core. + cd $UDMI_ROOT + echo "Running registrar for $site_model..." + "$UDMI_ROOT/bin/registrar" "$SITE_PATH/udmi" "$project_spec" -u + + # Step C: Update the num_id in metadata.json from the registrar's output. + echo "Updating num_id for $site_model..." + ( + cd "$DEVICES_PATH" || exit + for device in */; do + device_name=${device%/} + echo " Updating num_id for $device_name" + if [ -f "$device_name/out/metadata_norm.json" ]; then + id=$(jq .cloud.num_id "$device_name/out/metadata_norm.json") + jq -S ".cloud.num_id = $id" "$device_name/metadata.json" | sponge "$device_name/metadata.json" + else + echo " WARNING: metadata_norm.json not found for $device_name. Skipping num_id update." + fi + done + ) + + # Step D: Commit and Push the num_id changes to git for Review. + echo "Committing and pushing num_id changes for $site_model..." + ( + cd "$SITE_PATH" || exit + git add . + git commit -m "Import num_ids for site model $site_model" + ) + + # Push the new feature branch to the remote repository + echo "Pushing changes to new branch: $BRANCH_NAME" + ( + cd "$SITE_PATH" || exit + git push origin "$BRANCH_NAME" + ) + + + echo "Done processing $site_model." +done + +echo "=====================================================" +echo "All site models processed." +echo "=====================================================" \ No newline at end of file From 13ec5e5e77a36b7eb0f4e20dc7b41c8165890178 Mon Sep 17 00:00:00 2001 From: Nitish Jain Date: Sun, 14 Sep 2025 16:54:39 +0000 Subject: [PATCH 67/68] script for importing num_ids into site_model --- bin/update_site_num_ids | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bin/update_site_num_ids b/bin/update_site_num_ids index 5a4c1bfde0..cfb74c7140 100755 --- a/bin/update_site_num_ids +++ b/bin/update_site_num_ids @@ -8,7 +8,7 @@ # Please populate this array with the list of your site models. # For example: SITE_MODELS=("US-SVL-BRGUP1" "US-SVL-OTHER" "etc") -SITE_MODELS=(UK-LON-AVLAB) +SITE_MODELS=() UDMI_ROOT=$(dirname $0)/.. cd $UDMI_ROOT From 4df9f26c4fba85091383d2488655b08614ba938b Mon Sep 17 00:00:00 2001 From: Nitish Jain Date: Mon, 15 Sep 2025 13:23:45 +0000 Subject: [PATCH 68/68] removing the script --- bin/update_site_num_ids | 157 ---------------------------------------- 1 file changed, 157 deletions(-) delete mode 100755 bin/update_site_num_ids diff --git a/bin/update_site_num_ids b/bin/update_site_num_ids deleted file mode 100755 index cfb74c7140..0000000000 --- a/bin/update_site_num_ids +++ /dev/null @@ -1,157 +0,0 @@ -#!/bin/bash -e - -# This script automates the process of updating num_ids for a list of site models -# as requested in b/435662022. - -# --- USER ACTION REQUIRED --- -# The script will now prompt for the project specification. - -# Please populate this array with the list of your site models. -# For example: SITE_MODELS=("US-SVL-BRGUP1" "US-SVL-OTHER" "etc") -SITE_MODELS=() - -UDMI_ROOT=$(dirname $0)/.. -cd $UDMI_ROOT - -# ============================================================================== - -# Get the gcloud email address. -GCLOUD_EMAIL=$(gcloud config get-value account 2>/dev/null) - -if [ -z "$GCLOUD_EMAIL" ]; then - echo "Error: Could not get gcloud email address." - echo "Please make sure you are authenticated with gcloud ('gcloud auth login')." - exit 1 -fi - -echo "Using gcloud email: $GCLOUD_EMAIL" - -# Prompt user for the project specification. -read -p "Enter the project_spec (e.g., //gbos/bos-platform-prod or //gbos/bos-platform-dev/namespace): " project_spec - -# Validate the project_spec format and extract the project ID. -# The project ID is expected to be the component after "//gbos/". -if [[ ! "$project_spec" =~ ^//gbos/ ]]; then - echo "Error: project_spec must start with //gbos/" - exit 1 -fi - -# Extracts the part like 'bos-platform-prod' or 'bos-platform-dev' -project_id=$(echo "$project_spec" | cut -d'/' -f4) - -if [ -z "$project_id" ]; then - echo "Error: Could not extract project ID from project_spec '$project_spec'." - echo "Ensure it has at least one component after //gbos/ (e.g., //gbos/project-id)." - exit 1 -fi - -echo "Using Project ID: $project_id" - -# Check if the SITE_MODELS array is empty. -if [ ${#SITE_MODELS[@]} -eq 0 ]; then - echo "Please edit this script and populate the SITE_MODELS array with your site models." - exit 1 -fi - -# Loop through each site model provided in the array. -for site_model in "${SITE_MODELS[@]}"; do - echo "-----------------------------------------------------" - echo "Processing site model: $site_model" - echo "-----------------------------------------------------" - - SITE_PATH="$UDMI_ROOT/sites/$site_model" - - # Prepare a clean directory for the site model. - if [ -d "$SITE_PATH/.git" ]; then - echo "Repository exists. Cleaning and pulling latest changes." - ( - cd "$SITE_PATH" || exit - git reset --hard origin/main - git clean -fdx - git pull origin main - ) - else - echo "Repository not found. Cloning a new one." - rm -rf "$SITE_PATH" - GIT_CLONE_URL="ssh://${GCLOUD_EMAIL}@source.developers.google.com:2022/p/${project_id}/r/${site_model}" - git clone "$GIT_CLONE_URL" "$SITE_PATH" - fi - - # Create a new branch for this site model's changes - BRANCH_NAME="feat/import-numids-${site_model}-$(date +%s)" - ( - cd "$SITE_PATH" || exit - git checkout -b "$BRANCH_NAME" - ) - - DEVICES_PATH="$SITE_PATH/udmi/devices" - - if [ ! -d "$DEVICES_PATH" ]; then - echo " WARNING: Devices directory not found at '$DEVICES_PATH'. Skipping device-level operations." - continue - fi - - # Step A: Normalize metadata.json files in the devices directory. - echo "Normalizing metadata for $site_model..." - ( - cd "$DEVICES_PATH" || exit - for device in */; do - device_name=${device%/} - if [ -f "$device_name/metadata.json" ]; then - echo " Normalizing $device_name/metadata.json" - jq -S . "$device_name/metadata.json" | sponge "$device_name/metadata.json" - fi - done - ) - - # --- Commit and Push normalized files for Review --- - echo "Committing and pushing normalized files for $site_model..." - ( - cd "$SITE_PATH" || exit - git add . - git commit -m "Normalize metadata for $site_model" - ) - - # Step B: Run the registrar utility to update from IoT Core. - cd $UDMI_ROOT - echo "Running registrar for $site_model..." - "$UDMI_ROOT/bin/registrar" "$SITE_PATH/udmi" "$project_spec" -u - - # Step C: Update the num_id in metadata.json from the registrar's output. - echo "Updating num_id for $site_model..." - ( - cd "$DEVICES_PATH" || exit - for device in */; do - device_name=${device%/} - echo " Updating num_id for $device_name" - if [ -f "$device_name/out/metadata_norm.json" ]; then - id=$(jq .cloud.num_id "$device_name/out/metadata_norm.json") - jq -S ".cloud.num_id = $id" "$device_name/metadata.json" | sponge "$device_name/metadata.json" - else - echo " WARNING: metadata_norm.json not found for $device_name. Skipping num_id update." - fi - done - ) - - # Step D: Commit and Push the num_id changes to git for Review. - echo "Committing and pushing num_id changes for $site_model..." - ( - cd "$SITE_PATH" || exit - git add . - git commit -m "Import num_ids for site model $site_model" - ) - - # Push the new feature branch to the remote repository - echo "Pushing changes to new branch: $BRANCH_NAME" - ( - cd "$SITE_PATH" || exit - git push origin "$BRANCH_NAME" - ) - - - echo "Done processing $site_model." -done - -echo "=====================================================" -echo "All site models processed." -echo "=====================================================" \ No newline at end of file