'AVCS SENS Parse Data Last Average or Differential Diagnostic* Report per Sensor Label ' *(When paired with AVCS-DHT1) - Based on current & historic PC operational state level bracket data (low/medium/high/extreme) ' by SemlerPDX Mar2022 ' VETERANS-GAMING.COM 'Format of incoming data from global variable: 'VA.SetText("AVCS_SENS_DIAGNOSTICS_" + currentLabel, differentialDiagnosis) 'differentialDiagnosis = ' currentAverage.ToString() + "," + ' historicAverage.ToString() + "," + ' averageDistance.ToString() + "," + ' percentDifference.ToString() + "," + ' differentialDiagnosis ("stable","higher","lower") ' output to ~~avcs_sens_tts_final Imports Microsoft.VisualBasic Imports System Imports System.IO Imports System.IO.Ports Imports System.Math Imports System.Text.RegularExpressions Imports System.Collections Imports System.Collections.Generic Imports System.Data Imports System.Drawing Imports System.Diagnostics Imports System.Text Imports System.Windows.Forms Imports System.Linq Imports System.Xml Imports System.Xml.Linq Imports System.Threading Imports System.Threading.Tasks Public Class VAInline dim contents() as string dim sensorName as string = "" dim sensorUnit as string = "" dim differentialDiagnosis as string = "" dim lastAverage as decimal = 0 dim percentDifference as decimal = 0 dim decimalPlacesMax as integer = 1 dim roundedFanValue as string = "0" dim debugReports as boolean = false Public Function GetRoundedDecimal(ByVal thisDecimal as decimal, ByVal decimalPlaces as integer) try 'Try to compare decimal with integer version of itself to discover decimal places, then round dim checkInteger as Int32 = Convert.ToInt32(thisDecimal) if (thisDecimal = checkInteger) 'For TTS brevity use the one that couldn't end with .000 thisDecimal = checkInteger elseif (checkInteger <> thisDecimal) dim roundDecimal as Double = thisDecimal thisDecimal = Round(roundDecimal, decimalPlaces) end if catch 'Result is a whole number already, does not need rounding for TTS brevity end try return thisDecimal end function Public Function GetRoundedFanRPM(ByVal thisFanRPM as decimal) dim thisRoundedRPM as string = GetRoundedDecimal(thisFanRPM, 0).ToString() thisFanRPM = GetRoundedDecimal(thisFanRPM, 0) if (thisFanRPM > 1000) thisFanRPM /= 100 thisFanRPM = GetRoundedDecimal(thisFanRPM, 0) if (thisFanRPM.ToString().EndsWith("0")) thisRoundedRPM = "around " + (thisFanRPM * 100).ToString() else thisRoundedRPM = "around " + thisFanRPM.ToString() + " hundred" end if elseif (thisFanRPM <= 999) and (thisFanRPM > 100) thisFanRPM /= 10 thisRoundedRPM = "around " + ((GetRoundedDecimal(thisFanRPM, 0)) * 10).ToString() end if return thisRoundedRPM end function Public Sub Main() if (debugReports) 'AVCS_SENS_DIAGNOSTICS_dTa_TempCPU 'VA.SetText("~~avcs_sens_tts_label", "CPU") 'VA.SetText("~~avcs_sens_sensor_label", "dTa_TempCPU") 'VA.SetText("~~avcs_sens_tts_unit", "degrees over ambient") 'VA.SetText("AVCS_SENS_Current_LevelBracket", "HIGH") (phased out in v4) end if if ((VA.GetBoolean("AVCS_SENS_DebugReports") isNot nothing) andAlso (VA.GetBoolean("AVCS_SENS_DebugReports"))) debugReports = true end if if ((VA.GetText("~~avcs_sens_tts_label") isNot nothing) andAlso (VA.GetText("~~avcs_sens_tts_unit") isNot nothing) andAlso (VA.GetText("~~avcs_sens_sensor_label") isNot nothing) andAlso (VA.GetText("~~avcs_sens_sensor_type") isNot nothing)) sensorName = VA.GetText("~~avcs_sens_tts_label") sensorUnit = VA.GetText("~~avcs_sens_tts_unit") if (VA.GetText("~~avcs_sens_sensor_label") isNot nothing) VA.GetText("~~avcs_sens_sensor_label") if (VA.GetText("AVCS_SENS_DIAGNOSTICS_" + VA.GetText("~~avcs_sens_sensor_label")) isNot nothing) 'VA.WriteToLog("HAS DIAGNOSTIC DATA!!","green") try contents = VA.GetText("AVCS_SENS_DIAGNOSTICS_" + VA.GetText("~~avcs_sens_sensor_label")).Replace(" ","").Split(",") if (debugReports) for i as integer = 0 to contents.GetUpperBound(0) VA.WriteToLog("contents("+ i.ToString() +") = " + contents(i).ToString(), "yellow") next end if VA.SetText("AVCS_SENS_TTS_LastQuery_CurrentAverage", contents(1).ToString()) VA.SetText("AVCS_SENS_TTS_LastQuery_HistoricAverage", contents(2).ToString()) VA.SetText("AVCS_SENS_TTS_LastQuery_AverageDistance", contents(3).ToString()) VA.SetText("AVCS_SENS_TTS_LastQuery_PercentDifference", contents(4).ToString()) VA.SetText("AVCS_SENS_TTS_LastQuery_DifferentialDiagnosis", contents(5).ToString()) 'Set this value to be available immediately as "that" in AVCS Voice Calculator & Conversions Profile VA.SetDecimal("AVCS_CALC_LastResult", contents(1).ToString()) if (contents(5) <> "") if (contents(5) = "stable") if ((VA.GetText("~~avcs_sens_sensor_label").EndsWith("fan")) or (VA.GetText("~~avcs_sens_sensor_label").EndsWith("Fan")))' or (sensorName.StartsWith("fan")) or (sensorName.Contains("Fan")) or (sensorName.Contains("fan")) or (sensorName.Contains("Fan"))) sensorName = sensorName + " fan" roundedFanValue = GetRoundedFanRPM(Convert.ToDecimal(contents(1))) differentialDiagnosis = "[The;My;] " + sensorName + " is [;;;;;reporting;;;reading;] [;;;;;stable;;;standard;;;typical;;;nominal;;;] at " + roundedFanValue + " " + sensorUnit VA.WriteToLog("Current Average " + sensorName.Replace("_"," ").Replace("dTa","ΔT/a") + " value: " + roundedFanValue.Replace("around ", "").Replace(" hundred", "00") + " " + sensorUnit, "blank") else if ((sensorName.ToLower() = "cpu") andAlso (VA.GetText("~~avcs_sens_sensor_type") = "temp")) sensorName = sensorName + " core" end if differentialDiagnosis = "[The;My;] " + sensorName + " is [;;;;;reporting;;;reading;;;] [;;;;stable;;;standard;;;typical;;;nominal;;;] at " + GetRoundedDecimal(Convert.ToDecimal(contents(1)), 1).ToString() + " " + sensorUnit VA.WriteToLog("Current Average " + sensorName.Replace("_"," ").Replace("dTa","ΔT/a") + " value: " + GetRoundedDecimal(Convert.ToDecimal(contents(1)), 1).ToString() + " " + sensorUnit.Replace("percent", "%"), "blank") end if else if ((VA.GetText("~~avcs_sens_sensor_label").EndsWith("fan")) or (VA.GetText("~~avcs_sens_sensor_label").EndsWith("Fan")))' or (sensorName.StartsWith("fan")) or (sensorName.Contains("Fan")) or (sensorName.Contains("fan")) or (sensorName.Contains("Fan"))) sensorName = sensorName + " fan" roundedFanValue = GetRoundedFanRPM(Convert.ToDecimal(contents(1))) differentialDiagnosis = "[The;My;] " + sensorName + " is [;;;;;averaging;reporting;reading;] " + contents(5) + " than [standard;typical;baseline] at " + roundedFanValue + " " + sensorUnit VA.WriteToLog("Current Average " + sensorName.Replace("_"," ").Replace("dTa","ΔT/a") + " value: " + roundedFanValue.Replace("around ", "").Replace(" hundred", "00") + " " + sensorUnit + " (" + contents(5) + " than typical)", "blank") else if ((sensorName.ToLower() = "cpu") andAlso (VA.GetText("~~avcs_sens_sensor_type") = "temp")) sensorName = sensorName + " core" end if differentialDiagnosis = "[The;My;] " + sensorName + " is [;;;;;averaging;reporting;reading;] " + GetRoundedDecimal(Convert.ToDecimal(contents(4)), 0).ToString() + " percent " + contents(5) + " than [standard;typical;baseline] at " + GetRoundedDecimal(Convert.ToDecimal(contents(1)), 1).ToString() + " " + sensorUnit VA.WriteToLog("Current Average " + sensorName.Replace("_"," ").Replace("dTa","ΔT/a") + " value: " + GetRoundedDecimal(Convert.ToDecimal(contents(1)), 1).ToString() + " " + sensorUnit.Replace("percent", "%") + " (" + contents(5) + " than typical)", "blank") end if end if else differentialDiagnosis = "[The;My;] " + sensorName + " is currently [unavailable;not reporting;silent] for some reason." differentialDiagnosis = "[I do not have;There is no;I cannot locate] " + sensorName + " sensor data." differentialDiagnosis = "[I do not have;There is no;I cannot locate] " + sensorName + " " + VA.GetText("~~avcs_sens_sensor_type").Replace("temp","temperature").Replace("fan_use","fan use").Replace("use","utilization") + " sensor data. Please check configuration." VA.WriteToLog("Current Average " + VA.GetText("~~avcs_sens_sensor_label").Replace("_"," ").Replace("dTa","ΔT/a") + " is unavailable. Please check configuration.", "red") end if catch differentialDiagnosis = "[The;My;] " + sensorName + " is currently [unavailable;not reporting;silent] for some reason." differentialDiagnosis = "[I do not have;There is no;I cannot locate] " + sensorName + " sensor data." differentialDiagnosis = "[I do not have;There is no;I cannot locate] " + sensorName + " " + VA.GetText("~~avcs_sens_sensor_type").Replace("temp","temperature").Replace("fan_use","fan use").Replace("use","utilization") + " sensor data. Please check configuration." VA.WriteToLog("Current Average " + VA.GetText("~~avcs_sens_sensor_label").Replace("_"," ").Replace("dTa","ΔT/a") + " is unavailable. Please check configuration.", "red") finally VA.SetText("~~avcs_sens_tts_final", differentialDiagnosis.Replace("_"," ")) if (debugReports) VA.WriteToLog("~~avcs_sens_tts_final = " + VA.ParseTokens("{TXT:~~avcs_sens_tts_final}"), "yellow") end if end try else 'VA.WriteToLog("HAS NO DIAGNOSTIC DATA!!","red") if ((VA.GetDecimal("AVCS_SENS_LastAverage_" + VA.GetText("~~avcs_sens_sensor_label")) isNot nothing) andAlso (Decimal.TryParse(VA.GetDecimal("AVCS_SENS_LastAverage_" + VA.GetText("~~avcs_sens_sensor_label")), lastAverage))) 'Set this value to be available immediately as "that" in AVCS Voice Calculator & Conversions Profile VA.SetDecimal("AVCS_CALC_LastResult", lastAverage.ToString()) if ((VA.GetText("~~avcs_sens_sensor_label").EndsWith("fan")) or (VA.GetText("~~avcs_sens_sensor_label").EndsWith("Fan"))) ' or (sensorName.StartsWith("fan")) or (sensorName.Contains("Fan")) or (sensorName.Contains("fan")) or (sensorName.Contains("Fan"))) sensorName = sensorName + " fan" roundedFanValue = GetRoundedFanRPM(lastAverage) differentialDiagnosis = "[The;My;] " + sensorName + " is [;;;;;reporting;;;reading;] [at;;;] " + roundedFanValue + " " + sensorUnit VA.WriteToLog("Current Average " + sensorName.Replace("_"," ").Replace("dTa","ΔT/a") + " value: " + roundedFanValue.Replace("around ", "").Replace(" hundred", "00") + " " + sensorUnit, "blank") else if ((sensorName.ToLower() = "cpu") andAlso (VA.GetText("~~avcs_sens_sensor_type") = "temp")) sensorName = sensorName + " core" end if if ((VA.GetText("~~avcs_sens_sensor_type") = "voltage") or (VA.GetText("~~avcs_sens_sensor_type") = "amperage") or (VA.GetText("~~avcs_sens_sensor_type") = "wattage")) decimalPlacesMax = 2 else decimalPlacesMax = 1 end if differentialDiagnosis = "[The;My;] " + sensorName + " is [;;;;;reporting;;;reading;;;] [;;;;stable;;;standard;;;typical;;;nominal;;;] at " + GetRoundedDecimal(lastAverage, decimalPlacesMax).ToString() + " " + sensorUnit VA.WriteToLog("Current Average " + sensorName.Replace("_"," ").Replace("dTa","ΔT/a") + " value: " + GetRoundedDecimal(lastAverage, decimalPlacesMax).ToString() + " " + sensorUnit.Replace("percent", "%"), "blank") end if else differentialDiagnosis = "[The;My;] " + sensorName + " is currently unavailable. Please check configuration." differentialDiagnosis = "[I do not have;There is no;I cannot locate] " + sensorName + " " + VA.GetText("~~avcs_sens_sensor_type").Replace("temp","temperature").Replace("fan_use","fan use").Replace("use","utilization") + " sensor data. Please check configuration." VA.WriteToLog("Current Average " + VA.GetText("~~avcs_sens_sensor_label").Replace("_"," ").Replace("dTa","ΔT/a") + " is unavailable. Please check configuration.", "red") end if VA.SetText("~~avcs_sens_tts_final", differentialDiagnosis.Replace("_"," ")) if (debugReports) VA.WriteToLog("~~avcs_sens_tts_final = " + VA.ParseTokens("{TXT:~~avcs_sens_tts_final}"), "yellow") end if end if end if end if End Sub End Class