Temperaturen auslesen

  • Moin Moin,

    ich weiss das es hier schon öfters gefragt wurde und auch im englischen forum ist das thema oft behandelt worden, nur jetzt frag ich halt nochmal da anscheinend niemand zu einer lösung gekommen zu sein scheint... oder diese Themen auch einfach wieder vergessen wurden
    Ich möchte einfach alle vorhandenen Temperatur sensoren auslesen primär natürlich den Prozessor-Sensor ;)
    Ich bin noch optimistisch dass es ja irgendwie gehen muss :D denn everest und co können es ja auch :)

    Wär schön wenn mal jemand zu ner Lösung gekommen ist :=)

    MFG FireFlyer

    *Paradox ist, wenn man sich im Handumdrehen den Fuss bricht* :D

  • Hier ist ein Beispielscript das bei mir aber nicht funktioniert :(

    Spoiler anzeigen
    [autoit]

    ; Generated by AutoIt Scriptomatic

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

    $wbemFlagReturnImmediately = 0x10
    $wbemFlagForwardOnly = 0x20
    $colItems = ""
    $strComputer = "localhost"

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

    $Output=""
    $Output = $Output & "Computer: " & $strComputer & @CRLF
    $Output = $Output & "==========================================" & @CRLF
    $objWMIService = ObjGet("winmgmts:\\" & $strComputer & "\root\CIMV2")
    $colItems = $objWMIService.ExecQuery("SELECT * FROM Win32_TemperatureProbe", "WQL", $wbemFlagReturnImmediately + $wbemFlagForwardOnly)
    If IsObj($colItems) then
    For $objItem In $colItems
    $Output = $Output & "Accuracy: " & $objItem.Accuracy & @CRLF
    $Output = $Output & "Availability: " & $objItem.Availability & @CRLF
    $Output = $Output & "Caption: " & $objItem.Caption & @CRLF
    $Output = $Output & "ConfigManagerErrorCode: " & $objItem.ConfigManagerErrorCode & @CRLF
    $Output = $Output & "ConfigManagerUserConfig: " & $objItem.ConfigManagerUserConfig & @CRLF
    $Output = $Output & "CreationClassName: " & $objItem.CreationClassName & @CRLF
    $Output = $Output & "CurrentReading: " & $objItem.CurrentReading & @CRLF
    $Output = $Output & "Description: " & $objItem.Description & @CRLF
    $Output = $Output & "DeviceID: " & $objItem.DeviceID & @CRLF
    $Output = $Output & "ErrorCleared: " & $objItem.ErrorCleared & @CRLF
    $Output = $Output & "ErrorDescription: " & $objItem.ErrorDescription & @CRLF
    $Output = $Output & "InstallDate: " & WMIDateStringToDate($objItem.InstallDate) & @CRLF
    $Output = $Output & "IsLinear: " & $objItem.IsLinear & @CRLF
    $Output = $Output & "LastErrorCode: " & $objItem.LastErrorCode & @CRLF
    $Output = $Output & "LowerThresholdCritical: " & $objItem.LowerThresholdCritical & @CRLF
    $Output = $Output & "LowerThresholdFatal: " & $objItem.LowerThresholdFatal & @CRLF
    $Output = $Output & "LowerThresholdNonCritical: " & $objItem.LowerThresholdNonCritical & @CRLF
    $Output = $Output & "MaxReadable: " & $objItem.MaxReadable & @CRLF
    $Output = $Output & "MinReadable: " & $objItem.MinReadable & @CRLF
    $Output = $Output & "Name: " & $objItem.Name & @CRLF
    $Output = $Output & "NominalReading: " & $objItem.NominalReading & @CRLF
    $Output = $Output & "NormalMax: " & $objItem.NormalMax & @CRLF
    $Output = $Output & "NormalMin: " & $objItem.NormalMin & @CRLF
    $Output = $Output & "PNPDeviceID: " & $objItem.PNPDeviceID & @CRLF
    $strPowerManagementCapabilities = $objItem.PowerManagementCapabilities(0)
    $Output = $Output & "PowerManagementCapabilities: " & $strPowerManagementCapabilities & @CRLF
    $Output = $Output & "PowerManagementSupported: " & $objItem.PowerManagementSupported & @CRLF
    $Output = $Output & "Resolution: " & $objItem.Resolution & @CRLF
    $Output = $Output & "Status: " & $objItem.Status & @CRLF
    $Output = $Output & "StatusInfo: " & $objItem.StatusInfo & @CRLF
    $Output = $Output & "SystemCreationClassName: " & $objItem.SystemCreationClassName & @CRLF
    $Output = $Output & "SystemName: " & $objItem.SystemName & @CRLF
    $Output = $Output & "Tolerance: " & $objItem.Tolerance & @CRLF
    $Output = $Output & "UpperThresholdCritical: " & $objItem.UpperThresholdCritical & @CRLF
    $Output = $Output & "UpperThresholdFatal: " & $objItem.UpperThresholdFatal & @CRLF
    $Output = $Output & "UpperThresholdNonCritical: " & $objItem.UpperThresholdNonCritical & @CRLF
    if Msgbox(1,"WMI Output",$Output) = 2 then ExitLoop
    $Output=""
    Next
    Else
    Msgbox(0,"WMI Output","No WMI Objects Found for class: " & "Win32_TemperatureProbe" )
    Endif

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

    Func WMIDateStringToDate($dtmDate)

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

    Return (StringMid($dtmDate, 5, 2) & "/" & _
    StringMid($dtmDate, 7, 2) & "/" & StringLeft($dtmDate, 4) _
    & " " & StringMid($dtmDate, 9, 2) & ":" & StringMid($dtmDate, 11, 2) & ":" & StringMid($dtmDate,13, 2))
    EndFunc

    [/autoit]

    Ich hab einfach mal rumprobiert und das hier: winmgmts:\\computername\root\CIMV2 in ausführen reingemacht :D
    Da kam dann sie haben nicht die ausreichenden Berechtigungen.... hab aber Adminrechte, naja keine ahnung ob das was zu sagen hat :D
    Was ich sonst noch zu dem Script sagen kann: Die For In schleife läuft bei mir nicht ein einziges mal durch als ob die Select abfrage nix ausspuckt man verzeihe mir meine Ausdrucksweise ^^
    Hier gibts dazu noch den passenden Senf von Microsoft :D : http://msdn.microsoft.com/en-us/library/aa394493(VS.85).aspx

    MFG FireFlyer

    *Paradox ist, wenn man sich im Handumdrehen den Fuss bricht* :D

    2 Mal editiert, zuletzt von FireFlyer (2. Juni 2008 um 17:03)

  • Hier hatte noch jemand das selbe Problem in VB... leider kenn ich mich damit net aus :(

    MFG FireFlyer

    *Paradox ist, wenn man sich im Handumdrehen den Fuss bricht* :D

  • noch einer mit VB:

    Ich habe seine Anweisungen mal befolgt mit dem wbemtest.exe bei mir kommt leider bei beiden Methoden <null> raus wiso?!... gibts doch net...

    Spoiler anzeigen
    Spoiler anzeigen


    Achso ja... bei dieser Abfrage kommt nur ein ergebnis wenn ich untendran das Häkchen bei "Klassenprototyp anfordern" setze ansonsten bekomm ich garnix also 0 Objekte

    MFG FireFlyer

    *Paradox ist, wenn man sich im Handumdrehen den Fuss bricht* :D

    2 Mal editiert, zuletzt von FireFlyer (2. Juni 2008 um 17:51)

  • sach ma haltet mich jetzt nich für blöd aber ich sitze hier grade in der SChule und spiele wieder mit der guten alten wbemtest.exe :D...
    Witzigerweise geht das hier, also mit MSAcpi_ThermalZoneTemperature hab ich bei CurrentTemperature einen wert von 3197 0xC7D (Kelvin) d.h. die letzte stelle ist eine Dezimalstelle oder? also 319,7 K = 46 °C könnte ja hinkommen, dieser wert verändert sich allerdings nicht wirklich... (ist seit ner halben stunde gleich)
    Von was ist denn das abhängig ob man aus MSAcpi_ThermalZoneTemperature oder von Win32_TemperatureProbe das auslesen kann?... vllt vom mainboard selbst? Wenn ja ich hab ein Dell XPS MB und dual core 2 duo Prozessor drinne.
    Andererseits müssten dann ja Everest und co über eine riesige Datenbank von "Möglichkeiten" zum abfragen haben damit sie von jedem PC die Temperatur auslesen können, oder es gibt noch eine andere bessere Möglichkeit die Unabhängig funktioniert, ich habe allerdings schon ewig in google gesucht und immer nur diese Möglichkeiten gefunden:
    \root\cimv2 --> Win32_TemperatureProbe
    \root\wmi --> MSAcpi_ThermalZoneTemperature

    beide Möglichkeiten funktionieren auf meinen beiden PCs daheim nicht, bei win32... findet er einfach kein Objekt und bei MSAcpi bekomm ich sogar en error (wbemtest.exe)
    Hatte heute wie gesagt mit dem Schulrechner hier einen ersten erfolg...

    GRML das muss doch verflucht nochmal gehn das kann doch net wahr sein...!! ;( ;( ;( ;(

    //Edit: geht das eigentlich auch so wie in visual basic dass man einfach alle texte abfragt?

    Code
    For each $ka in $kas
    .... $ka.objgettext()

    MFG FireFlyer

    *Paradox ist, wenn man sich im Handumdrehen den Fuss bricht* :D

    Einmal editiert, zuletzt von FireFlyer (4. Juni 2008 um 14:34)

  • Tja, sieht nicht gut aus, würde ich sagen ... :(

    Bei mir geht's auch nicht über WMI.
    Aber Everest schafft es ja auch irgendwie ...
    Habe mal etwas gegoogelt und es kam fast immer das gleiche heraus: Entweder WMI, oder wenn es nicht geht, dann Treiber programmieren ...

    Hier mal ein paar Links dazu:
    http://www.c-plusplus.de/forum/viewtopic.php?p=583154
    http://www.c-plusplus.de/forum/viewtopi…start-is-0.html
    http://blog.kalmbachnet.de/?postid=29
    http://www.c-plusplus.de/forum/viewtopi…start-is-0.html
    http://www.delphipraxis.net/topic106888.html

    Gruß
    Greenhorn


  • Danke schonmal für die Antwort... irgendwann ich weiß nicht wann werd ich dieses Rätsel lösen... ich kann bald schon net mehr schlafen 24 std. dauergoogeln :D


    also wenn das über treiber geht... ich weiß net programme wie everest usw müssten dann ja rieesig sein um das alles auslesen zu können von jeder x-belibigen hardware... ich bin fast immer noch der meinung das es eine "einheitliche" methode geben muss... sonst wäre das ja der wahnsinn!

    8| 8| 8| 8| 8| 8| 8|
    http://www.almico.com/forumsensors.php
    ich glaub die muss man doch unterschiedlich auslesen DAMN!

    MFG FireFlyer

    *Paradox ist, wenn man sich im Handumdrehen den Fuss bricht* :D

    Einmal editiert, zuletzt von FireFlyer (5. Juni 2008 um 15:27)

  • ... irgendwann ich weiß nicht wann werd ich dieses Rätsel lösen... ich kann bald schon net mehr schlafen 24 std. dauergoogeln :D

    Kenne ich nur zu gut ... :rolleyes:
    Der nächste Arbeitstag ist dann besonders schön ...

    Aber gib' die Hoffnung nicht auf, nur halt eben nicht über's Knie brechen. Alles braucht seine Zeit ;)

    Gruß


    • Offizieller Beitrag

    Ich habe gerade ein Script gefunden, was ich irgendwann mal abgespeichert hatte. Weiß nicht mehr woher ich das habe, aber das gibt bei mir die CPU-Temperatur aus.

    Spoiler anzeigen
    [autoit]


    Dim $temp = ""
    While 1
    $objWMIService = ObjGet("winmgmts:\\.\root\WMI")
    $colItems = $objWMIService.ExecQuery("SELECT * FROM MSAcpi_ThermalZoneTemperature")
    $temp = ""
    For $objItem in $colItems
    $temp &= "CurrentTemperature: " & ($objItem.CurrentTemperature - 2732) / 10 & "°C" & @LF
    Next
    ToolTip(StringTrimRight($temp,1),100,0)
    MsgBox(0,"",StringTrimRight($temp,1))
    $objWMIService = 0
    Sleep(5000)
    WEnd

    [/autoit]