Repozitár projektu so zdrojovými kódmi pre JSON klientov - Github: Ethernet termostat - JSON klienti
Arduino Ethernet Wiznet W5100 / W5500 DS18B20 OneWire Dallas HTML Webserver WebSocket
JSON DATA
JSON DATA
ArduinoJSON
ArduinoJSON
MQTT
MQTT
HTTP
HTTP

JSON klienti - Ethernet termostat


JSON klient postavený na platforme Arduino, ESP8266, ESP32 umožňuje pripojenie cez websocket k Ethernet 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 vyparsovať z HTTP response a následne tento reťazec deserializovať. Po deserializácii je možné pristupovať k jednotlivým kľúčom, ku ktorým sú priradené hodnoty a tie získať --> 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 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 koreňového 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 - Ethernet termostat


{
"Hysteresis":0.25,
"Target_Temperature":21.75,
"Actual_Temperature":21.43
}
Implementácia pre MQTTS je dostupná iba pre platformy ESP8266, ESP32. ESP8266 využíva pre možnosť vytvorenia šifrované spojenia fingerprint (odtlačok certifikátu MQTT servera). ESP32 využíva Root CA certifikát pre možnosť vytvorenia šifrovaného spojenia s MQTT serverom. Šifrovaný port MQTT servera je štandardne 8883, nešifrovaný 1883. Pre získanie fingerprintu, potažmo Root CA certifikátu pre konkrétny MQTT server (doménu) je možné využiť kryptografický nástroj OpenSSL, ktorý umožňuje jednoduché načítanie a zobrazenie predmetných informácii.
Príkaz pre získanie fingerprintu MQTT servera:
openssl s_client -connect mqttserver.com:8883 -showcerts < /dev/null 2>/dev/null | openssl x509 -in /dev/stdin -sha1 -noout -fingerprint
Príkaz pre získanie Root CA certifikátu, ktorý vydal certifikát pre MQTT server (Issuer):
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 - Ethernet 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