Spring til indhold
Drainbee
Køb
Lokalt API · Dokumentation
Fra firmware 1.2.5

Vandstand og enhedsstatus direkte fra dit hjemmenetværk.

Drainbee har ét skrivebeskyttet endpoint: GET /status. JSON-svaret kommer direkte fra enheden – uden sky, API-nøgle eller login. Velegnet til dashboards, scripts og smart home-systemer som Home Assistant, ioBroker og Node-RED.

  • Kun på det lokale netværk
  • Kun læsning
  • JSON · HTTP-port 80

Find enhedens IP

I Drainbee-appen

Enhedsindstillinger → Lokal IP. Her vises den senest rapporterede adresse, f.eks. 192.168.1.42. Tryk på den for at åbne API-oversigten i appen.

I routeren

Find Drainbees IP på routerens enhedsliste. Her kan du også reservere en fast adresse.

Tip: IP-adressen kan ændre sig, når routeren genstarter. Opret en DHCP-reservation (altid samme IP-adresse), så dine scripts bliver ved med at virke.

Første forespørgsel

Et enkelt HTTP GET-kald er nok. Erstat IP-adressen med din enheds adresse. Du kan også skrive den direkte i browserens adresselinje.

Terminal
curl http://192.168.1.42/status

Metode
GET
Sti
/status
Port
80 (HTTP)
Godkendelse
ingen

Svar og felter

Svaret er et JSON-objekt med Content-Type: application/json og Cache-Control: no-store. En forespørgsel starter ikke en ny måling – du får den senest kendte værdi og dens alder.

200 OK · Eksempelsvar
{
  "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 og felter
Felt Type Beskrivelse
deviceId string Enhedens identifikator, som den vises i appen.
firmwareVersion string Installeret firmware, f.eks. 1.2.5.
uptimeMs number Millisekunder siden enhedens seneste start – ikke et kalendertidsstempel.
measurement.cm number | null Seneste udjævnede vandstand i centimeter. null før første måling.
measurement.ageMs number | null Målingens alder i millisekunder. En forespørgsel starter ingen ny måling. null før første måling.
wifi.isConnected boolean Om Drainbee er tilsluttet Wi-Fi.
wifi.localIp string | null Aktuel IP på hjemmenetværket. null, når den ikke er tilgængelig.
wifi.rssiDbm number | null Signalstyrke i dBm (tættere på 0 er bedre; −60 er godt, −80 er svagt). null, når den ikke er tilgængelig.
mqtt.isConnected boolean Om forbindelsen til Drainbee-skyen er aktiv. Det lokale API fungerer uafhængigt af den.
memory.freeHeapBytes number Aktuelt ledig arbejdshukommelse i byte.
memory.minFreeHeapBytes number Mindste mængde ledig arbejdshukommelse siden start, i byte.
memory.largestFreeBlockBytes number Største sammenhængende ledige hukommelsesblok i byte.

Senere firmwareversioner kan tilføje felter. Regn ikke med en bestemt rækkefølge af nøglerne.

Integrationseksempler

Alle eksempler læser measurement.cm og håndterer null – før den første måling er der ingen værdi. Det er almindelige HTTP-kald; der er ingen indbygget Drainbee-integration og ingen understøttelse af Matter eller HomeKit.

Home Assistant

configuration.yaml
sensor:
  - platform: rest
    name: "Drainbee vandstand"
    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 konfigureret i YAML. Når measurement.cm er null, vises sensoren som utilgængelig. Føj til dine eksisterende sensor:-poster i stedet for at oprette endnu en sensor:-blok.

Node-RED

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

Indstil en HTTP Request-node til http://192.168.1.42/status, og vælg et fortolket JSON-objekt som svar. Udløs den med en Inject-node hvert 60. sekund, og tilføj derefter denne Function-node.

ioBroker

Script · 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 ikke 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-adapteren opretter et datapunkt og opdaterer det hvert minut. Manglende målinger og forbindelsesfejl gemmes som null, så en gammel værdi ikke fremstår som aktuel.

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

Én forespørgsel med Pythons standardbibliotek – ingen ekstra pakker. En manglende måling giver None; forbindelsesfejl rapporteres som fejl.

Aflæsningsinterval: 30–60 s er tilstrækkeligt. Forespørgsler gør ikke målingen hurtigere; brug measurement.ageMs til at opdage gamle værdier.

Fejl og hjælp

200
OK

Status som JSON. Enkelte felter kan være null.

404
Not Found

Ukendt sti. Kun /status findes – stier som /value er ikke tilgængelige i firmware 1.2.5.

405
Method Not Allowed

Kun GET understøttes. POST, PUT og DELETE afvises.

503
Service Unavailable

Status kunne ikke oprettes lige nu. Vent lidt, og prøv igen.

Intet svar? Tjek i denne rækkefølge:

  1. Er IP-adressen korrekt?

    Sammenlign med Enhedsindstillinger → Lokal IP i appen eller routerens enhedsliste. Adressen kan ændre sig efter en genstart af routeren – en DHCP-reservation hjælper.

  2. Er firmwaren opdateret?

    GET /status findes fra 1.2.5. Ældre firmware svarer ikke på denne sti. Se versionen i appens enhedsindstillinger.

  3. Samme netværk?

    Gæstenetværk og separate Wi-Fi-net, f.eks. et IoT-VLAN, blokerer ofte adgangen mellem enheder. Din klient skal være på samme netværk som Drainbee eller have en rute til det.

  4. Har Drainbee strøm og Wi-Fi?

    Tjek strømforsyningen og routerens enhedsliste. Det lokale API kræver Wi-Fi. En manglende skyforbindelse alene forhindrer ikke lokal adgang.

  5. Forkert protokol?

    Brug http://, ikke https://. Nogle browsere tilføjer https automatisk – skriv adressen med http://.

Netværk og sikkerhed

Det lokale API er beregnet til dit betroede hjemmenetværk. Det har ingen godkendelse eller HTTPS. Alle, der kan nå Drainbee på netværket, kan læse status, men intet kan ændres via API'et.

Gør det ikke offentligt tilgængeligt

Opret ikke portvideresendelse for port 80 til Drainbee i routeren. Brug Drainbee-appen eller en VPN til hjemmenetværket til fjernadgang.

Uafhængigt af skyen

Forespørgslen går direkte til enheden og forlader ikke dit netværk. Den virker også, når MQTT- eller skyforbindelsen er nede, så længe Drainbee har strøm og Wi-Fi.

Findes ikke i 1.2.5

  • Andre endpoints som /value, /history eller konfiguration
  • Streaming, WebSockets eller pushnotifikationer via det lokale API
  • Offlinehistorik på enheden – historikken vises i appen