Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
Next revision Both sides next revision
en:mervis-scada:50-api [2018/11/21 15:54]
j.siroky [Matlab]
en:mervis-scada:50-api [2023/09/26 14:41]
v.kohout [api/get/history/specific]
Line 3: Line 3:
 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 open REST-like API based on JSON and XML data formats. For full description please contact our [[:en:help:support|technical support]].
  
 +**Important:** Only officially supported response format is XML!
 ===== List of basic API methods ===== ===== List of basic API methods =====
  
 ^Function^Description| ^Function^Description|
- 
 ^api/checkCredentials|| ^api/checkCredentials||
 ^api/logout|| ^api/logout||
Line 15: Line 15:
 ^api/get/history/specific|| ^api/get/history/specific||
 ^api/set/history|| ^api/set/history||
 +^api/replace/history||
 ^api/get/values|| ^api/get/values||
 ^api/get/alarms|| ^api/get/alarms||
Line 32: Line 33:
  
  
-===== Example =====+===== Examples =====
  
-====api/get/history====+====api/checkCredentials==== 
 + 
 +**Request** 
 + 
 +   * URL: /api/checkCredentials?format=xml 
 +   * Method: POST 
 + 
 +<code javascript> 
 +{"cred":{"n":"demo","p":"demo"}} 
 +</code> 
 + 
 +**Response** 
 + 
 +<code xml> 
 +<?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" /> 
 +</code> 
 + 
 +  * You **should** use the received token **t** in subsequent API calls. 
 + 
 + 
 + 
 +==== api/v3/get/history ==== 
 + 
 +**Request** 
 + 
 +   * URL: /api/v3/get/history?format=json 
 +   * Method: POST 
 +   * Downloading of one or multiple trends with single API call 
 +   * You should always use "token" instead of simple "name" a "password". Non-token call is slower. 
 +   * "seriesParameters" [optional] - use only if you request different parameters than "commonSeriesParameters" 
 +   * "clientReference" [optional] - use for your own identification of the series 
 +   * Items: "segmenation", "requestState" and "serverState" should always copy the values from the last server response. First call should use empty "segmentation"
 + 
 + 
 +<code javascript> 
 +
 +    "credentials":
 +        "token":"guid" //string 
 +    }, 
 +    "request":
 +        "commonSeriesParameters":
 +            "from": "2018-12-01T00:00:00Z", //UTC dateTime 
 +            "to": "2018-12-01T10:00:00Z"//UTC dateTime 
 +        }, 
 +        "series":
 +            { 
 +                "seriesParameters":
 +                    "from": "2017-11-28T14:26:16.5029619Z",//UTC dateTime 
 +                    "to": "2018-11-28T14:26:16.5029619Z" //UTC dateTime 
 +                }, 
 +                "clientReference": "myId2a", //string 
 +                "provider":
 +                    "parameters":
 +                        "projectId": "5abf8ca0-94ba-48df-8d3c-7ebe87a12fd0", //guid 
 +                        "dataPointId": "2a9c26c9-2ce3-49c4-909d-9ac1143121f1" //guid 
 +                    } 
 +                } 
 +            }, 
 +            { 
 +                "clientReference": "myId1a", 
 +                "provider":
 +                    "parameters":
 +                        "projectId": "5abf8ca0-94ba-48df-8d3c-7ebe87a12fd0", 
 +                        "dataPointId": "62cf4083-31ed-4bc1-be25-044ba837a9f0" 
 +                    } 
 +                } 
 +            } 
 +        ] 
 +    }, 
 +    "dataSpecification":
 +        "limits":
 +            "count": 1000 //int 
 +        } 
 +    }, 
 +    "segmentation":
 +        "requestState": ";;2;;0", //string 
 +        "serverState": "xyz" //string 
 +    } 
 +
 +</code> 
 + 
 +**Response** 
 + 
 +   * Empty "segmentation" ("requestState") marks response containing last data of the requested series 
 +   * "requestState" and "serverState" must be copied to the next API call 
 +   * Values 
 +     * v - value 
 +     * ts - timestamp - start of the value validity period 
 +     * gt - goodthrough - end of the value validity period 
 +     * i - interval, only present if it differs from the interval in Meta section 
 +   * Meta 
 +     * type - value type - double, string, datetime 
 +     * unit - unit 
 +     * interval - expected interval between the stored records. Useful to identify missing data. 
 + 
 +<code javascript> 
 +
 +"result":
 +        "code": 0, //int 
 +        "subCode": 0, //int 
 +        "message": "" //string 
 +    }, 
 +    "data":
 +        "count": 3, //int 
 +        "historyData":
 +            { 
 +                "clientReference": "myId2a", //string 
 +                "provider":
 +                    "id": "689e32fa-24a2-448e-9374-6158e6e6cb15", //guid 
 +                    "parameters":
 +                        "projectId": "5abf8ca0-94ba-48df-8d3c-7ebe87a12fd0", //guid 
 +                        "dataPointId": "2a9c26c9-2ce3-49c4-909d-9ac1143121f1" //guid 
 +                    } 
 +                }, 
 +                "meta":
 +                    "type": "string", //string 
 +                    "unit": "", //string 
 +                    "interval": "PT3M" //string - ISO8601 Timespan 
 +                }, 
 +                "values":
 +                    { 
 +                        "v": "AUT", //string 
 +                        "ts": "2018-11-26T12:22:15.25795Z", //dateTime 
 +                        "gt": "2018-11-26T13:22:15.5784067Z" //dateTime 
 +                    } 
 +                ] 
 +            }, 
 +            { 
 +                "clientReference": "myId1a", 
 +                "provider":
 +                    "parameters":
 +                        "projectId": "5abf8ca0-94ba-48df-8d3c-7ebe87a12fd0", 
 +                        "dataPointId": "62cf4083-31ed-4bc1-be25-044ba837a9f0" 
 +                    } 
 +                }, 
 +                "meta":
 +                    "type": "double", 
 +                    "unit": "hod", 
 +                    "interval": "PT3M" 
 +                }, 
 +                "values":
 +                    { 
 +                        "v": 12939,//double 
 +                        "ts": "2018-11-30T23:58:15.2394603Z", 
 +                        "gt": "2018-12-01T01:37:15.4869553Z" 
 +                    }, 
 +                    { 
 +                        "v": 12946, 
 +                        "ts": "2018-12-01T09:22:16.2049051Z", 
 +                        "gt": "2018-12-01T10:37:15.4023519Z", 
 +                        "i": "PT4M" 
 +                    } 
 +                ] 
 +            } 
 +        ] 
 +    }, 
 +    "segmentation":
 +        "requestState": "xyz", //string 
 +        "serverState": "xyz" //string 
 +    } 
 +
 + 
 + 
 +</code> 
 + 
 +**Demo** 
 +<code javascript> 
 +
 +    "credentials":
 +        "name": "demo", 
 +        "password": "demo" 
 +    }, 
 +    "request":
 +        "commonSeriesParameters":
 +            "from": "2018-12-01T00:00:00Z", 
 +            "to": "2018-12-01T00:11:00Z" 
 +        }, 
 +        "series":
 +            { 
 +                "clientReference": "myId1", 
 +                "provider":
 +                    "parameters":
 +                        "projectId": "5abf8ca0-94ba-48df-8d3c-7ebe87a12fd0", 
 +                        "dataPointId": "acad79f3-3358-42dd-9b74-98733e63d771" 
 +                    } 
 +                } 
 +            }, 
 +            { 
 +                "clientReference": "myId2", 
 +                "provider":
 +                    "parameters":
 +                        "projectId": "5abf8ca0-94ba-48df-8d3c-7ebe87a12fd0", 
 +                        "dataPointId": "14cf0dbb-b050-43aa-a6f0-22886c33ed8e" 
 +                    } 
 +                } 
 +            } 
 +        ] 
 +    }, 
 +    "dataSpecification":
 +        "limits":
 +            "count": 1000 
 +        } 
 +    } 
 +
 + 
 +</code> 
 + 
 +==== api/get/history/specific ==== 
 + 
 +**Request** 
 + 
 +   * URL: /api/get/history/specific?format=json 
 +   * Method: POST 
 +   * You should always use token ("t") instead of simple name and password ("n" and "p"). Non-token call is slower. 
 +   * "dataSpec" - data specification 
 +      MinTimestamp = 0, 
 +      MaxTimestamp = 1, 
 +      FirstLessThanReferenceDateTime = 2, 
 +      FirstLessThanOrEqualThanReferenceTime = 3, 
 +      FirstGreaterThanReferenceDateTime = 4, 
 +      FirstGreaterThanOrEqualThanReferenceTime = 5, 
 +      MaxGoodThroughTime = 6  
 +   * "refTime" [optional] - reference time for dataSpec values 2 to 5 
 + 
 + 
 +<code javascript> 
 +
 + "cred": 
 + { 
 +  "n":"test", 
 +  "p":"test" 
 + }, 
 +  "projId":"b4d96a6d-2b3d-48eb-af30-d11e875ba7ed", 
 +  "offset":0, 
 +  "count":1000, 
 +  "dataSpec":2,  
 +  "refTime":"\/Date(123)\/", 
 +  "dpIds":["58426e69-46ba-4925-9a5c-d7d65efb9886","f4501a2e-62ed-430e-9346-5e155e730fe3","28e7d087-917a-456a-9d02-96882f572286"
 +
 +</code> 
 + 
 +**Response** 
 + 
 +   * Values 
 +     * v - value 
 +     * ts - timestamp - start of the value validity period 
 +     * gt - goodthrough - end of the value validity period 
 +     * i - interval 
 + 
 +<code javascript> 
 +
 +    "ns":
 +        "r": "http://dev.rcware.eu/serialization/references", 
 +        "n1": "http://dev.rcware.eu/scada/history", 
 +        "n2": "http://dev.rcware.eu/scada/datapoints", 
 +        "n3": "http://dev.rcware.eu/scada/basic-props" 
 +    }, 
 +    "doc":
 +        "n1:getHistorySpecificResult":
 +            "n2:pl":
 +                { 
 +                    "n2:p":
 +                        "n1:hist":
 +                            "@":
 +                                "n1:projId": "b4d96a6d-2b3d-48eb-af30-d11e875ba7ed", 
 +                                "n1:dpId": "58426e69-46ba-4925-9a5c-d7d65efb9886", 
 +                                "n1:propName": "Output", 
 +                                "n1:interval": "00:00:00", 
 +                                "n1:historyState": "", 
 +                                "n1:nextValOfs":
 +                            }, 
 +                            "n1:errMsg": "", 
 +                            "n1:vals":
 +                                { 
 +                                    "n1:hv":
 +                                        "@":
 +                                            "n1:ts": "2023-08-23T11:00:57.7010708Z", 
 +                                            "n1:i": "1.00:00:00" 
 +                                        }, 
 +                                        "n3:v": 12.48 
 +                                    } 
 +                                } 
 +                            ] 
 +                        }, 
 +                        "@":
 +                            "r:type": "b133774d-21ce-42b6-add3-57c012079c55" 
 +                        } 
 +                    } 
 +                }, 
 +                { 
 +                    "n2:p":
 +                        "n1:hist":
 +                            "@":
 +                                "n1:projId": "b4d96a6d-2b3d-48eb-af30-d11e875ba7ed", 
 +                                "n1:dpId": "f4501a2e-62ed-430e-9346-5e155e730fe3", 
 +                                "n1:propName": "Output", 
 +                                "n1:interval": "00:00:00", 
 +                                "n1:historyState": "", 
 +                                "n1:nextValOfs":
 +                            }, 
 +                            "n1:errMsg": "", 
 +                            "n1:vals":
 +                                { 
 +                                    "n1:hv":
 +                                        "@":
 +                                            "n1:ts": "2023-08-23T10:38:43.784Z", 
 +                                            "n1:gt": "2023-08-23T11:18:00.207Z", 
 +                                            "n1:i": "00:00:30" 
 +                                        }, 
 +                                        "n3:v": 5.0 
 +                                    } 
 +                                } 
 +                            ] 
 +                        }, 
 +                        "@":
 +                            "r:type": "b133774d-21ce-42b6-add3-57c012079c55" 
 +                        } 
 +                    } 
 +                }, 
 +                { 
 +                    "n2:p":
 +                        "n1:hist":
 +                            "@":
 +                                "n1:projId": "b4d96a6d-2b3d-48eb-af30-d11e875ba7ed", 
 +                                "n1:dpId": "28e7d087-917a-456a-9d02-96882f572286", 
 +                                "n1:propName": "Output", 
 +                                "n1:interval": "00:00:00", 
 +                                "n1:historyState": "", 
 +                                "n1:nextValOfs":
 +                            }, 
 +                            "n1:errMsg": "", 
 +                            "n1:vals":
 +                                { 
 +                                    "n1:hv":
 +                                        "@":
 +                                            "n1:ts": "2023-08-23T10:38:43.786Z", 
 +                                            "n1:gt": "2023-08-23T11:18:00.207Z", 
 +                                            "n1:i": "00:00:30" 
 +                                        }, 
 +                                        "n3:v": "ZAP" 
 +                                    } 
 +                                } 
 +                            ] 
 +                        }, 
 +                        "@":
 +                            "r:type": "177e726a-3180-4152-bef2-6254e7055e1f" 
 +                        } 
 +                    } 
 +                } 
 +            ], 
 +            "@":
 +                "r:type": "1c4c1ddc-463f-443d-883a-19489cd2e53a" 
 +            } 
 +        } 
 +    } 
 +
 + 
 +</code> 
 + 
 +==== [Depricated] api/get/history====
  
 **Request** **Request**
