Siirry sisältöön
Drainbee
Osta
Paikallinen API · Dokumentaatio
Laiteohjelmistosta 1.2.5 alkaen

Vedenpinta ja laitteen tila suoraan kotiverkostasi.

Drainbee tarjoaa yhden vain lukuun tarkoitetun päätepisteen: GET /status. JSON-vastaus tulee suoraan laitteesta – ilman pilveä, API-avainta tai kirjautumista. Sopii koontinäyttöihin, skripteihin ja älykotijärjestelmiin, kuten Home Assistantiin, ioBrokeriin ja Node-REDiin.

  • Vain lähiverkossa
  • Vain luku
  • JSON · HTTP-portti 80

Laitteen IP-osoite

Drainbee-sovelluksessa

Laitteen asetukset → Paikallinen IP. Näet viimeksi ilmoitetun osoitteen, esimerkiksi 192.168.1.42. Napauta sitä avataksesi API:n esittelyn sovelluksessa.

Reitittimessä

Etsi Drainbeen IP reitittimen laiteluettelosta. Voit myös varata laitteelle pysyvän osoitteen siellä.

Vinkki: IP-osoite voi vaihtua reitittimen käynnistyessä uudelleen. Tee DHCP-varaus (aina sama IP-osoite), jotta skriptisi toimivat jatkossakin.

Ensimmäinen pyyntö

Tavallinen HTTP GET -pyyntö riittää. Korvaa IP-osoite oman laitteesi osoitteella. Voit myös kirjoittaa osoitteen suoraan selaimen osoiteriville.

Pääte
curl http://192.168.1.42/status

Menetelmä
GET
Polku
/status
Portti
80 (HTTP)
Tunnistautuminen
ei tarvita

Vastaus ja kentät

Vastaus on JSON-objekti, jonka otsakkeet ovat Content-Type: application/json ja Cache-Control: no-store. Pyyntö ei käynnistä uutta mittausta – saat viimeisimmän tunnetun arvon ja sen iän.

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

Vastaus ja kentät
Kenttä Tyyppi Kuvaus
deviceId string Laitteen tunniste sellaisena kuin se näkyy sovelluksessa.
firmwareVersion string Asennettu laiteohjelmisto, esimerkiksi 1.2.5.
uptimeMs number Millisekunnit laitteen viimeisimmästä käynnistyksestä – ei kalenteriaikaleima.
measurement.cm number | null Viimeisin tasoitettu vedenpinta senttimetreinä. null ennen ensimmäistä mittausta.
measurement.ageMs number | null Mittauksen ikä millisekunteina. Pyyntö ei käynnistä uutta mittausta. null ennen ensimmäistä mittausta.
wifi.isConnected boolean Onko Drainbee yhdistetty Wi-Fi-verkkoon.
wifi.localIp string | null Nykyinen IP-osoite kotiverkossa. null, jos ei saatavilla.
wifi.rssiDbm number | null Signaalin voimakkuus dBm-yksikköinä (lähempänä nollaa on parempi; −60 on hyvä, −80 heikko). null, jos ei saatavilla.
mqtt.isConnected boolean Onko yhteys Drainbeen pilvipalveluun aktiivinen. Paikallinen API toimii tästä riippumatta.
memory.freeHeapBytes number Vapaana oleva käyttömuisti tavuina.
memory.minFreeHeapBytes number Pienin vapaan käyttömuistin määrä käynnistyksen jälkeen, tavuina.
memory.largestFreeBlockBytes number Suurin yhtenäinen vapaa muistialue tavuina.

Myöhemmät laiteohjelmistoversiot voivat lisätä kenttiä. Älä luota avainten järjestykseen.

Integraatioesimerkit

Kaikki esimerkit lukevat measurement.cm-kentän ja käsittelevät null-arvon – ennen ensimmäistä mittausta arvoa ei ole. Nämä ovat tavallisia HTTP-pyyntöjä; valmista Drainbee-integraatiota, Matter- tai HomeKit-tukea ei ole.

Home Assistant

configuration.yaml
sensor:
  - platform: rest
    name: "Drainbee vedenpinta"
    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

YAML-määritetty REST-anturi. Kun measurement.cm on null, anturi näkyy poissa käytöstä. Lisää määritys olemassa olevaan sensor:-osioon sen sijaan, että loisit toisen sensor:-osion.

