← Integrations

Your own hardware

Connects today

Anything 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

  1. 1Install the Python SDK
  2. 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. 1

    Install the SDK.

    bash
    pip install plexus-python
  2. 2

    Create a key on the API Keys page at app.plexus.company/api and set it on the Pi.

    bash
    export PLEXUS_API_KEY=plx_...
  3. 3

    Save this as pi_temp.py. The kernel reports CPU temperature in millidegrees, so divide by 1000.

    python
    import 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. 4

    Run it.

    bash
    python 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. 1

    Create an API key with write access at app.plexus.company/api. Keys without it get a 403.

  2. 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. 3

    Open the serial monitor at 115200 baud. Each POST prints its HTTP status code.

  4. 4

    To check your key before flashing, send the same body with curl.

    bash
    curl -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.