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.
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.
{
"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
}
} | 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
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
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
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
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:
-
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.
-
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.
-
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.
-
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.
-
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
Fragen zur API? [email protected]
← Zurück zur Startseite