Hoppa till innehållet
Drainbee
Köp
Lokalt API · Dokumentation
Från firmware 1.2.5

Vattennivå och enhetsstatus direkt från ditt hemnätverk.

Drainbee har en enda skrivskyddad ändpunkt: GET /status. JSON-svaret kommer direkt från enheten – utan moln, API-nyckel eller inloggning. Passar egna paneler, skript och smarta hem-system som Home Assistant, ioBroker och Node-RED.

  • Bara i det lokala nätverket
  • Endast läsning
  • JSON · HTTP-port 80

Hitta enhetens IP

I Drainbee-appen

Enhetsinställningar → Lokal IP. Här visas den senast rapporterade adressen, till exempel 192.168.1.42. Tryck på den för att öppna API-översikten i appen.

I routern

Hitta Drainbees IP i routerns enhetslista. Där kan du också reservera en fast adress.

Tips: IP-adressen kan ändras när routern startas om. Ställ in en DHCP-reservation (alltid samma IP-adress) så att dina skript fortsätter fungera.

Första anropet

Ett vanligt HTTP GET-anrop räcker. Byt ut IP-adressen mot enhetens adress. Du kan även skriva den direkt i webbläsarens adressfält.

Terminal
curl http://192.168.1.42/status

Metod
GET
Sökväg
/status
Port
80 (HTTP)
Autentisering
ingen

Svar och fält

Svaret är ett JSON-objekt med Content-Type: application/json och Cache-Control: no-store. Ett anrop startar inte en ny mätning – du får det senaste kända värdet och dess ålder.

200 OK · Exempelsvar
{
  "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
  }
}

Svar och fält
Fält Typ Beskrivning
deviceId string Enhetens identifierare, som den visas i appen.
firmwareVersion string Installerad firmware, till exempel 1.2.5.
uptimeMs number Millisekunder sedan enhetens senaste start – inte en kalendertidsstämpel.
measurement.cm number | null Senaste utjämnade vattennivån i centimeter. null före första mätningen.
measurement.ageMs number | null Mätningens ålder i millisekunder. Ett anrop startar ingen ny mätning. null före första mätningen.
wifi.isConnected boolean Om Drainbee är ansluten till Wi-Fi.
wifi.localIp string | null Aktuell IP i hemnätverket. null om den inte är tillgänglig.
wifi.rssiDbm number | null Signalstyrka i dBm (närmare 0 är bättre; −60 är bra, −80 är svagt). null om den inte är tillgänglig.
mqtt.isConnected boolean Om anslutningen till Drainbees moln är aktiv. Det lokala API:et fungerar oberoende av detta.
memory.freeHeapBytes number Ledigt arbetsminne just nu i byte.
memory.minFreeHeapBytes number Minsta lediga arbetsminne sedan start, i byte.
memory.largestFreeBlockBytes number Största sammanhängande lediga minnesblock i byte.

Senare firmwareversioner kan lägga till fält. Förlita dig inte på nycklarnas ordning.

Integrationsexempel

Alla exempel läser measurement.cm och hanterar null – före första mätningen finns inget värde. Det är vanliga HTTP-anrop; det finns ingen inbyggd Drainbee-integration och inget stöd för Matter eller HomeKit.

Home Assistant

configuration.yaml
sensor:
  - platform: rest
    name: "Drainbee vattennivå"
    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 med YAML. När measurement.cm är null visas sensorn som otillgänglig. Lägg till i dina befintliga sensor:-poster i stället för att skapa ett andra sensor:-block.

Node-RED

flow.js · Function-nod
const measurement = msg.payload?.measurement;
if (typeof measurement?.cm !== "number") {
  node.status({ fill: "grey", shape: "ring", text: "Ingen mätning ännu" });
  return null;
}
msg.ageMs = measurement.ageMs;
msg.payload = measurement.cm;
node.status({ fill: "blue", shape: "dot", text: measurement.cm + " cm" });
return msg;

Ställ in en HTTP Request-nod med http://192.168.1.42/status och välj ett tolkat JSON-objekt som svar. Kör den med en Inject-nod var 60:e sekund och lägg sedan till denna Function-nod.

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 kan inte nås", "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-adaptern skapar en datapunkt och uppdaterar den varje minut. Saknade mätvärden och anslutningsfel sparas som null så att gamla värden inte visas som aktuella.

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("Ingen mätning ännu" if cm is None else f"{cm} cm")
except (OSError, urllib.error.URLError, ValueError, KeyError) as error:
    raise SystemExit(f"Drainbee kan inte nås: {error}")

Ett anrop med Pythons standardbibliotek – inga extra paket. Saknad mätning ger None; anslutningsfel rapporteras som fel.

Avläsningsintervall: 30–60 s räcker. Anrop gör inte mätningen snabbare; använd measurement.ageMs för att upptäcka gamla värden.

Fel och hjälp

200
OK

Status som JSON. Enskilda fält kan vara null.

404
Not Found

Okänd sökväg. Bara /status finns – sökvägar som /value är inte tillgängliga i firmware 1.2.5.

405
Method Not Allowed

Endast GET stöds. POST, PUT och DELETE avvisas.

503
Service Unavailable

Status kunde inte skapas just nu. Vänta en stund och försök igen.

Inget svar? Kontrollera i denna ordning:

  1. Stämmer IP-adressen?

    Jämför med Enhetsinställningar → Lokal IP i appen eller routerns enhetslista. Adressen kan ändras efter en omstart av routern – en DHCP-reservation hjälper.

  2. Är firmware uppdaterad?

    GET /status finns från 1.2.5. Äldre firmware svarar inte på den sökvägen. Versionen visas i appens enhetsinställningar.

  3. Samma nätverk?

    Gästnätverk och separata Wi-Fi-nät, till exempel ett IoT-VLAN, blockerar ofta åtkomst mellan enheter. Din klient måste vara i samma nät som Drainbee eller ha en rutt dit.

  4. Har Drainbee ström och Wi-Fi?

    Kontrollera strömförsörjningen och routerns enhetslista. Det lokala API:et behöver Wi-Fi. En förlorad molnanslutning hindrar inte i sig lokal åtkomst.

  5. Fel protokoll?

    Använd http://, inte https://. Vissa webbläsare lägger till https automatiskt – skriv uttryckligen http:// i adressen.

Nätverk och säkerhet

Det lokala API:et är avsett för ditt betrodda hemnätverk. Det saknar autentisering och HTTPS. Alla som kan nå Drainbee i nätverket kan läsa status, men inget kan ändras via API:et.

Gör det inte offentligt tillgängligt

Ställ inte in portvidarebefordran för port 80 till Drainbee i routern. Använd Drainbee-appen eller ett VPN till hemnätverket för fjärråtkomst.

Oberoende av molnet

Anropet går direkt till enheten och lämnar inte ditt nätverk. Det fungerar även när MQTT- eller molnanslutningen är nere, så länge Drainbee har ström och Wi-Fi.

Finns inte i 1.2.5

  • Andra ändpunkter som /value, /history eller konfiguration
  • Strömning, WebSockets eller pushnotiser via det lokala API:et
  • Offlinehistorik på enheten – historiken visas i appen