LibreHardwareMonitor / LibreHardwareMonitor/LibreHardwareMonitor

not able to read or get sensor data from lpcio in custom tree

Open
#1,208 0 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Dominant language
C#
Stars
9.1k
Forks
1k
Avg merge
1d 4h
Merged PRs (30d)
15

Description

iknow this isnt a problem with libremonitor as such because i am able to read lpcio just fine from the librehardware program

but when i am trying to implement it into my own project all iam getting out from the lpcio is fan controll(without any data) but i am not getting voltage, temprature or fans but every other sensors and hardware i am getting out just fine

i am hoping someone can help me with this small issue or atleast guide me on how to get it to work
as i am abit lost on how to get it

my readings

Hardware: ASUS ROG MAXIMUS XI FORMULA, Type: Motherboard
Subhardware: Nuvoton NCT6798D, Type: SuperIO
Sensor: Fan #1, Type: Control, Value: , Min: , Max:
Sensor: Fan #2, Type: Control, Value: , Min: , Max:
Sensor: Fan #3, Type: Control, Value: , Min: , Max:
Sensor: Fan #4, Type: Control, Value: , Min: , Max:
Sensor: Fan #5, Type: Control, Value: , Min: , Max:
Sensor: Fan #6, Type: Control, Value: , Min: , Max:
Sensor: Fan #7, Type: Control, Value: , Min: , Max:

librehardwares reading

+- ASUS ROG MAXIMUS XI FORMULA (/motherboard)
| |
| +- Nuvoton NCT6798D (/lpc/nct6798d/0)
| | +- Vcore : 0.992 0.976 0.992 (/lpc/nct6798d/0/voltage/0)
| | +- Voltage #2 : 0.984 0.976 0.984 (/lpc/nct6798d/0/voltage/1)
| | +- AVCC : 3.36 3.36 3.36 (/lpc/nct6798d/0/voltage/2)
| | +- +3.3V : 3.216 3.2 3.216 (/lpc/nct6798d/0/voltage/3)
| | +- Voltage #5 : 1.704 1.704 1.704 (/lpc/nct6798d/0/voltage/4)
| | +- Voltage #6 : 0.264 0.264 0.264 (/lpc/nct6798d/0/voltage/5)
| | +- Voltage #7 : 0.936 0.936 0.936 (/lpc/nct6798d/0/voltage/6)
| | +- 3VSB : 3.36 3.36 3.36 (/lpc/nct6798d/0/voltage/7)
| | +- VBat : 3.104 3.104 3.104 (/lpc/nct6798d/0/voltage/8)
| | +- VTT : 0.528 0.528 0.528 (/lpc/nct6798d/0/voltage/9)
| | +- Voltage #11 : 0.536 0.536 0.536 (/lpc/nct6798d/0/voltage/10)
| | +- Voltage #12 : 0.48 0.48 0.48 (/lpc/nct6798d/0/voltage/11)
| | +- Voltage #13 : 1.056 1.056 1.064 (/lpc/nct6798d/0/voltage/12)
| | +- Voltage #14 : 0.608 0.608 0.608 (/lpc/nct6798d/0/voltage/13)
| | +- Voltage #15 : 0.528 0.528 0.528 (/lpc/nct6798d/0/voltage/14)
| | +- CPU Core : 43 43 48 (/lpc/nct6798d/0/temperature/0)
| | +- Temperature #1 : 33.5 33.5 33.5 (/lpc/nct6798d/0/temperature/1)
| | +- Temperature #2 : 29 29 29 (/lpc/nct6798d/0/temperature/2)
| | +- Temperature #3 : 29 29 29 (/lpc/nct6798d/0/temperature/3)
| | +- Temperature #4 : 22 22 22 (/lpc/nct6798d/0/temperature/4)
| | +- Temperature #5 : 28 28 28 (/lpc/nct6798d/0/temperature/5)
| | +- Temperature #6 : 55 55 55 (/lpc/nct6798d/0/temperature/6)
| | +- Fan #1 : 0 0 0 (/lpc/nct6798d/0/fan/0)
| | +- Fan #2 : 0 0 0 (/lpc/nct6798d/0/fan/1)
| | +- Fan #3 : 0 0 0 (/lpc/nct6798d/0/fan/2)
| | +- Fan #4 : 0 0 0 (/lpc/nct6798d/0/fan/3)
| | +- Fan #5 : 727.763 727.763 803.571 (/lpc/nct6798d/0/fan/4)
| | +- Fan #6 : 0 0 0 (/lpc/nct6798d/0/fan/5)
| | +- Fan #7 : 2772.07 2749.49 2800.83 (/lpc/nct6798d/0/fan/6)
| | +- Fan #1 : 60 60 60 (/lpc/nct6798d/0/control/0)
| | +- Fan #2 : 100 100 100 (/lpc/nct6798d/0/control/1)
| | +- Fan #3 : 60 60 60 (/lpc/nct6798d/0/control/2)
| | +- Fan #4 : 62.7451 61.9608 69.8039 (/lpc/nct6798d/0/control/3)
| | +- Fan #5 : 34.1177 32.9412 41.9608 (/lpc/nct6798d/0/control/4)
| | +- Fan #6 : 100 100 100 (/lpc/nct6798d/0/control/5)
| | +- Fan #7 : 100 100 100 (/lpc/nct6798d/0/control/6)
|