Node-RED

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

Aseta HTTP Request -solmun osoitteeksi http://192.168.1.42/status ja vastaukseksi jäsennetty JSON-objekti. Käynnistä pyyntö Inject-solmulla 60 sekunnin välein ja lisää sen jälkeen tämä Function-solmu.

ioBroker

Skripti · JavaScript-sovitin
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("Drainbeehen ei saada yhteyttä", "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-sovitin luo tietopisteen ja päivittää sen minuutin välein. Puuttuvat mittaukset ja yhteysvirheet tallennetaan null-arvona, jotta vanha arvo ei näytä ajantasaiselta.

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("Ei vielä mittausta" if cm is None else f"{cm} cm")
except (OSError, urllib.error.URLError, ValueError, KeyError) as error:
    raise SystemExit(f"Drainbeehen ei saada yhteyttä: {error}")

Yksi pyyntö Pythonin standardikirjastolla – ei lisäpaketteja. Puuttuva mittaus palauttaa None-arvon; yhteysongelmat ilmoitetaan virheinä.

Kyselyväli: 30–60 s riittää. Pyynnöt eivät nopeuta mittausta. Tunnista vanhentuneet arvot measurement.ageMs-kentän avulla.

Virheet ja ohjeet

200
OK

Tila JSON-muodossa. Yksittäisten kenttien arvo voi olla null.

404
Not Found

Tuntematon polku. Vain /status on käytössä – esimerkiksi /value ei ole saatavilla laiteohjelmistossa 1.2.5.

405
Method Not Allowed

Vain GET on tuettu. POST, PUT ja DELETE hylätään.

503
Service Unavailable

Tilatietoa ei voitu muodostaa juuri nyt. Odota hetki ja yritä uudelleen.

Ei vastausta? Tarkista nämä järjestyksessä:

  1. Onko IP-osoite oikein?

    Vertaa osoitetta sovelluksen kohtaan Laitteen asetukset → Paikallinen IP tai reitittimen laiteluetteloon. Osoite voi vaihtua reitittimen käynnistyessä uudelleen – DHCP-varaus auttaa.

  2. Onko laiteohjelmisto ajan tasalla?

    GET /status on käytettävissä versiosta 1.2.5 alkaen. Vanhempi laiteohjelmisto ei vastaa tähän polkuun. Versio näkyy sovelluksen laiteasetuksissa.

  3. Sama verkko?

    Vierasverkot ja erilliset Wi-Fi-verkot, kuten IoT-VLAN, estävät usein laitteiden välisen liikenteen. Asiakkaan täytyy olla Drainbeen kanssa samassa verkossa tai sillä täytyy olla reitti siihen.

  4. Onko Drainbeellä virta ja Wi-Fi?

    Tarkista virtalähde ja reitittimen laiteluettelo. Paikallinen API tarvitsee Wi-Fi-yhteyden. Pelkkä pilviyhteyden katkeaminen ei estä paikallista käyttöä.

  5. Väärä protokolla?

    Käytä http://-alkua, älä https://-alkua. Jotkin selaimet lisäävät https-alkuosan automaattisesti – kirjoita osoite http://-alkuisena.

Verkko ja turvallisuus

Paikallinen API on tarkoitettu luotettuun kotiverkkoosi. Siinä ei ole tunnistautumista eikä HTTPS-salausta. Kuka tahansa, joka saa yhteyden Drainbeehen verkossa, voi lukea tilan, mutta API:n kautta ei voi muuttaa mitään.

Älä avaa julkiseen verkkoon

Älä tee portinohjausta portista 80 Drainbeehen reitittimessäsi. Käytä etäyhteyteen Drainbee-sovellusta tai VPN-yhteyttä kotiverkkoosi.

Pilvestä riippumaton

Pyyntö menee suoraan laitteelle eikä poistu verkostasi. Se toimii myös MQTT- tai pilviyhteyden ollessa poikki, kunhan Drainbeellä on virta ja Wi-Fi-yhteys.

Ei saatavilla versiossa 1.2.5

  • Muut päätepisteet, kuten /value, /history tai asetusten muuttaminen
  • Suoratoisto, WebSockets tai push-ilmoitukset paikallisen API:n kautta
  • Offline-historia laitteessa – historia näkyy sovelluksessa