Scroll down to learn more

Documentation Center

Welcome to Verity Documentation Center. You find here all the content you need to enjoy your data.

Search Results for

    Show / Hide Table of Contents

    Data fowarding

    This is a paid feature. If you want to activate it, you will need to submit a request to the Verity team.

    The Data Forwarding feature in Insights enables clients to automatically forward ingested data (both RAW and CALC) to an external data lake or message queue in near real-time. This ensures external systems have continuous access to up-to-date data for analytics, AI models, or reporting — without manual export operations.

    The Data Fowarder service makes this possible by automatically sending in customer's queueing system (RabbitMQ, Kafka, MQTT, Azure Service Bus…):

    • Data Points,
    • Metadata (information about variables, sources, sites, etc.),
    • Events (create / update operations happening inside DataHub),

    towards a destination queue selected by the customer.

    Data Forwarding Configuration

    Warning

    To access the Data Forwarder configuration, you must first have the service activated by your Verity administrator.

    Page Location: Settings → Data Forwarding

    Data Forwarding Activation

    • When toggled ON, Insights begins publishing ingested data points to the configured queues.
    • When OFF, no new data is forwarded (historical data remains intact).

    Queue Configuration

    The system generates three types of notifications, each serving a distinct purpose:

    • DataPoints: Messages containing a variable ID and a list of (date, value).
    • Metadata: Messages containing a variable ID and the rendered metadata associated with that variable, based on the configured template.
    • Events: Messages describing changes to DataHub entities (Site, Source, or Variable). Each event includes the entity type, the action performed (Create, Update), the entity ID, and the entity’s properties in JSON format.

    These three types of notifications can be routed to queues in the client’s system.

    Tip

    The user may configure the same queue for multiple notification types.

    Warning

    If no queue is configured for a given notification type, the system will not send that type of notification.

    Protocol Selection

    • The user selects which message broker or technology is used.
    • Supported options: RabbitMQ (AMQP 0.9), Azure EventHub / ServiceBus (AMQP 1.0), Kafka, MQTT.

    RabbitMQ allows you to specify a virtual host. If you do not want to use one, or if you are using other protocols, leave it as “/”.

    Additional parameters can be added to the notification. The parameters are stored in the target messages at a place depending on the protocol:

    Protocol Implementation Parameters storage
    AMQPV10 RabbitMq 4.x Headers
    AMQPV10 Service Bus Custom properties
    AMQPV10 Event Hub Event properties
    AMQPV09 RabbitMq 3.x Headers
    MQTT MQTT broker User properties
    Kafka Kafka broker Headers

    MetaData template editor

    Optional editor for defining which metadata attributes are included in the forwarded payloads.

    It is a single string that follows Handlebars syntax, rendered with the context related to the data points. See below the supported handlebars expressions relates to Account, Site, Source or Variable Data Hub entities.

    Account handlebars expressions

    Property Replaced by
    {{ Account.Id }} The Id of the account
    {{ Account.Name }} The name of the account
    {{ Account.Language }} The language of the account

    Site handlebars expressions

    Property Replaced by
    {{ Site.Id }} The Id of the site
    {{ Site.Name }} The name of the site
    {{ Site.Location }} The location of the site
    {{ Site.Form.Group.Field}} The value of the site form field
    {{ Site.Street }} The street of the site
    {{ Site.PostalCode }} The postal code of the site
    {{ Site.City }} The city of the site
    {{ Site.Country }} The country of the site
    {{ Site.TimeZoneId }} The time zone Id of the site
    {{ Site.Forms.FormName.GroupName.FieldName}} The value of the site form field

    Source handlebars expressions

    Property Replaced by
    {{ Source.Id }} The Id of the source
    {{ Source.Name }} The name of the source
    {{ Source.MeterAddress }} The meter address of the source
    {{ Source.MeterNumber}} The meter number of the source
    {{ Source.SerialNumber}} The serial number of the source
    {{ Source.Description }} The description of the source
    {{ Source.Localisation }} The localisation of the source
    {{ Source.EanNumber }} The EAN number of the source
    {{ Source.TimeZoneId }} The timezone Id of the source
    {{ Source.Tags}} The list of tags of the source
    {{ Source.TimeZoneId }} The timezone Id of the source
    {{ Source.Forms.FormName.GroupName.FieldName}} The value of the source form field

    Variable handlebars expressions

    Property Replaced by
    {{ Variable.Id }} The Id of the variable
    {{ Variable.Name }} The name of the variable
    {{ Variable.Class }} The class of the variable
    {{ Variable.Tags}} The list of tags of the variable
    {{ Variable.Granularity }} The granularity of the variable
    {{ Variable.GranularityTimeBase }} The granularity time base of the variable
    {{ Variable.UnitId }} The unit of the variable
    {{ Variable.UnitSymbol }} The symbol unit of the variable
    {{ Variable.MappingConfig }} The mapping config of the variable
    {{ Variable.QuantityType }} The quantity type of the variable

    Form properties in MetaData template

    {{ Site.Forms.FormName.GroupName.FieldName}} and {{ Source.Forms.FormName.GroupName.FieldName}} refer to the value of a form field. In DataHub, there is no restriction on characters used in Form, Group or Field names, meaning that they can contain white spaces, curly braces, .... In order allows Handlebars engine to properly render the template, the DataPoints Forward service will replace any the [' ', '{' ,'}', ''', '"', '**', '/', ':', ';', '=', ',', '.**'] characters by a single '_'. By example, a name like "Source info {test.1}" must be referred as "Source_info__test_1_" in the template.

    Important

    The MetaData template rendering is case sensitive.

    Example

    Template:

    {
    	"SiteName": "{{Site.Name}}",
    	"NumberOfFloors": {{Site.Forms.SiteInfo.Technical_data.Number_of_floors}},
    	"SourceName": "{{Source.Name}}",
    	"VariableName": "{{Variable.Name}}",
    	"ModbusInfo": "{{Source.Forms.SourceInfo.IOT_address.Host}}@{{Source.Forms.SourceInfo.IOT_address.Modbus_address}}"
    }
    
    Note

    {{Site.Forms.SiteInfo.Technical_data.Number_of_floors}} is not enclosed by double quotes because the field type is integer.

    Rendered MetaData for a given variable:

    { 
        "SiteName": "TestSite", 
        "NumberOfFloors": 2, 
        "SourceName": "TestSource", 
        "VariableName": "General consumption", 
        "ModbusInfo" : "modbus://myhost2.eu@1.2.3" }
    

    Queue messages

    Every queue message contains a message Id that is a Bson ObjectId (unique and contains the timestamp of the Id generation), a body whose type is defines by the ContentType message property and additional parameters.

    DataPoints message

    Contains the data points related to a given variable Id.

    Purpose

    Copy ingested data points to the target queue.

    Body content

    {
        "dp": [
            {
                "d": "DateTimeOffset",
                "v": "double"
            },
            ...
        ]
    }
    

    Message properties

    {
        "MessageType" : "DataPoints"
        "Version" : "string",
        "AccountId" : "int",
        "VariableId": "int",
        "MetaDataHashKey" : "string",
        "ContentType" : "application/json"
    }
    
    Tip

    MetaDataHashkey is the same as the last one in the MetaData table corresponding to variable

    MetaData message

    Adds additional informations to a variable Id.

    Purpose

    The purpose of meta data is to enrich the context of forwarded data points. The customer defines the meta data based on its needs using a Handlebars expression similar to the one used in DataHub report definition. This could potentially lead to a lot of information's to transport along with the data points. In order to keep meta data volume under control, the DataPoints Forwarding service will compute a unique meta data identifier that it will transmit along with forwarded data points. This identifier could be considered as the primary key of meta data documents stored in the MetaData queue. The use of such identifier also eases meta data change tracking: the full meta data history will flow through the meta MetaData queue. It is up to the customer to decide how to deal with the history:

    • either override the meta data row, just keeping the latest version and link data points to this single meta data version
    • store every meta data row and linking a data point to the meta data existing at the time it was processed. Should meta data change, the unique identifier will also change and the data points forwarded after the change will carry the new meta data identifier.

    Body content

    The body contains the result of the rendered MetaData template defined in the configuration.

    Message properties

    {
        "MessageType" : "MetaData"
        "Version" : "string",
        "AccountId" : "int",
        "VariableId": "int",
        "MetaDataHashKey" : "string",
        "ContentType" : "application/json" or "application/text"
    }
    

    Events messages

    Contains events related to changes made on DataHub entities.

    Purpose

    Forward events that happened on DataHub entities.

    Body content

    The body contains the result of the rendered MetaData template defined in the configuration.

    Message properties

    {
        "MessageType" : "Event"
        "Version" : "string",
        "AccountId" : "int",
        "VariableId": "int",
        "MetaDataHashKey" : "string",
        "ChangeType" : "Create" or "Update"
        "ChangeDate" : "DateTimeOffset",
        "EntityType" : "Site" or "Source" or "Variable",
        "EntityId" : "string",
        "ContentType" : "application/json"
    }
    

    How do I enable the forwarding of a variable?

    A toggle is available in the variable configuration screen. To enable data forwarding for the variable, switch it on.

    Error Handling

    If the target data lake or broker is temporarily unavailable, the system buffers data until connectivity is restored, ensuring no data loss.

    Example

    Let’s consider a metadata template configuration as follows:

    { "SiteName": "{{Site.Name}}", "NumberOfFloors": {{Site.Forms.SiteInfo.Technical_data.Number_of_floors}}, "SourceName": "{{Source.Name}}", "VariableName": "{{Variable.Name}}", "ModbusInfo" : "{{Source.Forms.SourceInfo.IOT_address.Host}}@{{Source.Forms.SourceInfo.IOT_address.Modbus_address}}" }
    

    Let’s create a source whose SourceType is “Manual Index”.

    The associated variable has "Must be fowarded" enabled.

    Let’s manually enter an index.

    Event Queue

    In the client’s queuing system, we will receive on the Events queue a notification indicating that a source has been created:

    Message Properties

    Key Value
    deliveryCount 0
    contentType application/json
    messageId 693bcda40d37b0d8e7b07f8e
    sequenceNumber 184
    enqueuedTimeUtc "2025-12-12T08:09:08.686Z" (ven. 12 déc. 2025, 09:09:08 AM UTC+1)
    expiresAtUtc "+031197-09-14T02:48:05.477Z" (dim. 14 sept. 31197, 04:48:05 AM UTC+2)

    Custom Properties

    Key Value
    MessageType Event
    Version 1.0
    AccountId 507
    VariableId 858294
    EntityType Source
    ChangeType Create
    ChangeDate 2025-12-12T08:09:08.4961440+00:00
    ContentType application/json
    Key1 K1_Value
    Key2 ********

    Message Body

    {
       "Id": 858294,
       "Name": "Data fowarded source",
       "EnergyTypeId": 1,
       "EnergyUsageId": 7,
       "SourceTypeId": 4,
       "TimeZoneId": "Romance Standard Time",
       "EanNumber": null,
       "MeterNumber": null,
       "Localisation": null,
       "Description": null,
       "SerialNumber": "a897d45c-6235-4c33-abf4-f1ee5ec28379",
       "SimId": null,
       "DisplayVariableTypeId": null,
       "GatewayId": 545606,
       "GatewayTypeId": 5,
       "MeterAddress": null,
       "SiteId": 19106
    }
    

    In the same way, you will receive a notification for the creation of the variable.

    Metadata queue

    In the client’s queuing system, we will receive on the Metadada queue a notification providing information regarding the site/source/variable (depending of the metadata template) that have received datapoints

    Message Properties

    Key Value
    deliveryCount 0
    contentType application/json
    messageId 693bd3d60d37b0d8e7b07f90
    sequenceNumber 22877
    enqueuedTimeUtc "2025-12-12T08:35:34.865Z" (ven. 12 déc. 2025, 09:35:34 AM UTC+1)
    expiresAtUtc "+031197-09-14T02:48:05.477Z" (dim. 14 sept. 31197, 04:48:05 AM UTC+2)

    Custom Properties

    Key Value
    MessageType MetaData
    Version 1.0
    AccountId 507
    VariableId 11735449
    MetaDataHashKey fd895b229a7e65f72c246e70511562ae
    ContentType application/json
    Key1 K1_Value
    Key2 ********

    Message Body

    {
       "SiteName": "MySite 11",
       "NumberOfFloors": 2,
       "SourceName": "Data fowarded source",
       "VariableName": "Consumption index",
       "ModbusInfo": "@"
    }
    

    Datapoints queue

    In the client’s queuing system, we will receive on the DataPoints queue a notification providing information of the fowarded datapoints

    Message Properties

    Key Value
    deliveryCount 0
    contentType application/json
    messageId 693bd3d60d37b0d8e7b07f91
    sequenceNumber 2282287877
    enqueuedTimeUtc "2025-12-12T08:35:34.943Z" (ven. 12 déc. 2025, 09:35:34 AM UTC+1)
    expiresAtUtc "+031197-09-14T02:48:05.477Z" (dim. 14 sept. 31197, 04:48:05 AM UTC+2)

    Custom Properties

    Key Value
    MessageType DataPoints
    Version 1.0
    AccountId 507
    VariableId 11735449
    MetaDataHashKey fd895b229a7e65f72c246e70511562ae
    ContentType application/json
    Key1 K1_Value
    Key2 ********

    Message Body

    {
       "dp": [
          {
             "d": "2025-12-01T00:00:00.0000000+01:00",
             "v": 123
          }
       ]
    }
    

    Developer Center

    User manual API Swagger Github
    © 2025  -   www.verity.global

    Follow us

    Linkedin