| 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...")
|
|
|
|
|
|
|