ich bin neu hier im Forum und mit meinen Programmierkenntnissen am Ende...
Mein Ziel ist es, mit dem Raspberry meine Heizung zu steuern und Remote vom Netzwerk auf den Raspberry zugreifen zu können.
Remote auf den Raspberry zugreifen klappt.
Ein erstes Programm mit diversen Eingaben läuft.
Allerdings kommen jetzt die Probleme:
Ich kann z.B. in der GUI eine Variable setzen und diese im Programm dann weiter verarbeiten (getestet mit Ausgaben in der Shell).
Allerdings bringe ich es dann nicht fertig die Variable irgendwo auf der GUI dann wieder auszugeben.
Das Programm habe ich mir (wie so viele andere wohl auch) aus verschiedenen Tutorials heraus zusammengezimmert...
Ich denke das mein Problem mit der Kapselung von Klassen zusammenhängt, finde aber aktuell keinen Ausweg.
Zum Beispiel kann ich über die Funktion werte_setzen über die Radio-Buttons Werte in der GUI verändern oder auch mit dem Button "Programm setzen".
Nur meine Variable Aussentemp bekomme ich nach der Änderung in der Funktion ausgabe (Zeile 35 und 36) nicht in die GUI.
Ich hänge mein Testprog mal an, vielleicht fällt Euch ja da etwas dazu ein?
Code: Alles auswählen
# -*- coding: cp1252 -*-
# #!/usr/bin/python
import wx
from threading import *
global rt
global Erster_Timer
global Aussentemp, Timer1
Aussentemp="1"
def werte_setzen(an1, aus1, an2, aus2, an3, aus3, an4, aus4) :
an1 = wx.TextCtrl(panel, -1,value=an1, pos=(50, 60), size=(40,-1))
aus1 = wx.TextCtrl(panel, -1,value=aus1, pos=(100, 60), size=(40,-1))
an2 = wx.TextCtrl(panel, -1,value=an2, pos=(50, 90), size=(40,-1))
aus2 = wx.TextCtrl(panel, -1, value=aus2, pos=(100, 90), size=(40,-1))
an3 = wx.TextCtrl(panel, -1, value=an3, pos=(50, 120), size=(40,-1))
aus3 = wx.TextCtrl(panel, -1, value=aus3, pos=(100, 120), size=(40,-1))
an4 = wx.TextCtrl(panel, -1, value=an4, pos=(50, 150), size=(40,-1))
aus4 = wx.TextCtrl(panel, -1, value=aus4, pos=(100, 150), size=(40,-1))
def ausgabe(wert_ausgabe):
global Aussentemp
#lokaltemp ="1"
print wert_ausgabe
print "ausgabe : ", Aussentemp
lokaltemp=(int(Aussentemp)+1)
Aussentemp=str(lokaltemp)
print "Aussentemp_ausgabe : ", Aussentemp
print "_____"
wert_ausgabe = wx.TextCtrl(panel, -1, value=Aussentemp, pos=(480, 63), size=(40,-1))
header = wx.StaticText(panel, label=Aussentemp, pos=(40, 350))
#werte_setzen("00:01","00:02","00:03", "00:04", "00:05", "00:06", "00:07", "00:08")
#self.Timer1.SetLabel(Aussentemp)
#panel.Refresh()
class RepeatedTimer(object):
global Aussentemp
def __init__(self, interval, function, *args, **kwargs):
self._timer = None
self.interval = interval
self.function = function
self.args = args
self.kwargs = kwargs
self.is_running = False
self.start()
def _run(self):
self.is_running = False
self.start()
self.function(*self.args, **self.kwargs)
def start(self):
if not self.is_running:
self._timer = Timer(self.interval, self._run)
self._timer.start()
self.is_running = True
def stop(self):
self._timer.cancel()
self.is_running = False
class ExamplePanel(wx.Panel):
global rt
global Aussentemp, Temp_Aussentemp, Timer1
def __init__(self, parent):
wx.Panel.__init__(self, parent)
global Aussentemp, Temp_Aussentemp, Timer1
On1time = "04:30"
Off1time = "08:00"
On2time = "12:00"
Off2time = "13:00"
On3time = "19:00"
Off3time = "21:00"
On4time = "00:00"
Off4time = "00:00"
BrennerOn = "1"
Vorlaufpumpe = "1"
Warmwasserpump = "0"
Vorlauftemp = "56"
Ruecklauftemp = "44"
ExamplePanel.Aussentemp = "222"
Temp_Aussentemp = "4"
Erster_Timer = "100"
Aussentemp= "3"
self.header = wx.StaticText(self, label="Schaltzeiten aktuell:", pos=(20, 30))
self.header.SetFont(wx.Font(10, wx.SWISS, wx.NORMAL, wx.BOLD))
self.header = wx.StaticText(self, label="(Ein)", pos=(60, 45))
self.header = wx.StaticText(self, label="(Aus)", pos=(110, 45))
self.timenr = wx.StaticText(self, label="1.:", pos=(25, 63))
On1time = wx.TextCtrl(self, value=On1time, pos=(50, 60), size=(40,-1))
Off1time = wx.TextCtrl(self, value=Off1time, pos=(100, 60), size=(40,-1))
self.timenr = wx.StaticText(self, label="2.:", pos=(25, 93))
On2time = wx.TextCtrl(self, value=On2time, pos=(50, 90), size=(40,-1))
Offt2ime = wx.TextCtrl(self, value=Off2time, pos=(100, 90), size=(40,-1))
self.timenr = wx.StaticText(self, label="3.:", pos=(25, 123))
On3time = wx.TextCtrl(self, value=On3time, pos=(50, 120), size=(40,-1))
Off3time3 = wx.TextCtrl(self, value=Off3time, pos=(100, 120), size=(40,-1))
self.timenr = wx.StaticText(self, label="4.:", pos=(25,153))
On4time = wx.TextCtrl(self, value=On4time, pos=(50, 150), size=(40,-1))
Off4time = wx.TextCtrl(self, value=Off4time, pos=(100, 150), size=(40,-1))
self.header = wx.StaticText(self, label="Schaltzustände:", pos=(200, 30))
self.header.SetFont(wx.Font(10, wx.SWISS, wx.NORMAL, wx.BOLD))
self.header = wx.StaticText(self, label="Brenner", pos=(200, 63))
self.header = wx.StaticText(self, label=BrennerOn, pos=(310, 63))
self.header = wx.StaticText(self, label="Vorlaufpumpe", pos=(200, 93))
self.header = wx.StaticText(self, label=Vorlaufpumpe, pos=(310, 93))
self.header = wx.StaticText(self, label="Warmwasserpumpe", pos=(200, 123))
self.header = wx.StaticText(self, label=Warmwasserpump, pos=(310, 123))
self.header = wx.StaticText(self, label="Temperaturen:", pos=(370, 30))
self.header.SetFont(wx.Font(10, wx.SWISS, wx.NORMAL, wx.BOLD))
self.header = wx.StaticText(self, label="Aussentemp", pos=(370, 63))
self.header = wx.StaticText(self, label=Temp_Aussentemp, pos=(480, 63))
Temp_Aussentemp = wx.TextCtrl(self, style=wx.PROCESS_ENTER, value=Temp_Aussentemp, pos=(580, 63), size=(40,-1))
self.Bind(wx.EVT_TEXT_ENTER, self.EvtAussentemp, Temp_Aussentemp)
self.header = wx.StaticText(self, label="Vorlauftemp", pos=(370, 93))
self.header = wx.StaticText(self, label=Vorlauftemp, pos=(480, 93))
self.header = wx.StaticText(self, label="Ruecklauftemp", pos=(370, 123))
self.header = wx.StaticText(self, label=Ruecklauftemp, pos=(480, 123))
self.header = wx.StaticText(self, label="Timer läuft", pos=(40, 300))
self.Timer1 =wx.TextCtrl(self, value=Erster_Timer, pos=(100, 300), size=(40,-1))
# Close button
self.button =wx.Button(self, label="Quit", pos=(700, 500))
self.Bind(wx.EVT_BUTTON, self.OnClose,self.button)
self.Setzen =wx.Button(self, label="Programm setzen", pos=(100, 400))
self.Bind(wx.EVT_BUTTON, self.Button_Auswahl,self.Setzen)
#Radio-Buttons
radioList = ['Frühschicht', 'Spätschicht', 'Nachtschicht', 'Nur Warmwasser', 'Urlaub daheim', 'Nachtabsenkung', 'Vollast Heizung', 'Vollast Wasser']
rb = wx.RadioBox(self, label="Welches Programm möchten Sie laden ?", pos=(20, 210), choices=radioList, majorDimension=3,style=wx.RA_SPECIFY_COLS)
self.Bind(wx.EVT_RADIOBOX, self.EvtRadioBox, rb)
def EvtRadioBox(self, event):
BOX_Zaehler=event.GetInt()
if BOX_Zaehler == 0: #Frühschicht ************* Hier die gewünschten Zeiten eintragen
an1 = "04:30"
aus1 = "08:00"
an2 = "19:00"
aus2 = "21:00"
an3 = "00:00"
aus3 = "00:00"
an4 = "00:00"
aus4 = "00:00"
werte_setzen(an1,aus1, an2, aus2, an3, aus3, an4, aus4)
elif BOX_Zaehler == 1: #Spätschciht
an1 = "04:30"
aus1 = "05:30"
an2 = "07:00"
aus2 = "08:30"
an3 = "12:00"
aus3 = "13:00"
an4 = "19:00"
aus4 = "21:00"
werte_setzen(an1,aus1, an2, aus2, an3, aus3, an4, aus4)
elif BOX_Zaehler == 2: #Nachtschicht
an1 = "04:30"
aus1 = "06:30"
an2 = "13:00"
aus2 = "14:30"
an3 = "19:00"
aus3 = "21:00"
an4 ="00:00"
aus4 = "00:00"
werte_setzen(an1,aus1, an2, aus2, an3, aus3, an4, aus4)
def EvtAussentemp(self, event):
global Aussentemp,rt
Aussentemp=Temp_Aussentemp.GetValue()
print "EvtAussentemp:", Aussentemp
self.Refresh()
rt.stop()
print "Timer gestoppt und neu gestartet"
rt = RepeatedTimer(1, ausgabe, Aussentemp)
def temp_zahler(a):
b=a
ausgabe(str(b))
print b
def OnClose(self, event):
rt.stop()
frame.Destroy()
def Button_Auswahl(self, event):
Ontime1 = "12:30"
Offtime1 = "14:00"
Ontime1 = wx.TextCtrl(self, value=Ontime1, pos=(50, 60), size=(40,-1))
Offtime1 = wx.TextCtrl(self, value=Offtime1, pos=(100, 60), size=(40,-1))
# Timer starten, jede Sekunde, Aufruf Function "ausgabe", Übergabe an Function =Aussentemp
#rt = RepeatedTimer(1, ausgabe, Aussentemp)
app = wx.App(False)
frame = wx.Frame(None,title="Heizung 0.2",size=(800,600))
panel = ExamplePanel(frame)
frame.Show()
werte_setzen("00:01","00:02","00:03", "00:04", "00:05", "00:06", "00:07", "00:08")
print "Timer startet"
rt = RepeatedTimer(1, ausgabe, Aussentemp)
app.MainLoop()