Jump to content

Thorsten Vogt

Super Seeqer
  • Posts

    171
  • Joined

  • Last visited

  • Days Won

    53

Everything posted by Thorsten Vogt

  1. Hi Mike, by default the size of the tiles reflects the number of assets under the specific asset. In this example, as Cooling Tower 1 has more assets belonging it then Cooling Tower 2, the area of the rectange is bigger: Assets below Cooling Tower 1: Assets below Cooling Tower 2: As you may notice the shape of the rectangles for Area J and K in Cooling Tower 1 is different from the other rectangles, although the size is the same. Resizing the browser circumvents this issue and displays the rectangles all in the same shape: You can override the size of each item individually as described here: Hope this helps. Regards, Thorsten
  2. Hi Robin, as I understood you want to have the sum of the values at ~ 9 am and ~ 3 pm as the value for the batch 22091 NR. Therefore I changed the last formula of my previous post: $batch.removeLongerThan(1wk).tosamples($capsule -> { $maxFirst = $capsulesForCounter.toGroup($capsule).first().property('CounterValue') $sumOfMax = $capsulesForCounter.toGroup($capsule).reduce(0, ($r, $x) -> $r + $x.property('CounterValue')) sample($capsule.startKey(), $sumOfMax-$maxFirst) }, 1d).tostep(1wk) Regards, Thorsten
  3. Hi Robin, you may try the following way. I tried to set up an environment, that represents your data. In the first step I created a condition for each batch: As you can see the "Counter" signal is increasing after the end of the batch. Next I created capsules for the periods between every counter reset using formula. For each capsule the maximum value is stored as a property: ($counter.runningDelta() < 0).afterStart(0s).inverse().removeLongerThan(1wk).transform($c -> $c.setproperty('CounterValue', $counter.maxValue($c))) In the last step I used another formula to transfer the countervalue to a signal that is displayed across the duration of the batch: $batch.removeLongerThan(1wk).tosamples($capsule -> { $max = $capsulesForCounter.toGroup($capsule).last().property('CounterValue') sample($capsule.startKey(), $max) }, 1d).tostep(1wk) Will this work for you? Regards, Thorsten
  4. Hi Bella, you can chain the splice command multiple times: You may also have a look at this post: Hope this helps. Regards, Thorsten
  5. Hello Arnaud, the error is occuring because of the unit of the signal. I guess the unit of your signal is "t" which is converted to "t²" and "t³" for the respective parts of the formula. Therefore they cannot be used in an addition or subtraction. To get the fomula working simply convert the signal to a unitless one before calculating the polynom. The resulting signal is unitless. You can use the setUnits() function to specify a unit if you need one. Hope this helps. Regards, Thorsten
  6. Hi Vladimir, the error indicates that at least one of the conditions used in the formula does not have a maximum capsule duration defined. To get the formula working you have to specify a maximum capsule duration by using removeLongerThan(). The function takes a scalar value (e.g. 1wk) and removes all capsules longer than that duration. $A.removeLongerThan(1wk).transform( $capsule -> $BB.removeLongerThan(1wk).toGroup($capsule).first() ) You can check for a maximum duration by clicking the "i" icon next to the item in Details Pane: If the attribute is missing, the item doesn't have a maximum duration specified. This is the case if you create a condition by using a simple Value Search. Regards, Thorsten.
  7. Hi Vladimir, you may use a transform for this: $A.transform($capsule -> $BB.toGroup($capsule).first()) $A refers to condition A, $BB refers to condition BB. The formula retrieves all capsules of BB during A and returns a condition containing only the first capsule of BB: Hope this helps. Regards, Thorsten
  8. Hi Vladimir, regarding the first question: As I understand your question you want to calcuate the duration of the period when the valve is opened . You can do this by creating a "Value Search" and then using "Signal from Condition" to calculate the duration of each capsule: Regarding your second question: Create a "Periodic Condition" to create capsules for the periods you are interested in. Then create another "Signal from Condition" to count the number of "Valve open" capsules during the created Periodic Condition: Does this answer your questions? Regards, Thorsten
  9. Hi Ethan, you can try this: The formula combines two signals with the property value at start an end of the capsule. By using toStep() the samples are connected and by using within() only the portion of the signal within the condition is kept. Does this work for you? Regards, Thorsten
  10. Hi Felix, you may try this one. I have set up an example with three assets: I used the following formula to calculate the number of failed equipments: The formula iterates over each week and calculates the number of failed equipments for each capsule of the weekly condition. Therefore I am using the sign() function on the number of capsules per week, which returns 1 if capsules exists during the week and 0 if no capsules are present. The sum of these values is used for a new sample that is set at the beginning of the capsule. toStep() connects each sample using step interpolation. Regards, Thorsten
  11. Hi Theresa, you specify this in the Details Pane: Regards, Thorsten
  12. Hi Theresa, I understand the need for this. As a workaound you may put the signals that should be displayed smaller on the same lane as the signal you want to have displayed bigger with a secondary y-axis and adjusted ranges: Regards, Thorsten
  13. Hi kward, Capsule View should get you the desired output, but you you need a condition to create capsules for which you can overlay the signals. My example is for comparing daily values. You can switch the perdiodic condition to Yearly to compare the signal for different years: Regards, Thorsten
  14. Hello kward, as I understood your question, the easiest way to do this is using Capsule View, which overlays the signals for each capsule. In this example I used two signals and created a Periodic Condition for each day: By clicking "Capsule" in the top menu and selecting the capsules you are interrested in, you can compare the values during each day, as all values are are shown in relative time from the start of their capsule. Did you mean something like that? Regards, Thorsten
  15. Hi Chris, you can try to use the OData Export and some scripting in Powershell to export to CSV. Copy the "OData Sample Table Endpoint" and insert into the script below to export signal values: $credentials = Get-Credential $result =Invoke-RestMethod http://seeqserver:34216/odata.svc/Analysis_36_Export_1_7C86D848_7A39_4B5B_BB67_FA66A18CF6E4_DataSet -Credential $credentials $result | ForEach-Object { $properties = $_.content.properties [PSCustomObject]@{ Timestamp = $properties.timestamp Temperature = $properties.Cooling_Tower_1ǀExampleǀArea_AǀTemperature RH = $properties.Cooling_Tower_1ǀExampleǀArea_AǀRelative_Humidity } } | Export-Csv C:\Temp\data.csv -NoTypeInformation Another way would be using the API / SDK (https://support.seeq.com/space/KB/117027248/Seeq%20APIs%20and%20SDKs) or Seeq Data Lab, if you have a license for this. Regards, Thorsten
  16. Hi Theresa, no, you cannot adjust the size of the lanes itself.But you can use the "Dimming" feature of Seeq to show only lanes with items selected in the Details Pane: Regards, Thorsten
  17. Hi Felix, markers can be created with the function markersThreshold(). In the following example I am creating markers for the points in time, when the value becomes greater than 78. The markers are just capsules with no duration: Adding growEnd() to the function will create capsules spanning from marker to marker: When working with markers ypu should also know capsulesFromMarkers(), which you can use to create capsules between different markers. Let suppose you want to create a capsule starting each time the temperature rises above 80 and ending when the temperature falls below 90: $start = $t.markersThreshold(isgreaterthan(80)) $end = $t.markersThreshold(islessthan(90)) capsulesFromMarkers($start, $end, 2wk) The markers can be created on two different signals as well: Hope this helps. Regards, Thorsten
  18. Hi, I think you will need at least a bounding condition for this. In this example I created a monthly condition and used this to calculate an average value per month: Will this work for you? Regards, Thorsten
  19. Hello, for this you have to create a Periodic Condition to create capsules for each day: In Scorecard Metric switch the type to "Condition" and select the daily condition created before: The result wil look like this: Hope this helps. Regards, Thorsten
  20. Hi Isaac, sorry for my late reply. I found another solution you might want to try. Starting point is identifying the decreasing periods by creating a smoothed signal, creating the derivative and using Value Search like I did in in my first post: Next I use the following formulas to create two signals that creates samples at the timestamps on the turning points of the original signal, which can then by combined: MinValues: $tankLevel.aggregate(minvalue(), $valueDecreasing.growEnd(1mo), minkey()).setMaxInterpolation(1wk) MaxValues: $tankLevel.aggregate(maxvalue(), $valueDecreasing.inverse().growEnd(1mo), maxkey()).setMaxInterpolation(1wk) Combined Signal: $minValues.combineWith($maxValues) By using within() and runningDelta() I filter for the portions of the signal during the decreasing periods: $combinedSignal.within($combinedSignal.runningdelta().tostep() > 0) Then I create capsules for each of that periods and intersect them with the target range: $signalWhileDecreasing.toCapsules().intersect($days) You can see that the new created capsules are more accurate then the old ones created by the derivative. I think this deviation results in the error you described. Last steps is to calculate the amount for each of these capsules and aggregate them for the target range: $tankLevel.aggregate(delta(), $intersectingCapsules, durationkey()).aggregate(sum(), $days, durationkey()) If I also display the values calculated from the derivative as described in my first post you can see the deviation between these calculations. Regards, Thorsten
  21. Hi Isaac, I created an example based on this demo data: First I recommend smoothing the signal to remove noise from it. Next step is calculating the derivative of the signal, which will be used to identify the periods of decreasing value and for determining the total quantity used: Periods with decreasing value can be identified by using Value Search: As you mentioned to calculate the amount only for a certain time period I created a time period for a specific shift. In this example the shift is 8h in duration and starts at 8 a.m.: By using within() you can extract that portion of a signal existing during a specified condition. In this case I want to keep the derivative only during the periods of decreasing value: Last step is calculating the amount for each shift: As this is just an example you may have to make adjustments to it regarding your needs. Hope this helps. Regards, Thorsten
  22. Hello Felix, every item you create in Seeq is scoped to the current workbook by default. If you add another worksheet to the workbook you may find the signal under the "Recently Accessed" section in the Data Tab: If not present under "Recently Accessed" you can also search for it as you do with other items. You can pin the item for better acceessibility by clicking on the the "Pin" icon next to it. Anonther section "Pinned" is added to the Data Tab containing all pinned items: However, you have to add the signal to the Display Pane if you want it to be displayed. In case you want the item to be availabe in other workbooks as well, you can change the scope of the item to make it availabe globally. Be carefull: This action cannot be undone! Hope this helps. Regards, Thorsten
  23. Hi Jules, I guess converting your sawtooth signal to a continous one should work, so I modified the last formula a little bit: (($continousValues / 5000)-($continousValues / 5000).floor() == 0) // -> create capsules when continous signal can be divided by 5000 .growEnd(1y) // -> grow capsule to start of the next capsule .transform($c ->{ $c.setProperty('Values', $continousValues.count($c)) // -> create capsule property containing the count of samples inside the capsule .setProperty('ValueStart', $continousValues.getValue($c.getStart())) // -> create capsule property containing the value at start of the capsule .setProperty('ValueEnd', $continousValues.getValue($c.getEnd())) // -> create capsule property containing the value at end of the capsule }) The first part of the formula creates a capsule each time the value of the signal can be divided by 5000 (0, 5000, 10000, 15000, ...). These capsules are very short in duration, but can be extended to the start of the next capsule using grow(). The last part just adds some properties to the capsules used to validate the formula . Result should look like this: You may notice that the number of values is sometimes greater than 5000. I think this may occur because it counts the number of samples. If the value in the Historian does not change it may create another sample with the same value anyway. I guess the better values to check are the values at start and end of the capsule, which always can be divided by 5000. Regards, Thorsten
  24. Hi Jules, as I do not know your data I created an example based on the sample data generated within Seeq. Therefore I created a sawtooth signal resetting every 60 days. So you may have to do adjustments to that solution. . First step was transforming this to a continous signal using formula: $values.runningDelta().max(1).runningAggregate(sum(),years()).toLinear() More details can be found in this post from @Allison Buenemann: Last step is creating a condition that contains exactly 5000 samples: (($continousValues-($continousValues / 5000).floor()).runningDelta() == 0) // -> create capsules when counter % 5000 == 0 .growEnd(1y) // -> grow capsule to start of the next capsule .transform($c -> $c.setProperty('Values', $continousValues.count($c))) // -> create capsule property containing the count of samples inside the capsule Hope this helps. Regards, Thorsten
  25. Hi Esther, you can do this the following way: 1. Create a Periodic Condition (found in Tools - Pane): 2. Use Signal from Condition to calculate the total duration. Result: Regards, Thorsten
×
×
  • Create New...