# Introduction

**Widgelix** is a powerful and flexible deep analytics cloud service for IoT data visualization and advanced analyzing.

Our platform allows you to integrate devices from various manufacturers into a single platform and turn collected data into valuable assets.

### [Let's Start Your Journey!](/get-started)

<figure><img src="/files/pUbfxP2kWreqh3LoU3DU" alt=""><figcaption></figcaption></figure>


# Get Started

The **Get Started** chapter is designed to assist you in exploring the majority of **Widgelix**'s features and guiding you through the platform setup process to help you achieve your goals.

{% hint style="warning" %}
At first you should create [Device Type](/get-started/device-types) and after that you can register your [Devices](/get-started/devices) and start receiving the data
{% endhint %}


# Device Types

This section provides instructions on how to add and manage device types within the Widgelix IoT cloud platform.

A **Device Type** is a **template** that allows you to provide properties that can be shared across all the devices of a particular device type.&#x20;

{% hint style="info" %}
For example, if you have 10 IAQ sensors, a template can be created including common properties that can be shared across all of them. A non-sharable property that cannot be included in the template could be their device IDs because they differ from device to device.
{% endhint %}

## You have two options:

* ### Load Device Type from [Repository](/get-started/device-types/repository)
* ### Create from [scratch](/get-started/device-types/create-from-scratch)

## Editing a Device Type

After creating a device type, you can edit any property except for the device type name.&#x20;

{% hint style="info" %}
If you only have **Viewer** rights, you cannot edit a device type.
{% endhint %}

On the **Device Types** page, click on the **name** of the **device type** from the list that you want to edit.&#x20;

All the properties of the device type will open on a single page in **edit mode**.

<figure><img src="/files/TObHUQ1Nfoc5UHmn2AMt" alt=""><figcaption></figcaption></figure>

Once you have finished, scroll down the page and click the **Save** button to save the changes.

<figure><img src="/files/wheqCqqaXYwJrW4VWAXR" alt=""><figcaption></figcaption></figure>

## Deleting a Device Type

A **device type** can be deleted from the organization, and cannot be undone.

{% hint style="info" %}
If you only have Viewer rights, you cannot delete a device type.
{% endhint %}

On the **Device Types** page, click on the **name** of the **device type** from the list that you want to delete.

The **Edit Device Type** page will be displayed. Scroll down the page and then click on the **Delete** button.&#x20;

<figure><img src="/files/5MUsprBLBhDUp0mmOjah" alt=""><figcaption></figcaption></figure>

The **Delete device type** model will be displayed.&#x20;

In the **text box**, type in the exact name of the **device type**.&#x20;

Click on the **Delete** button.

<figure><img src="/files/GhX7T3o5PtPAGPl0qNZE" alt="" width="375"><figcaption></figcaption></figure>

The **device type** will be removed from your organization.

{% hint style="info" %}
The **Delete** operation can't be undone.
{% endhint %}


# Repository

## Load From Repository

On the **Device Type** page, click on the **Load From Repository** button.&#x20;

<figure><img src="/files/O0qAG6nFIJRlHYb9Z4zR" alt=""><figcaption></figcaption></figure>

The **Load From Repository** modal opens.

In the **Load From Repository** modal, select the **manufacturer** from the **Manufacturers** drop-down list. This action will list all the devices belonging to the selected manufacturer. If there are a large number of devices shown in the list, you can search for a specific device type by its name using the **Search** box.

Select the **device type** from the list you want to add.

In the **Name** text box, enter a **name** for the selected device type.

<figure><img src="/files/gqp1MFHyL1TrxuoZATxT" alt=""><figcaption></figcaption></figure>

Click on the **Save** button to add the device type to your organization.&#x20;

The new device type is listed on the **Device Type** page.

<figure><img src="/files/4eLPkCYTIk0Y5MmhBVQt" alt=""><figcaption></figcaption></figure>

## Editing a Device Type

After creating a device type, you can edit any property except for the device type name.&#x20;

{% hint style="info" %}
If you only have **Viewer** rights, you cannot edit a device type.
{% endhint %}

On the **Device Types** page, click on the **name** of the **device type** from the list that you want to edit.&#x20;

All the properties of the device type will open on a single page in **edit mode**.

<figure><img src="/files/TObHUQ1Nfoc5UHmn2AMt" alt=""><figcaption></figcaption></figure>

Once you have finished, scroll down the page and click the **Save** button to save the changes.

<figure><img src="/files/wheqCqqaXYwJrW4VWAXR" alt=""><figcaption></figcaption></figure>

## Deleting a Device Type

A **device type** can be deleted from the organization, and cannot be undone.

{% hint style="info" %}
If you only have Viewer rights, you cannot delete a device type.
{% endhint %}

On the **Device Types** page, click on the **name** of the **device type** from the list that you want to delete.

The **Edit Device Type** page will be displayed. Scroll down the page and then click on the **Delete** button.&#x20;

<figure><img src="/files/5MUsprBLBhDUp0mmOjah" alt=""><figcaption></figcaption></figure>

The **Delete device type** model will be displayed.&#x20;

In the **text box**, type in the exact name of the **device type**.&#x20;

Click on the **Delete** button.

<figure><img src="/files/GhX7T3o5PtPAGPl0qNZE" alt="" width="375"><figcaption></figcaption></figure>

The **device type** will be removed from your organization.

{% hint style="info" %}
The **Delete** operation can't be undone.
{% endhint %}


# Create from scratch

In the left menu, click on **Device Types**.

If no device type has been created within your organization yet, the **Device Types - Create your first device** **type** page will be displayed.

<figure><img src="/files/WQoI3JBTnDkri0Fba3wG" alt=""><figcaption></figcaption></figure>

Otherwise, the **Device Type** page will be displayed, showing the list of previously created device types.

<figure><img src="/files/t3aCTUE6O9bw1PR0gOEU" alt=""><figcaption></figcaption></figure>

## Adding a Device Type

In the Widgelix IoT cloud platform, you have the flexibility to add new devices individually through the **Create** option or import them using the **Load From Repository** option.

### Using Create Option

Click the **+Create Device Type** or **+Create** button, depending on the page you are on.

<figure><img src="/files/EXiIBTG56DdmMVVoZFwJ" alt=""><figcaption></figcaption></figure>

The **Device Type** page will be displayed, which consists of the following tabs: **About**, **Uplink Data**, **Downlink Data**, **Tags**, **Additional Parameters**, and **Widgets**.

#### About

The **About** tab allows you to provide basic information about your device type:

In the **Name** text box, enter the **name** of the device.

In the **Description** text box, enter a short **description** including what the device is intended for.

In the **Manufacturer** text box, enter the name of the **device manufacturer**.&#x20;

Click on the **picture box** to browse and upload an **image** of the device.&#x20;

<figure><img src="/files/c4QF7AezARb3tImiKhoL" alt=""><figcaption></figcaption></figure>

Click on the **+ Map Marke**r button and select a suitable icon for your device. You can also use the **Search box** to find the icon by typing its name, for example, 'temperature'.

<figure><img src="/files/NalBCsnqQtob49BvByue" alt="" width="266"><figcaption></figcaption></figure>

Click on the **Next** button.

You will be directed to the **Uplink Data** tab.

#### Uplink Data

The **Uplink Data** tab allows you to provide information about the uplink data that is being sent from your device.&#x20;

{% hint style="info" %}
This section is optional, and you may skip it without providing uplink information.
{% endhint %}

In the **Code** text area, type or paste the **uplink payload formatter** code, which is written in **JavaScript**.

{% hint style="info" %}
Ensure that the uplink payload formatter code has the`decode()`function.
{% endhint %}

Here is an example of an **uplink payload formatter** code:<br>

```javascript
function decode(payload, data) {
  for (var bytes = [], c = 0; c < payload.length; c += 2) {
    bytes.push(parseInt(payload.substr(c, 2), 16))
  }
  
  if (bytes.length === 24) {
    return {
      lastColorRed: bytes[16],
      lastColorBlue: bytes[17],
      lastColorGreen: bytes[18],
      lastColorOnTime: bytes[19],
      lastColorOffTime: bytes[20],
      messagesReceived: getValue(bytes, 8),
      messagesSent: getValue(bytes, 12),
      swRev: bytes[21],
      hwRev: bytes[22],
      adrState: bytes[23],
      rssi: getValue(bytes, 0),
      snr: getValue(bytes, 4),
    }
  } else { return {} }
}


function getValue(bytes, at) {
  return bytes[at] | (bytes[at+1] << 8) | (bytes[at+2] << 16) | (bytes[at+3] << 24);
}
```

To test the **uplink payload formatter**, enter the **binary payload** in **HEX** into the **Payload** text box and then click on the **Run** button.

{% hint style="info" %}
Here is an example of a **binary payload** in HEX that you can use with the above uplink payload formatter:

`D0FFFFFF2500000001000000020000007FFF00FF00240C01`
{% endhint %}

<figure><img src="/files/68v5rt826HHtk1mDKfGt" alt=""><figcaption></figcaption></figure>

If it is valid, the **decoded payload** will display in the **Output** text area and it will look something like this:

```json
{
    "lastColorRed": 127,
    "lastColorBlue": 255,
    "lastColorGreen": 0,
    "lastColorOnTime": 255,
    "lastColorOffTime": 0,
    "messagesReceived": 1,
    "messagesSent": 2,
    "swRev": 36,
    "hwRev": 12,
    "adrState": 1,
    "rssi": -48,
    "snr": 37
}
```

In the **Data Fields** section, you can add **keys** that allow you to extract data from the payload.&#x20;

In the **Name** text box, enter the **key** of the data field exactly as it appears in your **uplink payload formatter**. For example, according to the above uplink payload formatter code, the keys to be used are `lastColorRed`, `lastColorBlue`, `lastColorGreen`,`lastColorOnTime`, `lastColorOffTime`, `messagesReceived`, `messagesSent`, `swRev`, `hwRev`, `adrState`, `rssi` and `snr`.

Select the appropriate **unit** of measurement *(if applicable)* from the **Units** drop-down list.&#x20;

Type the **minimum** and **maximum** values *(if applicable)* for the measurement in the **Min** and **Max** text boxes, respectively.

<figure><img src="/files/lYUPDSUpo1Jbq0JmqPba" alt=""><figcaption></figcaption></figure>

Click on the **+** button to add more data fields.

Alternatively, you can load the data fields in bulk from the **decoded payload** in the format of **JSON object literal**:&#x20;

```json
{
    "lastColorOnTime": 255,
    "lastColorOffTime": 0,
    "messagesReceived": 1,
    "messagesSent": 2,
    "swRev": 36,
    "hwRev": 12,
    "adrState": 1,
    "rssi": -48,
    "snr": 37
}
```

Click on the **Load From Payload** button.

Type or paste your **JSON** object literal in the **Load Data Fields from Payload** modal.

<figure><img src="/files/egxS9FroQybqcFJNCnPO" alt=""><figcaption></figcaption></figure>

Click on the **Load** button.

The **field names** (keys) will be automatically filled in from the JSON object literal. Then, you can manually set **units**, **min**, and **max** values.

**Widgelix** also supports extracting the **device id** and **device position** *(only applicable if the device has GPS support)* from the payload:&#x20;

**Take device id from payload**: First, turn on the '**Take device id from payload**' slider button. In the **Field name for device ID**, type the **key** exactly as it appears in your **uplink payload formatter**.

**Take position from payload**: First, turn on the '**Take position from payload**' slider button. In the **Latitude field name** and **Longitude field name**, type the **keys** exactly as they appear in your **uplink payload formatter**.

<figure><img src="/files/BnD48oF6hEigyCoJKvuj" alt=""><figcaption></figcaption></figure>

Click on the **Next** button.&#x20;

You will be directed to the **Downlink Data** tab.

#### Downlink Data

The **Downlink Data** tab allows you to provide information about the downlink data that is being received by your device.

{% hint style="info" %}
This section is optional, and you may skip it without providing downlink information.
{% endhint %}

In the **Code** text area, type or paste the **downlink payload formatter** code, which is written in **JavaScript**.

{% hint style="info" %}
Ensure that the downlink payload formatter code has the`decode()`function.
{% endhint %}

Here is an example of a downlink payload formatter code:

```javascript
function decode(payload, params) {
    const red = ('00' + payload.red.toString(16)).slice(-2)
    const green = ('00' + payload.green.toString(16)).slice(-2)
    const blue = ('00' + payload.blue.toString(16)).slice(-2)
    const on = ('00' + payload.on.toString(16)).slice(-2)
    const off = ('00' + payload.off.toString(16)).slice(-2)
    return `${red}${blue}${green}${on}${off}`
}
```

<figure><img src="/files/6tXl0XsWGJLqODti0IkU" alt=""><figcaption></figcaption></figure>

To test the downlink payload formatter, type or paste its JSON payload (JSON object literal) into the **Payload** text box and then click on the **Run** button.&#x20;

Here is a sample **JSON payload** you can use to test the downlink payload formatter code listed above:

```json
{
  "red": 255,
  "green": 0,
  "blue": 0,
  "on": 255,
  "off": 0
}
```

<figure><img src="/files/Nk2d9I7Xlc4Zf6bGXd5E" alt=""><figcaption></figcaption></figure>

If it is valid, the encoded binary payload in HEX will display in the **Output** text box and it will look something like this:

```
"ff0000ff00"
```

Click on the **Next** button.&#x20;

You will be directed to the **Tags** tab.

#### Tags

The **Tags** tab allows you to add tags for your device type.

Tags are useful for easily finding and organizing your device types later on.

{% hint style="info" %}
This section is optional, and you may skip it without adding any tags.
{% endhint %}

To add a tag to a device type, simply type the tag and press `ENTER`. You can add any number of tags that are related to your device type. For example, if the device type is a beacon, you can use tags like `busy indicator`, `status light`, and `class C`.

<figure><img src="/files/M6UGL3x1T3vI4Y8Kt8Z2" alt=""><figcaption></figcaption></figure>

Click on the **Next** button.

You will be directed to the **Additional Parameters** tab.

#### Additional Parameters

The **Additional Parameters** tab allows you to provide additional parameters for your device type.

