Rozdíly
Zde můžete vidět rozdíly mezi vybranou verzí a aktuální verzí dané stránky.
| Obě strany předchozí revize Předchozí verze Následující verze | Předchozí verze | ||
|
cs:mervis-scada:50-api [2018/11/06 10:29] m.chlupac |
cs:mervis-scada:50-api [2026/07/17 12:58] (aktuální) z.moustis |
||
|---|---|---|---|
| Řádek 1: | Řádek 1: | ||
| - | ====== API ====== | + | ====== |
| - | Mervis SCADA nabízí otevřené REST-like API postavené | + | Mervis SCADA nabízí otevřené REST-like API založené |
| - | ===== Přehled základních | + | **Důležité upozornění k formátům: |
| - | ^Function^Description| | + | ===== Podporované API metody ===== |
| - | ^api/ | + | Níže je uveden konsolidovaný seznam doporučených API metod. Jsou zde uvedeny pouze metody s kompletní dokumentací a ověřenými příklady. |
| - | ^api/ | + | |
| - | ^api/ | + | |
| - | ^api/ | + | |
| - | ^api/ | + | |
| - | ^api/ | + | |
| - | ^api/ | + | |
| - | ^api/ | + | |
| - | ^api/ | + | |
| - | ^api/ | + | |
| - | ^api/ | + | |
| - | ^api/ | + | |
| - | ^api/ | + | |
| - | ^api/ | + | |
| - | ^api/ | + | |
| - | ^api/ | + | |
| - | ^api/ | + | |
| - | ^api/ | + | |
| - | ^api/ | + | |
| - | ^api/ | + | |
| - | ^api/ | + | |
| + | ^ Funkce ^ Popis | | ||
| + | | **Autentizace** | | | ||
| + | | '' | ||
| + | | **Projekty a datová struktura** | | | ||
| + | | '' | ||
| + | | '' | ||
| + | | **Čtení dat** | | | ||
| + | | '' | ||
| + | | '' | ||
| + | | '' | ||
| + | | **Zápis dat a provádění akcí** | | | ||
| + | | '' | ||
| + | | '' | ||
| + | | '' | ||
| + | | '' | ||
| - | ===== Příklad ===== | + | **Poznámka k přihlašovacím údajům:** API metody můžete testovat pomocí přihlašovacích údajů `n: demo` a `p: demo`. V produkčních aplikacích je doporučeno nejprve získat autentizační token pomocí metody `api/ |
| - | ====api/ | + | ===== Autentizace ===== |
| - | **Request** | + | ==== api/ |
| + | **Požadavek:** | ||
| + | * **URL:** ''/ | ||
| + | * **Metoda:** POST | ||
| - | * URL: / | + | Standardní přihlášení: |
| - | * Method: POST | + | <code javascript> |
| + | {" | ||
| + | </ | ||
| + | Přihlášení do konkrétní domény: | ||
| <code javascript> | <code javascript> | ||
| - | { | + | {" |
| - | " | + | </ |
| - | | + | |
| - | | + | **Vlastnosti odpovědi: |
| - | "pe":0 | + | * **token** (string) – autentizační token používaný při dalších API voláních. |
| - | }, | + | * **tokenValidFor** (TimeSpan) – doba platnosti tokenu (např. " |
| - | | + | * **changePwdBefore** (DateTime nebo null) – datum a čas, do kterého je nutné změnit aktuální heslo. |
| - | | + | |
| - | | + | <code javascript> |
| - | | + | { |
| - | | + | |
| - | | + | " |
| - | "historyState":"" | + | "ClientType": |
| + | " | ||
| + | "DomainName": "GlobalDomain", | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | "TokenValidFor": "P1D", | ||
| + | "User": "48141739-5d16-4ca3-8ae1-33e27d9eb22e", | ||
| + | "Username": | ||
| + | }, | ||
| + | "result": | ||
| } | } | ||
| </ | </ | ||
| - | **Response** | + | ===== Čtení dat ===== |
| + | ==== api/ | ||
| + | Vrací aktuální hodnoty datových bodů (vlastnost " | ||
| + | |||
| + | **Požadavek: | ||
| + | * **URL:** ''/ | ||
| + | * **Metoda:** POST | ||
| + | |||
| + | <code javascript> | ||
| + | { | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | }, | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | }] | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | **Odpověď: | ||
| <code xml> | <code xml> | ||
| <?xml version=" | <?xml version=" | ||
| - | <getHistoryResult | + | <values |
| - | <hist projId=" | + | < |
| - | <errMsg/> | + | <v projId=" |
| - | < | + | < |
| - | <hv ts="2018-11-02T21:26:08.7936747Z" | + | <d id=" |
| - | | + | < |
| - | </hv> | + | <p n=" |
| - | < | + | < |
| - | | + | </ |
| - | </hv> | + | </ |
| - | <hv ts="2018-11-05T11:40:04.0077949Z" | + | </d> |
| - | <n1:v>12754</n1:v> | + | </ |
| - | </hv> | + | </ |
| - | <hv ts="2018-11-05T17: | + | </vals> |
| - | < | + | </ |
| - | </hv> | + | </ |
| - | <hv ts="2018-11-05T19:43:03.6499981Z" | + | |
| - | <n1:v>12756</n1:v> | + | ==== api/ |
| - | </hv> | + | Stažení jednoho nebo více trendů jedním API voláním. |
| - | <hv ts="2018-11-05T22: | + | |
| - | <n1:v>12757</n1:v> | + | **Pravidla: |
| - | </hv> | + | * Položky **segmentation**, |
| - | <hv ts="2018-11-06T02:40:03.61157Z" | + | |
| - | <n1:v> | + | **Požadavek: |
| - | </hv> | + | * **URL:** ''/ |
| - | <hv ts="2018-11-06T04:55:03.14511Z" | + | * **Metoda:** POST |
| - | < | + | |
| - | </ | + | <code javascript> |
| - | <hv ts="2018-11-06T06:43:03.2063072Z" | + | { |
| - | < | + | " |
| - | </ | + | " |
| - | <hv ts="2018-11-06T08:58:03.083875Z" | + | " |
| - | <n1:v>12761</n1:v> | + | }, |
| - | </hv> | + | " |
| - | <hv ts="2018-11-06T09: | + | " |
| - | <n1:v>12761</n1:v> | + | " |
| - | </hv> | + | " |
| - | <hv ts="2018-11-06T09:22:03.9461503Z"> | + | |
| - | < | + | " |
| - | </hv> | + | { |
| - | </vals> | + | " |
| - | </hist> | + | " |
| - | </getHistoryResult> | + | " |
| + | " | ||
| + | " | ||
| + | } | ||
| + | } | ||
| + | } | ||
| + | ] | ||
| + | }, | ||
| + | " | ||
| + | " | ||
| + | }, | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | } | ||
| + | } | ||
| + | </code> | ||
| + | |||
| + | **Popis odpovědi:** | ||
| + | * **v** – hodnota | ||
| + | * **ts** – časová známka (začátek období platnosti) | ||
| + | * **gt** – goodthrough (konec období platnosti) | ||
| + | * **meta.interval** – očekávaný interval mezi uloženými záznamy. Lze využít k identifikaci chybějících dat. | ||
| + | |||
| + | <code javascript> | ||
| + | { | ||
| + | | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | { | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | } | ||
| + | }, | ||
| + | " | ||
| + | " | ||
| + | { " | ||
| + | ] | ||
| + | } | ||
| + | | ||
| + | }, | ||
| + | " | ||
| + | } | ||
| + | </code> | ||
| + | |||
| + | ==== api/ | ||
| + | **Požadavek:** | ||
| + | * **URL:** ''/ | ||
| + | * **Metoda:** POST | ||
| + | * **dataSpec: | ||
| + | * **refTime: | ||
| + | |||
| + | <code javascript> | ||
| + | { | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | }, | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | } | ||
| + | </code> | ||
| + | |||
| + | ===== Zápis dat a provádění akcí ===== | ||
| + | |||
| + | ==== api/ | ||
| + | **Požadavek: | ||
| + | * **URL:** ''/ | ||
| + | * **Metoda:** POST | ||
| + | |||
| + | <code xml> | ||
| + | <?xml version="1.0" encoding=" | ||
| + | < | ||
| + | | ||
| + | | ||
| + | <dps> | ||
| + | <d id="07d538d9-9f4b-46ca-ba4d-13b13b5302ff"> | ||
| + | < | ||
| + | <p n="Source" | ||
| + | < | ||
| + | </p> | ||
| + | </ | ||
| + | </ | ||
| + | </ | ||
| + | </ | ||
| + | </ | ||
| + | </ | ||
| + | |||
| + | ==== api/ | ||
| + | **Požadavek: | ||
| + | * **URL:** ''/ | ||
| + | * **Metoda:** POST | ||
| + | |||
| + | <code xml> | ||
| + | <?xml version=" | ||
| + | < | ||
| + | <n1:cred n=" | ||
| + | | ||
| + | <actions> | ||
| + | <actionDefItem propName="INIT" dpId=" | ||
| + | < | ||
| + | <n2:value>16</n2:value> | ||
| + | </ | ||
| + | </actionDefItem> | ||
| + | <actionDefItem propName="ZAP" dpId=" | ||
| + | </ | ||
| + | </ | ||
| + | </ | ||
| + | </ | ||
| + | </ | ||
| + | |||
| + | ==== api/ | ||
| + | Atribut **i** určuje **interval** (ISO 8601), ve kterém je očekávána následující hodnota. Všechny datumové a časové údaje musí být uvedeny v UTC. | ||
| + | |||
| + | **Příklad požadavku Replace History:** | ||
| + | * **URL:** ''/ | ||
| + | * **Metoda:** POST | ||
| + | |||
| + | <code xml> | ||
| + | <?xml version=" | ||
| + | < | ||
| + | <n2:cred n=" | ||
| + | <vals> | ||
| + | <hv ts="2020-03-15T11:00:00+00:00" | ||
| + | < | ||
| + | </ | ||
| + | <hv ts="2020-03-16T11:00:00+00:00" | ||
| + | < | ||
| + | </ | ||
| + | </vals> | ||
| + | </ | ||
| + | </ | ||
| + | |||
| + | ===== Správa projektů ===== | ||
| + | |||
| + | ==== api/ | ||
| + | **Požadavek: | ||
| + | * **URL:** ''/ | ||
| + | * **Metoda:** POST | ||
| + | |||
| + | <code javascript> | ||
| + | { | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | }, | ||
| + | " | ||
| + | " | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | **Odpověď: | ||
| + | <code xml> | ||
| + | <?xml version=" | ||
| + | < | ||
| + | <projects> | ||
| + | | ||
| + | <project id=" | ||
| + | <project id="5abf8ca0-94ba-48df-8d3c-7ebe87a12fd0" | ||
| + | <project id=" | ||
| + | <project id=" | ||
| + | | ||
| + | </getProjectsResult> | ||
| + | </code> | ||
| + | |||
| + | ==== api/ | ||
| + | Vrací strukturu Visual tree a seznam datových bodů. | ||
| + | |||
| + | **Požadavek: | ||
| + | * **URL:** ''/ | ||
| + | * **Metoda:** POST | ||
| + | |||
| + | <code javascript> | ||
| + | { | ||
| + | "cred": { | ||
| + | " | ||
| + | " | ||
| + | }, | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | "offset": | ||
| + | " | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | ===== Matlab Client ===== | ||
| + | |||
| + | ==== Obecné poznámky ==== | ||
| + | * Názvy parametrů **ID** a **Guid** jsou v klientovi Matlab používány zaměnitelně. Vždy se jedná o globálně jedinečný identifikátor projektu nebo datového bodu. | ||
| + | * Pokud je parametr uveden v množném čísle, očekává se pole GUID (např. '' | ||
| + | |||
| + | ==== ScadaClient ==== | ||
| + | <code matlab>ScadaClient(url, | ||
| + | Konstruktor obalové třídy Mervis API. | ||
| + | |||
| + | ==== findAllDPsWithReqTags ==== | ||
| + | <code matlab> | ||
| + | Vrátí seznam datových bodů podle zadaných tagů. Příklad definice tagů: '' | ||
| + | |||
| + | ==== getDpTags ==== | ||
| + | <code matlab> | ||
| + | Vrátí tagy konkrétního datového bodu. | ||
| + | |||
| + | ==== getAllProjectDPs ==== | ||
| + | <code matlab> | ||
| + | Vrátí ID a názvy projektů dostupných přihlášenému uživateli. | ||
| + | |||
| + | ==== getData ==== | ||
| + | <code matlab> | ||
| + | Stáhne data. | ||
| + | |||
| + | | ||
| + | * **zone:** časové pásmo (' | ||
| + | * **Vrací:** '' | ||
| + | |||
| + | **Příklad stažení dat:** | ||
| + | <code matlab> | ||
| + | scada = ScadaClient(' | ||
| + | |||
| + | dataPointIDs = {' | ||
| + | projectId = ' | ||
| + | chartLegend = {'Temp UT1',' | ||
| + | from = now - 4; | ||
| + | to = now; | ||
| + | timeSpan = 300; | ||
| + | |||
| + | [data, time] = scada.getData(projectId, | ||
| + | |||
| + | plot(time, | ||
| + | legend(chartLegend); | ||
| + | datetick; | ||
| + | </code> | ||
| + | |||
| + | ==== saveData ==== | ||
| + | <code matlab> | ||
| + | Uloží data do databáze Mervis. | ||
| + | |||
| + | ==== setDataPointValue ==== | ||
| + | <code matlab> | ||
| + | Nastaví hodnotu datového bodu pomocí tlačítka. Jsou podporovány pouze číselné hodnoty. Parametr '' | ||
| + | **Příklad: | ||
| + | <code matlab> | ||
| + | dpGuid = ' | ||
| + | projectId = ' | ||
| + | buttonName = ' | ||
| + | newValue = 1; | ||
| + | scada = ScadaClient(' | ||
| + | scada.setDataPointValue(projectId, | ||
| </ | </ | ||
| + | ==== deleteVariable ==== | ||
| + | <code matlab> | ||
| + | **Upozornění: | ||