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.
The problem with IoT integration
You need an MQTT broker, TLS certificates, auth config, and monitoring, before writing a single line of application code.
Bad sensor readings silently corrupt dashboards and trigger false alerts. Validation happens too late, if at all.
Every new integration (Slack alerts, S3 archival, database writes) means another Lambda, another deployment, another thing to monitor.
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.
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.
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.
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"]
) 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.
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.
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.
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.
Built for real IoT workloads
Stream camera feeds from devices via the REST API. View streams in real time with Server-Sent Events.
QoS 1 delivery, TLS 1.2/1.3, CA and client certificates, retained messages, and configurable keep-alive.
Organize devices by location, type, or project. Publish messages to an entire group in one call.
SDKs queue data locally (SQLite, BoltDB, IndexedDB) and sync automatically when connectivity returns.
Track online/offline status and last-seen timestamps for every entity. Trigger flows when devices go silent.
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 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.
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.
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.
Tendrl