{% hint style="info" %}
This section is optional, and you may skip it without providing additional parameters.
{% endhint %}

In the Additional Parameters tab, you can enable extracting **radio** parameters and **battery** parameters from the uplink payload.&#x20;

**Radio**: Enabling the **Radio** option decodes RSSI and SNR from the payload.

* Turn on the **Take radio parameters from payload** slider button.&#x20;
* In the **Field name for RSSI** and **Field name for SNR** text boxes, type the keys exactly as they appear in your uplink payload formatter.

**Battery**: Enabling the **Battery** option decodes battery voltage from the payload.

* Turn on the **Take battery parameters from payload** slider button.&#x20;
* In the **Field name for battery value** text box, type the **key** exactly as it appears in your uplink payload formatter.&#x20;
* In the **Power consumption per cycle, mAh** text box, enter the **power consumption** of your device per transmission in **mAh**.
* Select the **battery type/chemistry** from the **Battery type** drop-down list.&#x20;
* In the **Capacity** text box, enter the **battery capacity** in **mAh**.

<figure><img src="/files/Shz8ZrY9QOLXKaOPuNIx" alt=""><figcaption></figcaption></figure>

Click on the **Next** button.&#x20;

You will be directed to the **Widgets** tab.

#### Widgets

The **Widgets** tab allows you to select the widgets that you want to use for data visualization in order to gain a better understanding of the data.

In the **Widgets** tab, click on the **+Add** **Widget** button.

<figure><img src="/files/wksCts1CdUjBAJ5JcpCi" alt=""><figcaption></figcaption></figure>

In the Select **Widget** modal, click on the **widget type** that you want to add, for example, **Chart**.

<figure><img src="/files/BIgGXioLlv9b8RCh6BVl" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
The complete instructions on how to configure each widget type can be found on the [Widgets](/get-started/widgets) page.
{% endhint %}

After adding the necessary widgets, click on the **Save** button to add the device type to your organization.

<figure><img src="/files/JfaRriCL8RIUgBo80hCh" alt=""><figcaption></figcaption></figure>

The new device type is listed on the **Device Type** page.

<figure><img src="/files/1A47MH3R84voveP4Bthp" alt=""><figcaption></figcaption></figure>

### Load From Repository


# Devices

This section provides instructions on how to add and manage devices within the Widgelix IoT cloud platform.

A **device** can be added to the Widgelix using its corresponding device type template.&#x20;

{% hint style="info" %}
Before adding a device, its corresponding device type must be added to the Widgelix.&#x20;
{% endhint %}

The device type template provides all the general settings for the device, such as basic information, uplink payload formatter and data fields, downlink payload formatter and data fields, radio and battery parameters, as well as widgets.

A device inherits from a device type, and you can configure individual devices with more specific settings such as network connectivity (network server), public address, time zone, online threshold, geolocation, and downlinks.

By correctly configuring the device type template, you can easily add new devices to Widgelix.

<figure><img src="/files/WJWYiSIC6LY6tNhBcquG" alt=""><figcaption></figcaption></figure>

To add a new device or view existing devices, click on **Devices** in the left menu.

If no device has been created within your organization yet, the **Devices - Create your first device** page will be displayed.

<figure><img src="/files/oJWDOMIMufGVxlV6mZiE" alt=""><figcaption></figcaption></figure>

Otherwise, the **Devices** page will be displayed, showing the list of previously created devices.

<figure><img src="/files/ZwezV7gZkXcWGALlvOGq" alt=""><figcaption></figcaption></figure>

## Adding a Device

Within the Widgelix IoT cloud platform, you can either individually add new devices using the **Add Device** option or import them in bulk through the **Bulk Import** option.

### Using Add Device Option

Click on the **+Add Device** button.

<figure><img src="/files/4eOWRdwdRF7KRj8bz39k" alt=""><figcaption></figcaption></figure>

The **Add Device** page will be displayed.

In the **Name** text box, enter the **name** of your device.

In the **Device id (DevEUI)** text box, enter the **DevEUI** of your device.&#x20;

{% hint style="info" %}
Device id or devEUI is a HEX string, for example, "0004A310001AB115"
{% endhint %}

Select the **device type** from the **Device Type** drop-down. The selected device type works as a template for your device.

To add geolocation information about your device, turn on the **Has coordinates** button switch. A new section will appear.

In the **Latitude** and **Longitude** text boxes, enter the **latitude** and **longitude** of your device, respectively.

<figure><img src="/files/xOhpsDzmMUtuQFHBxamj" alt=""><figcaption></figcaption></figure>

Alternatively, you can select the **geolocation** from the map:

Click on the **Pick From Map** button.

<figure><img src="/files/FhrfSCihlN3RfMTGb9la" alt=""><figcaption></figcaption></figure>

The **map** opens in a modal box.&#x20;

<figure><img src="/files/5GRSnWfDpTAuHpj9zHq5" alt=""><figcaption></figcaption></figure>

Use `Ctrl + Scroll` to zoom the map and click on the location where the device is physically positioned or going to be positioned.

<figure><img src="/files/Pq5KvwpQZm5rWIjEBk79" alt=""><figcaption></figcaption></figure>

Alternatively, you can type the full or a part of the **address** in the **Enter address** text box and choose it from the drop-down list if it appears in the list.

If the location is correct click on the **Save** button to add the coordinates to the device form and close the map modal box.

In the **Add Device** page, click on the **Save** button to add the device to your organization.

<figure><img src="/files/oEn36ZHFiZx3auz7CXD7" alt=""><figcaption></figcaption></figure>

Your new device is now listed on the **Devices** page.<br>

<figure><img src="/files/tDLgG1QrsHXSBCEWTrIw" alt=""><figcaption></figcaption></figure>

### Configuring a Device

After adding a new device to your organization, you can further **configure** it.

On the **Devices** page, click on the **name** of the device from the devices list.

<figure><img src="/files/WAR9UjGcbTQycp1AEANN" alt=""><figcaption></figcaption></figure>

The device page (for example, RCNM-Atrium) will be displayed and allows you to configure various parameters and settings.

<figure><img src="/files/H9jsFQQMLcNve2guHcH9" alt=""><figcaption></figcaption></figure>

You can configure the device The page consists of the following tabs:

* [Dashboard](/get-started/devices/dashboard)
* [History](/get-started/devices/history)
* [Downlinks](/get-started/devices/downlinks)
* [Events](/get-started/devices/events)
* [Settings](/get-started/devices/settings)

<figure><img src="/files/eKWFnoVQ8WWLiKdE8Pvf" alt=""><figcaption></figcaption></figure>

## Deleting a Device

A **device** can be deleted from the organization, and cannot be undone.

To delete a device, click on the **Settings** tab and then click on the **Delete** button.&#x20;

<figure><img src="/files/JyHdYyoT32mAPs7gSfQl" alt="" width="563"><figcaption></figcaption></figure>

Alternatively, you can click on the respective **delete (bin)** icon in the **device list**.

<figure><img src="/files/I1frVis5w9GI3X6AAHAQ" alt="" width="563"><figcaption></figcaption></figure>

The **Delete device** model will be displayed.

In the **text box**, type in the exact **name** of the **device**.

Click on the **Delete** button.

<figure><img src="/files/eIJOGHQ8bfYVZHmNETZE" alt="" width="375"><figcaption></figcaption></figure>

The **device** will be removed from your organization.

{% hint style="info" %}
The **Delete** operation can't be undone.
{% endhint %}


# Dashboard

The **Dashboard** tab displays all the widgets that you have added to the device type of that device. If you add widgets to a device type, all devices that inherit from that device type will receive the same widgets.

You can reconfigure the existing widgets, add new widgets to the dashboard, or remove existing widgets from the dashboard:

{% hint style="danger" %}
The changes you've made on the dashboard will be applied to all devices of the corresponding device type.
{% endhint %}

To edit the dashboard, click the **Edit** button to enable edit mode. Clicking the Edit button will display the **+ Add Widget** and **Save** buttons next to it.

<figure><img src="/files/ofyY8tBnl8ZdWuRbKPm1" alt=""><figcaption></figcaption></figure>

Click (or mouse over) the **Settings** button (cogwheel) to edit an existing widget.&#x20;

<figure><img src="/files/QoOc1z44NvnZg0AGDz70" alt=""><figcaption></figcaption></figure>

A drop-down toolbar will be displayed with the following buttons.

<figure><img src="/files/KvnnTSwwIMMXoZpwJ2av" alt=""><figcaption></figcaption></figure>

* **Edit** - To reconfigure the widget.
* **Copy/Clone** - To create an identical copy of the widget that can be reconfigured.
* **Delete** - To remove the widget from the dashboard.

To add a new widget, click on the **+ Add Widget** button.

{% hint style="info" %}
The complete instructions on how to add and configure each widget type can be found on the [Widgets](/get-started/widgets) page.
{% endhint %}

After editing the dashboard, click on the **Save** button to apply the changes.

{% hint style="danger" %}
The changes will apply to all devices of the corresponding device type.
{% endhint %}


# History

The **History** tab allows you to visualize data from selected fields of your device on an area chart over a period of time. By default, all data fields are enabled and shown on the chart.

<figure><img src="/files/CdNj9hIKT8vslQBVT1Ia" alt=""><figcaption></figcaption></figure>

You can remove a data field from the chart and add it back to the chart by clicking on the corresponding row of the table. This feature is useful when you want to compare trends in different data fields.

<figure><img src="/files/DBHLVq1LYY0a8cdClOtd" alt=""><figcaption></figcaption></figure>

For example, the following chart compares the relationship between temperature and humidity over time.

<figure><img src="/files/Tj3sBkdxnLKUzB80TxOz" alt=""><figcaption></figcaption></figure>

For data filtering, choose the desired timeframe using one of the following options:

* Click on the **text box** and select a predefined timeframe from the list. If the desired timeframe is not available, you can manually type a timeframe, such as '3 days', '7 weeks', etc. Note that '3 days' refers to the last three days, including today, for example. Here is a list of predefined timeframe presets: `1 hour`, `1 day`, `1 week`, `1 month`, and `1 year`.
* Define a custom date range by selecting the **start date** and **end date**, including the start time and end time too from the date pickers.

<figure><img src="/files/we6uIvDFBg7Gaiy4y1F8" alt=""><figcaption></figcaption></figure>


# Downlinks

The **Downlinks** tab allows you to configure and add downlinks. Once created, each downlink can be sent manually to the device.

To add a downlink, click on the **Add Downlink** button. The **Add Downlink** modal opens.

In the **Name** text box, enter a **name** for the downlink.

In the **Comment** text box, enter additional details about that downlink.

There are two options that you can enable by turning on the following toggle buttons:

* **Pass payload data to downlink** - pass the last uplink payload to the downlink.
* **Activate after uplink** - send the downlink after receiving an uplink.

The downlink payload can be configured using either the **Default** or **Custom** options:

**Default**:

In the **Default** tab, you can configure the downlink payload by providing suitable values for each data field. When you enter values, make sure that they are in the valid range and type.

{% hint style="info" %}
These data fields appear in the Add **Downlink** model box only if they have been added to the **device type** under the **Downlink Data**. To ensure the correct functioning of the downlink, a valid **downlink payload formatter** must also be added to the device type under the **Downlink Data.**
{% endhint %}

Click on the **Save** button.

<figure><img src="/files/Qy1TZ4FHVlsqDAitYaxi" alt="" width="394"><figcaption></figcaption></figure>

**Custom**:

In the **Custom** tab, you can write a custom **downlink payload decoder**, for example, something like this.

```
function decode(payload, params) { 
const red = ('00' + payload.red.toString(16)).slice(-2) 
const green = ('00' + payload.green.toString(16)).slice(-2) 
const blue = ('00' + payload.blue.toString(16)).slice(-2) 
const on = ('00' + payload.on.toString(16)).slice(-2) 
const off = ('00' + payload.off.toString(16)).slice(-2) 
return ${red}${blue}${green}${on}${off} 
}
```

Click on the **Save** button.

<figure><img src="/files/g9VzwN0WlDJH3MyNDFhZ" alt="" width="393"><figcaption></figcaption></figure>

Once added, the downlink will be displayed in the **Downlinks** tab. Similarly, you can add more downlinks that can be used to control different functionalities of a device.

Click on the **Send** button to send the downlink to the device.

<figure><img src="/files/avtZnEeeePvb4XgUPgTi" alt=""><figcaption></figcaption></figure>


# Events

When a [Rule ](/get-started/rule-engine)for a specific measurement is created, all events triggered by the rule are added to the **device's events database**.

The **Events** tab displays all the events associated with the device for a specified timeframe. These events are displayed in a table that includes **Message**, **Time Stamp**, and **Type**.

<figure><img src="/files/IXFKdhPeWt2Ru0c4X2fa" alt=""><figcaption></figcaption></figure>

You can download events within the required time range:

<figure><img src="/files/U7aiuE5mpleuuWVa3QZu" alt=""><figcaption></figcaption></figure>


# Settings

The **Settings** tab allows you to configure connectivity, add public links, load debugging data, generate reports, set time zone, and set geo-location.

**Connectivity:**

To receive or send data from or to the device, you need to add and configure the network server to which the device belongs.

<figure><img src="/files/gUNB9ISQ700GN0UTs46X" alt=""><figcaption></figcaption></figure>

In the **Connectivity** section, click on the light blue area displaying a **disconnected adapter** icon and the text '**Not Configured**'.

<figure><img src="/files/4uGY5ymAZxYiavJnt1yo" alt=""><figcaption></figcaption></figure>

The **Network Server** modal box opens. Select the network server from the list where your device is registered.

In the **Uplink** section, toggle the **Secure** button switch to turn it on.&#x20;

{% hint style="info" %}
The **API Key** text box is initially empty but it will be generated for your device after you click on the **Save** button.
{% endhint %}

Click on the **Save** button.

<figure><img src="/files/DZyPDXHXHHvvcowtmQnY" alt=""><figcaption></figcaption></figure>

Your network server is now shown in the **Connectivity** section.

<figure><img src="/files/v1WDghGJNJQ8Qaf7nuUS" alt=""><figcaption></figcaption></figure>

