Hopp til innhold
Drainbee
Kjøp
Lokalt API · Dokumentasjon
Fra firmware 1.2.5

Vannstand og enhetsstatus rett fra hjemmenettet.

Drainbee har ett skrivebeskyttet endepunkt: GET /status. JSON-svaret kommer direkte fra enheten – uten sky, API-nøkkel eller innlogging. Passer for dashbord, skript og smarthussystemer som Home Assistant, ioBroker og Node-RED.

  • Kun i lokalnettet
  • Kun lesing
  • JSON · HTTP-port 80

Finn enhetens IP

I Drainbee-appen

Enhetsinnstillinger → Lokal IP. Her vises den sist rapporterte adressen, for eksempel 192.168.1.42. Trykk på den for å åpne API-oversikten i appen.

I ruteren

Finn Drainbees IP i ruterens enhetsliste. Der kan du også reservere en fast adresse.

Tips: IP-adressen kan endres når ruteren starter på nytt. Sett opp en DHCP-reservasjon (alltid samme IP-adresse) slik at skriptene fortsetter å fungere.

Første forespørsel

Et enkelt HTTP GET-kall er nok. Bytt ut IP-adressen med enhetens adresse. Du kan også skrive den rett i nettleserens adressefelt.

Terminal
curl http://192.168.1.42/status

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

Svar og felter

Svaret er et JSON-objekt med Content-Type: application/json og Cache-Control: no-store. En forespørsel starter ikke en ny måling – du får siste kjente verdi og alderen på den.

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 Enhetens identifikator, slik den vises i appen.
firmwareVersion string Installert firmware, for eksempel 1.2.5.
uptimeMs number Millisekunder siden enheten sist startet – ikke et kalendertidsstempel.
measurement.cm number | null Siste utjevnede vannstand i centimeter. null før første måling.
measurement.ageMs number | null Målingens alder i millisekunder. En forespørsel starter ingen ny måling. null før første måling.
wifi.isConnected boolean Om Drainbee er koblet til Wi-Fi.
wifi.localIp string | null Nåværende IP i hjemmenettet. null når den ikke er tilgjengelig.
wifi.rssiDbm number | null Signalstyrke i dBm (nærmere 0 er bedre; −60 er bra, −80 er svakt). null når den ikke er tilgjengelig.
mqtt.isConnected boolean Om forbindelsen til Drainbee-skyen er aktiv. Det lokale API-et fungerer uavhengig av dette.
memory.freeHeapBytes number Ledig arbeidsminne nå, i byte.
memory.minFreeHeapBytes number Laveste mengde ledig arbeidsminne siden oppstart, i byte.
memory.largestFreeBlockBytes number Største sammenhengende ledige minneblokk i byte.

Senere firmwareversjoner kan legge til felter. Ikke stol på rekkefølgen på nøklene.

Integrasjonseksempler

Alle eksemplene leser measurement.cm og håndterer null – før første måling finnes ingen verdi. Dette er vanlige HTTP-kall; det finnes ingen innebygd Drainbee-integrasjon eller støtte for Matter eller HomeKit.

Home Assistant

configuration.yaml
sensor:
  - platform: rest
    name: "Drainbee vannstand"
    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 konfigurert i YAML. Når measurement.cm er null, vises sensoren som utilgjengelig. Legg til under eksisterende sensor:-oppføringer i stedet for å lage en ekstra sensor:-blokk.

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 ennå" });
  return null;
}
msg.ageMs = measurement.ageMs;
msg.payload = measurement.cm;
node.status({ fill: "blue", shape: "dot", text: measurement.cm + " cm" });
return msg;

Sett en HTTP Request-node til http://192.168.1.42/status og velg et tolket JSON-objekt som svar. Utløs den med en Inject-node hvert 60. sekund og legg deretter til denne Function-noden.

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 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 oppretter et datapunkt og oppdaterer det hvert minutt. Manglende målinger og tilkoblingsfeil lagres som null, slik at gamle verdier ikke fremstår som aktuelle.

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 ennå" 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ørsel med Pythons standardbibliotek – ingen ekstra pakker. En manglende måling gir None; tilkoblingsfeil rapporteres som feil.

Avlesningsintervall: 30–60 s er tilstrekkelig. Forespørsler gjør ikke målingen raskere; bruk measurement.ageMs for å oppdage gamle verdier.

Feil og hjelp

200
OK

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

404
Not Found

Ukjent sti. Bare /status finnes – stier som /value er ikke tilgjengelige i firmware 1.2.5.

405
Method Not Allowed

Kun GET støttes. POST, PUT og DELETE avvises.

503
Service Unavailable

Statusen kunne ikke opprettes akkurat nå. Vent litt og prøv igjen.

Ingen respons? Sjekk dette i rekkefølge:

  1. Stemmer IP-adressen?

    Sammenlign med Enhetsinnstillinger → Lokal IP i appen eller ruterens enhetsliste. Adressen kan endres etter en omstart av ruteren – en DHCP-reservasjon hjelper.

  2. Er firmwaren oppdatert?

    GET /status finnes fra 1.2.5. Eldre firmware svarer ikke på denne stien. Se versjonen i appens enhetsinnstillinger.

  3. Samme nettverk?

    Gjestenett og separate Wi-Fi-nett, som et IoT-VLAN, sperrer ofte tilgang mellom enheter. Klienten din må være i samme nett som Drainbee eller ha en rute dit.

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

    Sjekk strømforsyningen og ruterens enhetsliste. Det lokale API-et trenger Wi-Fi. En manglende skyforbindelse alene hindrer ikke lokal tilgang.

  5. Feil protokoll?

    Bruk http://, ikke https://. Noen nettlesere legger til https automatisk – skriv adressen med http://.

Nettverk og sikkerhet

Det lokale API-et er laget for ditt betrodde hjemmenettverk. Det har ingen autentisering eller HTTPS. Alle som kan nå Drainbee i nettverket, kan lese status, men ingenting kan endres via API-et.

Ikke gjør det offentlig tilgjengelig

Ikke videresend port 80 til Drainbee i ruteren. Bruk Drainbee-appen eller et VPN til hjemmenettet for ekstern tilgang.

Uavhengig av skyen

Forespørselen går rett til enheten og forlater ikke nettverket ditt. Den fungerer også når MQTT- eller skyforbindelsen er nede, så lenge Drainbee har strøm og Wi-Fi.

Finnes ikke i 1.2.5

  • Andre endepunkter som /value, /history eller konfigurasjon
  • Strømming, WebSockets eller pushvarsler via det lokale API-et
  • Frakoblet historikk på enheten – historikken vises i appen