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ípus | Kötelező | Jelentés |
|---|---|---|---|
device | string | igen | Az eszköz neve (csak információs, nem kulcs) |
values | object | igen | Kulcs–é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, nev1,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"