Zum Inhalt springen
Drainbee
Kaufen
Lokale API · Dokumentation
Ab Firmware 1.2.5

Wasserstand und Gerätestatus direkt aus Deinem Heimnetz.

Drainbee stellt einen einzigen, lesenden Endpunkt bereit: GET /status. Die Antwort ist JSON und kommt direkt vom Gerät – ohne Cloud, ohne API-Key, ohne Login. Ideal für Dashboards, Skripte und Smart-Home-Systeme wie Home Assistant, ioBroker oder Node-RED.

  • Nur im lokalen Netz
  • Nur lesend
  • JSON · HTTP Port 80

Geräte-IP finden

In der Drainbee App

Geräteeinstellungen → Lokale IP. Dort steht die zuletzt gemeldete Adresse, z. B. 192.168.1.42. Ein Tipp darauf öffnet die API-Übersicht in der App.

Im Router

In der Geräteliste Deines Routers (z. B. FRITZ!Box → Heimnetz) findest Du die IP von Drainbee. Dort kannst Du die Adresse auch fest vergeben.

Tipp: Die IP kann sich nach einem Neustart des Routers ändern. Richte im Router eine DHCP-Reservierung („immer die gleiche IP zuweisen“) ein, damit Deine Skripte dauerhaft funktionieren.

Erste Anfrage

Ein einfacher HTTP-GET genügt. Ersetze die IP durch die Adresse Deines Geräts. Im Browser reicht auch die Eingabe in der Adresszeile.

Terminal
curl http://192.168.1.42/status

Methode
GET
Pfad
/status
Port
80 (HTTP)
Auth
keine

Antwort & Felder

Die Antwort ist ein JSON-Objekt mit Content-Type: application/json und Cache-Control: no-store. Eine Anfrage löst keine neue Messung aus – Du bekommst den letzten bekannten Wert samt Alter.

200 OK · Beispielantwort
{
  "deviceId": "drainbee",
  "firmwareVersion": "1.2.5",
  "uptimeMs": 86400000,
  "measurement": {
    "cm": 42,
    "ageMs": 3200
  },
  "wifi": {
    "isConnected": true,
    "localIp": "192.168.1.42",
    "rssiDbm": -61
  },
  "mqtt": {
    "isConnected": false
  },
  "memory": {
    "freeHeapBytes": 142000,
    "minFreeHeapBytes": 98000,
    "largestFreeBlockBytes": 86000
  }
}

Antwort & Felder
Feld Typ Bedeutung
deviceId string Kennung des Geräts, wie in der App angezeigt.
firmwareVersion string Installierte Firmware, z. B. „1.2.5“.
uptimeMs number Millisekunden seit dem letzten Start des Geräts – kein Kalenderzeitstempel.
measurement.cm number | null Zuletzt geglätteter Wasserstand in Zentimetern. null vor der ersten Messung.
measurement.ageMs number | null Alter dieser Messung in Millisekunden. Eine Anfrage löst keine neue Messung aus. null vor der ersten Messung.
wifi.isConnected boolean Ob Drainbee mit dem WLAN verbunden ist.
wifi.localIp string | null Aktuelle IP im Heimnetz. null, wenn nicht verfügbar.
wifi.rssiDbm number | null Signalstärke in dBm (näher an 0 ist besser; −60 gut, −80 schwach). null, wenn nicht verfügbar.
mqtt.isConnected boolean Ob die Verbindung zur Drainbee Cloud besteht. Die lokale API funktioniert unabhängig davon.
memory.freeHeapBytes number Aktuell freier Arbeitsspeicher in Bytes.
memory.minFreeHeapBytes number Kleinster freier Arbeitsspeicher seit dem Start, in Bytes.
memory.largestFreeBlockBytes number Größter zusammenhängender freier Speicherblock in Bytes.

Zusätzliche Felder können in späteren Firmware-Versionen hinzukommen. Verlasse Dich nicht auf die Reihenfolge der Schlüssel.

Integrationsbeispiele

Alle Beispiele lesen measurement.cm und behandeln null – vor der ersten Messung gibt es noch keinen Wert. Es sind gewöhnliche HTTP-Abfragen; eine native Drainbee-Integration, Matter oder HomeKit gibt es nicht.

Home Assistant

configuration.yaml
sensor:
  - platform: rest
    name: "Drainbee Wasserstand"
    unique_id: drainbee_water_level
    resource: http://192.168.1.42/status
    scan_interval: 60
    timeout: 5
    unit_of_measurement: "cm"
    device_class: distance
    state_class: measurement
    availability: "{{ value_json.measurement.cm is number }}"
    value_template: "{{ value_json.measurement.cm }}"
    json_attributes_path: "$.measurement"
    json_attributes:
      - ageMs

REST-Sensor via YAML. Solange measurement.cm null ist, wird der Sensor als nicht verfügbar angezeigt. Ergänze bestehende sensor:-Einträge, statt einen zweiten sensor:-Block anzulegen.

Node-RED

