mirror of
https://github.com/morgan9e/macos-stats
synced 2026-04-14 00:04:15 +09:00
feat: moved Fans to the top at the Sensors. Refactor the Sensor type to be more generic. Added Fan structure to the Sensors module. (first steps to merge Fans and Sensors modules)
This commit is contained in:
@@ -62,13 +62,13 @@ public class Sensors: Module {
|
||||
}
|
||||
}
|
||||
|
||||
private func usageCallback(_ raw: [Sensor_t]?) {
|
||||
private func usageCallback(_ raw: [Sensor_p]?) {
|
||||
guard let value = raw else {
|
||||
return
|
||||
}
|
||||
|
||||
var list: [KeyValue_t] = []
|
||||
value.forEach { (s: Sensor_t) in
|
||||
value.forEach { (s: Sensor_p) in
|
||||
if s.state {
|
||||
list.append(KeyValue_t(key: s.key, value: s.formattedMiniValue))
|
||||
}
|
||||
|
||||
@@ -25,13 +25,13 @@ internal class Popup: NSView, Popup_p {
|
||||
fatalError("init(coder:) has not been implemented")
|
||||
}
|
||||
|
||||
internal func setup(_ values: [Sensor_t]?) {
|
||||
internal func setup(_ values: [Sensor_p]?) {
|
||||
guard values != nil else {
|
||||
return
|
||||
}
|
||||
|
||||
var types: [SensorType] = []
|
||||
values!.forEach { (s: Sensor_t) in
|
||||
values!.forEach { (s: Sensor_p) in
|
||||
if !types.contains(s.type) {
|
||||
types.append(s.type)
|
||||
}
|
||||
@@ -45,7 +45,7 @@ internal class Popup: NSView, Popup_p {
|
||||
types.reversed().forEach { (typ: SensorType) in
|
||||
let filtered = values!.filter{ $0.type == typ }
|
||||
var groups: [SensorGroup] = []
|
||||
filtered.forEach { (s: Sensor_t) in
|
||||
filtered.forEach { (s: Sensor_p) in
|
||||
if !groups.contains(s.group) {
|
||||
groups.append(s.group)
|
||||
}
|
||||
@@ -58,7 +58,7 @@ internal class Popup: NSView, Popup_p {
|
||||
|
||||
var i: CGFloat = 0
|
||||
groups.reversed().forEach { (group: SensorGroup) in
|
||||
filtered.reversed().filter{ $0.group == group }.forEach { (s: Sensor_t) in
|
||||
filtered.reversed().filter{ $0.group == group }.forEach { (s: Sensor_p) in
|
||||
let (key, value) = popupRow(view, n: i, title: "\(s.name):", value: s.formattedValue)
|
||||
key.toolTip = s.key
|
||||
self.list[s.key] = value
|
||||
@@ -74,10 +74,10 @@ internal class Popup: NSView, Popup_p {
|
||||
self.sizeCallback?(self.frame.size)
|
||||
}
|
||||
|
||||
internal func usageCallback(_ values: [Sensor_t]) {
|
||||
internal func usageCallback(_ values: [Sensor_p]) {
|
||||
DispatchQueue.main.async(execute: {
|
||||
if self.window?.isVisible ?? false {
|
||||
values.forEach { (s: Sensor_t) in
|
||||
values.forEach { (s: Sensor_p) in
|
||||
if self.list[s.key] != nil {
|
||||
self.list[s.key]?.stringValue = s.formattedValue
|
||||
}
|
||||
|
||||
@@ -13,8 +13,8 @@ import Cocoa
|
||||
import Kit
|
||||
import IOKit.hid
|
||||
|
||||
internal class SensorsReader: Reader<[Sensor_t]> {
|
||||
internal var list: [Sensor_t] = []
|
||||
internal class SensorsReader: Reader<[Sensor_p]> {
|
||||
internal var list: [Sensor_p] = []
|
||||
}
|
||||
|
||||
internal class x86_SensorsReader: SensorsReader {
|
||||
@@ -22,23 +22,40 @@ internal class x86_SensorsReader: SensorsReader {
|
||||
super.init()
|
||||
|
||||
var available: [String] = SMC.shared.getAllKeys()
|
||||
var list: [Sensor_t] = []
|
||||
var list: [Sensor] = []
|
||||
|
||||
guard let count = SMC.shared.getValue("FNum") else {
|
||||
return
|
||||
}
|
||||
debug("Found \(Int(count)) fans", log: self.log)
|
||||
|
||||
for i in 0..<Int(count) {
|
||||
self.list.append(Fan(
|
||||
id: i,
|
||||
key: "F\(i)Ac",
|
||||
name: SMC.shared.getStringValue("F\(i)ID") ?? "Fan #\(i)",
|
||||
minSpeed: SMC.shared.getValue("F\(i)Mn") ?? 1,
|
||||
maxSpeed: SMC.shared.getValue("F\(i)Mx") ?? 1,
|
||||
value: SMC.shared.getValue("F\(i)Ac") ?? 0,
|
||||
mode: self.getFanMode(i)
|
||||
))
|
||||
}
|
||||
|
||||
available = available.filter({ (key: String) -> Bool in
|
||||
switch key.prefix(1) {
|
||||
case "T", "V", "P", "F": return true
|
||||
case "T", "V", "P": return true
|
||||
default: return false
|
||||
}
|
||||
})
|
||||
|
||||
SensorsList.forEach { (s: Sensor_t) in
|
||||
SensorsList.forEach { (s: Sensor) in
|
||||
if let idx = available.firstIndex(where: { $0 == s.key }) {
|
||||
list.append(s)
|
||||
available.remove(at: idx)
|
||||
}
|
||||
}
|
||||
|
||||
SensorsList.filter{ $0.key.contains("%") }.forEach { (s: Sensor_t) in
|
||||
SensorsList.filter{ $0.key.contains("%") }.forEach { (s: Sensor) in
|
||||
var index = 1
|
||||
for i in 0..<10 {
|
||||
let key = s.key.replacingOccurrences(of: "%", with: "\(i)")
|
||||
@@ -61,7 +78,7 @@ internal class x86_SensorsReader: SensorsReader {
|
||||
}
|
||||
}
|
||||
|
||||
self.list = list.filter({ (s: Sensor_t) -> Bool in
|
||||
self.list += list.filter({ (s: Sensor) -> Bool in
|
||||
if s.type == .temperature && s.value > 110 {
|
||||
return false
|
||||
}
|
||||
@@ -77,6 +94,23 @@ internal class x86_SensorsReader: SensorsReader {
|
||||
}
|
||||
self.callback(self.list)
|
||||
}
|
||||
|
||||
private func getFanMode(_ id: Int) -> FanMode {
|
||||
let fansMode: Int = Int(SMC.shared.getValue("FS! ") ?? 0)
|
||||
var mode: FanMode = .automatic
|
||||
|
||||
if fansMode == 0 {
|
||||
mode = .automatic
|
||||
} else if fansMode == 3 {
|
||||
mode = .forced
|
||||
} else if fansMode == 1 && id == 0 {
|
||||
mode = .forced
|
||||
} else if fansMode == 2 && id == 1 {
|
||||
mode = .forced
|
||||
}
|
||||
|
||||
return mode
|
||||
}
|
||||
}
|
||||
|
||||
internal class AppleSilicon_SensorsReader: SensorsReader {
|
||||
@@ -89,7 +123,7 @@ internal class AppleSilicon_SensorsReader: SensorsReader {
|
||||
self.fetch(type: type)
|
||||
}
|
||||
|
||||
self.list = self.list.filter({ (s: Sensor_t) -> Bool in
|
||||
self.list = self.list.filter({ (s: Sensor_p) -> Bool in
|
||||
switch s.type {
|
||||
case .temperature:
|
||||
return s.value < 110 && s.value >= 0
|
||||
@@ -152,7 +186,7 @@ internal class AppleSilicon_SensorsReader: SensorsReader {
|
||||
if let idx = self.list.firstIndex(where: { $0.name == name }) {
|
||||
self.list[idx].value = value
|
||||
} else {
|
||||
self.list.append(Sensor_t(
|
||||
self.list.append(Sensor(
|
||||
key: name,
|
||||
name: name,
|
||||
value: value,
|
||||
|
||||
@@ -17,11 +17,11 @@ internal class Settings: NSView, Settings_v {
|
||||
|
||||
private let title: String
|
||||
private var button: NSPopUpButton?
|
||||
private let list: [Sensor_t]
|
||||
private let list: [Sensor_p]
|
||||
public var callback: (() -> Void) = {}
|
||||
public var setInterval: ((_ value: Int) -> Void) = {_ in }
|
||||
|
||||
public init(_ title: String, list: [Sensor_t]) {
|
||||
public init(_ title: String, list: [Sensor_p]) {
|
||||
self.title = title
|
||||
self.list = list
|
||||
|
||||
@@ -49,7 +49,7 @@ internal class Settings: NSView, Settings_v {
|
||||
self.subviews.forEach{ $0.removeFromSuperview() }
|
||||
|
||||
var types: [SensorType] = []
|
||||
self.list.forEach { (s: Sensor_t) in
|
||||
self.list.forEach { (s: Sensor_p) in
|
||||
if !types.contains(s.type) {
|
||||
types.append(s.type)
|
||||
}
|
||||
@@ -79,14 +79,14 @@ internal class Settings: NSView, Settings_v {
|
||||
types.reversed().forEach { (typ: SensorType) in
|
||||
let filtered = self.list.filter{ $0.type == typ }
|
||||
var groups: [SensorGroup] = []
|
||||
filtered.forEach { (s: Sensor_t) in
|
||||
filtered.forEach { (s: Sensor_p) in
|
||||
if !groups.contains(s.group) {
|
||||
groups.append(s.group)
|
||||
}
|
||||
}
|
||||
|
||||
groups.reversed().forEach { (group: SensorGroup) in
|
||||
filtered.reversed().filter{ $0.group == group }.forEach { (s: Sensor_t) in
|
||||
filtered.reversed().filter{ $0.group == group }.forEach { (s: Sensor_p) in
|
||||
let row: NSView = toggleTitleRow(
|
||||
frame: NSRect(x: 0, y: y, width: view.frame.width, height: rowHeight),
|
||||
title: s.name,
|
||||
|
||||
@@ -11,22 +11,36 @@
|
||||
|
||||
import Kit
|
||||
|
||||
enum SensorGroup: String {
|
||||
internal enum SensorGroup: String {
|
||||
case CPU = "CPU"
|
||||
case GPU = "GPU"
|
||||
case system = "Systems"
|
||||
case sensor = "Sensors"
|
||||
}
|
||||
|
||||
enum SensorType: String {
|
||||
internal enum SensorType: String {
|
||||
case temperature = "Temperature"
|
||||
case voltage = "Voltage"
|
||||
case current = "Current"
|
||||
case power = "Power"
|
||||
case fan = "Fan"
|
||||
case fan = "Fans"
|
||||
}
|
||||
|
||||
struct Sensor_t {
|
||||
internal protocol Sensor_p {
|
||||
var key: String { get }
|
||||
var name: String { get }
|
||||
var value: Double { get set }
|
||||
var state: Bool { get }
|
||||
|
||||
var group: SensorGroup { get }
|
||||
var type: SensorType { get }
|
||||
|
||||
var unit: String { get }
|
||||
var formattedValue: String { get }
|
||||
var formattedMiniValue: String { get }
|
||||
}
|
||||
|
||||
internal struct Sensor: Sensor_p {
|
||||
var key: String
|
||||
var name: String
|
||||
|
||||
@@ -34,6 +48,7 @@ struct Sensor_t {
|
||||
|
||||
var group: SensorGroup
|
||||
var type: SensorType
|
||||
|
||||
var unit: String {
|
||||
get {
|
||||
switch self.type {
|
||||
@@ -96,89 +111,117 @@ struct Sensor_t {
|
||||
}
|
||||
}
|
||||
|
||||
func copy() -> Sensor_t {
|
||||
return Sensor_t(key: self.key, name: self.name, group: self.group, type: self.type)
|
||||
func copy() -> Sensor {
|
||||
return Sensor(key: self.key, name: self.name, group: self.group, type: self.type)
|
||||
}
|
||||
}
|
||||
|
||||
internal struct Fan: Sensor_p {
|
||||
let id: Int
|
||||
var key: String
|
||||
var name: String
|
||||
let minSpeed: Double
|
||||
let maxSpeed: Double
|
||||
var value: Double
|
||||
var mode: FanMode
|
||||
|
||||
var group: SensorGroup = .sensor
|
||||
var type: SensorType = .fan
|
||||
var unit: String = "RPM"
|
||||
|
||||
var formattedValue: String {
|
||||
get {
|
||||
return "\(Int(value)) RPM"
|
||||
}
|
||||
}
|
||||
var formattedMiniValue: String {
|
||||
get {
|
||||
return "\(Int(value))"
|
||||
}
|
||||
}
|
||||
|
||||
var state: Bool {
|
||||
get {
|
||||
return Store.shared.bool(key: "sensor_\(self.key)", defaultValue: false)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// List of keys: https://github.com/acidanthera/VirtualSMC/blob/master/Docs/SMCSensorKeys.txt
|
||||
let SensorsList: [Sensor_t] = [
|
||||
let SensorsList: [Sensor] = [
|
||||
// Temperature
|
||||
Sensor_t(key: "TA%P", name: "Ambient %", group: .sensor, type: .temperature),
|
||||
Sensor_t(key: "Th%H", name: "Heatpipe %", group: .sensor, type: .temperature),
|
||||
Sensor_t(key: "TZ%C", name: "Termal zone %", group: .sensor, type: .temperature),
|
||||
Sensor(key: "TA%P", name: "Ambient %", group: .sensor, type: .temperature),
|
||||
Sensor(key: "Th%H", name: "Heatpipe %", group: .sensor, type: .temperature),
|
||||
Sensor(key: "TZ%C", name: "Termal zone %", group: .sensor, type: .temperature),
|
||||
|
||||
Sensor_t(key: "TC0D", name: "CPU diode", group: .CPU, type: .temperature),
|
||||
Sensor_t(key: "TC0E", name: "CPU diode virtual", group: .CPU, type: .temperature),
|
||||
Sensor_t(key: "TC0F", name: "CPU diode filtered", group: .CPU, type: .temperature),
|
||||
Sensor_t(key: "TC0H", name: "CPU heatsink", group: .CPU, type: .temperature),
|
||||
Sensor_t(key: "TC0P", name: "CPU proximity", group: .CPU, type: .temperature),
|
||||
Sensor_t(key: "TCAD", name: "CPU package", group: .CPU, type: .temperature),
|
||||
Sensor(key: "TC0D", name: "CPU diode", group: .CPU, type: .temperature),
|
||||
Sensor(key: "TC0E", name: "CPU diode virtual", group: .CPU, type: .temperature),
|
||||
Sensor(key: "TC0F", name: "CPU diode filtered", group: .CPU, type: .temperature),
|
||||
Sensor(key: "TC0H", name: "CPU heatsink", group: .CPU, type: .temperature),
|
||||
Sensor(key: "TC0P", name: "CPU proximity", group: .CPU, type: .temperature),
|
||||
Sensor(key: "TCAD", name: "CPU package", group: .CPU, type: .temperature),
|
||||
|
||||
Sensor_t(key: "TC%c", name: "CPU core %", group: .CPU, type: .temperature),
|
||||
Sensor_t(key: "TC%C", name: "CPU core %", group: .CPU, type: .temperature),
|
||||
Sensor(key: "TC%c", name: "CPU core %", group: .CPU, type: .temperature),
|
||||
Sensor(key: "TC%C", name: "CPU core %", group: .CPU, type: .temperature),
|
||||
|
||||
Sensor_t(key: "TCGC", name: "GPU Intel Graphics", group: .GPU, type: .temperature),
|
||||
Sensor_t(key: "TG0D", name: "GPU diode", group: .GPU, type: .temperature),
|
||||
Sensor_t(key: "TGDD", name: "GPU AMD Radeon", group: .GPU, type: .temperature),
|
||||
Sensor_t(key: "TG0H", name: "GPU heatsink", group: .GPU, type: .temperature),
|
||||
Sensor_t(key: "TG0P", name: "GPU proximity", group: .GPU, type: .temperature),
|
||||
Sensor(key: "TCGC", name: "GPU Intel Graphics", group: .GPU, type: .temperature),
|
||||
Sensor(key: "TG0D", name: "GPU diode", group: .GPU, type: .temperature),
|
||||
Sensor(key: "TGDD", name: "GPU AMD Radeon", group: .GPU, type: .temperature),
|
||||
Sensor(key: "TG0H", name: "GPU heatsink", group: .GPU, type: .temperature),
|
||||
Sensor(key: "TG0P", name: "GPU proximity", group: .GPU, type: .temperature),
|
||||
|
||||
Sensor_t(key: "Tm0P", name: "Mainboard", group: .system, type: .temperature),
|
||||
Sensor_t(key: "Tp0P", name: "Powerboard", group: .system, type: .temperature),
|
||||
Sensor_t(key: "TB1T", name: "Battery", group: .system, type: .temperature),
|
||||
Sensor_t(key: "TW0P", name: "Airport", group: .system, type: .temperature),
|
||||
Sensor_t(key: "TL0P", name: "Display", group: .system, type: .temperature),
|
||||
Sensor_t(key: "TI%P", name: "Thunderbold %", group: .system, type: .temperature),
|
||||
Sensor_t(key: "TH%A", name: "Disk % (A)", group: .system, type: .temperature),
|
||||
Sensor_t(key: "TH%B", name: "Disk % (B)", group: .system, type: .temperature),
|
||||
Sensor_t(key: "TH%C", name: "Disk % (C)", group: .system, type: .temperature),
|
||||
Sensor(key: "Tm0P", name: "Mainboard", group: .system, type: .temperature),
|
||||
Sensor(key: "Tp0P", name: "Powerboard", group: .system, type: .temperature),
|
||||
Sensor(key: "TB1T", name: "Battery", group: .system, type: .temperature),
|
||||
Sensor(key: "TW0P", name: "Airport", group: .system, type: .temperature),
|
||||
Sensor(key: "TL0P", name: "Display", group: .system, type: .temperature),
|
||||
Sensor(key: "TI%P", name: "Thunderbold %", group: .system, type: .temperature),
|
||||
Sensor(key: "TH%A", name: "Disk % (A)", group: .system, type: .temperature),
|
||||
Sensor(key: "TH%B", name: "Disk % (B)", group: .system, type: .temperature),
|
||||
Sensor(key: "TH%C", name: "Disk % (C)", group: .system, type: .temperature),
|
||||
|
||||
Sensor_t(key: "TN0D", name: "Northbridge diode", group: .system, type: .temperature),
|
||||
Sensor_t(key: "TN0H", name: "Northbridge heatsink", group: .system, type: .temperature),
|
||||
Sensor_t(key: "TN0P", name: "Northbridge proximity", group: .system, type: .temperature),
|
||||
Sensor(key: "TN0D", name: "Northbridge diode", group: .system, type: .temperature),
|
||||
Sensor(key: "TN0H", name: "Northbridge heatsink", group: .system, type: .temperature),
|
||||
Sensor(key: "TN0P", name: "Northbridge proximity", group: .system, type: .temperature),
|
||||
|
||||
// Voltage
|
||||
Sensor_t(key: "VCAC", name: "CPU IA", group: .CPU, type: .voltage),
|
||||
Sensor_t(key: "VCSC", name: "CPU System Agent", group: .CPU, type: .voltage),
|
||||
Sensor_t(key: "VC%C", name: "CPU Core %", group: .CPU, type: .voltage),
|
||||
Sensor(key: "VCAC", name: "CPU IA", group: .CPU, type: .voltage),
|
||||
Sensor(key: "VCSC", name: "CPU System Agent", group: .CPU, type: .voltage),
|
||||
Sensor(key: "VC%C", name: "CPU Core %", group: .CPU, type: .voltage),
|
||||
|
||||
Sensor_t(key: "VCTC", name: "GPU Intel Graphics", group: .GPU, type: .voltage),
|
||||
Sensor_t(key: "VG0C", name: "GPU", group: .GPU, type: .voltage),
|
||||
Sensor(key: "VCTC", name: "GPU Intel Graphics", group: .GPU, type: .voltage),
|
||||
Sensor(key: "VG0C", name: "GPU", group: .GPU, type: .voltage),
|
||||
|
||||
Sensor_t(key: "VM0R", name: "Memory", group: .system, type: .voltage),
|
||||
Sensor_t(key: "Vb0R", name: "CMOS", group: .system, type: .voltage),
|
||||
Sensor(key: "VM0R", name: "Memory", group: .system, type: .voltage),
|
||||
Sensor(key: "Vb0R", name: "CMOS", group: .system, type: .voltage),
|
||||
|
||||
Sensor_t(key: "VD0R", name: "DC In", group: .sensor, type: .voltage),
|
||||
Sensor_t(key: "VP0R", name: "12V rail", group: .sensor, type: .voltage),
|
||||
Sensor_t(key: "Vp0C", name: "12V vcc", group: .sensor, type: .voltage),
|
||||
Sensor_t(key: "VV2S", name: "3V", group: .sensor, type: .voltage),
|
||||
Sensor_t(key: "VR3R", name: "3.3V", group: .sensor, type: .voltage),
|
||||
Sensor_t(key: "VV1S", name: "5V", group: .sensor, type: .voltage),
|
||||
Sensor_t(key: "VV9S", name: "12V", group: .sensor, type: .voltage),
|
||||
Sensor_t(key: "VeES", name: "PCI 12V", group: .sensor, type: .voltage),
|
||||
Sensor(key: "VD0R", name: "DC In", group: .sensor, type: .voltage),
|
||||
Sensor(key: "VP0R", name: "12V rail", group: .sensor, type: .voltage),
|
||||
Sensor(key: "Vp0C", name: "12V vcc", group: .sensor, type: .voltage),
|
||||
Sensor(key: "VV2S", name: "3V", group: .sensor, type: .voltage),
|
||||
Sensor(key: "VR3R", name: "3.3V", group: .sensor, type: .voltage),
|
||||
Sensor(key: "VV1S", name: "5V", group: .sensor, type: .voltage),
|
||||
Sensor(key: "VV9S", name: "12V", group: .sensor, type: .voltage),
|
||||
Sensor(key: "VeES", name: "PCI 12V", group: .sensor, type: .voltage),
|
||||
|
||||
// Power
|
||||
Sensor_t(key: "PC0C", name: "CPU Core", group: .CPU, type: .power),
|
||||
Sensor_t(key: "PCAM", name: "CPU Core (IMON)", group: .CPU, type: .power),
|
||||
Sensor_t(key: "PCPC", name: "CPU Package", group: .CPU, type: .power),
|
||||
Sensor_t(key: "PCTR", name: "CPU Total", group: .CPU, type: .power),
|
||||
Sensor_t(key: "PCPT", name: "CPU Package total", group: .CPU, type: .power),
|
||||
Sensor_t(key: "PCPR", name: "CPU Package total (SMC)", group: .CPU, type: .power),
|
||||
Sensor_t(key: "PC0R", name: "CPU Computing high side", group: .CPU, type: .power),
|
||||
Sensor_t(key: "PC0G", name: "CPU GFX", group: .CPU, type: .power),
|
||||
Sensor_t(key: "PCEC", name: "CPU VccEDRAM", group: .CPU, type: .power),
|
||||
Sensor(key: "PC0C", name: "CPU Core", group: .CPU, type: .power),
|
||||
Sensor(key: "PCAM", name: "CPU Core (IMON)", group: .CPU, type: .power),
|
||||
Sensor(key: "PCPC", name: "CPU Package", group: .CPU, type: .power),
|
||||
Sensor(key: "PCTR", name: "CPU Total", group: .CPU, type: .power),
|
||||
Sensor(key: "PCPT", name: "CPU Package total", group: .CPU, type: .power),
|
||||
Sensor(key: "PCPR", name: "CPU Package total (SMC)", group: .CPU, type: .power),
|
||||
Sensor(key: "PC0R", name: "CPU Computing high side", group: .CPU, type: .power),
|
||||
Sensor(key: "PC0G", name: "CPU GFX", group: .CPU, type: .power),
|
||||
Sensor(key: "PCEC", name: "CPU VccEDRAM", group: .CPU, type: .power),
|
||||
|
||||
Sensor_t(key: "PCPG", name: "GPU Intel Graphics", group: .GPU, type: .power),
|
||||
Sensor_t(key: "PG0R", name: "GPU", group: .GPU, type: .power),
|
||||
Sensor_t(key: "PCGC", name: "Intel GPU", group: .GPU, type: .power),
|
||||
Sensor_t(key: "PCGM", name: "Intel GPU (IMON)", group: .GPU, type: .power),
|
||||
Sensor(key: "PCPG", name: "GPU Intel Graphics", group: .GPU, type: .power),
|
||||
Sensor(key: "PG0R", name: "GPU", group: .GPU, type: .power),
|
||||
Sensor(key: "PCGC", name: "Intel GPU", group: .GPU, type: .power),
|
||||
Sensor(key: "PCGM", name: "Intel GPU (IMON)", group: .GPU, type: .power),
|
||||
|
||||
Sensor_t(key: "PC3C", name: "RAM", group: .sensor, type: .power),
|
||||
Sensor_t(key: "PPBR", name: "Battery", group: .sensor, type: .power),
|
||||
Sensor_t(key: "PDTR", name: "DC In", group: .sensor, type: .power),
|
||||
Sensor_t(key: "PSTR", name: "System total", group: .sensor, type: .power),
|
||||
|
||||
// Fans
|
||||
Sensor_t(key: "F%Ac", name: "Fan #%", group: .sensor, type: .fan)
|
||||
Sensor(key: "PC3C", name: "RAM", group: .sensor, type: .power),
|
||||
Sensor(key: "PPBR", name: "Battery", group: .sensor, type: .power),
|
||||
Sensor(key: "PDTR", name: "DC In", group: .sensor, type: .power),
|
||||
Sensor(key: "PSTR", name: "System total", group: .sensor, type: .power)
|
||||
]
|
||||
|
||||
Reference in New Issue
Block a user