Who this is for: the integrator or engineer who connects devices, and the administrator who creates their credentials.
Before you start: an Administrator creates the adapter (People and access). The sender needs outbound internet access over TLS; nothing has to reach into your network.
Choose how readings get in
An adapter is one way readings and nodes enter Nebli Environment, with its own credential. There are three kinds:
| Kind | Use it for |
|---|---|
| MQTT | Devices that publish over MQTT. |
| HTTP | Boxes or clouds that send over HTTPS. |
| TALQ | A street-lighting gateway that speaks TALQ. |
Each adapter can be revoked or rotated on its own, without touching the others (Network health).
Create an adapter
- Go to Settings › Adapters and choose New adapter.
- Choose the kind and give it a name, for example "MQTT sensors · City".
- Choose Create.
A card shows the credential and where to put it. The secret is shown this once and cannot be recovered, so copy it before you close the card.
What the card shows depends on the kind:
| Kind | What you set on the sender |
|---|---|
| MQTT | Server and port, User (the key id), Password (the secret), Topic readings/<key id>/<hardware id>, and Report every when the kind has a set interval. |
| HTTP | Address POST …/v1/readings/<hardware id> and the Header Authorization: Bearer <key id>.<secret>. The credential always goes in the header, never in the address. |
| TALQ | The platform's TALQ address and the Header the gateway sends, plus the gateway's own address and the platform's credential towards it. |
The message (format v1)
MQTT and HTTP senders send the same JSON message: one node, one device time, and its channels. The node is the hardware id in the topic or the address, never in the message.
{
"kind": "smart_pole",
"device_time": "2026-10-11T14:05:00-05:00",
"channels": {
"pm25": { "value": 18.4, "unit": "µg/m³" },
"temperature": { "value": 19.2, "unit": "°C" },
"power_source": { "value": "mains" }
}
}
kind: the node's kind,smart_poletoday. It is used only the first time a node reports.device_time: when the device took the readings, as an ISO 8601 date and time with its offset. It is required.channels: each channel key with itsvalueandunit. A value is a number, or a word for the channels that take words (power_source,link).- A
nullor missing value means "no reading", never zero. That channel is skipped and the rest of the message is kept. - A message can carry up to 64 channels and 16 KB.
Channels and units
These are the channels a smart pole reports, with the unit Nebli Environment stores. Other common units are converted for you: °F and K for temperature, Pa, kPa and mbar for pressure, km/h and knots for wind, mV and mA, and ppb or ppm in either direction.
| Key | Channel | Unit |
|---|---|---|
temperature |
Temperature | °C |
humidity |
Humidity | % RH |
pressure |
Pressure | hPa |
wind_speed |
Wind speed | m/s |
wind_gust |
Wind gust | m/s |
wind_direction |
Wind direction | ° |
noise |
Noise | dB(A) |
light |
Light | lux |
pole_voltage |
Pole voltage | V |
pole_current |
Pole current | A |
pm1 |
PM1 | µg/m³ |
pm25 |
PM2.5 | µg/m³ |
pm10 |
PM10 | µg/m³ |
co |
Carbon monoxide | ppm |
co2 |
Carbon dioxide | ppm |
no |
Nitric oxide | ppb |
no2 |
Nitrogen dioxide | ppb |
o3 |
Ozone | ppb |
battery |
Battery | % |
power_source |
Power source | mains, solar or battery |
link |
Link | wifi or cellular |
rssi |
Link signal | dBm |
What happens to a message
- It is acknowledged only once it is stored. Over HTTP the answer is
202. Over MQTT, a QoS 1 publish is acknowledged after the readings are stored. An acknowledged message is never lost. - A message sent twice is recorded once. Resending after a timeout is safe.
- A message that cannot be read is refused: malformed JSON, no device time, no channel with a value, too many channels or too large. Over HTTP the answer is
400; it is counted against the credential on the network page. - Try again later when HTTP answers
429(the credential is sending too fast) or503, or when MQTT closes the connection without acknowledging: nothing was stored. - A wrong or revoked credential gets
401over HTTP, and is refused at connection over MQTT. - Too many nodes waiting. When your organisation already has the most unclaimed nodes it can hold, a message from a new hardware id is refused (
409over HTTP) until some are adopted or retired. - A credential sends only for its own nodes. A reading for a node another credential registered is refused and counted on the network page, never recorded under that node.
- An unknown channel or unit, or an impossible value, is kept as suspect. It is stored for diagnosis and shown on the network page, but never opens an alert or feeds an index. Nothing is dropped silently.
The first reading
The first time a hardware id reports, Nebli Environment creates the node and lists it under Unclaimed nodes on the network page, with the adapter that reported it. An Administrator adopts it into a site, and it then appears on the map and in the table (Network health).
TALQ gateways
A TALQ gateway works both ways. It calls Nebli Environment to declare its devices and deliver its reports, and Nebli Environment calls the gateway to configure what it records and when, because a TALQ gateway sends nothing until it has that configuration. Nebli Environment asks for recording at the node's reporting interval where the gateway supports it, and otherwise accepts the gateway's own recording. View exchange on the network page shows the conversation in both directions.
Nebli Environment implements the TALQ specification; it is not TALQ-certified.
Next
- Network health: adapters, unclaimed nodes and what needs attention.
- Map, node page and table: every view, and exporting what you see.