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-db:10-api [2017/07/13 17:24]
m.kulvejt [C#]
en:mervis-db:10-api [2019/03/06 12:31]
m.chlupac
Line 29: Line 29:
 ==== C# ==== ==== C# ====
  
-{{ :en:mervis-db:mervisdb_getdata_example.zip |}}+{{ :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 37: Line 46:
 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 58: Line 168:
  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 131: Line 216:
  }  }
  }  }
-} +}</code>
- +
- +
-</code> +
 ==== Matlab ==== ==== Matlab ====
  
Line 158: Line 239:
  
 <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 181: Line 262:
             '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 198: Line 279:
 ==== PHP ==== ==== PHP ====
  
-MervisDB_GetData_example.php+=== Code === 
  
-<code php>+<code php MervisDB_GetData_example.php>
 <?php <?php
 /* /*
  • © Energocentrum Plus, s.r.o. 2017 - 2024