und zwar habe ich folgenden Sachverhalt: Ich habe zwei Raspi´s, im Folgenden MessPi (welcher die Sensorik ausliest) und SteuerungsPi (ergo: welcher steuert, seine Funktion ist aber zunächst irrelevant).
In meinem ersten Projekt hatte ich die beiden Raspi´s falsch konfiguriert, heißt: Ich hatte Server und Client vertauscht. Nun versuche ich (auch unter der Prämisse der objektorientierten Programmierung) das Ganze zu tauschen und aufzuräumen. Es geht jetzt erstmal um den Server, also den MessPi. Seine Aufgabe soll sein, die ganze Zeit über (also ab Boot des Pi´s --> Cronjob, sollte ich selber hinkriegen) das Meßwertregister des PiLoggers (das ist meine Sensorik) auszulesen (Klasse: Monitor) und darauf zu warten, bis der SteuerPi den Status (also die derzeitigen Messwerte Strom und Spannung) abfragt. Dann soll der MessPi diese Messwerte an den SteuerPi senden und wieder von vorne beginnen. Er soll also immer bereit sein, abgefragt zu werden. Nun habe ich eine Main() und zwei Klassen geschrieben, habe aber Schwierigkeiten nun die einzelnen Teile miteinander zu verbinden. Ich weiß, dass ich in der Server-Klasse zu viele Funktionen definiert habe, weiß aber nicht genau, welche ich nicht brauche. Die Main() macht zur Zeit im Grunde auch nichts außer die Messwerte zu lesen und die _init_ des Servers zu starten. Hier die Programmskripte:
Main()
Code: Alles auswählen
from Messpi_Server import Server
from Monitoring_Modul import Monitor
from time import sleep
SLEEP_TIME = 3
pServer = Server();
pMonitor = Monitor();
try:
while True:
pMonitor.Monitoring()
sleep(SLEEP_TIME)
Code: Alles auswählen
import socket
class Server:
def __init__(self):
host = ''
port = 5560
self.server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self.server.bind((host, port))
self.server.listen(1)
conn, address = self.server.accept()
return conn
def connectAndTransfer(self):
conn = self.setupConnection()
self.dataTransfer(conn)
def dataTransfer(self, conn):
while True:
data = conn.recv(1024)
data = data.decode('utf-8')
dataMessage = data.split(' ', 1)
command = dataMessage[0]
if command == 'Statusabfrage':
#???
self.server.close()
break
conn.close()
def sendReceive(self, s, message):
s.send(str.encode(message))
reply = s.recv(1024)
s.close()
reply = reply.decode('utf-8')
return reply
def transmit(self, message):
s = self.setupSocket()
response = self.sendReceive(s, message)
return response
Code: Alles auswählen
import smbus
class Monitor:
def __init__(self):
self.pilogger = smbus.SMBus(1)
def Monitoring(self):
volt = float(self.getVolt())
ampere = float(self.getAmp())
def getVolt(self):
volt_raw = self.pilogger.read_word_data(0x48, 0x50)
volt = volt_raw * 0.000915541
return volt
def getAmp(self):
ampere_raw = self.pilogger.read_word_data(0x48, 0x60)
if ampere_raw >= 32768:
ampere_raw = ampere_raw - 65536
ampere = ampere_raw / 2141.634
return ampere