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
en:mervis-db:10-api [2017/07/13 17:23]
m.kulvejt [C#]
en:mervis-db:10-api [2021/04/08 13:04] (current)
Line 24: Line 24:
 ^GetVariableStatsAsync|Obsolete| ^GetVariableStatsAsync|Obsolete|
 ^CheckCredentials| | ^CheckCredentials| |
 +
 +===== Object Properties =====
 +  * (UTC)TimeStamp - UTC time stamp of the record
 +  * GoodThrough - UTC time stamp of the end of validity of particular record
 +  * Interval - period of time (in seconds) when next value should be recorded
 +
  
 ===== Examples ===== ===== Examples =====
  
 ==== C# ==== ==== C# ====
 +
 +{{ :en:mervis-db:mervis_db_csharp.png?direct&800 |}}
 +
 +=== Download ===
 +
 +
 +{{ :en:mervis-db:mervisdb_getdata_example.zip |}}\\
 +{{ :en:mervis-db:mervisdb_savedata_example.zip |}}
 +
 +=== Code ===
 +
  
 <code csharp MervisDB_GetData_Example.cs> <code csharp MervisDB_GetData_Example.cs>
Line 35: Line 52:
 using MervisDb_GetData_Example.MervisDbService; using MervisDb_GetData_Example.MervisDbService;
  
-namespace MervisDb_GetData_Example+namespace MervisDb_GetData_Example 
 + class Program { 
 +  static void Main(string[] args) { 
 +   // 
 +   // Demo of asynchronous methods. 
 +   // 
 +   var task = Task.Run(async() => { 
 +    // 
 +    // Create access to the real server. 
 +    // Without SSL connections, you have to remove binding parameters "<security mode="Transport"/>" in the App.config. 
 +    // The client is automatically generated from the WSDL file available here: https://kb.mervis.info/doku.php/en:mervis-db:10-api 
 +    // 
 +    using(HistoryDbAccessClient client = new HistoryDbAccessClient("HistoryAccess", "https://localhost:9876/RcWareDbAccess")) { 
 +     // Authentication credetials in the database. 
 +     Credentials credentials = new Credentials { 
 +      Name = "XXXX", Password = "YYYY" 
 +     }; 
 + 
 +     // Specification of the variables through Key-Value. 
 +     // Here we use 2 variables. 
 +     KeyValuePair[][] keys = new KeyValuePair[][] { 
 +      new KeyValuePair[] { 
 +        new KeyValuePair { 
 +         Key = "DPGuid", Value = "338E2882-D72B-4D17-A241-73E8BC30F458" 
 +        }, new KeyValuePair { 
 +         Key = "StationName", Value = "AAABBB" 
 +        } 
 +       }, 
 +       new KeyValuePair[] { 
 +        new KeyValuePair { 
 +         Key = "DPGuid", Value = "CC80211D-3D29-4CC2-91A2-F69483D566B5" 
 +        }, new KeyValuePair { 
 +         Key = "StationName", Value = "AAABBB" 
 +        } 
 +       } 
 +     }; 
 + 
 +     // From-To dates. The dates must be specified in the UTC time zone. 
 +     DateTime utcTo = DateTime.UtcNow; 
 +     DateTime utcFrom = DateTime.UtcNow.AddDays(-1); 
 + 
 +     // Retrieving the data goes through cycling of values and variables. The server returns recommended values needed for the the next cycle. 
 +     int variableOffset = 0; // the offset of the variable 
 +     int variableCount = 10; // maximal number of variables returned in one request 
 +     int valueOffset; // the offset of the value 
 +     int valueCount = 1000; // maximal values in on request 
 + 
 +     Console.WriteLine("Reading values..."); 
 + 
 +     do { 
 +      valueOffset = 0; 
 +      do { 
 +       // Execute the request. 
 +       var result = await client.GetDataAsyncAsync(credentials, keys, utcFrom, utcTo, variableOffset, variableCount, valueOffset, valueCount); 
 + 
 +       // Check the return code. "0;OK" is what we want. 
 +       if (!result.ReturnCode.StartsWith("0;")) { 
 +        Console.WriteLine("Error on reading: {0}", result.ReturnCode); 
 +       } 
 + 
 +       // Cycle through the data and print it out. 
 +       foreach(var valRecord in result.Data) { 
 +        Console.WriteLine("Variable: {0}", String.Concat(valRecord.Keys.Select((i) => { 
 +         return String.Format("{0}={1}; ", i.Key, i.Value); 
 +        }))); 
 + 
 +        foreach(var value in valRecord.Vals) { 
 +         Console.WriteLine("{0}->{1} [{2}] {3}", value.Ts, value.Gt, value.Hvt, value.Dv /* Use value type according to the Hvt (History Value Type) */ ); 
 +        } 
 +       } 
 + 
 +       valueOffset = result.NextValueOffset; 
 +       variableOffset = result.NextVariableOffset; 
 +      } 
 +      while (valueOffset != -1); 
 +     } 
 +     while (variableOffset != -1); 
 +    } 
 +   }); 
 + 
 +   Console.WriteLine("DB communication is running in background"); 
 + 
 +   try { 
 +    task.Wait(); 
 +   } catch (Exception exc) { 
 +    Console.WriteLine("Exception: {0}", exc.ToString()); 
 +   } 
 + 
 +   Console.WriteLine("DB communication finished"); 
 + 
 +   Console.ReadLine(); 
 +  } 
 + } 
 +}</code> 
 + 
 +<code csharp MervisDB_SaveData_Example.cs> 
 +using System; 
 +using System.Collections.Generic; 
 +using System.Threading.Tasks; 
 +using MervisDb_SaveData_Example.MervisDbService; 
 + 
 +namespace MervisDb_SaveData_Example
 { {
  class Program  class Program
Line 56: Line 174:
  Credentials credentials = new Credentials { Name = "XXXX", Password = "YYYY" };  Credentials credentials = new Credentials { Name = "XXXX", Password = "YYYY" };
  
- // Specification of the variables through Key-Value. + // Adding records... 
- // Here we use 2 variables+ List<ValueRecord> records = new List<ValueRecord>();
- KeyValuePair[][] keys = new KeyValuePair[][] +
-+
- new KeyValuePair[] +
-+
- new KeyValuePair { Key= "DPGuid",Value = "338E2882-D72B-4D17-A241-73E8BC30F458" },  new KeyValuePair { Key="StationName", Value = "AAABBB"+
- }, +
- new KeyValuePair[] +
-+
- new KeyValuePair { Key= "DPGuid",Value = "CC80211D-3D29-4CC2-91A2-F69483D566B5" },  new KeyValuePair { Key="StationName", Value = "AAABBB"+
-+
- };+
  
- // From-To dates. The dates must be specified in the UTC time zone. + DateTime utcTimeStamp new DateTime(2018, 1, 1, 12, 0, 0, DateTimeKind.Utc);
- DateTime utcTo = DateTime.UtcNow; +
- DateTime utcFrom = DateTime.UtcNow.AddDays(-1);+
  
- // Retrieving the data goes through cycling of values and variables. The server returns recommended values needed for the the next cycle. + // Each value is stored in a ValueRecord structure 
- int variableOffset = 0; // the offset of the variable + ValueRecord rec new ValueRecord();
- int variableCount = 10; // maximal number of variables returned in one request +
- int valueOffset; // the offset of the value +
- int valueCount 1000// maximal values in on request+
  
- Console.WriteLine("Reading values...")+ rec.UtcTimeStamp = utcTimeStamp;                // time stamp of the value, UTC date time must be used 
- + rec.HistoryValueType = HistoryValueType.Double; // type of the value 
- do+ rec.DoubleValue = 23.4                        // value itself 
 + rec.Interval = 60.0;                            // sampling period in seconds. When the difference of timestamps of subsequent values if greater than 1.1 multiple of the interval, the data should be considered incomplete. 
 + rec.Keys = new KeyValuePair[] // identification of the variable. At least one key-value pair must be "IsKey" to identify a variable.
  {  {
- valueOffset 0; + new KeyValuePair { IsKey true, Key = "Root", Value = "Building A"}, 
- do +                                                new KeyValuePair { IsKey = true, Key = "Guid", Value = "T26549821654"}, 
- { + new KeyValuePair IsKey falseKey = "Level1"Value = "Floor 1"}, 
- // Execute the request. + new KeyValuePair { IsKey = falseKey = "Level2"Value = "Room 7"}
- var result await client.GetDataAsyncAsync(credentialskeysutcFromutcTovariableOffsetvariableCountvalueOffset, valueCount); + new KeyValuePair { IsKey = false, Key = "Name", Value = "Temperature"}, 
- + new KeyValuePair IsKey = false, Key = "Description", Value = "Temperature in the room 7"}
- // Check the return code. "0;OKis what we want. + new KeyValuePair { IsKey = false, Key = "Unit", Value = "°C"}
- if (!result.ReturnCode.StartsWith("0;")) Console.WriteLine("Error on reading: {0}", result.ReturnCode); }+ };
  
- // Cycle through the data and print it out. + records.Add(rec);
- foreach (var valRecord in result.Data) +
-+
- Console.WriteLine("Variable: {0}", String.Concat(valRecord.Keys.Select((i) => { return String.Format("{0}={1}; ", i.Key, i.Value); })));+
  
- foreach (var value in valRecord.Vals) + // Save data method returns the number of stored records  
- { + int recordsSaved = await client.SaveDataAsync(credentialsrecords.ToArray());
- Console.WriteLine("{0}->{1} [{2}] {3}"value.Ts, value.Gt, value.Hvt, value.Dv /* Use value type according to the Hvt (History Value Type*/); +
-+
- }+
  
- valueOffset = result.NextValueOffset; + Console.WriteLine("Records saved: {0}", recordsSaved);
- variableOffset = result.NextVariableOffset; +
-+
- while (valueOffset != -1); +
- } +
- while (variableOffset != -1);+
  }  }
  });  });
