
Lg Stefan
Code: Alles auswählen
PWM_BASE = 10
pwm = (PWM_BASE)
@blynk.VIRTUAL_WRITE(39)
def slider(value):
global pwm
value1=int(float(value))
pwm = value1 + (PWM_BASE)
print(pwm)
while True:
blynk.run()
Code: Alles auswählen
PWM_BASE = 10
pwm = (PWM_BASE)
@blynk.VIRTUAL_WRITE(39)
def slider(value):
global pwm
value1=int(float(value[0]))
pwm = value1 + (PWM_BASE)
print(pwm) #Ergibt den slider wert (47)
print(pwm) #Ergibt 10 ... (PWM_BASE)
while True:
blynk.run()
Code: Alles auswählen
@blynk.VIRTUAL_WRITE(39)
def slider(value):
value1= str(value[0])
print (value1)
Code: Alles auswählen
#!/usr/bin/python3
#coding= utf-8
import RPi.GPIO as GPIO
import time
import datetime
#import os
#import sys
import BlynkLib
BLYNK_AUTH = 'XY'
blynk = BlynkLib.Blynk(BLYNK_AUTH, server='192.168.10.102', port=8080, heartbeat=30)
GPIO.setmode(GPIO.BCM) # BCM-Bezeichnung der Pins verwenden
GPIO.setwarnings(False)
ts = time.time()
timestamp = datetime.datetime.fromtimestamp(ts).strftime('%d.%m.%Y; %H:%M:%S')
Faktor = 20 # inaktiv -Version 1: wird von der aktuellen CPU Temp. abgezogen als Duty Cycle (z.B. 37Grad minus Faktor= Duty Cycle Luefter)
# aktiv -Version 2: wird dem delta (CPU - Innentemp) hinzu gerechnet um Drehzahl anzupassen
Luefter = 17 # GPIO PWM zum Luefter
Regelinterval = 10.0
GPIO.setup(Luefter, GPIO.OUT) # GPIO 17 auf Ausgang setzen
log = "/media/pi/USB_32GB/Raspi_101_Logs/PWMLuefter.csv"
alog = "/media/pi/USB_32GB/Archiv/PWMLuefter2021.csv"
def aktuelleTemperatur(): # Umgebungstemp Raspi -Technikfach Temp Sensor auslesen
# 1-wire Slave Datei lesen
file = open('/sys/bus/w1/devices/28-000005bbd5b3/w1_slave')
filecontent = file.read()
file.close()
# Temperaturwerte auslesen und konvertieren
stringvalue = filecontent.split("\n")[1].split(" ")[9]
temperature = float(stringvalue[2:]) / 1000
# Temperatur ausgeben
rueckgabewert = '%6.2f' % temperature
return(rueckgabewert)
# PWM einschalten
pwm = GPIO.PWM(Luefter, 250); # soll ?? 25kHz Frequenz
pwm.start(10)
print('Start mit 10% ')
time.sleep(3.0)
try:
while True:
# CPU1 Temp
tempData = "/sys/class/thermal/thermal_zone0/temp"
dateilesen = open(tempData, "r")
CPURPi1 = dateilesen.readline(2)
dateilesen.close()
# CPU2 Temp
CPUtempRPi2 = open('/home/pi/Termo_Sensoren/CPUtempRPi2.txt')
CPURPi2 = CPUtempRPi2.read()
CPUtempRPi2.close()
ts = time.time()
timestamp = datetime.datetime.fromtimestamp(ts).strftime('%d.%m.%Y; %H:%M:%S')
#Temperatur Technikfach
messdaten = aktuelleTemperatur()
# Die waermere CPU steuert den Lüfter
if CPURPi1 >= CPURPi2:
print("1 ist waermer")
CPUWert = CPURPi1
CPU = 'RPi1'
elif CPURPi1 < CPURPi2:
print("2 ist waermer")
CPUWert = CPURPi2
CPU = 'RPi2'
global rpm
global rpmf
rpmf = 1
#rpm = float(temperatur)-Faktor #feste Stellgrösse - Version 1
delta = (float(CPUWert))-(float(messdaten))
rpm = delta + Faktor # Variable delta steuert Duty Cycle - Version 2
#rpmf = round(rpm, 0)
#print(rpm)
#print(rpmf)
@blynk.VIRTUAL_WRITE(39)
def slider(value):
value1= int(float(value[0]))
value2 = value1 + rpm
rpmf = round(value2, 0)
print(value1)
print(value2)
print(rpmf)
pwm.ChangeDutyCycle(rpmf)
#pwm.ChangeDutyCycle(100)
print (timestamp, "CPU1: " + CPURPi1 + " °C ", "CPU2: " + CPURPi2 + " °C ","DutyCycle:", rpmf, "%", " Technikfach:", messdaten,"°C ","Delta:","{0:.2f}".format(delta),"°C")
#Log file
logfile = open(log, 'a')
logfile.write(timestamp+"; CPU 1: " + CPURPi1 +"°C; "+" CPU 2: " + CPURPi2 +"°C; "+ (str(rpmf))+"% DutyCycle; " +"Technikfach:"+ messdaten +"°C;"+" Delta: "+"{0:.2f}".format(delta)+"°C; "+ CPU +"\n")
logfile.close()
#alog file
logfile = open(alog, 'a')
logfile.write(timestamp+"; CPU 1: " + CPURPi1 +"°C; "+" CPU 2: " + CPURPi2 +"°C; "+ (str(rpmf))+"% DutyCycle; " +"Technikfach:"+ messdaten +"°C;"+" Delta: "+"{0:.2f}".format(delta)+"°C; "+ CPU +"\n")
logfile.close()
if CPURPi1 >= ('65'): # ab ca. 60C CPU Luefter 100%
pwm.ChangeDutyCycle(100)
elif CPURPi2 >= ('65'): # CPU Temp des RPi2 Luefter auf 100%
pwm.ChangeDutyCycle(100)
blynk.run()
time.sleep(Regelinterval) #Regelintervall
# Abbruch durch Taste Strg-C
except KeyboardInterrupt:
pwm.stop()
GPIO.cleanup()
Code: Alles auswählen
#!/usr/bin/python3
import time
import datetime
from functools import partial
from queue import Queue
from RPi import GPIO
import BlynkLib
BLYNK_AUTH = 'XY'
LUEFTER_PIN = 17
FAKTOR = 20
REGEL_INTERVAL = 10
LOGFILENAME = "/media/pi/USB_32GB/Raspi_101_Logs/PWMLuefter.csv"
ARCHIVE_LOGFILENAME = "/media/pi/USB_32GB/Archiv/PWMLuefter2021.csv"
def read_temperature_slave():
# Umgebungstemp Raspi -Technikfach Temp Sensor auslesen
with open('/sys/bus/w1/devices/28-000005bbd5b3/w1_slave') as data:
_, t, temperature = data.read().rpartition('t=')
if not t:
return float('nan')
return float(temperature) / 1000
def read_temperature_cpu1():
with open("/sys/class/thermal/thermal_zone0/temp") as data:
return float(data.read()) / 1000
def read_temperature_cpu2():
with open('/home/pi/Termo_Sensoren/CPUtempRPi2.txt') as data:
return float(data.read()) # warum hier kein / 1000?
def slider(queue, value):
queue.put(float(value[0]))
def main():
try:
queue = Queue()
blynk = BlynkLib.Blynk(BLYNK_AUTH, server='192.168.10.102', port=8080, heartbeat=30)
blynk.on('V39', partial(slider, queue))
GPIO.setmode(GPIO.BCM) # BCM-Bezeichnung der Pins verwenden
GPIO.setup(LUEFTER_PIN, GPIO.OUT) # GPIO 17 auf Ausgang setzen
# PWM einschalten
pwm = GPIO.PWM(LUEFTER_PIN, 250); # soll ?? 25kHz Frequenz
pwm.start(10)
print('Start mit 10% ')
time.sleep(3.0)
rpmf = 1
while True:
now = datetime.datetime.now()
cpu1_temperature = read_temperature_cpu1()
cpu2_temperature = read_temperature_cpu2()
slave_temperature = read_temperature_slave()
max_temperature = max(cpu1_temperature, cpu2_temperature)
cpu = "RPi1" if cpu1_temperature > cpu2_temperature else "RPi2"
while not queue.empty():
rpmf = queue.get()
delta = max_temperature - slave_temperature
rpm = delta + FAKTOR + rpmf
log_line = f"{now:%Y-%m-%d %H:%M:%S}; CPU 1: {cpu1_temperature:.2f}°C; CPU 2: {cpu2_temperature:.2f}°C; {rpm}% DutyCycle; Technikfach: {slave_temperature:.2f}°C; Delta: {delta:.2f}°C; {cpu}\n"
with open(LOGFILENAME, "a") as output:
output.write(log_line)
with open(ARCHIVE_LOGFILENAME, "a") as output:
output.write(log_line)
pwm.ChangeDutyCycle(100 if max_temperature >= 65 else rpm)
blynk.run()
time.sleep(REGEL_INTERVAL)
except KeyboardInterrupt:
# Abbruch durch Taste Strg-C
pass
finally:
pwm.stop()
GPIO.cleanup()
if __name__ == '__main__':
main()