Your own hardware
Connects todayAnything that can make an HTTP request or open a websocket.
Devices & protocols · Device SDK
The other direction: instead of Plexus reading a system, the machine talks to Plexus. This is the only path where commands travel back.
What Plexus reads
- Whatever you send — named metrics with timestamps, plus events and video
- Prometheus remote-write, if that is what you already emit
What it does not read
- Anything you have not sent. There is no agent that goes looking
Connecting it
- 1Install the Python SDK
- 2Send a point with a metric name, a value and a timestamp
Tutorial
Raspberry Pi telemetry dashboard in 5 minutes
Send your Pi's CPU temperature to Plexus every second with the Python SDK. Needs Python 3.10 or newer, which Raspberry Pi OS Bookworm has.
- 1
Install the SDK.
bashpip install plexus-python - 2
Create a key on the API Keys page at app.plexus.company/api and set it on the Pi.
bashexport PLEXUS_API_KEY=plx_... - 3
Save this as pi_temp.py. The kernel reports CPU temperature in millidegrees, so divide by 1000.
pythonimport time from plexus import Plexus px = Plexus(source_id="pi-01") # reads PLEXUS_API_KEY def cpu_temp_c(): with open("/sys/class/thermal/thermal_zone0/temp") as f: return int(f.read()) / 1000 # millidegrees -> °C while True: px.send("cpu.temperature_c", cpu_temp_c()) time.sleep(1) - 4
Run it.
bashpython pi_temp.py
What you’ll see: The SDK prints a line when the first point lands. pi-01 appears in Plexus with cpu.temperature_c updating every second. Give each Pi its own source_id, or their readings merge into one source.
Tutorial
Stream ESP32 sensor data to a live dashboard
No SDK needed. The ESP32 posts JSON to the Plexus ingest endpoint over Wi-Fi with the Arduino HTTPClient library.
- 1
Create an API key with write access at app.plexus.company/api. Keys without it get a 403.
- 2
Flash this sketch. Set your Wi-Fi details, your key, and the pin your sensor is on.
cpp#include <WiFi.h> #include <WiFiClientSecure.h> #include <HTTPClient.h> const char* WIFI_SSID = "your-wifi"; const char* WIFI_PASS = "your-password"; const char* API_KEY = "plx_xxx"; // a write-scoped key const char* INGEST = "https://gateway.plexus.company/ingest"; void setup() { Serial.begin(115200); WiFi.begin(WIFI_SSID, WIFI_PASS); while (WiFi.status() != WL_CONNECTED) delay(500); } void loop() { int raw = analogRead(34); // your sensor's pin long rssi = WiFi.RSSI(); String body = String("{\"source_id\":\"esp32-01\",\"points\":[") + "{\"metric\":\"sensor.raw\",\"value\":" + raw + "}," + "{\"metric\":\"wifi.rssi\",\"value\":" + rssi + "}]}"; WiFiClientSecure client; client.setInsecure(); // skips certificate checks; pin the CA in production HTTPClient http; http.begin(client, INGEST); http.addHeader("Content-Type", "application/json"); http.addHeader("x-api-key", API_KEY); int code = http.POST(body); Serial.println(code); http.end(); delay(5000); } - 3
Open the serial monitor at 115200 baud. Each POST prints its HTTP status code.
- 4
To check your key before flashing, send the same body with curl.
bashcurl -X POST https://gateway.plexus.company/ingest \ -H "Content-Type: application/json" \ -H "x-api-key: plx_xxx" \ -d '{"source_id":"esp32-01","points":[{"metric":"sensor.raw","value":1234}]}'
What you’ll see: esp32-01 appears in Plexus with sensor.raw and wifi.rssi, a new point every five seconds. Without a timestamp in the body, Plexus stamps each point when it arrives.
Worth knowing
- A device on Pro that holds a live connection can be sent commands. The commands are the ones its own code declares with the SDK, and a person runs them from the Commands page or a dashboard panel.
Connect it, and the dashboards build themselves from the first data that lands.