MQTT integráció
Az ADA P1 Meter natívan támogatja az MQTT protokollt. Ez teszi lehetővé, hogy tetszőleges MQTT-brókerhez csatlakoztasd (Home Assistant, Mosquitto, EMQX, HiveMQ, AWS IoT, stb.), és integráld a saját okosotthon-rendszeredbe.
Hogyan működik
Ha az első beállítás során megadtad az MQTT szerver adatait, a készülék:
- Csatlakozik a megadott brókerhez
- Publikál egy saját topicra a teljes JSON adatfolyamot (~10 mp-enként)
- Feliratkozik két speciális command topicra (ezeken keresztül tudsz távoli parancsokat küldeni)
Topic struktúra
Az ADA a következő topic-mintákat használja:
Saját adatok (publish)
A készülék az általad megadott topicra publikálja a JSON-t (retained üzenet, azaz minden új feliratkozó azonnal megkapja a legutóbbit).
A topicot a webes beállítófelületen tudod megadni. Ha ezt nem módosítottad, jellemzően olyasmi lesz, mint:
ada/data/<topicKey>
Ahol a <topicKey> az alábbi minta szerint áll össze:
- Ha van MQTT felhasználónév:
<sanitized_user>_<sanitized_client_id> - Ha nincs felhasználónév:
anon_<client_id>
A sanitized azt jelenti, hogy az ékezetek és speciális karakterek _ jellel vannak helyettesítve.
Parancs fogadás (subscribe)
Az eszköz két topicra iratkozik fel:
ada/cmd/<topicKey> ← ide küldhetsz parancsokat
ada/ack/<topicKey> ← ide publikálja a válaszokat/eseménynaplót
Példa adatküldés
A publikált JSON megegyezik a /json végpont tartalmával. Mosquitto CLI-vel így tudod figyelni:
mosquitto_sub -h mqtt.example.com -t 'ada/data/#' -u myuser -P mypass
Kimenet:
{
"username": "myuser",
"client_id": "ABC123DEF456",
"os_version": "2.0.4",
"instantaneous_power_import": "1.234",
"instantaneous_power_export": "0.000",
"voltage_phase_l1": "231.1",
"active_import_energy_total": "12345.678",
"plugins": { }
}
Parancsok küldése
A ada/cmd/<topicKey> topicra küldött üzeneteket a készülék feldolgozza. A parancsok JSON formátumúak, és a m mezőben határozod meg, mit szeretnél:
{"m": "STATUS_GET", "id": "request-1"}
A válasz az ada/ack/<topicKey> topicra érkezik.
Támogatott parancsok
Method (m) | Leírás |
|---|---|
STATUS_GET | Teljes állapot lekérdezése (uptime, rssi, inverter állapot, szabályok száma, stb.) |
RESTART / REBOOT | Eszköz újraindítása |
RULES | Új szabálykészlet feltöltése (Base64 kódoltan) |
RULES_GET | Aktuális szabályok visszaküldése |
ALL_START | Az összes szabály tartó-timerjének nullázása (frissítés hatás) |
ALL_STOP | Szabálymotor globális kikapcsolása |
SET_INVERTER | Inverter típus beállítása (lásd Inverter plugin) |
INVERTER_CONTROL | Visszatáplálás szabályozás (prod / noprod / auto / empty) |
SET_REMOTE_P1 | Távoli P1 forrás megadása (lásd Távoli P1) |
SAVE_MODBUS_IP | Modbus eszköz IP-jének mentése |
SCAN_MODBUS | Modbus eszközök keresése a helyi hálózaton |
SCAN_DEVICES | ADA eszközök keresése a helyi hálózaton UDP broadcasttal |
HTTP_REQ | Tetszőleges HTTP kérés végrehajtása a készülékről |
POST | HTTP POST proxy |
TCP_HEX | Nyers Modbus/TCP hex kérés küldése |
Példa – státusz lekérdezés
# parancs küldése
mosquitto_pub -h mqtt.example.com -u myuser -P mypass \
-t 'ada/cmd/myuser_ABC123' \
-m '{"m":"STATUS_GET","id":"s1"}'
A válasz (ada/ack/... topicon):
{
"id": "STATUS_GET",
"ok": true,
"status": {
"uptime_s": 12345,
"rssi": -62,
"version": "2.0.4",
"rules_count": 4,
"rules_enabled": true,
"inverter": {"name": "SMA-STPx000", "ok": true},
...
}
}
Példa – újraindítás
mosquitto_pub -h mqtt.example.com -u myuser -P mypass \
-t 'ada/cmd/myuser_ABC123' \
-m '{"m":"RESTART","id":"r1"}'
Biztonsági védelem: a
RESTARTparancs 5 másodpercnyi uptime alatt automatikusan figyelmen kívül marad – ez azért van, hogy egy retained (megőrzött) reboot üzenet ne kapcsolja végtelen ciklusba a készüléket.
Példa – inverter vezérlés
# Exportálás tiltása (0 visszatáplálás)
mosquitto_pub -t 'ada/cmd/myuser_ABC123' \
-m '{"m":"INVERTER_CONTROL","cmd":"noprod","id":"c1"}'
# Automatikus szabályozás bekapcsolása
mosquitto_pub -t 'ada/cmd/myuser_ABC123' \
-m '{"m":"INVERTER_CONTROL","cmd":"auto","id":"c2"}'
Biztonság
Felhasználóazonosítás
Minden MQTT üzenet tartalmazza az username (az MQTT user) és client_id mezőt, valamint egy MD5 hashelt jelszó ellenőrzőösszeget. A publikáló bróker szinten is tud azonosítani, hogy ki kiből publikál.
Titkosított csatlakozás
Ha a brókered TLS-t használ, add meg a 8883-as portot (vagy amit a szolgáltatód megad). A készülék automatikusan TLS-szel csatlakozik, ha a port 8883 (vagy magasabb mint 1883).
Greenhess felhő
Ha a hivatalos Greenhess felhőt használod brókernek (mqtt.okosvillanyora.hu), csak a saját e-mail/jelszó-fiókod topicjaira van jogosultságod. Másik felhasználó üzeneteit nem látod és nem is írhatod.
Home Assistant auto-discovery
Ha Home Assistantet használsz, és MQTT integrációja be van kapcsolva, a készülék automatikusan regisztrálja magát. A beállításhoz lásd a Home Assistant integráció oldalt.
Troubleshooting
Nem csatlakozik a brókerhez
Ellenőrizd:
- A webes felületen adott broker cím és port helyes
- A felhasználónév / jelszó pontos (ha van)
- A bróker elérhető a helyi hálózatról (próbáld meg a
mosquitto_subparancsot egy másik gépről ugyanazokkal az adatokkal) - Nem tiltja tűzfal az 1883 / 8883 portot
Nincs üzenet a saját topicon
- Ellenőrizd, hogy a feliratkozott topic-pattern megegyezik-e a publikált topicével (a
<topicKey>a user és client_id kombinációjából áll) - Nézd meg a dashboardon vagy
STATUS_GET-tel, hogy a készülék azt jelenti-e, hogy kapcsolódott
Parancs nem lett végrehajtva
- A parancs topicja:
ada/cmd/<topicKey>, nemada/cmd/magában - A body érvényes JSON legyen
- Minden válasz az
ada/ack/<topicKey>topicra érkezik – iratkozz fel oda is, hogy lásd a visszajelzést