Advertisement
SemlerPDX

AVCS SENS AIDA MAIN-v2.6 Inline Function in VB.net for VoiceAttack & AIDA64

Jun 14th, 2022
2,035
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
VB.NET 43.41 KB | None | 0 0
  1. 'AVCS SENS - AIDA64 Sensor Data Monitoring Function v2.6
  2. ' - Parses new AIDA64 data every 3 seconds (including External DHT11 data every 30 seconds, if available)
  3. ' - Rolling data points of 10, averages calculated over the last 30 seconds
  4. ' - Differential Diagnostic Algorithm of data compared to low/med/high/extreme baselines via DHT11 data
  5. ' by SemlerPDX Mar2022
  6. ' VETERANS-GAMING.COM
  7.  
  8.  
  9. Imports Microsoft.VisualBasic
  10. Imports System
  11. Imports System.IO
  12. Imports System.IO.Ports
  13. Imports System.Math
  14. Imports System.Text.RegularExpressions
  15. Imports System.Diagnostics
  16. Imports System.Text
  17. Imports System.Linq
  18. Imports System.Xml
  19. Imports System.Threading
  20.  
  21. Public Class VAInline
  22.     dim MonitorTimerDelay as integer = 3000    'in milliseconds (default 3000 == 3 seconds)
  23.     dim SensorsCheckDelay as integer = 10       'in multiples of MonitorTimerDelay (default 10 == 30 seconds)
  24.     dim itemDataPointsMax as decimal? = 10   'total data points to keep in any array, used with AVCS_SENS_DataPointsTotal (Dec)
  25.     dim itemDataPointsTotal as decimal? = 0  'variable current data points of any given array
  26.     dim newSensorsCount as integer = 0
  27.     dim dtFormat as string = "M/d/yyyy H:mm:ss"
  28.    
  29.     dim diagnosticsSensors() as string = {"SCPUUTI","TCPU","TCPUDIO","TCPUPKG","FCPU","FCPUOPT","SMEMUTI","SGPU1UTI","SVMEMUSAGE","TGPU1DIO","FGPU1","TMOBO","TPCHDIO","FPCH","TSB","FSB","TNB","FNB","TVRM","TFAN1VRM","FCHA","FCHA1","FCHA2","FCHA3","FCHA4","FCHA5","FCHA6","FCHA7","FCHA8","FCHA9"}
  30.    
  31.    
  32.     dim savedRequests as integer = 0
  33.     dim mainInterval as integer = 0
  34.    
  35.     dim historicLevels() as string = {"LOW","MEDIUM","HIGH","EXTREME"}
  36.     dim levelBracket as string = ""
  37.     dim historicLevelBracket as string = ""
  38.    
  39.     dim percentDifferenceMax as decimal? = 100
  40.     dim pdMaxTemps as decimal? = 25
  41.     dim pdMaxFans as decimal? = 100
  42.     dim diagnosis as boolean
  43.    
  44.    
  45.     dim currentAverage as decimal = 1
  46.    
  47.    
  48.     dim debugging as boolean = false
  49.     dim debugStopwatch as boolean = false
  50.     dim debugSensors as boolean = false
  51.     dim debugAIDA as boolean = false
  52.     dim debugArduino as boolean = false
  53.     dim debugAverages as boolean = false
  54.     dim checkResults as boolean = false
  55.    
  56.    
  57.     Public Function LoadHistoricSensorBaselines()
  58.         dim checkBaselinesSet() as string = {"MEDIUM","HIGH","EXTREME"}
  59.         dim checkBaselines as string
  60.         dim contents() as string
  61.         dim entry() as string
  62.         if ((VA.GetText("AVCS_SENS_HistoricBaselineData")) IsNot nothing)
  63.             checkBaselines = VA.GetText("AVCS_SENS_HistoricBaselineData")
  64.             if (checkBaselines.Contains(vbNewLine))
  65.                 contents = checkBaselines.Split(new string() {Environment.NewLine}, StringSplitOptions.RemoveEmptyEntries)
  66.                 for each line as string in contents
  67.                     entry = line.Split("=")
  68.                     VA.SetText(entry(0), entry(1))
  69.                 next
  70.             end if
  71.             for each baseline as string in checkBaselinesSet
  72.                 if (checkBaselines.Contains("AVCS_SENS_SensorAverages_" + baseline))
  73.                     VA.SetBoolean("AVCS_SENS_SET_BASELINE_LEVEL_" + baseline, true)
  74.                 else
  75.                     VA.SetBoolean("AVCS_SENS_SET_BASELINE_LEVEL_" + baseline, nothing)
  76.                 end if
  77.             next
  78.         end if
  79.     End Function
  80.    
  81.     Public Function GetFanLabelKeyword(ByVal sensorID as string, ByVal sensorLabel as string, ByVal sensorValue as string)
  82.         if (VA.GetText("AVCS_SENS_FAN_" + sensorID) isNot nothing)
  83.             sensorLabel = VA.GetText("AVCS_SENS_FAN_" + sensorID)
  84.         else
  85.             'Get User Choice for Fan Label and Command Phrase
  86.             VA.SetText("AVCS_SENS_FAN_LABEL", "Sensor ID: " + sensorID + "(\n)Sensor Label: " + sensorLabel + "(\n)Sensor Value: " + sensorValue)
  87.             VA.Command.Execute("F_AIDA_CASE_FANS", true)
  88.             if (VA.GetText("AVCS_SENS_FAN_LABEL") isNot nothing)
  89.                 sensorLabel = VA.GetText("AVCS_SENS_FAN_LABEL").Replace(" ", "") + "_fan"
  90.                 'This value seems unused - test without and see if all works... maybe leftover from previous build?
  91.                 VA.SetText("AVCS_SENS_FAN_" + sensorID, sensorLabel)
  92.                 if (VA.GetInt("AVCS_DATA_SAVED_requests") isNot nothing)
  93.                     savedRequests = VA.GetInt("AVCS_DATA_SAVED_requests") + 1
  94.                 else
  95.                     savedRequests = 1
  96.                 end if
  97.                 VA.SetInt("AVCS_DATA_SAVED_requests", savedRequests)
  98.                 VA.SetText("AVCS_DATA_SAVED_name_" + savedRequests.ToString(), "AVCS_SENS_FAN_" + sensorID)
  99.                 VA.SetText("AVCS_DATA_SAVED_value_" + savedRequests.ToString(), sensorLabel)
  100.             else
  101.                 return nothing
  102.             end if
  103.         end if
  104.         VA.SetText("AVCS_SENS_FAN_LABEL", nothing)
  105.        
  106.         return sensorLabel
  107.     End Function
  108.    
  109.     Public Function GetLargestInteger(ParamArray integers as integer()) as integer
  110.         if integers.Length = 0
  111.             throw New ArgumentException("AVCS ERROR: GetLargestInteger check params input")
  112.         end if
  113.         return integers.Max()
  114.     End Function
  115.    
  116.     Public Function GetAverages(ByRef itemData as string, ByVal dataLabel as string, ByRef itemDataPointsTotal as decimal?)
  117.         dim dataPointsArray() as string
  118.         dim dataSum as decimal? = 0
  119.         dim dataPointsLen as decimal? = 0
  120.         dim dataAverage as decimal? = 0
  121.         dataPointsArray = itemData.Split(New String() {","}, StringSplitOptions.RemoveEmptyEntries)
  122.         dataPointsLen = Convert.ToDecimal(dataPointsArray.Length)
  123.        
  124.         if (dataPointsLen >= 11)
  125.             itemData = dataPointsArray(1)
  126.             for i as integer = 2 to dataPointsArray.Length - 1
  127.                 if ((dataPointsArray(i) isNot nothing) andAlso (dataPointsArray(i) <> ""))
  128.                     itemData = itemData + "," + dataPointsArray(i)
  129.                     if (debugSensors)
  130.                         VA.WriteToLog("Check DataPoint = " + dataPointsArray(i).ToString(), "green")
  131.                     end if
  132.                 end if
  133.             next
  134.             VA.SetText("AVCS_SENS_" + dataLabel, itemData)
  135.             if (debugSensors)
  136.                 VA.WriteToLog("Check Variable = " + "AVCS_SENS_" + dataLabel + " = " + VA.GetText("AVCS_SENS_" + dataLabel).ToString(), "purple")
  137.             end if
  138.             dataPointsArray = itemData.Split(New String() {","}, StringSplitOptions.RemoveEmptyEntries)
  139.             dataPointsLen = Convert.ToDecimal(dataPointsArray.Length)
  140.             itemDataPointsTotal = dataPointsLen
  141.             if (debugSensors)
  142.                 VA.WriteToLog("AVCS SENS New DataPointsMax = " + itemDataPointsTotal.ToString(), "green")
  143.             end if
  144.         else
  145.             if (debugSensors)
  146.                 VA.WriteToLog("AVCS SENS Cannot build averages yet, data points below 10 = " + dataPointsLen.ToString(), "orange")
  147.             end if
  148.         end if
  149.        
  150.         if (debugSensors)
  151.             VA.WriteToLog("dataPoints = " + itemData.ToString(), "pink")
  152.             VA.WriteToLog("dataPointsLen = " + itemDataPointsTotal.ToString(), "pink")
  153.         end if
  154.        
  155.         for each dataPoint as string in dataPointsArray
  156.             try
  157.                 dataSum += Convert.ToDecimal(dataPoint)
  158.                 if (debugSensors)
  159.                     VA.WriteToLog("DataPoint = " + dataPoint, "pink")
  160.                 end if
  161.             catch
  162.                 if (debugSensors)
  163.                     VA.WriteToLog("DataPoint NOT numeric = " + dataPoint, "red")
  164.                 end if
  165.             end try
  166.         next
  167.         dataAverage = dataSum / dataPointsLen
  168.         if (debugSensors)
  169.             VA.WriteToLog("Equation: " + dataAverage.ToString() + " = " + dataSum.ToString() + " / " + dataPointsLen.ToString(), "green")
  170.         end if
  171.         if (itemDataPointsTotal = 0)
  172.             itemDataPointsTotal = dataPointsLen
  173.         end if
  174.         return dataAverage
  175.     end function
  176.    
  177.     Public Function GetAveragedAverages(ByVal givenAverages() as decimal)
  178.         dim averagesSum as decimal = 0
  179.         dim averagesLen as decimal = 0
  180.         dim averagesAverage as decimal = 0
  181.         try
  182.             for x as integer = 0 to givenAverages.GetUpperBound(0)
  183.                 averagesSum =  averagesSum + givenAverages(x)
  184.             next
  185.             averagesLen = givenAverages.Length
  186.             averagesAverage = averagesSum / averagesLen
  187.             if (debugAverages)
  188.                 VA.WriteToLog("func sum = " + averagesSum.ToString(), "pink")
  189.                 VA.WriteToLog("func len = " + averagesLen.ToString(), "pink")
  190.                 VA.WriteToLog("func avg = " + averagesAverage.ToString(), "red")
  191.             end if
  192.         catch
  193.             if (debugAIDA)
  194.                 VA.WriteToLog("AVCS SENS CATCH CalcAvgs possible divide by zero - givenAverages.Length = " + givenAverages.Length.ToString(), "red")
  195.             end if
  196.         end try
  197.        
  198.         return averagesAverage
  199.     End Function   
  200.    
  201.     Public Function GetAverageDistances(ByVal thisAverage as decimal, ByVal theseAverages() as decimal)
  202.         dim historicDistances() as decimal = {}
  203.         dim nearestDistance as decimal = decimal.MaxValue
  204.         dim currentDistance as decimal = decimal.MaxValue
  205.         try
  206.             for y as integer = 0 to theseAverages.GetUpperBound(0)
  207.                 currentDistance = Abs(thisAverage - theseAverages(y))
  208.                 if (isNumeric(currentDistance))
  209.                     redim preserve historicDistances(historicDistances.length)
  210.                     historicDistances(historicDistances.length - 1) = currentDistance
  211.                 end if
  212.                 if (Abs(thisAverage - theseAverages(y)) < nearestDistance)
  213.                     nearestDistance = Abs(thisAverage - theseAverages(y))
  214.                     if (y <= 3)
  215.                         historicLevelBracket = historicLevels(y)
  216.                     end if
  217.                 end if
  218.             next
  219.             if (debugAverages)
  220.                 VA.WriteToLog("AVCS SENS GetAvgD distance from nearest HistoricAverage = " + nearestDistance.ToString(), "pink")
  221.             end if
  222.         catch
  223.             VA.WriteToLog("AVCS SENS GetAvgD function error at TryCatch", "red")
  224.         end try
  225.        
  226.         nearestDistance = nothing
  227.         currentDistance = nothing
  228.         return historicDistances
  229.     End Function
  230.    
  231.     Public Function GetRoundedAverage(ByVal thisDecimal as decimal, ByVal decimalPlaces as integer)
  232.         try
  233.             'Try to compare decimal with integer version of itself to discover decimal places, then round
  234.             dim checkInteger as Int32 = Convert.ToInt32(thisDecimal)
  235.             if (thisDecimal = checkInteger)
  236.                 'For TTS brevity use the one that couldn't end with .000
  237.                 thisDecimal = checkInteger
  238.             elseif (checkInteger <> thisDecimal)
  239.                 'dim roundDecimal as Double = checkInteger
  240.                 dim roundDecimal as Double = thisDecimal
  241.                 thisDecimal = Round(roundDecimal, decimalPlaces)
  242.             end if
  243.         catch
  244.             'Result is a whole number already, does not need rounding for TTS brevity
  245.         end try
  246.        
  247.         return thisDecimal
  248.     end function
  249.    
  250.     Public Function GetRebuiltAverages(ByVal averagesArray() as decimal)
  251.         dim rebuiltAveragesArray() as decimal = {}
  252.         'Handle 0 values by turning into 1, should work if consitently applied to all
  253.         for i as integer = 0 to averagesArray.GetUpperBound(0)
  254.             redim preserve rebuiltAveragesArray(rebuiltAveragesArray.length)
  255.             if (averagesArray(i) < 1)
  256.                 rebuiltAveragesArray(rebuiltAveragesArray.length - 1) = 1
  257.             else
  258.                 rebuiltAveragesArray(rebuiltAveragesArray.length - 1) = averagesArray(i)
  259.             end if
  260.         next
  261.         return rebuiltAveragesArray
  262.     End Function
  263.    
  264.     Public Function DifferentialDiagnostics(ByVal newLabel as string, ByVal newAverage as decimal)
  265.         dim averages() as decimal = {}
  266.         dim averageDistances() as decimal = {}
  267.         dim historicAverages() as decimal = {}
  268.         dim historicAverageDistances() as decimal = {}
  269.         dim historicAveragesDistances() as decimal = {}
  270.         dim historicLevelBrackets() as decimal = {}
  271.         dim historicAverageDistance as decimal = 1
  272.         dim averagedAverage as decimal = 1
  273.         dim historicAverage as decimal = 1
  274.         dim percentDifference as decimal = 0
  275.         dim averageDistance as decimal = 0
  276.         dim differentialDiagnosis as string = "stable"
  277.         dim roundResult as Double
  278.        
  279.        
  280.         if ((newLabel <> "") and (newAverage > -1))
  281.            
  282.             'If it is temperature sensor, data to get is delta-T over Ambient
  283.             if (newLabel.StartsWith("Temp"))
  284.                 newLabel = "dTa_" + newLabel
  285.             end if
  286.            
  287.            
  288.             if (VA.GetText("AVCS_SENS_SensorAverages_LOW_" + newLabel) isNot nothing)
  289.                 historicAverages = VA.GetText("AVCS_SENS_SensorAverages_LOW_" + newLabel).Split(New String() {","}, StringSplitOptions.RemoveEmptyEntries).[Select](Function(n) decimal.Parse(n)).ToArray()
  290.                 if not(historicAverages.Length < 10)
  291.                    
  292.                     'step 1 -- for low, medium, high, and extreme - get average arrays for this level, build into an Array of level averages
  293.                     for i as integer = 0 to historicLevels.GetUpperBound(0)
  294.                         redim historicAverages(0)
  295.                         historicLevelBracket = ""
  296.                         if (VA.GetText("AVCS_SENS_SensorAverages_" + historicLevels(i) + "_" + newLabel) isNot nothing)
  297.                             historicAverages = VA.GetText("AVCS_SENS_SensorAverages_" + historicLevels(i) + "_" + newLabel).Split(New String() {","}, StringSplitOptions.RemoveEmptyEntries).[Select](Function(n) decimal.Parse(n)).ToArray()
  298.                             if not(historicAverages.Length < 1)
  299.                                 averagedAverage = 0
  300.                                 averagedAverage = GetAveragedAverages(historicAverages)
  301.                                 if (IsNumeric(averagedAverage))
  302.                                     if (debugAverages)
  303.                                         VA.WriteToLog("averagedAverage of bracket '" + i.ToString() + "' = " + averagedAverage.ToString(), "orange")
  304.                                     end if
  305.                                     redim preserve historicLevelBrackets(historicLevelBrackets.length)
  306.                                     historicLevelBrackets(historicLevelBrackets.length - 1) = averagedAverage
  307.                                 end if
  308.                                 if (debugAverages)
  309.                                     VA.WriteToLog("averages of bracket '" + historicLevels(i).ToString() + "' = " + averagedAverage.ToString(), "pink")
  310.                                 end if
  311.                             end if
  312.                         end if
  313.                     next
  314.                     if (debugAverages)
  315.                         VA.WriteToLog("historicLevelBrackets = " + historicLevelBrackets(0).ToString(), "green")
  316.                     end if
  317.                    
  318.                     'step 2 - identify nearest bracket by value of newAverage against historicLevelBrackets
  319.                     GetAverageDistances(newAverage, historicLevelBrackets)
  320.                    
  321.                     'Checking historicLevelBrackets:
  322.                     if (debugAverages)
  323.                         VA.WriteToLog("historicLevelBrackets(0) = " + historicLevelBrackets(0).ToString(), "yellow")
  324.                         VA.WriteToLog("historicLevelBrackets(1) = " + historicLevelBrackets(1).ToString(), "yellow")
  325.                         VA.WriteToLog("historicLevelBrackets(2) = " + historicLevelBrackets(2).ToString(), "yellow")
  326.                         VA.WriteToLog("historicLevelBrackets(3) = " + historicLevelBrackets(3).ToString(), "yellow")
  327.                     end if
  328.                    
  329.                     'save return as 'historicLevelBracket' gets changed anytime function is called, but only useful here
  330.                     levelBracket = historicLevelBracket
  331.                     VA.SetText("AVCS_SENS_Current_LevelBracket",levelBracket)
  332.                    
  333.                     'step 3 - get an average of all the historic averages distances to each other
  334.                     'now that we know which bracket to examine, use the levelBracket to get that bracket averages
  335.                     redim historicAverages(0)
  336.                     if (VA.GetText("AVCS_SENS_SensorAverages_" + levelBracket + "_" + newLabel) isNot nothing)
  337.                        
  338.                         historicAverages = VA.GetText("AVCS_SENS_SensorAverages_" + levelBracket + "_" + newLabel).Split(New String() {","}, StringSplitOptions.RemoveEmptyEntries).[Select](Function(n) decimal.Parse(n)).ToArray()
  339.                         if (debugAverages)
  340.                             for i as integer = 0 to historicAverages.GetUpperBound(0)
  341.                                 VA.WriteToLog("historicAverages("+i.ToString()+") = " + historicAverages(i).ToString(), "pink")
  342.                             next
  343.                         end if
  344.                        
  345.                        
  346.                         for i as integer = 0 to historicAverages.GetUpperBound(0)
  347.                             if (IsNumeric(historicAverages(i)))
  348.                                 historicAverageDistances = GetAverageDistances(historicAverages(i), historicAverages)
  349.                                
  350.                                 'Replace zero-distance to self in each iteration with 1
  351.                                 historicAverageDistances = GetRebuiltAverages(historicAverageDistances)
  352.                                
  353.                                 'Get Average of these distances and add to AveragesDistances array
  354.                                 averageDistance = GetAveragedAverages(historicAverageDistances)
  355.                                 redim preserve historicAveragesDistances(historicAveragesDistances.length)
  356.                                 historicAveragesDistances(historicAveragesDistances.length - 1) = averageDistance
  357.                                
  358.                                 if (debugAverages)
  359.                                     VA.WriteToLog("averageDistance = " + averageDistance.ToString(), "pink")
  360.                                     for x as integer = 0 to historicAveragesDistances.GetUpperBound(0)
  361.                                         VA.WriteToLog("bracket historicAverages = " + historicAveragesDistances(x).ToString(), "yellow")
  362.                                     next
  363.                                 end if
  364.                             end if
  365.                         next
  366.                        
  367.                         'Check all average distances created above
  368.                         if (debugAverages)
  369.                             for f as integer = 0 to historicAveragesDistances.GetUpperBound(0)
  370.                                 VA.WriteToLog("historicAverageDistances("+f.ToString()+") = " + historicAveragesDistances(f).ToString(), "pink")
  371.                             next
  372.                         end if
  373.                        
  374.                         'Get the average distance between all averages in this set
  375.                         historicAverageDistance = GetAveragedAverages(historicAveragesDistances)
  376.                        
  377.                         'Get the average distance between given average and all historic averages
  378.                         averageDistances = GetAverageDistances(newAverage, historicAverages)
  379.                         averageDistance = GetAveragedAverages(averageDistances)
  380.                     end if
  381.                    
  382.                     'Check the historicLevelBracket that was determined:
  383.                     if (checkResults)
  384.                         select case levelBracket
  385.                             case historicLevels(0)
  386.                                 VA.WriteToLog(newLabel + " is LOW", "green")
  387.                             case historicLevels(1)
  388.                                 VA.WriteToLog(newLabel + " is MEDIUM", "yellow")
  389.                             case historicLevels(2)
  390.                                 VA.WriteToLog(newLabel + " is HIGH", "orange")
  391.                             case historicLevels(3)
  392.                                 VA.WriteToLog(newLabel + " is EXTREME", "red")
  393.                             case else
  394.                                 VA.WriteToLog("AVCS SENS ERROR: Select Case levelBracket failed", "red")
  395.                         end select
  396.                         VA.WriteToLog("averageDistance of current number from historic averages= " + GetRoundedAverage(averageDistance,2).ToString(), "green")
  397.                         VA.WriteToLog("historicAverageDistance of historic averages from each other = " + GetRoundedAverage(historicAverageDistance,2).ToString(), "green")
  398.                     end if
  399.                    
  400.                    
  401.                     'Get Percent Difference via (((ad-had)/had)*100)
  402.                     if (historicAverageDistance < averageDistance)
  403.                         percentDifference = (((averageDistance - historicAverageDistance)/historicAverageDistance) * 100)
  404.                         roundResult = percentDifference
  405.                         percentDifference = GetRoundedAverage(roundResult, 3)
  406.                     else
  407.                         percentDifference = 0
  408.                     end if
  409.                    
  410.                     if (newLabel.Contains("fan"))
  411.                         percentDifferenceMax = pdMaxFans
  412.                     else
  413.                         percentDifferenceMax = pdMaxTemps
  414.                     end if
  415.                    
  416.                     'Store baseline/up/down status with VA Boolean states of notset/true/false
  417.                     historicAverage = GetAveragedAverages(historicAverages)
  418.                     VA.SetBoolean("AVCS_SENS_ATYPICAL_" + newLabel, nothing)
  419.                     if (percentDifference > percentDifferenceMax)
  420.                         if (newAverage > historicAverage)
  421.                             differentialDiagnosis = "higher"
  422.                             VA.SetBoolean("AVCS_SENS_ATYPICAL_" + newLabel, true)
  423.                         elseif (newAverage < historicAverage)
  424.                             differentialDiagnosis = "lower"
  425.                             VA.SetBoolean("AVCS_SENS_ATYPICAL_" + newLabel, false)
  426.                         end if
  427.                     end if
  428.                    
  429.                     if (checkResults)
  430.                         VA.WriteToLog("FINAL percent diff = " + GetRoundedAverage(percentDifference, 2).ToString() + "% (" + differentialDiagnosis + ")", "green")
  431.                     end if
  432.                    
  433.                     'Set data to final variable for this sensor with a timestamp, overwriting previous data
  434.                     VA.SetText("~dtFormat",dtFormat)
  435.                     dtFormat = VA.ParseTokens("{DATETIMEFORMAT:~dtFormat}")
  436.                    
  437.                     differentialDiagnosis = dtFormat + "," + newAverage.ToString() + "," + historicAverage.ToString() + "," + averageDistance.ToString() + "," + percentDifference.ToString() + "," + differentialDiagnosis
  438.                     VA.SetText("AVCS_SENS_DIAGNOSTICS_" + newLabel, differentialDiagnosis)
  439.                    
  440.                     if (debugAverages)
  441.                         VA.WriteToLog("AVCS_SENS_DIAGNOSTICS_" + newLabel + " = " + differentialDiagnosis, "green")
  442.                     end if
  443.                    
  444.                    
  445.                 elseif ((historicAverages.Length > 0) and (historicAverages.Length < itemDataPointsMax))
  446.                     'Wait for enough historic data points before diagnosing
  447.                     if (debugAverages)
  448.                         VA.WriteToLog("AVCS SENS Cannot build differential diagnostics yet, data points below 10 = " + historicAverages.Length.ToString(), "orange")
  449.                     end if
  450.                 end if
  451.             end if
  452.            
  453.         end if
  454.         historicAverageDistance = nothing
  455.         averagedAverage = nothing
  456.         historicAverage = nothing
  457.         percentDifference = nothing
  458.         averageDistance = nothing
  459.         differentialDiagnosis = nothing
  460.         levelBracket = nothing
  461.         historicLevelBracket = nothing
  462.         roundResult = nothing
  463.         averages = nothing
  464.         averageDistances = nothing
  465.         historicAverages = nothing
  466.         historicAverageDistances = nothing
  467.         historicAveragesDistances = nothing
  468.         historicLevelBrackets = nothing
  469.     End Function
  470.    
  471.     Public Function MonitorDebug(ByVal requestAllOff as boolean)
  472.         if (requestAllOff)
  473.             debugging = false
  474.             debugSensors = false
  475.             debugAIDA = false
  476.             debugArduino = false
  477.             debugAverages = false
  478.             checkResults = false
  479.             debugStopwatch = false
  480.             VA.SetBoolean("AVCS_SENS_Debugging", false)
  481.             VA.SetBoolean("AVCS_SENS_DebugSensors", false)
  482.             VA.SetBoolean("AVCS_SENS_DebugAIDA", false)
  483.             VA.SetBoolean("AVCS_SENS_DebugArduino", false)
  484.             VA.SetBoolean("AVCS_SENS_DebugAverages", false)
  485.             VA.SetBoolean("AVCS_SENS_DebugCheckResults", false)
  486.             VA.SetBoolean("AVCS_SENS_DebugStopwatch", false)
  487.         else
  488.             if ((VA.GetBoolean("AVCS_SENS_DebugSensors") isNot nothing) andAlso (VA.GetBoolean("AVCS_SENS_DebugSensors")))
  489.                 debugSensors = true
  490.             else
  491.                 debugSensors = false
  492.             end if
  493.            
  494.             if ((VA.GetBoolean("AVCS_SENS_DebugAIDA") isNot nothing) andAlso (VA.GetBoolean("AVCS_SENS_DebugAIDA")))
  495.                 debugAIDA = true
  496.             else
  497.                 debugAIDA = false
  498.             end if
  499.            
  500.             if ((VA.GetBoolean("AVCS_SENS_DebugArduino") isNot nothing) andAlso (VA.GetBoolean("AVCS_SENS_DebugArduino")))
  501.                 debugArduino = true
  502.             else
  503.                 debugArduino = false
  504.             end if
  505.            
  506.             if ((VA.GetBoolean("AVCS_SENS_DebugAverages") isNot nothing) andAlso (VA.GetBoolean("AVCS_SENS_DebugAverages")))
  507.                 debugAverages = true
  508.             else
  509.                 debugAverages = false
  510.             end if
  511.            
  512.             if ((VA.GetBoolean("AVCS_SENS_DebugCheckResults") isNot nothing) andAlso (VA.GetBoolean("AVCS_SENS_DebugCheckResults")))
  513.                 checkResults = true
  514.             else
  515.                 checkResults = false
  516.             end if
  517.            
  518.             if ((VA.GetBoolean("AVCS_SENS_DebugStopwatch") isNot nothing) andAlso (VA.GetBoolean("AVCS_SENS_DebugStopwatch")))
  519.                 debugStopwatch = true
  520.             else
  521.                 debugStopwatch = false
  522.             end if
  523.         end if
  524.     End Function
  525.    
  526.     Private Sub MonitorTimerElapsed(sender As Object, e As System.Timers.ElapsedEventArgs)
  527.         if ((VA.GetBoolean("AVCS_MAIN_TIMER_WORKING") isNot nothing) andAlso (VA.GetBoolean("AVCS_MAIN_TIMER_WORKING")))
  528.             'do nothing for now, maybe debug msg later?
  529.         else
  530.             VA.SetBoolean("AVCS_MAIN_TIMER_WORKING", true)
  531.             dim keyFile as string = ""
  532.             dim reBuild as string = "<?xml version=""1.0"" encoding=""UTF-8""?>" + vbNewLine + "<sensordata>" + vbNewLine
  533.             dim fixLines as string = ">" + vbNewLine + "<"
  534.             dim contents() as string
  535.             dim doc as XmlDocument = New XmlDocument()
  536.             dim nodeGet as XmlNode
  537.            
  538.             dim baselineLevels() as string = {"LOW","MEDIUM","HIGH","EXTREME"}
  539.            
  540.             dim itemDataAverage as decimal? = 0
  541.             dim itemID as string = ""
  542.             dim itemNode as string = ""
  543.             dim itemLabel as string = ""
  544.             dim itemValue as string = ""
  545.             dim itemData as string = ""
  546.             dim currentLabel as string = ""
  547.             dim counter as integer = 0
  548.             dim valueDHTc as decimal = 0
  549.             dim valueDeltaToverAmb as decimal = 0
  550.             dim intervalSensors as Int32 = 0
  551.             dim debugWatch as Stopwatch = New Stopwatch
  552.            
  553.             if ((VA.GetBoolean("AVCS_SENS_Debugging") isNot nothing) andAlso (VA.GetBoolean("AVCS_SENS_Debugging")))
  554.                 MonitorDebug(true)
  555.             else
  556.                 MonitorDebug(false)
  557.             end if
  558.            
  559.             if (debugStopwatch)
  560.                 'VA.WriteToLog("AVCS AIDA64 Sensor Monitor is now executing at " + e.SignalTime.ToString(), "green")
  561.                 debugWatch.Start()
  562.             end if
  563.            
  564.             if ((VA.GetBoolean("AVCS_SENS_ReloadBaselines") isNot nothing) andAlso (VA.GetBoolean("AVCS_SENS_ReloadBaselines")))
  565.                 if (debugAverages)
  566.                     VA.WriteToLog("AVCS SENS - re-loading baseline data found on file....", "black")
  567.                 end if
  568.                 VA.Command.Execute("F_AIDA_BASELINES", true)
  569.                 VA.SetBoolean("AVCS_SENS_ReloadBaselines", nothing)
  570.                 LoadHistoricSensorBaselines()
  571.                 Thread.Sleep(100)
  572.             end if
  573.            
  574.             'SensorsCheckDelay Config Setting -- when changed, new minimum time must be >= 2000ms, as a multiple of main timer loop interval
  575.             if ((VA.GetInt("AVCS_SENS_SensorsCheckDelay") isNot nothing) andAlso (Integer.TryParse(VA.GetInt("AVCS_SENS_SensorsCheckDelay"), SensorsCheckDelay)))
  576.                 if ((SensorsCheckDelay * MonitorTimerDelay) < 2000)
  577.                     SensorsCheckDelay = 10
  578.                     if (debugSensors)
  579.                         VA.WriteToLog("AVCS SENS ERROR: SensorsCheckDelay interval lower than 2 seconds, resetting to minimum 10xMonitorTimerDelay...", "red")
  580.                     end if
  581.                 end if
  582.             end if
  583.            
  584.             if ((VA.GetBoolean("AVCS_SENS_Logging") isNot nothing) andAlso (VA.GetBoolean("AVCS_SENS_Logging")))
  585.                
  586.                
  587.                 'USB External DHT11 Serial Data Parsing Section ================================
  588.                 if (VA.GetInt("AVCS_SENS_IntervalAIDA") isNot nothing)
  589.                     intervalSensors = Convert.ToInt32(VA.GetInt("AVCS_SENS_IntervalAIDA"))
  590.                     intervalSensors += 1
  591.                     if (intervalSensors >= SensorsCheckDelay)
  592.                         intervalSensors = 0
  593.                     end if
  594.                     VA.SetInt("AVCS_SENS_IntervalAIDA", intervalSensors)
  595.                 else
  596.                     VA.SetInt("AVCS_SENS_IntervalAIDA", 0)
  597.                 end if
  598.                 if (debugAIDA)
  599.                     VA.WriteToLog("AVCS AIDA64 Sensor Monitor Interval = " + intervalSensors.ToString(), "blue")
  600.                 end if
  601.                
  602.                 'AIDA SharedMem Data Parsing Section ================================
  603.                 if (VA.GetText("AVCS_SENS_SHAREDMEM_XML") isNot nothing)
  604.                     keyFile = VA.GetText("AVCS_SENS_SHAREDMEM_XML").Replace("><", fixLines)
  605.                     if (debugSensors)
  606.                         VA.WriteToLog("AVCS_SENS_SHAREDMEM_XML is NOT nothing", "pink")
  607.                         VA.WriteToLog(keyFile, "pink")
  608.                     end if
  609.                     if (keyFile.Contains(vbNewLine))
  610.                         contents = keyFile.Split(new string() {Environment.NewLine}, StringSplitOptions.RemoveEmptyEntries)
  611.                         for each line as string in contents
  612.                             if (line.StartsWith("<") or line.StartsWith(" ") or line.StartsWith("\t"))
  613.                                 reBuild = reBuild + line.ToString() + vbNewLine
  614.                             end if
  615.                         next
  616.                         reBuild = reBuild + "</sensordata>" + vbNewLine
  617.                     end if
  618.                    
  619.                     doc.LoadXml(reBuild)
  620.                    
  621.                     for each node as XmlNode in doc.SelectNodes("/sensordata/*")
  622.                         if (doc.GetElementsByTagName("label").Item(counter) isNot nothing)
  623.                             nodeGet = doc.GetElementsByTagName("id").Item(counter)
  624.                             itemID = nodeGet.ChildNodes(0).InnerText
  625.                            
  626.                             nodeGet = doc.GetElementsByTagName("label").Item(counter)
  627.                             itemLabel = nodeGet.ChildNodes(0).InnerText
  628.                            
  629.                             nodeGet = doc.GetElementsByTagName("value").Item(counter)
  630.                             itemValue = nodeGet.ChildNodes(0).InnerText
  631.                             if (itemValue = "0")
  632.                                 itemValue = "1"
  633.                             end if
  634.                            
  635.                             itemID = itemID.Replace(" ", "_")
  636.                            
  637.                             'VA.WriteToLog("NODENAME: " + node.Name + " (" + itemID + ") " + itemLabel + " = " + itemValue, "yellow")
  638.                             'NEW----------- Set/Get Sensor Item Label  ---EXAMPLES:
  639.                             'VA.SetText("AVCS_SENS_" + itemID, itemLabel)
  640.                             'VA.SetText("AVCS_SENS_" + itemLabel, data)
  641.                             'VA.GetText("AVCS_SENS_" + VA.ParseTokens("{TXT:AVCS_SENS_" + itemID + ":}")) = data
  642.                            
  643.                             itemNode = ""
  644.                             select case (node.Name)
  645.                                 case "sys"
  646.                                     itemNode = "sys"
  647.                                 case "temp"
  648.                                     itemNode = "temp"
  649.                                 case "fan"
  650.                                     itemNode = "fan"
  651.                                 case "duty"
  652.                                     itemNode = "sys"
  653.                                 case "volt"
  654.                                     itemNode = "volt"
  655.                                 case "curr"
  656.                                     itemNode = "curr"
  657.                                 case "pwr"
  658.                                     itemNode = "pwr"
  659.                                 case else
  660.                                     itemNode = "sys"
  661.                             end select
  662.                            
  663.                             if (VA.GetText("AVCS_SENS_" + itemID) is nothing)
  664.                                
  665.                                 itemLabel = itemLabel.
  666.                                     Replace(" (HH:MM)", "").
  667.                                     Replace("Utilization", "Use").
  668.                                     Replace("Processes", "Process_Count").
  669.                                     Replace("CPU OPT", "Optional CPU").
  670.                                     Replace("PCH Diode", "PCH").
  671.                                     Replace("GPU Diode", "GPU").
  672.                                     Replace("Chassis ", "Case ").
  673.                                     Replace("iGPU", "GPU").
  674.                                     Replace("GPU1", "GPU").
  675.                                     Replace("GPU2", "GPU").
  676.                                     Replace("South Bridge", "Southbridge").
  677.                                     Replace("#", "").
  678.                                     Replace(" ", "_")
  679.                                
  680.                                 if (debugSensors)
  681.                                     VA.WriteToLog("(" + itemID + ") " + itemLabel + " = " + itemValue, "yellow")
  682.                                 end if
  683.                                
  684.                                
  685.                                 select case (node.Name)
  686.                                     case "sys"
  687.                                         itemLabel = itemLabel
  688.                                     case "temp"
  689.                                         itemLabel = itemLabel + "_temp"
  690.                                     case "fan"
  691.                                         if (itemLabel.Contains("Case"))
  692.                                             itemLabel = GetFanLabelKeyword(itemID, itemLabel, itemValue)
  693.                                         else
  694.                                             itemLabel = itemLabel + "_fan"
  695.                                         end if
  696.                                     case "duty"
  697.                                         itemLabel = itemLabel + "_fan_use"
  698.                                     case "volt"
  699.                                         itemLabel = itemLabel + "_voltage"
  700.                                     case "curr"
  701.                                         itemLabel = itemLabel + "_amperage"
  702.                                     case "pwr"
  703.                                         itemLabel = itemLabel + "_wattage"
  704.                                     case else
  705.                                         itemLabel = nothing
  706.                                 end select
  707.                                
  708.                                 'Get/Set itemLabel function...
  709.                                 'save to variable ... save to baselines file
  710.                                 if (itemLabel isNot nothing)
  711.                                     VA.SetText("AVCS_SENS_" + itemID, itemLabel)
  712.                                    
  713.                                     if (VA.GetInt("AVCS_DATA_SAVED_requests") isNot nothing)
  714.                                         savedRequests = VA.GetInt("AVCS_DATA_SAVED_requests") + 1
  715.                                     else
  716.                                         savedRequests = 1
  717.                                     end if
  718.                                     VA.SetInt("AVCS_DATA_SAVED_requests", savedRequests)
  719.                                     VA.SetText("AVCS_DATA_SAVED_name_" + savedRequests.ToString(), "AVCS_SENS_" + itemID)
  720.                                     VA.SetText("AVCS_DATA_SAVED_value_" + savedRequests.ToString(), itemLabel)
  721.                                    
  722.                                 end if
  723.                                
  724.                                
  725.                             else
  726.                                 itemLabel = VA.GetText("AVCS_SENS_" + itemID)
  727.                             end if
  728.                            
  729.                             'Record this Sensor Data to Variables
  730.                             if (itemLabel isNot nothing)
  731.                                
  732.                                 itemData = nothing
  733.                                 if (not(itemValue.Contains(":")))
  734.                                     if (VA.GetText("AVCS_SENS_" + itemLabel) isNot nothing)
  735.                                         itemData = VA.GetText("AVCS_SENS_" + itemLabel)
  736.                                         itemData = itemData + "," + itemValue
  737.                                         itemDataAverage = GetAverages(itemData, itemLabel, itemDataPointsTotal)
  738.                                         'Round electric values to two decimal places, else 0 decimal places
  739.                                         if (itemLabel.EndsWith("_voltage") or itemLabel.EndsWith("_amperage") or itemLabel.EndsWith("_wattage"))
  740.                                             itemDataAverage = GetRoundedAverage(itemDataAverage, 2)
  741.                                         else
  742.                                             itemDataAverage = GetRoundedAverage(itemDataAverage, 0)
  743.                                         end if
  744.                                         if (debugSensors)
  745.                                             VA.WriteToLog("New Average for " + itemLabel + " = " + itemDataAverage.ToString(), "grey")
  746.                                         end if
  747.                                         VA.SetText("AVCS_SENS_" + itemLabel, itemData)
  748.                                         VA.SetDecimal("AVCS_SENS_LastAverage_" + itemLabel, itemDataAverage)
  749.                                         if ((VA.GetDecimal("AVCS_SENS_TempDHTc") isNot nothing) andAlso ((diagnosticsSensors.Contains(itemID)) andAlso (itemDataPointsTotal >= itemDataPointsMax)))
  750.                                             if ((VA.GetBoolean("AVCS_SENS_GET_BASELINE") isNot nothing) andAlso (VA.GetBoolean("AVCS_SENS_GET_BASELINE")))
  751.                                                 if ((VA.GetText("AVCS_SENS_SET_BASELINE_LEVEL") isNot nothing) andAlso (baselineLevels.Contains(VA.GetText("AVCS_SENS_SET_BASELINE_LEVEL"))))
  752.                                                    
  753.                                                     if (VA.GetInt("AVCS_DATA_SAVED_requests") isNot nothing)
  754.                                                         savedRequests = VA.GetInt("AVCS_DATA_SAVED_requests") + 1
  755.                                                     else
  756.                                                         savedRequests = 1
  757.                                                     end if
  758.                                                    
  759.                                                     VA.SetInt("AVCS_DATA_SAVED_requests", savedRequests)
  760.                                                     VA.SetText("AVCS_DATA_SAVED_name_" + savedRequests.ToString(), "AVCS_SENS_SensorAverages_" + VA.GetText("AVCS_SENS_SET_BASELINE_LEVEL") + "_" + itemLabel)
  761.                                                     VA.SetText("AVCS_DATA_SAVED_value_" + savedRequests.ToString(), itemData)
  762.                                                     VA.SetText("AVCS_SENS_SensorAverages_" + VA.GetText("AVCS_SENS_SET_BASELINE_LEVEL") + "_" + itemLabel, itemData)
  763.                                                 end if
  764.                                             end if
  765.                                         end if
  766.                                        
  767.                                     else
  768.                                         VA.SetText("AVCS_SENS_" + itemLabel, itemValue)
  769.                                     end if
  770.                                    
  771.                                     'Check if this is a temperature sensor
  772.                                     if ((node.Name = "temp") andAlso (VA.GetDecimal("AVCS_SENS_TempDHTc") isNot nothing))
  773.                                        
  774.                                         if (debugSensors)
  775.                                             VA.WriteToLog("New Temp Sensor for " + itemLabel + " and Ambient = " + VA.GetDecimal("AVCS_SENS_TempDHTc").ToString(), "yellow")
  776.                                         end if
  777.                                        
  778.                                         'Calculate Delta-T over Ambient from DHT11 Temp (c) value
  779.                                         if (Decimal.TryParse(itemValue, valueDeltaToverAmb)) andAlso ((valueDeltaToverAmb <> 0) and (valueDeltaToverAmb > (Decimal.TryParse(VA.GetDecimal("AVCS_SENS_TempDHTc"), valueDHTc))))
  780.                                        
  781.                                             valueDeltaToverAmb -= valueDHTc
  782.                                             if (debugSensors)
  783.                                                 VA.WriteToLog("New Ambient = " + valueDHTc.ToString(), "yellow")
  784.                                                 VA.WriteToLog("New dTa for " + itemLabel + " = " + valueDeltaToverAmb.ToString(), "green")
  785.                                             end if
  786.                                            
  787.                                             itemData = nothing
  788.                                             itemDataPointsTotal = 0
  789.                                             itemValue = valueDeltaToverAmb.ToString()
  790.                                             itemLabel = "dTa_" + itemLabel
  791.                                            
  792.                                             if (VA.GetText("AVCS_SENS_" + itemLabel) isNot nothing)
  793.                                                 itemData = VA.GetText("AVCS_SENS_" + itemLabel)
  794.                                                 itemData = itemData + "," + itemValue
  795.                                                 itemDataAverage = GetAverages(itemData, itemLabel, itemDataPointsTotal)
  796.                                                 itemDataAverage = GetRoundedAverage(itemDataAverage, 3)
  797.                                                 if (debugSensors)
  798.                                                     VA.WriteToLog("New Average for " + itemLabel + " = " + itemDataAverage.ToString(), "grey")
  799.                                                 end if
  800.                                                 VA.SetText("AVCS_SENS_" + itemLabel, itemData)
  801.                                                 VA.SetDecimal("AVCS_SENS_LastAverage_" + itemLabel, itemDataAverage)
  802.                                                 if ((diagnosticsSensors.Contains(itemID)) andAlso (itemDataPointsTotal >= itemDataPointsMax))
  803.                                                     if ((VA.GetBoolean("AVCS_SENS_GET_BASELINE") isNot nothing) andAlso (VA.GetBoolean("AVCS_SENS_GET_BASELINE")))
  804.                                                         if ((VA.GetText("AVCS_SENS_SET_BASELINE_LEVEL") isNot nothing) andAlso (baselineLevels.Contains(VA.GetText("AVCS_SENS_SET_BASELINE_LEVEL"))))
  805.                                                             if (VA.GetInt("AVCS_DATA_SAVED_requests") isNot nothing)
  806.                                                                 savedRequests = VA.GetInt("AVCS_DATA_SAVED_requests") + 1
  807.                                                             else
  808.                                                                 savedRequests = 1
  809.                                                             end if
  810.                                                            
  811.                                                             VA.SetInt("AVCS_DATA_SAVED_requests", savedRequests)
  812.                                                             VA.SetText("AVCS_DATA_SAVED_name_" + savedRequests.ToString(), "AVCS_SENS_SensorAverages_" + VA.GetText("AVCS_SENS_SET_BASELINE_LEVEL") + "_" + itemLabel)
  813.                                                             VA.SetText("AVCS_DATA_SAVED_value_" + savedRequests.ToString(), itemData)
  814.                                                             VA.SetText("AVCS_SENS_SensorAverages_" + VA.GetText("AVCS_SENS_SET_BASELINE_LEVEL") + "_" + itemLabel, itemData)
  815.                                                         end if
  816.                                                     end if
  817.                                                 end if
  818.                                             else
  819.                                                 VA.SetText("AVCS_SENS_" + itemLabel, itemValue)
  820.                                             end if
  821.                                         else
  822.                                             if (debugSensors)
  823.                                                 VA.WriteToLog("AVCS SENS ERROR at TryParse Decimal dTa - check code at dTa Calc", "red")
  824.                                             end if
  825.                                         end if
  826.                                     end if
  827.                                 else
  828.                                     VA.SetText("AVCS_SENS_" + itemLabel, itemValue)
  829.                                 end if
  830.                             end if
  831.                             counter += 1
  832.                         end if
  833.                     next
  834.                    
  835.                     if ((VA.GetInt("AVCS_SENS_MAIN_INTERVAL") isNot nothing) andAlso (VA.GetInt("AVCS_SENS_MAIN_INTERVAL") < 100))
  836.                         VA.SetInt("AVCS_SENS_MAIN_INTERVAL", VA.GetInt("AVCS_SENS_MAIN_INTERVAL") + 1)
  837.                     elseif (VA.GetInt("AVCS_SENS_MAIN_INTERVAL") is nothing)
  838.                         VA.SetInt("AVCS_SENS_MAIN_INTERVAL", 1)
  839.                     end if
  840.                    
  841.                     if (debugStopwatch)
  842.                         VA.WriteToLog("Current Main Interval: " + VA.GetInt("AVCS_SENS_MAIN_INTERVAL").ToString(), "pink")
  843.                     end if
  844.                    
  845.                     'Save To File function for Get Baseline calls
  846.                     if (VA.GetInt("AVCS_DATA_SAVED_requests") isNot nothing)
  847.                         if ((VA.GetBoolean("AVCS_SENS_GET_BASELINE") isNot nothing) andAlso (VA.GetBoolean("AVCS_SENS_GET_BASELINE")))
  848.                             VA.SetText("AVCS_SENS_SET_BASELINE_LEVEL", "")
  849.                             VA.SetBoolean("AVCS_SENS_ReloadBaselines", true)
  850.                             VA.Command.Execute("F_SFS_SAVE_BASELINES", true)
  851.                             VA.SetBoolean("AVCS_SENS_GET_BASELINE", false)
  852.                         else   
  853.                             VA.Command.Execute("F_SFS_SAVE_DATA", true)
  854.                         end if
  855.                     end if
  856.                    
  857.                     if (debugSensors)
  858.                         VA.WriteToLog("New DataPointsMax = " + itemDataPointsTotal.ToString(), "orange")
  859.                         VA.WriteToLog("New System Uptime = " + VA.GetText("AVCS_SENS_WindowsOS_Uptime"), "orange")
  860.                     end if
  861.                    
  862.                     'AVCS Differential Diagnosis Algorithm Section ================================
  863.                     if ((VA.GetDecimal("AVCS_SENS_TempDHTc") isNot nothing) andAlso ((itemDataPointsTotal >= itemDataPointsMax) and ((intervalSensors = 4) or (intervalSensors = 9))))
  864.                         if (debugArduino)
  865.                             VA.WriteToLog("AVCS SENS - Diagnostic Interval Entered....", "yellow")
  866.                         end if
  867.                         if ((VA.GetBoolean("AVCS_SENS_Diagnosing") isNot nothing) andAlso (not(VA.GetBoolean("AVCS_SENS_Diagnosing"))))
  868.                             VA.SetBoolean("AVCS_SENS_Diagnosing", true)
  869.                             if ((VA.GetText("AVCS_SENS_DIAGNOSTIC_SENSORS") isNot nothing) andAlso (VA.GetText("AVCS_SENS_DIAGNOSTIC_SENSORS").Contains(",")))
  870.                                 diagnosticsSensors = VA.GetText("AVCS_SENS_DIAGNOSTIC_SENSORS").Split(",").ToArray()
  871.                             end if
  872.                            
  873.                             dim countLow as integer = 0
  874.                             dim countMed as integer = 0
  875.                             dim countHigh as integer = 0
  876.                             dim countExtr as integer = 0
  877.                            
  878.                             for i as integer = 0 to diagnosticsSensors.GetUpperBound(0)
  879.                                 if ((diagnosticsSensors(i) <> "") andAlso (VA.GetText("AVCS_SENS_" + diagnosticsSensors(i)) isNot nothing))
  880.                                     currentLabel = VA.GetText("AVCS_SENS_" + diagnosticsSensors(i))
  881.                                     currentAverage = -1
  882.                                    
  883.                                     'If it is temperature sensor, data to get is deltaT over Ambient
  884.                                     if (currentLabel.StartsWith("Temp"))
  885.                                         if (VA.GetDecimal("AVCS_SENS_LastAverage_dTa_" + currentLabel) isNot nothing)
  886.                                             currentAverage = VA.GetDecimal("AVCS_SENS_LastAverage_dTa_" + currentLabel)
  887.                                             if (debugSensors)
  888.                                                 VA.WriteToLog("AVCS SENS SUCCESS at DifferentialDiagnosis - dta Temp currentAverage is:" + currentAverage.ToString(), "green")
  889.                                             end if
  890.                                         else
  891.                                             if (debugSensors)
  892.                                                 VA.WriteToLog("AVCS SENS Error at DifferentialDiagnosis - dta Temp currentAverage is nothing", "red")
  893.                                             end if
  894.                                         end if
  895.                                     else
  896.                                         if (VA.GetDecimal("AVCS_SENS_LastAverage_" + currentLabel) isNot nothing)
  897.                                             currentAverage = VA.GetDecimal("AVCS_SENS_LastAverage_" + currentLabel)
  898.                                             if (debugSensors)
  899.                                                 VA.WriteToLog("AVCS SENS SUCCESS at DifferentialDiagnosis - non Temp currentAverage is:" + currentAverage.ToString(), "green")
  900.                                             end if
  901.                                         else
  902.                                             if (debugSensors)
  903.                                                 VA.WriteToLog("AVCS SENS Error at DifferentialDiagnosis - non Temp currentAverage is nothing", "red")
  904.                                             end if
  905.                                         end if
  906.                                     end if
  907.                                    
  908.                                     if (currentAverage > -1)
  909.                                         DifferentialDiagnostics(currentLabel,currentAverage)
  910.                                        
  911.                                         if (VA.GetText("AVCS_SENS_Current_LevelBracket") isNot nothing)
  912.                                             select case (VA.GetText("AVCS_SENS_Current_LevelBracket"))
  913.                                                 case historicLevels(0)
  914.                                                     countLow += 1
  915.                                                 case historicLevels(1)
  916.                                                     countMed += 1
  917.                                                 case historicLevels(2)
  918.                                                     countHigh += 1
  919.                                                 case historicLevels(3)
  920.                                                     countExtr += 1
  921.                                                 case else
  922.                                                     VA.WriteToLog("AVCS SENS ERROR: Select Case levelBracket failed", "red")
  923.                                             end select
  924.                                         end if
  925.                                         if (debugSensors)
  926.                                             VA.WriteToLog("AVCS SENS DifferentialDiagnosis complete on this set", "green")
  927.                                         end if
  928.                                     else
  929.                                         if (debugSensors)
  930.                                             VA.WriteToLog("AVCS SENS Error at DifferentialDiagnosis Section of Timer Event line 1060", "red")
  931.                                         end if
  932.                                     end if
  933.                                 else
  934.                                     if (debugSensors)
  935.                                         VA.WriteToLog("AVCS SENS Error at DifferentialDiagnosis Else line 1031", "red")
  936.                                     end if
  937.                                 end if
  938.                             next
  939.                            
  940.                             'Evaluate number of sensors reporting state similar to a low-extreme baseline to assume overall PC state
  941.                             select case (GetLargestInteger(countLow,countMed,countHigh,countExtr))
  942.                                 case countLow
  943.                                     VA.SetText("AVCS_SENS_Current_LevelBracket", "LOW")
  944.                                 case countMed
  945.                                     VA.SetText("AVCS_SENS_Current_LevelBracket", "MEDIUM")
  946.                                 case countHigh
  947.                                     VA.SetText("AVCS_SENS_Current_LevelBracket", "HIGH")
  948.                                 case countExtr
  949.                                     VA.SetText("AVCS_SENS_Current_LevelBracket", "EXTREME")
  950.                                 case else
  951.                                     VA.SetText("AVCS_SENS_Current_LevelBracket", "LOW")
  952.                             end select
  953.                             countLow = nothing
  954.                             countMed = nothing
  955.                             countHigh = nothing
  956.                             countExtr = nothing
  957.                             VA.SetBoolean("AVCS_SENS_Diagnosing", false)
  958.                             if (debugArduino)
  959.                                 VA.WriteToLog("AVCS SENS - Diagnostic Interval Completed....", "green")
  960.                             end if
  961.                         else
  962.                             if (debugArduino)
  963.                                 VA.WriteToLog("AVCS SENS - Diagnostic Interval Postponed (bool in use)....", "yellow")
  964.                             end if
  965.                         end if
  966.                     end if
  967.                    
  968.                 end if
  969.                
  970.                
  971.             else
  972.                 VA.WriteToLog("AVCS AIDA64 Sensor Monitor has been terminated...", "black")
  973.                 VA.SetBoolean("AVCS_SENS_Monitoring", nothing)
  974.                 VA.SetInt("AVCS_SENS_MAIN_INTERVAL", nothing)
  975.                 if (VA.GetBoolean("AVCS_SENS_UnloadClose") is nothing)
  976.                     VA.SetText("AVCS_SENS_TTS_WILDCARD", "Sensor Data [Monitoring;;] Systems have been [terminated;disabled;ended]")
  977.                     VA.Command.Execute("F_SAY_TTS", true)
  978.                 end if
  979.                 sender.Stop()
  980.             end if
  981.            
  982.             if (debugStopwatch)
  983.                 debugWatch.Stop()
  984.                 VA.WriteToLog("Interval " + intervalSensors.ToString() + " Function Time to Complete: " + debugWatch.Elapsed.TotalMilliseconds.ToString() + "ms", "pink")
  985.             end if
  986.            
  987.             VA.SetBoolean("AVCS_MAIN_TIMER_WORKING", nothing)
  988.         end if
  989.     End Sub
  990.    
  991.     Private Sub MonitorTimer(ByVal timerInterval as integer)
  992.         dim t as New System.Timers.Timer(timerInterval)
  993.         AddHandler t.Elapsed, AddressOf MonitorTimerElapsed
  994.         VA.WriteToLog("AVCS AIDA64 Sensor Monitor is now running...", "black")
  995.         t.Start()
  996.     End Sub
  997.    
  998.    
  999.     Public Sub Main()
  1000.        
  1001.         'Begin AVCS AIDA64 Sensor Monitor Systems
  1002.         if ((VA.GetBoolean("AVCS_SENS_Monitoring") isNot nothing) andAlso (VA.GetBoolean("AVCS_SENS_Monitoring")))
  1003.            
  1004.             MonitorDebug(false)
  1005.             'DataPointsTotal Config Setting -- when changed, new baselines must be established to include equal data points
  1006.             if ((VA.GetDecimal("AVCS_SENS_DataPointsTotal") isNot nothing) andAlso (Decimal.TryParse(VA.GetDecimal("AVCS_SENS_DataPointsTotal"), itemDataPointsMax)))
  1007.                 if (itemDataPointsMax < 10)
  1008.                     itemDataPointsMax = 10
  1009.                     if (debugSensors)
  1010.                         VA.WriteToLog("AVCS SENS ERROR: DataPointsTotal lower than 10, resetting to minimum 10...", "red")
  1011.                     end if
  1012.                 end if
  1013.             end if
  1014.             if ((VA.GetInt("AVCS_SENS_MonitorTimerDelay") isNot nothing) andAlso (Integer.TryParse(VA.GetInt("AVCS_SENS_MonitorTimerDelay"), MonitorTimerDelay)))
  1015.                 if (MonitorTimerDelay < 1000)
  1016.                     MonitorTimerDelay = 1000
  1017.                     if (debugSensors)
  1018.                         VA.WriteToLog("AVCS SENS ERROR: MonitorTimerDelay lower than 1 second, resetting to minimum 1 sec...", "red")
  1019.                     end if
  1020.                 end if
  1021.             end if
  1022.             VA.SetBoolean("AVCS_SENS_Diagnosing", false)
  1023.             VA.SetBoolean("AVCS_SENS_Logging", true)
  1024.             MonitorTimer(MonitorTimerDelay)
  1025.             'Check if called by autostart - bypass TTS if not called by command or Sensor Menu
  1026.             if (VA.ParseTokens("{CMDACTION}") = "Plugin")
  1027.                 VA.SetText("AVCS_SENS_TTS_WILDCARD", "Sensor Data [Monitoring;;] Systems are now [active;online;ready;engaged]")
  1028.                 VA.Command.Execute("F_SAY_TTS", true)
  1029.             end if
  1030.         else
  1031.             VA.WriteToLog("AVCS AIDA64 Sensor Monitor called but Shared Memory Monitor not running... exiting...", "red")
  1032.             VA.SetBoolean("AVCS_SENS_Logging", false)
  1033.             VA.SetBoolean("AVCS_SENS_Monitoring", false)
  1034.             MonitorDebug(true)
  1035.         end if
  1036.         VA.SetBoolean("AVCS_SENS_Monitor_Startup", nothing)
  1037.     End Sub
  1038.  
  1039. End Class
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement