|
import os
|
|
import clr
|
|
import time
|
|
|
|
|
|
|
|
dll_path = os.path.abspath("LibreHardwareMonitorLib.dll")
|
|
clr.AddReference(dll_path)
|
|
|
|
from LibreHardwareMonitor import Hardware
|
|
|
|
|
|
|
|
|
|
|
|
from rapidfuzz.fuzz import partial_ratio
|
|
|
|
def best_match_optional(filter_str, target_str, min_token_score=80):
|
|
"""
|
|
Für jedes Token im Filter suchen wir das bestpassende Token im Ziel (mit partial_ratio).
|
|
Der finale Score ist der Durchschnitt dieser besten Matches.
|
|
"""
|
|
if not filter_str:
|
|
return 1.0
|
|
|
|
filter_tokens = filter_str.lower().split()
|
|
target_tokens = target_str.lower().split()
|
|
|
|
if not target_tokens:
|
|
return 0.0
|
|
|
|
match_scores = []
|
|
for ftoken in filter_tokens:
|
|
best_score = max(
|
|
partial_ratio(ftoken, ttoken)
|
|
for ttoken in target_tokens
|
|
)
|
|
if best_score < min_token_score:
|
|
return 0.0
|
|
match_scores.append(best_score)
|
|
|
|
return sum(match_scores) / (100 * len(match_scores))
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def lese_gpu_sensorwerte():
|
|
hw = Hardware.Computer()
|
|
hw.IsGpuEnabled = True
|
|
hw.IsCpuEnabled = False
|
|
hw.IsMemoryEnabled = False
|
|
hw.IsMotherboardEnabled = False
|
|
hw.IsStorageEnabled = False
|
|
hw.IsNetworkEnabled = False
|
|
hw.IsControllerEnabled = False
|
|
hw.Open()
|
|
|
|
daten = []
|
|
hardware_counter = 0
|
|
|
|
for hardware in hw.Hardware:
|
|
hardware.Update()
|
|
|
|
|
|
|
|
|
|
hardware_type = hardware.HardwareType.ToString()
|
|
hardware_name = hardware.Name
|
|
hardware_id = f"ID{hardware_counter}"
|
|
hardware_counter += 1
|
|
|
|
for sensor in hardware.Sensors:
|
|
eintrag = {
|
|
"ID": hardware_id,
|
|
"HardwareName": hardware_name,
|
|
"HardwareType": hardware_type,
|
|
"SensorName": sensor.Name,
|
|
"SensorType": sensor.SensorType.ToString(),
|
|
"Value": sensor.Value
|
|
}
|
|
daten.append(eintrag)
|
|
|
|
|
|
hw.Close()
|
|
return daten
|
|
|
|
|
|
|
|
|
|
def filter_sensordaten(daten, filterkriterien):
|
|
treffer = []
|
|
for eintrag in daten:
|
|
if all([
|
|
best_match_optional(filterkriterien.get("ID"), eintrag["ID"]),
|
|
best_match_optional(filterkriterien.get("HardwareName"), eintrag["HardwareName"]),
|
|
best_match_optional(filterkriterien.get("HardwareType"), eintrag["HardwareType"]),
|
|
best_match_optional(filterkriterien.get("SensorName"), eintrag["SensorName"]),
|
|
best_match_optional(filterkriterien.get("SensorType"), eintrag["SensorType"]),
|
|
(filterkriterien.get("Value") is None or eintrag["Value"] == filterkriterien["Value"])
|
|
]):
|
|
treffer.append(eintrag)
|
|
return treffer
|
|
|
|
|
|
|
|
|
|
if __name__ == "__main__":
|
|
|
|
alle_sensoren = lese_gpu_sensorwerte()
|
|
|
|
print("\n--- Alle ausgelesenen GPU-Sensorwerte ---")
|
|
for sensor in alle_sensoren:
|
|
val = sensor["Value"]
|
|
val_str = f"{round(val, 1)}" if isinstance(val, (float, int)) else str(val)
|
|
print(f"ID: {sensor['ID']} | HwType: <{sensor['HardwareType']}> | "
|
|
f"HwName: <{sensor['HardwareName']}> | Sensor: <{sensor['SensorName']}> | "
|
|
f"Typ: <{sensor['SensorType']}> = {val_str}")
|
|
print(f"\nInsgesamt {len(alle_sensoren)} Sensoren gefunden.")
|
|
|
|
|
|
|
|
|
|
|
|
suchabfragen = [
|
|
{
|
|
"aktiv": True,
|
|
"filter": {
|
|
"HardwareType": "GpuAmd",
|
|
"HardwareName": "AMD",
|
|
"SensorName": "Core",
|
|
"SensorType": "Temperature",
|
|
"ID": "",
|
|
"Value": None
|
|
}
|
|
},
|
|
|
|
{
|
|
"aktiv": True,
|
|
"filter": {
|
|
"HardwareType": "GpuAmd",
|
|
"HardwareName": "AMD",
|
|
"SensorName": "Core",
|
|
"SensorType": "Load",
|
|
"ID": "",
|
|
"Value": None
|
|
}
|
|
},
|
|
|
|
{
|
|
"aktiv": True,
|
|
"filter": {
|
|
"HardwareType": "GpuAmd",
|
|
"HardwareName": "AMD",
|
|
"SensorName": "GPU Memory Used",
|
|
"SensorType": "",
|
|
"ID": "",
|
|
"Value": None
|
|
}
|
|
},
|
|
|
|
{
|
|
"aktiv": True,
|
|
"filter": {
|
|
"HardwareType": "GpuAmd",
|
|
"HardwareName": "AMD",
|
|
"SensorName": "GPU Memory Free",
|
|
"SensorType": "",
|
|
"ID": "",
|
|
"Value": None
|
|
}
|
|
},
|
|
|
|
{
|
|
"aktiv": True,
|
|
"filter": {
|
|
"HardwareType": "GpuAmd",
|
|
"HardwareName": "AMD",
|
|
"SensorName": "GPU Memory Total",
|
|
"SensorType": "",
|
|
"ID": "",
|
|
"Value": None
|
|
}
|
|
},
|
|
|
|
{
|
|
"aktiv": False,
|
|
"filter": {
|
|
"HardwareType": "Check",
|
|
"HardwareName": "",
|
|
"SensorName": "",
|
|
"SensorType": "",
|
|
"ID": "",
|
|
"Value": None
|
|
}
|
|
},
|
|
|
|
*[
|
|
{"aktiv": False, "filter": {}}
|
|
for _ in range(10)
|
|
]
|
|
]
|
|
|
|
|
|
|
|
|
|
for idx, suchanfrage in enumerate(suchabfragen):
|
|
if not suchanfrage["aktiv"]:
|
|
continue
|
|
|
|
print(f"\n--- Suche #{idx + 1} ---")
|
|
resultate = filter_sensordaten(alle_sensoren, suchanfrage["filter"])
|
|
|
|
if not resultate:
|
|
print("Keine passenden Sensorwerte gefunden.")
|
|
else:
|
|
for r in resultate:
|
|
val = r["Value"]
|
|
val_str = f"{round(val, 1)}" if isinstance(val, (float, int)) else str(val)
|
|
print(f"ID: {r['ID']} | HwType: <{r['HardwareType']}> | "
|
|
f"HwName: <{r['HardwareName']}> | Sensor: <{r['SensorName']}> | "
|
|
f"Typ: <{r['SensorType']}> = {val_str}")
|
|
time.sleep(0.01)
|
|
|
|
input("\nDrücke eine Taste zum Beenden...")
|
|
|
|
|
|
|