This is an old revision of the document!


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ě (tj. 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)
  • 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