flow.js · Function-Node
const measurement = msg.payload?.measurement;
if (typeof measurement?.cm !== "number") {
  node.status({ fill: "grey", shape: "ring", text: "Noch keine Messung" });
  return null;
}
msg.ageMs = measurement.ageMs;
msg.payload = measurement.cm;
node.status({ fill: "blue", shape: "dot", text: measurement.cm + " cm" });
return msg;

HTTP-Request-Node auf http://192.168.1.42/status mit Ausgabe „JSON-Objekt“, davor ein Inject-Node alle 60 Sekunden. Danach folgt diese Function-Node.

ioBroker

Skript · JavaScript-Adapter
const STATE_ID = "javascript.0.drainbee.water_level_cm";
createState(STATE_ID, null, {
  type: "number", role: "value", unit: "cm",
  read: true, write: false
}, () => {
  schedule("*/1 * * * *", () => {
    httpGet("http://192.168.1.42/status", { timeout: 5000 }, (err, response) => {
      if (err || response.statusCode !== 200) {
        setState(STATE_ID, null, true);
        log("Drainbee nicht erreichbar", "warn");
        return;
      }
      try {
        const cm = JSON.parse(response.data).measurement?.cm;
        setState(STATE_ID, typeof cm === "number" ? cm : null, true);
      } catch {
        setState(STATE_ID, null, true);
      }
    });
  });
});

JavaScript-Adapter: Legt einen Datenpunkt an und aktualisiert ihn jede Minute. Fehlende Messwerte oder Verbindungsfehler werden als null gespeichert, damit kein alter Wert als aktuell erscheint.

Python

drainbee.py
import json
import urllib.error
import urllib.request

def water_level_cm(ip="192.168.1.42", timeout=5):
    with urllib.request.urlopen(f"http://{ip}/status", timeout=timeout) as response:
        data = json.load(response)
    return data["measurement"]["cm"]

try:
    cm = water_level_cm()
    print("Noch keine Messung" if cm is None else f"{cm} cm")
except (OSError, urllib.error.URLError, ValueError, KeyError) as error:
    raise SystemExit(f"Drainbee nicht erreichbar: {error}")

Eine Abfrage mit der Python-Standardbibliothek – ohne zusätzliche Pakete. Keine Messung ergibt None; Verbindungsfehler werden als Fehler ausgegeben.

Abfrageintervall: 30–60 s sind ausreichend. Eine Abfrage beschleunigt die Messung nicht; nutze measurement.ageMs, um veraltete Werte zu erkennen.

Fehler & Hilfe

200
OK

Status als JSON. Einzelne Felder können null sein.

404
Not Found

Unbekannter Pfad. Es gibt nur /status – andere Pfade wie /value existieren in Firmware 1.2.5 nicht.

405
Method Not Allowed

Nur GET wird unterstützt. POST, PUT und DELETE werden abgelehnt.

503
Service Unavailable

Der Status konnte gerade nicht erstellt werden. Kurz warten und erneut versuchen.

Keine Antwort? Prüfe der Reihe nach:

  1. Stimmt die IP?

    Vergleiche mit Geräteeinstellungen → Lokale IP in der App oder der Geräteliste im Router. Nach einem Router-Neustart kann sie sich geändert haben – eine DHCP-Reservierung hilft.

  2. Ist die Firmware aktuell?

    GET /status gibt es ab 1.2.5. Ältere Firmware antwortet nicht auf diesen Pfad. Die Version siehst Du in der App unter Geräteeinstellungen.

  3. Gleiches Netz?

    Gastnetze und getrennte WLANs (z. B. IoT-VLAN) lassen oft keinen Zugriff untereinander zu. Dein Client muss im selben Netz wie Drainbee sein oder eine Route dahin haben.

  4. Hat Drainbee Strom und WLAN?

    Prüfe die Stromversorgung und die Geräteliste im Router. Ohne WLAN ist die lokale API nicht erreichbar. Eine fehlende Cloud-Verbindung allein verhindert den lokalen Zugriff nicht.

  5. Falsches Protokoll?

    Nutze http://, nicht https://. Manche Browser ergänzen automatisch https – tippe die Adresse mit http:// ein.

Netzwerk & Sicherheit

Die lokale API ist für Dein vertrauenswürdiges Heimnetz gedacht. Sie hat keine Authentifizierung und kein HTTPS – wer Drainbee im Netz erreichen kann, kann den Status lesen. Geändert werden kann darüber nichts.

Nicht öffentlich freigeben

Richte keine Portfreigabe für Port 80 auf Drainbee im Router ein. Für den Zugriff von außen nutze die Drainbee App oder ein VPN in Dein Heimnetz.

Unabhängig von der Cloud

Die Anfrage geht direkt an das Gerät und verlässt Dein Netz nicht. Sie funktioniert auch, wenn die MQTT-/Cloud-Verbindung gerade getrennt ist – solange Drainbee Strom und WLAN hat.

Was es in 1.2.5 nicht gibt

  • Weitere Endpunkte wie /value, /history oder Konfiguration
  • Streaming, WebSockets oder Push-Benachrichtigungen über die lokale API
  • Ein Offline-Verlauf auf dem Gerät – den Verlauf zeigt die App