Měření a ukládání dat v cloudu (3.)

  1. Měříme a získáváme měřené údaje
  2. Odesíláme údaje a sbíráme v cloudu
  3. Sebraná data ukládáme do databáze
  4. Data z databáze zpracujeme, zobrazíme a analyzujeme

3. Ukládání měření do databáze

Pro sběr měřených dat je nejvhodnější databáze časových řad (TSDB – Time Series Database), protože je přizpůsobena pro optimální uložení velkého množství dat v časové řadě a pro další zpracování disponuje optimalizovanými agregačními funkcemi. Velmi často používanou databází je InfluxDB, která je zdarma i s užitečnými nástroji ke zpracování dat a díky připraveným knihovnám se s ní snadno pracuje v různých programovacích jazycích.

3.1 Instalace vlastní InfluxDB

Databázový stroj InfluxDB můžeme v oblíbeném operačním systému Debian GNU/Linux či Ubuntu/Mint Linux jednoduše nainstalovat ze standardního instalačního balíku influxdb. Případně na jiných platformách podle návodu k instalaci na webu influxdata.com.

Předpokladem je, že máme k dispozici hodně úložného prostoru, protože data mohou časem narůst do obřích rozměrů.

$ apt install influxdb

Nepotřebujeme-li zaznamenávat dotazy a přístupy přes HTTP, tak můžeme vypnout logování v konfiguračním souboru /etc/influxdb/influxdb.conf.

[data]
query-log-enabled = false

[http]
log-enabled = false

3.2 InfluxDB v cloudu

InfluxDB lze používat také v cloudu a zde se budeme věnovat platformě InfluxDB Cloud 2.0, která nabízí provoz připraveného databázového stroje v cloudu AWS (v Evropě Frankfurt n.M.), v Azure (v Evropě Amsterdam) nebo v Google Cloud (v Evropě Belgie).

Varianta Free je k dispozici všem zdarma s několika omezeními: zápis 5 MB za 5 vteřin, dotazy 300 MB za 5 minut, 10000 řad dat a maximálně 2 databáze (Buckets) se zachováním dat 30 dní. Pro nenáročné domácí použití naprosto dostačující.

Pro další práci s databází jsou klíčové následující kroky s poznamenáním údajů potřebných k přístupu k databázi:

  • Podle vybrané lokality poznamenat URL InfluxDB Cluster Node
  • Při instalaci nebo později vytvořit databázi (Bucket) na stránce Data/Buckets
    – poznamenat Bucket ID
  • Vytvořit přístupový Token a nastavit oprávnění na stránce Data/Tokens
    – poznamenat Token
  • Pojmenovat organizaci – Organization/About
    – poznamenat User ID a Organization ID

3.3 Ukládání zpráv z MQTT brokeru do InfluxDB

Cesta měřených údajů z MQTT klienta na MQTT broker a přes MQTT - TSDB bridge do databáze časových řad.

Je několik možností, jak přijímat zprávy z MQTT brokeru a data ukládat do databáze InfluxDB.

  • Vlastní skript/program – v Pythonu lze pro připojení k MQTT brokeru a InfluxDB použít moduly Paho MQTT Client a InfluxDB-Python. Jako například ve skriptech MQTT 2 InfluxDB Bridge nebo MQTTInfluxDBBridge.py.
  • Program Telegraf obsahuje modul MQTT Consumer, který pracuje jako MQTT klient zapisuje odebírané zprávy do InfluxDB. V konfiguračním souboru /etc/telegraf/telegraf.conf stačí nastavit jen pár údajů nebo si vygenerovat potřebnou konfiguraci v administraci InfluxDB Cloud.
[[inputs.mqtt_consumer]]
   servers = ["tcp://42616269c5a14a655a6c6f64c49b6a.s2.eu.hivemq.cloud:8883"]
   topics = [
     "test/#",
   ]
   username = "kralicek-itacek"
   password = "***heslo***"

[[outputs.influxdb_v2]]
   urls = ["https://eu-central-1-1.aws.cloud2.influxdata.com"]
   token = "$INFLUX_TOKEN"
   organization = "Kralickovo"
   bucket = "Kralickuv Bucket"

Do souboru /etc/default/telegraf vložíme token pro přístup k databázi InfluxDB v podobě nastavení proměnné prostředí:

INFLUX_TOKEN=CkJhYmnFoWUgZG8ga2/FoWUuCgo=
  • Definice toku dat ve vývojovém nástroji Node-RED – tuto variantu popíšu podrobněji níže.

3.4 Node-RED jako MQTT klient zapisující data do InfluxDB

Můžeme použít vlastní instalaci prostředí Node-RED na počítači nebo v cloudu. Nejzajímavější je spuštění v IBM Cloud v rámci free tier, kde lze celé používat zdarma (stačí úroveň Lite). Instalaci provedeme po počáteční registraci podle návodu. Během instalace se pro uložení dat programu vytvoří databáze Cloudant, spustí instance aplikace Node-RED a nakonfigurují nějaké další služby potřebné pro běh prostředí.

Po přihlášení do editoru Node-RED nastavíme:

  • Menu / Manage palette / Install – do vyhledávacího pole zadáme influxdb a nainstalujeme doplněk node-red-contrib-stackhero-influxdb-v2
  • Založíme a přejmenujeme nové Flow
  • Vytvoříme node typu „mqtt-in“ a nastavíme:
    • Server (Connection – hostname, port, Use TLS; Security – uživatelské jméno a heslo)
    • Topic
    • Output – a parsed JSON object
  • Vytvoříme node typu „function“, pojmenujeme „toFloat“ a na záložce onMessage zadáme kód:
msg.payload = parseFloat(msg.payload);
return msg;
  • Vytvoříme node typu „change“, pojmenujeme „prepare fields“ a nastavíme pravidlo:
    • Set msg.payload to expression
{
   'precision': 'ms',
   'data': [
        {
            'measurement': 'test',
            'tags': {
                'host': 'zajickuvprevadec',
                'topic': msg.topic
            },
            'fields': {   
                'value': msg.payload
            },
           'timestamp':$toMillis($now())
        }
    ]
}
  • Vytvoříme node typu „Stackhero-InfluxDB-v2-write“ a nastavíme přístupové údaje Database – Host, Port, TLS, Token, Organization, Default bucket
  • Všechny vytvořené nody postupně propojíme z výstupu prvního na vstup druhého atd. Případně můžeme přidat node typu „debug“ pro výpis informací.
  • Po vytvoření kompletního Flow použijeme vpravo nahoře tlačítko Deploy a mělo by začít fungovat.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *