Szabályrendszer
A beépített szabálymotor egyszerű feltételek alapján HTTP parancsokat küld más eszközöknek, így az ADA P1 Meter önállóan – külön automatizációs szerver nélkül – tud bojlert kapcsolni, dugaljat vezérelni, értesítést küldeni.
Tipikus forgatókönyvek:
- Bojler bekapcs, ha napelemből >1,5 kW többlet van legalább 1 percig
- Shelly kikapcs, ha fogyasztás >5 kW legalább 30 másodpercig
- Webhook értesítés Discordra, ha visszatáplálás kezdődik
- Home Assistant esemény csúcs-tarifa aktiválódására
Hogyan működik
A motor minden újonnan érkező adatnál (10 másodpercenként) kiértékeli az összes engedélyezett szabályt. Egy szabály három részből áll:
- Feltétel (condition) – egy kifejezés, ami igazra vagy hamisra értékelődik ki
- Minimum tartási idő (min_timer_seconds) – a feltételnek ennyi ideig folyamatosan igaznak kell lennie
- Akciók (actions) – egy vagy több HTTP kérés, amik lefutnak
Szabály formátuma (JSON)
Teljes szabálykészlet:
{
"rules": [
{
"id": "bojler_be",
"enabled": true,
"condition": "instantaneous_power_export > 1.5",
"min_timer_seconds": 60,
"repeat": true,
"repeat_delay_seconds": 300,
"actions": [
{
"method": "GET",
"url": "http://192.168.1.50/relay/0?turn=on"
}
]
}
]
}
Mezők
| Mező | Típus | Kötelező | Jelentés |
|---|---|---|---|
id | string | igen | Egyedi azonosító (állapot-követéshez) |
enabled | bool | nem (def: true) | Ki/be kapcsolás törlés nélkül |
condition | string | igen | A kifejezés (max 512 karakter) |
min_timer_seconds | int | nem (def: 0) | Tartási idő – a feltételnek eddig igaznak kell lennie |
repeat | bool | nem (def: false) | Egyszeri (false) vagy ismétlődő (true) |
repeat_delay_seconds | int | nem | Ismétlődésnél a minimális várakozás (cooldown) |
actions | array | igen | Legalább egy akció, mindegyik {"method", "url", "body"} |
Akció formátuma
{
"method": "GET",
"url": "http://192.168.1.10/toggle",
"body": ""
}
| Mező | Típus | Jelentés |
|---|---|---|
method | string | "GET" (alap) vagy "POST" |
url | string | A meghívandó URL |
body | string | POST esetén a kérés törzse (JSON szöveg vagy egyszerű string) |
Kifejezések nyelve
A feltételek egy egyszerű, JavaScript-szerű kifejezéseket kezelnek.
Változók
A kifejezésben hivatkozhatsz bármilyen mezőre, ami a JSON válaszban szerepel:
instantaneous_power_import
voltage_phase_l1
current_tariff
Beágyazott objektumok (pl. plugins) pontos elérésűek:
plugins.temp_kitchen.value
plugins.boiler_power.value
Operátorok
Összehasonlítás:
> < >= <= == !=
Logikai:
&& ||
Matematikai:
+ - * /
Csoportosítás zárójelekkel:
(voltage_phase_l1 + voltage_phase_l2) / 2 > 230
Típuskonverzió
- Számok – lebegőpontos és egész számok egyaránt
- Szövegek – automatikusan számmá alakítódnak, ha számot tartalmaznak (
"1.234"→1.234) - Logikai értékek –
true→ 1,false→ 0 - Szöveges
"true"/"false"– ugyanaz, 1 / 0 - Null / hiányzó – 0
Példák (egyszerűek)
1. Boiler bekapcs, ha napelem-többlet van
{
"id": "boiler_be",
"condition": "instantaneous_power_export > 1.5",
"min_timer_seconds": 60,
"repeat": true,
"repeat_delay_seconds": 120,
"actions": [
{"method": "GET", "url": "http://192.168.1.50/relay/0?turn=on"}
]
}
Magyarázat:
- Akkor fut le, ha legalább 1,5 kW visszatáplálás van
- A feltételnek 60 másodpercig folyamatosan igaznak kell lennie (a felhők mozgása ne kapcsolgassa állandóan)
- Utána 2 percig nem próbálkozik újra
2. Boiler kikapcs, ha fogyasztás nő
{
"id": "boiler_ki",
"condition": "instantaneous_power_import > 0.5",
"min_timer_seconds": 30,
"repeat": true,
"repeat_delay_seconds": 120,
"actions": [
{"method": "GET", "url": "http://192.168.1.50/relay/0?turn=off"}
]
}
3. Csúcsfogyasztás figyelmeztetés Discord webhookon
{
"id": "csucs_alarm",
"condition": "instantaneous_power_import > 5.0",
"min_timer_seconds": 10,
"repeat": true,
"repeat_delay_seconds": 600,
"actions": [
{
"method": "POST",
"url": "https://discord.com/api/webhooks/XXXXX/YYYYY",
"body": "{\"content\":\"⚠️ Csúcsfogyasztás! Több mint 5 kW vételezés.\"}"
}
]
}
4. Napi első export-pillanat → Home Assistant esemény
Egyszeri, nem ismétlődő:
{
"id": "reggeli_termeles",
"condition": "instantaneous_power_export > 0.1",
"min_timer_seconds": 0,
"repeat": false,
"actions": [
{
"method": "POST",
"url": "http://192.168.1.5:8123/api/events/pv_started_today",
"body": "{\"source\":\"ada-p1-meter\"}"
}
]
}
A "repeat": false miatt ez a szabály egyszer fut le, és amíg a készülék újra nem indul, nem fut le újra.
Összetett példák
Hőmérséklet-alapú kapcsolás
Ha van egy hőmérőd, ami a /write végponton room_temp kulccsal küldi az értéket:
{
"id": "futes_be_hideg_volt",
"condition": "plugins.room_temp.value < 19 && current_tariff == 0002",
"min_timer_seconds": 60,
"repeat": true,
"repeat_delay_seconds": 600,
"actions": [
{"method": "GET", "url": "http://192.168.1.80/switch/heating/turn/on"}
]
}
Magyarázat: szobahőmérséklet 19 °C alatt ÉS éjszakai tarifa alatt kapcsol.
Több feltétel több akcióval
{
"id": "napelem_csucs",
"condition": "(instantaneous_power_export > 2.0) && (voltage_phase_l1 > 240)",
"min_timer_seconds": 30,
"repeat": true,
"repeat_delay_seconds": 300,
"actions": [
{"method": "GET", "url": "http://192.168.1.50/relay/0?turn=on"},
{"method": "GET", "url": "http://192.168.1.51/relay/0?turn=on"},
{
"method": "POST",
"url": "http://192.168.1.5:8123/api/events/high_export",
"body": "{\"kw\":2.0}"
}
]
}
Dinamikus árazáshoz igazítás
Ha a tőzsdei ár magas, nem járatod a bojlert:
{
"id": "boiler_olcso_idoben",
"condition": "current_stock_price < 20 && plugins.boiler_temp.value < 55",
"min_timer_seconds": 120,
"repeat": true,
"repeat_delay_seconds": 900,
"actions": [
{"method": "GET", "url": "http://192.168.1.50/relay/0?turn=on"}
]
}
Szabályok feltöltése
Webes felületről (ajánlott)
A dashboardon a „Szabályok" menüpontban vizuálisan szerkeszthetsz. Itt láthatod is, melyik szabály mikor futott le legutóbb.
API-ból
curl -X POST http://okosvillanyora.local:8989/rules \
-H "Content-Type: application/json" \
-d @rules.json
Lekérdezés
curl http://okosvillanyora.local:8989/rules
Törlés
curl -X DELETE http://okosvillanyora.local:8989/rules
Globális engedélyezés/tiltás
Minden szabály egyszerre:
# Szabálymotor kikapcs
curl http://okosvillanyora.local:8989/rules/disable
# Szabálymotor bekapcs
curl http://okosvillanyora.local:8989/rules/enable
Fontos tudnivalók
- Legfeljebb 50 szabály értékelődik egy passzban, de gyakorlatilag nincs korlát a használható mennyiségre
- Egy kifejezés maximum 512 karakter hosszú lehet
- Az akciók HTTP timeoutja rövid (~1,2 mp), ne kontaktálj lassú külső szolgáltatást
- Ha az
urlüres, az akció kihagyásra kerül - A POST body lehet sima szöveg vagy JSON – a Content-Type automatikusan
application/jsonlesz - Globális KI kapcsoló: a dashboardból és a
/rules/disablevégpontról is letiltható az egész rendszer - Az állapot (tartási timer, utolsó futás) memóriában él – áramszünet után újra számolódik
- Egy
repeat: falseszabály addig nem fut le újra, amíg a készülék újra nem indul vagy törölöd és újra létrehozod
Hibakereséshez: ACK log
Minden szabály-futás egy belső eseménynaplóba (ACK log) kerül. Ezt lekérdezheted:
curl http://okosvillanyora.local:8989/acklog
A naplóban láthatod:
- Hogy a szabály feltétele mikor vált igazra
- Hány másodperc után futott le
- Milyen URL-t hívott meg
- Milyen HTTP státuszkódot kapott válaszként