To view the API key, simply click on the network server listed under the **Connectivity** section.&#x20;

The **Network Server** modal box opens, and you can now see the API key associated with your device in the API Key text box.&#x20;

<figure><img src="/files/huilvvyJkoOsGYZrOjj7" alt=""><figcaption></figcaption></figure>

Copy the **API key** by clicking on the **Copy** button. You will need it when configuring the connectivity for Widgelix on your network server.

**Report:**

You can download the recorded values for the preferred data fields as a **CSV** (Comma Separated Values) file.&#x20;

To add data fields, click on the **Fields** text box and select each field one by one.&#x20;

<figure><img src="/files/qEnQ5adVJvQZk3cJZyoN" alt=""><figcaption></figcaption></figure>

For data filtering, choose the desired timeframe using one of the following options:

* Click on the **Range** text box and select a predefined timeframe from the list. If the desired timeframe is not available, you can manually type a range, such as '3 days' for example.

<figure><img src="/files/nFN3cI87gwqcwpCdEmZI" alt=""><figcaption></figcaption></figure>

* Define a custom date range by selecting the **start date** and **end date** from the date pickers.

<figure><img src="/files/2O4E1D2nioncfi2VEPHn" alt=""><figcaption></figcaption></figure>

Click on the **Get Report** button.

<figure><img src="/files/oksnXtBzPC7kKPgzlzWk" alt=""><figcaption></figcaption></figure>

The report will be downloaded as a CSV file.

<figure><img src="/files/1rdc57cXFgDT8ObFXLFU" alt=""><figcaption></figcaption></figure>

**Time zone:**

Click on the drop-down and select a time zone from the list that is applicable to the geolocation of your device.

<figure><img src="/files/qA2Bq62D79A0XSTmZR7S" alt=""><figcaption></figcaption></figure>

The time zone automatically updates and applies to all devices of that device type.

**Online Threshold:**

The device status (online/offline) can be determined based on whether an uplink is received from the device within the defined time period.

If an uplink is received within the defined time period, a **green dot** will display alongside the device image, and the **elapsed time** between the last uplink time and the current time will be shown, for example, `Last Seen: 5 minutes ago`.

<figure><img src="/files/SMi4uPfbRoVctaM9fyDq" alt=""><figcaption></figcaption></figure>

If there is no uplink received within the defined time period, a **red dot** will display alongside the device image, and the device status will be displayed as `Last Seen: never`

<figure><img src="/files/eR3bnDeWFaXrJpEizx4i" alt=""><figcaption></figcaption></figure>

Select one of the following predefined timeframes from the **dropdown text box** under the **Online Threshold**.

* `1 minute`
* `1 hour`
* `1 day` - this is the default timeframe.
* `1 week`
* `1 month`

You can also type a custom time frame in the dropdown text box, for example, `2 minutes`.

<figure><img src="/files/lVaS8f6HuC4hlG2qoF0f" alt=""><figcaption></figcaption></figure>

**Coordinates:**

The **Coordinates** section is only visible if you have enabled and set the geolocation of your device during its creation. To view the Coordinates section if it is not visible, toggle the **Enable** button.

You can add or update the existing coordinates by either directly typing them in the **Latitude** and **Longitude** text boxes or choosing them from the map by clicking the **Pick From Map** button.

Click on the **Save** button to apply the changes to the device.

{% hint style="info" %}
When you update the coordinates, they will be applied only to the particular device, not to the device type.
{% endhint %}

<figure><img src="/files/ONxSUGAXJwe8ydMUypNP" alt=""><figcaption></figcaption></figure>


# Global Map

This section contains instructions for viewing devices on a global map.

The **Global Map** allows you to see the location of all devices in your organization on a map if they have geolocation (latitude and longitude) associated with them.

Click on the **Global Map** in the left menu.&#x20;

<figure><img src="/files/FTZH0Yu4r7V2rZnmU7tt" alt=""><figcaption></figcaption></figure>

The **Global Map** page opens.

Use your mouse scroll button to **zoom in** or **zoom out** the map until you can see the map markers of the device.

<figure><img src="/files/ESFm18tqrV03rHeuF9OK" alt=""><figcaption></figcaption></figure>

Click on a **device icon** to view its information.

The information includes device id (DevID), device name, device type, last seen (date and time), and the data extracted from the payload including application data and metadata.&#x20;

<figure><img src="/files/OTyirqozhcrO6B8sMkKn" alt=""><figcaption></figcaption></figure>

\
\ <br>


# Widgets

This section describes how to create widgets that can help you visualize data and gain better insights.

In Widgelix, widgets can be configured to display data, while some widgets enable users to perform functions or access services.

Widgets are available in Device Types, Devices, Global Dashboards, and Solutions.

Widgets can be divided into two categories:

* Basic widgets - these widgets are directly linked to the data fields.&#x20;
* Advanced widgets - these widgets are linked to the flowchart of a solution.

The following table lists all the widgets that are available in Widgelix.

| Widget                                                  | Available in                             | Basic / Advanced / Other |
| ------------------------------------------------------- | ---------------------------------------- | ------------------------ |
| [Gauge](/get-started/widgets/gauge)                     | Device Types, Devices                    | Basic                    |
| [Battery](/get-started/widgets/battery)                 | Device Types, Devices                    | Basic                    |
| [Chart](/get-started/widgets/chart)                     | Device Types, Devices                    | Basic                    |
| [Map](/get-started/widgets/map)                         | Device Types, Devices                    | Basic                    |
| [Digital](/get-started/widgets/digital)                 | Device Types, Devices                    | Basic                    |
| [Header](/get-started/widgets/header)                   | Device Types, Devices                    | Basic                    |
| [Image](/get-started/widgets/image)                     | Device Types, Devices                    | Basic                    |
| [Level](/get-started/widgets/level)                     | Device Types, Devices                    | Basic                    |
| [Boolean](/get-started/widgets/boolean)                 | Device Types, Devices                    | Basic                    |
| [Downlink Button](/get-started/widgets/downlink-button) | Device Types, Devices                    | Basic                    |
| [Scatter Plot](/get-started/widgets/scatter-plot)       | Device Types, Devices                    | Basic                    |
| [Math](/get-started/widgets/math)                       | Device Types, Devices                    | Basic                    |
| [Log Chart](/get-started/widgets/log-chart)             | Device Types, Devices                    | Basic                    |
| [Floor Plan](/get-started/widgets/floor-plan)           | Global Dashboards                        | Basic                    |
| [Asset Map](/get-started/widgets/asset-map)             | Global Dashboards                        | Basic                    |
| [Table](/get-started/widgets/table)                     | Global Dashboards                        | Basic                    |
| [Map](/get-started/widgets/map)                         | Device Types, Devices, Global Dashboards | Advanced                 |
| [Chart](/get-started/widgets/chart)                     | Device Types, Devices, Global Dashboards | Advanced                 |
| [Sankey](/get-started/widgets/sankey)                   | Device Types, Devices, Global Dashboards | Advanced                 |
| [Heatmap](/get-started/widgets/heat-map)                | Device Types, Devices, Global Dashboards | Advanced                 |
| [Report](/get-started/widgets/report)                   | Device Types, Devices, Global Dashboards | Advanced                 |

The **Select Widget** modal box can be opened by clicking on the **+Add Widget** button.

<figure><img src="/files/GOiB8wsrXVYJOkqwycVX" alt="" width="444"><figcaption></figcaption></figure>

In the **Select Widget** modal, select the widget that you want to configure and add to the dashboard.

<figure><img src="/files/9G5weHIgaYIEnPH2gpqA" alt="" width="490"><figcaption></figcaption></figure>

&#x20;


# Gauge

A **Gauge** widget is a type of **circular-arc graph** that displays the value of a measured parameter inside the arc. A needle points to the arc to show the value's location on the circle. Gauge widgets can be used in various contexts to provide a quick and easy way to understand the status or level of a measured value.

{% hint style="info" %}
The Gauge widget is available in Device Types, Devices, and Global Dashboards.
{% endhint %}

In the **Widget options** modal, enter a **name** as the **label** for your widget in the **Name** text box, and select the appropriate **data field** from the **Data field** drop-down list.

By default, the first row of the **range entity** is populated with '**from'** (lower bound) and '**to'** (upper bound) values that you have configured in the **Device Types -> Data fields** section in the **Uplink** tab, allowing you to apply a single color to the whole gauge.&#x20;

To allow users to visualize different ranges of a measured value, such as soil moisture levels, a gauge can be divided into multiple ranges.

Click on the **+** button. The '**To'** text box of the first row enables you to enter the '**to'** value of the first range. As you enter the value in the **'To'** text box of the first row, it will automatically be added to the **'From'** text box of the second row, ensuring that the two ranges do not overlap. To add more ranges to the gauge, simply click the **+** button to add a new row. By default, each new range will start from the **'To'** value of the previous range, ensuring that the ranges do not overlap.

Select a color from the **color picker** in each row to assign a unique color to that range.

{% hint style="info" %}
By assigning specific colors to each range, users can quickly determine the status of the measured value and take appropriate action as needed.
{% endhint %}

Click on the **Gradient** checkbox if you want to enable a smooth transition of colors between each range.

To add a **color** to the **background** of the widget, click on the **Background color** box and choose a color from the **color picker**.

Click on the **Save** button.&#x20;

<figure><img src="/files/voFyoqhXNqoQ22b30ncX" alt="" width="344"><figcaption></figcaption></figure>

The resulting **Gauge** widget looks something like this:

<figure><img src="/files/V04eOJb3gijjekTaWtF3" alt="" width="300"><figcaption></figcaption></figure>


# Battery

The **battery** widget can be used to display the battery level of a device, typically as a **percentage**, **Volts**, or **mVolts**. By monitoring the battery level, you can better understand how long you can continue to use the device before needing to replace or recharge the batteries.

In the **Widget options** modal box, enter a **name** as the label for your widget in the **Name** text box, and select the **data field** bound with the battery voltage from the **Data field** drop-down list.

To add a **color** to the **background** of the widget, click on the **Background color** box and choose a color from the **color picker**.

Click on the **Save** button.

<figure><img src="/files/GR3Es1pqJSFKDBjmeSsK" alt="" width="328"><figcaption></figcaption></figure>

The resulting **Battery** widget looks something like this:

<figure><img src="/files/4KktUaxZpTFrCbvL610K" alt="" width="299"><figcaption></figcaption></figure>


# Map

The **Map** widget allows you to view the location of a device on a map only if it has been configured with geolocation (latitude and longitude).

In the **Widget options** modal, enter a **name** as the label for your widget in the **Name** text box.

You can display the device position on the map in one of the following ways:

**Current position:**&#x20;

This will show the current/live position of the device on the map.

Click on the **Current position** checkbox to **select** it.

Click on the **Save** button.

<figure><img src="/files/Ps0cnEpKMz8P2SncyMWy" alt="" width="328"><figcaption></figcaption></figure>

The resulting **Map** widget looks something like this:

<figure><img src="/files/Zz59eU45ddymtpI7sQW5" alt=""><figcaption></figcaption></figure>

**As an array of points:**

This will display the device's position over the selected timeframe as a route consisting of a series of points with directions.

Click on the **Current position** checkbox to **de-select** it.

Choose the desired timeframe using one of the following options:

* Click on the **Last from** text box and select a predefined timeframe from the list. If the desired timeframe is not available, you can manually type a timeframe, such as '3 days', '7 weeks', etc. Note that '3 days' refers to the last three days, including today, for example. Here is a list of predefined timeframe presets: `1 hour`, `1 day`, `1 week`, `1 month`, and `1 year`.
* Define a custom date range by selecting the **start date** and **end date**, including the start time and end time too from the date pickers.

Click on the **Save** button.&#x20;

<figure><img src="/files/EF7bPDhJ1yJA0mqTNFWY" alt="" width="327"><figcaption></figcaption></figure>

The resulting **Map** widget looks something like this:

<figure><img src="/files/ylZv06CDYYLMLx1yhLtx" alt=""><figcaption></figcaption></figure>


# Chart

The **chart** widget allows you to view data from one or more data fields on a  **line** or **bar** chart.

In the **Widget options** modal, configure the following settings:

In the **Name** text box, enter a **name** as the **label** for your widget.

In the **Data fields** drop-down list, select the **data field** that you want to add as the data source. Click on the **+** button to add more data fields. You can assign different colors for each data field using the **color picker** associated with each drop-down list.

Click on the **Last from** text box and select a predefined timeframe from the list. If the desired timeframe is not available, you can manually type a timeframe, such as '3 days', '7 weeks', etc. Note that '3 days' refers to the last three days, including today, for example. Here is a list of predefined timeframe presets: `1 hour`, `1 day`, `1 week`, `1 month`, and `1 year`.

In the **Chart type** drop-down list, select either a **line chart** or a **bar chart**.

To add a **color** to the **background** of the widget, click on the **Background color** box and choose a color from the **color picker**.

Click on the **Save** button.

<figure><img src="/files/fXR2wp8Q5MPtgy9Z3DQf" alt="" width="328"><figcaption></figcaption></figure>

The resulting **Chart** widget looks something like this:

<figure><img src="/files/nOGWCEOhXblKYbkmNKmw" alt=""><figcaption></figcaption></figure>


# Digital

The **digital** widget allows you to simply view the currently measured value of a data field.

If you select the **Digital** widget from '**Device Types**' or '**Devices**', configure the settings in the **Widget options** modal as explained below:

In the **Name** text box, enter a **name** as the **label** for your widget.

In the **Data field** drop-down list, select the **data field** that you want to add as the data source.

To add a **color** to the **background** of the widget, click on the **Background color** box and choose a color from the **color picker**.

Click on the **Save** button.

<figure><img src="/files/gA5vfBYRaQqOluVUutog" alt="" width="327"><figcaption></figcaption></figure>

If you select the **Digital** widget from the '**Global Dashboards**', configure the settings in the **Widget options** modal as explained below:

In the **Name** text box, enter a **name** as the **label** for your widget.

In the **Device type** drop-down list, select the **device type**.

In the **Device** drop-down list, select the **device**.

In the **Data field** drop-down list, select the **data field** that you want to add as the data source.

To add a **color** to the **background** of the widget, click on the **Background color** box and choose a color from the **color picker**.

Click on the **Save** button.

<figure><img src="/files/pr1n9PqfhsMfo47wYdus" alt="" width="327"><figcaption></figcaption></figure>

The resulting **digital** widget looks something like this:<br>

<figure><img src="/files/Xv20p6B07DUcZOKdFQma" alt="" width="375"><figcaption></figcaption></figure>


# Level

This **level** widget is a circular display that presents values numerically and graphically, representing them as a fraction of the entire volume of the circle.

{% hint style="info" %}
The level widget can be used to display any range of values in a data field by providing the minimum and maximum values for the data field. It automatically adjusts based on the provided range.
{% endhint %}

In the **Widget options** modal, configure the following settings:

In the **Name** text box, enter a **name** as the **label** for your widget.

In the **Data field** drop-down list, select the **data field** that you want to use as the data source.

To add a **color** to the **fill level**, click on the **Level color** box and choose a color from the **color picker**.

To add a **color** to the **background** of the widget, click on the **Background color** box and choose a color from the **color picker**.

Click on the **Save** button.

<figure><img src="/files/9miQLeODibCgkjeuigoT" alt="" width="328"><figcaption></figcaption></figure>

The resulting **level** widget will be something like this:

<figure><img src="/files/CX0t7W7vffkd9hGElOnQ" alt="" width="375"><figcaption></figcaption></figure>


# Header

The **header** widget allows you to create headings on the dashboard. This enables you to structure dashboards with a large number of widgets by grouping them under each heading. For example, you can group widgets that display climate data such as temperature, humidity, and pressure.

In the **Widget options** modal, configure the following settings:

In the **Name** text box, enter a **name** to identify the widget. Unlike other widgets, the entered name will not be displayed on the widget.

In the **Text** text box, enter the **heading** that you want to display on the widget.

To add a **color** to the **background** of the widget, click on the **Background color** box and choose a color from the **color picker**.

Click on the **Save** button.

<figure><img src="/files/OT9uVNDs8ttNxECGlxHh" alt="" width="327"><figcaption></figcaption></figure>

The resulting **header** widget looks something like this:

<figure><img src="/files/5Keyx3Lcl5kHC5812gTU" alt=""><figcaption></figcaption></figure>


# Image

The **image** widget allows you to add images to the dashboard, such as an image of the device, the manufacturer's logo, etc.

In the **Widget options** modal, configure the following settings:

In the **Name** text box, enter a **name** to identify the widget. Unlike other widgets (except the **header** widget), the entered name will not be displayed on the widget.

In the **image** box, click on the **camera** button and browser the image that you want to insert.

To add a **color** to the **background** of the widget, click on the **Background color** box and choose a **color** from the **color picker**.

Click on the **Save** button.

<figure><img src="/files/vE84uujo3xMoZ46rMIM0" alt="" width="327"><figcaption></figcaption></figure>

The resulting **image** widget looks something like this:

<figure><img src="/files/XivrOvxXszZlROctlUix" alt="" width="155"><figcaption></figcaption></figure>


# Boolean

The **boolean** widget allows you to display a status based on whether the measured value is **true** or **false**. If the measured value is **greater than zero** (value > 0), the status is considered **true** otherwise it is **false**. The boolean widget is suitable for displaying statuses like alarm, water leak, tamper, door open, etc.

In the **Widget options** modal, configure the following settings:

In the **Name** text box, enter a **name** as the **label** for your widget.

In the **Data field** drop-down list, select the **data field** to be used as the **data source**.

In the **Positive text** text box, enter a **text** to display if the measured value is **positive**.

In the **Negative text** text box, enter a **text** to display if the measured value is **negative**.

To add a **color** to the **background** of the widget, click on the **Background color** box and choose a **color** from the **color picker**.

Click on the **Save** button.

<figure><img src="/files/NvtsewGSSo1AeEdZGD8a" alt="" width="328"><figcaption></figcaption></figure>

The resulting **boolean** widget looks something like this:

<figure><img src="/files/rsBpNpKt1JSFICLuxgYn" alt="" width="275"><figcaption></figcaption></figure>


# Scatter Plot

The **scatter plot** widget displays the relationship between two numerical data fields, which is useful for identifying patterns, trends, and correlations between variables. Each data point is represented by a dot or marker on the graph. The horizontal axis typically represents the independent variable, while the vertical axis represents the dependent variable.

In the **Widget option**s modal, configure the following settings:

In the **Last from text** box, select or type in the **timeframe** that you want to display data on the chart.

In the **X axis data field** drop-down, select the **data field** that you want to represent on the **X-axis**.

In the **Y axis data field** drop-down, select the **data field** that you want to represent on the **Y-axis**.

Click on the **Plot color** box and choose a color from the color picker for the **data markers**.

To add a **color** to the **background** of the widget, click on the **Background color** box and choose a **color** from the **color picker**.

Click on the **Save** button.

<figure><img src="/files/04X5CwxahDFo4hIpe6QP" alt="" width="327"><figcaption></figcaption></figure>

The resulting **scatter plot** widget looks something like this:

<figure><img src="/files/o0gxlmpaodmOc3qgpf1x" alt="" width="563"><figcaption></figcaption></figure>


# Math

The **Math** widget allows you to apply a math function to the measured data of a data field within a specified time frame.&#x20;

{% hint style="info" %}
The Math widget is available on device types, devices, and global dashboards.
{% endhint %}

The following math functions are currently available:

* **Min** - finds the minimum value of a data set.
* **Max** - finds the maximum value of a data set.
* **Sum** - finds the sum of a data set.
* **Average** - finds the average value of a data set.

In the **Widget options** modal configure the following settings:

In the **Name** text box, enter a **name** as the label to identify your widget.

In the **Data field** drop-down, select the **data field** that you want to input for the math function.

In the **Math type** drop-down, select the **math function** that you want to apply.

