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:

  1. Csatlakozik a megadott brókerhez
  2. Publikál egy saját topicra a teljes JSON adatfolyamot (~10 mp-enként)
  3. 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_GETTeljes állapot lekérdezése (uptime, rssi, inverter állapot, szabályok száma, stb.)
RESTART / REBOOTEszköz újraindítása
RULESÚj szabálykészlet feltöltése (Base64 kódoltan)
RULES_GETAktuális szabályok visszaküldése
ALL_STARTAz összes szabály tartó-timerjének nullázása (frissítés hatás)
ALL_STOPSzabálymotor globális kikapcsolása
SET_INVERTERInverter típus beállítása (lásd Inverter plugin)
INVERTER_CONTROLVisszatáplálás szabályozás (prod / noprod / auto / empty)
SET_REMOTE_P1Távoli P1 forrás megadása (lásd Távoli P1)
SAVE_MODBUS_IPModbus eszköz IP-jének mentése
SCAN_MODBUSModbus eszközök keresése a helyi hálózaton
SCAN_DEVICESADA eszközök keresése a helyi hálózaton UDP broadcasttal
HTTP_REQTetszőleges HTTP kérés végrehajtása a készülékről
POSTHTTP POST proxy
TCP_HEXNyers 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 RESTART parancs 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:

  1. A webes felületen adott broker cím és port helyes
  2. A felhasználónév / jelszó pontos (ha van)
  3. A bróker elérhető a helyi hálózatról (próbáld meg a mosquitto_sub parancsot egy másik gépről ugyanazokkal az adatokkal)
  4. 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>, nem ada/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