Line 129: Line 222:
  }  }
  }  }
-} +}</code>
- +
- +
-</code> +
 ==== Matlab ==== ==== Matlab ====
  
Line 156: Line 245:
  
 <code matlab> <code matlab>
-help MerbonDatabase.supported_function_name+help MervisDatabase.supported_function_name
 </code> </code>
  
 === Code === === Code ===
  
-MervisDB_GetData_example.m 
  
-<code matlab>+ 
 +<code matlab MervisDB_GetData_example.m>
 % Instance of Mervis DB % Instance of Mervis DB
-mervisDB = MerbonDatabase('username', 'password', 'dbUrl');+mervisDB = MervisDatabase('username', 'password', 'dbUrl');
  
 % Time interval definition % Time interval definition
Line 179: Line 268:
             'StationName', 'YYYYYYY'}; % Keys definition of second variable             'StationName', 'YYYYYYY'}; % Keys definition of second variable
  
-variable1 = MerbonDbVariable(varKeys1); % Create MerbonDbVariable object from defined keys +variable1 = MervisDbVariable(varKeys1); % Create MervisDbVariable object from defined keys 
-variable2 = MerbonDbVariable(varKeys2);+variable2 = MervisDbVariable(varKeys2);
  
-arrayOfVarKeys = [variable1; variable2]; % array of MerbonDbVariables objects+arrayOfVarKeys = [variable1; variable2]; % array of MervisDbVariables objects
  
 % help for function getData % help for function getData
-help MerbonDatabase.getData+help MervisDatabase.getData
  
 % Download required data % Download required data
Line 196: Line 285:
 ==== PHP ==== ==== PHP ====
  
-MervisDB_GetData_example.php+=== Code === 
  
-<code php>+<code php MervisDB_GetData_example.php>
 <?php <?php
 /* /*
  • © Energocentrum Plus, s.r.o. 2017 - 2024