IOCTL - Prozessortemperatur Raspberry PI 4 - Windows 11 ARM

  • Hallo Zusammen,

    ich benötige eure Hilfe für das Auslesen der Prozessortemperatur eines Rasberry PI4 mit Windows 11 ARM. Es gibt hierfür schon ein Monitor-Tool auf GitHub, was dies über IOCTL bewerkstelligt. Die genaue Beschreibung der Befehle stehen in folgender Datei:

    PiMon/data.c at master · driver1998/PiMon
    A simple hardware monitor for your Raspberry Pi running Windows. - PiMon/data.c at master · driver1998/PiMon
    github.com

    Allerdings habe ich keinen Plan, wie ich dies mit AutoIt umsetzten könnte. Daher hoffe ich, das einer von euch mir unter die Arme greifen kann/möchte.

    Vielen Dank schonmal für eure Unterstützung!

    Gruß

    Homer J. S.

    ...wenn die Donuts auch nur halb so gut schmecken wie sie aussehen, dann sehen sie doppelt so gut aus wie sie schmecken...

  • ich habe leider keine Antwort für dich

    aber die andere frage die mich interessieren würde laufen den Autoitscripte mit Windows 11 arm überhaupt :)?

  • Hallo MojoeB,

    ein paar Skripte habe ich schon erfolgreich getestet. In meinen Tests enthalten waren bisher GUI-Skripte und Skripte mit Kommunikation über TCP/IP. Allerdings darf man von dem Raspberry PI 4 keine Höchstleistungen erwarten, aber für viele Aufgaben ist er absolut ausreichend.

    Gruß

    Homer J. S.

    ...wenn die Donuts auch nur halb so gut schmecken wie sie aussehen, dann sehen sie doppelt so gut aus wie sie schmecken...

  • Hi,

    du kannst natürlich versuchen, die gesamte Software zu portieren, für dein Problem

    Auslesen der Prozessortemperatur eines Rasberry PI4 mit Windows 11 ARM

    würde ich auf dem Raspi eine alle paar Sekunden eine Datei "Prozessortemperatur.txt" von deinem Temperaturmonitorprogramm erstellen lassen und diese per SSH/SCP von Windows aus abholen.

    Diese Datei kannst du dann per AutoIt öffnen und auslesen.

    ich hatte zwar damit noch nie zu tun, habe das eben aber ausprobiert, geht einwandfrei!

    Beim Raspberry musst du nur SSH per

    sudo raspi-config in den Interface Options einschalten.

    Ich habe in Windows WinSCP installiert, um "einfach" (bspw. per Script) Dateien zwischen Raspi und Windows hin- und herschieben zu können. ggf. ist da sin den neueren Versionen von Windows nicht mehr nötig, Gib einfach mal in einer CMD/Powershell den Befehl SCP ein und schau was dabei rauskommt...

    Im Windows musst du in der Powershell oder CMD (als Administrator geöffnet wg. Zugriffsrechten) per

    scp pi@192.168.2.106:/home/pi/TemperatureTests/mytest.out C:\mytest.out die Datei aus dem Raspiverzeichnis in das entsprechende Windowsverzeichnis kopieren.

    Auf dem Raspi musst du also außer SSH zu aktivieren garnichts machen....außer in einer Endlosschleife die Temperatur und/oder andere Daten aus deinem Sensorprogramm in eine Datei zu schreiben.

  • Hallo Andy,
    vielen Dank für deine Antwort bzw. deinen Lösungsvorschlag. Allerding glaube ich, dass du mich missverstanden hast. Das Windows 11 ARM läuft auf dem PI selbst und auf diesem möchte ich in meiner eigenen GUI die Temperatur anzeigen. Das Ganze funktioniert wohl über IOCTL bzw. “_WinAPI_DeviceIoControl“, wie ich dem “data.c“ File von meinem Link oben entnommen habe.

    Gruß

    Homer J. S.

    ...wenn die Donuts auch nur halb so gut schmecken wie sie aussehen, dann sehen sie doppelt so gut aus wie sie schmecken...

  • Ah, ok, ich dachte du wolltest von einem Windows10-x86 auf einen Raspi zugreifen...

    Hast du denn mal das vorliegende Programm compiliert und laufen lassen? Funktioniert es denn?

    //EDIT

    Halte mich/uns mit diesem Projekt bitte auf dem Laufenden, ich habe einen Raspi 400 zum rumspielen und experimentieren.

    ciao
    Andy


    "Schlechtes Benehmen halten die Leute doch nur deswegen für eine Art Vorrecht, weil keiner ihnen aufs Maul haut." Klaus Kinski
    "Hint: Write comments after each line. So you can (better) see what your program does and what it not does. And we can see what you're thinking what your program does and we can point to the missunderstandings." A-Jay

    Wie man Fragen richtig stellt... Tutorial: Wie man Script-Fehler findet und beseitigt...X-Y-Problem

    Einmal editiert, zuletzt von Andy (9. Februar 2022 um 19:38)

  • Hast du denn mal das vorliegende Programm compiliert und laufen lassen? Funktioniert es denn?

    Jein, ich habe es fertig kompiliert bei https://www.worproject.ml/downloads#pimon gedownloadet und dann erfolgreich getestet - Also es funktioniert.


    Was ich bisher herausgefunden habe ist, dass dies über "Microsoft's RPIQ driver for communicating with VC Mailbox in Windows" läuft. Dazu habe ich folgenden Link gefunden:

    Mailbox property interface · raspberrypi/firmware Wiki
    This repository contains pre-compiled binaries of the current Raspberry Pi kernel and modules, userspace libraries, and bootloader/GPU firmware. - Mailbox…
    github.com

    Hier ist ein Ausschnitt aus dem Beispiel von dem “data.c“ File:


    ...aber so wirklich schlau werde ich daraus nicht :Face:.

    Gruß

    Homer J. S.

    ...wenn die Donuts auch nur halb so gut schmecken wie sie aussehen, dann sehen sie doppelt so gut aus wie sie schmecken...

  • Ja, an dem Punkt war ich schon nach deinem Startpost^^

    Ich dachte auch erst daran, die Treiber runterzuladen und aus AutoIt anzusprechen.

    Bis ich dann merkte, dass das Interface auf dem Raspberry nicht von "außerhalb" anzusprechen ist.

    So wie ich das verstehe, wird das Interface zweimal aufgerufen/gecalled.

    Einmal zum Initialisieren der Funktion, bei der zweiten Abfrage werden dann die Rückgabewerte ausgegeben.

    HANDLE hDevice = CreateFileW( RPIQ_USERMODE_PATH, GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, 0, OPEN_EXISTING, FILE_FLAG_OVERLAPPED, 0 );

    das solltest du hinbekommen, das ist ein ganz simpler API-Aufruf mit entsprechenden Parametern. Die Parameter sind imho. alle im Programm als Konstanten definiert.

    Versuch das mal, ich lese mich derweil mal in das Interface-Gedöns ein. Da ist allerlei wg. Endianess und Alignment gefordert...

  • das solltest du hinbekommen, das ist ein ganz simpler API-Aufruf mit entsprechenden Parametern. Die Parameter sind imho. alle im Programm als Konstanten definiert.

    So, das habe ich schon mal vorbereitet. Allerdings bin ich mir mit dem Parameter [RPIQ_USERMODE_PATH] unsicher.

    Hier mein Code:

    ich lese mich derweil mal in das Interface-Gedöns ein. Da ist allerlei wg. Endianess und Alignment gefordert...

    Das hört sich nach viel Arbeit an. Vielen Dank schon mal...


    Gruß

    Homer J. S.

    ...wenn die Donuts auch nur halb so gut schmecken wie sie aussehen, dann sehen sie doppelt so gut aus wie sie schmecken...

  • Halte mich/uns mit diesem Projekt bitte auf dem Laufenden, ich habe einen Raspi 400 zum rumspielen und experimentieren.

    Sorry, das habe ich vorhin überlesen.

    >> Allgmeine Infos zu Windows 11 Arm auf einem Raspberry PI 4: <<

    Hardware Voraussetzung:

    - Raspberry PI 4 oder 400 mit mindestens 4GB Ram
    - USB 3.0-Stick >=64GB oder besser USB-HDD für Betriebssystem (mein Test mit einer SD-Karte waren erschreckend langsam)

    - Kühler für den Prozessor ist pflicht (der PI hat wohl deutlich mehr mit Windows zu tuen wie mit einem Raspberry Pi OS)

    >> Link Prozessor Kühler:

    JOY-IT Armor Case "BLOCK ACTIVE" für den Raspberry Pi 4B
    Das Armor Gehäuse "BLOCK ACTIVE" für den Raspberry Pi® 4 B ist Ihr idealer Partner wenn es hart auf hart kommt und richtig heiß wird. Das auf Aluminium…
    www.pollin.de

    Software Voraussetzung:

    - Aktuelle Firmware auf dem PI für USB-Boot zu ermöglichen

    Einschränkungen:

    - Kein natives WLAN bisher möglich -> Dies betrifft den Adapter intern wie auch USB Dongle

    - Windows läuft bisher ausschließlich im Testmodus, da die Treiber nicht zertifiziert sind

    >> Link Videotutorial:

    Windows 11 Installation auf Raspberry Pi 4 / 400 - Schritt für Schritt
    Windows 11 Insider Preview gibt es auch für ARM Prozessoren. Da bietet es sich an, dies einmal auf einem Rapberry Pi 4 / 400 zu installieren. Die genaue Anle...
    www.youtube.com

    >> Link UUP dump:

    UUP dump
    Download UUP files from Windows Update servers with ease. This project is not affiliated with Microsoft Corporation.
    uupdump.net

    >> Link Wor-Projekt:

    Home | Windows on Raspberry

    >> Link RPi-Windows-Drivers (ARM64):

    GitHub - worproject/RPi-Windows-Drivers: Windows on ARM device drivers for the Raspberry Pi single-board computer.
    Windows on ARM device drivers for the Raspberry Pi single-board computer. - GitHub - worproject/RPi-Windows-Drivers: Windows on ARM device drivers for the…
    github.com

    >> Link FTDI-Drivers (ARM64):

    D2XX Drivers - FTDI

    >> Link PI Hardware Monitor:

    1 - https://www.worproject.ml/downloads#pimon

    2 - https://github.com/driver1998/PiMon


    Ich hoffe, ich konnte dir bzw. anderen einen guten Einstieg in Windows PI Welt geben?!

    Gruß

    Homer J. S.

    ...wenn die Donuts auch nur halb so gut schmecken wie sie aussehen, dann sehen sie doppelt so gut aus wie sie schmecken...

    2 Mal editiert, zuletzt von Homer J. S. (9. Februar 2022 um 22:38)

  • Danke für die Infos!

    Wenn man mal bissl sucht, findet man https://www.autoitscript.com/forum/topic/10…lslot/#comments

    Somit sollte das Mailslotgedöns zu schaffen sein^^

  • Andy :
    Sorry für die späte Antwort und danke für den Link. Jetz bin ich schonmal ein Stück weiter:

    Der Aufruf vom Handle sollte funktionieren (Handle wird zurückgegeben). Jetzt bin ich am Aufruf von _WinAPI_DeviceIoControl dran.


    AutoIt
    ;>> Ursprünglicher C-Code (data.c)
    ;DeviceIoControl(hDevice, IOCTL_MAILBOX_PROPERTY, (LPVOID)(&mailbox), sizeof(mailbox), (LPVOID)(&mailbox), sizeof(mailbox), &bytesReturned, 0);
    _WinAPI_DeviceIoControl($hDevice, IOCTL_MAILBOX_PROPERTY(), $pInBuffer = 0 [, $iInBufferSize = 0 [, $pOutBuffer = 0 [, $iOutBufferSize = 0]]]] )

    Was theoretisch schon mal gehen sollte, ist "hDevice" und "IOCTL_MAILBOX_PROPERTY". Jetzt kommt die "mailbox"-Geschichte, woran ich bisher scheitere.

    In dem File "rpiq.h" stehen aber die Definitionen drin. Hier der Link:

    PiMon/rpiq.h at master · driver1998/PiMon
    A simple hardware monitor for your Raspberry Pi running Windows. - PiMon/rpiq.h at master · driver1998/PiMon
    github.com


    Gruß

    Homer J. S.

    ...wenn die Donuts auch nur halb so gut schmecken wie sie aussehen, dann sehen sie doppelt so gut aus wie sie schmecken...

  • Jetzt kommt die "mailbox"-Geschichte, woran ich bisher scheitere.

    Die Struct muss erstellt werden, in deren Inhalt sich nach dem Aufruf imho die Werte befinden. Also die typedef struct _MAILBOX_HEADER in der Struct _MAILBOX_GET_TEMPERATURE

    MAILBOX_GET_TEMPERATURE mailbox;

    INIT_MAILBOX_GET_TEMPERATURE(&mailbox);

    definiert die Struct in der Struct s.o.

    Ich gehe davon aus, dass wenn die Struct MAILBOX_GET_TEMPERATURE "ordentlich gefüllt ist, der Aufruf

    ;DeviceIoControl(hDevice, IOCTL_MAILBOX_PROPERTY, (LPVOID)(&mailbox), sizeof(mailbox), (LPVOID)(&mailbox), sizeof(mailbox), &bytesReturned, 0);

    nur noch mit den Pointern auf diese Struct ausgeführt werden muss

  • Andy :

    Ich bin nicht so bewandert mit Strucs und Pointern. Ich habe mal das Struct in der Struct erstellt - Stimmt das so?



    Gruß

    Homer J. S.

    ...wenn die Donuts auch nur halb so gut schmecken wie sie aussehen, dann sehen sie doppelt so gut aus wie sie schmecken...

  • Andy :

    Ich glaube ich habe es am Laufen :party: . Allerdings habe ich erst heute Abend Zeit das ganze nochmals zu testen. Ich schreibe später dann nochmal. Vielen lieben Dank bis dahin schon mal :thumbup: .

    Gruß

    Homer J. S.

    ...wenn die Donuts auch nur halb so gut schmecken wie sie aussehen, dann sehen sie doppelt so gut aus wie sie schmecken...

    Einmal editiert, zuletzt von Homer J. S. (11. Februar 2022 um 11:43)

  • Cool!

    Hast du Win10 auf einer SSD installiert? Ich wollte einen meiner Rechner mit einer SSD upgraden und hätte dann eine übrig.

    Das wäre für Win10 jedenfalls nötig denke ich.

    Hast du da ein spezielles Image verwendet?

    Wobei ich schon kurz nach dem Kauf des 400 DARAN gedacht hatte :klatschen:

    ciao
    Andy


    "Schlechtes Benehmen halten die Leute doch nur deswegen für eine Art Vorrecht, weil keiner ihnen aufs Maul haut." Klaus Kinski
    "Hint: Write comments after each line. So you can (better) see what your program does and what it not does. And we can see what you're thinking what your program does and we can point to the missunderstandings." A-Jay

    Wie man Fragen richtig stellt... Tutorial: Wie man Script-Fehler findet und beseitigt...X-Y-Problem

    Einmal editiert, zuletzt von Andy (11. Februar 2022 um 17:19)

  • Hast du Win10 auf einer SSD installiert? Ich wollte einen meiner Rechner mit einer SSD upgraden und hätte dann eine übrig.

    Das wäre für Win10 jedenfalls nötig denke ich.

    Hast du da ein spezielles Image verwendet?

    Ich habe ein Windows 11 Arm preview installiert, wie es oben in dem verlinkten Video zu sehen ist. Als Speichermedium habe ich aus Platzgründen (Abmessungen) einen USB 3.0 Stick von SanDisk geholt. Eine SSD mit USB-Adapter soll aber noch schneller sein.


    Hier mein "quick and dirty"-Code für die Temperatur auszulesen. Wenn es meine Zeit erlaubt, dann will ich noch eine UDF mit mehr Funktionen erstellen. Nochmals vielen Dank für deine Hilfe!


    Gruß

    Homer J. S.

    PS: Ich setze das Thema auf gelöst :thumbup:

    ...wenn die Donuts auch nur halb so gut schmecken wie sie aussehen, dann sehen sie doppelt so gut aus wie sie schmecken...

  • Homer J. S. 11. Februar 2022 um 22:29

    Hat das Label von [ offen ] auf [ gelöst ] geändert.
  • Hier mein "quick and dirty"-Code für die Temperatur auszulesen

    Naja...dann ist es doch ab hier nur eine Fleißaufgabe, die anderen Parameter auszulesen und in eine schicke GUI zu überführen :P

    Sehr nice gemacht....ich habe auch viel gelernt! Der Dank geht zurück^^