def logSensorZuweisung(self): dateiname = DATEINAME_SENSOR_ZUWEISUNG dateiordner = ORDNER_SENSOR_ZUWEISUNG zuweisungsListe = Communicator.fileReader(dateiName=dateiname, ordner=dateiordner) sensorListe = Communicator.loadObjectFromServer( name=SERVER_OBJEKT_SENSORLISTE, expectedDatatype=SensorListe.SensorListe, create=True ) # Jeden vorhandenen Sensor ggf. in die Liste aufnehmen, die Sensoren, die bereits in der Liste sind, koennen da bleiben flagSensorVorhanden = ( None ) # Flag wird benoetigt, damit nicht gespeichert wird, falls sich garnichts veraendert hat for sensor in sensorListe: if sensor.getName() is not None and sensor.getName() is not str(None): flagSensorVorhanden = False # initialisierung # Parsen der vorhandenen Datei nach der SensorId und ggf. ueberschreiben for lineNumber in range(len(zuweisungsListe)): if ( sensor.getID() in zuweisungsListe[lineNumber] ): # Falls die SensorID bereits vorhanden ist, soll sie umgeschrieben werden zuweisungsListe[lineNumber] = sensor.getName() + TRENNZEICHEN_SENSOR_ZUWEISUNG + sensor.getID() flagSensorVorhanden = True break # herausspringen, damit der rest nicht ueberprueft werden muss # Falls der Sensor noch nicht in der Liste ist: Sensor hinzufuegen if not flagSensorVorhanden: # Falls der sensor in der obrigen Schleife noc nicht gefunden wurde zuweisungsListe.append(sensor.getName() + TRENNZEICHEN_SENSOR_ZUWEISUNG + sensor.getID()) flagSensorVorhanden = True # Abspeichern der neuen zuweisungsliste if flagSensorVorhanden is True: # True wird nur dann gesetzt, falls sich etwas geaendert hat Communicator.fileSaver(zuweisungsListe, dateiname=dateiname, ordner=dateiordner)
def getNewSensorName(self, sensor): """Die Methode fuer einen neuen Sensor muss auf dem server sein, da man hier den Ueberblick ueber alle aktuellen informationen haben sollte""" # Erstmal schauen ob der Sensor in der idZuweisungsdatei gelistet ist: try: zuweisungsListe = Communicator.fileReader( dateiName=DATEINAME_SENSOR_ZUWEISUNG, ordner=ORDNER_SENSOR_ZUWEISUNG, createIfNotExisting=True ) for line in zuweisungsListe: if sensor.getID() in line: line = line.replace(sensor.getID(), "") line = line.replace(" ", "") line = line.replace(TRENNZEICHEN_SENSOR_ZUWEISUNG, "") line = line.replace("\t", "") line = line.replace("\n", "") line = line.replace("\r", "") return line except IOError: print("Keine Zuweisungsdatei vorhanden") # Manuell den Sensor mithilfe der gegebenen Namensliste uaswaehlen ID = {} for sensorname in SENSORLISTE: ID[str(SENSORLISTE.index(sensorname))] = sensorname for key in sorted(ID): print("{key:5s}: {name}".format(key=str(key), name=ID[key])) eingbabe = None while eingbabe not in ID: eingbabe = raw_input("Auswahl:") return ID[eingbabe]
def run(self): self.Parameter = Communicator.GetParameter() try: self.Intervall = self.Parameter["ProtokollierungsIntervall"] if self.Intervall < 0.01: self.Intervall = 0.01 except KeyError: print ("KeyError in Warnung --- ProtokollierungsIntervall in Parameterdatei nicht vorhanden") self.Intervall = KONTROLL_INTERVALL WarnText="" try: WarnDatei = Communicator.fileReader(dateiName=DATEINAME_ERROR_LOG, createIfNotExisting=False, errorMsg = False) #vorhandene fehler einlesen for line in WarnDatei: WarnText+=line #Email mit exception lines erstellen self.Stoerung = True if WarnText == "": os.remove(DATEINAME_ERROR_LOG) self.Stoerung = False # except IOError: self.Stoerung = False # todo: test ob alle programmteile Laufen #KOmmunikationsprozess der von jedem programmteil aufgerufen wird und in datei geschrieben wird #test ob die Dateien aktualisiert werden if self.Stoerung: print ("Es sind Fehler vorhanden!!!") try: self.Intervall = self.Parameter["ProtokollierungsIntervallBeiFehler"]*3600 except KeyError: self.Intervall = KONTROLL_INTERVALL_FEHLER #3 Stunden self.Lampe.Ein() #Alarmlampe an #print WarnText try: if self.Parameter["MailsAktiviert"] == "True": os.system ("sudo python Mailsoftware.py " + "\"\"\"" + WarnText + "\"\"\"") #eMail versenden os.remove(DATEINAME_ERROR_LOG) except KeyError: print ("KeyError in Watchdog: Parameter[\"MailsAktiviert\"] nicht vorhanden") os.system ("sudo python Mailsoftware.py " + "\"\"\"" + WarnText + "\"\"\"") #eMail versenden os.remove(DATEINAME_ERROR_LOG) else: print ("Keine Fehler vorhanden") self.ProtokolliereDaten() time.sleep(self.Intervall)