Ukládání do SQL

Ukládání dat z Mervis do SQL databáze

Tato služba SSCP to SQL Bridge na umožňuje obousměrný přenos dat mezi jednotkou Unipi se spuštěným SW Mervis a SQL databází. Komunikace probíhá pomocí SSCP protokolu, tj. proprietárního protokolu řešení Mervis. Tuto službu lze provozovat na systémech Linux (společně s databázovým serverem či na jiném vzdáleném zařízení), ale je ji možné spustit i přímo na jednotce.

  • Služba je spuštěna na jednotce
    • V tomto případě je služba spuštěna přímo na jednotce společně s Mervis RT a odesílá data do vzdálené databáze. Vyžaduje IP spojení mezi jednotkou a databázovým serverem
  • Služba je spuštěna na jiném zařízení/serveru
    • Toto řešení lze rozdělit na dvě možná nasazení v závislosti na přítomnosti či absenci síťového spojení mezi službou a jednotkou
    • Služba má IP přístup k jednotce
      • Jedná se o opačný přístup než v prvním případě, kde služba běží na jednotce
      • Služba je nainstalována na serveru, komunikuje s jednotkou a odesílá data na databázový server
      • Databázový server může běžet na stejném serveru jako služba, nebo na zcela jiném zařízení
    • Služba NEMÁ IP spojení s jednotkou
      • Tato možnost bude brzy dostupná
      • V tomto případě se pro odečet údajů z jednotky užívá Mervis Proxy server, který data následně odesílá na databázový server. Výhoda tohoto přístupu spočívá v tom, že služba IP přístup k jednotce nevyžaduje, server s službou se proto může nacházet v geograficky zcela odlišné lokaci, oddělený od interní sítě firewallem či NAT
      • Vyžaduje připojení jednotky k proxy serveru
      • Omezeno max. přenosovou rychlostí proxy serveru
  1. SELECT - Tato operace přečte určitý řádek z vybrané tabulky a přenese hodnoty na relevantní proměnné pro Mervis na jednotce. Řádek lze specifikovat použitím parametru “where”, který lze užít přímo jako klauzuli “WHERE” v SQL výrazu (nastaví proměnnou Mervisu dle databáze)
  2. UPDATE - Tato operace aktualizuje řádek ve vybrané tabulce zadáním hodnot proměnných na jednotce. Řádek lze specifikovat použitím parametru “where”, který lze užít přímo jako klauzuli “WHERE” v SQL výrazu. (Nastaví řádek v DB podle proměnné Mervisu)
  3. INSERT - Tato operace vloží řádek s aktuálními hodnotami jednotky do vybrané tabulky pokaždé, když je stav dané proměnné vyčítán jednotkou. (Mervis proměnná se loguje do DB)

Aktuálně není podporováno přenášet datové typy long (LREAL, LINT, ULINT, atp.), nebo STRING a DT.

  • Program je navržen pro platformy x64 a ARM* včetně všech jednotek Unipi.
  • Software je distribuován jako balík Debian (.deb) a je testován na distribucích Linux založených na Debianu 9/10.
  • Software není open-source. V případě potřeby použití programu na jiné než uvedené platformu kontaktujte technickou podporu Unipi.

*v současnosti jsou podporovány platformy arm64 a armhf

Instalace

  1. Do seznamu apt-sources přidejte repozitář Unipi Debian (tento krok přeskočte, pokud používáte jednotku Unipi). <distro> nahraďte názvem Vaší distribuce Debianu, tj. stretch nebo buster
    sudo su
    echo "deb https://repo.unipi.technology/debian <distro> main" >> /etc/apt/sources.list.d/unipi.list
    wget https://repo.unipi.technology/debian/unipi_pub.gpg -O - | apt-key add apt-get update 
  2. nainstalujte aplikační balíček
    apt-get install sscp-sql-bridge

Balíčky s externími knihovnami (libyaml, libmysqlcppconn, libboost-system, libssl) se v případě potřeby automaticky nainstalují do adresáře /opt/unipi/tools .

Konfigurace

Veškerá konfigurace je tvořena dvěma soubory:

  1. /etc/unipi/sscp-sql-bridge.d/mapping.yaml: hlavní konfigurační soubor obsahující IP adresy a identifikační údaje pro databázový server/y, zařízení se spuštěným Mervis RT a rovněž i všechna nastavení týkajících se přenášených proměnných. Ve výchozím stavu tento soubor obsahuje komentovanou vzorovou konfiguraci; tuto konfigurace je nutné nahradit správnými hodnotami dle dané aplikace.
  2. jeden či více souborů .vlist, které obsahují seznam všech proměnných používaných v projektu či projektech Mervis. Tyto soubory jsou automaticky generovány prostředím Mervis IDE a jsou umístěny v kořenovém adresáři Mervis projektu. Výchozí cesta v souborovém systému jednotky je /opt/unipi/data a lze ji změnit v souboru souboru *mapping.yaml*. Upozornění: důrazně nedoporučujeme soubory .vlist editovat manuálně.

U konfiguračních souborů je třeba klást důraz na dodržování validního formátu .yaml. Pokud si nejste jistí, využijte online YAML validátor (např. https://codebeautify.org/yaml-validator). Rovněž do souboru nepřidávejte žádná pole, která nejsou zahrnutá v příkladu níže.

Struktura souboru mapping.yaml je popsána níže.

Povolení služby

Po dokončení konfigurace doporučujeme ověřit správnou funkčnost démona provedením následujících příkazů v popředí terminálu:

cd /opt/unipi/tools/
./sscp-sql-bridge

Pokud se ve výstupu nezobrazí žádná chybová hláška, služba je připravena k povolení a spuštění na pozadí (tj. v módu démona) skrze následující příkazy:

systemctl enable sscp-sql-daemon
systemctl start sscp-sql-daemon

Důsledně dodržujte YAML strukturu souboru. Nejsnadněji tak lze učinit prostou editací výchozího nastavení.

  • plc_n - seznam adresovaných jednotek, na kterých je spuštěn Mervis. Lze definovat více než jednu jednotku
    • sscp_ip — IP adresa zařízení se spuštěným mervisr (pokud je démon spuštěn na místní síti, lze použít adresu 127.0.0.1)
    • sscp_port — TCP port, na kterém mervisr naslouchá (12346 ve výchozím stavu)
    • sscp_username — přihlašovací jméno pro SSCP, lze nastavit v Mervis IDE
    • sscp_password — heslo pro SSCP, lze nastavit v Mervis IDE
    • db_user — přihlašovací jméno pro databázový server
    • db_pass — heslo pro databázový server
    • db_ip — IP adresa databázového serveru (pokud je spuštěn na stejném zařízení jako démon, lze použít adresu 127.0.0.1)
    • db_port — port databázového serveru (3306 ve výchozím stavu)
    • db_mysql_schema — název databázového schématu
    • vlist_filename — seznam proměnných (generováno Mervis IDE)
    • variable_sets - seznam provozních skupin - na jedné jednotce lze definovat více skupin
      • type — typ operace (podporovány operace SELECT, UPDATE a INSERT)
      • set_name — název sady jedné či více proměnných
      • table_name — název tabulky v rámci db_mysql_schema
      • reading_period — vyčítací interval, nastavení probíhá v krocích po 100 ms
      • vars — seznam proměnných přiřazených k projektu
        • var_name — název proměnné v rámci Mervis projektu
        • field_name — název sloupce v table_name