Choose the desired timeframe using either the **LastFrom** text box or the **Date range** date/time pickers. Read the [**Map** ](#map)widget section to learn more about how to select a timeframe.

To add a **color** to the **background** of the widget, click on the **Background color** box and choose a **color** from the **color picker**.

Click on the **Save** button.

<figure><img src="/files/hfFgjGplM6GIqgHmM7ak" alt="" width="327"><figcaption></figcaption></figure>

The resulting **Math** widget looks like this:

<figure><img src="/files/u4UdLTAkILJoLmyDZu3J" alt=""><figcaption></figcaption></figure>


# Floor Plan

The **Floor Plan** widget enables you to display various sensor data on an image that represents objects such as a building floor plan, machine, production line, or any other structure. The image works as a background image and can be a 2D or 3D image in any format. With this widget, you can place **widgets** or **boolean shapes** on the background image to represent the physical sensor locations and display data on them. This approach of visualizing data on the background image offers enhanced insights compared to using standalone widgets.

{% hint style="info" %}
The Floor plan widget is available on the global dashboards.
{% endhint %}

In the **Widget options** modal, configure the following:

In the **Name** text box, enter a **name** to identify your widget on the dashboard.

Click on the **Add floor** button.

<figure><img src="/files/PeLFHzvssGuWPqmn9MQK" alt="" width="563"><figcaption></figcaption></figure>

In the **Floor name** text box enter a **name** to identify the floor. The provided name will be displayed on the top-left corner of the widget.&#x20;

In the '**Button text'** text box, enter a **name** to display on the button as the button label. The buttons you added are displayed on the bottom-right corner of the widget. You can add a button to each floor. You can navigate to any floor by clicking on the respective button.

Click on the **Upload plan** button, then browse and select the **floor plan** (image file) from your computer.&#x20;

{% hint style="info" %}
The image file size limit is 300 kB.&#x20;
{% endhint %}

Click on the **Save** button. The file will begin uploading.&#x20;

<figure><img src="/files/WycApAKCmqUIznYWqBTv" alt=""><figcaption></figcaption></figure>

Once the file has finished uploading, the image will be displayed on the preview workspace.

<figure><img src="/files/D0pf8tcHoUgAu6PqqUSJ" alt="" width="563"><figcaption></figcaption></figure>

You can display data on the floor plan (or any background image) using the following boolean shapes and widgets:

1. **Circle** - displays the status in a circle based on whether the measured value is true or false.
2. **Square** -  displays the status in a square based on whether the measured value is true or false.
3. **Digital** - a widget that displays measured data for one or more data fields.

<figure><img src="/files/TJRQbrekwTV8B2olKfJk" alt=""><figcaption></figcaption></figure>

### Circle

The **Circle** is a boolean shape that allows you to apply different color overlays to the selected area on the floor plan, based on the measured value's condition. If the value is true (`value > 0`), an overlay color is applied, while a different overlay color is used for false (`value <= 0`). Optionally you can display a text alert on the shape based on the current status.

In the **Circle options** modal configure the following settings:

In the **Circle name** text box, enter a **name** to identify the circle within your floor plan.

Click on the **Device Type** drop-down and select the **device type** from the list.

Click on the **Device** drop-down (this will list all the devices for the selected device type above) and select the **device** from the list.

Click on the **Data field** drop-down and select the **data field** from the list as the data source.

In the '**Positive text'** text box, enter the text that you want to display if the measured value is positive. Then click on the **color picker** (next to the 'Positive text') to select a color for the fill color (transparent overlay) of the circle. When the circle receives a 'positive' or 'true' status, it will change to the chosen color. If you haven't chosen a color, the default overlay color will be green.

In the '**Negative text'** text box, enter the text that you want to display if the measured value is negative. Then click on the **color picker** (next to the 'Negative text') to select a color for the fill color (transparent overlay) of the circle. When the circle receives a 'negative' or 'false' status, it will change to the chosen color. If you haven't chosen a color, the default overlay color will be red.

If you do not want to display the text alert on the shape, turn off the '**Show text**' button.

Click on the **Save** button. The **Circle options** modal will close.

<figure><img src="/files/O9buH4558bRcLUa8GkJ7" alt="" width="394"><figcaption></figcaption></figure>

Now the circle has been added to the floor plan.&#x20;

Drag and drop the circle onto the floor plan where you want to highlight the area to which the measured status applies. You can resize the circle using its resize points (click on the circle first to show the resize points).

<figure><img src="/files/gOzIMpcY7SPZZJ9zsvNJ" alt=""><figcaption></figcaption></figure>

### Square

The **Square** is a boolean shape that allows you to apply different color overlays to the selected area on the floor plan, based on the measured value's condition. If the value is true (`value > 0`), an overlay color is applied, while a different overlay color is used for false (`value <= 0`). Optionally you can display a text alert on the shape based on the current status.

In the **Square options** modal configure the following settings:

In the **Square name** text box, enter a **name** to identify the square within your floor plan.

Click on the **Device Type** drop-down and select the **device type** from the list.

Click on the **Device** drop-down (this will list all the devices for the selected device type above) and select the **device** from the list.

Click on the **Data field** drop-down and select the **data field** from the list as the data source.

In the '**Positive text'** text box, enter the text that you want to display if the measured value is positive. Then click on the **color picker** (next to the 'Positive text') to select a color for the fill color (transparent overlay) of the square. When the square receives a positive or true status, it will change to the chosen color. If you haven't chosen a color, the default overlay color will be green.

In the '**Negative text'** text box, enter the text that you want to display if the measured value is negative. Then click on the **color picker** (next to the 'Negative text') to select a color for the fill color (transparent overlay) of the square. When the square receives a positive or true status, it will change to the chosen color. If you haven't chosen a color, the default overlay color will be red.

If you do not want to display the text alert on the shape, turn off the '**Show text**' button.

Click on the **Save** button. The **Square options** modal will close.

<figure><img src="/files/Xa0VgNKI89Dquv4vHM4y" alt="" width="393"><figcaption></figcaption></figure>

Now the square has been added to the floor plan.&#x20;

Drag and drop the square onto the floor plan where you want to highlight the area to which the measured status applies. You can resize the square using its resize points (click on the square first to show the resize points)

<figure><img src="/files/r0g7iFerlDM5I8xxQ4rC" alt=""><figcaption></figcaption></figure>

### Digital

The **Digital** widget allows you to display measured values of up to 2 data fields on a circle.

In the **Digital options** modal, configure the following settings:

In the **Digital name** text box, enter a **name** to identify the digital widget within your floor plan.

In the **Device type** drop-down list, select the **device type**.

In the **Device** drop-down list, select the **device** (this will list all the devices for the selected device type above).

In the **Data fields** drop-down list, select the **data field** that you want to display the value on the circle (this will list all the data fields for the selected device above).

<figure><img src="/files/7R6J5gnMGOGaCmvwQFdA" alt="" width="394"><figcaption></figcaption></figure>

Click on the **+** button if you want to add the second data field.

{% hint style="info" %}
If you added 2 data fields, you can remove one of the data fields by clicking on the **x** button.
{% endhint %}

<figure><img src="/files/IdYP2OTZqyrhmLGD1UjG" alt="" width="393"><figcaption></figcaption></figure>

Click on the **Save** button.

The resulting **Digital** widget will be something like this:

<figure><img src="/files/S0KlB9VrtVbJSSLgXSQc" alt="" width="278"><figcaption></figcaption></figure>

{% hint style="info" %}
You can add more floors to the widget by clicking on the **Add floor** button.
{% endhint %}

After adding all the boolean shapes and widgets onto the floor plan, click on the **Save** button in the **Widget options** modal.

The **Floor plan** widget is now added to the dashboard, and it looks something like this:

<figure><img src="/files/T4MCLebK35rjXVzMxd9v" alt=""><figcaption></figcaption></figure>


# Asset Map

The Asset map widget allows you to view the current position of a device or its directional path within a selected timeframe using a set of points that represent the recorded data locations.

{% hint style="info" %}
The Asset Map widget is available on the global dashboards.
{% endhint %}

In the **Widget options** modal, configure the following:

In the **Name** text box, enter a name to identify the asset map within the dashboard.

In the **Device Type** drop-down, select the **device type**.

In the **Data field** drop-down, select the **data field** that you want to display on the map.

In the **Devices** text box, select the **device** or **devices** that you want to display on the map. You can select multiple devices for the selected device type.

<figure><img src="/files/1Z4RMNmbm1HAX1HNmGdX" alt=""><figcaption></figcaption></figure>

You can display a device on the map in two ways: either by its **current position** or by showing a **directional path with a set of points**.

### **Directional path with a set of points**

This is the default option to display a device on the map.&#x20;

Click on the '**Path color**' color picker and select the color to apply to both the path and the points.

Choose the desired timeframe using one of the following options:

* Click on the **Last from** text box and select a predefined timeframe from the list. If the desired timeframe is not available, you can manually type a timeframe, such as '3 days', '7 weeks', etc. Note that '3 days' refers to the last three days, including today, for example. Here is a list of predefined timeframe presets: `1 hour`, `1 day`, `1 week`, `1 month`, and `1 year`.
* Define a custom date range by selecting the **start date** and **end date**, including the start time and end time too from the date pickers.

### **Current position**&#x20;

Click on the **Current position** checkbox. The Path color, Last from, and Time range UI controls will hide.&#x20;

Enabling this option will show the current/live position of the device on the map.

You can add more **Device Types** by clicking on the **+** button.

The following Widget options modal is configured for 4 Device types, for example:

<figure><img src="/files/m1t3s9bP9gBLeRSeNIb8" alt=""><figcaption></figcaption></figure>

Click on the **Save** button to save the configuration.

The resulting **Asset map** widget will look something like this:

<figure><img src="/files/nZUHZEEBgzrW8K9Ct0jF" alt=""><figcaption></figcaption></figure>


# Heat Map

A heat map is a graphical representation of data where individual values are depicted using colors. It is commonly used to visualize patterns, trends, and variations in data, especially when dealing with large datasets. In a heat map, each data point is assigned a specific color based on its value, and the colors are typically arranged in a grid format.

In the **Widget options** modal, configure the following:

In the **Name** text box, enter a **name** to identify the widget.

In the **Solution** drop-down list, select a **solution** you already created in the [**Solutions**](broken://pages/5Tp7ZQOMNBoq0IDRoWNq).

In the **Solution output** drop-down list, select a **General** node in the solution flowchart that you want to set as the output.

To add a **color** to the **background** of the widget, click on the **Background color** box and choose a **color** from the **color picker**.

Click on the **Save** button.

<figure><img src="/files/ikG9FEb3syBWUcsTpmVm" alt="" width="328"><figcaption></figcaption></figure>


# Log Chart

The **Log Chart** widget allows you to display one or more data fields on a line or bar chart, and it enables you to download the historical data as a **CSV** file.

In the **Widget options** modal, configure the following:

In the **Name** text box, enter a **name** to identify the **log chart** within the dashboard.

In the **Data field** drop-down, select the **data field** that you want to display on the chart. You can add more **data fields** to the chart by clicking on the **+** button. You can also apply different colors to data fields by choosing a color from the color picker associated with each.

In the **Chart type** drop-down, select either **Line** or **Bar** as the chart type.

To add a **color** to the **background** of the widget, click on the **Background color** box and choose a **color** from the **color picker**.

Click on the **Save** button.

<figure><img src="/files/jVed64DsKaop5m0z207c" alt="" width="327"><figcaption></figcaption></figure>

The resulting **Log Chart** widget looks like this: Click on the **Get Report** button to download the historical data as a CSV file.

<figure><img src="/files/8Pyo6r7Mis8CwL46nNBt" alt=""><figcaption></figcaption></figure>


# Downlink Button

The downlink button allows you to manually trigger a downlink by clicking on it.

In the **Widget options** modal, configure the following:

In the **Name** text box, enter a **name** to display on the button as the label.

In the **Downlink name** drop-down list, select the name of the **downlink** you already configured in the **Downlinks** tab.

To add a **color** to the **background** of the widget, click on the **Background color** box and choose a **color** from the **color picker**.

Click on the **Save** button.

<figure><img src="/files/YKnaPUbRg6GdMwFX00W5" alt="" width="328"><figcaption></figcaption></figure>

The resulting **Downlink Button** widget looks like this:

<figure><img src="/files/Qse1m9ZXWIz3hYQjpnWg" alt=""><figcaption></figcaption></figure>


# Sankey

A **Sankey** diagram is a visualization used to present a flow from one set of values to another.

In the **Widget options** modal, configure the following:

In the **Name** text box, enter a **name** to identify the widget.

In the **Solution** drop-down list, select a **solution** you already created in the [**Solutions**](broken://pages/5Tp7ZQOMNBoq0IDRoWNq).

In the **Solution output** drop-down list, select a **General** node in the solution flowchart that you want to set as the output.

To add a **color** to the **background** of the widget, click on the **Background color** box and choose a **color** from the **color picker**.

Click on the **Save** button.

<figure><img src="/files/ikG9FEb3syBWUcsTpmVm" alt="" width="328"><figcaption></figcaption></figure>


# Report

The **Report** widget enables you to generate a downloadable report link based on the execution of the flowchart in a solution.

In the **Widget options** modal, configure the following:

In the **Name** text box, enter a **name** to identify the widget.

In the **Solution** drop-down list, select a **solution** you already created in the [**Solutions**](broken://pages/5Tp7ZQOMNBoq0IDRoWNq).

In the **Solution output** drop-down list, select a **General** node in the solution flowchart that you want to set as the output.

To add a **color** to the **background** of the widget, click on the **Background color** box and choose a **color** from the **color picker**.

Click on the **Save** button.

<figure><img src="/files/ikG9FEb3syBWUcsTpmVm" alt="" width="328"><figcaption></figcaption></figure>

The resulting **Report** widget looks like this:

<figure><img src="/files/JIBMLuvw4xK8TbL1duEU" alt=""><figcaption></figcaption></figure>


# Table

The **Table** widget enables you to present sensor data from devices in a table view, along with the device name and 'last seen' status (optional). Additionally, the table supports pagination.

In the **Widget options** modal, configure the following settings:

In the **Name** text box, enter a **name** as the **label** for your widget.

In the **Device type** drop-down list, select the **device type**.

In the **Devices** text box, select the **devices** that you want to add to the table. You can select multiple devices that belong to the selected device type.

From the **Data fields** drop-down list, choose the **data field** you wish to display in the table. You can select additional data fields by clicking the **+** button.

Turn on the **Show last seen** button to add the '**Last seen**' column to the table.

To add a **color** to the **background** of the widget, click on the **Background color** box and choose a color from the **color picker**.

Click on the **Save** button.

<figure><img src="/files/rmV3lxK1xIuN5Iz0z9Ml" alt="" width="491"><figcaption></figcaption></figure>

The resulting **Table** widget looks something like this:

<figure><img src="/files/jem43GZoeqxvGIwY35wJ" alt=""><figcaption></figcaption></figure>


# Organization

This section provides instructions on how to create organizations, set up company profiles, and manage users.

## Creating an Account

Go to the Widgelix landing [page](https://widgelix.com/).&#x20;

Select the **Try For Free** button.

<figure><img src="/files/nkkuQ8DsYLybVbytmML8" alt=""><figcaption></figcaption></figure>

On the next page, select the **Sign up** button.

<figure><img src="/files/625kpQhINuv57bvPmoH4" alt=""><figcaption></figcaption></figure>

On the **Register** page, provide your **first name**, **last name**, **email**, and **password**.

Accept the terms of service and privacy policy.

Select the **Create account** button.

<figure><img src="/files/Kk61qqiIOMEUj6eiYEId" alt=""><figcaption></figcaption></figure>

Once you register and log into Widgelix, the first step is to set up your company profile under the default organization or by creating a new organization. Following that, you can add users to your organization and manage their user roles.

## Creating a New Organization

Widgelix allows you to add multiple organizations under your account.&#x20;

{% hint style="info" %}
By default, your account includes one organization.
{% endhint %}

Click on the organization name located at the top-left corner of the page under the Widgelix logo.

<figure><img src="/files/f07SnXbBy8FK2ZYpWEBC" alt=""><figcaption></figcaption></figure>

In the modal box, click on the **+ Create new organization** button.

A new organization named **Default** will be added to the list of available organizations under **Choose an organization**.

<figure><img src="/files/puZp7D7njwCuwDNKLXAZ" alt="" width="491"><figcaption></figcaption></figure>

If you want to switch to the new organization now, just select it.&#x20;

You can switch between any organization later by selecting the organization from the same modal box.

{% hint style="info" %}
Only the user who created an organization can access it and create other users. Users from other organizations can't access it.
{% endhint %}

{% hint style="danger" %}
You cannot delete an organization once you create it.
{% endhint %}

## Setting up the Company Profile

Switch to the organization you want to set up the company profile.

Click on **Organization** in the left menu. The **Organization** page (titled as '**Default**' unless you set a name) will open.

<figure><img src="/files/acjCgjn6yp5Jdvj5XsgD" alt=""><figcaption></figcaption></figure>

Click on the **settings** icon (cogwheel) next to the organization (company) name. For a newly created organization, the name is displayed as '**Default**'

<figure><img src="/files/CpUaFL8WlAqMslbLeRCb" alt=""><figcaption></figcaption></figure>

The **About company** modal opens.

Enter your **company name** in the **Company name** text box.

Click on the **Upload logotype** button to browse and upload your **company logo**.

Click on the **Save** button.

<figure><img src="/files/xyUyca6hgqB9NjOyHPhn" alt="" width="375"><figcaption></figcaption></figure>

## Adding Users and Assigning Permissions

Widgelix allows you to create user accounts with different permission levels.

After you logged in to Widgelix using your admin account, you can add more users to your organization (the maximum number of users are depending on your subscription plan) and assign their user rights.

{% hint style="info" %}
An admin account is created when you [register](https://app.widgelix.com/auth/register) with the Widgelix IoT cloud.&#x20;
{% endhint %}

The Users table lists the **name**, **email**, **role**, and **last seen** status of each user. The **last seen** state indicates whether the user is **online** or **offline**. A green or red dot is displayed alongside each user's avatar to show their online and offline status visually, respectively.

Click on the **+ Add user** button.

<figure><img src="/files/S3YGS3g47cf0pvuxpRlS" alt=""><figcaption></figcaption></figure>

The **Add new user** modal opens.

Enter **first name**, **last name**, and **email address** in the relevant text boxes.

Select the **role** that you want to assign to the user from the **Role** drop-down. Widgelix provides the following roles:

* **Admin** - the user is able to add and edit objects, such as users, device types, devices, rules, etc.
* **Contributor** - the user is able to add and edit objects within the account, such as device types, devices, rules, etc.
* **Viewer** - the user is only able to view objects.

{% hint style="info" %}
The **Can delete** button can only be turned on if you create **Admin** or **Contributor** user roles. With this option turned on, those users can delete objects within the account, such as user accounts (only admins can), device types, rules, devices, and more.
{% endhint %}

Click on the **+Add** button.<br>

<figure><img src="/files/EuVP9ENy1yYXAhdgBWfH" alt="" width="375"><figcaption></figcaption></figure>

A password link will be sent to the user's email so the user can create it on their own. Open the email and click on the **Click to set your password** link.

<figure><img src="/files/qbZxxzFTlNZufGisqHeI" alt="" width="320"><figcaption></figcaption></figure>

{% hint style="info" %}
If another user adds your email to their organization, it will appear in your list of organizations.
{% endhint %}

## Editing a User Profile

Once a user profile has been set up by the admin, a user can edit their profile to change their avatar (profile picture), first name, and last name.

{% hint style="info" %}
A profile picture with two letters, typically representing the initials of a person's first name and last name, is often referred to as an **initials avatar**. The initials are commonly used as a visual representation of the user when a full profile picture is not available or not provided.
{% endhint %}

To edit your profile, mouse hover (or tap-and-hold on a touch screen) your **avatar** in the top-right corner, and then select **Profile** from the drop-down menu.

<figure><img src="/files/qq5rxZGtOqYHuAAD51m5" alt=""><figcaption></figcaption></figure>

The **Profile** page will open.

To add an avatar, go to the **Information** tab, click on the ‘**avatar**’ with initials, and browse your files for a picture.

<figure><img src="/files/crymh9sSSy9SH9vYxyp3" alt=""><figcaption></figcaption></figure>

After adding an avatar, you can preview it by clicking on the **eye** icon (left).

To remove the avatar, click on the **bin** icon (right).

<figure><img src="/files/OQgGSJsKrQfgFXBw0cz2" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
If you want to add a new avatar, first remove the existing avatar.
{% endhint %}

Once you have updated your avatar, click on the **Save** button.

To change the password, in the **Change password** tab, enter the current password and the new password.

Click on the **Save** button to update the password.

<figure><img src="/files/K2ShgjTOCyQdIZSoICH4" alt=""><figcaption></figcaption></figure>


# Global Dashboard

This section provides instructions on how to create global dashboards within the Widgelix IoT cloud platform.

The **Global Dashboard** allows you to create a centralized display of widgets, where each widget can be bound to a specific device to show relevant data. For example, if you want to display moisture from multiple devices, you can use separate chart widgets and bind them to each respective device.

In the **left menu**, click on the **Global Dashboards**.

<figure><img src="/files/uZLnsx2Ov3nlgkJdEyno" alt=""><figcaption></figcaption></figure>

If there are no global dashboards created within your organization before, the **Create your first dashboard** page will be displayed.

Click on the **+Create Dashboard** button.

<figure><img src="/files/CSH3rXlnEB1Abkp7zqgf" alt=""><figcaption></figcaption></figure>

If you have at least one dashboard within your organization, the **Global Dashboard** page looks something like this:

<figure><img src="/files/vtLk3uLVz7AWNLLDEx7l" alt=""><figcaption></figcaption></figure>

Click on the **+Create** button on the top-right corner of the page.

<figure><img src="/files/vSEJqlN0IhUqBlpzddEP" alt=""><figcaption></figcaption></figure>

The **Dashboard** page will be displayed.

In the **Name** text box, enter a **name** for the dashboard to identify it within your organization.

{% hint style="info" %}
When entering a name for the dashboard, note that spaces are not allowed. Instead, you can concatenate text using either a 'dash' or an 'underscore' character.
{% endhint %}

In the **Description** text box, enter a **description** for your dashboard that explains its intended purpose to users.

Click on the **+Dashboard** icon button and select an icon.

Click on the **+Add Widget** button and select a widget type from the **Select Widget** modal.&#x20;

{% hint style="info" %}
You can skip this step and add widgets later.
{% endhint %}

The **Widget options** modal will be displayed. It has two groups: **Basic widgets** and **advanced widgets**. The instructions for configuring each widget can be found on the [Widgets ](/get-started/widgets)page.&#x20;

<figure><img src="/files/cMQnVcvFZXai1RKyM6qJ" alt="" width="344"><figcaption></figcaption></figure>

{% hint style="info" %}
Unlike the **Widget options** modal you used when adding widgets to **device types** and **devices**, here you should first select the **Device type**, followed by the **Device**, and then select the **Data field** in the **Widget options** modal box. Other settings remain the same.
{% endhint %}

Click on the **Add** button to add the widget to the global dashboard.

Click on the **Save** button to save the dashboard.

<figure><img src="/files/dMDNh7xmyW0N2DnxIaJv" alt=""><figcaption></figcaption></figure>

You will be navigated to the **Global Dashboard** page. You can now see the newly added **dashboard** in the list of dashboards, along with its **Dashboard Id**.

<figure><img src="/files/8gWO1YAET5ZpsSRioRmH" alt=""><figcaption></figcaption></figure>

Click on the dashboard name to view the dashboard. It has the following sections:

<figure><img src="/files/fn9RXFXVy3WB5oDVCMVB" alt=""><figcaption></figcaption></figure>

* **Dashboard name**: displays the name of the dashboard.
* **Last Events**:&#x20;
* **Dashboard**: the dashboard tab displays all the widgets you added when you created the dashboard. You can add more widgets, edit, and delete the existing ones by turning on the **Edit** button. After editing the dashboard, click on the **Save** button to save the changes. Otherwise, your changes will not persist.

<figure><img src="/files/ude3VqGfolRFmNTWxkd7" alt=""><figcaption></figcaption></figure>

* **Settings**: The settings tab allows you to perform the following actions:
  * **Adding / Editing the dashboard icon**: You can change the existing icon associated with the dashboard or add a new one by clicking on the **Dashboard icon** button.
  * **Deleting the dashboard**: You can delete the dashboard by clicking on the **Delete** button.

<figure><img src="/files/5atxMHJi9Di7qG3pf11c" alt=""><figcaption></figcaption></figure>

Alternatively, you can click on the respective **delete (bin)** icon in the **global dashboard list**.

<figure><img src="/files/AwCDYqa5Vv6KKQ1YN6gC" alt=""><figcaption></figcaption></figure>

The **Delete dashboard** model will be displayed.

In the **text box**, type in the exact **name** of the **global dashboard**.

Click on the **Delete** button.

<figure><img src="/files/c8z7ifTJ9mA3ubDHwG3z" alt="" width="375"><figcaption></figcaption></figure>

The **global dashboard** will be deleted from the organization.

{% hint style="danger" %}
The **Delete** operation can't be undone.
{% endhint %}


# Rule Engine

A **Rule Engine** is like a **set of instructions** that follows a **logical condition**. It works based on the principle of **"When certain conditions are met, perform a specific task."** You can think of it as a smart interpreter for **if-then** statements. The **if-then** statements in this case are called rules.

With the **Rule Engine**, you can create as many rules as you want. A rule will execute when the specified condition or conditions are met. However, if you do not want a rule to execute automatically after creating it, you can **turn it off** in the **rules table**. All other rules will still execute automatically.

### For detailed configuration follow this section: [Rule Engine](broken://pages/mB0gTP7SPgGsVdV2Glwf)


# Introduction

**Widgelix** supports a wide range of connectivity options and can collect data from most IoT networks and even from any web resource using the **Webhooks** feature.

List of supported connectivities:

* GreenMesh LoRaWAN Server
* The THings Stack
* Actility ThingPark
* Helium
* Melita.io
* LORIOT
* Zenner
* Tektelic LoRaWAN
* ChirpStack
* Milesight LoRaWAN
* Senet
* Sensoterra
* Loxone
* Sigfox
* Webhook

All available connectivities you can find in the **Device Settings**

<figure><img src="/files/2DZp0yZLbD1hcHjruhXq" alt=""><figcaption></figcaption></figure>


# Options


# GreenMesh LoRaWAN

Feature is available. Documentation will be ready very soon!


# Actility ThingPark

**Actility** kindly crafted this nice documentation for us : <https://docs.thingpark.com/thingpark-x/latest/Connector/WIDGELIX/>


# The Things Stack

The Things Stack is a LoRaWAN network server that provides secure connectivity and management for LoRaWAN devices in production. Widgelix can be integrated with The Things Stack using webhooks. A webhook is an HTTP request (callback) that transfers data when triggered by an event. Once you create a webhook, Widgelix can read/write data from/to its endpoint.

## Configuring Connectivity

In Widgelix, click on Device in the left menu. The Devices page will be displayed, showing all the devices added to your organization.

Click on the device name for which you want to configure its connectivity.

On the **Device** page, click on the **Settings** tab.

<figure><img src="/files/g60dDfxnA8Zb5X70SPRm" alt=""><figcaption></figcaption></figure>

In the **Connectivity** section, click on the light blue rectangular area displaying a **disconnected adapter/The Things Stack** icon and the text '**Not Configured**'. The Things Stack is selected by default.

<figure><img src="/files/xkbDfNDhbzJTS7WrVaA9" alt=""><figcaption></figcaption></figure>

The **Network Server** model will be displayed.

<figure><img src="/files/l5oK75Kw4dP5qC6gTvPD" alt=""><figcaption></figcaption></figure>

Click on **The Things Stack** in the list of network servers. The Things Stack is selected by default.

<figure><img src="/files/al22jEGCDbpIqIchSC72" alt=""><figcaption></figcaption></figure>

### Configuring Uplink Settings

Configuring uplinks enables The Things Stack to forward uplink messages from the end devices to Widgelix. Widgelix exposes an HTTP(S) endpoint, and its base URL is as follows:

`https://app.widgelix.com/v1/input-node/ttn`

When an uplink event occurs in The Things Stack, the uplink payload will be sent to Widgelix.

In the **Uplink** section, turn on the **Secure** option.

<figure><img src="/files/A07XLHKIh2MuRydSFl04" alt=""><figcaption></figcaption></figure>

Copy the **API Key** by clicking the **Copy** button. You will need this key in the [Configuring The Things Stack](#configuring-the-things-stack) section.

<figure><img src="/files/xi5c2Yvkw5nGXNxSW1Rz" alt=""><figcaption></figcaption></figure>

### Configuring Downlink Settings

Configuring downlink settings enables Widgelix to send downlink messages to end devices via The Things Stack.

<figure><img src="/files/oWQcmUrLZPerE8wpBqzO" alt=""><figcaption></figcaption></figure>

In the Downlink section, configure the following:

**Device ID** - This is the ID of the device to which you want to send the downlink message. You can find it in the **End devices** list within your **The Things Stack** application, and it's typically prefixed with '**eui**' (e.g., `eui-0004a30b00xxxxxx`).

**URL** - The **server address** for The Things Stack, `https://eu1.cloud.thethings.network`for example. To find the server address for different **The Things Stack deployments**, please refer to the [Server Addresses](https://www.thethingsindustries.com/docs/the-things-stack/concepts/server-addresses/) section in The Things Stack documentation.

**Application  Id** - The Application ID associated with this device in The Things Stack.

**API Key** - The API key you have created with **write downlink application traffic** rights in The Things Stack. Read the [Creating Downlink API Key](#creating-downlink-api-key) section to learn more about that.

**Port** - The frame port (fPort) of the downlink. The default value is 0.

**Webhook Id** - The Webhook ID you have given in The Things Stack for this integration.

## Configuring The Things Stack

The Things Stack offers a webhook template for Widgelix that you can instantiate to set up a new webhook. The webhook you will create enables you to forward your LoRaWAN device data from The Things Stack to Widgelix.

On The Things Stack, click on **Integrations** and then click on **Webhooks**.

<figure><img src="/files/cI2ZFFKVE86CRExCxfW4" alt=""><figcaption></figcaption></figure>

On the **Webhooks** page, click on the **+ Add webhook** button.

<figure><img src="/files/BDMsSf6Xne6yXd2Oxu58" alt=""><figcaption></figcaption></figure>

Scroll down the page and choose the **Widgelix** webhook template.

<figure><img src="/files/tCg82c1taJHEtRP1Gimq" alt=""><figcaption></figcaption></figure>

On the **Setup webhook for the Widgelix** page, configure the following mandatory settings.

In the **Webhook ID**  text box, enter a unique name for your webhook, avoiding spaces in the name.

In the **API Key** text box, paste the API Key you have copied from the Widgelix in the previous section.

After configuring, click on the **Create Widgelix webhook** button.

<figure><img src="/files/gKYsfJGrjfDUrx3byE3n" alt=""><figcaption></figcaption></figure>

You will be navigated to the **Webhooks** page and your newly created webhook can be found in the webhooks list.

<figure><img src="/files/s4AUhyAhdAzEyv6wYqXd" alt=""><figcaption></figcaption></figure>

Now Widgelix can accept **uplinks** from your LoRaWAN end device.&#x20;

To confirm, navigate to the **Devices** page on **Widgelix**, and then click on your **device's name**. You'll be able to see that your device is online (check the 'Last seen' status) and that the dashboard is populated with incoming uplink data (if you have added any widgets to the dashboard).

<figure><img src="/files/7OQHL61kiypRZ85AuSJ0" alt=""><figcaption></figcaption></figure>

### Creating Downlink API Key

To send downlinks from Widgelix, first, you should create an API key with the downlink traffic writing rights in The Things Stack console.

In your The Things Stack application, click on **API keys** in the left menu.

<figure><img src="/files/Bgbge7SULIRg5T36TRNY" alt=""><figcaption></figcaption></figure>

Click on the **+ Add API key** button.

<figure><img src="/files/wfGBrPB8KaPTLGd8s2Iv" alt=""><figcaption></figcaption></figure>

On the **Add API Key** page, under **Rights**, click on the **Grant individual rights** option, and then select the **Write downlink application traffic** option. Afterwards, click the **Create API Key** button.

<figure><img src="/files/2q9Dgb58ilEFHlarZ4yW" alt=""><figcaption></figcaption></figure>

The API key information modal will be displayed. Click on the **Copy** button to copy the API key. Make sure to save the copied API key in a text file because you will need it to [configure the downlink](#configuring-downlink) settings in Widgelix.

After copying the API key, click on the **I have copied the key** button.

{% hint style="danger" %}
Make sure to save the API key now, as it won't be recoverable once you navigate away from this page.
{% endhint %}

<figure><img src="/files/ilPVtOv8FtpS8xFeJTB5" alt=""><figcaption></figcaption></figure>

You will be navigated to the **API keys** page, where you can see your newly created API **Key ID** with the '**write downlink application traffic**' rights.

<figure><img src="/files/aVcO0J1WIwDD1AMs89V8" alt=""><figcaption></figcaption></figure>


# Helium

Feature is available. Documentation will be ready very soon!


# Melita.io

Feature is available. Documentation will be ready very soon!


# LORIOT

Feature is available. Documentation will be ready very soon!


# Zenner

Feature is available. Documentation will be ready very soon!


# ChirpStack

Feature is available. Documentation will be ready very soon!


# Milesight

Feature is available. Documentation will be ready very soon!


# Senet

Feature is available. Documentation will be ready very soon!


# Sensoterra

Feature is available. Documentation will be ready very soon!


# Loxone

Feature is available. Documentation will be ready very soon!


# Sigfox

Feature is available. Documentation will be ready very soon!


# Webhook

Feature is available. Documentation will be ready very soon!


# Introduction

## Widgelix MCP Connector

Connect Claude (and any MCP-compatible AI client) to your Widgelix IoT platform. The connector exposes 27 tools covering the full platform surface — devices, telemetry, rules, dashboards, device types, and events — letting you query, analyze, and manage your IoT fleet through natural language.

***

### Connection

**MCP Server URL:** `https://mcp.widgelix.com`

Add this URL to your MCP client (Claude Desktop, Claude.ai Connectors, custom client). Authentication is handled at the server level using your Widgelix account credentials.

***

### Multi-Organization Support

All tools accept an optional `organizationId` parameter. Omit it when your account belongs to a single organization. Pass the ID explicitly when your account has access to multiple organizations.

***

### Tools Reference

#### Devices

| Tool                             | Description                                                                                                                                     |
| -------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------- |
| `list_devices_with_device_types` | Returns all devices in the fleet together with their device type metadata in a single call. Preferred starting point for any fleet exploration. |
| `get_last_device_payload`        | Returns the most recent raw telemetry payload received from a device.                                                                           |
| `get_device_telemetry`           | Returns historical telemetry for one or more fields on a device, with optional aggregation.                                                     |
| `get_device_events`              | Returns event log for a specific device over a time range.                                                                                      |
| `get_organization_events`        | Returns events across all (or selected) devices in the organization for a time range.                                                           |

**`get_device_telemetry` parameters**

| Parameter         | Type           | Notes                                                                                                 |
| ----------------- | -------------- | ----------------------------------------------------------------------------------------------------- |
| `deviceName`      | string         | Device ID or name from `list_devices_with_device_types`                                               |
| `fields`          | string\[]      | Field names from the device type's `uplinkConverter.dataFields`                                       |
| `lastFrom`        | string \| null | Relative range: `"1 hour"`, `"1 day"`, `"1 week"`, `"1 month"`. Set to `null` when using `min`/`max`. |
| `min`             | number \| null | Unix timestamp in ms (start). Use with `max` instead of `lastFrom`.                                   |
| `max`             | number \| null | Unix timestamp in ms (end).                                                                           |
| `aggregation`     | boolean        | Enable time-bucket aggregation                                                                        |
| `aggregationType` | string         | `min` \| `max` \| `avg` \| `sum` \| `diff`                                                            |
| `resolution`      | string         | `5 minutes` \| `10 minutes` \| `30 minutes` \| `1 hour` \| `1 day` \| `1 week`                        |
| `organizationId`  | string         | Optional                                                                                              |

> **Note:** `lastFrom` and `min`/`max` are mutually exclusive. Use one or the other.

***

#### Device Types

| Tool                   | Description                                                                                                                                     |
| ---------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------- |
| `get_device_type`      | Returns full device type metadata including the `uplinkConverter.dataFields` array — the canonical list of telemetry field names for that type. |
| `get_device_type_tags` | Returns the tag set used in rule message placeholders (`[[Operated_Device.TAG]]`).                                                              |
| `update_device_type`   | Updates an existing device type. Requires the full device type object plus its ID.                                                              |
| `create_device_type`   | Creates a new device type. Read `widgelix://docs/device-types/schema` before calling.                                                           |
| `check_uplink_code`    | Validates an uplink decoder against a sample HEX payload before applying it.                                                                    |
| `check_downlink_code`  | Validates a downlink encoder against a sample payload.                                                                                          |

> When looking up device type IDs, always use `deviceTypes[].id` from `list_devices_with_device_types`, not the name or slug.

***

#### Rules

| Tool               | Description                                                                                                             |
| ------------------ | ----------------------------------------------------------------------------------------------------------------------- |
| `list_rules`       | Returns all rules: ID, name, type, enabled state, actions, last executed.                                               |
| `get_rule`         | Returns the full rule definition including statements and actions.                                                      |
| `create_rule`      | Creates a new rule. Read `widgelix://docs/rules/schema` first.                                                          |
| `update_rule`      | Updates an existing rule. The rule object must include its `id`.                                                        |
| `set_rule_enabled` | Enables or disables a rule by ID.                                                                                       |
| `get_rule_schema`  | Shortcut that returns the rule JSON Schema + example + placeholder documentation in one call. Use before `create_rule`. |

**Rule types**

| Value     | Severity       |
| --------- | -------------- |
| `Info`    | Informational  |
| `Warning` | Warning        |
| `Danger`  | Critical alert |

**Required rule fields**

`name`, `type`, `customMessage`, `offlineAlert`, `passPayload`, `isEnabled`, `triggerOnce`, `anyDay`, `schedule`, `statements`, `actions`

**Message placeholders**

Use `get_device_type_tags` to discover available tags, then reference them in rule messages as `[[Operated_Device.TAG_NAME]]`.

***

#### Dashboards

| Tool                   | Description                                                                                                                             |
| ---------------------- | --------------------------------------------------------------------------------------------------------------------------------------- |
| `list_dashboards`      | Returns all global dashboards: ID, name, icon, description.                                                                             |
| `get_dashboard`        | Returns full dashboard definition including live widget data.                                                                           |
| `create_dashboard`     | Creates a new global dashboard.                                                                                                         |
| `update_dashboard`     | Updates an existing dashboard. The dashboard object must include its `id`.                                                              |
| `get_dashboard_schema` | Shortcut that returns the dashboard JSON Schema + widget reference + layout rules + example in one call. Use before `create_dashboard`. |

***

#### Documentation

| Tool                 | Description                             |
| -------------------- | --------------------------------------- |
| `list_documentation` | Lists all available documentation URIs. |
| `get_documentation`  | Fetches documentation content by URI.   |

**Available documentation URIs**

| URI                                    | Contents                |
| -------------------------------------- | ----------------------- |
| `widgelix://docs/overview`             | Platform overview       |
| `widgelix://docs/rules/schema`         | Rule JSON Schema        |
| `widgelix://docs/rules/example`        | Rule example payload    |
| `widgelix://docs/rules/placeholders`   | Placeholder reference   |
| `widgelix://docs/dashboards/schema`    | Dashboard JSON Schema   |
| `widgelix://docs/dashboards/widgets`   | Widget type reference   |
| `widgelix://docs/dashboards/layout`    | Layout rules            |
| `widgelix://docs/dashboards/example`   | Dashboard example       |
| `widgelix://docs/devices/schema`       | Device schema           |
| `widgelix://docs/device-types/schema`  | Device type JSON Schema |
| `widgelix://docs/device-types/example` | Device type example     |
| `widgelix://docs/device-types/decoder` | Decoder guide           |
| `widgelix://docs/events/schema`        | Event schema            |

***

#### Utility

| Tool   | Description                     |
| ------ | ------------------------------- |
| `ping` | Checks MCP server availability. |

***

### Recommended Workflows

#### Explore the fleet

```
1. list_devices_with_device_types
   → gets all devices + device type metadata in one call

2. get_last_device_payload(deviceName)
   → inspect the raw payload structure

3. get_device_telemetry(deviceName, fields, lastFrom="1 day")
   → query historical data for specific fields
```

#### Analyze device data

```
1. list_devices_with_device_types
   → find device ID and field names from deviceTypes[].uplinkConverter.dataFields

2. get_device_telemetry(deviceName, fields, aggregation=true, aggregationType="avg", resolution="1 hour", lastFrom="1 week")
   → get hourly averages over the past week

3. get_device_events(deviceName, lastFrom="1 week")
   → correlate anomalies with rule-triggered events
```

#### Create or update a rule

```
1. get_rule_schema
   → read the full schema, example, and placeholder docs

2. list_devices_with_device_types
   → find the device type ID you want to target

3. get_device_type_tags(deviceTypeId)
   → discover available [[Operated_Device.TAG]] placeholders

4. create_rule(rule)   or   get_rule(ruleId) → edit → update_rule(rule)

5. set_rule_enabled(ruleId, isEnabled=true)
```

#### Build or update a dashboard

```
1. get_dashboard_schema
   → read schema, widget reference, layout rules, and example

2. list_dashboards
   → find an existing dashboard to use as template (optional)

3. get_dashboard(dashboardId)
   → copy the full structure as a starting point (optional)

4. create_dashboard(dashboard)   or   update_dashboard(dashboard)
```

#### Audit organization-wide events

```
1. get_organization_events(deviceIds=[], lastFrom="1 week")
   → returns all rule-triggered events across the fleet

2. get_device_events(deviceName, lastFrom="1 day", count=50)
   → drill into a specific device
```

***

### Best Practices

**Always look up IDs before referencing them.** Use `list_*` tools to get IDs, then pass those IDs to `get_*`, `update_*`, and `create_*` tools. Names and slugs are accepted as fallbacks only.

**Discover field names before querying telemetry.** Call `list_devices_with_device_types` and read `deviceTypes[].uplinkConverter.dataFields` to get the exact field names expected by `get_device_telemetry`.

**Read the schema before creating objects.** Call `get_rule_schema` before `create_rule`, and `get_dashboard_schema` before `create_dashboard`. These shortcut tools return everything you need in a single call.

**Validate decoders before deploying.** Use `check_uplink_code` and `check_downlink_code` to test converter logic against sample payloads before writing it to a device type.

**Use `lastFrom` for convenience, `min`/`max` for precision.** The two modes are mutually exclusive — use one or the other in a single request.

***

### Time Range Reference

| `lastFrom` value | Period          |
| ---------------- | --------------- |
| `"1 hour"`       | Last 60 minutes |
| `"1 day"`        | Last 24 hours   |
| `"1 week"`       | Last 7 days     |
| `"1 month"`      | Last 30 days    |

For absolute ranges, pass Unix timestamps in milliseconds to `min` and `max`, and set `lastFrom` to `null`.


# Introduction

A **Rule Engine** is like a **set of instructions** that follows a **logical condition**. It works based on the principle of **"When certain conditions are met, perform a specific task."** You can think of it as a smart interpreter for **if-then** statements.  The **if-then** statements in this case are called rules.


# Working with Rules

## How to Create Rules in Widgelix Rule Engine

### Overview

The Rule Engine in Widgelix allows you to define automated alerts and actions based on device data. Each rule follows an **IF → IS → THEN** logic: you define *when* a condition is met on a device, and *what* should happen as a result.

***

### Step 1: Navigate to the Rule Engine

In the left sidebar, click **Rule Engine**. The Rule Engine list page shows all existing rules with their name, alert type, configured actions, and last execution time.

To create a new rule, click the **+ Create** button in the top-right corner.

***

### Step 2: Enter Basic Rule Information

The **Create Rule** form opens with the following fields at the top:

#### Rule Name *(required)*

Enter a descriptive name for the rule (e.g., `Temperature Too High`).

#### Alert Type *(required)*

Click the dropdown to choose the severity level of the alert. Three options are available:

| Value       | Description                   |
| ----------- | ----------------------------- |
| **Info**    | Informational alert (default) |
| **Warning** | Moderate severity             |
| **Danger**  | Critical severity             |

#### Custom Message *(optional)*

Enter a custom message to include in the alert notification. If left empty, a default message is used.

#### Pass Payload *(optional checkbox)*

Enable this to include the full raw device data payload in the alert notification.

***

### Step 3: Configure Rule Behavior Settings

Below the basic fields is the **Rule Behavior Settings** section with three toggle options:

#### Enabled *(default: ON)*

Activates or deactivates the rule. Disabled rules will not be evaluated.

#### Trigger Once *(default: OFF)*

When enabled, the rule fires only once per condition match. It resets automatically when the condition becomes false again.

#### Execute Every – Rate Limiting *(default: ON, 15 minutes)*

Limits how frequently the rule can fire. Available intervals:

* 1 minute
* 5 minutes
* **15 minutes** *(default)*
* 30 minutes
* 1 hour
* 1 day

***

### Step 4: Add a Trigger Condition (IF / IS)

Below the Behavior Settings, click **+ Add Trigger** to add a condition. This opens the **Configure Condition** panel on the right side of the screen.

The condition is split into two sections: **IF Configuration** and **IS Configuration**.

***

#### IF Configuration — What to Monitor

| Field                       | Required | Description                                                                                                   |
| --------------------------- | -------- | ------------------------------------------------------------------------------------------------------------- |
| **Device Type**             | Yes      | Select the device type to monitor                                                                             |
| **Offline Alert**           | No       | Check to trigger when a device goes offline. Data field and comparison are not required when this is checked. |
| **Data Field**              | Yes      | Select which data field to evaluate (e.g., temperature, humidity)                                             |
| **Device Selection Method** | Yes      | Choose **Select from list** to pick devices manually, or **Select from map** to select from a geographic view |
| **Devices**                 | Yes      | Select one or more specific devices to monitor                                                                |

***

#### IS Configuration — What Value to Check

Scroll down in the panel to reach the IS Configuration section.

**Comparison Type** — choose one of:

| Option                              | Description                                                        |
| ----------------------------------- | ------------------------------------------------------------------ |
| **Compare with constant**           | Compare the device reading to a fixed number you enter             |
| **Compare with device measurement** | Compare against another device's live reading                      |
| **Geofence**                        | Trigger based on geographic position (latitude/longitude boundary) |

**Comparison Operator** — choose from:

* Less Than
* Less Than Or Equal
* Equal *(default)*
* Greater Than Or Equal
* Greater Than
* Not Equal
* In Range
* Out Of Range

**Value** — enter the numeric threshold that the data field is compared against.

***

#### Switching Threshold Range *(new feature)*

At the bottom of the IS Configuration section you will find the **Switching threshold range** toggle.

**What it does**

Normally, a condition fires **every time** the value crosses the trigger threshold. This can cause rapid on/off alert flickering when the value fluctuates near that threshold.

**Switching threshold range** solves this by adding a separate **reset threshold**. After the condition fires, the value must first satisfy the reset comparison before the condition is allowed to fire again.

> **Example:** Trigger when `Temperature > 80°C`. Reset when `Temperature < 75°C`. Alerts stop flickering near 80°C because the value must drop below 75°C before the rule can fire again.

**How to enable it**

Toggle the switch from **Disabled** to **Enabled**. Two new required fields appear:

| Field                | Required | Description                                                                   |
| -------------------- | -------- | ----------------------------------------------------------------------------- |
| **Reset comparison** | Yes      | The comparison operator used to evaluate the reset condition                  |
| **Reset threshold**  | Yes      | The numeric value the measurement must satisfy before the rule can fire again |

**Reset comparison** options:

* Less Than *(default)*
* Less Than Or Equal
* Equal
* Greater Than Or Equal
* Greater Than
* Not Equal

**Typical configuration pattern**

| Setting                       | Example value |
| ----------------------------- | ------------- |
| Comparison Operator (trigger) | Greater Than  |
| Value (trigger threshold)     | 80            |
| Reset comparison              | Less Than     |
| Reset threshold               | 75            |

With this setup the rule fires when the reading goes above 80, and will not fire again until the reading drops below 75.

***

Click **Apply** to save the condition, or **Cancel** to discard it.

The saved condition appears in the main form as a **Statement** showing the IF / IS logic:

You can add up to **10 conditions** per rule using the **+ Add Condition** button.

***

### Step 5: Add an Action (THEN)

Below the conditions, in the **THEN** section, click **+ Add Action** to define what happens when the rule fires.

The **Select Action Type** modal appears with the following options:

| Action Type    | Description                                               |
| -------------- | --------------------------------------------------------- |
| **Email**      | Send an email notification                                |
| **Discord**    | Send a message to a Discord channel                       |
| **Slack**      | Send a message to a Slack channel                         |
| **Webhook**    | Call an external HTTP webhook URL                         |
| **SMS**        | Send an SMS text message                                  |
| **Signl4**     | Send an alert via the SIGNL4 mobile alerting platform     |
| **Downlink**   | Send a downlink command back to a device                  |
| **Event Only** | Log the event only — no external notification *(default)* |

#### Example: Email Action

After selecting **Email**, fill in:

* **Recipients** — one or more email addresses
* **Subject** — the email subject line
* **Message** — the email body (supports dynamic placeholders for device data)

Click **Add Action** to confirm. You can add multiple actions to a single rule, and use **← Change Action Type** at any time to switch to a different notification type.

***

### Step 6: Configure the Schedule *(optional)*

The **Schedule** section at the bottom restricts when the rule is allowed to execute. By default it is set to **Any time**.

Click the Schedule card to open the **Configure Schedule** panel.

***

#### Any Day (No Restrictions)

When the **Any day (no schedule restrictions)** toggle is **ON**, the rule will execute at any time of day on any day of the week. This is the default setting.

***

#### Custom Schedule

Toggle **Any day** to **OFF** to reveal the weekly timeline grid, where you can define exactly which hours on which days the rule is permitted to run.

The timeline shows 24 hours (00–23) across the top and one row per day of the week. Each day has a **checkbox** on the left to enable or disable it, and a **time range display** on the right showing the currently selected hours.

**Quick-setup buttons**

| Button                    | Action                                                           |
| ------------------------- | ---------------------------------------------------------------- |
| **Select All**            | Enables all days and selects the full 24-hour range for each     |
| **Clear All**             | Removes all selections and disables all days                     |
| **Business Hours (9–18)** | Applies a 09:00–18:00 range to every day of the week as a preset |

**Drawing a time range by dragging**

1. Click the **checkbox** next to a day to enable it.
2. **Click and drag** left-to-right across the timeline row for that day to select the active hours. The selected range is highlighted in blue and the start/end times are shown on the right.

> The timeline snaps to 30-minute intervals. Drag further right to extend the range, or drag left to shorten it.

***

#### Right-Click Context Menu on a Time Range

Once a time range has been drawn for a day, you can **right-click on the time display** (the `HH:MM – HH:MM` text on the right side of the row) to open a context menu with two options for fine-tuning the schedule.

***

**Option 1 — Edit Time**

Click **Edit Time** to open the **Edit Time Range** dialog, which lets you set the start and end times with exact minute precision instead of relying on drag snapping.

The dialog shows:

* **Edit schedule for \[Day name]** — confirms which day you are editing
* **Start Time** — enter the start time in `HH:MM` 24-hour format (e.g., `08:15`)
* **End Time** — enter the end time in `HH:MM` 24-hour format (e.g., `17:45`)

Click **OK** to apply the changes to that day, or **Cancel** to discard.

***

**Option 2 — Copy to All Days**

Click **Copy to All Days** to instantly duplicate the current day's time range to all other days of the week. All days will be enabled and assigned the same start and end times.

> This is useful when you want a uniform schedule across the entire week — configure Monday precisely using **Edit Time**, then use **Copy to All Days** to propagate it everywhere at once.

***

#### Per-Day Toggle (Precise Time Input)

On the right side of each day row, next to the time display, there is a small toggle switch. Enabling this toggle opens an inline precise time input for that day, allowing you to type start and end times directly without opening the context menu.

***

Click **Apply** to save the schedule and return to the rule editor.

***

### Step 7: Save the Rule

Once everything is configured, click the **Save Rule** button at the bottom of the page.

> If any required fields are missing (e.g., Device Type, Data Field, Devices, or Reset threshold when Switching threshold range is enabled), validation errors will appear in red on the affected fields. Resolve all errors before the rule can be saved.

***

### Summary Checklist

Before saving, verify you have completed:

* [ ] **Rule Name** entered
* [ ] **Alert Type** selected (Info / Warning / Danger)
* [ ] **Custom Message** written *(optional)*
* [ ] **Behavior Settings** configured (Enabled, Trigger Once, Rate Limiting)
* [ ] At least one **Trigger Condition** added with:
  * [ ] Device Type selected
  * [ ] Data Field selected
  * [ ] At least one Device selected
  * [ ] Comparison Operator and Value set
  * [ ] **Switching threshold range** configured *(if needed — set Reset comparison and Reset threshold)*
* [ ] At least one **Action** added *(or kept as default "Event Only")*
* [ ] **Schedule** set *(optional — defaults to Any time)*


# Temporal Control

### Overview

**Temporal control** lets a rule condition fire only after it has stayed true for a period of time, instead of the instant a value crosses a threshold. This prevents false alarms from brief, momentary readings and makes your rules react to *sustained* situations.

Without temporal control, a condition like `Temperature > 30°C` triggers the moment the sensor reports `30.1°C` — even if it was just a one-second spike. With temporal control, you can require the temperature to stay above `30°C` for, say, **10 minutes straight** before the rule acts.

Temporal control is optional and configured **per condition** (per statement) in the Rule Builder. Conditions without it keep working exactly as before.

***

### When to use it

Use temporal control when you care about how *long* a situation lasts, not just whether it happened once. Common examples:

* **Avoid false alarms** — only alert if a freezer stays warm for 10 minutes, not on a single noisy reading.
* **Detect sustained problems** — a pump running over pressure for 5 minutes is a real issue; a 2-second blip is not.
* **Reduce alert fatigue** — stop notifications that flap on and off when a value hovers near the threshold.

***

### Where to find it

1. Open or create a rule in the **Rule Builder**.
2. Click a condition (statement) to open its configuration panel.
3. Scroll to the **Temporal control** section, below the comparison settings.
4. Turn the toggle **on** to reveal the temporal options.

> **Note:** Temporal control is available for value and geofence conditions. It is **not** available for *Offline Alert* conditions.

***

### Settings

#### Persist duration (required)

How long the condition must hold **continuously** before the statement becomes true.

* Enter a number and choose a unit: **seconds**, **minutes**, or **hours**.
* Example: `10 minutes` means the condition must be true non-stop for 10 minutes before it fires.

When you enable temporal control, this defaults to **10 minutes**.

#### Ignore short spikes (optional)

Brief moments where the condition stops being true should not always reset your timer. With this enabled, a violation **shorter** than the configured duration is ignored and the timer keeps running.

* Toggle **Ignore short spikes** on.
* Set the **ignore duration** (e.g. `30 seconds`).
* Example: with a 30-second ignore window, if the temperature dips below the threshold for 10 seconds and then climbs back up, the 10-minute timer is **not** reset.

When enabled, the ignore duration defaults to **30 seconds**.

#### Reset after prolonged violation (optional)

If the condition stops being true for a **long** time, the accumulated progress can be reset so a new sustained period is required.

* Toggle **Reset after prolonged violation** on.
* Set the **reset after** duration (e.g. `5 minutes`).
* Example: if the condition is violated for more than 5 minutes, the timer goes back to zero.

When enabled, the reset-after duration defaults to **5 minutes**.

**Pause instead of full reset**

Within the *Reset after prolonged violation* block, you can enable **Pause instead of full reset**:

* **Off (default):** after a prolonged violation, progress is wiped and the count starts over from zero.
* **On:** progress is **paused and preserved** during the violation. When the condition becomes true again, counting resumes from where it left off (a softer, time-based behavior).

***

### How the timing works

A few things to keep in mind:

* **Server time is used.** Timing is based on when the platform evaluates each event, not on the device's clock, to avoid issues with devices whose clocks drift.
* **Checks happen on incoming data.** The persist duration is evaluated whenever the device sends an event. If a device goes quiet, the check waits until the next event.
* **Unusual silence resets the rule.** If a device stops reporting for far longer than its normal interval, the rule's progress is reset.

***

### Works alongside other settings

* **Hysteresis (switching threshold range)** controls re-arming by *value*. Temporal control works by *time*. They are independent and can be used together on the same condition.
* **Multiple conditions.** Each condition has its own temporal control. For example, you can require condition A to hold for 10 minutes while condition B is checked instantly.

***

### Examples

| Goal                                               | How to configure                                                                                             |
| -------------------------------------------------- | ------------------------------------------------------------------------------------------------------------ |
| `Temperature > 30°C` sustained for 10 minutes      | Persist duration = `10 minutes`                                                                              |
| Both `A` and `B` true for 10 minutes               | Set persist duration = `10 minutes` on **both** conditions                                                   |
| `A` true for 10 minutes **and** `C` true right now | Persist duration on `A`; leave temporal off on `C`                                                           |
| Ignore 30-second dips                              | Enable *Ignore short spikes*, ignore duration = `30 seconds`                                                 |
| Reset the timer after 5 minutes off                | Enable *Reset after prolonged violation*, reset after = `5 minutes`                                          |
| Soft reset (pause, then reset)                     | Enable *Reset after prolonged violation*, reset after = `5 minutes`, turn on **Pause instead of full reset** |

***

### Tips & FAQ

**Do I have to use temporal control?** No. It is fully optional. Leave the toggle off and the condition fires instantly, just like before.

**What happens when I turn it off again?** The temporal settings are removed from the condition and it returns to instant behavior.

**Will my existing rules change?** No. Rules that never had temporal control are unaffected.

**Why didn't my rule fire exactly at the 10-minute mark?** The duration is checked when the device sends data. If your device reports every minute, the rule can fire up to one reporting interval after the threshold is reached.

**Can I use very short durations?** Yes — you can enter durations in seconds (for example, `30 seconds`).


# Comparison Equations

Compare with constant and Compare with device measurement both support different types of comparisons.

<figure><img src="/files/e4PxXTBg2wnRVEyW5uSN" alt=""><figcaption></figcaption></figure>

* Less Than\
  Rule will be triggered if device measurement is **less than** defined value
* Less Than or Equal\
  Rule will be triggered if device measurement is **less than or equal** defined value
* Equal\
  Rule will be triggered if device measurement is **equal** defined value
* Greater Than or Equal\
  Rule will be triggered if device measurement is **greater than or equal** defined value
* Greater Than\
  Rule will be triggered if device measurement is **greater than** defined value
* Not Equal\
  Rule will be triggered if device measurement is **not equal** defined value
* In Range\
  Rule will be triggered if device measurement is **greater than or equal** to **Min** value **AND** is **less than or equal** to **Max** value
* Out of Range\
  Rule will be triggered if device measurement is **less than or equal** to **Min** value **OR** is **greater than or equal** to **Max** value

{% hint style="danger" %}
**Compare with device measurement** doesn't support **In Range** and **Out Of Range** types
{% endhint %}


# Types

Rule Engine supports three general comapring options:

* Compare with constant\
  You can compare any device measurement with a defined constant\
  ![](/files/k1qJPXN1u85CoL2xG8DE)
* Compare with device measurement\
  You can compare measurements between different devices\
  ![](/files/Z6d9Gau6iKV0VDwcxF88)
* Control device geolocation\
  ![](/files/YueM6GhdByCxDZlPzZu1)<br>


# Compare with constant


# Compare with device measurement


# Geofences


# Introduction

Using [Rule Engine](/get-started/rule-engine) on **Widgelix** you can send notifications using **Email**, **SMS**, **Slack** and **Discord**

* [Slack](/notifications/types/slack)
* [Email](/notifications/types/email)
* [SMS](/notifications/types/sms)
* [Discord](/notifications/types/discord)


# Types


# Slack

## Sending messages using incoming webhooks

Incoming webhooks are a way to post messages from **Widgelix** into **Slack**. Creating an incoming webhook gives you a unique URL to which you send your notifications. You can use all the usual [formatting](https://api.slack.com/reference/surfaces/formatting) to make the messages stand out.

The setup is straightforward - you create a Slack App and then use it to generate a unique webhook URL. Follow the steps in this article to obtain the URL for **Slack** notifications.

### Create a Slack app (if you don't have one already)  <a href="#create-app" id="create-app"></a>

[Create your Slack app](https://api.slack.com/apps/new)

Pick a name, choose a workspace to associate your app with (bear in mind you'll probably be posting lots of test messages, so you may want to create a channel for sandbox use), then click **Create New App** and choose **from scratch**. If you've already created an app, you can use that one.

<figure><img src="/files/i5kRH6e1pp1IFifyPYMo" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/vC3Kg0GB1YI3iglif8OC" alt=""><figcaption></figcaption></figure>

### Enable incoming webhooks  <a href="#enable_webhooks" id="enable_webhooks"></a>

You'll be redirected to the settings page for your new app (if you're using an existing app, you can load its settings via your [app's management dashboard](https://api.slack.com/apps)).

From here, select **Incoming Webhooks**, and toggle **Activate Incoming Webhooks** to on.

### Create an incoming webhook  <a href="#create_a_webhook" id="create_a_webhook"></a>

Now that incoming webhooks are enabled, the settings page should refresh and some additional options will appear. One of those options is a very helpful button called **Add New Webhook to Workspace** — click it!

What this button does is trigger a shortcut version of the installation flow for Slack apps, one that is completely self-contained so that you don't have to actually build any code to generate an incoming webhook URL. You'll see something like the following:

<figure><img src="/files/kNiJVGTdyLlJUI0ngBlz" alt=""><figcaption></figcaption></figure>

Go ahead and pick a channel that the app will post to, then select **Authorize**. If you need to add the incoming webhook to a private channel, you must first be in that channel.

You'll be sent back to your app settings, where you should see a new entry under the **Webhook URLs for Your Workspace** section. Your webhook URL will look something like this:

```http
https://hooks.slack.com/services/T00000000/B00000000/XXXXXXXXXXXXXXXXXXXXXXXX
```

That URL is your new incoming webhook, one that's specific to a single user and a single channel.

Let's see how you can actually use that webhook to post a message.

<mark style="color:orange;">**Keep it secret, keep it safe**</mark><mark style="color:orange;">. Your webhook URL contains a secret. Don't share it online, including via public version control repositories.</mark> <mark style="color:orange;"></mark><mark style="color:orange;">**Slack actively searches out and revokes leaked secrets.**</mark>

### Using webhook URL in you Widgelix's Rule

Go to your created rule, and paste your Slack Webhook URL into URL field of Slack notification option:

<figure><img src="/files/5S2A7YAmhdFRLGcTuObd" alt=""><figcaption></figcaption></figure>


# Discord

Feature is available. Documentation will be ready very soon!


# Email

Feature is available. Documentation will be ready very soon!


# SMS

Feature is available. Documentation will be ready very soon!


# List of tips


# Supported Devices

**Widgelix** supports most popular devices out of the box. If you can't find something, you have all the tools to create a **Device Template** yourself, or you can always ask our team for help.

List of supported manufacturers:&#x20;

* Adeunis
* Connected Inventions
* Daviteq
* Digital Matter
* Dragino
* Ellenex
* Elsys
* Enginko
* MClimate
* Milesight
* Nano Sensorics
* OleumTech
* Plenom
* RAKWireless
* Seeed Studio
* Sensoterra
* Senzemo
* Tektelic
* Teltonika
* Thermokon
* Visiosoft


