<?xml version="1.0" encoding="UTF-8"?>
<!-- generator="FeedCreator 1.8" -->
<?xml-stylesheet href="https://kb.unipi.technology/lib/exe/css.php?s=feed" type="text/css"?>
<rss version="2.0">
    <channel xmlns:g="http://base.google.com/ns/1.0">
        <title>Unipi technology Knowledge Base en:sw:01-mervis</title>
        <description></description>
        <link>https://kb.unipi.technology/</link>
        <lastBuildDate>Wed, 30 Sep 2026 02:17:07 +0000</lastBuildDate>
        <generator>FeedCreator 1.8</generator>
        <image>
            <url>https://kb.unipi.technology/lib/tpl/merviskb2/images/favicon.ico</url>
            <title>Unipi technology Knowledge Base</title>
            <link>https://kb.unipi.technology/</link>
        </image>
        <item>
            <title>Mervis IDE</title>
            <link>https://kb.unipi.technology/en:sw:01-mervis:01-mervis-ide?rev=1628252069</link>
            <description>&lt;pre&gt;
@@ -3,24 +3,24 @@
  
-   * Connect to PLCs, even remotely over the internet
-   * Manage the configuration of PLCs including updates of [[en:sw:01-mervis:02-mervis-rt|Mervis RT]]
+   * Connect to units, even remotely over the internet
+   * Manage the configuration of units including updates of [[en:sw:01-mervis:02-mervis-rt|Mervis RT]]
    * Create programs in [[en:automation:02-glossary:iec61131-3-hidden#functional_block_diagram_fbd|FBD]] or [[en:automation:02-glossary:iec61131-3-hidden#structured_text_st|ST]] languages according to [[en:automation:02-glossary:iec61131-3-hidden|IEC61131-3]] standard
    * Create libraries of functions and Modbus devices to easily reuse them in another projects
    * Build web-based HMIs (human-machine interfaces)
    * Create projects for Mervis SCADA - environment for remote installations management
    * Detect connected [[en:hw:05-sensors:1-wire|1-Wire]] sensors and [[en:hw:04-extensions|Unipi Extensions]]
-   * Upload and debug the solutions to PLCs running [[en:sw:01-mervis:02-mervis-rt|Mervis RT]]
+   * Upload and debug the solutions to units running [[en:sw:01-mervis:02-mervis-rt|Mervis RT]]
    * ... and many more
  
- The project in Mervis IDE is called a **solution**. The **solution** consists of connection parameters to your PLCs, their configuration, programs, libraries and HMI interfaces.
+ The project in Mervis IDE is called a **solution**. The **solution** consists of connection parameters to your units, their configuration, programs, libraries and HMI interfaces.
  
  On the next screenshot, you can see a typical workspace of a project in Mervis IDE 
  
  {{ :en:sw:01-mervis:mervis-ide-introduction-01-workspace.png?direct |}}
  
- In the **Left panel**, called Solution, you can see the expanded tree for PLC, containg a list of configured communication channels (1-Wire, Modbus) and connected devices. In the **Executable Projects** you will have all your programs and function libraries. In the **HMI Projects** you can see a list of HMI interfaces.
+ In the **Left panel**, called Solution, you can see the expanded tree for unit (PLC), containg a list of configured communication channels (1-Wire, Modbus) and connected devices. In the **Executable Projects** you will have all your programs and function libraries. In the **HMI Projects** you can see a list of HMI interfaces.
  
- In the **Main window**, you can see a [[en:automation:02-glossary:iec61131-3-hidden#functional_block_diagram_fbd|FBD]] program while in the debugging mode. The left column of the programming workspace contains **inputs** of the program. In the middle section, you can place function blocks (FBs), which enclose a certain functionality. The right column contains outputs of the program. As stated above, the program is in the debugging mode, which allows us to check the current values of inputs, outputs and variables in the PLC as well as override their values. Those values are shown in small grey boxes right next to the input/output. The debugging mode also allows you to chart the actual values, as you can see in the section under the **Main window**.
+ In the **Main window**, you can see a [[en:automation:02-glossary:iec61131-3-hidden#functional_block_diagram_fbd|FBD]] program while in the debugging mode. The left column of the programming workspace contains **inputs** of the program. In the middle section, you can place function blocks (FBs), which enclose a certain functionality. The right column contains outputs of the program. As stated above, the program is in the debugging mode, which allows us to check the current values of inputs, outputs and variables in the unit as well as override their values. Those values are shown in small grey boxes right next to the input/output. The debugging mode also allows you to chart the actual values, as you can see in the section under the **Main window**.
  
  The **Properties panel** on the right contains a complete list of all properties for the selected object. Right now, it shows parameters for &amp;#039;&amp;#039;office_thermometer_temperature&amp;#039;&amp;#039; input.
  
  

&lt;/pre&gt;</description>
            <author>anonymous@undisclosed.example.com (Anonymous)</author>
        <category>en:sw:01-mervis</category>
            <pubDate>Fri, 06 Aug 2021 12:14:29 +0000</pubDate>
        </item>
        <item>
            <title>Mervis RT</title>
            <link>https://kb.unipi.technology/en:sw:01-mervis:02-mervis-rt?rev=1745850411</link>
            <description>&lt;pre&gt;
@@ -3,7 +3,13 @@
  
- &amp;lt;WRAP center round tip 60%&amp;gt;
+ &amp;lt;WRAP group center round box 95%&amp;gt;
+ {{ :files:img_warning-line_b.png?nolink |}}
+ &amp;lt;WRAP half column 13%&amp;gt;
+ {{ :en:hw:08_safety-instructions_pseudo-ISO-7010-info.png?nolink |(i)}}
+ &amp;lt;/WRAP&amp;gt;
+ &amp;lt;WRAP half column 83%&amp;gt;
+ **Note:** \\
  For our units, we provide an image with the GNU/Linux operating system and preinstalled Mervis RT. See our [[en:sw:01-mervis:06-tutorials|tutorials]].
- 
+ &amp;lt;/WRAP&amp;gt;
  &amp;lt;/WRAP&amp;gt;
  
  

&lt;/pre&gt;</description>
            <author>anonymous@undisclosed.example.com (Anonymous)</author>
        <category>en:sw:01-mervis</category>
            <pubDate>Mon, 28 Apr 2025 14:26:51 +0000</pubDate>
        </item>
        <item>
            <title>Mervis DB</title>
            <link>https://kb.unipi.technology/en:sw:01-mervis:03-mervis-db?rev=1750157934</link>
            <description>&lt;pre&gt;
@@ -20,8 +20,9 @@
  When the Mervis SCADA project is deleted or the domain is blocked, the saving to the Mervis DB is also stopped.
  &amp;lt;/WRAP&amp;gt;
  &amp;lt;/WRAP&amp;gt;
  
+ /*
  ===== Data migration and management =====
  As part of the paid service, we also offer several options of data management:
     * Transfer of data between Mervis DB accounts, including possible timestamp editing
     * Import data from Excel or CSV file
@@ -31,524 +32,13 @@
  If you are interested in any of the above mentioned services, contact our [[info@unipi.technology|Sales Department]].
  
  \\
  {{ en:sw:01-mervis:migrace_mervis-db_en.png?direct |}}
- 
  
  ===== Mervis DB Viewer =====
  The Mervis DB Viewer can be used to view stored data from a cloud installation of Mervis DB on Unipi servers. It is an online application that connects to the database and displays database data according to the specified parameters (e.g. time range).
  
  
  URL address: [[https://db.unipi.technology/viewer]].
  
  {{ cs:sw:01-mervis:db-mervis-info-viewer.png?direct |}}
- 
- 
- ===== API =====
- Mervis DB supports open SOAP API described by this WSDL: 
- 
-   * {{cs:sw:01-mervis:mervisdb_wsdl-2017-07-12.zip|}}
- 
- For special use, there are other interfaces for communication with Mervis DB - for their use and description, please contact [[en:contact:00-start|technical support]].
- 
- 
- ==== List of supported functions ====
- 
- ^ Function                                    ^ Description                                                                                                                                           ^
- | SaveData                                    | Save one or multiple records from one or multiple variables                                                                                           |
- | GetData/GetDataAsync                        | Read one or multiple records from one or multiple variables.                                                                                          |
- | GetParticularData/GetParticulatDataAsync    | Optimized method for reading of „special“ data - last value, last value after certain time moment etc.                                                |
- | GetVariables                                | Get the list of variables.                                                                                                                            |
- | GetAllVariables                             |                                                                                                                                                       |
- | ServerAlive                                 | Obsolete                                                                                                                                              |
- | DeleteVariables                             |                                                                                                                                                       |
- | DeleteData                                  |                                                                                                                                                       |
- | EnsureVariables                             |                                                                                                                                                       |
- | GetTransformedData/GetTransformedDataAsync  | Method for reading of aggregated results with given time period, the aggregation may be Min, Max, Integral, Weighted average, First, Last and Median  |
- | GetServerVersion                            |                                                                                                                                                       |
- | GetVariableStats                            | Obsolete                                                                                                                                              |
- | GetVariableStatsAsync                       | Obsolete                                                                                                                                              |
- | 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 ====
- 
- === C# ===
- 
- {{ cs:sw:01-mervis:mervis_db_csharp.png?direct |}}
- 
- &amp;lt;html&amp;gt;&amp;lt;span class=&amp;quot;kbBlueText&amp;quot;&amp;gt;Download:&amp;lt;/span&amp;gt;&amp;lt;/html&amp;gt; \\
-   * {{cs:sw:01-mervis:mervisdb_getdata_example.zip|}}
-   * {{cs:sw:01-mervis:mervisdb_savedata_example.zip|}}    
-     
- &amp;lt;html&amp;gt;&amp;lt;span class=&amp;quot;kbBlueText&amp;quot;&amp;gt;Code example:&amp;lt;/span&amp;gt;&amp;lt;/html&amp;gt; \\
- 
- &amp;lt;code csharp| MervisDB_GetData_Example.cs&amp;gt;
- using System;
- using System.Linq;
- using System.Threading.Tasks;
- using MervisDb_GetData_Example.MervisDbService;
-  
- namespace MervisDb_GetData_Example {
-  class Program {
-   static void Main(string[] args) {
-    //
-    // Demo of asynchronous methods.
-    //
-    var task = Task.Run(async() =&amp;gt; {
- 	//
- 	// Create access to the real server.
- 	// Without SSL connections, you have to remove binding parameters &amp;quot;&amp;lt;security mode=&amp;quot;Transport&amp;quot;/&amp;gt;&amp;quot; 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(&amp;quot;HistoryAccess&amp;quot;, &amp;quot;http://db.unipi.technology/dbaccess&amp;quot;)) {
- 	 // Authentication credetials in the database.
- 	 Credentials credentials = new Credentials {
- 	  Name = &amp;quot;XXXX&amp;quot;, Password = &amp;quot;YYYY&amp;quot;
- 	 };
-  
- 	 // Specification of the variables through Key-Value.
- 	 // Here we use 2 variables.
- 	 KeyValuePair[][] keys = new KeyValuePair[][] {
- 	  new KeyValuePair[] {
- 		new KeyValuePair {
- 		 Key = &amp;quot;DPGuid&amp;quot;, Value = &amp;quot;338E2882-D72B-4D17-A241-73E8BC30F458&amp;quot;
- 		}, new KeyValuePair {
- 		 Key = &amp;quot;StationName&amp;quot;, Value = &amp;quot;AAABBB&amp;quot;
- 		}
- 	   },
- 	   new KeyValuePair[] {
- 		new KeyValuePair {
- 		 Key = &amp;quot;DPGuid&amp;quot;, Value = &amp;quot;CC80211D-3D29-4CC2-91A2-F69483D566B5&amp;quot;
- 		}, new KeyValuePair {
- 		 Key = &amp;quot;StationName&amp;quot;, Value = &amp;quot;AAABBB&amp;quot;
- 		}
- 	   }
- 	 };
-  
- 	 // 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(&amp;quot;Reading values...&amp;quot;);
-  
- 	 do {
- 	  valueOffset = 0;
- 	  do {
- 	   // Execute the request.
- 	   var result = await client.GetDataAsyncAsync(credentials, keys, utcFrom, utcTo, variableOffset, variableCount, valueOffset, valueCount);
-  
- 	   // Check the return code. &amp;quot;0;OK&amp;quot; is what we want.
- 	   if (!result.ReturnCode.StartsWith(&amp;quot;0;&amp;quot;)) {
- 		Console.WriteLine(&amp;quot;Error on reading: {0}&amp;quot;, result.ReturnCode);
- 	   }
-  
- 	   // Cycle through the data and print it out.
- 	   foreach(var valRecord in result.Data) {
- 		Console.WriteLine(&amp;quot;Variable: {0}&amp;quot;, String.Concat(valRecord.Keys.Select((i) =&amp;gt; {
- 		 return String.Format(&amp;quot;{0}={1}; &amp;quot;, i.Key, i.Value);
- 		})));
-  
- 		foreach(var value in valRecord.Vals) {
- 		 Console.WriteLine(&amp;quot;{0}-&amp;gt;{1} [{2}] {3}&amp;quot;, 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(&amp;quot;DB communication is running in background&amp;quot;);
-  
-    try {
- 	task.Wait();
-    } catch (Exception exc) {
- 	Console.WriteLine(&amp;quot;Exception: {0}&amp;quot;, exc.ToString());
-    }
-  
-    Console.WriteLine(&amp;quot;DB communication finished&amp;quot;);
-  
-    Console.ReadLine();
-   }
-  }
- }
- &amp;lt;/code&amp;gt;
- 
- &amp;lt;code csharp| MervisDB_SaveData_Example.cs&amp;gt;
- using System;
- using System.Collections.Generic;
- using System.Threading.Tasks;
- using MervisDb_SaveData_Example.MervisDbService;
-  
- namespace MervisDb_SaveData_Example
- {
- 	class Program
- 	{
- 		static void Main(string[] args)
- 		{
- 			//
- 			// Demo of asynchronous methods.
- 			//
- 			var task = Task.Run(async () =&amp;gt;
- 			{
- 				//
- 				// Create access to the real server.
- 				// Without SSL connections, you have to remove binding parameters &amp;quot;&amp;lt;security mode=&amp;quot;Transport&amp;quot;/&amp;gt;&amp;quot; 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(&amp;quot;HistoryAccess&amp;quot;, &amp;quot;http://db.unipi.technology/dbaccess&amp;quot;))
- 				{
- 					// Authentication credetials in the database.
- 					Credentials credentials = new Credentials { Name = &amp;quot;XXXX&amp;quot;, Password = &amp;quot;YYYY&amp;quot; };
-  
- 					// Adding records...
- 					List&amp;lt;ValueRecord&amp;gt; records = new List&amp;lt;ValueRecord&amp;gt;();
-  
- 					DateTime utcTimeStamp = new DateTime(2018, 1, 1, 12, 0, 0, DateTimeKind.Utc);
-  
- 					// Each value is stored in a ValueRecord structure
- 					ValueRecord rec = new ValueRecord();
-  
- 					rec.UtcTimeStamp = utcTimeStamp;                // time stamp of the value, UTC date time must be used
- 					rec.HistoryValueType = HistoryValueType.Double; // type of the value
- 					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 &amp;quot;IsKey&amp;quot; to identify a variable.
- 					{
- 						new KeyValuePair { IsKey = true, Key = &amp;quot;Root&amp;quot;, Value = &amp;quot;Building A&amp;quot;},
- 						new KeyValuePair { IsKey = true, Key = &amp;quot;Level1&amp;quot;, Value = &amp;quot;Floor 1&amp;quot;},
- 						new KeyValuePair { IsKey = true, Key = &amp;quot;Level2&amp;quot;, Value = &amp;quot;Room 7&amp;quot;},
- 						new KeyValuePair { IsKey = true, Key = &amp;quot;Level3&amp;quot;, Value = &amp;quot;Temperature&amp;quot;},
- 						new KeyValuePair { IsKey = false, Key = &amp;quot;Description&amp;quot;, Value = &amp;quot;Temperature in the room 7&amp;quot;},
- 						new KeyValuePair { IsKey = false, Key = &amp;quot;Unit&amp;quot;, Value = &amp;quot;°C&amp;quot;},
- 					};
-  
- 					records.Add(rec);
-  
- 					// Save data method returns the number of stored records					
- 					int recordsSaved = await client.SaveDataAsync(credentials, records.ToArray());
-  
- 					Console.WriteLine(&amp;quot;Records saved: {0}&amp;quot;, recordsSaved);
- 				}
- 			});
-  
- 			Console.WriteLine(&amp;quot;DB communication is running in background&amp;quot;);
-  
- 			try
- 			{
- 				task.Wait();
- 			}
- 			catch (Exception exc)
- 			{
- 				Console.WriteLine(&amp;quot;Exception: {0}&amp;quot;, exc.ToString());
- 			}
-  
- 			Console.WriteLine(&amp;quot;DB communication finished&amp;quot;);
-  
- 			Console.ReadLine();
- 		}
- 	}
- }
- &amp;lt;/code&amp;gt;
- 
- 
- &amp;lt;code csharp| MervisDb_GetTransformedData_Example.cs&amp;gt;
- using System;
- using System.Linq;
- using System.Threading.Tasks;
- using MervisDb_GetTransformedData_Example.MervisDbService;
-  
- namespace MervisDb_GetTransformedData_Example
- {
- 	class Program
- 	{
- 		static void Main(string[] args)
- 		{
- 			//
- 			// Demo of asynchronous method.
- 			//
- 			var task = Task.Run(async () =&amp;gt;
- 			{
- 				//
- 				// Create access to the real server.
- 				// Without SSL connections, you have to remove binding parameters &amp;quot;&amp;lt;security mode=&amp;quot;Transport&amp;quot;/&amp;gt;&amp;quot; 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(&amp;quot;HistoryAccess&amp;quot;, &amp;quot;http://db.unipi.technology/dbaccess&amp;quot;))
- 				{
- 					// Authentication credentials in the database.
- 					Credentials credentials = new Credentials { Name = &amp;quot;XXXXX&amp;quot;, Password = &amp;quot;YYYYY&amp;quot; };
-  
- 					// Specification of the variables through Key-Value.
- 					// Here we use 2 variables.
- 					KeyValuePair[][] variableKeys = new KeyValuePair[][] {
- 						new KeyValuePair[] {
- 							new KeyValuePair (false, /*Key*/ &amp;quot;DPGuid&amp;quot;, /*Value*/ &amp;quot;338E2882-D72B-4D17-A241-73E8BC30F458&amp;quot;),
- 							new KeyValuePair (false, /*Key*/ &amp;quot;StationName&amp;quot;, /*Value*/ &amp;quot;AAABBB&amp;quot;)
- 						},
- 						new KeyValuePair[] {
- 							new KeyValuePair (false, /*Key*/ &amp;quot;DPGuid&amp;quot;, /*Value*/ &amp;quot;CC80211D-3D29-4CC2-91A2-F69483D566B5&amp;quot;),
- 							new KeyValuePair (false, /*Key*/ &amp;quot;StationName&amp;quot;, /*Value*/ &amp;quot;AAABBB&amp;quot;)
- 						}
- 					};
-  
- 					// Aggregation request
- 					var aggregation = new AggregationRequest();
- 					aggregation.Types = new AggregationType[] { AggregationType.Last };
- 					aggregation.Interpolation = InterpolationType.None;
- 					//aggregation.MaxNeighborDistance = ..only for interpolation;
- 					aggregation.IsoPattern = new string[] { &amp;quot;PT15M&amp;quot; }; // 15 min period (ISO 8601 duration pattern)
- 					aggregation.From = new DateTime(2018, 11, 24, 0, 0, 0, 0, DateTimeKind.Unspecified);
- 					aggregation.To =   new DateTime(2018, 11, 25, 0, 0, 0, 0, DateTimeKind.Unspecified);
- 					aggregation.TimeZone = @&amp;quot;Europe/Prague&amp;quot;;
-  
- 					// Retrieving the data goes through cycling of intervals and variables. The server returns recommended intervals 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 intervalOffset;       // the offset of the interval
- 					int intervalCount = 1000; // maximal values in on request
-  
- 					Console.WriteLine(&amp;quot;Reading values...&amp;quot;);
-  
- 					do
- 					{
- 						intervalOffset = 0;
-  
- 						do
- 						{
- 							// Execute the request.
- 							var result = await client.GetTransformedDataAsyncAsync(credentials, aggregation, variableKeys, variableOffset, variableCount, intervalOffset, intervalCount);
-  
- 							// Check the return code. &amp;quot;0;OK&amp;quot; is what we want.
- 							if (!result.ReturnCode.StartsWith(&amp;quot;0;&amp;quot;))
- 							{
- 								Console.WriteLine(&amp;quot;Error on reading: {0}&amp;quot;, result.ReturnCode);
- 							}
-  
- 							// Cycle through the data and print it out.
- 							if (result.Data != null)
- 							{
- 								foreach (VariableAggregate vag in result.Data)
- 								{
- 									Console.WriteLine(&amp;quot;Variable: {0}&amp;quot;, String.Concat(vag.Keys.Select((i) =&amp;gt; { return String.Format(&amp;quot;{0}={1}; &amp;quot;, i.Key, i.Value); })));
-  
- 									foreach (Interval value in vag.Data)
- 									{
- 										Console.Write(&amp;quot; {0}-&amp;gt;{1} quality: {2:0.00} &amp;quot;, value.Begin, value.End, value.DataQuality);
-  
- 										if (value.Last != null)
- 										{
- 											Console.Write(&amp;quot; Last Value: {0} (stamp {1}, origin {2})&amp;quot;, value.Last.Value, value.Last.Stamp, value.Last.Origin);
- 										}
-  
- 										Console.WriteLine();
- 									}
- 								}
- 							}
-  
- 							variableOffset = result.NextVariableOffset;
- 							intervalOffset = result.NextIntervalOffset;
-  
- 						} while (intervalOffset != -1);
-  
- 					} while (variableOffset != -1);
- 				}
- 			});
-  
- 			Console.WriteLine(&amp;quot;DB communication is running in background&amp;quot;);
-  
- 			try
- 			{
- 				task.Wait();
- 			}
- 			catch (Exception exc)
- 			{
- 				Console.WriteLine(&amp;quot;Exception: {0}&amp;quot;, exc.ToString());
- 			}
-  
- 			Console.WriteLine(&amp;quot;DB communication finished&amp;quot;);
-  
- 			Console.ReadLine();
- 		}
-  
- 	}
- }
- &amp;lt;/code&amp;gt;
- 
- 
- === Matlab ===
- 
- {{ cs:sw:01-mervis:mervisdb_matlab_api.png?direct |}}
- 
- == Supported functions: ==
- 
- ^ Function               ^ Description                                                    ^
- | SaveData               | Save one or multiple records from one or multiple variables.   |
- | GetData                | Read one or multiple records from one or multiple variables.   |
- | GetDataUnmerged        | Read one or multiple records from one or multiple variables. Allow more setting options than GetData function. |
- | GetDataOrigin          | Read data exactly as are stored in the database.               |
- | DeleteVariable         | Delete entire variable or some certain interval.               |
- | GetRequiredTimestamp   | Get time stamp depending on input options.                     |
- 
- 
- == Toolbox ==
- You need to import specialized toolbox to communicate with Mervis DB from Matlab: 
-   * {{cs:sw:01-mervis:mervisdb_matlabtoolbox.zip|}}
-   * There is a help available for all toolbox functions. To display the help use: &amp;lt;code matlab&amp;gt;help MervisDatabse.supported_function_name&amp;lt;/code&amp;gt; 
- 
- 
- == Code example ==
- &amp;lt;code matlab| MervisDB_GetData_example.m&amp;gt;
- % Instance of Mervis DB 
- mervisDB = MervisDatabase(&amp;#039;username&amp;#039;, &amp;#039;password&amp;#039;, &amp;#039;dbUrl&amp;#039;);
-  
- % Time interval definition
- from = localMatlab2utcMatlab(datenum(2017, 1, 1)); %1.1.2017 in utc
- to = localMatlab2utcMatlab(datenum(2017, 31, 1)); %31.1.2017 in utc
- samplePeriod = 5*60; % 5 minutes
- outputTimeZone = &amp;#039;Local&amp;#039;; % possible &amp;#039;Local&amp;#039; or  &amp;#039;Utc&amp;#039; parameter;
-  
- % Specifying varibles to download
- varKeys1 = {&amp;#039;DPGuid&amp;#039;, &amp;#039;338E2882-D72B-4D17-A241-73E8BC30F458&amp;#039;;...
-             &amp;#039;StationName&amp;#039;, &amp;#039;XXXXXXX&amp;#039;}; % Keys definition of first variable
- varKeys2 = {&amp;#039;DPGuid&amp;#039;, &amp;#039;CC80211D-3D29-4CC2-91A2-F69483D566B5&amp;#039;;...
-             &amp;#039;StationName&amp;#039;, &amp;#039;YYYYYYY&amp;#039;}; % Keys definition of second variable
-  
- variable1 = MervisDbVariable(varKeys1); % Create MervisDbVariable object from defined keys
- variable2 = MervisDbVariable(varKeys2);
-  
- arrayOfVarKeys = [variable1; variable2]; % array of MervisDbVariables objects
-  
- % help for function getData
- help MervisDatabase.getData 
-  
- % Download required data
- [data, time] = mervisDB.getData(arrayOfVarKeys, from, to, samplePeriod, outputTimeZone);
-  
- % Get all variables with defined keys
- allVaribales = mervisDB.getAllVars(varKeys1);
- &amp;lt;/code&amp;gt;
- 
- === PHP ===
- 
- == Code example ==
- &amp;lt;code php| MervisDB_GetData_example.php&amp;gt;
- &amp;lt;?php
- /*
- Mervis DB PHP example - getdata
  */
- try {
-  
-   $soapClient = new SoapClient(&amp;#039;./wsdl/singlewsdl.xml&amp;#039;, array(
- 	&amp;#039;compression&amp;#039; =&amp;gt; SOAP_COMPRESSION_ACCEPT | SOAP_COMPRESSION_GZIP,
- 	&amp;#039;trace&amp;#039; =&amp;gt; 0,
- 	&amp;#039;features&amp;#039; =&amp;gt; SOAP_SINGLE_ELEMENT_ARRAYS
-   ));
-   $soapClient-&amp;gt;__setLocation(&amp;#039;http://db.unipi.technology/dbaccess&amp;#039;);
-  
-   $credentials = array(
- 	&amp;#039;Name&amp;#039; =&amp;gt; &amp;#039;XXXXXXX&amp;#039;,
- 	&amp;#039;Password&amp;#039; =&amp;gt; &amp;#039;YYYYYYY&amp;#039;
-   );
-  
-   $utcTZ   = new DateTimezone(&amp;#039;UTC&amp;#039;); //all time realted values are expected in UTC
-   $utcFrom = new DateTime(&amp;#039;-120minutes&amp;#039;, $utcTZ); //
-   $utcTo   = new DateTime(&amp;#039;now&amp;#039;, $utcTZ); //
-  
-   $valOffset = 0;
-   $valCount  = 20; //how many values should be returned in one request at most. Recommended value: 5000
-   $varOffset = 0;
-   $varCount  = 4; //how many variable should be returned in on request at most
-  
-   $variablesKey = array(
- 	array(
- 	  array(
- 		&amp;#039;IsKey&amp;#039; =&amp;gt; true,
- 		&amp;#039;Key&amp;#039; =&amp;gt; &amp;#039;DPGuid&amp;#039;,
- 		&amp;#039;Value&amp;#039; =&amp;gt; &amp;#039;338E2882-D72B-4D17-A241-73E8BC30F458&amp;#039;
- 	  ),
- 	  array(
- 		&amp;#039;IsKey&amp;#039; =&amp;gt; true,
- 		&amp;#039;Key&amp;#039; =&amp;gt; &amp;#039;StationName&amp;#039;,
- 		&amp;#039;Value&amp;#039; =&amp;gt; &amp;#039;AAAAAAAAAA&amp;#039;
- 	  )
- 	),
- 	array(
- 	  array(
- 		&amp;#039;IsKey&amp;#039; =&amp;gt; true,
- 		&amp;#039;Key&amp;#039; =&amp;gt; &amp;#039;DPGuid&amp;#039;,
- 		&amp;#039;Value&amp;#039; =&amp;gt; &amp;#039;CC80211D-3D29-4CC2-91A2-F69483D566B5&amp;#039;
- 	  ),
- 	  array(
- 		&amp;#039;IsKey&amp;#039; =&amp;gt; true,
- 		&amp;#039;Key&amp;#039; =&amp;gt; &amp;#039;StationName&amp;#039;,
- 		&amp;#039;Value&amp;#039; =&amp;gt; &amp;#039;BBBBBBB&amp;#039;
- 	  )
- 	)
-   );
-  
-   echo &amp;quot;Reading values from: {$utcFrom-&amp;gt;format(&amp;#039;c&amp;#039;)} to: {$utcTo-&amp;gt;format(&amp;#039;c&amp;#039;)}\n\n&amp;quot;;
-  
-   $counter = 0;
-  
-   do {
- 	$response  = null;
- 	$valOffset = 0;
- 	do {
- 	  $response  = $soapClient-&amp;gt;GetData(array(
- 		&amp;#039;credentials&amp;#039; =&amp;gt; $credentials,
- 		&amp;#039;variablesKey&amp;#039; =&amp;gt; $variablesKey,
- 		&amp;#039;utcFrom&amp;#039; =&amp;gt; $utcFrom-&amp;gt;format(&amp;#039;Y-m-d\TH:i:s\Z&amp;#039;),
- 		&amp;#039;utcTo&amp;#039; =&amp;gt; $utcTo-&amp;gt;format(&amp;#039;Y-m-d\TH:i:s\Z&amp;#039;),
- 		&amp;#039;valueOffset&amp;#039; =&amp;gt; $valOffset,
- 		&amp;#039;valueCount&amp;#039; =&amp;gt; $valCount,
- 		&amp;#039;variableCount&amp;#039; =&amp;gt; $varCount,
- 		&amp;#039;variableOffset&amp;#039; =&amp;gt; $varOffset
- 	  ));
- 	  $valOffset = $response-&amp;gt;nextValueOffset;
- 	  $varOffset = $response-&amp;gt;nextVariableOffset;
-  
- 	  foreach ($response-&amp;gt;GetDataResult-&amp;gt;Mvr as $varArray) {
- 		foreach ($varArray-&amp;gt;Keys-&amp;gt;KeyValuePair as $kvp) //the set of keys depends on the source of the data
- 		  {
- 		  if ($kvp-&amp;gt;Key == &amp;#039;DPName&amp;#039;) {
- 			echo &amp;quot;\n{$kvp-&amp;gt;Value}\n&amp;quot;;
- 			$counter++;
- 		  }
- 		}
-  
- 		if (isset($varArray-&amp;gt;Vals-&amp;gt;I)) {
- 		  foreach ($varArray-&amp;gt;Vals-&amp;gt;I as $val) {
- 			echo &amp;quot;  t: {$val-&amp;gt;Ts}   Interval: {$val-&amp;gt;Ivl}  {$valOffset} {$varOffset}\n&amp;quot;;
- 		  }
- 		} else {
- 		  echo &amp;quot;empty\n&amp;quot;;
- 		}
-  
- 	  }
-  
- 	} while ($response-&amp;gt;nextValueOffset != -1); //-1 - no more data available
-   } while ($response-&amp;gt;nextVariableOffset != -1); //-1 - no more data available
- }
- catch (Exception $e) {
-   print_r($e);
- }
- ?&amp;gt;
- &amp;lt;/code&amp;gt;
- 

&lt;/pre&gt;</description>
            <author>anonymous@undisclosed.example.com (Anonymous)</author>
        <category>en:sw:01-mervis</category>
            <pubDate>Tue, 17 Jun 2025 10:58:54 +0000</pubDate>
        </item>
        <item>
            <title>Mervis Proxy</title>
            <link>https://kb.unipi.technology/en:sw:01-mervis:04-mervis-proxy?rev=1758537206</link>
            <description>&lt;pre&gt;
@@ -15,10 +15,10 @@
  {{ :en:hw:08_safety-instructions_pseudo-ISO-7010-info.png?nolink |(i)}}
  &amp;lt;/WRAP&amp;gt;
  &amp;lt;WRAP half column 83%&amp;gt;
  **Note:** \\
- For Unipi Patron and Neuron units, the licence request is included in the package. For the Unipi 1.1 or Gate, you can obtain the licence request either by purchasing [[https://www.unipi.technology/unipi-1-1-lite-complete-set-p169|a complete set]] or by purchasing it as a [[https://www.unipi.technology/cs/mervis-p56|separate product]]
+ For Unipi Patron and Neuron units, the licence request is included in the package. For the Unipi 1.1, Edge or Gate, you can obtain the licence request either by purchasing [[https://www.unipi.technology/unipi-1-1-lite-complete-set-p169|a complete set]] or by purchasing it as a [[https://www.unipi.technology/cs/mervis-p56|separate product]]
  &amp;lt;/WRAP&amp;gt;
  &amp;lt;/WRAP&amp;gt;
  
  ==== Proxy URLs ====
  You can find all proxy URLs on: [[en:sw:01-mervis:urls-hidden#mervis_proxy|List of URL for Mervis]].

&lt;/pre&gt;</description>
            <author>anonymous@undisclosed.example.com (Anonymous)</author>
        <category>en:sw:01-mervis</category>
            <pubDate>Mon, 22 Sep 2025 10:33:26 +0000</pubDate>
        </item>
        <item>
            <title>Mervis SCADA</title>
            <link>https://kb.unipi.technology/en:sw:01-mervis:05-mervis-scada?rev=1741251272</link>
            <description>&lt;pre&gt;
@@ -13,10 +13,8 @@
  
    * URL: [[https://scada.unipi.technology#/login?username=demo]]
    * Name: demo
    * Password: demo
- 
- It can also be run on-premise on your server. Please contact us for more information.
  
  
  === I want it! ===
  Mervis SCADA is already available. A detailed tutorial for creating your SCADA interface is available [[mervis-scada-project-hidden|on this link]]. 

&lt;/pre&gt;</description>
            <author>anonymous@undisclosed.example.com (Anonymous)</author>
        <category>en:sw:01-mervis</category>
            <pubDate>Thu, 06 Mar 2025 08:54:32 +0000</pubDate>
        </item>
        <item>
            <title>Mervis tutorials</title>
            <link>https://kb.unipi.technology/en:sw:01-mervis:06-tutorials?rev=1782971718</link>
            <description>&lt;pre&gt;
@@ -106,9 +106,9 @@
    - [[storing-data-to-history-log-hidden|]]
       - [[multiple-history-intervals-hidden|]]
       - [[download-history-log-hidden|]]
       - [[storing-data-to-mervis-db-hidden|]]
-      - [[export-data-hidden|]] &amp;lt;html&amp;gt;&amp;lt;span class=&amp;quot;article-tag tag-revised&amp;quot;&amp;gt;REVISED&amp;lt;span class=&amp;quot;tag-tooltip&amp;quot;&amp;gt;5. August 2025&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/html&amp;gt; 
+      - [[export-data-hidden|]]
    - [[mervis-scada-project-hidden|]] 
      - [[creating-scada-graphic-hidden|Creating a HMI for Mervis SCADA (cloud)]]
        - [[creating-scada-graphic-hidden#remove_duplicate_data_points|Remove duplicate data points]]
      - [[hmi-more-pages-hidden|]]

&lt;/pre&gt;</description>
            <author>anonymous@undisclosed.example.com (Anonymous)</author>
        <category>en:sw:01-mervis</category>
            <pubDate>Thu, 02 Jul 2026 05:55:18 +0000</pubDate>
        </item>
        <item>
            <title>PlcTool</title>
            <link>https://kb.unipi.technology/en:sw:01-mervis:065-plctool?rev=1746453852</link>
            <description>&lt;pre&gt;
@@ -30,9 +30,9 @@
  ===== Downloads =====
  
  It is  **necessary** to unpack the archive after download.
  
- &amp;lt;WRAP center round box 90%&amp;gt;
+ &amp;lt;WRAP center round box&amp;gt;
    * {{ :files:software:mervis:plctool:plctool-1.0.27-linux-arm64.zip |PlcTool - Linux ARM64 (1.0.27)}}
    * {{ :files:software:mervis:plctool:plctool-1.0.27-linux-arm.zip |PlcTool - Linux ARM32 (1.0.27)}}
    * {{ :files:software:mervis:plctool:plctool-1.0.27-linux-x64.zip |PlcTool - Linux x64 (1.0.27)}}
    * {{ :files:software:mervis:plctool:plctool-1.0.27-win-x64.zip |PlcTool - Windows x64 (1.0.27)}}

&lt;/pre&gt;</description>
            <author>anonymous@undisclosed.example.com (Anonymous)</author>
        <category>en:sw:01-mervis</category>
            <pubDate>Mon, 05 May 2025 14:04:12 +0000</pubDate>
        </item>
        <item>
            <title>Mervis certification</title>
            <link>https://kb.unipi.technology/en:sw:01-mervis:07-certification?rev=1745854629</link>
            <description>&lt;pre&gt;
@@ -1,11 +1,17 @@
  ====== Mervis certification ======
  
  Certification program is intended for those interested in [[https://www.unipi.technology/become-partner|Unipi partnership programme]]. The certification is contingent upon completing a certification task in the form of a practical automation solution using the Unipi certification kit.
  
- &amp;lt;WRAP center round info 60%&amp;gt;
+ &amp;lt;WRAP group center round box 95%&amp;gt;
+ {{ :files:img_warning-line_b.png?nolink |}}
+ &amp;lt;WRAP half column 13%&amp;gt;
+ {{ :en:hw:08_safety-instructions_pseudo-ISO-7010-info.png?nolink |(i)}}
+ &amp;lt;/WRAP&amp;gt;
+ &amp;lt;WRAP half column 83%&amp;gt;
  Experienced Mervis users do not have to undertake the certification test. If your company have already finished one or more Mervis projects, you can obtain the certification by sending us one of your completed projects.
- &amp;lt;/WRAP&amp;gt; 
+ &amp;lt;/WRAP&amp;gt;
+ &amp;lt;/WRAP&amp;gt;
  
  ===== Room temperature and lighting control =====
  Your task is to create a system for controlling heating and lighting in a single room. All required components are contained in the certification kit. Start with building the kit, using  {{ :en:sw:01-mervis:schema_s103_xs11_.pdf |this connection scheme}} as a guide.
   

&lt;/pre&gt;</description>
            <author>anonymous@undisclosed.example.com (Anonymous)</author>
        <category>en:sw:01-mervis</category>
            <pubDate>Mon, 28 Apr 2025 15:37:09 +0000</pubDate>
        </item>
    </channel>
</rss>
