Temperaturen per WMI auslesen Win7

  • Moin zusammen,

    Hat einer eine Idee/Möglichkeit die Temperaturen (BIOS) per WMI auszulesen. Finde da nix und

    [autoit]


    select * from MSAcpi_ThermalZoneTemperature
    select * from MS_SmBios
    select * from Win32_TemperatureProbe

    [/autoit]


    geben bei mir nichts zurück. Aufrufe mit scriptomatic.

    Gibt´s da noch was. Ich such mir die Augen wund. Muss doch irgendwie gehen!

    LG
    MrB

  • Hab dieses Scripte noch bei mir liegen gehabt, aber keine Ahnung mehr woher ich das habe:

    Festplattentemperatur:

    Spoiler anzeigen
    [autoit]

    Dim $strComputer = "."
    Dim $objWMIService, $oMyError
    Dim $colTemp
    Dim $ar = 115 ;Diese Zahl ist Herstellerabhängig!

    [/autoit] [autoit][/autoit] [autoit]

    $oMyError = ObjEvent("AutoIt.Error", "MyErrFunc")
    $objWMIService = ObjGet("winmgmts:\\" & $strComputer & "\root\WMI")

    [/autoit] [autoit][/autoit] [autoit]

    $colTemp = $objWMIService.ExecQuery("SELECT * FROM MSStorageDriver_ATAPISmartData")
    For $objItem In $colTemp
    $strVendorSpecific = $objItem.VendorSpecific
    ConsoleWrite("Temperature: " & $strVendorSpecific[115] & @CRLF)
    Next

    [/autoit] [autoit][/autoit] [autoit]

    Func MyErrFunc()
    $HexNumber = Hex($oMyError.number, 8)
    MsgBox(0, "COM Error Test", "We intercepted a COM Error !" & @CRLF & @CRLF & _
    "err.description is: " & @TAB & $oMyError.description & @CRLF & _
    "err.windescription:" & @TAB & $oMyError.windescription & @CRLF & _
    "err.number is: " & @TAB & $HexNumber & @CRLF & _
    "err.lastdllerror is: " & @TAB & $oMyError.lastdllerror & @CRLF & _
    "err.scriptline is: " & @TAB & $oMyError.scriptline & @CRLF & _
    "err.source is: " & @TAB & $oMyError.source & @CRLF & _
    "err.helpfile is: " & @TAB & $oMyError.helpfile & @CRLF & _
    "err.helpcontext is: " & @TAB & $oMyError.helpcontext _
    )
    SetError(1); to check for after this function returns
    EndFunc ;==>MyErrFunc

    [/autoit]

    Andy hat mir ein Schnitzel gebacken aber da war ein Raupi drauf und bevor Oscar das Bugfixen konnte kam Alina und gab mir ein AspirinJunkie.

  • Danke Chip für den Code. Funktioniert leider nicht bzw. gibt 0 zurück und so eine gute Kühlung habe ich nun nicht ;)

    Da ich mal davon ausgehe, dass die Temperatur wieder in Kelvin angegeben wird (hab nicht kontrolliert ob´s stimmt), hab ich mal den ganzen Array nach einem Wert über 273 durchsucht und nix gefunden.
    Hier mal der komplette Array:

    Spoiler anzeigen

    Falls ich da was falsch denke, bitte korrigieren.

  • Dann ist das ganze wohl vom Motherboard bzw. BIOS abhängig weil bei mri geht z.b. das Festplattentemperaturscript.

    Andy hat mir ein Schnitzel gebacken aber da war ein Raupi drauf und bevor Oscar das Bugfixen konnte kam Alina und gab mir ein AspirinJunkie.

  • Ähm, kannst du mir vielleicht einen Tip geben, wo man ne Beschreibung des Arrays her bekommt. Meine also welcher Wert was bedeutet? Ich find einfach nix

    P.S.: Scheint anscheinend nur über SmBus zu funktionieren und davon habe ich keinen blassen Schimmer. grrrr...
    Falls einer noch Anregungen haben sollte, wie man auf die Sensoren im Bios/Board zugreifen kann, bitte melden!

    So, neuer Stand:

    Temperatur der Festplatte lässt sich auslesen und zwar

    Spoiler anzeigen
    [autoit]


    Global $maintimer = TimerInit()
    Global $wert1, $old_wert1 = 0
    Global $wert2, $old_wert2 = 0
    Global $wert3, $old_wert3 = 0

    [/autoit] [autoit][/autoit] [autoit]

    While 1
    HotKeySet("^!x", "MeinExit")

    [/autoit] [autoit][/autoit] [autoit]

    If TimerDiff($maintimer) > 1000 Then
    $aData = Data()
    $wert1 = $aData[161] ; entspricht der Temperatur laut SpeedFan. Ändert sich auch
    $wert2 = $aData[162] ; soll angeblich der max. Wert lt. Hertseller sein
    $wert3 = $aData[163] ; entspricht der Temperatur laut SpeedFan. Ändert sich auch

    [/autoit] [autoit][/autoit] [autoit]

    ToolTip("Wert 161: " & $aData[161] & @CRLF & _
    "Wert 162: " & $aData[162] & @CRLF & _
    "Wert 163: " & $aData[163], @DesktopWidth / 2, 30, "Werte", 0, 2)

    [/autoit] [autoit][/autoit] [autoit]

    $maintimer = TimerInit()

    [/autoit] [autoit][/autoit] [autoit]

    If $wert1 <> $old_wert1 And $old_wert1 <> 0 Then MsgBox(0, "Achtung", "Wert161 hat sich von " & $old_wert1 & " nach" & $wert1 & " geändert")
    If $wert2 <> $old_wert2 And $old_wert2 <> 0 Then MsgBox(0, "Achtung", "Wert162 hat sich von " & $old_wert2 & " nach" & $wert2 & " geändert")
    If $wert3 <> $old_wert3 And $old_wert3 <> 0 Then MsgBox(0, "Achtung", "Wert163 hat sich von " & $old_wert3 & " nach" & $wert3 & " geändert")
    $old_wert1 = $wert1
    $old_wert2 = $wert2
    $old_wert3 = $wert3
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    WEnd

    [/autoit] [autoit][/autoit] [autoit]

    Func Data()
    Dim $strComputer = "."
    Dim $objWMIService
    $output = ""
    $objWMIService = ObjGet("winmgmts:\\" & $strComputer & "\root\WMI")

    [/autoit] [autoit][/autoit] [autoit]

    $colTemp = $objWMIService.ExecQuery("SELECT * FROM MSStorageDriver_ATAPISmartData")
    For $objItem In $colTemp
    $strVendorSpecific = $objItem.VendorSpecific
    If IsArray($strVendorSpecific) Then
    Return $strVendorSpecific
    EndIf
    Next
    EndFunc ;==>Data

    [/autoit] [autoit][/autoit] [autoit]

    Func MeinExit()
    Exit
    EndFunc ;==>MeinExit

    [/autoit]

    Da die ganze Sache anscheind ja wirklich Herstellerabhängig ist (wie der Name VendorSpecific ja eigentlich auch schon vermuten lässt) gilt dies hier nur für eine Seagate Barracuda 7200.11 SATA 3Gb/s 1.5-TB

    2 Mal editiert, zuletzt von MrB (22. Dezember 2011 um 13:05)

  • So, nochmal nach oben bringen.

    Frohes Fest allen !!

    Kennt einer vielleicht eine andere Möglichkeit an die Daten der Boardsensoren ran zu kommen ??