Line 117: Line 478:
 </code> </code>
  
-==== Matlab ==== + 
-^ Function                                                                                                                                  ^ Description                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              ^ +====api/set/history==== 
-| ScadaClient(url, username, password)                                                                                                      Constructor                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              | + 
-findAllDPsWithReqTags(projIds, tags)                                                                                                      Returns list of datapoints based on tags query. Example of tags definition: {'label','indoor_air_temperature';'room_type','office'                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     | +**Request** 
-saveData(projID, dpID, time, data)                                                                                                        Saves data into the Mervis database.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     | + 
-deleteVariable(projGuid, dpGuid, from, to)                                                                                                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!                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            | +   * URL: /api/set/history?format=xml 
-| [data, time, dataInCell, info] = getData(this,projID,dpsIds,from,to,span,zone,doublesInterpolationMethod, interpolate_gaps_shorter_than)  | Surprisingly, it 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(projectId, DpId)                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         | Returns tags of the particular datapoint. +   * Method: POST 
-|+   * Content-Type: text/xml 
 + 
 +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 a database. 
 + 
 +Even though there could be used name and password in **cred** - you should always use **token** to get the best performance. 
 + 
 +All date and time values are supposed to be in UTC. 
 + 
 +<code xml> 
 +<?xml version="1.0" encoding="UTF-8"?> 
 +<setHistoryRequest 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"> 
 +  <n2:cred t="xxxxx"/><!-- token should be used here --> 
 +  <vals> 
 +    <hv ts="2020-03-15T11:00:00+00:00" i="P1D"> 
 +      <n1:v>2.7</n1:v> 
 +    </hv> 
 +    <hv ts="2020-03-16T11:00:00+00:00" i="P1D"> 
 +      <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> 
 +  </vals> 
 +</setHistoryRequest></code> 
 + 
 +**Response** 
 + 
 +   * 200 OK 
 + 
 +====api/replace/history==== 
 + 
 +**Request** 
 + 
 +   * URL: /api/replace/history?format=xml 
 +   * Method: POST 
 +   * Content-Type: text/xml 
 + 
 +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 a database. 
 + 
 +Even though there could be used name and password in **cred** - you should always use **token** to get the best performance. 
 + 
 +All date and time values are supposed to be in UTC. 
 + 
 +<code xml> 
 +<?xml version="1.0" encoding="UTF-8"?> 
 +<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"> 
 +  <n2:cred t="xxxxx"/><!-- token should be used here --> 
 +  <vals> 
 +    <hv ts="2020-03-15T11:00:00+00:00" i="P1D"> 
 +      <n1:v>2.7</n1:v> 
 +    </hv> 
 +    <hv ts="2020-03-16T11:00:00+00:00" i="P1D"> 
 +      <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> 
 +  </vals> 
 +</replaceHistoryRequest></code> 
 + 
 +**Response** 
 + 
 +   * 200 OK 
 + 
 +====api/set/executeActions==== 
 + 
 +**Request** 
 + 
 +   * URL: /api/set/executeActions?format=xml 
 +   * Method: POST 
 +   * Content-Type: text/xml 
 + 
 +<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 t="xxxxxx"/> 
 +  <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> 
 + 
 +**Response** 
 + 
 +<code xml><?xml version="1.0" encoding="utf-8"?> 
 +<executeActionsResponse xmlns:r="http://dev.rcware.eu/serialization/references" code="Ok" message="OK" xmlns="http://dev.rcware.eu/scada/error-reporting" /></code> 
 + 
 +====api/get/values==== 
 + 
 +The right way how to retrieve current values of data points (property "Output" which is usually what you want) from one or multiple projects. 
 + 
 +**Request** 
 + 
 +   * URL: /api/get/values?format=xml 
 +   * Method: POST 
 + 
 +<code javascript> 
 +
 + "cred":
 +  "t": "xxxxxx" //token 
 + }, 
 + "propNamesToSerialize": ["Output"], 
 + "offset": 0, 
 + "count": 1000, 
 + "serverState": null, 
 + "dps": [{ 
 +   "projId": "ba1a92f7-f213-4a72-90e4-f7142b50274b", 
 +   "dpIds": ["e089dde2-a097-4e0d-8012-c8cf3dc62694", "1089dde2-a097-4e0d-8012-c8cf3dc62696"
 +  } 
 + ] 
 +
 + 
 +</code> 
 + 
 +**Response** 
 + 
 +<code xml><?xml version="1.0" encoding="utf-8"?> 
 +<values xmlns:r="http://dev.rcware.eu/serialization/references" nextOffset="-1" serverTime="2020-04-07T07:46:34.850422Z" xmlns:n1="http://dev.rcware.eu/scada/basic-props" xmlns="http://dev.rcware.eu/scada/datapoints"> 
 + <vals> 
 +  <v projId="ba1a92f7-f213-4a72-90e4-f7142b50274b" dataVersion="637217783110000000" serverTime="2020-04-07T07:46:34.850422Z"> 
 +   <dps> 
 +    <d id="e089dde2-a097-4e0d-8012-c8cf3dc62694" serAlr="true"> 
 +     <props> 
 +      <p n="Output" t="2020-04-07T07:43:42.1000676Z" q="Bad" r:type="177e726a-3180-4152-bef2-6254e7055e1f"> 
 +       <n1:v>ON</n1:v> 
 +      </p> 
 +     </props> 
 +    </d> 
 +    <d id="1089dde2-a097-4e0d-8012-c8cf3dc62696" serAlr="true"> 
 +     <props> 
 +      <p n="Output" t="2020-04-07T07:45:00.2408399Z" q="Good" r:type="b133774d-21ce-42b6-add3-57c012079c55"> 
 +       <n1:v>0</n1:v> 
 +      </p> 
 +     </props> 
 +    </d> 
 +   </dps> 
 +  </v> 
 + </vals> 
 +</values></code> 
 + 
 +====api/get/projectByParts==== 
 + 
 +To get the list of datapoints. 
 + 
 +**Request** 
 + 
 +   * URL: /api/get/projectByParts?format=xml 
 +   * Method: POST 
 + 
 +<code javascript> 
 +
 + "cred":
 +  "t": "xxxxxx" 
 + }, 
 + "projId": "5abf8ca0-94ba-48df-8d3c-7ebe87a12fd0", 
 + "treeId": "Visual tree", 
 + "partType": 0, 
 + "offset": 0, 
 + "count": 250 
 +
 +</code> 
 + 
 +**Response** 
 + 
 +<code xml><?xml version="1.0" encoding="utf-8"?> 
 +<getProjectByPartsResult xmlns:r="http://dev.rcware.eu/serialization/references" projId="5abf8ca0-94ba-48df-8d3c-7ebe87a12fd0" dataVersion="637305748282414171" totalCount="79" nextOffset="-1" xmlns:n1="http://dev.rcware.eu/scada/comm-props" xmlns:n2="http://dev.rcware.eu/rt2com" xmlns:n3="http://dev.rcware.eu/scada/basic-props" xmlns:n4="http://dev.rcware.eu/scada/legacy-props" xmlns="http://dev.rcware.eu/scada/datapoints"> 
 + <dps> 
 +  <dp id="393df7b4-bb8d-4e8f-92a7-bf785508894a" n="Provozni podminky OK" canAct="true" canAlr="true"> 
 +   <v> 
 +    <props> 
 +     <p n="Source" t="2020-10-05T07:17:11.601879Z" q="Good" n1:dateTimeKind="UTC" r:type="1c104bdf-ffcb-4c90-b491-e4781a91ef09"> 
 +      <n1:r n2:rp="PT0S" r:type="7b047602-40da-4095-9093-062ba30fd15e"> 
 +       <n2:a id="3b1e3b8b-2186-4dcf-b157-8032c768d1e1" n="SW.Provozni podminky OK"/> 
 +      </n1:r> 
 +      <n1:w r:type="5ddc9dbf-a6bd-458b-a6ab-f661db0e3a64"> 
 +       <n2:a id="3b1e3b8b-2186-4dcf-b157-8032c768d1e1" n="SW.Provozni podminky OK"/> 
 +      </n1:w> 
 +      <n1:v>1</n1:v> 
 +     </p> 
 +     <p n="Output" t="2020-10-05T07:16:58.751431Z" q="Good" r:type="177e726a-3180-4152-bef2-6254e7055e1f"> 
 +      <n3:v>OK</n3:v> 
 +     </p> 
 +     <p n="StdVis_V1" t="2015-06-03T13:17:13.5190205Z" q="Good" r:type="b0db7bd7-0375-4830-90f2-6d918bac41ee"> 
 +      <n3:v> 
 +       <n3:props> 
 +        <n3:p> 
 +         <n3:pn>Output</n3:pn> 
 +         <n3:props> 
 +          <n3:p r:type="256a44f6-32e4-4a75-b7c2-08eed38f151d"> 
 +           <n3:ordMap> 
 +            <n3:grOrd> 
 +             <n3:t>OK</n3:t> 
 +             <n3:o>0</n3:o> 
 +            </n3:grOrd> 
 +            <n3:grOrd> 
 +             <n3:t>ALARM</n3:t> 
 +             <n3:o>1</n3:o> 
 +            </n3:grOrd> 
 +           </n3:ordMap> 
 +          </n3:p> 
 +         </n3:props> 
 +        </n3:p> 
 +       </n3:props> 
 +      </n3:v> 
 +     </p> 
 +    </props> 
 +   </v> 
 +   <core r:type="2f04d90c-ee95-4cb6-b945-146e33021945"/> 
 +  </dp> 
 +  <dp id="3e5c0b88-45fd-4e3f-b1b2-1a365327ec90" n="Zaplavení" canAct="true" canAlr="true"> 
 +   <v> 
 +    <props> 
 +     <p n="Source" t="2020-08-17T10:21:46.470472Z" q="Good" n1:dateTimeKind="UTC" r:type="1c104bdf-ffcb-4c90-b491-e4781a91ef09"> 
 +      <n1:r n2:rp="PT0S" r:type="7b047602-40da-4095-9093-062ba30fd15e"> 
 +       <n2:a id="45c31fe4-00b0-4498-b9f6-adfe6a2fe34b" n="SW.Zaplavení mem"/> 
 +      </n1:r> 
 +      <n1:w r:type="5ddc9dbf-a6bd-458b-a6ab-f661db0e3a64"> 
 +       <n2:a id="45c31fe4-00b0-4498-b9f6-adfe6a2fe34b" n="SW.Zaplavení mem"/> 
 +      </n1:w> 
 +      <n1:v>0</n1:v> 
 +     </p> 
 +     <p n="Output" t="2020-08-17T10:21:46.470472Z" q="Good" r:type="177e726a-3180-4152-bef2-6254e7055e1f"> 
 +      <n3:v>OK</n3:v> 
 +     </p> 
 +     <p n="StdVis_V1" t="2015-06-03T13:17:13.5190205Z" q="Good" r:type="b0db7bd7-0375-4830-90f2-6d918bac41ee"> 
 +      <n3:v> 
 +       <n3:props> 
 +        <n3:p> 
 +         <n3:pn>Output</n3:pn> 
 +         <n3:props> 
 +          <n3:p r:type="256a44f6-32e4-4a75-b7c2-08eed38f151d"> 
 +           <n3:ordMap> 
 +            <n3:grOrd> 
 +             <n3:t>OK</n3:t> 
 +             <n3:o>0</n3:o> 
 +            </n3:grOrd> 
 +            <n3:grOrd> 
 +             <n3:t>ALARM</n3:t> 
 +             <n3:o>1</n3:o> 
 +            </n3:grOrd> 
 +           </n3:ordMap> 
 +          </n3:p> 
 +         </n3:props> 
 +        </n3:p> 
 +       </n3:props> 
 +      </n3:v> 
 +     </p> 
 +    </props> 
 +   </v> 
 +   <core r:type="2f04d90c-ee95-4cb6-b945-146e33021945"/> 
 +   <alr> 
 +    <def enabled="true" delay="PT1M"/> 
 +    <galrs/> 
 +    <status user="SYSTEM" incidentId="88ba7198-de57-4854-8130-60c240a09522" lastChangeTime="2020-08-11T12:37:04.8002341Z"/> 
 +   </alr> 
 +  </dp> 
 + </dps> 
 +</getProjectByPartsResult></code> 
 +===== 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 ==== 
 + 
 +<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'};  
 +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'};  
 +from = now - 4;  
 +to = now;  
 +timeSpan = 300; %sec  
 + 
 +[data, time] = scada.getData(projectId, dataPointIDs, from, to, timeSpan);  
 + 
 +plot(time,data);   
 +legend(chartLegend);  
 +datetick;</code> 
 + 
 + 
 +==== ScadaClient ==== 
 + 
 +<code matlab>ScadaClient(url, username, password)</code> 
 + 
 +Constructor of 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'   
 + 
 +==== saveData==== 
 +<code matlab>saveData(projID, dpID, time, data)</code> 
 +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 ==== 
 +<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. 
 + 
 +{{ :en:mervis-scada:init.png?direct&800 |}} 
 + 
 +**Example:** 
 +<code matlab> 
 +dpGuid = 'ccaacb77-295b-48a8-a712-3fb272aa9b6f';  
 +projectId = '6b65447e-8622-4a0d-b3b9-42f1d905fdaa';  
 +buttonName = 'INIT' %see action ("button") name in Mervis SCADA GUI 
 +newValue = 1; 
 + 
 +scada = ScadaClient('https://scada.mervis.info/','username','password');  
 +scada.setDataPointValue(projectId, dpGuid, newValue, buttonName) 
 + 
 +</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==== 
 +<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 logged user.
  • © Energocentrum Plus, s.r.o. 2017 - 2024