Ankündigung

Einklappen
Keine Ankündigung bisher.

RasPi: (CPU) Temperatur aufzeichnen

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Maexle
    antwortet
    Morg
    Danke für Deine Unterstützung


    Zitat von Morg Beitrag anzeigen
    su - <shng-nutzer>
    da ich das Image aus dem Forum verwende --> sollte der User doch "smarthome" sein und mit diesem melde ich mich auch per ssh an


    wenn ich ein "w" eingebe wird mir

    Code:
    USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
    [MARKIEREN]smarthom[/MARKIEREN] pts/0
    ich denke da fehlt einfach nur das "e" wegen der Spaltenbreite


    Zitat von Morg Beitrag anzeigen
    Ich habe in der Logik noch das print-Kommando stehen, damit habe ich getestet, bis die Ergebnisse stimmten, und danach erst angefangen, in die Items zu schreiben.

    Zitat von Morg Beitrag anzeigen
    # print(f'Result: f={frq}, flags={thr}, uptime={upt}, T={tmp}')
    Du meinst diese Zeile? - wo wird den der "Print" ausgegeben?



    edit: auch der Benutzer "pi" darf die "Temperatur/Takt Befehle" ausführen und bekommt auch ein Ergebnis
    Zuletzt geändert von bmx; 02.09.2021, 14:15.

    Einen Kommentar schreiben:


  • Morg
    antwortet
    su - <shng-nutzer>

    und dann nochmal

    cat /sys/class/thermal/thermal_zone0/temp
    vcgencmd measure_clock arm

    Wenn das nicht geht, musst du schauen, wie du das zum Laufen bekommst (Rechte auf den jeweiligen Dateien, ggf. sudo...?)

    Ich habe in der Logik noch das print-Kommando stehen, damit habe ich getestet, bis die Ergebnisse stimmten, und danach erst angefangen, in die Items zu schreiben.

    Einen Kommentar schreiben:


  • Maexle
    antwortet
    Zitat von Morg Beitrag anzeigen
    Darf dein shng-User das auch lesen?
    ich denke schon - wie kann ich das prüfen?


    Zitat von Morg Beitrag anzeigen
    Hast du den Item-Tree und die Bezeichnung der Items entsprechend angepasst?
    das "d" entfernt und "alles um 1 nach links eingerückt"

    Code:
    # hauspi.yaml
    hauspi:
        temp:
            type: num
            database: init
            visu_acl: ro
            
        uptime:
            type: num
            visu_acl: ro
    
            text:
                type: str
                visu_acl: ro
    
        freq:
            type: num
            database: init
            visu_acl: ro


    hier ebenfalls die "d." entfernt

    Code:
    
    <tr align="center">
    <td colspan="3" align="center"><table><tr>
    <td align="center">
    {{ basic.symbol('', ['hauspi.flags.uv', 'hauspi.flags.uv_hist'], '', 'measure_voltage', true, 'VAR1', '#f00') }}
    {{ basic.symbol('', ['hauspi.flags.uv', 'hauspi.flags.uv_hist'], '', 'measure_voltage', true, 'VAR2 && !VAR1', '#ffffff') }}
    {{ basic.symbol('', ['hauspi.flags.uv', 'hauspi.flags.uv_hist'], '', 'measure_voltage', true, '!(VAR2 || VAR1)', '#444') }}
    </td>
    <td align="center">
    {{ basic.symbol('', ['hauspi.flags.freq_cap', 'hauspi.flags.freq_cap_hist'], '', 'measure_power_meter', true, 'VAR1', '#f00') }}
    {{ basic.symbol('', ['hauspi.flags.freq_cap', 'hauspi.flags.freq_cap_hist'], '', 'measure_power_meter', true, 'VAR2 && !VAR1', '#ffffff') }}
    {{ basic.symbol('', ['hauspi.flags.freq_cap', 'hauspi.flags.freq_cap_hist'], '', 'measure_power_meter', true, '!(VAR2 || VAR1)', '#444') }}
    </td>
    <td align="center">
    {{ basic.symbol('', ['hauspi.flags.throttled', 'hauspi.flags.throttled_hist'], '', 'jquery_forbidden', true, 'VAR1', '#f00') }}
    {{ basic.symbol('', ['hauspi.flags.throttled', 'hauspi.flags.throttled_hist'], '', 'jquery_forbidden', true, 'VAR2 && !VAR1', '#ffffff') }}
    {{ basic.symbol('', ['hauspi.flags.throttled', 'hauspi.flags.throttled_hist'], '', 'jquery_forbidden', true, '!(VAR2 || VAR1)', '#444') }}
    </td>
    <td align="center">
    {{ basic.symbol('', ['hauspi.flags.temp_limit', 'hauspi.flags.temp_limit_hist'], '', 'temp_temperature_max', true, 'VAR1', '#f00') }}
    {{ basic.symbol('', ['hauspi.flags.temp_limit', 'hauspi.flags.temp_limit_hist'], '', 'temp_temperature_max', true, 'VAR2 && !VAR1', '#ffffff') }}
    {{ basic.symbol('', ['hauspi.flags.temp_limit', 'hauspi.flags.temp_limit_hist'], '', 'temp_temperature_max', true, '!(VAR2 || VAR1)', '#444') }}
    </td>
    </tr></table></td>
    </tr>
    </table>
    </div>



    in der Logik ebenfalls -->


    Code:
    sh.hauspi.freq()(frq)
    sh.hauspi.flags(thr)
    sh.hauspi.uptime(upt)
    sh.hauspi.temp(tmp)
    sh.hauspi.uptime.text(ups)

    Einen Kommentar schreiben:


  • Morg
    antwortet
    Darf dein shng-User das auch lesen?

    Hast du den Item-Tree und die Bezeichnung der Items entsprechend angepasst?

    Der abgedruckte Item-Tree hängt bei mir noch unterhalb vom Element "d", das ist hier aber nicht drin.

    In der Logik (und der Visu) sind die Items mit "d.hauspi...." bezeichnet.
    Zuletzt geändert von Morg; 01.09.2021, 18:47.

    Einen Kommentar schreiben:


  • Maexle
    antwortet
    Der Befehl
    Code:
    cat /sys/class/thermal/thermal_zone0/temp
    liefert: 52616 also am Auslesen der Datei liegt es schon mal nicht

    Einen Kommentar schreiben:


  • Maexle
    antwortet
    Sipple
    Vielen Dank - ich scheitere an der Weiterverarbeitung --> aber

    Zitat von Morg Beitrag anzeigen
    Für den Raspi:


    hat recht ausführliche Dateien zur Verfügung gestellt

    Vielen Dank dafür


    --> leider zeigt mir den Item-Tree jeweils 0 oder nichts an --> dementsprechend kommt auf der VISU auch nichts an.

    Ich meine alles 1:1 übernommen zu haben... auch die sys_stats.py wird mir unter "Nutzerlogiken" im AdminInterface mit einem grünen Pfeil angezeigt
    Zuletzt geändert von Maexle; 01.09.2021, 12:07.

    Einen Kommentar schreiben:


  • Morg
    antwortet
    Für den Raspi:

    Ich lasse die Systemparameter CPU-Frequenz und Temperatur sowie die Uptime und die Flags auslesen, speichern und in der Visu anzeigen. Die Flags werden aus dem Statusfeld ausgelesen und in eigene Items verfrachtet. Die Anzeige der Flags erfolgt mit Symbolen in "ausgeblendet" (aus), grau (ist mal aufgetreten, aber nicht aktiv) sowie weiß (aktiv).

    Ich habe auch noch einen Plot über Frequenz und Temperatur laufen.

    Items:
    Code:
        hauspi:
            temp:
                type: num
                database: init
                visu_acl: ro
    
            uptime:
                type: num
                visu_acl: ro
    
                text:
                    type: str
                    visu_acl: ro
    
            freq:
                type: num
                database: init
                visu_acl: ro
    
            flags:
                type: num
                visu_acl: ro
    
                uv:
                    type: bool
                    database: init
                    eval_trigger: ..
                    eval: sh...() >> 0 & 1
                    visu_acl: ro
    
                freq_cap:
                    type: bool
                    database: init
                    eval_trigger: ..
                    eval: sh...() >> 1 & 1
                    visu_acl: ro
    
                throttled:
                    type: bool
                    database: init
                    eval_trigger: ..
                    eval: sh...() >> 2 & 1
                    visu_acl: ro
    
                temp_limit:
                    type: bool
                    database: init
                    eval_trigger: ..
                    eval: sh...() >> 3 & 1
                    visu_acl: ro
    
                uv_hist:
                    type: bool
                    database: init
                    eval_trigger: ..
                    eval: sh...() >> 16 & 1
                    visu_acl: ro
    
                freq_cap_hist:
                    type: bool
                    database: init
                    eval_trigger: ..
                    eval: sh...() >> 17 & 1
                    visu_acl: ro
    
                throttled_hist:
                    type: bool
                    database: init
                    eval_trigger: ..
                    eval: sh...() >> 18 & 1
                    visu_acl: ro
    
                temp_limit_hist:
                    type: bool
                    database: init
                    eval_trigger: ..
                    eval: sh...() >> 19 & 1
                    visu_acl: ro

    Die Logik dazu:
    Code:
    #!/usr/bin/env python3
    # sys_stats.py.py
    
    import subprocess
    from datetime import timedelta
    
    def call(cmd, arg):
        process = subprocess.Popen([cmd, arg], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
        stdout, stderr = process.communicate()
        return stdout.decode('utf-8').strip()
    
    # seconds
    with open("/proc/uptime", "r") as f:
        upt, __, __ = f.read().partition(' ')
        upt = int(float(upt))
    
        ups = str(datetime.timedelta(seconds=upt))
    
    # float with 1 decimal
    with open("/sys/class/thermal/thermal_zone0/temp", "r") as f:
        tmp = int(float(f.read().strip()) / 100) / 10
    
    # MHz
    __, __, frq = call('vcgencmd', 'measure_clock arm').strip().partition('=')
    frq = int(int(frq) / 1000000)
    
    # int
    __, __, thr = call('vcgencmd', 'get_throttled').strip().partition('=')
    thr = int(thr, 16)
    
    # print(f'Result: f={frq}, flags={thr}, uptime={upt}, T={tmp}')
    
    sh.d.hauspi.freq(frq)
    sh.d.hauspi.flags(thr)
    sh.d.hauspi.uptime(upt)
    sh.d.hauspi.temp(tmp)
    sh.d.hauspi.uptime.text(ups)
    Und noch der Ausschnitt für die Visu, wenn gewünscht:

    Code:
    <div class="block">
    <div class="ui-bar-c ui-li-divider">hauspi</div>
    <div class="ui-fixed ui-body-a">
    <table width="100%">
    <tr>
    <td align="left" style="padding-left: 10px">Uptime:</td>
    <td></td>
    <td align="right">{{ basic.print('', 'd.hauspi.uptime.text') }}</td>
    </tr>
    <tr>
    <td align="left" style="padding-left: 10px">Temperatur:</td>
    <td>{{ icon.graph('', '', 'd.hauspi.temp', 20, 65) }}</td>
    <td align="right">{{ basic.print('', 'd.hauspi.temp', '°C', '', [55, 60], [icon0, '#f9a028', '#f00']) }}</td>
    </tr>
    <tr>
    <td align="left" style="padding-left: 10px">Frequenz:</td>
    <td>{{ icon.graph('', '', 'd.hauspi.freq', 500, 1400) }}</td>
    <td align="right">{{ basic.print('', 'd.hauspi.freq', 'MHz') }}</td>
    </tr>
    <tr align="center">
    <td colspan="3" align="center"><table><tr>
    <td align="center">
    {{ basic.symbol('', ['d.hauspi.flags.uv', 'd.hauspi.flags.uv_hist'], '', 'measure_voltage', true, 'VAR1', '#f00') }}
    {{ basic.symbol('', ['d.hauspi.flags.uv', 'd.hauspi.flags.uv_hist'], '', 'measure_voltage', true, 'VAR2 && !VAR1', '#ffffff') }}
    {{ basic.symbol('', ['d.hauspi.flags.uv', 'd.hauspi.flags.uv_hist'], '', 'measure_voltage', true, '!(VAR2 || VAR1)', '#444') }}
    </td>
    <td align="center">
    {{ basic.symbol('', ['d.hauspi.flags.freq_cap', 'd.hauspi.flags.freq_cap_hist'], '', 'measure_power_meter', true, 'VAR1', '#f00') }}
    {{ basic.symbol('', ['d.hauspi.flags.freq_cap', 'd.hauspi.flags.freq_cap_hist'], '', 'measure_power_meter', true, 'VAR2 && !VAR1', '#ffffff') }}
    {{ basic.symbol('', ['d.hauspi.flags.freq_cap', 'd.hauspi.flags.freq_cap_hist'], '', 'measure_power_meter', true, '!(VAR2 || VAR1)', '#444') }}
    </td>
    <td align="center">
    {{ basic.symbol('', ['d.hauspi.flags.throttled', 'd.hauspi.flags.throttled_hist'], '', 'jquery_forbidden', true, 'VAR1', '#f00') }}
    {{ basic.symbol('', ['d.hauspi.flags.throttled', 'd.hauspi.flags.throttled_hist'], '', 'jquery_forbidden', true, 'VAR2 && !VAR1', '#ffffff') }}
    {{ basic.symbol('', ['d.hauspi.flags.throttled', 'd.hauspi.flags.throttled_hist'], '', 'jquery_forbidden', true, '!(VAR2 || VAR1)', '#444') }}
    </td>
    <td align="center">
    {{ basic.symbol('', ['d.hauspi.flags.temp_limit', 'd.hauspi.flags.temp_limit_hist'], '', 'temp_temperature_max', true, 'VAR1', '#f00') }}
    {{ basic.symbol('', ['d.hauspi.flags.temp_limit', 'd.hauspi.flags.temp_limit_hist'], '', 'temp_temperature_max', true, 'VAR2 && !VAR1', '#ffffff') }}
    {{ basic.symbol('', ['d.hauspi.flags.temp_limit', 'd.hauspi.flags.temp_limit_hist'], '', 'temp_temperature_max', true, '!(VAR2 || VAR1)', '#444') }}
    </td>
    </tr></table></td>
    </tr>
    </table>
    </div>

    Einen Kommentar schreiben:


  • Sipple
    antwortet
    Vorschlag für eine kleine Logik, schnell mal hinger... und tut was es soll:

    Code:
    #!/usr/bin/env python3
    # cputemp.py
    import subprocess
    cputemp = subprocess.run(['cat', '/sys/class/thermal/thermal_zone0/temp'], stdout=subprocess.PIPE)
    sh.cpu.temp(round(int(cputemp.stdout.decode('utf-8')) / 1000, 1))
    Wobei "sh.cpu.temp" nur ein Beispiel-Item-Name ist. Da nimmst du was du willst.
    Die Logik lässt du z.B. alle 5 Minuten per Crontab triggern. Das sollte reichen (in den Logikparametern "Crontab(s) -> init" und "Cycle -> 300").
    Damit hast du die Temperatur in einem Item und kannst damit machen was du willst, also auch in die DB schreiben und dann als Plot anzeigen.

    Vielleicht geht das ja sogar als Einzeiler über eval in der Itemdefinition, da bin ich aber jetzt überfragt.

    Edit: Hab die Rundung auf 1 Nachkommastelle gleich eingebaut. Die 1 am Ende der letzten Zeile beliebig ändern. 0 = keine Nachkommastellen. Kann man auch komplett weg lassen, ist Default.

    Das sollte so nun für alle Systeme klappen, nicht nur für Raspis.
    Zuletzt geändert von Sipple; 01.09.2021, 10:53.

    Einen Kommentar schreiben:


  • Maexle
    antwortet
    Du meinst hier (Admin Interface Logics) eine neue Logik "RPi-Temp-lesen"


    #!/usr/bin/env python3
    # logics/example_logging.py

    # Diese Beispiel-Logik zeigt, wie Logeinträge verschiedener Levels in die Logdateien eingetragen werden.
    #
    # Dazu:
    # - Diese Logik triggern
    # - die Einträge in ../var/log/smarthome-warnings.log und ../var/log/smarthome-details.log prüfen

    logger.warning("Logik '{}' (filename '{}') wurde getriggert (WARNING)".format(logic.name, logic.filename))
    logger.info("Logik '{}' (filename '{}') wurde getriggert (INFO)".format(logic.name, logic.filename))
    logger.debug("Logik '{}' (filename '{}') wurde getriggert (DEBUG)".format(logic.name, logic.filename))

    Einen Kommentar schreiben:


  • bmx
    antwortet
    Du kannst in einer Logik die Datei /sys/class/thermal/thermal_zone0/temp auslesen und erhältst die Temperatur in milligrad celsius, z.B. auf meinem NUC

    Code:
    smarthome@sh11:~$ cat /sys/class/thermal/thermal_zone0/temp
    39000
    Entspricht also 39 °C

    Einen Kommentar schreiben:


  • Maexle
    hat ein Thema erstellt RasPi: (CPU) Temperatur aufzeichnen.

    RasPi: (CPU) Temperatur aufzeichnen

    Hallo zusammen,




    da die Wetterlage nennen wir es mal bescheiden ist… habe ich es mal angegangen. Der RasPi ist nun in sein Gehäuse gezogen.

    Aus Neugierde habe ich mal die Temperatur ausgelesen.

    Befehl:

    Code:
    vcgencmd measure_temp
    Code:
    while endless=0; do echo `date +%c` Uhr: `vcgencmd measure_temp`; sleep 30; done ~/temperatur.txt
    Nun gibt es auch diverse Tipps diese Temperaturen zu speichern, wäre es auch möglich, die RasPi-Temp in SHNG/SmartVISU zu verwenden? Da dort schon ein plot für jeden Raum sowie die Außentemperatur besteht.







    Danke
Lädt...
X