the snippet for my sensor handling

private void PopulateHardwareSubtree(IHardware hardware, TreeViewItem parentNode)
        {
            try
            {
                foreach (var subHardware in hardware.SubHardware)
                {
                    var subHardwareNode = new TreeViewItem
                    {
                        Header = new StackPanel
                        {
                            Orientation = Orientation.Horizontal,
                            Children =
                    {
                        new Image
                        {
                            Width = 16,
                            Height = 16,
                            Margin = new Thickness(0, 0, 5, 0),
                            Source = HardwareImage.Instance.GetImage(subHardware.HardwareType)
                        },
                        new TextBlock { Text = subHardware.Name }
                    }
                        }
                    };

                    PopulateHardwareSubtree(subHardware, subHardwareNode);

                    parentNode.Items.Add(subHardwareNode);

                    // Process sensors for the current sub-hardware
                    foreach (var sensor in subHardware.Sensors)
                    {
                        ProcessSensor(sensor, subHardwareNode);
                    }
                }

                // Process sensors for the main hardware
                foreach (var sensor in hardware.Sensors)
                {
                    ProcessSensor(sensor, parentNode);
                }

                // Dictionary to store DataGrids for each sensor type
                Dictionary<string, DataGrid> sensorDataGrids = new Dictionary<string, DataGrid>();

                foreach (var sensor in hardware.Sensors)
                {
                    string sensorTypeKey = sensor.SensorType.ToString(); // Use the enum name as the key

                    string formattedValue = sensorNodes.ValueToString(sensor.Value, sensor.SensorType);
                    string formattedMin = sensorNodes.ValueToString(sensor.Min, sensor.SensorType);
                    string formattedMax = sensorNodes.ValueToString(sensor.Max, sensor.SensorType);

                    log.Info($"Sensor: {sensor.Name}, Type: {sensor.SensorType}, Value: {formattedValue}, Min: {formattedMin}, Max: {formattedMax}");

                    // Check if the DataGrid for the sensor type exists, otherwise create one
                    if (!sensorDataGrids.TryGetValue(sensorTypeKey, out var sensorDataGrid))
                    {
                        // Create a new DataGrid
                        sensorDataGrid = new DataGrid
                        {
                            AutoGenerateColumns = false,
                            CanUserAddRows = false,
                            IsReadOnly = true, // Allow editing
                            AlternatingRowBackground = Brushes.LightGray, // Set alternating row color

                            // Define columns for the DataGrid
                            Columns =
                    {
                        new DataGridTextColumn
                        {
                            Header = "Sensor Name",
                            Binding = new System.Windows.Data.Binding("SensorName")
                        },
                        new DataGridTextColumn
                        {
                            Header = "Value",
                            Binding = new System.Windows.Data.Binding("Value")
                        },
                        new DataGridTextColumn
                        {
                            Header = "Min",
                            Binding = new System.Windows.Data.Binding("Min")
                        },
                        new DataGridTextColumn
                        {
                            Header = "Max",
                            Binding = new System.Windows.Data.Binding("Max")
                        }
                    }
                        };

                        // Add the DataGrid to the parent node
                        AddImagePanelToParent(parentNode, new StackPanel { Children = { sensorDataGrid } }, sensorTypeKey, sensor.SensorType);

                        // Store the DataGrid in the dictionary for future use
                        sensorDataGrids[sensorTypeKey] = sensorDataGrid;
                    }

                    // Add the current sensor node to the corresponding DataGrid
                    sensorDataGrid.Items.Add(new SensorNodes.SensorData
                    {
                        SensorName = sensor.Name,
                        Value = formattedValue,
                        Min = formattedMin,
                        Max = formattedMax
                    });
                }
            }
            catch (Exception ex)
            {
                log.Error("An error occurred in PopulateHardwareSubtree", ex);
                // Handle the exception as needed, e.g., show a message box or log the error
            }
        }

Contributor guide

No contributing guide indexed for this repository

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start at the PopulateHardwareSubtree entry point and inspect how hardware.Sensors and subHardware.Sensors are traversed and formatted. Compare the custom tree's sensor types and values with the provided LibreHardwareMonitor output; done means the custom project exposes the expected voltage, temperature, fan, and control readings.

Written by the indexing model from the issue text.

Assessment

Tech stack
csharp
Domain
operating-systems
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Stale
Clarity
Needs clarification
Newbie friendliness
25/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.