Repozitár projektu so zdrojovými kódmi pre JSON klientov - Github: WiFi termostat
ESP8266 ESP32 WiFi DS18B20 OneWire Dallas HTML Webserver WebSocket JSON mDNS UART
JSON DATA
JSON DATA
ArduinoJSON
ArduinoJSON
MQTT
MQTT
HTTP
HTTP

JSON klienti - WiFi termostat


JSON klient postavený na platforme Arduino, ESP8266, ESP32 umožňuje pripojenie cez websocket k WiFi termostatu. Klient vykonáva cyklický HTTP GET request každých 15 sekúnd pre získanie obsahu podstránky /get_data.json, kde webserver distribuuje dáta o cieľovej teplote, hysteréze a aktuálne nameranej teplote senzorom DS18B20 na OneWire zbernici v JSON formáte. Načítaný JSON payload dokáže JSON klient načétať v HTTP response (odpovedi webservera) a následn tento reťazec deserializuje. Po deserializácii je možné pristupovať k jednotlivým kľúčom JSON formátu, ku ktorým sú priradené hodnoty a tie vyparsovať. Vyparsované dáta sa vypíšu na UART - Sériovú linku - 115200 baud/s. V používateľskej aplikácii, ktorá môže byť do existujúcich zdrojových kódov JSON klientov doplnená je možné ovládať entity na základe týchto hodnôt, napríklad: otváranie ventilov radiátorov, solenoid, vetranie, uzavretie okien pri aktívnom vykurovaní atď.. Prípadne je možné dáta archivovať - odoslať ich na webserver, kde môžu byť uložené napríklad do MySQL databázy, do Loxone domácej automatizácie. Súčasťou firmvéru označeného ako MQTT, respektíve MQTTS (šifrované MQTT) je rozšírený JSON klient o možnosť odosielať - Publishovať na MQTT Broker IoT Industries Slovakia - slovenský free MQTT Broker určený pre vývojárov. MQTT i MQTTS variant využíva socket, ktorý sa používa i pre HTTP request pre získanie JSON payloadu. Existujúci MQTT server môže byť v zdrojových kódoch nahradený za váš a tak môžete dáta z termostatu sprístupniť aj do systémov domácej automatizácie (Hassio, Mosquitto MQTT, Domoticz, Loxone a iné...). V aktuálnej programovej implementácii mikrokontróler (JSON klient) odosiela získané dáta na MQTT Broker do topicu termostat, pričom jednotlivé teploty sú odlíšené v subtopicoch.

Zdrojové kódy pre MQTT / MQTT + JSON klientov sú dostupné na: JSON klienti

Dostupné knižnice pre mikrokontroléry (Arduino / ESP) - JSON klienti


Archív knižnice (.zip) rozbaliť do C:/Používatelia/[Používateľ]/Dokumenty/Arduino/libraries
Názov knižnice Funkcia knižnice Stiahnuť
PubSubClient

Knižnica pre AVR mikrokontroléry (ATmega) Arduino Uno / Nano / Mega, ESP8266 a ESP32. Umožňuje komunikovať po MQTT protokole, možno implementovať aj šifrované spojenie s MQTT Brokerom, vyžaduje sa použitie WiFiClientSecure triedy u ESP mikrokontrolérov a vloženie Root CA certifikátu v .pem formáte.

Stiahnuť
ArduinoJson

Knižnica pre AVR mikrokontroléry (ATmega) Arduino Uno / Nano / Mega, ESP8266 a ESP32. Umožňuje deserializovať reťazec v JSON štruktúre, dokáže vyparsovať hodnotu, ktorá je priradená ku kľúču.

Stiahnuť

Ukážkový výpis vo formáte JSON - WiFi termostat


{
"Hysteresis":0.25,
"Target_Temperature":21.75,
"Actual_Temperature":21.43
}
Implementácia pre MQTTS je dostupná iba pre platformy ESP8266, ESP32. Oba mikrokontroléry využívajú Root CA certifikát pre šifrované spojenie s MQTT serverom. Šifrovaný port MQTT servera je štandardne 8883, nešifrovaný 1883. Pre získanie Root CA certifikátu pre konkrétny MQTT server (doménu) je možné využiť nástroj OpenSSL, ktorý umožňuje jednoduché načítanie a zobrazenie predmetných informácii. Výpis je realizovaný v hierarchii Chain of Trust, t.j. prvý certifikát je Root CA, následuje Intermediate CA.
Príkaz pre získanie Root CA certifikátu pre server:
openssl s_client -showcerts -verify 5 -connect mqttserver.com:8883 < /dev/null

Používané topicy pre Publish na MQTT Broker sú:

  • termostat/hysteresis - pre hysterézu
  • termostat/actual_temp - pre aktuálne nameranú teplotu
  • termostat/target_temp - pre cieľovú (referenčnú) teplotu
  • Topic pre Subscribe:

  • termostat/# - odoberá všetky subtopicy pod termostat/, teda hysteréza, aktuálna a cieľová teplota
  • MQTT klient má prihlásený Subscribe na hlavný topic termostat a všetky jeho subtopicy. Dokáže tak zároveň aj overiť, či bola informácia na MQTT Broker úspešná publikovaná. UPOZORNENIE: MQTT Broker IoT Industries Slovakia, ktorý sa vo vzorovej implementácii používa je verejný a tak môžu byť dáta zmenené, prepísané, čítané akýmkoľvek používateľom! Ak do svojho mikrokontroléru nahrá firmvér JSON klienta bez zmeny akýkoľvek iný používateľ, bude vám dané dáta v preddefinovanom topicu prepisovať a rovnako aj vy jemu. Je tak vhodné pri vlastnej implementácii zvoliť iný topic, kam budú dáta odosielané.

    Bloková schéma - popis funkčnosti JSON klienta:

    JSON klient - Arduino, ESP8266, ESP32, MQTT integrácia - WiFi termostat

    JSON klient - UART výstup (Sériová linka):

    JSON client pre WiFi termostat - UART výstup

    HiveMQ client - Subscribe topicu termostat/#

    JSON client MQTT Broker IoT Industries Slovakia - výstup topicu - Subscribe termostat