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

JSON klienti - Hladinomer


Arduino, ESP8266 a ESP32 platformy umožňujú pripojenie k webovému serveru (Hladinomera) pomocou JSON klienta cez WebSocket. Klient pravidelne vykonáva HTTP GET request každých 60 sekúnd na získanie obsahu podstránky: /json_output.php. Webserver distribuuje dáta vo formáte JSON o výške hladiny vody (v centimetroch) a objeme studne (v litroch) na základe aktuálne nastavenej hĺbky a priemere studne. JSON klient pravidelne vykonáva HTTP GET request každých 60 sekúnd na získanie obsahu podstránky, kde sa tieto údaje nachádzajú. Načítaný JSON payload je schopný klient vyparsovať z HTTP response a deserializovať. Po deserializácii je možné pristupovať k jednotlivým kľúčom a získať hodnoty. Tieto vyparsované dáta sú následne vypísané na UART (sériová linka) s rýchlosťou 115200 baud/s. V používateľskej aplikácii, ktorá môže byť doplnená do existujúcich zdrojových kódov JSON klientov, je možné ovládať rôzne entity na základe získaných hodnôt. Napríklad automatizovaná závlaha po dosiahnutí určitej výšky hladiny vody, prečerpávanie vody alebo spustenie čerpadla. Súčasťou firmvéru označeného ako MQTT, resp. MQTTS (šifrované MQTT), je rozšírený JSON klient, ktorý umožňuje odosielanie (publishovanie) dát na MQTT Broker IoT Industries Slovakia, slovenský bezplatný MQTT Broker určený pre vývojárov. MQTT a MQTTS variant využívajú socket, rovnaký ako pre HTTP request na získanie JSON payloadu. Existujúci MQTT server môže byť v zdrojových kódoch nahradený vaším vlastným, čím sa umožní integrácia dát z hladinomera do systémov domácej automatizácie, ako sú Hassio, Mosquitto MQTT, Domoticz, Loxone a ďalšie. V aktuálnej programovej implementácii mikrokontrolér (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 k dispozícii pre mikrokontroléry ESP8266 a ESP32. Oba mikrokontroléry využívajú Root CA certifikát na zabezpečené pripojenie k MQTT serveru. Šifrovaný port MQTT servera je štandardne nastavený na 8883, zatiaľ čo nešifrovaný port je 1883. Pre získanie Root CA certifikátu pre konkrétny MQTT server (doménu) môžete využiť nástroj OpenSSL, ktorý jednoducho umožňuje načítať a zobraziť príslušné informácie. Jednotlivé certifikáty sú vypísané v poradí Chain-of-Trust, teda 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 je prihlásený na Subscribe hlavného topicu hladinomer a všetkých jeho subtopikov. Zároveň schopnosťou klienta je overiť úspešnú publikáciu informácie na MQTT Brokeri a následne ju spätne vypísať na UART. UPOZORNENIE: MQTT Broker IoT Industries Slovakia, použitý vo vzorovej implementácii, je verejný a dáta môžu byť zmenené, prepísané alebo čítané akýmkoľvek používateľom! Pri nahrávaní firmvéru JSON klienta do mikrokontroléru bez akejkoľvek zmeny môže iný používateľ prepisovať vaše dáta v preddefinovanom topiku a rovnako aj vy jemu. Vlastná implementácia by mala zvoliť iný topik pre odosielanie dát s cieľom zabrániť nechcenému prepisovaniu.


    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