Ejemplo n.º 1
0
    def __send_temperatures(self):
        for waiter in self.__waiters:
            try:
                self.currentTemperature = TemperatureReader().read_temp()

                if self.currentTemperature >= self.stepTemperature:
                    self.state = False
                if self.currentTemperature < self.stepTemperature:
                    self.state = True
                if len(self.__waiters) == 0:
                    break
                if not self.temperatureControlOverriden:
                    self.toggleGPIO()

                messageProducerObject = MessageProducerFactory.get_message(
                    'state_change')
                if (self.lastState != self.state):
                    messageProducerObject.produceMessage(self)
                self.lastState = self.state

                messageProducerObject = MessageProducerFactory.get_message(
                    'send_temperature')
                messageProducerObject.produceMessage(self)
            except AttributeError as e:
                print("Error sending temp", e)
                break
Ejemplo n.º 2
0
	def __init__(self, config, logger, storage):
		self.temperatureReader = TemperatureReader(config['temperature_read_file'], config['base_data_directory'], config['temperature_save_file'], config['temperature_sampling_interval'])
		self.distanceReader = DistanceReader(config['distance_read_file'], config['base_data_directory'], config['distance_save_file'], config['distance_sampling_interval'], config['distance_sample_length'])
		self.pictureReader = PictureReader(config['photo_save_folder'], config['picture_sampling_interval'])
		self.soundReader = SoundReader(config['sound_save_folder'], config['sound_sampling_interval'], config['sound_sample_length'])
		self.soundTime = config['sound_sample_length'];
		
		self.temperatureReader.setLogger(logger)
		self.temperatureReader.setStorage(storage)

		self.distanceReader.setLogger(logger)
		self.distanceReader.setStorage(storage)
		
		self.pictureReader.setLogger(logger)
		self.pictureReader.setStorage(storage)
		
		self.soundReader.setLogger(logger)
		self.soundReader.setStorage(storage)
		
		self.logger = logger
Ejemplo n.º 3
0
	def __init__(self, config, logger, storage):
		self.temperatureReader = TemperatureReader(config['temperature_read_file'], config['base_data_directory'], config['temperature_save_file'], config['temperature_sampling_interval'])
		self.pictureReader = PictureReader(config['photo_save_folder'], config['picture_sampling_interval'])
		self.soundReader = SoundReader(config['sound_save_folder'], config['sound_sampling_interval'], config['sound_sample_length'])
		self.soundTime = config['sound_sample_length'];
		
		self.temperatureReader.setLogger(logger)
		self.temperatureReader.setStorage(storage)
		
		self.pictureReader.setLogger(logger)
		self.pictureReader.setStorage(storage)
		
		self.soundReader.setLogger(logger)
		self.soundReader.setStorage(storage)
		
		self.logger = logger
Ejemplo n.º 4
0
class RecordingManager:
    #uses config map to setup recording threads
    def __init__(self, config, logger, storage):
        self.temperatureReader = TemperatureReader(
            config['temperature_read_file'], config['base_data_directory'],
            config['temperature_save_file'],
            config['temperature_sampling_interval'])
        self.pictureReader = PictureReader(config['photo_save_folder'],
                                           config['picture_sampling_interval'])
        self.soundReader = SoundReader(config['sound_save_folder'],
                                       config['sound_sampling_interval'],
                                       config['sound_sample_length'])
        self.soundTime = config['sound_sample_length']

        self.temperatureReader.setLogger(logger)
        self.temperatureReader.setStorage(storage)

        self.pictureReader.setLogger(logger)
        self.pictureReader.setStorage(storage)

        self.soundReader.setLogger(logger)
        self.soundReader.setStorage(storage)

        self.logger = logger

    #starts all recording threads
    def startRecording(self):
        self.logger.log("[RecordingManager] starting recording threads")
        self.temperatureReader.startRecording()
        self.pictureReader.startRecording()
        self.soundReader.startRecording()
        self.logger.log("[RecordingManager] threads started")

    #requests that all recording threads stop, and waits for all of them to stopshop
    def stopRecording(self):
        self.logger.log("[RecordingManager] stopping recording threads")
        #requesting threads to stop
        self.temperatureReader.stopRecording()
        self.pictureReader.stopRecording()
        self.soundReader.stopRecording()

        self.logger.log("[RecordingManager] waiting for threads to stop...")

        #waiting for all threads to stop
        counter = 0
        while self.temperatureReader.isRecording or self.pictureReader.isRecording or self.soundReader.isRecording:
            counter += 1
            if counter > (self.soundTime + 10):
                #sound thread should have stopped by now if we end up here, because we waited for
                #more seconds than it is supposed to be recording
                logger.log(
                    "[RecordingManager] Sound thread did not quit, cannot stop recording"
                )
                return False  #stop was unsucessful
            time.sleep(1)

        #one more request to stop recording, just to be safe
        self.temperatureReader.stopRecording()
        self.pictureReader.stopRecording()
        self.soundReader.stopRecording()
        self.logger.log("[RecordingManager] threads stopped")
        return True  #stop was sucessfull

    #makes all threads quit, used when quitting the application
    def quitThreads(self):
        self.stopRecording()
        self.pictureReader.quit()
        self.soundReader.quit()
        self.temperatureReader.quit()
