예제 #1
0
    def to_dict(self):
        def do(session):
            system_settings = system.get_current_system_settings(session)
            return dict(name=self.name(), cool_temp=system_settings.cool_temp,
                        heat_temp=system_settings.heat_temp)

        return db.sessionize(do)
예제 #2
0
    def get_state(self, current_temp):
        def do(session):
            system_settings = system.get_current_system_settings(session)
            return self._get_state(current_temp, system_settings.cool_temp,
                                   system_settings.heat_temp)

        return db.sessionize(do)
예제 #3
0
    def to_dict(self):
        def do(session):
            system_settings = system.get_current_system_settings(session)
            return dict(name=self.name(),
                        cool_temp=system_settings.cool_temp,
                        heat_temp=system_settings.heat_temp)

        return db.sessionize(do)
예제 #4
0
def get_current_temp():
    def do(session):
        temp_agg = 0
        temp_cnt = 0

        room_models = db.get_rooms(session)

        LOG.debug(room_models)
        for room_model in room_models:
            LOG.debug(room_model)
            if not room_model.active:
                continue

            room_temp = None
            measurement_agg = 0
            measurement_cnt = 0

            if room_model.sensors:
                for sensor_model in room_model.sensors:
                    LOG.debug(sensor_model)
                    measurement = db.get_most_recent_sensor_temperature(
                        session,
                        sensor_id=sensor_model.id,
                        order_desc=True,
                        order_by=models.Measurement.recorded_date)
                    delta_min = CONF.temp.max_measurement_age_threshold_min
                    if measurement and measurement.recorded_date > datetime.utcnow(
                    ) - timedelta(minutes=delta_min):
                        measurement_agg = measurement.data
                        measurement_cnt = measurement_cnt + 1

            if measurement_cnt > 0 and measurement_agg > 0:
                room_temp = measurement_agg / measurement_cnt

            if room_temp:
                temp_agg = temp_agg + (room_temp * room_model.weight)
                temp_cnt = temp_cnt + room_model.weight

        if not temp_cnt and not temp_agg:
            LOG.warn(
                'No temperature data available.  Either no data exists, or the data that exists is too old.'
            )
            return None

        return temp_agg / temp_cnt

    return db.sessionize(do)
예제 #5
0
def get_system_mode():
    def do(session):
        system_settings = system.get_current_system_settings(session)

        mode = system_settings.system_mode

        if mode.name == AutoMode.name():
            return AutoMode(mode.id, system_settings.current_program)

        if mode.name == ManualMode.name():
            return ManualMode(mode.id)

        if mode.name != OffMode.name():
            LOG.error('System set to unknown mode \'%s\'.  Defaulting to Off', mode.name)

        return OffMode(mode.id)

    return db.sessionize(do)
예제 #6
0
    def to_dict(self):
        def do(session):
            system_settings = system.get_current_system_settings(session)
            program = system_settings.current_program
            program_data = None

            if program:
                program_data = dict(name=program.name)
                schedule, next_schedule = utils.get_active_and_next_schedule(program)

                schedule_data = self._build_schedule_dict(schedule)
                next_schedule_data = self._build_schedule_dict(next_schedule)

                program_data['active_schedule'] = schedule_data
                program_data['next_schedule'] = next_schedule_data

            return dict(name=self.name(), program=program_data)

        return db.sessionize(do)
예제 #7
0
def get_current_temp():
    def do(session):
        temp_agg = 0
        temp_cnt = 0

        room_models = db.get_rooms(session)

        LOG.debug(room_models)
        for room_model in room_models:
            LOG.debug(room_model)
            if not room_model.active:
                continue

            room_temp = None
            measurement_agg = 0
            measurement_cnt = 0

            if room_model.sensors:
                for sensor_model in room_model.sensors:
                    LOG.debug(sensor_model)
                    measurement = db.get_most_recent_sensor_temperature(
                        session, sensor_id=sensor_model.id, order_desc=True, order_by=models.Measurement.recorded_date
                    )
                    delta_min = CONF.temp.max_measurement_age_threshold_min
                    if measurement and measurement.recorded_date > datetime.utcnow() - timedelta(minutes=delta_min):
                        measurement_agg = measurement.data
                        measurement_cnt = measurement_cnt + 1

            if measurement_cnt > 0 and measurement_agg > 0:
                room_temp = measurement_agg / measurement_cnt

            if room_temp:
                temp_agg = temp_agg + (room_temp * room_model.weight)
                temp_cnt = temp_cnt + room_model.weight

        if not temp_cnt and not temp_agg:
            LOG.warn("No temperature data available.  Either no data exists, or the data that exists is too old.")
            return None

        return temp_agg / temp_cnt

    return db.sessionize(do)
예제 #8
0
    def to_dict(self):
        def do(session):
            system_settings = system.get_current_system_settings(session)
            program = system_settings.current_program
            program_data = None

            if program:
                program_data = dict(name=program.name)
                schedule, next_schedule = utils.get_active_and_next_schedule(
                    program)

                schedule_data = self._build_schedule_dict(schedule)
                next_schedule_data = self._build_schedule_dict(next_schedule)

                program_data['active_schedule'] = schedule_data
                program_data['next_schedule'] = next_schedule_data

            return dict(name=self.name(), program=program_data)

        return db.sessionize(do)
예제 #9
0
    def get_state(self, current_temp):
        def do(session):
            system_settings = system.get_current_system_settings(session)
            program = system_settings.current_program

            self._set_program_name(program)

            if not program:
                LOG.warn('No program set for system.')
                return states.OFF
            elif not program.schedules:
                LOG.warn('No schedules found for program \'%s\'.  Setting system to Off', program.name)
                return states.OFF

            schedule = utils.get_active_schedule(program)
            if not schedule:
                LOG.error('Could not determine the ')
            return self._get_state(current_temp, schedule.cool_temp, schedule.heat_temp)

        return db.sessionize(do)
예제 #10
0
    def get_state(self, current_temp):
        def do(session):
            system_settings = system.get_current_system_settings(session)
            program = system_settings.current_program

            self._set_program_name(program)

            if not program:
                LOG.warn('No program set for system.')
                return states.OFF
            elif not program.schedules:
                LOG.warn(
                    'No schedules found for program \'%s\'.  Setting system to Off',
                    program.name)
                return states.OFF

            schedule = utils.get_active_schedule(program)
            if not schedule:
                LOG.error('Could not determine the ')
            return self._get_state(current_temp, schedule.cool_temp,
                                   schedule.heat_temp)

        return db.sessionize(do)
예제 #11
0
    def get_state(self, current_temp):
        def do(session):
            system_settings = system.get_current_system_settings(session)
            return self._get_state(current_temp, system_settings.cool_temp, system_settings.heat_temp)

        return db.sessionize(do)