Repozitár projektu Hladinomer so zdrojovými kódmi pre JSON klientov - Github: Hladinomer
Arduino Ethernet Wiznet W5100 / W5500 ESP8266 ESP32 Ultrasonic HC-SR04 JSN-SR04T Sigfox JSON MQTT
JSON DATA
JSON DATA
ArduinoJSON
ArduinoJSON
MQTT
MQTT
HTTP
HTTP

JSON klienti - Hladinomer


JSON klient postavený na platforme Arduino, ESP8266, ESP32 umožňuje pripojenie cez websocket k webserveru (webovému rozhraniu Hladinomera). Klient vykonáva cyklický HTTP GET request každých 60 sekúnd pre získanie obsahu podstránky /json_output.php, kde webserver distribuuje dáta v JSON formáte o výške hladiny vody (v centimetroch), objeme studne (v litroch) na základe aktuálne nastavenej hĺbky a priemere studne. 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: automatizovaná závlaha po dosiahnutie určitej výšky hladiny vody, prečerpávanie vody, spustenie čerpadla, dárlingu. 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ť dáta 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 hladinomera 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 hladinomer, pričom jednotlivé teploty sú odlíšené v subtopicoch.

Ukážkové programové implementácie pre JSON klientov: TU

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.

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ť
Implementácia pre MQTTS je dostupná pre mikrokontroléry ESP8266, ESP32. ESP8266 a ESP32 využíva 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. Jednotlivé certifikáty sú vypísané v Chain-of-Trust poradí, t.j. od Root CA po Intermediate.
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

Ukážkový výpis dát vo formáte JSON

{
"value": 378,
"volume": 1900.04
}

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


  • hladinomer/objem - pre objem studne v litroch
  • hladinomer/vyska - pre aktuálnu výšku hladiny vody v centimetroch

  • Topic pre Subscribe:


  • hladinomer/# - odoberá všetky subtopicy pod hladinomer/, teda objem, výšku
  • MQTT klient má prihlásený Subscribe na hlavný topic hladinomer a všetky jeho subtopicy. Dokáže tak zároveň aj overiť, či bola informácia na MQTT Broker úspešná publikovaná - spätne ju vypíše na UART. 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é.


    JSON PHP výstup, parsing a Publish na MQTT Broker:


    JSON client (Arduino, ESP8266, ESP32) pre Hladiomer - UART výstup

    HiveMQ client - Subscribe topicu hladinomer/#

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