Ejemplo n.º 5
0
class RecordingManager:
	#uses config map to setup recording threads
	def __init__(self, config, logger, storage):
		self.temperatureReader = TemperatureReader(config['temperature_read_file'], config['base_data_directory'], config['temperature_save_file'], config['temperature_sampling_interval'])
		self.distanceReader = DistanceReader(config['distance_read_file'], config['base_data_directory'], config['distance_save_file'], config['distance_sampling_interval'], config['distance_sample_length'])
		self.pictureReader = PictureReader(config['photo_save_folder'], config['picture_sampling_interval'])
		self.soundReader = SoundReader(config['sound_save_folder'], config['sound_sampling_interval'], config['sound_sample_length'])
		self.soundTime = config['sound_sample_length'];
		
		self.temperatureReader.setLogger(logger)
		self.temperatureReader.setStorage(storage)

		self.distanceReader.setLogger(logger)
		self.distanceReader.setStorage(storage)
		
		self.pictureReader.setLogger(logger)
		self.pictureReader.setStorage(storage)
		
		self.soundReader.setLogger(logger)
		self.soundReader.setStorage(storage)
		
		self.logger = logger
	
	#starts all recording threads
	def startRecording(self):
		self.logger.log("[RecordingManager] starting recording threads")
		self.temperatureReader.startRecording()
		self.distanceReader.startRecording()
		self.pictureReader.startRecording()
		self.soundReader.startRecording()
		self.logger.log("[RecordingManager] threads started")
	
	#requests that all recording threads stop, and waits for all of them to stopshop
	def stopRecording(self):
		self.logger.log("[RecordingManager] stopping recording threads")
		#requesting threads to stop
		self.temperatureReader.stopRecording()
		self.distanceReader.stopRecording()
		self.pictureReader.stopRecording()
		self.soundReader.stopRecording()
		
		self.logger.log("[RecordingManager] waiting for threads to stop...")
		
		#waiting for all threads to stop
		counter = 0
		while self.temperatureReader.isRecording or self.distanceReader.isRecording or self.pictureReader.isRecording or self.soundReader.isRecording:
			counter += 1
			if counter > (self.soundTime + 10):
				#sound thread should have stopped by now if we end up here, because we waited for
				#more seconds than it is supposed to be recording
				logger.log("[RecordingManager] Sound thread did not quit, cannot stop recording")
				return False #stop was unsucessful
			time.sleep(1)
		
		#one more request to stop recording, just to be safe
		self.temperatureReader.stopRecording()
		self.distanceReader.stopRecording()
		self.pictureReader.stopRecording()
		self.soundReader.stopRecording()
		self.logger.log("[RecordingManager] threads stopped")
		return True #stop was sucessfull
	
	#makes all threads quit, used when quitting the application
	def quitThreads(self):
		self.stopRecording()
		self.pictureReader.quit()
		self.soundReader.quit()
		self.temperatureReader.quit()
		self.distancereader.quit()	
Ejemplo n.º 6
0
def main():

    # magic constants
    #configurationFileName = "../../PyStat/thermostat.conf"
    configurationFileName = "thermostat.conf"
    currentFileName = "current.set"
    scheduleFileName = "schedule.conf"
    databaseName = "pystat.db"

    # make the static utility classes
    fileManager = FileManager(configurationFileName, currentFileName,
                              scheduleFileName)
    configuration = fileManager.read_configuration()
    temperatureReader = TemperatureReader()
    weather = ThermostatWeather(configuration.weatherAPIKey,
                                configuration.weatherurl,
                                configuration.latlong,
                                configuration.weatherFlags)

    # create the database utility class
    databaseHelper = ThermostatDatabase(databaseName)

    if configuration is None:
        print("Configuration file could not be read.")
        exit(1)

    if "-1" == configuration.heatPin \
            or "-1" == configuration.acPin \
            or "-1" == configuration.fanPin \
            or configuration.heatPin == configuration.acPin \
            or configuration.heatPin == configuration.fanPin \
            or configuration.acPin == configuration.fanPin:
        print("The pin settings provided are invalid:")
        print("\tHeat pin: " + str(configuration.heatPin))
        print("\tAC pin: " + str(configuration.acPin))
        print("\tFan pin: " + str(configuration.fanPin))
        exit(2)

    service = ThermostatService(0, "service", configuration, fileManager,
                                temperatureReader)
    service.start()

    scheduler = ThermostatScheduler(1, "scheduler", configuration, fileManager,
                                    temperatureReader)
    scheduler.start()

    web = ThermostatWeb(2, "web", configuration, fileManager,
                        temperatureReader, weather)
    web.start()

    while True:
        current = fileManager.read_current()

        currentWeather = weather.current_weather()
        outdoorTemperature = None

        if currentWeather is not None:
            outdoorTemperature = currentWeather['temperature']

        databaseHelper.insert_current_data(
            temperatureReader.CurrentTemperature(), current["temperature"],
            outdoorTemperature, current["mode"],
            ("heat" in configuration.running), ("ac" in configuration.running),
            ("fan" in configuration.running))

        print("Polling threads")
        if not service.is_alive():
            print("PANIC SERVICE IS DEAD")
        if not scheduler.is_alive():
            print("PANIC SCHEDULER IS DEAD")
        if not web.is_alive():
            print("PANIC WEB IS DEAD")

        time.sleep(30)