| Both sides previous revision
Previous revision
Next revision
|
Previous revision
|
en:mervis-scada:50-api [2020/04/06 13:14] m.chlupac [api/set/history] |
en:mervis-scada:50-api [2026/07/17 12:41] (current) z.moustis |
| ====== API ====== | ====== Mervis SCADA API ====== |
| |
| Mervis SCADA offers open REST-like API based on JSON and XML data formats. For full description please contact our [[:en:help:support|technical support]]. | Mervis SCADA offers an open, REST-like API based on JSON and XML data formats for seamless integration with third-party applications. For a full description of advanced features, please contact our [[:en:help:20-support|technical support]]. |
| |
| **Important:** Only officially supported response format is XML! | **Important Note on Formatting:** While JSON is heavily utilized in newer endpoints, the only officially supported backward-compatible response format across the entire legacy API is XML. |
| ===== List of basic API methods ===== | |
| |
| ^Function^Description| | ===== Supported API Methods ===== |
| ^api/checkCredentials|| | |
| ^api/logout|| | |
| ^api/get/projects|| | |
| ^api/get/projectData|| | |
| ^api/get/projectByParts|| | |
| ^api/get/history|| | |
| ^api/get/history/specific|| | |
| ^api/set/history|| | |
| ^api/get/values|| | |
| ^api/get/alarms|| | |
| ^api/get/alarmHistory|| | |
| ^api/get/eventHistory|| | |
| ^api/get/changes|| | |
| ^api/set/executeActions|| | |
| ^api/set/values|| | |
| ^api/set/executeAlarmOps|| | |
| ^api/set/projectPriorityRefresh|| | |
| ^api/get/schema|| | |
| ^api/get/schema/datapoints|| | |
| ^api/get/schema/values|| | |
| ^api/get/schema/image|| | |
| |
| | Below is the consolidated list of recommended API endpoints. Note: Only methods with fully documented and verified examples are listed below. |
| |
| | ^ Function ^ Description | |
| | | **Authentication** | | |
| | | ''api/v2/get/authenticate'' | Authenticates a user and returns a session token for subsequent API calls. | |
| | | **Project & Data Structure** | | |
| | | ''api/get/projects'' | Retrieves a list of all projects accessible to the logged-in user. | |
| | | ''api/get/projectByParts'' | Retrieves the visual tree structure and the list of datapoints within a specific project. | |
| | | **Reading Data** | | |
| | | ''api/get/values'' | Retrieves the current, real-time values of specified datapoints. | |
| | | ''api/v3/get/history'' | Downloads historical trend data for one or multiple series in a single, paginated call. | |
| | | ''api/get/history/specific'' | Retrieves specific historical datapoints relative to a provided reference time. | |
| | | **Writing & Execution** | | |
| | | ''api/set/values'' | Writes new values to specified datapoints. | |
| | | ''api/set/executeActions'' | Executes predefined actions or buttons (e.g., INIT, ZAP commands) on datapoints. | |
| | | ''api/set/history'' | Inserts new historical data values into the database. | |
| | | ''api/replace/history'' | Completely replaces existing historical data within a specified time range. | |
| |
| | **Note on Credentials:** You can test these API calls using the credentials `n: demo` and `p: demo`. For production applications, it is required to exchange these credentials for a token using `api/v2/get/authenticate` and use the resulting token (`t: [token_string]`) in subsequent calls to ensure optimal performance. |
| |
| ===== Example ===== | ===== Authentication ===== |
| |
| ====api/checkCredentials==== | ==== api/v2/get/authenticate ==== |
| | **Request:** |
| | * **URL:** ''/api/v2/get/authenticate?format=json'' |
| | * **Method:** POST |
| |
| **Request** | Standard login: |
| | <code javascript> |
| | {"data":{"cred":{"n":"demo","p":"demo"}}} |
| | </code> |
| |
| * URL: /api/checkCredentials?format=xml | Domain-specific login: |
| * Method: POST | <code javascript> |
| | {"data":{"cred":{"d":"GlobalDomain","n":"demo","p":"demo"}}} |
| | </code> |
| |
| **Request** | **Response Properties:** |
| | * **token** (string) - Authentication token for calling other API methods. |
| | * **tokenValidFor** (TimeSpan) - The duration for which the provided token is valid (e.g., "P1D" = 1 day). |
| | * **changePwdBefore** (DateTime or null) - Specifies the date and time by which the current password must be changed. |
| |
| <code javascript> | <code javascript> |
| {"cred":{"n":"demo","p":"demo"}} | { |
| | "data": { |
| | "ChangePwdBefore": null, |
| | "ClientType": 2, |
| | "Domain": "3c73477a-6c95-4939-b047-7bbf902bcef1", |
| | "DomainName": "GlobalDomain", |
| | "FullName": "GlobalDomain\\demo", |
| | "Login": "demo", |
| | "NotifyNearingPwdExpirationIn": null, |
| | "Token": "3:b83d56f8-2e25-4745-a4e5-1a259c286c5f", |
| | "TokenValidFor": "P1D", |
| | "User": "48141739-5d16-4ca3-8ae1-33e27d9eb22e", |
| | "Username": "" |
| | }, |
| | "result": { "code": 0, "codeTxt": null, "dataType": null, "desc": null } |
| | } |
| </code> | </code> |
| |
| **Response** | ===== Reading Data ===== |
| |
| | ==== api/get/values ==== |
| | Retrieves current values of data points (property "Output") from one or multiple projects. |
| | |
| | **Request:** |
| | * **URL:** ''/api/get/values?format=xml'' |
| | * **Method:** POST |
| | |
| | <code javascript> |
| | { |
| | "cred": { |
| | "n": "demo", |
| | "p": "demo" |
| | }, |
| | "propNamesToSerialize": ["Output"], |
| | "offset": 0, |
| | "count": 1000, |
| | "serverState": null, |
| | "dps": [{ |
| | "projId": "5abf8ca0-94ba-48df-8d3c-7ebe87a12fd0", |
| | "dpIds": ["62cf4083-31ed-4bc1-be25-044ba837a9f0"] |
| | }] |
| | } |
| | </code> |
| | |
| | **Response:** |
| <code xml> | <code xml> |
| <?xml version="1.0" encoding="utf-8"?> | <?xml version="1.0" encoding="utf-8"?> |
| <checkCredentialsResult xmlns:r="http://dev.rcware.eu/serialization/references" d="GlobalDomain" l="demo" t="2:85be00d3-5875-4dec-a9b4-c98e2ff2acbe" xmlns="http://dev.rcware.eu/auth" /> | <values xmlns:r="http://dev.rcware.eu/serialization/references" nextOffset="-1" serverTime="2026-07-17T10:29:17Z" xmlns:n1="http://dev.rcware.eu/scada/basic-props" xmlns="http://dev.rcware.eu/scada/datapoints"> |
| | <vals> |
| | <v projId="5abf8ca0-94ba-48df-8d3c-7ebe87a12fd0" serverTime="2026-07-17T10:29:17Z"> |
| | <dps> |
| | <d id="62cf4083-31ed-4bc1-be25-044ba837a9f0" serAlr="true"> |
| | <props> |
| | <p n="Output" t="2026-07-17T10:29:17Z" q="Good" r:type="b133774d-21ce-42b6-add3-57c012079c55"> |
| | <n1:v>13851.42</n1:v> |
| | </p> |
| | </props> |
| | </d> |
| | </dps> |
| | </v> |
| | </vals> |
| | </values> |
| </code> | </code> |
| |
| * You **should** use the received token **t** in subsequent API calls. | ==== api/v3/get/history ==== |
| | Downloading one or multiple trends with a single API call. |
| ====api/get/history==== | |
| |
| **Request** | **Rules:** |
| | * Items "segmentation", "requestState", and "serverState" should always copy the values from the last server response for pagination. The first call should use an empty "segmentation". |
| |
| * URL: /api/get/history?format=xml | **Request:** |
| * Method: POST | * **URL:** ''/api/v3/get/history?format=json'' |
| | * **Method:** POST |
| |
| <code javascript> | <code javascript> |
| { | { |
| "cred":{ | "credentials": { |
| "n":"demo", //username | "name": "demo", |
| "p":"demo" //password | "password": "demo" |
| }, | }, |
| "projId":"5abf8ca0-94ba-48df-8d3c-7ebe87a12fd0", //project ID | "request": { |
| "dpId":"62cf4083-31ed-4bc1-be25-044ba837a9f0", //single datapoint ID | "commonSeriesParameters": { |
| "from":"/Date(1541199600000)/", //UTC in ms | "from": "2026-06-20T00:00:00Z", |
| "to":"/Date(1541496190357)/", //UTC in ms | "to": "2026-07-17T00:00:00Z" |
| "offset":0, | }, |
| "count":5000, | "series": [ |
| "historyState":"" //client has to send historyState value from the last response with the following request | { |
| | "clientReference": "test1", |
| | "provider": { |
| | "parameters": { |
| | "projectId": "5abf8ca0-94ba-48df-8d3c-7ebe87a12fd0", |
| | "dataPointId": "62cf4083-31ed-4bc1-be25-044ba837a9f0" |
| | } |
| | } |
| | } |
| | ] |
| | }, |
| | "dataSpecification": { |
| | "limits": { "count": 1000 } |
| | }, |
| | "segmentation": { |
| | "requestState": "", |
| | "serverState": "" |
| | } |
| } | } |
| </code> | </code> |
| |
| **Response** | **Response Details:** |
| | * **v** - value |
| | * **ts** - timestamp (start of validity period) |
| | * **gt** - goodthrough (end of validity period) |
| | * **meta.interval** - expected interval between stored records. Useful to identify missing data. |
| |
| <code xml> | <code javascript> |
| <?xml version="1.0" encoding="utf-8"?> | { |
| <getHistoryResult xmlns:r="http://dev.rcware.eu/serialization/references" r:type="b133774d-21ce-42b6-add3-57c012079c55" xmlns:n1="http://dev.rcware.eu/scada/basic-props" xmlns="http://dev.rcware.eu/scada/history"> | "result": { "code": 0, "subCode": 0, "message": "" }, |
| <!-- | "data": { |
| @Interval - ISO interval of trend values defined by the database client. | "count": 1, |
| @historyState - to be copied into the next request | "historyData": [ |
| @nextValOfs - to be copied into the next request until value -1 is reached. | { |
| If ts of value in not within the interval time span after the previous value's gt - some data is missing. | "clientReference": "test1", |
| | "provider": { |
| --> | "id": "689e32fa-24a2-448e-9374-6158e6e6cb15", |
| <hist projId="5abf8ca0-94ba-48df-8d3c-7ebe87a12fd0" dpId="62cf4083-31ed-4bc1-be25-044ba837a9f0" propName="Output" interval="PT3M" historyState="" nextValOfs="-1"> | "parameters": { |
| <errMsg/> | "projectId": "5abf8ca0-94ba-48df-8d3c-7ebe87a12fd0", |
| <vals> | "dataPointId": "62cf4083-31ed-4bc1-be25-044ba837a9f0" |
| <!--ts - time stamp, gt - good through, value is valid in the whole time span between these two--> | } |
| <hv ts="2018-11-02T21:26:08.7936747Z" gt="2018-11-03T20:35:08.8060769Z"> | }, |
| <n1:v>12754</n1:v> | "meta": { "type": "double", "unit": "h", "interval": "PT3M" }, |
| </hv> | "values": [ |
| <hv ts="2018-11-03T20:41:09.0100479Z" gt="2018-11-05T11:35:08.7415158Z"> | { "v": 13851.4, "ts": "2026-06-25T12:00:00.000Z" } |
| <n1:v>12754</n1:v> | ] |
| </hv> | } |
| <hv ts="2018-11-05T11:40:04.0077949Z" gt="2018-11-05T17:25:03.4285643Z"> | ] |
| <n1:v>12754</n1:v> | }, |
| </hv> | "segmentation": { "requestState": "", "serverState": "" } |
| <hv ts="2018-11-05T17:28:03.4133447Z" gt="2018-11-05T19:40:03.0246122Z"> | } |
| <n1:v>12755</n1:v> | </code> |
| </hv> | |
| <hv ts="2018-11-05T19:43:03.6499981Z" gt="2018-11-05T22:01:03.2620552Z"> | |
| <n1:v>12756</n1:v> | |
| </hv> | |
| <hv ts="2018-11-05T22:04:03.1530787Z" gt="2018-11-06T02:37:03.454926Z"> | |
| <n1:v>12757</n1:v> | |
| </hv> | |
| <hv ts="2018-11-06T02:40:03.61157Z" gt="2018-11-06T04:52:03.1759539Z"> | |
| <n1:v>12758</n1:v> | |
| </hv> | |
| <hv ts="2018-11-06T04:55:03.14511Z" gt="2018-11-06T06:40:03.8621601Z"> | |
| <n1:v>12759</n1:v> | |
| </hv> | |
| <hv ts="2018-11-06T06:43:03.2063072Z" gt="2018-11-06T08:55:03.3019409Z"> | |
| <n1:v>12760</n1:v> | |
| </hv> | |
| <hv ts="2018-11-06T08:58:03.083875Z" gt="2018-11-06T09:10:03.0695797Z"> | |
| <n1:v>12761</n1:v> | |
| </hv> | |
| <hv ts="2018-11-06T09:13:03.5389214Z" gt="2018-11-06T09:19:03.5238805Z"> | |
| <n1:v>12761</n1:v> | |
| </hv> | |
| <!-- value without gt - ts and gt are equal--> | |
| <hv ts="2018-11-06T09:22:03.9461503Z"> | |
| <n1:v>12761</n1:v> | |
| </hv> | |
| </vals> | |
| </hist> | |
| </getHistoryResult> | |
| |
| | ==== api/get/history/specific ==== |
| | **Request:** |
| | * **URL:** ''/api/get/history/specific?format=json'' |
| | * **Method:** POST |
| | * **dataSpec:** Defines the specific point to fetch (e.g., 2 = First value less than reference time). |
| | * **refTime:** Reference time required for specific temporal searches. |
| |
| | <code javascript> |
| | { |
| | "cred": { |
| | "n": "demo", |
| | "p": "demo" |
| | }, |
| | "projId": "5abf8ca0-94ba-48df-8d3c-7ebe87a12fd0", |
| | "offset": 0, |
| | "count": 1000, |
| | "dataSpec": 2, |
| | "refTime": "\/Date(1692788459000)\/", |
| | "dpIds": ["62cf4083-31ed-4bc1-be25-044ba837a9f0"] |
| | } |
| </code> | </code> |
| |
| | ===== Writing Data & Execution ===== |
| |
| ====api/set/history==== | ==== api/set/values ==== |
| | **Request:** |
| | * **URL:** ''/api/set/values?format=xml'' |
| | * **Method:** POST |
| |
| **Request** | <code xml> |
| | <?xml version="1.0" encoding="UTF-8"?> |
| | <setValuesRequest xmlns:r="http://dev.rcware.eu/serialization/references" xmlns="http://dev.rcware.eu/scada/datapoints" xmlns:n2="http://dev.rcware.eu/auth" xmlns:n1="http://dev.rcware.eu/scada/comm-props" > |
| | <n2:cred n="demo" p="demo"/> |
| | <values projId="1b2623be-eaa4-4e29-8596-c66dd85d5643"> |
| | <dps> |
| | <d id="07d538d9-9f4b-46ca-ba4d-13b13b5302ff"> |
| | <props> |
| | <p n="Source" t="2024-02-23T09:58:00Z" r:type="1c104bdf-ffcb-4c90-b491-e4781a91ef09"> |
| | <n1:v>23</n1:v> |
| | </p> |
| | </props> |
| | </d> |
| | </dps> |
| | </values> |
| | </setValuesRequest> |
| | </code> |
| |
| * URL: /api/set/history?format=xml | ==== api/set/executeActions ==== |
| * Method: POST | **Request:** |
| | * **URL:** ''/api/set/executeActions?format=xml'' |
| | * **Method:** POST |
| |
| Attribute **i** sets **interval** ([[https://en.wikipedia.org/wiki/ISO_8601#Time_intervals|ISO 8601]]) in which the next value should be expected to be saved into database. | <code xml> |
| | <?xml version="1.0" encoding="UTF-8"?> |
| | <executeActionsRequest xmlns="http://dev.rcware.eu/scada/action-defs" xmlns:n2="http://dev.rcware.eu/scada/basic-props" xmlns:n1="http://dev.rcware.eu/auth" xmlns:r="http://dev.rcware.eu/serialization/references"> |
| | <n1:cred n="demo" p="demo"/> |
| | <actionDefs projId="5abf8ca0-94ba-48df-8d3c-7ebe87a12fd0"> |
| | <actions> |
| | <actionDefItem propName="INIT" dpId="afc22e18-f8e4-4e08-899c-fb9e4759df3d"> |
| | <execParam r:type="495c9644-eed1-4b94-933b-3fae702a9aca"> |
| | <n2:value>16</n2:value> |
| | </execParam> |
| | </actionDefItem> |
| | <actionDefItem propName="ZAP" dpId="34306c80-73f1-4465-ab51-2b2c1e85ab70"> |
| | </actionDefItem> |
| | </actions> |
| | </actionDefs> |
| | </executeActionsRequest> |
| | </code> |
| |
| Even though there could be used name and password in **cred** - you should always use **token** to get the best performance. | ==== api/set/history & api/replace/history ==== |
| | Attribute **i** sets **interval** (ISO 8601) in which the next value should be expected. All date/time values must be in UTC. |
| |
| All date and time values are supposed to be in UTC. | **Replace History Request Example:** |
| | * **URL:** ''/api/replace/history?format=xml'' |
| | * **Method:** POST |
| |
| <code xml> | <code xml> |
| <?xml version="1.0" encoding="UTF-8"?> | <?xml version="1.0" encoding="UTF-8"?> |
| <setHistoryRequest xmlns="http://dev.rcware.eu/scada/history" | <replaceHistoryRequest xmlns="http://dev.rcware.eu/scada/history" xmlns:n2="http://dev.rcware.eu/auth" xmlns:n1="http://dev.rcware.eu/scada/basic-props" projId="5abf8ca0-94ba-48df-8d3c-7ebe87a12fd0" dpId="e86dba6d-1250-4e7f-aafb-84fd28324710" from="2020-03-15T11:00:00+00:00" to="2020-03-18T11:00:00+00:00"> |
| xmlns:n2="http://dev.rcware.eu/auth" | <n2:cred n="demo" p="demo"/> |
| xmlns:n1="http://dev.rcware.eu/scada/basic-props" | |
| projId="5abf8ca0-94ba-48df-8d3c-7ebe87a12fd0" | |
| dpId="e86dba6d-1250-4e7f-aafb-84fd28324710"> | |
| <n2:cred t="xxxxx"/><!-- token should be always used here --> | |
| <vals> | <vals> |
| <hv ts="2020-03-15T11:00:00+00:00" i="P1D"> | <hv ts="2020-03-15T11:00:00+00:00" i="P1D"> |
| <hv ts="2020-03-16T11:00:00+00:00" i="P1D"> | <hv ts="2020-03-16T11:00:00+00:00" i="P1D"> |
| <n1:v>3.0</n1:v> | <n1:v>3.0</n1:v> |
| </hv> | |
| <hv ts="2020-03-17T11:00:00+00:00" i="P1D"> | |
| <n1:v>2.0</n1:v> | |
| </hv> | |
| <hv ts="2020-03-18T11:00:00+00:00" i="P1D"> | |
| <n1:v>2.3</n1:v> | |
| </hv> | </hv> |
| </vals> | </vals> |
| </setHistoryRequest></code> | </replaceHistoryRequest> |
| | </code> |
| |
| **Response** | ===== Projects Management ===== |
| |
| * 200 OK | ==== api/get/projects ==== |
| | **Request:** |
| | * **URL:** ''/api/get/projects?format=xml'' |
| | * **Method:** POST |
| |
| ====api/set/executeActions==== | <code javascript> |
| | { |
| **Request** | "cred": { |
| | "n": "demo", |
| * URL: /api/set/executeActions?format=xml | "p": "demo" |
| * Method: POST | }, |
| | "offset": 0, |
| | "count": 250 |
| | } |
| | </code> |
| |
| | **Response:** |
| <code xml> | <code xml> |
| <?xml version="1.0" encoding="UTF-8"?> | <?xml version="1.0" encoding="utf-8"?> |
| <executeActionsRequest xmlns="http://dev.rcware.eu/scada/action-defs" | <getProjectsResult xmlns:r="http://dev.rcware.eu/serialization/references" xmlns="http://dev.rcware.eu/scada/projects"> |
| xmlns:n2="http://dev.rcware.eu/scada/basic-props" | <projects> |
| xmlns:n1="http://dev.rcware.eu/auth" | <project id="2a7f1615-..." name="Weather" /> |
| xmlns:r="http://dev.rcware.eu/serialization/references"> | <project id="1b2623be-eaa4-4e29-8596-c66dd85d5643" name="SIMPLE_DEMO" /> |
| <n1:cred n="userName" p="password"/> | <project id="5abf8ca0-94ba-48df-8d3c-7ebe87a12fd0" name="PLYNOVA_KOTELNA" /> |
| <actionDefs projId="5abf8ca0-94ba-48df-8d3c-7ebe87a12fd0"> | <project id="b9ad5380-..." name="CVUT_HERBERTOV" /> |
| <actions> | <project id="843855a2-..." name="PRVNI_KROKY" /> |
| <actionDefItem propName="INIT" dpId="afc22e18-f8e4-4e08-899c-fb9e4759df3d"> | </projects> |
| <execParam r:type="495c9644-eed1-4b94-933b-3fae702a9aca"> | </getProjectsResult> |
| <n2:value>16</n2:value> | </code> |
| </execParam> | |
| </actionDefItem> | |
| <actionDefItem propName="ZAP" dpId="34306c80-73f1-4465-ab51-2b2c1e85ab70"> | |
| </actionDefItem> | |
| </actions> | |
| </actionDefs> | |
| </executeActionsRequest></code> | |
| |
| **Response** | ==== api/get/projectByParts ==== |
| | To get the visual tree and list of datapoints. |
| |
| <code xml><?xml version="1.0" encoding="utf-8"?> | **Request:** |
| <executeActionsResponse xmlns:r="http://dev.rcware.eu/serialization/references" code="Ok" message="OK" xmlns="http://dev.rcware.eu/scada/error-reporting" /></code> | * **URL:** ''/api/get/projectByParts?format=xml'' |
| | * **Method:** POST |
| |
| | <code javascript> |
| | { |
| | "cred": { |
| | "n": "demo", |
| | "p": "demo" |
| | }, |
| | "projId": "5abf8ca0-94ba-48df-8d3c-7ebe87a12fd0", |
| | "treeId": "Visual tree", |
| | "partType": 0, |
| | "offset": 0, |
| | "count": 250 |
| | } |
| | </code> |
| |
| ===== Matlab Client ===== | ===== Matlab Client ===== |
| ==== General notes client function parameters ==== | |
| * parameter names ID and Guid are used interchangeably in the Matlab client, it is always a universally unique identifier referring to project or a particular datapoint | |
| * when plural is used, array of guids is expected (ie. {'guid1', 'guid2'}), otherwise just one guid is expected (ie. 'guid1') | |
| |
| ==== Data download example ==== | ==== General Notes ==== |
| | * Parameter names **ID** and **Guid** are used interchangeably in the Matlab client; it is always a universally unique identifier referring to a project or datapoint. |
| | * When plural is used, an array of guids is expected (ie. ''{'guid1', 'guid2'}'' ), otherwise just one guid is expected. |
| |
| <code matlab>scada = ScadaClient('https://scada.mervis.info/','demo','demo'); | ==== ScadaClient ==== |
| | <code matlab>ScadaClient(url, username, password)</code> |
| | Constructor of the Mervis API wrapper. |
| | |
| | ==== findAllDPsWithReqTags ==== |
| | <code matlab>findAllDPsWithReqTags(projIds, tags)</code> |
| | Returns list of datapoints based on tags query. Example of tags definition: ''{'label','indoor_air_temperature';'room_type','office'}'' |
| | |
| | ==== getDpTags ==== |
| | <code matlab>getDpTags(projectId, DpId)</code> |
| | Returns tags of the particular datapoint. |
| | |
| | ==== getAllProjectDPs ==== |
| | <code matlab>getAllProjectDPs(projectGuid)</code> |
| | Returns project IDs and names that are accessible to the logged-in user. |
| | |
| | ==== getData ==== |
| | <code matlab>[data, time, dataInCell, info] = getData(projID, dpsIds, from, to, span, zone, doublesInterpolationMethod, interpolate_gaps_shorter_than)</code> |
| | Downloads data. |
| | * **span:** sampling interval in seconds, default is 300 sec. |
| | * **zone:** time zone ('local' or 'utc') applied to parameters and output, default is 'local'. |
| | * **Returns:** ''data'' (NaN used for missing values), ''time'', ''dataInCell'' (useful for strings), and ''info''. |
| | |
| | **Data Download Example:** |
| | <code matlab> |
| | scada = ScadaClient('https://scada.mervis.info/','demo','demo'); |
| |
| dataPointIDs = {'acad79f3-3358-42dd-9b74-98733e63d771','1afa7d9b-1183-4ab1-a6b1-18e464ae2d4d','e496bb8c-14ce-4c2c-b53b-3b71daeabca6'}; | dataPointIDs = {'acad79f3-3358-42dd-9b74-98733e63d771','1afa7d9b-1183-4ab1-a6b1-18e464ae2d4d','e496bb8c-14ce-4c2c-b53b-3b71daeabca6'}; |
| projectId = '5abf8ca0-94ba-48df-8d3c-7ebe87a12fd0'; | projectId = '5abf8ca0-94ba-48df-8d3c-7ebe87a12fd0'; |
| chartLegend = {'/Plynová kotelna/ÚT1 - SEVER/TEPLOTA UT1','/Plynová kotelna/ÚT1 - SEVER/TEPLOTA UT1 zpátečka','/Plynová kotelna/ÚT1 - SEVER/Poloha ventilu'}; | chartLegend = {'Temp UT1','Temp UT1 Return','Valve Position'}; |
| from = now - 4; | from = now - 4; |
| to = now; | to = now; |
| plot(time,data); | plot(time,data); |
| legend(chartLegend); | legend(chartLegend); |
| datetick;</code> | datetick; |
| | </code> |
| | |
| ==== ScadaClient ==== | |
| | |
| <code matlab>ScadaClient(url, username, password)</code> | |
| | |
| Constructor of Mervis API wrapper. | |
| |
| ==== findAllDPsWithReqTags ==== | ==== saveData ==== |
| | |
| <code matlab>findAllDPsWithReqTags(projIds, tags)</code> | |
| | |
| Returns list of datapoints based on tags query. Example of tags definition: {'label','indoor_air_temperature';'room_type','office'} | |
| | |
| ==== saveData==== | |
| <code matlab>saveData(projID, dpID, time, data)</code> | <code matlab>saveData(projID, dpID, time, data)</code> |
| Saves data into the Mervis database. | Saves data into the Mervis database. |
| |
| ==== deleteVariable ==== | |
| <code matlab>deleteVariable(projGuid, dpGuid, from, to)</code> | |
| Deletes data of one variable based on from - to interval. If from - to is not defined, all data are deleted. Use carefully, there is no undo! | |
| |
| ==== setDataPointValue ==== | ==== setDataPointValue ==== |
| <code matlab>setDataPointValue(projGuid, dpGuid, value, buttonName)</code> | <code matlab>setDataPointValue(projGuid, dpGuid, value, buttonName)</code> |
| Sets data point value using a button (primary the INIT button). Only numerical values are supported. Parameter buttonName is not mandatory. Value 'INIT' is used if buttonName is not defined. | Sets a datapoint value using a button. Only numerical values are supported. Parameter ''buttonName'' is not mandatory; 'INIT' is used if undefined. |
| | |
| {{ :en:mervis-scada:init.png?direct&800 |}} | |
| |
| **Example:** | **Example:** |
| dpGuid = 'ccaacb77-295b-48a8-a712-3fb272aa9b6f'; | dpGuid = 'ccaacb77-295b-48a8-a712-3fb272aa9b6f'; |
| projectId = '6b65447e-8622-4a0d-b3b9-42f1d905fdaa'; | projectId = '6b65447e-8622-4a0d-b3b9-42f1d905fdaa'; |
| buttonName = 'INIT' %see action ("button") name in Mervis SCADA GUI | buttonName = 'INIT'; |
| newValue = 1; | newValue = 1; |
| |
| scada = ScadaClient('https://scada.mervis.info/','username','password'); | scada = ScadaClient('https://scada.mervis.info/','demo','demo'); |
| scada.setDataPointValue(projectId, dpGuid, newValue, buttonName) | scada.setDataPointValue(projectId, dpGuid, newValue, buttonName) |
| |
| </code> | </code> |
| ==== getData==== | |
| <code matlab>[data, time, dataInCell, info] = getData(projID,dpsIds,from,to,span,zone,doublesInterpolationMethod, interpolate_gaps_shorter_than)</code> | |
| Downloads data. Span is a sampling interval in seconds, default is 300 sec. Zone is time zone 'local' or 'utc' is applied to from/to parameters as well as to output time, default is 'local'. DoubleInterpolationMethod is same as e.g. interp1, applied to double values only the other types use method 'previous'. Interpolate_gaps_shorter_than - interpolates missing values periodes that are not shorer than this parameter (in seconds). Return parameters: data - downloaded data resampled, NaN is used for missing values; time - datenum time axis according to selected zone; dataInCell - usefull for strings; info - summary info about the request. | |
| |
| ==== getDpTags==== | ==== deleteVariable ==== |
| <code matlab>getDpTags(projectId, DpId) </code> | <code matlab>deleteVariable(projGuid, dpGuid, from, to)</code> |
| Returns tags of the particular datapoint. | **Warning:** Deletes data of one variable based on from-to interval. If from-to is not defined, ALL data are deleted. Use carefully, there is no undo! |
| | |
| | |
| ==== getAllProjectDPs==== | |
| <code matlab>getAllProjectDPs(projectGuid)</code> | |
| Returns project IDs and names that are accessible to logged user. | |