Download hardwarecheck_AMD.py from kalle07/SmartTaskMonitor: direct link, hf CLI and curl.
- Browser
- Download file 7.33 kB
-
https://huggingface.co/kalle07/SmartTaskMonitor/resolve/main/hardwarecheck_AMD.py
- Command line
-
hf download hf://kalle07/SmartTaskMonitor/hardwarecheck_AMD.py
-
curl -L -o hardwarecheck_AMD.py https://huggingface.co/kalle07/SmartTaskMonitor/resolve/main/hardwarecheck_AMD.py
7.33 kB
| import os | |
| import clr | |
| import time | |
| #from difflib import get_close_matches | |
| # DLL laden (Pfad ggf. anpassen) | |
| dll_path = os.path.abspath("LibreHardwareMonitorLib.dll") | |
| clr.AddReference(dll_path) | |
| from LibreHardwareMonitor import Hardware | |
| #from difflib import SequenceMatcher | |
| # ---------------------------------------- | |
| # Hilfsfunktion: unscharfer Vergleich | |
| # ---------------------------------------- | |
| #from rapidfuzz import fuzz | |
| 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 # Ein Filter-Token ist zu unähnlich → kein Match | |
| match_scores.append(best_score) | |
| return sum(match_scores) / (100 * len(match_scores)) # Normiert auf [0.0, 1.0] | |
| # ---------------------------------------- | |
| # Einmalige GPU-Auslesung (alle Sensorwerte) | |
| # ---------------------------------------- | |
| 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() | |
| #if hardware.HardwareType.ToString().lower() != "gpu": | |
| # continue | |
| 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 | |
| # ---------------------------------------- | |
| # Filterfunktion mit flexiblen Feldern | |
| # ---------------------------------------- | |
| 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 | |
| # ---------------------------------------- | |
| # Hauptprogramm | |
| # ---------------------------------------- | |
| if __name__ == "__main__": | |
| # Alle GPU-Daten einmalig auslesen | |
| 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.") | |
| # ------------------------------- | |
| # 10 definierbare Suchabfragen | |
| # ------------------------------- | |
| 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 | |
| } | |
| }, | |
| # ... weitere Suchabfragen: | |
| *[ | |
| {"aktiv": False, "filter": {}} # Platzhalter | |
| for _ in range(10) | |
| ] | |
| ] | |
| # ------------------------------- | |
| # Suchabfragen ausführen | |
| # ------------------------------- | |
| 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...") | |