Visualisieren Sie Temperaturüberwachungsdaten des Raspberry PI Zero W-Prozessors in R / Sudo Null IT News

Um Daten darin automatisch zu aktualisieren ein kleines Wettervisualisierungsprojekt in den Regionen der Russischen Föderation Ich verwende ein R-Skript, das nach einem Zeitplan (täglich alle drei Stunden) auf meinem kleinen Heimgerät, dem Raspberry PI Zero W, ausgeführt wird.

Kleine Haushaltshilfe, die rund um die Uhr arbeitetKleine Haushaltshilfe, die rund um die Uhr arbeitet

Ausgangsdaten: cpu_temp.log

Dieses Mal werden wir die Daten der Temperaturänderungen des Raspberry PI-Prozessors pro Minute visualisieren, die mithilfe eines Bash-Skripts in einer speziellen Protokolldatei gespeichert werden:

#!/bin/bash date +”%d.%m.%Y %T” | tr ‘\n’ ‘\t’ >> /home/pi/cpu_temp.log ; vcgencmd Maß_temp | tr -d “temp=” | tr -d “‘C” >> /home/pi/cpu_temp.log

Um ein Bash-Skript nach Zeitplan über Cron auszuführen, wurde ein Eintrag hinzugefügt (jede Minute):

*/1 * * * * ~/cpu_temp.sh

Als Ergebnis der Skriptausführung werden Daten zur Prozessortemperatur im Protokoll gespeichert:

Wir visualisieren diese Daten mit R (cpu_temp.R) und fügen Sie das Raspberry PI-Logo in das Diagramm ein:

library(tidyverse) library(readr) library(geomtextpath) library(glue) library(here) # Lade das Raspberry Pi Logo png <- magick::image_read("raspberrypi-logo.png") img <- grid::rasterGrob(png , interpolate = TRUE) # Daten laden (Temperaturprotokoll) cpu_temp <- read_delim( "cpu_temp.log", delim = "\t", col_names = c("datetime", "cpu_temp"), trim_ws = TRUE) %>% mutate(datetime = lubridate::as_datetime(datetime, “%d.%m.%Y %H:%M:%S”, tz = “Asia/Yekaterinburg”)) # Zeitintervall für Diagramm — letzte 3 Stunden von log last_datetime <- cpu_temp$datetime[length(cpu_temp$datetime)] first_datetime <- last_datetime - lubridate::hours(3) # Beschreibend für Diagramm (min, max, avg) maxTempCPU <- max(cpu_temp$cpu_temp[between(cpu_temp$datetime, first_datetime, last_datetime)]) minTempCPU <- min(cpu_temp$cpu_temp[between(cpu_temp$datetime, first_datetime, last_datetime)]) meanTempCPU_period <- round(mean(cpu_temp$cpu_temp[between(cpu_temp$datetime, first_datetime, last_datetime)]), 1) # zum Einfügen des Logos mt <- ceiling(max(cpu_temp$cpu_temp)) mt_min <- floor(min(cpu_temp$cpu_temp)) x_max <- last_datetime + lubridate::minutes(25) x_min <- last_datetime + lubridate ::minutes(10) cpu_temp %>% filter(between(datetime, first_datetime, last_datetime)) %>% ggplot(aes(datetime, cpu_temp)) + annotation_custom( img, ymin = mt , ymax = mt + 8.25, xmin = x_min, xmax = x_max ) + geom_textthline( yintercept = mean(cpu_temp$cpu_temp), size = 3.75, linetype = “dashed”, linewidth = 0.25, label = glue(“Durchschnitt aller Zeiten: {round(mean( cpu_temp $cpu_temp),1)}°C”), hjust = 0.985, vjust = -0.2, color = “gray70”, rich = TRUE ) + geom_textthline( yintercept = meanTempCPU_period, size = 3.75, linewidth = 0.25 , label = glue(“3 Stunden Durchschnitt: {meanTempCPU_period}°C”), hjust = 0.985, vjust = -0.2, color = “gray70”, rich = TRUE ) + geom_step(color = “gray10 “) + scale_y_continuous( breaks = seq(mt_min, mt + 1, 2), limits = c(mt_min, mt + 1), labels = c(as. character(seq(mt_min, mt – 1, 2)), glue::glue(“{mt + 1}°C”)) ) + scale_x_datetime( “Time”, date_breaks = “30 min”, date_labels = “%H:%M”, expand = c(0.15, 0) ) + labs( title = “Raspberry Pi Zero W temperature”, subtitle = glue( “Temperaturänderung pro Minute in den letzten 3 Stunden\n”, “{format(first_datetime, format=”% d % b %H:%M”)} – {format(last_datetime, format=”%H:%M”)}”, ” | Min. {minTempCPU}°C | Durchschnitt {meanTempCPU_period}°C | Max {maxTempCPU}°C” ), x = “Time”, y = “” ) + coord_cartesian(clip = “off”) + theme(text = element_text(family = “Open Sans”), panel.background = element_blank( ), axis.title.x = element_text(size = 14), plot.margin = margin(25, 30, 10, 12), plot.title.position = “plot”, plot.subtitle = element_text(size = 12, color = “gray60”), title = element_text(size = 16), axis.text.y = element_text(size = 12), axis.text.x = element_text(size = 12) ) ggsave( glue(“img/cpu_temp_ {format(last_datetime, ‘%d_%m_%Y_%H_%M’)}.png”), dpi = 300, Skalierung = 1,5 )

Das endgültige Diagramm sieht so aus:

Um das Skript alle drei Stunden auszuführen, erstellen Sie eine Aufgabe in cron:

0 */3 * * * Rscript /home/pi/cpu_temp/cpu_temp_pi.R

Wir werden das resultierende Diagramm in Telegrammen über einen Telegramm-Bot an uns selbst senden (siehe ein hervorragendes Tutorial zum Erstellen von Bots in R), um persönliche Benachrichtigungen mit einem einfachen Befehl am Ende unseres Skripts zu senden:

bot$sendPhoto(chat_id, photo = glue(“~/cpu_temp/img/cpu_temp_{format(last_datetime, ‘%d_%m_%Y_%H_%M’)}.png”) )Nachrichten mit einem Zeitplan vom BotNachrichten mit einem Zeitplan vom Bot

PS: Für eine schnelle Installation der neuesten Version von R, ohne die Hauptpakete kompilieren zu müssen, empfehle ich, die Informationen von zu verwenden Projekt R4Pi.

Similar Posts

Leave a Reply

Your email address will not be published.