ich programmiere noch nicht lange in Python und möchte nun mein bisher einziges Programm mit einer Oberfläche ausstatten.
Mein Programm soll einmal eine Heizungssteuerung auf einem RaspberryPi werden.
Die Messwerte werden aus einer mySql Datenbank abgefragt/hinterlegt.
Nun sollen die Werte auch auf der Oberfläche angezeigt werden aber ich verstehe einfach nicht wie ich ein solches Fenster in das Programm einbinden muss.
Ich hänge hier mal mein bisheriges Werk an, vielleicht kann mir ja jemand weiterhelfen...
Code: Alles auswählen
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# Import sys module
import sys
import smbus
import time
import json
import MySQLdb as mdb
import RPi.GPIO as GPIO
from time import sleep
global Anzahl_angeschlossene_sensoren
global anzahl_registrierte_sensoren
global Sensor_Aktiv
global Sensor_ID_anlegen
uhrzeit = time.strftime("%d.%m.%Y um %H:%M:%S Uhr")
Statusx = 1
def Sensor_aktiv():
try:
#print "Speichern: ", Sensor_Aktiv
con = mdb.connect('192.168.0.200', 'root', '', 'Heizungsteuerung');
with con:
cur = con.cursor()
cur.execute('UPDATE Sensoren SET Aktiv = (%s) WHERE Sensor_ID = (%s)', (uhrzeit ,Sensor_Aktiv))
#print "Speichern abgeschlossen"
except:
print "Fehler Datenbank Heizungsteuerung Sensor_aktiv()"
def status():
global mysqlStatus
global mysqlByte
global mysqlPort
try:
#GPIO.output(18, True)
print "Speichern"
print Temp_Heizung, " - ", Temp_Dach, Temp_Prozessor, " - ", Status_Heizung, " - ", Status_Pumpe, " - ", Status
con = mdb.connect('192.168.0.200', 'root', '', 'Heizungsteuerung');
with con:
cur = con.cursor()
cur.execute("""UPDATE Status SET Temp_Heizung = %s, Temp_Dach = %s, Temp_Prozessor = %s, Status_Heizung = %s, Status_Pumpe = %s, Status = %s """ % ( Temp_Heizung, Temp_Dach, Temp_Prozessor, Status_Heizung, Status_Pumpe, Status))
#print "Speichern abgeschlossen"
#GPIO.output(18, False)
except:
#GPIO.output(26, True)
#GPIO.output(18, False)
print "Fehler Datenbank Heizungsteuerung status()"
#time.sleep(1)
#GPIO.output(26,False)
def Fehler_log():
try:
print "Fehlerprotokoll"
con = mdb.connect('192.168.0.200', 'root', '', 'Heizungsteuerung');
with con:
cur = con.cursor()
cur.execute('INSERT INTO Log (Beschreibung) values(%s)', (Fehlerbeschreibung))
print "Fehlerprotokoll abgeschlossen"
except:
print "Fehler Datenbank Fehler_log()"
time.sleep(1)
def Sensor_anlegen():
try:
con = mdb.connect('192.168.0.200', 'root', '', 'Heizungsteuerung');
with con:
cur = con.cursor()
cur.execute('INSERT INTO Sensoren (Sensor_ID) values(%s)', (Sensor_ID_anlegen))
#print "Fehlerprotokoll abgeschlossen"
except:
print "Fehler Datenbank Sensor_anlegen()"
time.sleep(1)
def Temperatur_messen():
file = open('/sys/devices/w1_bus_master1/w1_master_slaves')
w1_slaves = file.readlines()
file.close()
print("Sensor ID | Temperature")
print("-----------------------------")
for line in w1_slaves:
w1_slave = line.split("\n")[0]
file = open('/sys/bus/w1/devices/' + str(w1_slave) + '/w1_slave')
filecontent = file.read()
file.close()
stringvalue = filecontent.split("\n")[1].split(" ")[9]
temperature = float(stringvalue[2:]) / 1000
if temperature == 85:
print "Fehler"
else:
print(str(w1_slave) + " | %5.3f °C" % temperature)
def Sensoren_ID():
global Anzahl_angeschlossene_sensoren
time.sleep(1)
lfd_sensoraktiv = 0
file = open('/sys/devices/w1_bus_master1/w1_master_slaves')
w1_slaves = file.readlines()
file.close()
for line in w1_slaves:
#print w1_slaves
w1_slave = line.split("\n")[0]
print(str(w1_slave))
Sensoraktiv[lfd_sensoraktiv] = (str(w1_slave))
lfd_sensoraktiv = lfd_sensoraktiv + 1
Anzahl_angeschlossene_sensoren = lfd_sensoraktiv
print "Anzahl_angeschlossene_sensoren : ", Anzahl_angeschlossene_sensoren
# Hauptprogramm START
print "Sensoren einlesen"
connection = mdb.connect('192.168.0.200', 'root', '', 'Heizungsteuerung');
cursor = connection.cursor()
# Sensoren aus Datenbank abfragen
cursor.execute('UPDATE Sensoren SET Aktiv = "test"')
time.sleep(1)
connection = mdb.connect('192.168.0.200', 'root', '', 'Heizungsteuerung');
cursor = connection.cursor()
cursor.execute("SELECT * FROM Sensoren")
result = cursor.fetchall()
lt = time.localtime()
lfd_db = 0
#print lfd_db
for data in result:
print " Sensor_ID: " + str(data[0]) + " Name: " + str(data[1]) + " Beschreibung: " + str(data[2])
Sensor = str(data[0])
Name = str(data[1])
Beschreibung = data[2]
Sensor_DB[lfd_db] = Sensor
Name_DB[lfd_db] = Name
Beschreibung_DB[lfd_db] = Beschreibung
lfd_db = lfd_db + 1
anzahl_registrierte_sensoren = str(lfd_db)
print "Registrierte Sensoren: ", anzahl_registrierte_sensoren
# Eingelesene Sensoren mit vorhandnen vergleichen
Sensoren_ID()
i = 0
test = int(anzahl_registrierte_sensoren)
while i < test:
if Sensor_DB[i] == Sensoraktiv[0]:
Sensor_Aktiv = Sensoraktiv[0]
Sensoraktiv[0] = "A" + Sensor_Aktiv
Sensor_aktiv()
i = i + 1
else:
if Anzahl_angeschlossene_sensoren > 1:
if Sensor_DB[i] == Sensoraktiv[1]:
Sensor_Aktiv = Sensoraktiv[1]
Sensoraktiv[1] = "A" + Sensor_Aktiv
Sensor_aktiv()
i = i + 1
else:
if Anzahl_angeschlossene_sensoren > 2:
if Sensor_DB[i] == Sensoraktiv[2]:
Sensor_Aktiv = Sensoraktiv[2]
Sensoraktiv[2] = "A" + Sensor_Aktiv
Sensor_aktiv()
i = i + 1
else:
if Anzahl_angeschlossene_sensoren > 3:
if Sensor_DB[i] == Sensoraktiv[3]:
Sensor_Aktiv = Sensoraktiv[3]
Sensoraktiv[3] = "A" + Sensor_Aktiv
Sensor_aktiv()
i = i + 1
else:
if Anzahl_angeschlossene_sensoren > 4:
if Sensor_DB[i] == Sensoraktiv[4]:
Sensor_Aktiv = Sensoraktiv[4]
Sensoraktiv[4] = "A" + Sensor_Aktiv
Sensor_aktiv()
i = i + 1
else:
print "Datenbanksensor: ", Sensor_DB[i], " nicht gefunden - maximum erreicht"
i = i + 1
else:
print "Datenbanksensor: ", Sensor_DB[i], " nicht gefunden"
i = i + 1
else:
print "Datenbanksensor: ", Sensor_DB[i], " nicht gefunden"
i = i + 1
else:
print "Datenbanksensor: ", Sensor_DB[i], " nicht gefunden"
i = i + 1
else:
print "Datenbanksensor: ", Sensor_DB[i], " nicht gefunden"
i = i + 1
# Aktive und registrierte Sensoren identifizieren
for i in range(5):
String = str(Sensoraktiv[i])
if "A" in String:
print Sensoraktiv[i]
else:
if "-" in String:
Sensor_ID_anlegen = Sensoraktiv[i]
Sensor_anlegen()
print "Angelegt: ", Sensor_ID_anlegen
else:
print "kein Sensortype"
# Funktion aus DB auslesen und im Programm verwenden (Primaer-, Sekundaer- und Controllerfuehler)
print "start"
connection = mdb.connect('192.168.0.200', 'root', '', 'Heizungsteuerung');
cursor = connection.cursor()
cursor.execute("SELECT * FROM Sensoren")
result = cursor.fetchall()
lt = time.localtime()
lfd_db = 0
for data in result:
print " Sensor_ID: " + str(data[0]) + " Name: " + str(data[1]) + " Beschreibung: " + str(data[2])
Sensor = str(data[0])
Name = str(data[1])
Beschreibung = data[2]
Sensor_DB[lfd_db] = Sensor
Name_DB[lfd_db] = Name
Beschreibung_DB[lfd_db] = Beschreibung
lfd_db = lfd_db + 1
anzahl_registrierte_sensoren = str(lfd_db)
print "Registrierte Sensoren: ", anzahl_registrierte_sensoren
while Statusx < 20:
Statusx = Statusx + 1
if Statusx == 18:
Temperatur_messen()
Statusx = 1