NEBLI
Nebli Environment

Connecting sensors

Send readings into Nebli Environment from a sensor box, a vendor cloud or a TALQ lighting gateway, and see the first one arrive.

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

  1. Go to Settings › Adapters and choose New adapter.
  2. Choose the kind and give it a name, for example "MQTT sensors · City".
  3. 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_pole today. 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 its value and unit. A value is a number, or a word for the channels that take words (power_source, link).
  • A null or 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) or 503, or when MQTT closes the connection without acknowledging: nothing was stored.
  • A wrong or revoked credential gets 401 over 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 (409 over 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