{"data":{"cred":{"n":"demo","p":"demo","pe":0}}}
**Response XML**
**Response JSON**
{
"data": {
"ChangePwdBefore": null,
"ClientType": 2,
"Domain": "3c73477a-6c95-4939-b047-7bbf902bcef1",
"DomainName": "GlobalDomain",
"FullName": "GlobalDomain\\demo",
"Login": "demo",
"NotifyNearingPwdExpirationIn": null,
"Token": "3:ae378e2d-c7ec-4046-aad1-12310f8f72cc",
"TokenValidFor": "P1D",
"User": "48141739-5d16-4ca3-8ae1-33e27d9eb22e",
"Username": ""
},
"result": {
"code": 0,
"codeTxt": null,
"dataType": null,
"desc": null
}
}
* Získaný token **t** je třeba použít místo dvojice jméno/heslo v následujících API voláních.
==== [Deprecated] api/checkCredentials ====
**Request**
* URL: https://scada.mervis.info/api/checkCredentials?format=xml
* Method: POST
{"cred":{"n":"demo","p":"demo"}}
**Response**
* Získaný token **t** je třeba použít místo dvojice jméno/heslo v následujících API voláních.
==== api/get/projects ====
**Request**
* URL: https://scada.mervis.info/api/get/projects?format=xml
* Method: POST
Formát reponse je xml a nebo json podle volané url.
{"cred": {"t": "2:85be00d3-5875-4dec-a9b4-c98e2ff2acbe" }}
**Response XML**
**Response JSON**
{
"ns": {
"r": "http://dev.rcware.eu/serialization/references",
"n1": "http://dev.rcware.eu/scada/projects",
"n2": "http://dev.rcware.eu/scada/schemas",
"n3": "http://dev.rcware.eu/scada/notifications",
"n4": "http://dev.rcware.eu/projectMetadata",
"n5": "http://dev.rcware.eu/loc",
"n6": "http://dev.rcware.eu/groups"
},
"doc": {
"n1:getProjectsResult": {
"n1:projects": [
{
"n1:project": {
"@": {
"n1:id": "2a7f1615-42f2-44ef-a643-f1438ed44e2a",
"n1:name": "Weather",
"n1:domain": "GlobalDomain",
"n1:tz": "Europe/Prague",
"r:def": "2"
},
"n1:mdi": [
{
"n1:mi": {
"@": {
"n2:totalAllowedSchemasCount": 0,
"n2:totalSchemasCount": 0,
"r:type": "aa8818ce-d47d-41ff-9be5-3de9f34d7ebf"
}
}
},
{
"n1:mi": {
"@": {
"n3:moduleInstantiated": true,
"r:type": "073d1b6c-24f5-435a-a5bd-1d54e04b0d06"
}
}
}
]
}
},
{
"n1:project": {
"@": {
"n1:id": "1b2623be-eaa4-4e29-8596-c66dd85d5643",
"n1:name": "SIMPLE_DEMO",
"n1:domain": "GlobalDomain",
"n1:tz": "Europe/Prague",
"r:def": "3"
},
"n1:metadata": [
{
"n1:metadata": {
"@": {
"n4:k": "oplog.config",
"n4:v": "..."
}
}
},
{
"n1:metadata": {
"@": {
"n4:k": "oplog.enabled",
"n4:v": "true"
}
}
},
{
"n1:metadata": {
"@": {
"n4:k": "oplog.engine",
"n4:v": "podio"
}
}
}
],
"n1:mdi": [
{
"n1:mi": {
"@": {
"n3:moduleInstantiated": true,
"r:type": "073d1b6c-24f5-435a-a5bd-1d54e04b0d06",
"r:def": "1"
}
}
},
{
"n1:mi": {
"@": {
"n2:totalAllowedSchemasCount": 0,
"n2:totalSchemasCount": 0,
"r:type": "aa8818ce-d47d-41ff-9be5-3de9f34d7ebf"
}
}
}
]
}
},
{
"n1:project": {
"@": {
"n1:id": "5abf8ca0-94ba-48df-8d3c-7ebe87a12fd0",
"n1:name": "PLYNOVA_KOTELNA",
"n1:domain": "GlobalDomain",
"n1:tz": "Europe/Prague",
"r:def": "4"
},
"n1:loc": {
"n5:gps": {
"@": {
"n5:lat": 50.091056,
"n5:lon": 14.401667
}
}
},
"n1:metadata": [
{
"n1:metadata": {
"@": {
"n4:k": "oplog.enabled",
"n4:v": "true"
}
}
},
{
"n1:metadata": {
"@": {
"n4:k": "oplog.engine",
"n4:v": "podio"
}
}
},
{
"n1:metadata": {
"@": {
"n4:k": "oplog.podio.url",
"n4:v": "https://podio.com/energocentrumcz/mervis-oplog/apps/operational-log"
}
}
}
],
"n1:mdi": [
{
"n1:mi": {
"@": {
"r:ref": "1",
"r:type": "073d1b6c-24f5-435a-a5bd-1d54e04b0d06"
}
}
},
{
"n1:mi": {
"@": {
"n2:totalAllowedSchemasCount": 1,
"n2:totalSchemasCount": 1,
"r:type": "aa8818ce-d47d-41ff-9be5-3de9f34d7ebf"
}
}
}
]
}
},
{
"n1:project": {
"@": {
"n1:id": "b9ad5380-7d1d-4043-b675-bd406df6003b",
"n1:name": "CVUT_HERBERTOV",
"n1:domain": "GlobalDomain",
"n1:tz": "Europe/Prague",
"r:def": "5"
},
"n1:loc": {
"n5:gps": {
"@": {
"n5:lat": 48.621247,
"n5:lon": 14.350967
}
}
},
"n1:mdi": [
{
"n1:mi": {
"@": {
"n3:moduleInstantiated": true,
"r:type": "073d1b6c-24f5-435a-a5bd-1d54e04b0d06"
}
}
},
{
"n1:mi": {
"@": {
"n2:totalAllowedSchemasCount": 1,
"n2:totalSchemasCount": 1,
"r:type": "aa8818ce-d47d-41ff-9be5-3de9f34d7ebf"
}
}
}
]
}
},
{
"n1:project": {
"@": {
"n1:id": "843855a2-21b4-4e84-b74d-ff3901b54e37",
"n1:name": "PRVNI_KROKY",
"n1:domain": "GlobalDomain",
"n1:tz": "Europe/Prague",
"r:def": "6"
},
"n1:mdi": [
{
"n1:mi": {
"@": {
"n3:moduleInstantiated": true,
"r:type": "073d1b6c-24f5-435a-a5bd-1d54e04b0d06"
}
}
},
{
"n1:mi": {
"@": {
"n2:totalAllowedSchemasCount": 6,
"n2:totalSchemasCount": 6,
"r:type": "aa8818ce-d47d-41ff-9be5-3de9f34d7ebf"
}
}
}
]
}
}
],
"n1:projectGroups": [
{
"n1:group": {
"@": {
"n6:name": "// fixme - flat merge instead of real one!!!"
},
"n6:elements": [
{
"n6:projectItem": {
"n1:project": {
"@": {
"r:ref": "2"
}
}
}
},
{
"n6:projectItem": {
"n1:project": {
"@": {
"r:ref": "3"
}
}
}
},
{
"n6:projectItem": {
"n1:project": {
"@": {
"r:ref": "4"
}
}
}
},
{
"n6:projectItem": {
"n1:project": {
"@": {
"r:ref": "5"
}
}
}
},
{
"n6:projectItem": {
"n1:project": {
"@": {
"r:ref": "6"
}
}
}
}
]
}
}
],
"@": {
"n1:dataVersion": "K3JgNExrzoSBu8JwZ2NDYg=="
}
}
}
}
==== api/get/projectByParts ====
**Request**
* URL: https://scada.mervis.info/api/get/projectByParts?format=xml
* Method: POST
{
"cred": {
"t": "2:85be00d3-5875-4dec-a9b4-c98e2ff2acbe"
},
"projId": "1b2623be-eaa4-4e29-8596-c66dd85d5643",
"treeId": "Visual tree",
"partType": 0,
"offset": 0,
"count": 2000
}
**Response XML**
6
6
-1
1
-10
20
Output
3
true
true
0
0
false
false
Dec
Output
Inc
Output
true
false
Output
0
...
**Response JSON**
{
"ns": {
"r": "http://dev.rcware.eu/serialization/references",
"n1": "http://dev.rcware.eu/scada/datapoints",
"n2": "http://dev.rcware.eu/scada/basic-props",
"n3": "http://dev.rcware.eu/scada/legacy-props",
"n4": "http://dev.rcware.eu/rt2com"
},
"doc": {
"n1:getProjectByPartsResult": {
"@": {
"n1:projId": "1b2623be-eaa4-4e29-8596-c66dd85d5643",
"n1:dataVersion": "638854006248661233",
"n1:totalCount": 15,
"n1:nextOffset": -1
},
"n1:dps": [
{
"n1:dp": {
"@": {
"n1:id": "07d538d9-9f4b-46ca-ba4d-13b13b5302ff",
"n1:n": "analog setpoint",
"n1:canAct": true,
"n1:canAlr": true
},
"n1:v": {
"n1:props": [
{
"n1:p": {
"@": {
"n1:n": "Source",
"n1:u": "°C",
"n1:t": "2025-07-16T23:26:36.0742528Z",
"n1:q": "Good",
"r:type": "b133774d-21ce-42b6-add3-57c012079c55",
"r:def": "1"
},
"n2:v": 6.0
}
},
{
"n1:p": {
"@": {
"n1:n": "Output",
"n1:u": "°C",
"n1:t": "2025-07-16T23:26:36.0742528Z",
"n1:q": "Good",
"r:type": "b133774d-21ce-42b6-add3-57c012079c55"
},
"n2:v": 6.0
}
},
{
"n1:p": {
"@": {
"n1:n": "Dec",
"n1:u": "°C",
"n1:t": "2024-09-11T13:40:30.8120217Z",
"n1:q": "Good",
"r:type": "b133774d-21ce-42b6-add3-57c012079c55"
},
"n2:v": -1.0
}
},
{
"n1:p": {
"@": {
"n1:n": "Inc",
"n1:u": "°C",
"n1:t": "2024-09-11T13:40:30.8122506Z",
"n1:q": "Good",
"r:type": "b133774d-21ce-42b6-add3-57c012079c55"
},
"n2:v": 1.0
}
},
{
"n1:p": {
"@": {
"n1:n": "Min",
"n1:u": "°C",
"n1:t": "2024-09-11T13:40:30.8112955Z",
"n1:q": "Good",
"r:type": "b133774d-21ce-42b6-add3-57c012079c55"
},
"n2:v": -10.0
}
},
{
"n1:p": {
"@": {
"n1:n": "Max",
"n1:u": "°C",
"n1:t": "2024-09-11T13:40:30.8112988Z",
"n1:q": "Good",
"r:type": "b133774d-21ce-42b6-add3-57c012079c55"
},
"n2:v": 20.0
}
},
{
"n1:p": {
"@": {
"n1:n": "StdVis_V1",
"n1:t": "2024-09-11T13:40:30.8112085Z",
"n1:q": "Good",
"r:type": "b0db7bd7-0375-4830-90f2-6d918bac41ee"
},
"n2:v": {
"n2:props": [
{
"n2:p": {
"n2:pn": "Output",
"n2:props": [
{
"n2:p": {
"n2:dec": 3,
"n2:fs": "",
"@": {
"r:type": "033dd98a-337f-4908-9866-55961696f646"
}
}
}
]
}
}
]
}
}
},
{
"n1:p": {
"@": {
"n1:n": "CheckMin",
"n1:t": "2024-09-11T13:40:30.8114074Z",
"n1:q": "Good",
"r:type": "e4c0288b-9d7b-48d8-93be-fa4a0a787a36"
},
"n2:v": true
}
},
{
"n1:p": {
"@": {
"n1:n": "CheckMax",
"n1:t": "2024-09-11T13:40:30.811645Z",
"n1:q": "Good",
"r:type": "e4c0288b-9d7b-48d8-93be-fa4a0a787a36"
},
"n2:v": true
}
},
{
"n1:p": {
"@": {
"n1:n": "LegacyRcAddress_V1",
"n1:t": "2024-09-11T13:40:30.8132286Z",
"n1:q": "Good",
"r:type": "f426f6d7-8dd5-40a3-ac73-dd98e927fd74"
},
"n3:v": {
"@": {
"n3:e": 1,
"n3:g": 1,
"n3:n": 2,
"n3:o": 15
},
"n3:m": [
{
"n3:inpm": {
"@": {
"n3:i": 0,
"n3:p": "Source"
}
}
},
{
"n3:inpm": {
"@": {
"n3:i": 15,
"n3:p": "Output"
}
}
},
{
"n3:inpm": {
"@": {
"n3:i": 7,
"n3:p": "Min"
}
}
},
{
"n3:inpm": {
"@": {
"n3:i": 8,
"n3:p": "Max"
}
}
},
{
"n3:inpm": {
"@": {
"n3:i": 5,
"n3:p": "Dec"
}
}
},
{
"n3:inpm": {
"@": {
"n3:i": 9,
"n3:a": true,
"n3:p": "-"
}
}
},
{
"n3:inpm": {
"@": {
"n3:i": 6,
"n3:p": "Inc"
}
}
},
{
"n3:inpm": {
"@": {
"n3:i": 10,
"n3:a": true,
"n3:p": "+"
}
}
},
{
"n3:inpm": {
"@": {
"n3:i": 11,
"n3:a": true,
"n3:p": "INIT"
}
}
}
]
}
}
},
{
"n1:p": {
"@": {
"n1:n": "Tags_V1",
"n1:t": "2019-06-14T12:00:04.9014633Z",
"n1:q": "Good",
"r:type": "e1b9ddbd-bf76-4c04-9f61-0626d2d774bb"
},
"n2:v": {
"n1:tags": [
{
"n1:t": {
"@": {
"n1:vt": "String",
"n1:k": "pointy_type",
"n1:v": "one"
}
}
}
]
}
}
},
{
"n1:p": {
"@": {
"n1:n": "LAlr",
"n1:u": "°C",
"n1:t": "0001-01-01T00:00:00",
"n1:q": "Unknown",
"r:type": "b133774d-21ce-42b6-add3-57c012079c55"
},
"n2:v": 0.0
}
},
{
"n1:p": {
"@": {
"n1:n": "HAlr",
"n1:u": "°C",
"n1:t": "0001-01-01T00:00:00",
"n1:q": "Unknown",
"r:type": "b133774d-21ce-42b6-add3-57c012079c55"
},
"n2:v": 0.0
}
},
{
"n1:p": {
"@": {
"n1:n": "LAlrAct",
"n1:t": "0001-01-01T00:00:00",
"n1:q": "Unknown",
"r:type": "e4c0288b-9d7b-48d8-93be-fa4a0a787a36"
},
"n2:v": false
}
},
{
"n1:p": {
"@": {
"n1:n": "HAlrAct",
"n1:t": "0001-01-01T00:00:00",
"n1:q": "Unknown",
"r:type": "e4c0288b-9d7b-48d8-93be-fa4a0a787a36"
},
"n2:v": false
}
}
]
},
"n1:a": {
"n1:props": [
{
"n1:p": {
"@": {
"n1:n": "-",
"r:type": "2e0a871a-af8e-4234-8d27-e3145aeb6bd3"
},
"n2:diff": "Dec",
"n2:target": "Output"
}
},
{
"n1:p": {
"@": {
"n1:n": "+",
"r:type": "2e0a871a-af8e-4234-8d27-e3145aeb6bd3"
},
"n2:diff": "Inc",
"n2:target": "Output"
}
},
{
"n1:p": {
"@": {
"n1:n": "INIT",
"r:type": "90d4f1b9-c18c-4ce9-9799-d1475d949139"
},
"n2:interactive": true,
"n2:interactiveTimestamp": false,
"n2:target": "Output",
"n2:nonInteractiveValue": 0.0
}
}
]
},
"n1:core": {
"@": {
"r:type": "ffdebc6e-11fc-4bcb-949d-04c05dabc6d5"
}
}
}
}
...
]
}
}
}
==== api/v3/get/history ====
**Request**
* URL: /api/v3/get/history?format=json
* Method: POST
* Umožňuje stahovat historii pro více datových bodů
* V ukázkách je vždy za dvěma lomítky uvedený typ property
* V sekci credentials lze místo "token" uvést "name" a "password" - použití bez tokenu je ale výkonnostně penalizováno
* "seriesParameters" - se uvádí jen pokud chceme rozdílné hodnoty než v "commonSeriesParameters"
* "clientReference" - volitelné - pro dodatečnou identifikaci datového bodu klientem
* položky "segmenation", "requestState" a "serverState" se vyplňují podle poslední odpovědi serveru. Pro první volání se tyto hodnoty neuvádějí.
{
"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
}
}
**Response**
* Dokud je v odpovědi v sekci "segmentation" uveden "requestState" existují v daném rozsahu další historie.
* "requestState" a "serverState" je nutné do dalšího případného dotazu na historii předat.
* Values
* v - hodnota
* ts - začátek platnosti hodnoty
* gt - konec platnosti hodnoty
* i - interval, pokud je jiný než uvedená hodnota u celé série
* Meta
* type - typ uložených hodnot - double, string, datetime
* unit - jednotky
* interval - informace o periodě, v jaké by měly být hodnoty v databázi uloženy. Slouží k identifikaci chybějících záznamů.
{
"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
}
}
**Funkční demo**
{
"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
}
}
}
==== [Deprecated] api/get/history====
**Request**
* URL: /api/get/history?format=xml
* Method: POST
{
"cred":{
"n":"demo",
"p":"demo",
"pe":0
},
"projId":"5abf8ca0-94ba-48df-8d3c-7ebe87a12fd0",
"dpId":"62cf4083-31ed-4bc1-be25-044ba837a9f0",
"from":"/Date(1541199600000)/",
"to":"/Date(1541496190357)/",
"offset":0,
"count":5000,
"historyState":""
}
**Response**
12754
12754
12754
12755
12756
12757
12758
12759
12760
12761
12761
12761
====api/set/history====
**Request**
* URL: /api/set/history?format=xml
* Method: POST
* Content-Type: text/xml
Atribut **i** nastavuje **interval** ([[https://en.wikipedia.org/wiki/ISO_8601#Time_intervals|ISO 8601]]), v jakém by měla být uložena následující hodnota.
V **cred** lze použít i ověření pomocí jména a hesla, ale využití **tokenu** nabízí vyšší výkon.
Všechny časové údaje jsou očekávány v UTC.
2.7
3.0
2.0
2.3
**Response**
* 200 OK
====api/set/executeActions====
* URL: /api/set/executeActions?format=xml
* Method: POST
* Content-Type: text/xml
===DoubleValue===
**Request**
16
**Response**
===PlanningCalendar===
* v requestu je atribut "val" který odkazuje na index items v definici plánovacího kalendáře
* pokud je kalendář číslený místo "val" se musí použít "dval" pro double hodnoty a "ival" pro integer hodnoty
**Request**
**Response**
====api/get/values====
* URL: /api/get/values?format=xml
* Method: POST
===Output property===
Nejvhodnější způsob vyčtení aktuálních hodnot datových bodů (property "Output") z jednoho nebo více projektů.
**Request**
{
"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"]
}
]
}
**Response**
ON
0
===PlanningCalendar property===
**Request**
{
"cred": {
"t": "xxxxxx" //token
},
"propNamesToSerialize": ["PlanningCalendar"],
"offset": 0,
"count": 1000,
"serverState": null,
"dps": [{
"projId": "17d3ff08-40c1-41c0-ad6a-bad4489323c7",
"dpIds": ["d1243034-0809-444d-a48a-d04d800b4095"]
}
]
}
**Response**