Chapter | Assertions | Testable | Total Tested | Total Tests | Tested (problematic) |
Tested (working) |
Coverage % |
---|---|---|---|---|---|---|---|
1 Introduction | 8 | 8 | 8 | 8 | 0 | 8 | 100.00% |
2 Principles | 4 | 4 | 4 | 6 | 0 | 4 | 100.00% |
3 Sparkplug Architecture and Infrastructure Components | 1 | 1 | 1 | 1 | 0 | 1 | 100.00% |
4 Topics and Messages | 67 | 67 | 67 | 70 | 0 | 67 | 100.00% |
5 Operational Behavior | 100 | 99 | 99 | 118 | 0 | 99 | 100.00% |
6 Payloads | 108 | 108 | 108 | 124 | 0 | 108 | 100.00% |
7 Security | 0 | 0 | 0 | 0 | 0 | 0 | |
8 High Availability | 0 | 0 | 0 | 0 | 0 | 0 | |
9 Acknowledgements | 0 | 0 | 0 | 0 | 0 | 0 | |
10 Conformance | 12 | 12 | 12 | 13 | 0 | 12 | 100.00% |
11 Appendix A: Open Source Software (non-normative) | 0 | 0 | 0 | 0 | 0 | 0 | |
12 Appendix B: List of Normative Statements (non-normative) | 0 | 0 | 0 | 0 | 0 | 0 | |
Total | 300 | 299 | 299 | 340 | 0 | 299 | 100.00% |
Section | Assertions | Testable | Total Tested | Tested (problematic) | Tested (working) | Coverage % |
---|---|---|---|---|---|---|
1 Introduction [introduction] | 0 | 0 | 0 | 0 | 0 | |
1.1 Rationale and Use Case [introduction_rationale_and_use_case] | 0 | 0 | 0 | 0 | 0 | |
1.1.1 Define an MQTT Topic Namespace [introduction_define_an_mqtt_topic_namespace] | 0 | 0 | 0 | 0 | 0 | |
1.1.2 Define MQTT State Management [introduction_define_mqtt_state_management] | 0 | 0 | 0 | 0 | 0 | |
1.1.3 Define the MQTT Payload [introduction_define_the_mqtt_payload] | 0 | 0 | 0 | 0 | 0 | |
1.1.4 Background [introduction_background] | 0 | 0 | 0 | 0 | 0 | |
1.2 Intellectual Property Rights [introduction_intellectual_property_rights] | 0 | 0 | 0 | 0 | 0 | |
1.2.1 Eclipse Foundation Specification License [introduction_eclipse_foundation_specification_license] | 0 | 0 | 0 | 0 | 0 | |
1.2.2 Disclaimers [introduction_disclaimers] | 0 | 0 | 0 | 0 | 0 | |
1.3 Organization of the Sparkplug Specification [introduction_organization_of_the_sparkplug_specification] | 0 | 0 | 0 | 0 | 0 | |
1.4 Terminology [introduction_terminology] | 0 | 0 | 0 | 0 | 0 | |
1.4.1 Infrastructure Components [introduction_infrastructure_components] | 0 | 0 | 0 | 0 | 0 | |
1.4.1.1 MQTT Server(s) [introduction_mqtt_servers] | 0 | 0 | 0 | 0 | 0 | |
1.4.1.2 Sparkplug Group [introduction_sparkplug_group] | 0 | 0 | 0 | 0 | 0 | |
1.4.1.3 Sparkplug Edge Node [introduction_sparkplug_edge_node] | 0 | 0 | 0 | 0 | 0 | |
1.4.1.4 Sparkplug Device [introduction_sparkplug_device] | 0 | 0 | 0 | 0 | 0 | |
1.4.1.5 MQTT/Sparkplug Enabled Device [introduction_mqtt_sparkplug_enabled_device] | 0 | 0 | 0 | 0 | 0 | |
1.4.1.6 Host Applications [introduction_host_applications] | 1 | 1 | 1 | 0 | 1 | 100.00% |
1.4.1.7 Primary Host Application [introduction_primary_host_application] | 0 | 0 | 0 | 0 | 0 | |
1.4.1.8 Sparkplug Identifiers [introduction_sparkplug_ids] | 7 | 7 | 7 | 0 | 7 | 100.00% |
1.4.1.9 Sparkplug Metric [introduction_sparkplug_metrics] | 0 | 0 | 0 | 0 | 0 | |
1.4.1.10 Data Types [introduction_datatypes] | 0 | 0 | 0 | 0 | 0 | |
1.5 Normative References [introduction_normative_references] | 0 | 0 | 0 | 0 | 0 | |
1.6 Consolidated List of Normative Statements [introduction_list_normative_statements] | 0 | 0 | 0 | 0 | 0 | |
1.7 Security [introduction_security] | 0 | 0 | 0 | 0 | 0 | |
1.7.1 Authentication [introduction_authentication] | 0 | 0 | 0 | 0 | 0 | |
1.7.2 Authorization [introduction_autorization] | 0 | 0 | 0 | 0 | 0 | |
1.7.3 Encryption [introduction_encryption] | 0 | 0 | 0 | 0 | 0 | |
1.8 Normative Keywords [introduction_editing_convention] | 0 | 0 | 0 | 0 | 0 | |
1.9 Leveraging Standards and Open Source [introduction_leveragint_standards_and_open_source] | 0 | 0 | 0 | 0 | 0 | |
2 Principles [principles] | 0 | 0 | 0 | 0 | 0 | |
2.1 Pub/Sub [principles_pub_sub] | 0 | 0 | 0 | 0 | 0 | |
2.2 Report by Exception [principles_report_by_exception] | 1 | 1 | 1 | 0 | 1 | 100.00% |
2.3 Continuous Session Awareness [principles_continuous_session_awareness] | 0 | 0 | 0 | 0 | 0 | |
2.4 Birth and Death Certificates [principles_birth_and_death_certificates] | 1 | 1 | 1 | 0 | 1 | 100.00% |
2.5 Persistent vs Non-Persistent Connections for Edge Nodes [principles_persistent_vs_non_persistent_connections] | 2 | 2 | 2 | 0 | 2 | 100.00% |
3 Sparkplug Architecture and Infrastructure Components [components] | 0 | 0 | 0 | 0 | 0 | |
3.1 MQTT Server(s) [components_mqtt_servers] | 0 | 0 | 0 | 0 | 0 | |
3.2 MQTT Edge Node [components_mqtt_edge_node] | 0 | 0 | 0 | 0 | 0 | |
3.3 Device/Sensor [components_device_sensor] | 0 | 0 | 0 | 0 | 0 | |
3.4 MQTT Enabled Device (Sparkplug) [components_mqtt_enabled_device] | 0 | 0 | 0 | 0 | 0 | |
3.5 Primary Host Application [components_primary_host_application] | 0 | 0 | 0 | 0 | 0 | |
3.6 Sparkplug Host Application [components_sparkplug_host_application] | 1 | 1 | 1 | 0 | 1 | 100.00% |
4 Topics and Messages [topics] | 0 | 0 | 0 | 0 | 0 | |
4.1 Topic Namespace Elements [topics_sparkplug_topic_namespace_elements] | 1 | 1 | 1 | 0 | 1 | 100.00% |
4.1.1 namespace Element [topics_namespace_element] | 1 | 1 | 1 | 0 | 1 | 100.00% |
4.1.2 group_id Element [topics_group_id_element] | 1 | 1 | 1 | 0 | 1 | 100.00% |
4.1.3 message_type Element [topics_message_type_element] | 0 | 0 | 0 | 0 | 0 | |
4.1.4 edge_node_id Element [topics_edge_node_id_element] | 2 | 2 | 2 | 0 | 2 | 100.00% |
4.1.5 device_id Element [topics_device_id_element] | 5 | 5 | 5 | 0 | 5 | 100.00% |
4.2 Message Types and Contents [topics_message_type_overview] | 0 | 0 | 0 | 0 | 0 | |
4.2.1 Edge Node [topics_edge_node] | 0 | 0 | 0 | 0 | 0 | |
4.2.1.1 Birth Message (NBIRTH) [birth_message_nbirth] | 0 | 0 | 0 | 0 | 0 | |
4.2.1.1.1 Topic (NBIRTH) [topics_birth_message_nbirth] | 1 | 1 | 1 | 0 | 1 | 100.00% |
4.2.1.1.2 Payload (NBIRTH) [payloads_desc_nbirth] | 10 | 10 | 10 | 0 | 10 | 100.00% |
4.2.1.2 Data Message (NDATA) [data_message_ndata] | 0 | 0 | 0 | 0 | 0 | |
4.2.1.2.1 Topic (NDATA) [topics_data_message_ndata] | 1 | 1 | 1 | 0 | 1 | 100.00% |
4.2.1.2.2 Payload (NDATA) [payloads_desc_ndata] | 4 | 4 | 4 | 0 | 4 | 100.00% |
4.2.1.3 Death Message (NDEATH) [death_message_ndeath] | 0 | 0 | 0 | 0 | 0 | |
4.2.1.3.1 Topic (NDEATH) [topics_death_message_ndeath] | 1 | 1 | 1 | 0 | 1 | 100.00% |
4.2.1.3.2 Payload (NDEATH) [payloads_desc_ndeath] | 2 | 2 | 2 | 0 | 2 | 100.00% |
4.2.1.4 Command (NCMD) [command_ncmd] | 0 | 0 | 0 | 0 | 0 | |
4.2.1.4.1 Topic (NCMD) [topics_command_ncmd] | 1 | 1 | 1 | 0 | 1 | 100.00% |
4.2.1.4.2 Payload (NCMD) [payloads_desc_ncmd] | 3 | 3 | 3 | 0 | 3 | 100.00% |
4.2.2 Device/Sensor [topics_device_sensor] | 0 | 0 | 0 | 0 | 0 | |
4.2.2.1 Birth Message (DBIRTH) [birth_message_dbirth] | 0 | 0 | 0 | 0 | 0 | |
4.2.2.1.1 Topic (DBIRTH) [topics_birth_message_dbirth] | 1 | 1 | 1 | 0 | 1 | 100.00% |
4.2.2.1.2 Payload (DBIRTH) [payloads_desc_dbirth] | 5 | 5 | 5 | 0 | 5 | 100.00% |
4.2.2.2 Data Message (DDATA) [data_message_ddata] | 0 | 0 | 0 | 0 | 0 | |
4.2.2.2.1 Topic (DDATA) [topics_data_message_ddata] | 1 | 1 | 1 | 0 | 1 | 100.00% |
4.2.2.2.2 Payload (DDATA) [payloads_desc_ddata] | 4 | 4 | 4 | 0 | 4 | 100.00% |
4.2.2.3 Death Message (DDEATH) [death_message_ddeath] | 0 | 0 | 0 | 0 | 0 | |
4.2.2.3.1 Topic (DDEATH) [topics_death_message_ddeath] | 1 | 1 | 1 | 0 | 1 | 100.00% |
4.2.2.3.2 Payload (DDEATH) [payloads_desc_ddeath] | 2 | 2 | 2 | 0 | 2 | 100.00% |
4.2.2.4 Command (DCMD) [command_dcmd] | 0 | 0 | 0 | 0 | 0 | |
4.2.2.4.1 Topic DCMD) [topics_command_dcmd] | 1 | 1 | 1 | 0 | 1 | 100.00% |
4.2.2.4.2 Payload (DCMD) [payloads_desc_dcmd] | 3 | 3 | 3 | 0 | 3 | 100.00% |
4.2.3 Sparkplug Host Application [topics_sparkplug_host_application] | 0 | 0 | 0 | 0 | 0 | |
4.2.3.1 Birth Certificate Message (STATE) [birth_message_state] | 3 | 3 | 3 | 0 | 3 | 100.00% |
4.2.3.1.1 Birth Certificate Topic (STATE) [topics_birth_message_state] | 3 | 3 | 3 | 0 | 3 | 100.00% |
4.2.3.1.2 Birth Certificate Payload (STATE) [payloads_desc_state_birth] | 2 | 2 | 2 | 0 | 2 | 100.00% |
4.2.3.2 Death Certificate Message (STATE) [death_message_state] | 2 | 2 | 2 | 0 | 2 | 100.00% |
4.2.3.2.1 Death Certificate Topic (STATE) [topics_death_message_state] | 2 | 2 | 2 | 0 | 2 | 100.00% |
4.2.3.2.2 Death Certificate Payload (STATE) [payloads_desc_state_death] | 4 | 4 | 4 | 0 | 4 | 100.00% |
5 Operational Behavior [operational_behavior] | 0 | 0 | 0 | 0 | 0 | |
5.1 Timestamps in Sparkplug [operational_behavior_timestamps] | 0 | 0 | 0 | 0 | 0 | |
5.2 Case Sensitivity in Sparkplug [operational_behavior_case_sensitivity] | 2 | 2 | 2 | 0 | 2 | 100.00% |
5.3 Host Application Session Establishment [operational_behavior_primary_host_application_session_establishment] | 8 | 7 | 7 | 0 | 7 | 100.00% |
5.4 Edge Node Session Establishment [operational_behavior_edge_node_session_establishment] | 19 | 19 | 19 | 0 | 19 | 100.00% |
5.5 Edge Node Session Termination [operational_behavior_edge_node_session_termination] | 9 | 9 | 9 | 0 | 9 | 100.00% |
5.6 Device Session Establishment [operational_behavior_device_session_establishment] | 8 | 8 | 8 | 0 | 8 | 100.00% |
5.7 Device Session Termination [operational_behavior_device_session_termination] | 3 | 3 | 3 | 0 | 3 | 100.00% |
5.8 Sparkplug Host Applications [operational_behavior_sparkplug_host_applications] | 0 | 0 | 0 | 0 | 0 | |
5.9 Sparkplug Host Application Message Ordering [operational_behavior_host_application_message_ordering] | 4 | 4 | 4 | 0 | 4 | 100.00% |
5.10 Primary Host Application STATE in Multiple MQTT Server Topologies [operational_behavior_primary_application_state_in_multiple_mqtt_server_topologies] | 5 | 5 | 5 | 0 | 5 | 100.00% |
5.11 Edge Node NDATA and NCMD Messages [operational_behavior_edge_node_ndata_and_ncmd_messages] | 0 | 0 | 0 | 0 | 0 | |
5.12 MQTT Enabled Device Session Establishment [operational_behavior_mqtt_enabled_device_session_establishment] | 0 | 0 | 0 | 0 | 0 | |
5.13 Sparkplug Host Application Session Establishment [operational_behavior_sparkplug_host_application_session_establishment] | 12 | 12 | 12 | 0 | 12 | 100.00% |
5.14 Sparkplug Host Application Session Termination [operational_behavior_sparkplug_host_application_session_termination] | 6 | 6 | 6 | 0 | 6 | 100.00% |
5.15 Sparkplug Host Application Receive Data [operational_behavior_sparkplug_host_application_receive_data] | 0 | 0 | 0 | 0 | 0 | |
5.16 Data Publish [operational_behavior_data_publish] | 8 | 8 | 8 | 0 | 8 | 100.00% |
5.17 Commands [operational_behavior_commands] | 16 | 16 | 16 | 0 | 16 | 100.00% |
6 Payloads [payloads] | 0 | 0 | 0 | 0 | 0 | |
6.1 Overview [payloads_overview] | 0 | 0 | 0 | 0 | 0 | |
6.2 Google Protocol Buffers [payloads_google_protocol_buffers] | 0 | 0 | 0 | 0 | 0 | |
6.3 Sparkplug A MQTT Payload Definition [payloads_sparkplug_a_mqtt_payload_definition] | 0 | 0 | 0 | 0 | 0 | |
6.4 Sparkplug B MQTT Payload Definition [payloads_sparkplug_b_mqtt_payload_definition] | 0 | 0 | 0 | 0 | 0 | |
6.4.1 Google Protocol Buffer Schema [payloads_b_google_protocol_buffer_schema] | 0 | 0 | 0 | 0 | 0 | |
6.4.2 Payload Metric Naming Convention [payloads_b_payload_metric_naming_convention] | 0 | 0 | 0 | 0 | 0 | |
6.4.3 Sparkplug B v1.0 Payload Components [payloads_b_sparkplug_bv1_0_payload_components] | 0 | 0 | 0 | 0 | 0 | |
6.4.4 Payload Component Definitions [payloads_b_payload_component_definitions] | 0 | 0 | 0 | 0 | 0 | |
6.4.5 Payload [payloads_b_payload] | 4 | 4 | 4 | 0 | 4 | 100.00% |
6.4.6 Metric [payloads_b_metric] | 11 | 11 | 11 | 0 | 11 | 100.00% |
6.4.7 MetaData [payloads_b_metadata] | 0 | 0 | 0 | 0 | 0 | |
6.4.8 PropertySet [payloads_b_propertyset] | 2 | 2 | 2 | 0 | 2 | 100.00% |
6.4.9 PropertyValue [payloads_b_propertyvalue] | 3 | 3 | 3 | 0 | 3 | 100.00% |
6.4.9.1 Quality Codes [payloads_b_quality_codes] | 2 | 2 | 2 | 0 | 2 | 100.00% |
6.4.10 PropertySetList [payloads_b_propertysetlist] | 0 | 0 | 0 | 0 | 0 | |
6.4.11 DataSet [payloads_b_dataset] | 7 | 7 | 7 | 0 | 7 | 100.00% |
6.4.12 DataSet.Row [payloads_b_dataset_row] | 0 | 0 | 0 | 0 | 0 | |
6.4.13 DataSet.DataSetValue [payloads_b_dataset_datasetvalue] | 1 | 1 | 1 | 0 | 1 | 100.00% |
6.4.14 Template [payloads_b_template] | 19 | 19 | 19 | 0 | 19 | 100.00% |
6.4.15 Template.Parameter [payloads_b_template_parameter] | 6 | 6 | 6 | 0 | 6 | 100.00% |
6.4.16 Data Types [payloads_b_datatypes] | 0 | 0 | 0 | 0 | 0 | |
6.4.17 Datatype Details [payloads_b_datatype_details] | 0 | 0 | 0 | 0 | 0 | |
6.4.18 Payload Representation on Host Applications [payloads_payload_representation_on_host_applications] | 0 | 0 | 0 | 0 | 0 | |
6.4.19 NBIRTH [payloads_b_nbirth] | 8 | 8 | 8 | 0 | 8 | 100.00% |
6.4.20 DBIRTH [payloads_b_dbirth] | 6 | 6 | 6 | 0 | 6 | 100.00% |
6.4.21 NDATA [payloads_b_ndata] | 6 | 6 | 6 | 0 | 6 | 100.00% |
6.4.22 DDATA [payloads_b_ddata] | 6 | 6 | 6 | 0 | 6 | 100.00% |
6.4.23 NCMD [payloads_b_ncmd] | 4 | 4 | 4 | 0 | 4 | 100.00% |
6.4.24 DCMD [payloads_b_dcmd] | 4 | 4 | 4 | 0 | 4 | 100.00% |
6.4.25 NDEATH [payloads_b_ndeath] | 8 | 8 | 8 | 0 | 8 | 100.00% |
6.4.26 DDEATH [payloads_b_ddeath] | 4 | 4 | 4 | 0 | 4 | 100.00% |
6.4.27 STATE [payloads_b_state] | 7 | 7 | 7 | 0 | 7 | 100.00% |
7 Security [security] | 0 | 0 | 0 | 0 | 0 | |
7.1 TLS [security_tls] | 0 | 0 | 0 | 0 | 0 | |
7.2 Authentication [security_authentication] | 0 | 0 | 0 | 0 | 0 | |
7.3 Authorization [security_authorization] | 0 | 0 | 0 | 0 | 0 | |
7.4 Implementation Notes [security_implementation_notes] | 0 | 0 | 0 | 0 | 0 | |
7.4.1 Underlying MQTT Security [security_implementation_notes_mqtt] | 0 | 0 | 0 | 0 | 0 | |
7.4.2 Encrypted Sockets [security_implementation_notes_encryption] | 0 | 0 | 0 | 0 | 0 | |
7.4.3 Access Control Lists [security_implementation_notes_acls] | 0 | 0 | 0 | 0 | 0 | |
8 High Availability [high_availability] | 0 | 0 | 0 | 0 | 0 | |
8.1 High Availability for MQTT Servers [high_availability_for_mqtt_servers] | 0 | 0 | 0 | 0 | 0 | |
8.1.1 MQTT Server HA Clustering (non-normative) [high_availability_ha_clusters] | 0 | 0 | 0 | 0 | 0 | |
8.1.2 High Availability Cluster [high_availability_cluster] | 0 | 0 | 0 | 0 | 0 | |
8.1.3 High Availability Cluster with Load Balancer [high_availability_cluster_with_load_balancer] | 0 | 0 | 0 | 0 | 0 | |
8.2 Multiple Isolated MQTT Servers (non-normative) [high_availability_multiple_mqtt_server_topology] | 0 | 0 | 0 | 0 | 0 | |
9 Acknowledgements [acknowledgements] | 0 | 0 | 0 | 0 | 0 | |
10 Conformance [conformance] | 0 | 0 | 0 | 0 | 0 | |
10.1 Conformance Profiles [conformance_profiles] | 0 | 0 | 0 | 0 | 0 | |
10.1.1 Sparkplug Edge Node [conformance_sparkplug_edge_node] | 0 | 0 | 0 | 0 | 0 | |
10.1.2 Sparkplug Host Application [conformance_sparkplug_host_application] | 1 | 1 | 1 | 0 | 1 | 100.00% |
10.1.3 Sparkplug Compliant MQTT Server [conformance_mqtt_server] | 4 | 4 | 4 | 0 | 4 | 100.00% |
10.1.4 Sparkplug Aware MQTT Server [conformance_sparkplug_aware_mqtt_server] | 7 | 7 | 7 | 0 | 7 | 100.00% |
11 Appendix A: Open Source Software (non-normative) [appendix_a] | 0 | 0 | 0 | 0 | 0 | |
11.1 OASIS MQTT Specifications [introduction_oasis_mqtt_specification] | 0 | 0 | 0 | 0 | 0 | |
11.2 Eclipse Foundation IoT Resources [introduction_eclipse_foundation_iot_resources] | 0 | 0 | 0 | 0 | 0 | |
11.3 Eclipse Paho [introduction_eclipse_paho] | 0 | 0 | 0 | 0 | 0 | |
11.4 Google Protocol Buffers [introduction_google_protocol_buffers] | 0 | 0 | 0 | 0 | 0 | |
11.5 Eclipse Kura Google Protocol Buffer Schema [introduction_eclipse_kura_schema] | 0 | 0 | 0 | 0 | 0 | |
11.6 Raspberry Pi Hardware [introduction_raspberry_pi] | 0 | 0 | 0 | 0 | 0 | |
12 Appendix B: List of Normative Statements (non-normative) [appendix_b] | 0 | 0 | 0 | 0 | 0 |
Colour Key |
---|
Assertion is covered |
Assertion is not covered |
Assertion test is unimplemented |
Assertion is untestable |
[tck-id-intro-sparkplug-host-state] Sparkplug Host Applications MUST publish STATE messages denoting their online and offline status.
Coverage
[tck-id-intro-group-id-string] The Group ID MUST be a UTF-8 string and used as part of the Sparkplug topics as defined in the Topics Section.
Coverage
[tck-id-intro-group-id-chars] Because the Group ID is used in MQTT topic strings the Group ID MUST only contain characters allowed for MQTT topics per the MQTT Specification.
Coverage
[tck-id-intro-edge-node-id-string] The Edge Node ID MUST be a UTF-8 string and used as part of the Sparkplug topics as defined in the Topics Section.
Coverage
[tck-id-intro-edge-node-id-chars] Because the Edge Node ID is used in MQTT topic strings the Edge Node ID MUST only contain characters allowed for MQTT topics per the MQTT Specification.
Coverage
[tck-id-intro-device-id-string] The Device ID MUST be a UTF-8 string and used as part of the Sparkplug topics as defined in the Topics Section.
Coverage
[tck-id-intro-device-id-chars] Because the Device ID is used in MQTT topic strings the Device ID MUST only contain characters allowed for MQTT topics per the MQTT Specification.
Coverage
[tck-id-intro-edge-node-id-uniqueness] The Edge Node Descriptor MUST be unique within the context of all of other Edge Nodes within the Sparkplug infrastructure.
Coverage
[tck-id-principles-rbe-recommended] Because of the stateful nature of Sparkplug sessions, data SHOULD NOT be published from Edge Nodes on a periodic basis and instead SHOULD be published using a RBE based approach.
Coverage
[tck-id-principles-birth-certificates-order] Birth Certificates MUST be the first MQTT messages published by any Edge Node or any Host Application.
Coverage
[tck-id-principles-persistence-clean-session-311] If the MQTT client is using MQTT v3.1.1, the Edge Node's MQTT CONNECT packet MUST set the 'Clean Session' flag to true.
Coverage
[tck-id-principles-persistence-clean-session-50] If the MQTT client is using MQTT v5.0, the Edge Node's MQTT CONNECT packet MUST set the 'Clean Start' flag to true and the 'Session Expiry Interval' to 0.
Coverage
[tck-id-components-ph-state] A Sparkplug Host Application MUST utilize the STATE messages to denote whether it is online or offline at any given point in time.
Coverage
[tck-id-topic-structure] All MQTT clients using the Sparkplug specification MUST use the following topic namespace structure
Coverage
[tck-id-topic-structure-namespace-a] For the Sparkplug B version of the payload definition, the UTF-8 string constant for the namespace element MUST be
Coverage
[tck-id-topic-structure-namespace-valid-group-id] The format of the Group ID MUST be a valid UTF-8 string with the exception of the reserved characters of + (plus), / (forward slash), and # (number sign).
Coverage
[tck-id-topic-structure-namespace-unique-edge-node-descriptor] The groupid combined with the edgenodeid element MUST be unique from any other groupid/edgenodeid assigned in the MQTT infrastructure.
Coverage
[tck-id-topic-structure-namespace-valid-edge-node-id] The format of the edgenodeid MUST be a valid UTF-8 string with the exception of the reserved characters of + (plus), / (forward slash), and # (number sign).
Coverage
[tck-id-topic-structure-namespace-valid-device-id] The format of the device_id MUST be a valid UTF-8 string except for the reserved characters of + (plus), / (forward slash), and # (number sign).
Coverage
[tck-id-topic-structure-namespace-unique-device-id] The device_id MUST be unique from other devices being reported on by the same Edge Node.
Coverage
[tck-id-topic-structure-namespace-duplicate-device-id-across-edge-node] The device_id MAY be duplicated from Edge Node to other Edge Nodes.
Coverage
[tck-id-topic-structure-namespace-device-id-associated-message-types] The deviceid MUST be included with messagetype elements DBIRTH, DDEATH, DDATA, and DCMD based topics.
Coverage
[tck-id-topic-structure-namespace-device-id-non-associated-message-types] The deviceid MUST NOT be included with messagetype elements NBIRTH, NDEATH, NDATA, NCMD, and STATE based topics
Coverage
[tck-id-topics-nbirth-topic] The Birth Certificate topic for a Sparkplug Edge Node MUST be of the form 'namespace/groupid/NBIRTH/edgenodeid' where the namespace is replaced with the specific namespace for this version of Sparkplug and the groupid and edgenodeid are replaced with the Group and Edge Node ID for this specific Edge Node.
Coverage
[tck-id-topics-nbirth-mqtt] NBIRTH messages MUST be published with MQTT QoS equal to 0 and retain equal to false.
Coverage
[tck-id-topics-nbirth-seq-num] The NBIRTH MUST include a sequence number in the payload and it MUST have a value of 0.
Coverage
[tck-id-topics-nbirth-timestamp] The NBIRTH MUST include a timestamp denoting the date and time the message was sent from the Edge Node.
Coverage
[tck-id-topics-nbirth-metric-reqs] The NBIRTH MUST include every metric the Edge Node will ever report on.
Coverage
[tck-id-topics-nbirth-metrics] At a minimum each metric MUST include the metric name, datatype, and current value.
Coverage
[tck-id-topics-nbirth-templates] If Template instances will be published by this Edge Node or any devices, all Template definitions MUST be published in the NBIRTH.
Coverage
[tck-id-topics-nbirth-bdseq-included] A bdSeq number as a metric MUST be included in the payload.
Coverage
[tck-id-topics-nbirth-bdseq-matching] This MUST match the bdSeq number provided in the MQTT CONNECT packet's Will Message payload.
Coverage
[tck-id-topics-nbirth-bdseq-increment] The bdSeq number MUST start at zero and increment by one on every new MQTT CONNECT packet.
Coverage
[tck-id-topics-nbirth-rebirth-metric] The NBIRTH message MUST include a metric with the name 'Node Control/Rebirth'. It MUST be of datatype boolean and have a value of false.
Coverage
[tck-id-topics-ndata-topic] The Edge Node data topic for a Sparkplug Edge Node MUST be of the form 'namespace/groupid/NDATA/edgenodeid' where the namespace is replaced with the specific namespace for this version of Sparkplug and the groupid and edgenodeid are replaced with the Group and Edge Node ID for this specific Edge Node.
Coverage
[tck-id-topics-ndata-mqtt] NDATA messages MUST be published with MQTT QoS equal to 0 and retain equal to false.
Coverage
[tck-id-topics-ndata-seq-num] The NDATA MUST include a sequence number in the payload and it MUST have a value of one greater than the previous MQTT message from the Edge Node contained unless the previous MQTT message contained a value of 255. In this case the sequence number MUST be 0.
Coverage
[tck-id-topics-ndata-timestamp] The NDATA MUST include a timestamp denoting the date and time the message was sent from the Edge Node.
Coverage
[tck-id-topics-ndata-payload] The NDATA MUST include the Edge Node's metrics that have changed since the last NBIRTH or NDATA message.
Coverage
[tck-id-topics-ndeath-topic] The Edge Node Death Certificate topic for a Sparkplug Edge Node MUST be of the form 'namespace/groupid/NDEATH/edgenodeid' where the namespace is replaced with the specific namespace for this version of Sparkplug and the groupid and edgenodeid are replaced with the Group and Edge Node ID for this specific Edge Node.
Coverage
[tck-id-topics-ndeath-payload] The NDEATH message contains a very simple payload that MUST only include a single metric, the bdSeq number, so that the NDEATH event can be associated with the NBIRTH.
Coverage
[tck-id-topics-ndeath-seq] The NDEATH message MUST NOT include a sequence number.
Coverage
[tck-id-topics-ncmd-topic] The Edge Node command topic for a Sparkplug Edge Node MUST be of the form 'namespace/groupid/NCMD/edgenodeid' where the namespace is replaced with the specific namespace for this version of Sparkplug and the groupid and edgenodeid are replaced with the Group and Edge Node ID for this specific Edge Node.
Coverage
[tck-id-topics-ncmd-mqtt] NCMD messages MUST be published with MQTT QoS equal to 0 and retain equal to false.
Coverage
[tck-id-topics-ncmd-timestamp] The NCMD MUST include a timestamp denoting the date and time the message was sent from the Host Application's MQTT client.
Coverage
[tck-id-topics-ncmd-payload] The NCMD MUST include the metrics that need to be written to on the Edge Node.
Coverage
[tck-id-topics-dbirth-topic] The Device Birth topic for a Sparkplug Device MUST be of the form 'namespace/groupid/DBIRTH/edgenodeid/deviceid' where the namespace is replaced with the specific namespace for this version of Sparkplug and the groupid, edgenodeid, and deviceid are replaced with the Group, Edge Node, and Device ID for this specific Device.
Coverage
[tck-id-topics-dbirth-mqtt] DBIRTH messages MUST be published with MQTT QoS equal to 0 and retain equal to false.
Coverage
[tck-id-topics-dbirth-seq] The DBIRTH MUST include a sequence number in the payload and it MUST have a value of one greater than the previous MQTT message from the Edge Node contained unless the previous MQTT message contained a value of 255. In this case the sequence number MUST be 0.
Coverage
[tck-id-topics-dbirth-timestamp] The DBIRTH MUST include a timestamp denoting the date and time the message was sent from the Edge Node.
Coverage
[tck-id-topics-dbirth-metric-reqs] The DBIRTH MUST include every metric the Edge Node will ever report on.
Coverage
[tck-id-topics-dbirth-metrics] At a minimum each metric MUST include the metric name, metric datatype, and current value.
Coverage
[tck-id-topics-ddata-topic] The Device command topic for a Sparkplug Device MUST be of the form 'namespace/groupid/DDATA/edgenodeid/deviceid' where the namespace is replaced with the specific namespace for this version of Sparkplug and the groupid, edgenodeid, and deviceid are replaced with the Group, Edge Node, and Device ID for this specific Device.
Coverage
[tck-id-topics-ddata-mqtt] DDATA messages MUST be published with MQTT QoS equal to 0 and retain equal to false.
Coverage
[tck-id-topics-ddata-seq-num] The DDATA MUST include a sequence number in the payload and it MUST have a value of one greater than the previous MQTT message from the Edge Node contained unless the previous MQTT message contained a value of 255. In this case the sequence number MUST be 0.
Coverage
[tck-id-topics-ddata-timestamp] The DDATA MUST include a timestamp denoting the date and time the message was sent from the Edge Node.
Coverage
[tck-id-topics-ddata-payload] The DDATA MUST include the Device's metrics that have changed since the last DBIRTH or DDATA message.
Coverage
[tck-id-topics-ddeath-topic] The Device Death Certificate topic for a Sparkplug Device MUST be of the form 'namespace/groupid/DDEATH/edgenodeid/deviceid' where the namespace is replaced with the specific namespace for this version of Sparkplug and the groupid, edgenodeid, and deviceid are replaced with the Group, Edge Node, and Device ID for this specific Device.
Coverage
[tck-id-topics-ddeath-mqtt] DDEATH messages MUST be published with MQTT QoS equal to 0 and retain equal to false.
Coverage
[tck-id-topics-ddeath-seq-num] The DDEATH MUST include a sequence number in the payload and it MUST have a value of one greater than the previous MQTT message from the Edge Node contained unless the previous MQTT message contained a value of 255. In this case the sequence number MUST be 0.
Coverage
[tck-id-topics-dcmd-topic] The Device command topic for a Sparkplug Device MUST be of the form 'namespace/groupid/DCMD/edgenodeid/deviceid' where the namespace is replaced with the specific namespace for this version of Sparkplug and the groupid, edgenodeid, and deviceid are replaced with the Group, Edge Node, and Device ID for this specific Device.
Coverage
[tck-id-topics-dcmd-mqtt] DCMD messages MUST be published with MQTT QoS equal to 0 and retain equal to false.
Coverage
[tck-id-topics-dcmd-timestamp] The DCMD MUST include a timestamp denoting the date and time the message was sent from the Host Application's MQTT client.
Coverage
[tck-id-topics-dcmd-payload] The DCMD MUST include the metrics that need to be written to on the Device.
Coverage
[tck-id-host-topic-phid-birth-message] The first MQTT message a Host Application MUST publish is a Birth Certificate.
Coverage
[tck-id-host-topic-phid-birth-qos] The MQTT Quality of Service (QoS) MUST be set to 1
Coverage
[tck-id-host-topic-phid-birth-retain] The MQTT retain flag for the Birth Certificate MUST be set to TRUE
Coverage
[tck-id-host-topic-phid-birth-topic] The Sparkplug Host Application Birth topic MUST be of the form spBv1.0/STATE/sparkplughostid where the sparkplughostid must be replaced with the specific Spakrplug Host ID of this Sparkplug Host Application.
Coverage
[tck-id-host-topic-phid-birth-sub-required] The Sparkplug Host Application MUST subscribe to its own spBv1.0/STATE/sparkplughostid and the appropriate spBv1.0 topic(s) immediately after successfully connecting to the MQTT Server.
Coverage
[tck-id-host-topic-phid-birth-required] The Sparkplug Host Application MUST publish a Sparkplug Host Application BIRTH message to the MQTT Server immediately after successfully subscribing its own spBv1.0/STATE/sparkplughostid topic.
Coverage
[tck-id-host-topic-phid-birth-payload] The Birth Certificate Payload MUST be JSON UTF-8 data. It MUST include two key/value pairs where the one key MUST be 'online' and it's value is a boolean 'true'. The other key MUST be 'timestamp' and the value MUST be a numeric value representing the current UTC time in milliseconds since Epoch.
Coverage
[tck-id-host-topic-phid-birth-payload-timestamp] The timestamp metric value MUST be the same timestamp value set in the immediately prior MQTT CONNECT packet's Will Message payload.
Coverage
[tck-id-host-topic-phid-death-qos] The MQTT Quality of Service (QoS) MUST be set to 1
Coverage
[tck-id-host-topic-phid-death-retain] The MQTT retain flag for the Birth Certificate MUST be set to TRUE
Coverage
[tck-id-host-topic-phid-death-topic] The Sparkplug Host Application Death topic MUST be of the form spBv1.0/STATE/sparkplughostid where the sparkplughostid must be replaced with the specific Sparkplug Host ID of this Sparkplug Host Application.
Coverage
[tck-id-host-topic-phid-death-required] The Sparkplug Host Application MUST provide a Will message in the MQTT CONNECT packet
Coverage
[tck-id-host-topic-phid-death-payload] The STATE Death Certificate Payload MUST be JSON UTF-8 data. It MUST include two key/value pairs where one key MUST be 'online' and it's value is a boolean 'false'. The other key MUST be 'timestamp' and the value MUST be a numeric value representing the current UTC time in milliseconds since Epoch.
Coverage
[tck-id-host-topic-phid-death-payload-connect] The Death Certificate's used in the MQTT CONNECT packet Will message MUST use a timestamp value that represents the current UTC time at the time of the CONNECT packet is sent to the MQTT Server.
Coverage
[tck-id-host-topic-phid-death-payload-disconnect-clean] If a Host Application is disconnecting cleanly using MQTT DISCONNECT packet, the Host Application MUST publish a Death Certificate payload before sending the MQTT DISCONNECT packet with the timestamp set to the current UTC time the disconnect is occurring.
Coverage
[tck-id-host-topic-phid-death-payload-disconnect-with-no-disconnect-packet] If a Host Application is disconnecting and not using an MQTT DISCONNECT packet, the Host Application MUST publish a Death Certificate payload before terminating the MQTT connection with the timestamp set to the current UTC time the disconnect is occurring.
Coverage
[tck-id-case-sensitivity-sparkplug-ids] Edge Nodes in a Sparkplug environment SHOULD NOT have Sparkplug IDs (Group, Edge Node, or Device IDs) that when converted to lower case match
Coverage
[tck-id-case-sensitivity-metric-names] An Edge Node SHOULD NOT publish metric names that when converted to all lower case match.
Coverage
[tck-id-message-flow-phid-sparkplug-clean-session-311] The CONNECT Control Packet for all Sparkplug Host Applications when using MQTT 3.1.1 MUST set the MQTT 'Clean Session' flag to true.
Coverage
[tck-id-message-flow-phid-sparkplug-clean-session-50] The CONNECT Control Packet for all Sparkplug Host Applications when using MQTT 5.0 MUST set the the MQTT 'Clean Start' flag to true and the 'Session Expiry Interval' to 0.
Coverage
[tck-id-message-flow-phid-sparkplug-subscription] The subscription on the Sparkplug Topic Namespace and the STATE topic MUST be done immediately after successfully establishing the MQTT session and before publishing its own STATE message.
Coverage
[tck-id-message-flow-phid-sparkplug-state-publish] Once an MQTT Session has been established, the Sparkplug Host Application subscriptions on the Sparkplug Topic Namespace have been established and the STATE topic subscription has been established, the Sparkplug Host Application MUST publish a new STATE message.
Coverage
[tck-id-message-flow-phid-sparkplug-state-publish-payload] The Host Application Birth Certificate Payload MUST be JSON UTF-8 data. It MUST include two key/value pairs where one key MUST be 'online' and its value is a boolean 'true'. The other key MUST be 'timestamp' and the value MUST be the same value set in the immediately prior MQTT CONNECT packet's Will Message payload.
Coverage
[tck-id-message-flow-phid-sparkplug-state-publish-payload-timestamp] The timestamp value in the Host Application Birth Certificate payload MUST be the same value set in the immediately prior MQTT CONNECT packet's Will Message payload.
Coverage
All metric data associated with any Sparkplug Edge Node that was connected to that MQTT Server and known by the Host Application MUST be updated to a STALE data quality if the Host Application loses connection to the MQTT Server.
[tck-id-message-flow-hid-sparkplug-state-message-delivered] After publishing its own Host Application STATE message, if at any point the Host Application is delivered a STATE message on its own Host Application ID with a 'online' value of false, it MUST immediately republish its STATE message to the same MQTT Server with a 'online' value of true and the 'timestamp' set to the same value that was used for the timestamp in its own prior MQTT CONNECT packet Will Message payload.
Coverage
[tck-id-message-flow-edge-node-ncmd-subscribe] The MQTT client associated with the Edge Node MUST subscribe to a topic of the form 'spBv1.0/groupid/NCMD/edgenodeid' where groupid is the Sparkplug Group ID and the edgenodeid is the Sparkplug Edge Node ID for this Edge Node. It MUST subscribe on this topic with a QoS of 1.
Coverage
[tck-id-message-flow-edge-node-birth-publish-connect] Any Edge Node in the MQTT infrastructure MUST establish an MQTT Session prior to publishing NBIRTH and DBIRTH messages.
Coverage
[tck-id-message-flow-edge-node-birth-publish-will-message] When a Sparkplug Edge Node sends its MQTT CONNECT packet, it MUST include a Will Message.
Coverage
[tck-id-message-flow-edge-node-birth-publish-will-message-topic] The Edge Node's MQTT Will Message's topic MUST be of the form 'spBv1.0/groupid/NDEATH/edgenodeid' where groupid is the Sparkplug Group ID and the edgenodeid is the Sparkplug Edge Node ID for this Edge Node
Coverage
[tck-id-message-flow-edge-node-birth-publish-will-message-payload] The Edge Node's MQTT Will Message's payload MUST be a Sparkplug Google Protobuf encoded payload.
Coverage
[tck-id-message-flow-edge-node-birth-publish-will-message-payload-bdSeq] The Edge Node's MQTT Will Message's payload MUST include a metric with the name of 'bdSeq', the datatype of INT64, and the value MUST be incremented by one from the value in the previous MQTT CONNECT packet unless the value would be greater than 255. If in the previous NBIRTH a value of 255 was sent, the next MQTT Connect packet Will Message payload bdSeq number value MUST have a value of 0.
Coverage
[tck-id-message-flow-edge-node-birth-publish-will-message-qos] The Edge Node's MQTT Will Message's MQTT QoS MUST be 1.
Coverage
[tck-id-message-flow-edge-node-birth-publish-will-message-will-retained] The Edge Node's MQTT Will Message's retained flag MUST be set to false.
Coverage
[tck-id-message-flow-edge-node-birth-publish-phid-wait] If the Edge Node is configured to wait for a Primary Host Application it MUST verify the Primary Host Application is online via the STATE topic before publishing NBIRTH and DBIRTH messages.
Coverage
[tck-id-message-flow-edge-node-birth-publish-phid-wait-id] If the Edge Node is configured to wait for a Primary Host Application it MUST validate the Host Application ID as the last token in the STATE message topic string matches the configured Primary Host Application ID for this Edge Node.
Coverage
[tck-id-message-flow-edge-node-birth-publish-phid-wait-online] If the Edge Node is configured to wait for a Primary Host Application it MUST validate the 'online' boolean flag is true in the STATE message payload before considering the Primary Host Application to be online and active.
Coverage
[tck-id-message-flow-edge-node-birth-publish-phid-wait-timestamp] If the Edge Node is configured to wait for a Primary Host Application it MUST validate the timestamp value is greater than or equal to the previous STATE message timestamp value in the STATE message payload before considering the Primary Host Application to be online and active. If no previous STATE message timestamp value has been received by this Edge Node it MUST consider the incoming STATE message to be the latest/valid.
Coverage
[tck-id-message-flow-edge-node-birth-publish-nbirth-topic] The Edge Node's NBIRTH MQTT topic MUST be of the form 'spBv1.0/groupid/NBIRTH/edgenodeid' where groupid is the Sparkplug Group ID and the edgenodeid is the Sparkplug Edge Node ID for this Edge Node
Coverage
[tck-id-message-flow-edge-node-birth-publish-nbirth-payload] The Edge Node's NBIRTH payload MUST be a Sparkplug Google Protobuf encoded payload.
Coverage
[tck-id-message-flow-edge-node-birth-publish-nbirth-payload-bdSeq] The Edge Node's NBIRTH payload MUST include a metric with the name of 'bdSeq' the datatype of INT64 and the value MUST be the same as the previous MQTT CONNECT packet.
Coverage
[tck-id-message-flow-edge-node-birth-publish-nbirth-qos] The Edge Node's NBIRTH MQTT QoS MUST be 0.
Coverage
[tck-id-message-flow-edge-node-birth-publish-nbirth-retained] The Edge Node's NBIRTH retained flag MUST be set to false.
Coverage
[tck-id-message-flow-edge-node-birth-publish-nbirth-payload-seq] The Edge Node's NBIRTH payload MUST include a 'seq' number that is between 0 and 255 (inclusive).
Coverage
[tck-id-message-flow-edge-node-birth-publish-phid-offline] If the Edge Node is configured to wait for a Primary Host Application, it is connected to the MQTT Server, and receives a STATE message on its configured Primary Host, the timestamp value in the payload is greater than or equal to the timestamp value included in the prior 'online' STATE message, and the 'online' value is false, it MUST immediately publish an NDEATH message and disconnect from the MQTT Server and start the connection establishment process over.
Coverage
[tck-id-operational-behavior-edge-node-intentional-disconnect-ndeath] When an Edge Node disconnects intentionally, it MUST publish an NDEATH before terminating the connection.
Coverage
[tck-id-operational-behavior-edge-node-intentional-disconnect-packet] Immediately following the NDEATH publish, a DISCONNECT packet MAY be sent to the MQTT Server.
Coverage
[tck-id-operational-behavior-edge-node-termination-host-action-ndeath-node-offline] Immediately after receiving an NDEATH from an Edge Node, Host Applications MUST mark the Edge Node as offline using the current Host Application's system UTC time
Coverage
[tck-id-operational-behavior-edge-node-termination-host-action-ndeath-node-tags-stale] Immediately after receiving an NDEATH from an Edge Node, Host Applications MUST mark all metrics that were included in the previous NBIRTH as STALE using the current Host Application's system UTC time
Coverage
[tck-id-operational-behavior-edge-node-termination-host-action-ndeath-devices-offline] Immediately after receiving an NDEATH from an Edge Node, Host Applications MUST mark all Sparkplug Devices associated with the Edge Node as offline using the current Host Application's system UTC time
Coverage
[tck-id-operational-behavior-edge-node-termination-host-action-ndeath-devices-tags-stale] Immediately after receiving an NDEATH from an Edge Node, Host Applications MUST mark all of the metrics that were included with associated Sparkplug Device DBIRTH messages as STALEusing the current Host Application's system UTC time
Coverage
[tck-id-operational-behavior-edge-node-termination-host-offline] If the Edge Node is configured to use a Primary Host Application, it MUST disconnect from the current MQTT Server if the online JSON value is false and the timestamp value is greater than or equal to the previous online STATE message timestamp value.
Coverage
[tck-id-operational-behavior-edge-node-termination-host-offline-reconnect] If the Edge Node disconnects after being in a Sparkplug session due to a valid 'offline STATE message', it MUST attempt to connect to the next MQTT Server in its connection list to start the session establishment procedure over again.
Coverage
[tck-id-operational-behavior-edge-node-termination-host-offline-timestamp] Consider an Edge Node that is configured to use a Primary Host Application and the Edge Node is connected and publishing. Then it receives an offline STATE message. It MUST NOT disconnect if the timestamp value is less than the value from the previous online STATE message.
Coverage
[tck-id-message-flow-device-dcmd-subscribe] If the Device supports writing to outputs, the MQTT client associated with the Device MUST subscribe to a topic of the form 'spBv1.0/groupid/DCMD/edgenodeid/deviceid' where groupid is the Sparkplug Group ID the edgenodeid is the Sparkplug Edge Node ID and the deviceid is the Sparkplug Device ID for this Device. It MUST subscribe on this topic with a QoS of 1.
Coverage
[tck-id-message-flow-device-birth-publish-nbirth-wait] The NBIRTH message MUST have been sent within the current MQTT session prior to a DBIRTH being published.
Coverage
[tck-id-message-flow-device-birth-publish-dbirth-topic] The Device's DBIRTH MQTT topic MUST be of the form 'spBv1.0/groupid/DBIRTH/edgenodeid/deviceid' where groupid is the Sparkplug Group ID the edgenodeid is the Sparkplug Edge Node ID and the deviceid is the Sparkplug Device ID for this Device.
Coverage
[tck-id-message-flow-device-birth-publish-dbirth-match-edge-node-topic] The Device's DBIRTH MQTT topic groupid and edgenodeid MUST match the groupid and edgenodeid that were sent in the prior NBIRTH message for the Edge Node this Device is associated with.
Coverage
[tck-id-message-flow-device-birth-publish-dbirth-payload] The Device's DBIRTH payload MUST be a Sparkplug Google Protobuf encoded payload.
Coverage
[tck-id-message-flow-device-birth-publish-dbirth-qos] The Device's DBIRTH MQTT QoS MUST be 0.
Coverage
[tck-id-message-flow-device-birth-publish-dbirth-retained] The Device's DBIRTH retained flag MUST be set to false.
Coverage
[tck-id-message-flow-device-birth-publish-dbirth-payload-seq] The Device's DBIRTH payload MUST include a 'seq' number that is between 0 and 255 (inclusive) and be one more than was included in the prior Sparkplug message sent from the Edge Node associated with this Device.
Coverage
[tck-id-operational-behavior-device-ddeath] If a Sparkplug Edge Node loses connection with an attached Sparkplug Device, it MUST publish a DDEATH message on behalf of the device.
Coverage
[tck-id-operational-behavior-edge-node-termination-host-action-ddeath-devices-offline] Immediately after receiving an DDEATH from an Edge Node, Host Applications MUST mark the Sparkplug Device associated with the Edge Node as offline using the timestamp in the DDEATH payload
Coverage
[tck-id-operational-behavior-edge-node-termination-host-action-ddeath-devices-tags-stale] Immediately after receiving an DDEATH from an Edge Node, Host Applications MUST mark all of the metrics that were included with the associated Sparkplug Device DBIRTH messages as STALE using the timestamp in the DDEATH payload
Coverage
[tck-id-operational-behavior-host-reordering-param] Sparkplug Host Applications SHOULD provide a configurable 'Reorder Timeout' parameter
Coverage
[tck-id-operational-behavior-host-reordering-start] If a Sparkplug Host Application is configured with a 'reordering timeout' parameter and a message arrives with an out of order sequence number, the Host Application MUST start a timer denoting the start of the Reorder Timeout window
Coverage
[tck-id-operational-behavior-host-reordering-rebirth] If a Sparkplug Host Application is configured with a 'reordering timeout' parameter and the Reorder Timeout elapses and the missing message(s) have not been received, the Sparkplug Host Application MUST send an NCMD to the Edge Node with a 'Node Control/Rebirth' request
Coverage
[tck-id-operational-behavior-host-reordering-success] If the missing message(s) that triggered the start of the Reorder Timeout timer arrive before the reordering timer elapses, the timer MUST be terminated and normal operation in the Host Application MUST continue until another out of order message arrives.
Coverage
[tck-id-operational-behavior-primary-application-state-with-multiple-servers-state-subs] When using multiple MQTT Servers and Edge Nodes are configured with a Primary Host Application, the Primary Host Application instance MUST be configured to publish a STATE Birth Certificate and all Edge Nodes configured with a Primary Host Application MUST subscribe to this STATE message.
Coverage
[tck-id-operational-behavior-primary-application-state-with-multiple-servers-state] Regardless of the number of MQTT Servers in a Sparkplug Infrastructure, every time a Primary Host Application establishes a new MQTT Session with an MQTT Server, the STATE Birth Certificate defined in the STATE description section MUST be the first message that is published after a successful MQTT Session is established with each MQTT Server.
Coverage
[tck-id-operational-behavior-primary-application-state-with-multiple-servers-single-server] The Edge Nodes MUST not connected to more than one server at any point in time.
Coverage
[tck-id-operational-behavior-primary-application-state-with-multiple-servers-walk] If the Primary Host Application is offline as denoted via the STATE MQTT Message, the Edge Node MUST terminate its session with this MQTT Server and move to the next available MQTT Server that is available.
Coverage
[tck-id-operational-behavior-edge-node-birth-sequence-wait] The Edge Node MUST also wait to publish its BIRTH sequence until an online=true STATE message is received by the Edge Node.
Coverage
[tck-id-operational-behavior-host-application-host-id] The sparkplughostid MUST be unique to all other Sparkplug Host IDs in the infrastructure.
Coverage
[tck-id-operational-behavior-host-application-connect-will] When a Sparkplug Host Application sends its MQTT CONNECT packet, it MUST include a Will Message.
Coverage
[tck-id-operational-behavior-host-application-connect-will-topic] The MQTT Will Message's topic MUST be of the form 'spBv1.0/STATE/sparkplughostid' where host_id is the unique identifier of the Sparkplug Host Application
Coverage
[tck-id-operational-behavior-host-application-connect-will-payload] The Death Certificate Payload MUST be JSON UTF-8 data. It MUST include two key/value pairs where one key MUST be 'online' and it's value is a boolean 'false'. The other key MUST be 'timestamp' and the value MUST be the same value that was used for the timestamp in its own prior MQTT CONNECT packet Will Message payload.
Coverage
[tck-id-operational-behavior-host-application-connect-will-qos] The MQTT Will Message's MQTT QoS MUST be 1 (at least once).
Coverage
[tck-id-operational-behavior-host-application-connect-will-retained] The MQTT Will Message's retained flag MUST be set to true.
Coverage
[tck-id-operational-behavior-host-application-connect-birth] The MQTT Client associated with the Sparkplug Host Application MUST send a birth message immediately after successfully connecting to the MQTT Server.
Coverage
[tck-id-operational-behavior-host-application-connect-birth-topic] The Host Application's Birth topic MUST be of the form 'spBv1.0/STATE/sparkplughostid' where host_id is the unique identifier of the Sparkplug Host Application
Coverage
[tck-id-operational-behavior-host-application-connect-birth-payload] The Birth Certificate Payload MUST be JSON UTF-8 data. It MUST include two key/value pairs where one key MUST be 'online' and it's value is a boolean 'true'. The other key MUST be 'timestamp' and the value MUST match the timestamp value that was used in the immediately prior MQTT CONNECT packet Will Message payload.
Coverage
[tck-id-operational-behavior-host-application-connect-birth-qos] The Host Application's Birth MQTT QoS MUST be 1 (at least once).
Coverage
[tck-id-operational-behavior-host-application-connect-birth-retained] The Host Application's Birth retained flag MUST be set to true.
Coverage
[tck-id-operational-behavior-host-application-multi-server-timestamp] The Host Application MUST maintain a STATE Message timestamp value on a per MQTT Server basis.
Coverage
[tck-id-operational-behavior-host-application-termination] If the Sparkplug Host Application ever disconnects intentionally, it MUST publish a Death message with the following characteristics.
Coverage
[tck-id-operational-behavior-host-application-death-topic] The Sparkplug Host Application's Death topic MUST be of the form 'spBv1.0/STATE/sparkplughostid' where host_id is the unique identifier of the Sparkplug Host Application.
Coverage
[tck-id-operational-behavior-host-application-death-payload] The Death Certificate Payload registered as the MQTT Will Message in the MQTT CONNECT packet MUST be JSON UTF-8 data. It MUST include two key/value pairs where one key MUST be 'online' and it's value is a boolean 'false'. The other key MUST be 'timestamp' and the value MUST be a numeric value representing the current UTC time in milliseconds since Epoch.
Coverage
[tck-id-operational-behavior-host-application-death-qos] The Sparkplug Host Application's Death MQTT QoS MUST be 1 (at least once).
Coverage
[tck-id-operational-behavior-host-application-death-retained] The Sparkplug Host Application's Death retained flag MUST be set to true.
Coverage
[tck-id-operational-behavior-host-application-disconnect-intentional] In the case of intentionally disconnecting, an MQTT DISCONNECT packet MAY be sent immediately after the Death message is published.
Coverage
[tck-id-operational-behavior-data-publish-nbirth] NBIRTH messages MUST include all metrics for the specified Edge Node that will ever be published for that Edge Node within the established Sparkplug session.
Coverage
[tck-id-operational-behavior-data-publish-nbirth-values] For each metric in the NBIRTH, the value MUST be set to the current value or if the current value is null, the is_null flag MUST be set to true and MUST NOT have a value specified.
Coverage
[tck-id-operational-behavior-data-publish-nbirth-change] NDATA messages SHOULD only be published when Edge Node level metrics change.
Coverage
[tck-id-operational-behavior-data-publish-nbirth-order] For all metrics where is_historical=false, NBIRTH and NDATA messages MUST keep metric values in chronological order in the list of metrics in the payload.
Coverage
[tck-id-operational-behavior-data-publish-dbirth] DBIRTH messages MUST include all metrics for the specified Device that will ever be published for that Device within the established Sparkplug session.
Coverage
[tck-id-operational-behavior-data-publish-dbirth-values] For each metric in the DBIRTH, the value MUST be set to the current value or if the current value is null, the is_null flag MUST be set to true and MUST NOT have a value specified.
Coverage
[tck-id-operational-behavior-data-publish-dbirth-change] DDATA messages SHOULD only be published when Device level metrics change.
Coverage
[tck-id-operational-behavior-data-publish-dbirth-order] For all metrics where is_historical=false, DBIRTH and DDATA messages MUST keep metric values in chronological order in the list of metrics in the payload.
Coverage
[tck-id-operational-behavior-data-commands-rebirth-name] An NBIRTH message MUST include a metric with a name of 'Node Control/Rebirth'.
Coverage
[tck-id-operational-behavior-data-commands-rebirth-name-aliases] When aliases are being used by an Edge Node an NBIRTH message MUST NOT include an alias for the 'Node Control/Rebirth' metric.
Coverage
[tck-id-operational-behavior-data-commands-rebirth-datatype] The 'Node Control/Rebirth' metric in the NBIRTH message MUST have a datatype of 'Boolean'.
Coverage
[tck-id-operational-behavior-data-commands-rebirth-value] The 'Node Control/Rebirth' metric value in the NBIRTH message MUST have a value of false.
Coverage
[tck-id-operational-behavior-data-commands-ncmd-rebirth-verb] A Rebirth Request MUST use the NCMD Sparkplug verb.
Coverage
[tck-id-operational-behavior-data-commands-ncmd-rebirth-name] A Rebirth Request MUST include a metric with a name of 'Node Control/Rebirth'.
Coverage
[tck-id-operational-behavior-data-commands-ncmd-rebirth-value] A Rebirth Request MUST include a metric value of true.
Coverage
[tck-id-operational-behavior-data-commands-rebirth-action-1] When an Edge Node receives a Rebirth Request, it MUST immediately stop sending DATA messages.
Coverage
[tck-id-operational-behavior-data-commands-rebirth-action-2] After an Edge Node stops sending DATA messages, it MUST send a complete BIRTH sequence including the NBIRTH and DBIRTH(s) if applicable.
Coverage
[tck-id-operational-behavior-data-commands-rebirth-action-3] The NBIRTH MUST include the same bdSeq metric with the same value it had included in the Will Message of the previous MQTT CONNECT packet.
Coverage
[tck-id-operational-behavior-data-commands-ncmd-verb] An Edge Node level command MUST use the NCMD Sparkplug verb.
Coverage
[tck-id-operational-behavior-data-commands-ncmd-metric-name] An NCMD message SHOULD include a metric name that was included in the associated NBIRTH message for the Edge Node.
Coverage
[tck-id-operational-behavior-data-commands-ncmd-metric-value] An NCMD message MUST include a compatible metric value for the metric name that it is writing to.
Coverage
[tck-id-operational-behavior-data-commands-dcmd-verb] A Device level command MUST use the DCMD Sparkplug verb.
Coverage
[tck-id-operational-behavior-data-commands-dcmd-metric-name] A DCMD message SHOULD include a metric name that was included in the associated DBIRTH message for the Device.
Coverage
[tck-id-operational-behavior-data-commands-dcmd-metric-value] A DCMD message MUST include a compatible metric value for the metric name that it is writing to.
Coverage
[tck-id-payloads-timestamp-in-UTC] This timestamp MUST be in UTC.
Coverage
[tck-id-payloads-sequence-num-always-included] A sequence number MUST be included in the payload of every Sparkplug MQTT message from an Edge Node except NDEATH messages.
Coverage
[tck-id-payloads-sequence-num-zero-nbirth] A NBIRTH message from an Edge Node MUST always contain a sequence number between 0 and 255 (inclusive).
Coverage
[tck-id-payloads-sequence-num-incrementing] All subsequent messages after an NBIRTH from an Edge Node MUST contain a sequence number that is continually increasing by one in each message from that Edge Node until a value of 255 is reached. At that point, the sequence number of the following message MUST be zero.
Coverage
[tck-id-payloads-name-requirement] The name MUST be included with every metric unless aliases are being used.
Coverage
[tck-id-payloads-alias-uniqueness] If supplied in an NBIRTH or DBIRTH it MUST be a unique number across this Edge Node's entire set of metrics.
Coverage
[tck-id-payloads-alias-birth-requirement] NBIRTH and DBIRTH messages MUST include both a metric name and alias.
Coverage
[tck-id-payloads-alias-data-cmd-requirement] NDATA, DDATA, NCMD, and DCMD messages MUST only include an alias and the metric name MUST be excluded.
Coverage
[tck-id-payloads-name-birth-data-requirement] The timestamp MUST be included with every metric in all NBIRTH, DBIRTH, NDATA, and DDATA messages.
Coverage
[tck-id-payloads-name-cmd-requirement] The timestamp MAY be included with metrics in NCMD and DCMD messages.
Coverage
[tck-id-payloads-metric-timestamp-in-UTC] The timestamp MUST be in UTC.
Coverage
[tck-id-payloads-metric-datatype-value-type] The datatype MUST be an unsigned 32-bit integer representing the datatype.
Coverage
[tck-id-payloads-metric-datatype-value] The datatype MUST be one of the enumerated values as shown in the valid Sparkplug Data Types.
Coverage
[tck-id-payloads-metric-datatype-req] The datatype MUST be included with each metric definition in NBIRTH and DBIRTH messages.
Coverage
[tck-id-payloads-metric-datatype-not-req] The datatype SHOULD NOT be included with metric definitions in NDATA, NCMD, DDATA, and DCMD messages.
Coverage
[tck-id-payloads-propertyset-keys-array-size] The array of keys in a PropertySet MUST contain the same number of values included in the array of PropertyValue objects.
Coverage
[tck-id-payloads-propertyset-values-array-size] The array of values in a PropertySet MUST contain the same number of items that are in the keys array.
Coverage
[tck-id-payloads-metric-propertyvalue-type-type] This MUST be an unsigned 32-bit integer representing the datatype.
Coverage
[tck-id-payloads-metric-propertyvalue-type-value] This value MUST be one of the enumerated values as shown in the Sparkplug Basic Data Types or the Sparkplug Property Value Data Types.
Coverage
[tck-id-payloads-metric-propertyvalue-type-req] This MUST be included in Property Value Definitions in NBIRTH and DBIRTH messages.
Coverage
[tck-id-payloads-propertyset-quality-value-type] The 'type' of the Property Value MUST be a value of 3 which represents a Signed 32-bit Integer.
Coverage
[tck-id-payloads-propertyset-quality-value-value] The 'value' of the Property Value MUST be an int_value and be one of the valid quality codes of 0, 192, or 500.
Coverage
[tck-id-payloads-dataset-column-size] This MUST be an unsigned 64-bit integer representing the number of columns in this DataSet.
Coverage
[tck-id-payloads-dataset-column-num-headers] The size of the array MUST have the same number of elements that the types array contains.
Coverage
[tck-id-payloads-dataset-types-def] This MUST be an array of unsigned 32 bit integers representing the datatypes of the columns.
Coverage
[tck-id-payloads-dataset-types-num] The array of types MUST have the same number of elements that the columns array contains.
Coverage
[tck-id-payloads-dataset-types-type] The values in the types array MUST be a unsigned 32-bit integer representing the datatype.
Coverage
[tck-id-payloads-dataset-types-value] This values in the types array MUST be one of the enumerated values as shown in the Sparkplug Basic Data Types.
Coverage
[tck-id-payloads-dataset-parameter-type-req] The types array MUST be included in all DataSets.
Coverage
[tck-id-payloads-template-dataset-value] The value supplied MUST be one of the following Google Protobuf types: uint32, uint64, float, double, bool, or string.
Coverage
[tck-id-payloads-template-definition-nbirth-only] Template Definitions MUST only be included in NBIRTH messages.
Coverage
[tck-id-payloads-template-definition-is-definition] A Template Definition MUST have is_definition set to true.
Coverage
[tck-id-payloads-template-definition-ref] A Template Definition MUST omit the template_ref field.
Coverage
[tck-id-payloads-template-definition-members] A Template Definition MUST include all member metrics that will ever be included in corresponding template instances.
Coverage
[tck-id-payloads-template-definition-nbirth] A Template Definition MUST be included in the NBIRTH for all Template Instances that are included in the NBIRTH and DBIRTH messages.
Coverage
[tck-id-payloads-template-definition-parameters] A Template Definition MUST include all parameters that will be included in the corresponding Template Instances.
Coverage
[tck-id-payloads-template-definition-parameters-default] A Template Definition MAY include values for parameters in the Template Definition parameters.
Coverage
[tck-id-payloads-template-instance-is-definition] A Template Instance MUST have is_definition set to false.
Coverage
[tck-id-payloads-template-instance-ref] A Template Instance MUST have template_ref set to the type of template definition it is.
Coverage
[tck-id-payloads-template-instance-members] A Template Instance MUST include only members that were included in the corresponding template definition.
Coverage
[tck-id-payloads-template-instance-members-birth] A Template Instance in a NBIRTH or DBIRTH message MUST include all members that were included in the corresponding Template Definition.
Coverage
[tck-id-payloads-template-instance-members-data] A Template Instance in a NDATA or DDATA message MAY include only a subset of the members that were included in the corresponding template definition.
Coverage
[tck-id-payloads-template-instance-parameters] A Template Instance MAY include parameter values for any parameters that were included in the corresponding Template Definition.
Coverage
[tck-id-payloads-template-version] If included, the version MUST be a UTF-8 string representing the version of the Template.
Coverage
[tck-id-payloads-template-ref-definition] This MUST be omitted if this is a Template Definition.
Coverage
[tck-id-payloads-template-ref-instance] This MUST be a UTF-8 string representing a reference to a Template Definition name if this is a Template Instance.
Coverage
[tck-id-payloads-template-is-definition] This MUST be included in every Template Definition and Template Instance.
Coverage
[tck-id-payloads-template-is-definition-definition] This MUST be set to true if this is a Template Definition.
Coverage
[tck-id-payloads-template-is-definition-instance] This MUST be set to false if this is a Template Instance.
Coverage
[tck-id-payloads-template-parameter-name-required] This MUST be included in every Template Parameter definition.
Coverage
[tck-id-payloads-template-parameter-name-type] This MUST be a UTF-8 string representing the name of the Template parameter.
Coverage
[tck-id-payloads-template-parameter-value-type] This MUST be an unsigned 32-bit integer representing the datatype.
Coverage
[tck-id-payloads-template-parameter-type-value] This value MUST be one of the enumerated values as shown in the Sparkplug Basic Data Types.
Coverage
[tck-id-payloads-template-parameter-type-req] This MUST be included in Template Parameter Definitions in NBIRTH and DBIRTH messages.
Coverage
[tck-id-payloads-template-parameter-value] The value supplied MUST be one of the following Google Protocol Buffer types: uint32, uint64, float, double, bool, or string.
Coverage
[tck-id-payloads-nbirth-timestamp] NBIRTH messages MUST include a payload timestamp that denotes the time at which the message was published.
Coverage
[tck-id-payloads-nbirth-edge-node-descriptor] Every Edge Node Descriptor in any Sparkplug infrastructure MUST be unique in the system.
Coverage
[tck-id-payloads-nbirth-seq] Every NBIRTH message MUST include a sequence number and it MUST have a value between 0 and 255 (inclusive).
Coverage
[tck-id-payloads-nbirth-bdseq] Every NBIRTH message MUST include a bdSeq number metric.
Coverage
[tck-id-payloads-nbirth-bdseq-repeat] The bdSeq number value MUST match the bdSeq number value that was sent in the prior MQTT CONNECT packet WILL Message.
Coverage
[tck-id-payloads-nbirth-rebirth-req] Every NBIRTH MUST include a metric with the name 'Node Control/Rebirth' and have a boolean value of false.
Coverage
[tck-id-payloads-nbirth-qos] NBIRTH messages MUST be published with the MQTT QoS set to 0.
Coverage
[tck-id-payloads-nbirth-retain] NBIRTH messages MUST be published with the MQTT retain flag set to false.
Coverage
[tck-id-payloads-dbirth-timestamp] DBIRTH messages MUST include a payload timestamp that denotes the time at which the message was published.
Coverage
[tck-id-payloads-dbirth-seq] Every DBIRTH message MUST include a sequence number.
Coverage
[tck-id-payloads-dbirth-seq-inc] Every DBIRTH message MUST include a sequence number value that is one greater than the previous sequence number sent by the Edge Node. This value MUST never exceed 255. If in the previous sequence number sent by the Edge Node was 255, the next sequence number sent MUST have a value of 0.
Coverage
[tck-id-payloads-dbirth-order] All DBIRTH messages sent by an Edge Node MUST be sent immediately after the NBIRTH and before any NDATA or DDATA messages are published by the Edge Node.
Coverage
[tck-id-payloads-dbirth-qos] DBIRTH messages MUST be published with the MQTT QoS set to 0.
Coverage
[tck-id-payloads-dbirth-retain] DBIRTH messages MUST be published with the MQTT retain flag set to false.
Coverage
[tck-id-payloads-ndata-timestamp] NDATA messages MUST include a payload timestamp that denotes the time at which the message was published.
Coverage
[tck-id-payloads-ndata-seq] Every NDATA message MUST include a sequence number.
Coverage
[tck-id-payloads-ndata-seq-inc] Every NDATA message MUST include a sequence number value that is one greater than the previous sequence number sent by the Edge Node. This value MUST never exceed 255. If in the previous sequence number sent by the Edge Node was 255, the next sequence number sent MUST have a value of 0.
Coverage
[tck-id-payloads-ndata-order] All NDATA messages sent by an Edge Node MUST NOT be sent until all the NBIRTH and all DBIRTH messages have been published by the Edge Node.
Coverage
[tck-id-payloads-ndata-qos] NDATA messages MUST be published with the MQTT QoS set to 0.
Coverage
[tck-id-payloads-ndata-retain] NDATA messages MUST be published with the MQTT retain flag set to false.
Coverage
[tck-id-payloads-ddata-timestamp] DDATA messages MUST include a payload timestamp that denotes the time at which the message was published.
Coverage
[tck-id-payloads-ddata-seq] Every DDATA message MUST include a sequence number.
Coverage
[tck-id-payloads-ddata-seq-inc] Every DDATA message MUST include a sequence number value that is one greater than the previous sequence number sent by the Edge Node. This value MUST never exceed 255. If in the previous sequence number sent by the Edge Node was 255, the next sequence number sent MUST have a value of 0.
Coverage
[tck-id-payloads-ddata-order] All DDATA messages sent by an Edge Node MUST NOT be sent until all the NBIRTH and all DBIRTH messages have been published by the Edge Node.
Coverage
[tck-id-payloads-ddata-qos] DDATA messages MUST be published with the MQTT QoS set to 0.
Coverage
[tck-id-payloads-ddata-retain] DDATA messages MUST be published with the MQTT retain flag set to false.
Coverage
[tck-id-payloads-ncmd-timestamp] NCMD messages MUST include a payload timestamp that denotes the time at which the message was published.
Coverage
[tck-id-payloads-ncmd-seq] Every NCMD message MUST NOT include a sequence number.
Coverage
[tck-id-payloads-ncmd-qos] NCMD messages MUST be published with the MQTT QoS set to 0.
Coverage
[tck-id-payloads-ncmd-retain] NCMD messages MUST be published with the MQTT retain flag set to false.
Coverage
[tck-id-payloads-dcmd-timestamp] DCMD messages MUST include a payload timestamp that denotes the time at which the message was published.
Coverage
[tck-id-payloads-dcmd-seq] Every DCMD message MUST NOT include a sequence number.
Coverage
[tck-id-payloads-dcmd-qos] DCMD messages MUST be published with the MQTT QoS set to 0.
Coverage
[tck-id-payloads-dcmd-retain] DCMD messages MUST be published with the MQTT retain flag set to false.
Coverage
[tck-id-payloads-ndeath-seq] Every NDEATH message MUST NOT include a sequence number.
Coverage
[tck-id-payloads-ndeath-will-message] An NDEATH message MUST be registered as a Will Message in the MQTT CONNECT packet.
Coverage
[tck-id-payloads-ndeath-will-message-qos] The NDEATH message MUST set the MQTT Will QoS to 1 in the MQTT CONNECT packet.
Coverage
[tck-id-payloads-ndeath-will-message-retain] The NDEATH message MUST set the MQTT Will Retained flag to false in the MQTT CONNECT packet.
Coverage
[tck-id-payloads-ndeath-bdseq] The NDEATH message MUST include the same bdSeq number value that will be used in the associated NBIRTH message.
Coverage
[tck-id-payloads-ndeath-will-message-publisher] An NDEATH message SHOULD be published by the Edge Node before it intentionally disconnects from the MQTT Server.
Coverage
[tck-id-payloads-ndeath-will-message-publisher-disconnect-mqtt311] If the Edge Node is using MQTT 3.1.1 and it sends an MQTT DISCONNECT packet, the Edge Node MUST publish an NDEATH message to the MQTT Server before it sends the MQTT DISCONNECT packet.
Coverage
[tck-id-payloads-ndeath-will-message-publisher-disconnect-mqtt50] If the Edge Node is using MQTT 5.0 and it sends an MQTT DISCONNECT packet, the MQTT v5.0 'Disconnect with Will Message' reason code MUST be set in the DISCONNECT packet.
Coverage
[tck-id-payloads-ddeath-timestamp] DDEATH messages MUST include a payload timestamp that denotes the time at which the message was published.
Coverage
[tck-id-payloads-ddeath-seq] Every DDEATH message MUST include a sequence number.
Coverage
[tck-id-payloads-ddeath-seq-inc] Every DDEATH message MUST include a sequence number value that is one greater than the previous sequence number sent by the Edge Node. This value MUST never exceed 255. If in the previous sequence number sent by the Edge Node was 255, the next sequence number sent MUST have a value of 0.
Coverage
[tck-id-payloads-ddeath-seq-number] A sequence number MUST be included with the DDEATH messages so the Host Application can ensure order of messages and maintain the state of the data.
Coverage
[tck-id-payloads-state-will-message] Sparkplug Host Applications MUST register a Will Message in the MQTT CONNECT packet on the topic 'spBv1.0/STATE/[sparkplughostid]'.
Coverage
[tck-id-payloads-state-will-message-qos] The Sparkplug Host Application MUST set the the MQTT Will QoS to 1 in the MQTT CONNECT packet.
Coverage
[tck-id-payloads-state-will-message-retain] The Sparkplug Host Application MUST set the Will Retained flag to true in the MQTT CONNECT packet.
Coverage
[tck-id-payloads-state-will-message-payload] The Death Certificate Payload MUST be JSON UTF-8 data. It MUST include two key/value pairs where one key MUST be 'online' and it's value is a boolean 'false'. The other key MUST be 'timestamp' and the value MUST be a numeric value representing the current UTC time in milliseconds since Epoch.
Coverage
[tck-id-payloads-state-subscribe] After establishing an MQTT connection, the Sparkplug Host Application MUST subscribe on it's own 'spBv1.0/STATE/[sparkplughostid]' topic.
Coverage
[tck-id-payloads-state-birth] After subscribing on it's own spBv1.0/STATE/[sparkplughostid] topic, the Sparkplug Host Application MUST publish an MQTT message on the topic 'spBv1.0/STATE/[sparkplughostid]' with a QoS of 1, and the retain flag set to true.
Coverage
[tck-id-payloads-state-birth-payload] The Birth Certificate Payload MUST be JSON UTF-8 data. It MUST include two key/value pairs where one key MUST be 'online' and it's value is a boolean 'true'. The other key MUST be 'timestamp' and the value MUST match the timestamp value that was used in the immediately prior MQTT CONNECT packet Will Message payload.
Coverage
[tck-id-conformance-primary-host] Sparkplug Host Applications MUST publish 'STATE' messages that represent its Birth and Death Certificates.
Coverage
[tck-id-conformance-mqtt-qos0] A Sparkplug conformant MQTT Server MUST support publish and subscribe on QoS 0
Coverage
[tck-id-conformance-mqtt-qos1] A Sparkplug conformant MQTT Server MUST support publish and subscribe on QoS 1
Coverage
[tck-id-conformance-mqtt-will-messages] A Sparkplug conformant MQTT Server MUST support all aspects of Will Messages including use of the 'retain flag' and QoS 1
Coverage
[tck-id-conformance-mqtt-retained] A Sparkplug conformant MQTT Server MUST support all aspects of the 'retain flag'
Coverage
[tck-id-conformance-mqtt-aware-basic] A Sparkplug Aware MQTT Server MUST support all aspects of a Sparkplug Compliant MQTT Server
Coverage
[tck-id-conformance-mqtt-aware-store] A Sparkplug Aware MQTT Server MUST store NBIRTH and DBIRTH messages as they pass through the MQTT Server
Coverage
[tck-id-conformance-mqtt-aware-nbirth-mqtt-topic] A Sparkplug Aware MQTT Server MUST make NBIRTH messages available on a topic of the form: $sparkplug/certificates/namespace/groupid/NBIRTH/edgenode_id
Coverage
[tck-id-conformance-mqtt-aware-nbirth-mqtt-retain] A Sparkplug Aware MQTT Server MUST make NBIRTH messages available on the topic: $sparkplug/certificates/namespace/groupid/NBIRTH/edgenode_id with the MQTT retain flag set to true
Coverage
[tck-id-conformance-mqtt-aware-dbirth-mqtt-topic] A Sparkplug Aware MQTT Server MUST make DBIRTH messages available on a topic of the form: $sparkplug/certificates/namespace/groupid/DBIRTH/edgenodeid/deviceid
Coverage
[tck-id-conformance-mqtt-aware-dbirth-mqtt-retain] A Sparkplug Aware MQTT Server MUST make DBIRTH messages available on the topic: $sparkplug/certificates/namespace/groupid/DBIRTH/edgenodeid/deviceid with the MQTT retain flag set to true
Coverage
[tck-id-conformance-mqtt-aware-ndeath-timestamp] A Sparkplug Aware MQTT Server MAY replace the timestmap of NDEATH messages. If it does, it MUST set the timestamp to the UTC time at which it attempts to deliver the NDEATH to subscribed clients
Coverage