Use Case

IoT & Device Monitoring

Go from bare microcontroller to production data pipeline in minutes. Tendrl handles connectivity, validation, state, and alerting, so you focus on what your device actually does.

Coming soon Quick start guide

The problem with IoT integration

Broker setup

You need an MQTT broker, TLS certificates, auth config, and monitoring, before writing a single line of application code.

Data trust

Bad sensor readings silently corrupt dashboards and trigger false alerts. Validation happens too late, if at all.

Glue code

Every new integration (Slack alerts, S3 archival, database writes) means another Lambda, another deployment, another thing to monitor.

Device management

Tracking which devices are online, their last-known state, firmware version, and API keys becomes a custom project in itself.

How Tendrl solves it

One platform replaces your broker, validation layer, state store, and automation glue.

1

Register your device as an entity

Create an entity in Contact and get an API key. Each entity tracks its own status, state table, messages, and connection history. Group related devices with fanouts for bulk operations.

2

Install an SDK and start sending data

SDKs for Python, Go, JavaScript, and MicroPython (built for ESP32 and Pico W). Every SDK handles TLS, automatic retries, batching, and offline storage: if your device loses connectivity, data queues locally and syncs when it reconnects.

MicroPython (ESP32 / Pico W)
from tendrl import Client

# Offline storage queues data when Wi-Fi drops
client = Client(mode="sync", offline_storage=True)
client.start()

# Publish a reading: validated, stored, and routed
client.publish(
    data={"temperature": 22.4, "humidity": 61},
    tags=["sensors", "living-room"]
)
REST API (any language)
curl -X POST https://app.tendrl.com/api/entities/message \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -d '{"data": {"temperature": 23.5, "humidity": 65}}' 

Already have MQTT devices? No SDK required: any MQTT 3.1.1 or 5.0 client works. Point your existing fleet at our broker and start sending validated messages. Bring your own MQTT client →

Don't want to install anything on the host? Run the Tendrl Device Console from your browser. Chrome, Edge, Opera, or Firefox drives the board directly over WebSerial: one form to flash config, install the SDK, and reboot. No Python on your machine required.

3

Validate data at ingress

Attach a validation service to your entity. Contact checks every message against your rules before it enters the system. Bad data gets rejected with field-level error messages, not silently stored.

Comparison gt, lt, ge, le, between: reject out-of-range readings
String startsWith, endsWith, contains: enforce naming conventions
Set membership in, notIn, hasAll, hasAny: validate enums and tag sets
Type checks isTimestamp: ensure temporal fields are parseable
4

Store and sync device state

Each entity has a state table: a persistent JSON document for current device state (firmware version, battery level, operating mode). Update it via REST or directly from your device with state_update messages. If MQTT is enabled, state changes auto-publish as retained messages so subscribers always get the latest value.

5

Automate what happens next

Connect Contact to Strand and build visual workflows that react to your device data. No Lambdas, no webhook handlers, no glue code.

Alert on thresholds Temperature > 35°C → Slack message + email to on-call
Archive to cloud storage Every validated reading → S3, Azure Blob, or GCS
Enrich with AI Classify anomalies with GPT-4 or Claude, attach labels to the reading
Route conditionally If/else branching based on sensor type, location, or severity

Built for real IoT workloads

JPEG streaming

Stream camera feeds from devices via the REST API. View streams in real time with Server-Sent Events.

MQTT with TLS

QoS 1 delivery, TLS 1.2/1.3, CA and client certificates, retained messages, and configurable keep-alive.

Fanouts

Organize devices by location, type, or project. Publish messages to an entire group in one call.

Offline resilience

SDKs queue data locally (SQLite, BoltDB, IndexedDB) and sync automatically when connectivity returns.

Heartbeat monitoring

Track online/offline status and last-seen timestamps for every entity. Trigger flows when devices go silent.

Role-based access

Fine-grained IAM policies control which users and entities can read, write, connect, or stream, down to individual resource paths.

Example: temperature monitoring with alerts

A complete setup from sensor to Slack: no infrastructure to manage.

ESP32 MicroPython SDK
Contact Validate & store
Strand If temp > 35°C
Slack + S3 Alert & archive
Device

ESP32 reads DHT22 sensor every 30 seconds. The MicroPython SDK batches readings and sends over MQTT with TLS. If Wi-Fi drops, readings queue in flash and sync on reconnect.

Validation

Contact checks that temperature is between -40 and 85 (sensor range) and humidity is between 0 and 100. Out-of-range readings are rejected before hitting your pipeline.

Automation

A Strand workflow triggers on each new reading. An if/else node checks the threshold. Above 35°C: send a Slack alert with device name, temperature, and timestamp, then archive the reading to S3. Below: archive only.

Connect your first device in five minutes

The free tier includes 5 entities, 10 workflows, and 550 monthly runs. No credit card required.

Coming soon Quick start guide