In this guide, we'll build a simple heating controller that:
By the end, you'll understand the core concepts and be ready to build your own project.
From the Connect home page, click New Project.
Give it a name (e.g., "Conservatory Heating") and hit create.

You'll land on your project home page. Note the Project ID and API Key buttons in the toolbar - you'll need these later.

A schema describes the shape of the data your device will send. Click Schemas → New Schema.
For our heating controller, we need three fields:
Note: We'll be telling the heater to turn on / off via commands later, but it's always best to send the current state back to the server. This way, you can see what the current state IS rather than what we think it should be.

You can add validation to each schema field. This is useful because it makes sure your data is in the right shape and clean before accepting and saving it. For this example we'll simply state that all three fields are required.
Set the lifecycle to Active and save.
Before touching any Arduino code, let's prove the API works using curl.
You'll need:
1 | |
When you send a payload to Inventronix, we check all your active schema's in order to find one which matches. If you want to specify which schema to use, you can do this in your request headers.
You should get back:
1 | |
The `commands` array is empty for now - we'll fix that soon.
You can view the data you've just sent in the Payload Explorer.
Use the breadcrumbs to go back to your project, then click the Payloads Explorer card.

Your payload should be visible in the explorer page.

Let's visualise that data. Click Dashboards → New Dashboard.
Add a Gauge chart:

Add a Line Chart for temperature history:
This will create a line chart showing one point for the average of all readings per minute for the last 20 hours.
Save the dashboard. Send a few more test payloads with different temperatures and watch the charts update in real-time.

Each dashboard has two layouts, one for desktop and one for mobile. You'll need to configure each seperately. IMO this is better than me guessing how to squash your desktop layout to suit mobile.
While in edit mode, you can:
Rules are a series of pre-defined criteria. When these criteria are met, we'll perform an action. For example: When the average temperature in the last 5 minutes is above 20 degrees.
Actions are the tasks we'd like to perform when the rule conditions are met. For example: Send a command to the device or send me an email.
Use the breadbrumbs to move back to the project home screen and select Rules and Actions.


This configures your rule. Essentially we are saying when we receive some new data, check if the last value for temperature is greater than 20. If it is, then _
Next we'll need to configure the action to be performed.

Press Create Action then Create Rule to finish.
You'll also need the opposite command to turn the heater off if the temperature is above X degrees, but we've skipped that in this guide for brevity.
Send a cold temperature:
1 | |
YOU WON'T SEE A COMMAND YET. Rule processing is asynchronous. This means that once you send the data, we start processing rules in the background.
Send the same command again.
This time the response includes a command:
1 | |
Your device would read this response and turn on the heater.
For this quick start guide, we'll assume you know how to create and Arduino program and upload it to your device. We'll be using the Arduino IDE for this tutorial.
Next, you can program your Arduino / ESP32 to send data and accept commands.
To make this easy, i've created a simple library in both the Arduino and PlatformIO library registries.
In the Arduino IDE, open the library manager and type Inventronix Press INSTALL to install the library.

Next, create your program. I've created a simple program below designed to use our schema to send data and control a heater.
1 | |
Upload your program to your Arduino / ESP32 and check the serial output!
You've got data flowing, a dashboard, and automated rules. Now:
API Endpoint:
1 | |
Required Headers:
1 | |
Payload Format:
1 | |
Response Format:
1 | |