Write API – külső eszközök adatainak fogadása

A Write API lehetővé teszi, hogy tetszőleges külső eszközök mérési adatait küldjél az ADA P1 Meterbe. Ezek az értékek bekerülnek a JSON válasz plugins objektumába, megjelennek a dashboardon, és hivatkozhatsz rájuk a szabálymotorból is.

Tipikus felhasználás:

  • Egy WiFi-s hőmérő éles fogyasztási adatokat küld
  • Egy Shelly kapcsoló periodikusan feltölti a saját pillanatnyi teljesítményét
  • Egy Tasmota flashelt dugalj az áramfogyasztását küldi
  • Egy saját készítésű Arduino szenzor publikál számokat

Két módja van az adatküldésnek: JSON POST vagy Tasmota-stílusú GET.

POST JSON végpont

POST http://okosvillanyora.local:8989/write
Content-Type: application/json

{
  "device": "szenzor_konyha",
  "values": {
    "temp_kitchen": 23.4,
    "humidity_kitchen": 58
  }
}

Mezők

MezőTípusKötelezőJelentés
devicestringigenAz eszköz neve (csak információs, nem kulcs)
valuesobjectigenKulcs–érték párok, amiket el szeretnél menteni

A values objektum értékei lehetnek számok (float / int) vagy szövegek – a rendszer automatikusan kezeli mindkettőt.

Válasz

Sikeres:

{"status": "success", "message": "Data written successfully"}

Hibás JSON vagy hiányzó mező:

{"status": "error", "message": "Invalid JSON"}

Tasmota GET végpont

Ha Tasmota flashelt eszközöd van (vagy bármi olyan, ami csak egyszerű HTTP GET-et tud), a write_tasmota végpont query-stringből olvassa az értékeket:

GET http://okosvillanyora.local:8989/write_tasmota?device=shelly1&power=145.3&voltage=230.1

Minden query paraméter a plugins objektumba kerül (kivéve a device paramétert, ami csak azonosításra szolgál).

Válasz

{"status": "success", "message": "Data from Tasmota stored", "count": 2}

A count azt mutatja, hány értéket tárolt el.

Miért jó ez?

Tasmota konfigurációban simán beállíthatsz egy periodikus HTTP GET-et arra az eszközre, ami az ADA P1 Meterhez szól:

Rule1 ON Energy#Power DO Var1 %value% ENDON ON Var1#State DO 
WebSend [okosvillanyora.local:8989] /write_tasmota?device=shelly1&power=%var1% ENDON

Megjelenítés a JSON-ben

A beküldött értékek közvetlenül a /json végpontban jelennek meg:

{
  "instantaneous_power_import": "0.234",
  "...": "...",
  "plugins": {
    "temp_kitchen":      { "value": "23.4" },
    "humidity_kitchen":  { "value": "58" },
    "power":             { "value": "145.3" },
    "voltage":           { "value": "230.1" }
  }
}

Hivatkozás szabályokból

A plugin értékek hozzáférhetők a szabálymotorban a pontos objektum útvonallal. Például:

{
  "id": "nagy_boiler_off",
  "condition": "plugins.boiler_power.value > 2000",
  "actions": [
    {"method": "GET", "url": "http://192.168.1.50/relay/0?turn=off"}
  ]
}

Teljes példa – bash cron

Periodikus feltöltés egy Raspberry Pi-ről vagy Linux szerverről:

#!/bin/bash
# /etc/cron.d/upload-cpu-temp.sh
# Minden 30 másodpercben elküldi a CPU hőmérsékletét

while true; do
  TEMP=$(cat /sys/class/thermal/thermal_zone0/temp)
  TEMP_C=$(echo "scale=1; $TEMP / 1000" | bc)

  curl -s -X POST http://okosvillanyora.local:8989/write \
    -H "Content-Type: application/json" \
    -d "{\"device\":\"rpi\",\"values\":{\"cpu_temp\":$TEMP_C}}"

  sleep 30
done

Teljes példa – ESP32 Arduino

Egy saját ESP32-ről is küldhetsz adatokat:

#include <WiFi.h>
#include <HTTPClient.h>
#include <ArduinoJson.h>

void postValue(const char* key, float value) {
  HTTPClient http;
  http.begin("http://okosvillanyora.local:8989/write");
  http.addHeader("Content-Type", "application/json");

  StaticJsonDocument<256> doc;
  doc["device"] = "myesp";
  JsonObject values = doc.createNestedObject("values");
  values[key] = value;

  String body;
  serializeJson(doc, body);
  int code = http.POST(body);
  Serial.printf("Response: %d\n", code);
  http.end();
}

void loop() {
  postValue("solar_tank_temp", 67.3);
  delay(30000); // 30 másodpercenként
}

Jó tudni

  • A kulcsok tetszőlegesek – olyan neveket válassz, amikhez később szabályokban tudsz hivatkozni (pl. boiler_power, kitchen_temp, ne v1, x, stb.)
  • Az értékek lebegőpontos számot is kezelnek 3 tizedesjegy pontossággal
  • Nincs limit arra, hány különböző kulcsot használhatsz – a RAM engedi a bőséges felhasználást
  • Az értékek csak a memóriában vannak, áramszünetnél elvesznek – a küldő eszköznek rendszeresen frissítenie kell őket
  • A kulcs mellett egy időbélyeget is tárol az eszköz, ami alapján detektálható, ha egy plugin „elnémult"