Skip to content

IoT Visualization Dashboard

The IoT visualization dashboard in the FOSSA IoT Hub provides an easy way to view and analyze IoT data sent from your devices through the FOSSA network.

Each Hub application has its own dedicated visualization dashboard. To access it, open your application and select the “IoT Visualization” tab at the top of the screen.

pg7 step 7

Configure your parser

To visualize your data, you must configure the parser. You can do this by clicking the gear icon in the top-right corner.

You must provide a Kaitai Struct, which defines how your data should be parsed. Optionally, you can also add an encryption key if your packets are encrypted.

To apply the changes, click the “Save changes” button.

pg7 step 7

Kaitai

The Kaitai definition describes how incoming IoT packets are decoded. It defines the exact binary structure of your IoT payloads. Each field in the Kaitai schema represents a portion of the payload. The system supports a fixed set of predefined fields:

  • temperature
  • humidity
  • int1, int2, int3, int4 (custom integer fields)
  • bool1, bool2, bool3, bool4 (custom boolean fields)
  • text (custom string field)
  • gps (structured field containing lat, lng, alt)

You are free to include only the fields required for your IoT packets. If a field is not included in the schema, it will not be parsed or available in the visualization dashboard.

For all fields you use, the id must match exactly the supported names: temperature, humidity, int1, int2, int3, int4, bool1, bool2, bool3, bool4, text and gps. If you include gps, its substructure must define the fields lat, lng and alt (the name you give to that Kaitai type is not relevant, only the field ids are).

Each numeric field (temperature, humidity and intN) can use any of the following types, as long as it is compatible with a Python float representation: f4, s1, s2, s4, u1, u2, u4. Boolean fields must always use type: b1. GPS subfields must always be of type f4. These type recommendations are not actively validated by the platform — the Kaitai compiler is the only gate, so using an incompatible type may result in incorrect data being parsed rather than an explicit error.

The order of fields in the schema determines the binary decoding order. You are free to define this order as needed.

The Kaitai structure must always have id: decoder. Any other value will not work, since the ingestion pipeline looks for a class generated from that exact id.

Example kaitai struct:

meta:
  id: decoder # must always be "decoder"
  title: Demo IoT Packet
  endian: le

types:
  gps_type:
    seq:
      - id: lat
        type: f4 # float 4 bytes
        doc: Latitude in microdegrees
      - id: lng
        type: f4 # float 4 bytes
        doc: Longitude in microdegrees
      - id: alt
        type: f4 # float 4 bytes
        doc: Altitude in meters

seq:
  - id: gps
    type: gps_type # 12 bytes total
    doc: GPS data structure (latitude, longitude, altitude)

  - id: temperature 
    type: s1 # signed int 1 byte
    doc: Temperature in Celsius

  - id: humidity
    type: u1 # unsigned int 1 byte
    doc: Humidity percentage

  - id: int1
    type: s2 # signed int 2 bytes
    doc: Custom integer field

  - id: int2
    type: s2 # signed int 2 bytes
    doc: Custom integer field

  - id: int3
    type: s2 # signed int 2 bytes
    doc: Custom integer field

  - id: int4
    type: s2 # signed int 2 bytes
    doc: Custom integer field

  - id: bool1
    type: b1 # boolean 1 bit
    doc: Custom boolean field (0 = false, 1 = true)

  - id: bool2
    type: b1 # boolean 1 bit
    doc: Custom boolean field (0 = false, 1 = true)

  - id: bool3
    type: b1 # boolean 1 bit
    doc: Custom boolean field (0 = false, 1 = true)

  - id: bool4
    type: b1 # boolean 1 bit
    doc: Custom boolean field (0 = false, 1 = true)

Example kaitai struct:

meta:
  id: decoder # must always be "decoder"
  title: Demo IoT Packet
  endian: le

seq:
  - id: text
    type: str
    size-eos: true
    encoding: ASCII
    pad-right: 0xa5
    doc: payload with only text

Encryption key

If your packets are encrypted, you must provide an encryption key. The system uses AES-128 to decrypt the received packets. The key must be entered as a 32-character hexadecimal value (16 bytes).

If no encryption key is provided, the packet will be assumed to be unencrypted.

2. Visualize your IoT data

After configuring your Kaitai parser and receiving the first packet, IoT data visualization will become available. You can select the time range and filter the data by date range and device.

Packets are only parsed and stored after a Kaitai parser has been properly configured.

If there is a mismatch between the IoT packet encoding/encryption and the Kaitai configuration, incorrect data may be stored and displayed in the dashboard.

Dashboard overview

At the top of the dashboard, you will find a summary section with key metrics: last ingest timestamp, last ingest device, and messages per hour.

Below it, the dashboard is organized into five main visualization areas:

  • Map view (GPS data): Displays the location data from the gps field.
  • Temperature & humidity chart: A single time-series chart showing one of these fields at a time.
  • Integer chart (int1–int4): A single time-series chart showing one of these fields at a time.
  • Boolean chart (bool1–bool4): A single on/off state chart showing one of these fields at a time.
  • Text panel: Displays the raw values of the text field, sorted by timestamp.

Each chart (temperature/humidity, integers, booleans) shows one field at a time. To switch the displayed field, use the dropdown selector above the chart and choose the desired field.

If a field is not defined in your Kaitai configuration, the dashboard will display a message indicating that no data is available for that field.

Dashboard filters

Filters can be applied by clicking the filter icon in the top-right corner of the dashboard.

You can configure:

  • Time range: Select a custom start and stop date/time. By default, the dashboard shows the last 24 hours.
  • Devices: Select which devices to display. A maximum of 3 devices can be selected simultaneously to ensure readability. By default, no devices are selected, so you must pick at least one to see data.

Useful references