Jump to content

Thorsten Vogt

Super Seeqer
  • Posts

    171
  • Joined

  • Last visited

  • Days Won

    53

Everything posted by Thorsten Vogt

  1. Hi Ali, yes, you can do this. For demo I created a forecast based on the last 2 days: Then I calculated the running average for the forecast: In the resulting view you can see the average starting and ending two days later: Regards, Thorsten
  2. Hi Ali, I think the green trend is calculating the average from 12/11/2018 6:16 pm to 12/11/2019 6:16 pm. The formula I gave you is resetting at 01/01/2019 and therefore calculating the average from 01/01/2019 00:00 to 12/11/2019 6:16 pm which might cause the difference. To use the formula with the intended range you may change it to $signal.runningAggregate(average(), condition(1y, capsule(now()-1y, now()))) That will create a condition with one capsule beginning 1 year ago and ending now which will be used for the calculation. The value at the end of the capsule then matches the average calculated by Seeq for the display range. However, as the window for the calculation (now - 1y) is changing, the calculated values for a specific timestamp are uncertain and may change frequently. Therefore I think you should disable the cache for the calculated item. See discussion in following topic: Regards, Thorsten
  3. Hi Ali, you can try using runningAggregate-Formula: $signal.runningAggregate(average(), years()) caclulates the running average for each year resetting on 01.01. 00:00 Regards, Thorsten
  4. Hi Sean, I want the calculation to be made by Seeq if possible. I have an Asset Tree like the one below (generated from the Example Data of Seeq) : Under each Area (A-D) is a Power Signal: What I would like to have is an automatic calculation for all Power-Attributes placed here (e.g. Sum of Signals): What I tried so far was creating a global scoped Formula-Signal doing the calculation and referencing that in the Tree File Connector - Configuration. This is a workaround for small areas. But for my use case at the customer we are talking about 200 Signals under a certain area, which is hard to deal with in manual formula creation ? Regards, Thorsten
  5. Hello, is there a way to define rollup calculations using Tree File Connector? Regards, Thorsten
  6. Hi Sam, not sure if the minimum requirements can be configured. But you can disable the warning banner according to the documentation: https://support.seeq.com/space/KB/51806389/Installing%20and%20Upgrading%20Seeq Regards, Thorsten
  7. Hi Sanjhosh, you can try to remove the values from the signal as @Joanna Zinsli described above. Another way would be using within(). In this example I display only values from the "Temperature" signal, when the signal "Relative Humidity" is above 75 %. I used remove() and within() in the following formulas: The condition is determined by a simple "Value Search": Regards, Thorsten
  8. Hi Sanjhosh, when you are able to define a condition that identifies each run, you can visualize an overlay of the curves of the resulting capsules with "Capsule Time" view. Regards, Thorsten
  9. Hi Ali, Seeq tries to interpolate missing values. In the following example I removed the values from the temperature curve, if the value is less than 73°F. I get a curve with the expected gap and Seeq informs with that message that it is not able to interpolate the values: If you do the same with a signal that has a maximum interpolation of greater than the gap, Seeq interpolates the values and does not show the message: If you do not want to interpolate you should use the within() function. Seeq than does not show the message. Regards, Thorsten
  10. Hi Ali, the message indicates, that your signal interpolates values only for an interval of 40h. In this case the gap between two samples is 7d, so no interpolation can be made. You can append the function setMaxInterpolation() to interpolate values between these samples. Regards, Thorsten
  11. Hi Moriel, you can use a formula to calculate this: In this example I calculate the average power consumption for each month only when "Compressor Stage" equals "STAGE 2". Regards, Thorsten
  12. Hi Atul, as far as I know there is currently no way to import the data out of an Excel file in a Seeq native way. I would suggest contacting Seeq support regarding this topic. However you can evaluate the following options: - If you are able to transform the data into CSV format you can use the CSV import. - Another possibility would be using the way that Brian described here (with using Excel instead of Access): - If you have access to Seeq Data Labs you could use Python and Pandas to read the data from Excel and write it back to Seeq (https://datatofish.com/read_excel/). - Using Seeq Connector SDK to implement your own connector or using Seeq Server SDK/REST API to push data to Seeq Regards, Thorsten
  13. Hi Atul, can you try to remove the hourly condition from the date range associated with the scorecard? Regards, Thorsten
  14. Hi, it seems that the condition used for calculating "Vent valve opening" is different than the one used for calculating the other two. Can you check this? Regards, Thorsten
  15. Hi Jitesh, I tried to develop a nested if with the following logic: if (temp > 66) { if (rh > 50) { temp = 1/temp ; } else if (wetbulb < 75) { temp *= 2; } } If no condition is met, the temperature should not be modified. However it would be great if you could provide an example of what you are trying to achieve. Regards, Thorsten
  16. Hi Marcie, for exporting the data of a Histogram you can use the Seeq REST API / Seeq Server SDK to develop a custom solution. I created a "quick and dirty" sample based on C# for demonstration: using OfficeOpenXml; using Seeq.Sdk.Api; using Seeq.Sdk.Client; using Seeq.Sdk.Model; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Histogram2Xls { class Program { private static ApiClient apiClient { get; set; } static void Main(string[] args) { ConnectToSeeq(); FormulaRunOutputV1 output = GetDataFromSeeq(); ExportToExcel(output); } private static void ConnectToSeeq() { apiClient = new ApiClient(string.Format("{0}api", "http://<your Seeq Server>:34216/")); AuthApi authApi = new AuthApi(apiClient); AuthInputV1 input = new AuthInputV1(); input.Username = "<your Seeq Username>"; input.Password = "<your Seeq Password>"; authApi.Login(input); } private static FormulaRunOutputV1 GetDataFromSeeq() { FormulaRunInputV1 input = new FormulaRunInputV1(); input.Function = "6ED15A0C-0FBB-4D22-A0A3-D32AF43CC904"; input.Parameters = new List<string>{ "condition2=140CB04E-3DC3-4363-8D49-4D950A47FDDA", "signalToAggregate=0955829B-BBDC-4130-8204-ABAAB469BDBE" }; input.Fragments = new List<string>{ "viewCapsule=capsule('2019-04-22T00:00:00Z', '2019-04-29T00:00:00Z')" }; FormulasApi formulasApi = new FormulasApi(apiClient); FormulaRunOutputV1 output = formulasApi.RunFormula_0(input); return output; } private static void ExportToExcel(FormulaRunOutputV1 output) { List<DataItem> items = new List<DataItem>(); foreach (List<Object> objList in output.Table.Data) { DataItem item = new DataItem(); item.Day = Convert.ToInt32(objList[0]); item.Stage = objList[1].ToString(); item.Value = Convert.ToDouble(objList[2]); items.Add(item); } ExcelPackage excelPackage = new ExcelPackage(new System.IO.FileInfo("D:\\Temp\\Histogram.xlsx")); ExcelWorksheet workSheet = excelPackage.Workbook.Worksheets.Add("Data"); int row = 1; workSheet.Cells[row, 1].Value = "Day of week"; workSheet.Cells[row, 2].Value = "OFF"; workSheet.Cells[row, 3].Value = "STAGE 1"; workSheet.Cells[row, 4].Value = "STAGE 2"; workSheet.Cells[row, 5].Value = "TRANSITION"; List<int> days = items.OrderBy(x => x.Day).Select(x => x.Day).Distinct().ToList(); foreach (int day in days) { row++; List<DataItem> itemsForDay = items.Where(x => x.Day == day).ToList(); workSheet.Cells[row, 1].Value = day; foreach (DataItem item in itemsForDay) { int colIdx = GetColIdx(item.Stage); workSheet.Cells[row, colIdx].Value = item.Value; } } excelPackage.Save(); } private static int GetColIdx(string stage) { if (stage == "OFF") return 2; if (stage == "STAGE 1") return 3; if (stage == "STAGE 2") return 4; if (stage == "TRANSITION") return 5; return -1; } } public class DataItem { public int Day { get; set; } public string Stage { get; set; } public double Value { get; set; } } } This sample is very static and exports the data of a specific histogram. The configuration is made in the function GetDataFromSeeq(): input.Function takes the ID of the Histogram input.Parameters takes a list of parameters that the histogram uses for calculation input.Fragments takes the list of FormulaParameters All this information can be retrieved from the properties of - the histogram - the signal used for calculation - the condition used for grouping The resulting Excel file looks like this: As mentioned before this is just a sample which is very static and needs some adjustments regarding your needs. Regards, Thorsten
  17. Hi, you can get the start and end value the following way: 1. Import data from CSV and create a capsule for complete range of data by doing a simple Value Search: 2. In order to get only the first and the last value of the imported data create another two capsules that represent a small interval just after start and just before end of the capsule created in step 1. 3. Use the "Signal from Condition" tool to calculate the start and end values: You could also skip step 2 and use the capsule created in step 1 inside step 3 as the bounding condition. But then you have to specify a maximum duration of the capsule which may decrease performance. Regards, Thorsten
  18. Hi Jitesh, you could do a simple Value Search to get a batch whenever the Compressor stage does not match "OFF". The duration of the resulting batches is displayed in the capsules window: By using signal from condition you can calculate the total duration of each batch: In case you want a new batch starting with each value change you can use toCondition(): Hope this helps. Regards, Thorsten
  19. Hi Drew, in order to see the numeric values you must change the visualization to "Scorecard". The values are then displayed in a table. Regards, Thorsten
  20. Hi Drew, if I understand the problem correctly, you want the current value to be displayed. As far as I know it is not possible to display the last value in the chart all the time. But you can get an overwiew of the last values of your signals by creating some Scorecard Metrics that display the current value at the end of the display range. These values are being updated if the Auto Update setting is active: Hope this helps. Regards, Thorsten
  21. Hi Jitesh, you can achieve this by filtering the values with the filter() function: $stage.toCapsules().filter($x -> $x.getProperty("Value") != "OFF") You should think of using toCondition() instead of using toCapsules(), as toCapsules() generates a capsule for each interval between recorded points even if the value stays the same. You can see this in the Capsules window of your screenshot. By using toCondition() you will get only one capsule per change of value: $stage.toCondition() If you want to filter the results of toCondition() you have to specify a maximum duration for the capsules before using filter(): $stage.toCondition().setMaximumDuration(1wk).filter($x -> $x.getProperty("Value") != "OFF") Regards, Thorsten
  22. Hi Kevin, you can resample the continuos signal with the timestamps of the discrete one: $continous.resample($discrete) This will create a new signal with interpolated values. Exporting the values with original timestamps should give you the desired results. Regards, Thorsten
  23. Hi Ruben, you can do it by using this formula. The formula gets the values for the last eight hours, picks the last sample and gets its key (timestamp). Based on that timestamp the condition of the previous 24 hours is build. You can also use pick(-1) instead of last(). You should keep in mind that the capsule itself is uncertain because of the use of now(). Regards, Thorsten
  24. Hi Chris, I was able to achive this by using Property Transforms on the specific datasources: https://seeq12.atlassian.net/wiki/spaces/KB/pages/127009211/Connector+Property+Transforms But I think you have to be careful with this setting as you can easily define a possibly wrong setting for your data items. In my case, the interpolation value for the data item was preserved, although I removed the transformation. Regards, Thorsten
×
×
  • Create New...