Platform · Fleet Management

Define a device once. Run the whole fleet.

A product describes a device model once: its settings, storage, API and dashboard. Every unit that connects registers itself, inherits it, and takes new firmware over the air.

Products·Auto-provisioning·Asset groups·OTA updates

The problem

Device one is a project. Device five hundred is a product.

What takes a minute for one prototype becomes a job nobody can keep up with when the same work repeats for every unit.

By hand, per deviceGrows with every unit
DeviceOnboardStorageSettingsDashboardFirmware
cold-room-0412
cold-room-0413
cold-room-0414
cold-room-0415
cold-room-0416

Five jobs per unit, again for every unit you ship

Once, on the productSame effort at unit one hundred

cold-room-sensor

  • Units register themselves
  • One bucket, tagged per device
  • Defaults, overridable
  • One layout for all
  • Over the air, in batches

Every unit inherits it the moment it connects

Products

One definition, applied to the whole fleet

A product profile holds everything units of one model share. Change it once and every device follows.

Productcold-room-sensor

Configuration and state, with defaults

Properties keep what each device needs to remember: its configuration, location, firmware version or last state. Set a default once and every unit inherits it, or keep a property in sync from a device resource or an MQTT topic.

  • Default values
  • From a resource or topic
  • Override per device

Auto-provisioning

Devices that register themselves

Nobody creates units by hand. The first time a device connects, the product recognises it and sets it up.

Product · cold-room-sensorAuto-provisioning rule cold-room-*

  1. Step 01: Ships with an identity

    The unit leaves the factory with its id and a credential, or a client certificate.

  2. Step 02: Connects for the first time

    It dials the platform over IOTMP or MQTT. Nobody has created it in the console.

  3. Step 03: The product recognises it

    The auto-provisioning rule matches the id prefix and validates what the device presents.

  4. Step 04: Created, configured, online

    The device joins the product with its own credential and inherits the whole profile.

Other ways into a product

  • LoRaWAN sensors

    The network server plugins for The Things Stack, ChirpStack and LORIOT build each id from a prefix and the device EUI, so sensors provision as their data arrives.

  • Brokers and gateways

    A flow can create devices when data arrives from a message broker, taking the id from the MQTT topic. Gateways can spawn subdevices from their own flows.

  • Your customers

    With claim, end customers add units themselves with a link, a QR code or a claim code, and configure them as they do. Customer onboarding

EVERY UNIT, ONE DEFINITION

Day to day

Run the fleet from one place

Change settings without a site visit and see which units need attention without opening each one.

Remote configuration

Settings that travel down the fleet

A property set on the product, an asset type or an asset group reaches every device beneath it, and the device’s table shows where each value came from. A unit that needs something different gets its own value under the same id.

  • Devices read their settings with get_property and report back with set_property
  • MQTT devices can have each change pushed to a topic by a flow
  • Edit from the console, the REST API or a dashboard

Fleet view

Every unit’s state, without opening each one

Each device records whether it is online, its last connection and its traffic. Asset groups, nested as deep as you need, split the fleet by site or customer, and the assets map shows who is connected at a glance.

  • Alarms with the absent comparator flag devices that stop reporting
  • Project members can be limited to their own groups
  • Groups carry their own properties and geofences

OTA updates

New firmware without touching the hardware

Build in VS Code and send the binary over each device's own connection, to one unit or a batch.

main.cppESP32 · PlatformIO
#define THINGER_OTA_VERSION "1.5.0"
#include <ThingerESP32.h>
#include <ThingerESP32OTA.h>
#include "arduino_secrets.h"
ThingerESP32 thing(USERNAME, DEVICE_ID, DEVICE_CREDENTIAL);
ThingerESP32OTA ota(thing);
void setup() {
thing.add_wifi(SSID, SSID_PASSWORD);
thing["temperature"] >> outputValue(readTemperature());
}
void loop() {
thing.handle();
}

OTA · 4 devices · cold-room-sensor1.5.0

cold-room-04121.4.0 1.5.0 Updated

cold-room-04171.5.0 Same version, skipped

cold-room-04231.4.0 1.5.0 Updated

cold-room-04311.4.0 1.5.0 Uploading

A plugin in your instance

The VS Code plugin installs from the marketplace and runs inside your Thinger.io instance, with PlatformIO and the Thinger.io extension ready to build.

Many devices at once

Pick one device or a batch, then build and upload in one click. Units already on the target version are skipped, and the log records every result.

Checked on arrival

Firmware travels over the device’s own connection, compressed on ESP32, ESP8266 and Arduino Portenta, and verified with an MD5 checksum.

The boards it supports

ESP32, ESP8266, Arduino Nano 33 IoT, MKR WiFi 1010, MKR NB 1500, Nano RP2040 Connect, Portenta and Opta. The first firmware goes in by cable.

Go further

Start from a product, or bring your own

Install a ready product for known hardware, package yours, and reach Linux units in depth.

  • Ready products in the marketplace

    Device integrations install a complete product: profile, auto-provisioning rule and dashboard, for hardware from Shelly to Siemens LOGO! and LoRaWAN sensors.

    Explore the marketplace
  • Package your own

    The product exporter turns your product into a plugin with its image, description, readme and version, ready to install on other instances.

    Read the products docs
  • Linux units, in depth

    For gateways and edge computers in the fleet, ThinRemote adds a remote terminal, files and tunnels over the same kind of outbound connection.

    Discover ThinRemote
  • The hardware side

    Protocols, open-source client libraries and the customer onboarding flow that brings units into a product in the first place.

    Device Connectivity

Good to know

Frequently asked questions

What teams ask before moving a device from prototype to production.

Still have questions? Talk to us
What is a product in Thinger.io?

A product defines the behaviour of a set of devices of the same type. Its profile holds the properties, data buckets, API resources, scripts and flows those devices share, plus one dashboard layout. Every device linked to the product inherits all of it, so a change to the profile reaches the whole fleet at once.

How does auto-provisioning decide which devices to accept?

The product carries an auto-provisioning rule that matches incoming device identifiers, for example every id that starts with a given prefix. When a matching device connects for the first time, the platform creates it inside the product with the credential it presented. Since server 7.0, auto-provisioning can also authenticate devices with certificates. LoRaWAN devices provision through their network server plugin, which builds each id from a prefix and the device EUI.

Can one device differ from the rest of its product?

Yes. Inherited properties cannot be edited from the device by accident, but creating a property with the same id on the device overrides the default for that unit only. The same applies to values inherited from asset types and groups, and a device’s dashboard can be edited on that device without changing the product layout.

How do over-the-air firmware updates work?

Through the VS Code plugin from the marketplace, which runs inside your instance with PlatformIO and the Thinger.io extension preinstalled. You build the firmware and upload it to one device or to several at once over their own connection; devices that already run the target version are skipped. It supports ESP32, ESP8266 and several Arduino boards, including Portenta and Opta. The first firmware with OTA support has to be flashed by cable.

Do products work with MQTT and HTTP devices too?

Yes. Properties and buckets can be fed from an MQTT topic as well as from an IOTMP resource, and API resources give MQTT and HTTP devices the same REST API as IOTMP ones, so they work in the API explorer and on dashboards. Flows can also create devices when data arrives from a message broker.

How do I find out when a device stops reporting?

Every device records its connection state, last connection and traffic, and the assets map shows connected and disconnected units at a glance. For alerts, alarm rules with the absent comparator detect devices that stop sending data and notify by email or any endpoint.

Turn your device into a product

Define the profile, switch on auto-provisioning and let every unit you build set itself up. The hundredth device takes the same effort as the first.