Aller Anfang ist schwer und genau gesshalb bin ich hier! Habe jetzt schon eine gefühlte Ewigkeit mit dem Problem gekämpft, aber es will sich einfach kein brauchbares Ergebnis finden lassen. Vielleicht ist ja hier ein hilfsbereiter User dabei, der mir ein bisschen unter die Arme greifen kann!
Beschreibung des Projekts: Modellbahnsteuerung mittels RaspberryPi
Details: Am Pi sind mehrere "Module" via I2C angeschlossen. Die Module werden über Adressen angesprochen.
Konkretes "Problem": Es soll beim Programmstart eine Art "Autokonfiguration" erfolgen, die den Bus nach gültigen "Modulen" absucht. Funktioniert auch prima soweit...
Die gefundenen "Onlinemodule" stehen jetzt in einer Liste ("onlinemodule").
Wie kann ich jetzt für jedes Modul eine neue Instanz der Klasse "Modul" automatisch anlegen "lassen"? Er soll praktisch den "item-wert" des Diconary´s
als Teil des Instanznamen "berechnen" und beim Erstellen den "Wert" der Liste "onlinemodule" als "addr" übergeben ?
Code:
Code: Alles auswählen
### Modulklasse ###
from conf.hardware import *
class Modul():
def __init__(self, addr):
self.adresse = addr
def test(self):
try:
t = i2c.read_byte_data(self.adresse, 0x00)
if t >= 0:
print "Modul", self.adresse, "Online"
except IOError:
print "Modul", self.adresse, "Offline"
def wei(self):
i2c.write_byte_data(self.adresse, 0x06, 0)
i2c.write_byte_data(self.adresse, 0x07, 0)
def mel(self):
i2c.write_byte_data(self.adresse, 0x06, 1)
i2c.write_byte_data(self.adresse, 0x06, 1)
def auto():
module = {0x20 : 0,
0x21 : 1,
0x22 : 2,
0x23 : 3,
0x24 : 4,
0x25 : 5,
0x26 : 6,
0x27 : 7,
0x28 : 8,
0x30 : 9}
onlinemodule = []
for addr in module.keys():
try:
i2c.read_byte_data(addr, 0x00)
onlinemodule += [hex(addr)]
except IOError:
continue
print onlinemodule
Er hat also 3 Module gefunden, und dessen "Busadressen" in die Liste geschrieben.
Ich hoffe das das jetzt nicht zu "verwirrend" beschrieben ist…
Bedanke mich jedenfalls schon jetzt für Eure Hilfe!
Stefan