Strona 1 z 1
Temperature log na Virtualbox
: 20 listopada 2022, 00:47
autor: RaPi
Witam
Mam odpalone Rapsberry na Virtualboxie i za zadanie mam stworzyc graf pokazujacy temp procka
(
https://projects.raspberrypi.org/en/pro ... ture-log/0 )
tylko ze to nie mozliwe jadac na VB, i napisalem kod :
Kod: Zaznacz cały
import random
temperautur = random.uniform(40, 60)
print(temperautur)
ktory wypluwa losowe liczby miedzy 40 i 60. Moje pytanie jest jak wstawic ten kod w kod gdzie temp jest zczytywana z procka, tutaj kod:
Kod: Zaznacz cały
from gpiozero import CPUTemperature
from time import sleep, strftime, time
import matplotlib.pyplot as plt
cpu = CPUTemperature()
plt.ion()
x = []
y = []
def write_temp(temp):
with open("/home/pi/cpu_temp.csv", "a") as log:
log.write("{0},{1}\n".format(strftime("%Y-%m-%d %H:%M:%S"),str(temp)))
def graph(temp):
y.append(temp)
x.append(time())
plt.clf()
plt.scatter(x,y)
plt.plot(x,y)
plt.draw()
while True:
temp = cpu.temperature
write_temp(temp)
graph(temp)
plt.pause(1)
Niewiem czy dobrze kombinuje ze cos trzeba zrobic z : from gpiozero import CPUTemperature
Re: Temperature log na Virtualbox
: 20 listopada 2022, 07:54
autor: dedito
Rozwiązanie 1:
Można zakomentować/usunąć/zmodyfikować funkcje biblioteki gpiozero i dorzucić swoje linijki oparte o funkcję random.
Rozwiązanie 2:
Doinstaluj sobie w systemie na VB bibliotekę gpiozero i wtedy "twój" kod powinien działać z ewentualnymi drobnymi przeróbkami np. stosując parametr sensor_file w funkcji CPUTemperature,
Np. u mnie na Debianie temperatury CPU znajduję w /sys/devices/platform/coretemp.0/hwmon/hwmon1/temp2_input (zamiast domyślnej ścieżki /sys/class/thermal/thermal_zone0/temp) czyli definicja zmiennej u mnie wyglądałaby tak:
Kod: Zaznacz cały
cpu = CPUTemperature(sensor_file='/sys/devices/platform/coretemp.0/hwmon/hwmon1/temp2_input')
Literatura:
https://gpiozero.readthedocs.io/en/stab ... emperature
Dodatkowo na Debianie stosuję takie "obejście" na gpiozero, bo bez tego wyrzuca mi błąd z pin_factory:
Kod: Zaznacz cały
import os
os.environ['GPIOZERO_PIN_FACTORY'] = os.environ.get('GPIOZERO_PIN_FACTORY', 'mock')
Literatura:
https://gpiozero.readthedocs.io/en/stab ... #mock-pins
Re: Temperature log na Virtualbox
: 20 listopada 2022, 15:08
autor: RaPi
Super, dziekuje za podpowiedzi, poradzilem sobie zanim otrzymalem odpowiedz, ale Rozwiazanie 2 tez jest ciekawe i sprawdze je.
Poradzilem sobie w nastepujacy sposob:
Kod: Zaznacz cały
from gpiozero import CPUTemperature
from time import sleep, strftime, time
import random
trl = random.uniform(40, 60)
print(trl)
import matplotlib.pyplot as plt
plt.ion()
x = []
y = []
def write_temp(temp):
with open("/home/pi/cpu_temp.csv", "a") as log:
log.write("{0},{1}\n".format(strftime("%Y-%m-%d %H:%M:%S"),str(temp)))
def graph(temp):
y.append(temp)
x.append(time())
plt.clf()
plt.scatter(x,y)
plt.plot(x,y)
plt.draw()
while True:
temp = trl
write_temp(temp)
graph(temp)
plt.pause(2)
Pytanie mam nastepujace, po odpaleniu kodu wszystko jest ok, zapisuje temperature do pliku i pojawia sie wykres, ale na wykresie caly czas stala temperature gdyz random.uniform(40, 60) odpala sie tylko raz i wykres opiera sie tylko na tej jednej temperaturze.
Czy jest mozliwe zastosowanie jakiegos loopa lub cos podobnego tak zeby graf pokazywal wiecej niz jedna temperature?
Mam nadzieje ze wyrazilem sie zrozumiale
https://ibb.co/7kqzpRw
Re: Temperature log na Virtualbox
: 20 listopada 2022, 18:10
autor: dedito
Co do bieżącego kodu:
Temperatura jest stała bo losujesz tylko raz.
Losuj w pętli while, wtedy temperatura będzie się zmieniać.
Co do rozwiązania nr2, widzę, że masz w bieżącym, działającym kodzie niezakomentowaną linijkę
więc już chyba masz obsługę wspomnianej biblioteki.
Pozostaje więc tylko znaleźć ścieżkę systemową do temperatury CPU, aby mieć działające rozwiązanie oparte o rzeczywiste temperatury CPU.
Re: Temperature log na Virtualbox
: 20 listopada 2022, 20:41
autor: RaPi
dedito pisze: ↑20 listopada 2022, 18:10
Co do bieżącego kodu:
Temperatura jest stała bo losujesz tylko raz.
Losuj w pętli while, wtedy temperatura będzie się zmieniać.
Dodalem losowanie w petli i wyglada to tak:
https://ibb.co/jgQkHj2
Ale ciagle losuje a graf sie nie odpala, wyglada to tak jak by graf odpalal sie dopiero po wylosowaniu liczby a ze losuje caly czas to blokuje graf, jest jakis sposob na to?
Re: Temperature log na Virtualbox
: 20 listopada 2022, 21:09
autor: dedito
Nie widać pełnego kodu na tym obrazku, ale domyślam się na czym polega błąd.
Chyba stworzyłeś kolejną pętle while, a ja miałem na myśli istniejącą już pętle while.
Poza tym wklej pełny kod w formie tekstowej na forum w znaczniki code, bo z obrazka nie przekleję kodu aby go przetestować.
Polecam przerobić jakiś kurs pythona.
Re: Temperature log na Virtualbox
: 20 listopada 2022, 21:20
autor: RaPi
dedito pisze: ↑20 listopada 2022, 21:09
Nie widać pełnego kodu na tym obrazku, ale domyślam się na czym polega błąd.
Chyba stworzyłeś kolejną pętle while, a ja miałem na myśli istniejącą już pętle while.
Poza tym wklej pełny kod w formie tekstowej na forum w znaczniki code, bo z obrazka nie przekleję kodu aby go przetestować.
Polecam przerobić jakiś kurs pythona.
Jestem zupelnie zielony jezeli chodzi o pythona i ucze sie podstaw, to akurat jest jedno z zadan i idzie mi to topornie, niestety. Dziekuje za podpowiedzi, dzieki nim poradzilem sobie, dzieki.
Kod: Zaznacz cały
from gpiozero import CPUTemperature
from time import sleep, strftime, time
import matplotlib.pyplot as plt
plt.ion()
x = []
y = []
def write_temp(temp):
with open("/home/pi/cpu_temp.csv", "a") as log:
log.write("{0},{1}\n".format(strftime("%Y-%m-%d %H:%M:%S"),str(temp)))
def graph(temp):
y.append(temp)
x.append(time())
plt.clf()
plt.scatter(x,y)
plt.plot(x,y)
plt.draw()
while True:
import random
trl = random.uniform(40, 60)
print(trl)
temp = trl
write_temp(temp)
graph(temp)
plt.pause(1)
Re: Temperature log na Virtualbox
: 21 listopada 2022, 08:56
autor: dedito
Na początki nauki może być.
Z czasem powinno być lepiej.
Zamykam.