Hallo
Ich habe mir vor einem Monat einen Raspberry Pi 3 zugelegt, Damit versuche ich eine Heizungsregelung zu realisieren. Also 8 Räume Temperatur und ein Raum Luftfeuchtigkeit regeln.Die GUI ist schon fast fertig und läuft. Die Uhrzeit und 11 Temperaturen werden bereits angezeigt.Von Python habe ich vor einem Monat das erste mal was gehört. Aber mit recherchieren, abgucken und viel ausprobieren bin ich mit Tkinter eigentlich ganz gut zurecht gekommen. Mein Derzeitiges Problem ist die Temperatur-Regelung. Der Ansatz ist die gemessene Raumtemperatur mit einer Variablen die mit einem
'Slider' eingestellt wird zu vergleichen. Wenn ich bei 'if temp >= show :' anstelle show eine Zahl eingebe dann geht das wunderbar, was mich zu dem Ergebnis bringt das show hier zu verwenden nicht der richtige Weg ist.
Das hier ist natürlich nur der temp-Regeler. Ich teste das immer separat, und wenn es dann geht wird es ins Hauptprogramm integriert.
Ich hoffe das was alle Anfänger hier hoffen. Das es nur eine "Kleinigkeit"ist und das mir jemand den entsprechenden Denkanstoß geben kann mit dem ich das Problem lösen kann.
from Tkinter import *
root = Tk()
ausgabe = Label(root, bg="gold" , width=60, height=20)
ausgabe1 = Label(root, bg="gold" , width=60, height=20)
ausgabe.grid(row=0, column=0, padx=0, pady=0)
ausgabe1.grid(row=0, column=1, padx=0, pady=0)
ausgabe2 = Label(root, bg="gold" , width=60, height=20)
ausgabe2.grid(row=0, column=2, padx=0, pady=0)
def show(val):
show= w1.get()
print(show)
w1 = Scale(ausgabe1, from_=5, to=42, command=show)
w1.pack()
def temp():
f = open('/sys/bus/w1/devices/28-0417301cdfff/w1_slave')
f.readline()
s = f.readline()
n=s.find('t=')
t=float(s[n+2:]) / 1000
ausgabe2.config(text= '%.0f °C' % t)
print t
if temp >= show :
ausgabe.config( text="warm")
else:
ausgabe.config(text="kalt")
root.after(3000,temp3)
temp()
root.mainloop()
Temperatur-Regelung mit Temp-Wert Eingabe über 'Slider'
@TOWA: `show` ist eine Funktion, die also mit einer Zahl zu vergleichen, ist wenig sinnvoll. `temp3` existiert nicht. *-Importe sollte man vermeiden und ohne Objektorientierung kann man keine komplexeren Gui-Programme schreiben.
Code: Alles auswählen
import Tkinter as tk
def read_temperature():
with open('/sys/bus/w1/devices/28-0417301cdfff/w1_slave') as data:
result = data.read().split('t=')[-1]
return float(result) / 1000
def update_temperature(scale, label_temperature, label_warm_cold):
temperature = read_temperature()
reference = float(scale.get())
label_temperature.config(text='%.0f °C' % temperature)
text = "warm" if temperature <= reference else "kalt"
label_warm_cold.config(text=text)
scale.after(3000, update_temperature, scale, label_temperature, label_warm_cold)
def main():
root = tk.Tk()
label_warm_cold = tk.Label(root, bg="gold" , width=60, height=20)
ausgabe1 = tk.Label(root, bg="gold" , width=60, height=20)
label_warm_cold.grid(row=0, column=0, padx=0, pady=0)
ausgabe1.grid(row=0, column=1, padx=0, pady=0)
label_temperature = tk.Label(root, bg="gold" , width=60, height=20)
label_temperature.grid(row=0, column=2, padx=0, pady=0)
scale = tk.Scale(ausgabe1, from_=5, to=42)
scale.pack()
update_temperature(scale, label_temperature, label_warm_cold)
root.mainloop()
if __name__ == '__main__':
main()