Умный гараж

Заказать уникальную курсовую работу
Тип работы: Курсовая работа
Предмет: Программирование
  • 28 28 страниц
  • 0 + 0 источников
  • Добавлена 24.05.2024
1 496 руб.
  • Содержание
  • Часть работы
  • Список литературы
Цель работы 2
Задание 2
Проект системы 4
Объектная модель 8
Модуль сбора данных 15
Анализ данных 19
Интерфейсы 21
Выводы 27
Приложение 28

Фрагмент для ознакомления

log('Ошибкаприобновлениистатусаумногосвета'); } });});$('#light_brightness_slider').on('change', function() { var brightness = $(this).val(); $('#light_brightness').text(brightness);});// Умныеворота$('#toggle_gate_button').click(function() { var currentStatus = $('#gate_status').text(); var newStatus = (currentStatus == 'Открыты') ? 'Закрыты' : 'Открыты'; $('#gate_status').text(newStatus); // Отправкаданныхостатусеворотнасервер $.ajax({ url: '/set_device_status/gate', type: 'POST',contentType: 'application/json', data: JSON.stringify({ is_open: newStatus == 'Открыты' }), success: function(response) { console.log('Статусумныхворотобновленизалогирован'); }, error: function(error) { console.log('Ошибкаприобновлениистатусаумныхворот'); } });});$('#toggle_security_button').click(function() { var currentStatus = $('#security_status').text(); var newStatus = (currentStatus == 'Активирована') ? 'Выключена' : 'Активирована'; $('#security_status').text(newStatus); // Отправкаданныхостатусесистемыбезопасностинасервер $.ajax({ url: '/set_device_status/security', type: 'POST',contentType: 'application/json', data: JSON.stringify({ is_armed: newStatus == 'Активирована' }), success: function(response) { console.log('Статуссистемыбезопасностиобновленизалогирован'); }, error: function(error) { console.log('Ошибкаприобновлениистатусасистемыбезопасности'); } });});$('#toggle_multiroom_audio_button').click(function() { var audioStatus = $('#multiroom_audio_status').text(); var newAudioStatus = (audioStatus == 'Включено') ? 'Выключено' : 'Включено'; $('#multiroom_audio_status').text(newAudioStatus); var videoStatus = $('#multiroom_video_status').text() == 'Включено'; // Отправкаданныхостатусемультируманасервер $.ajax({ url: '/set_device_status/multiroom', type: 'POST',contentType: 'application/json', data: JSON.stringify({audio_enabled: newAudioStatus == 'Включено',video_enabled: videoStatus }), success: function(response) { console.log('Статусмультирума (аудио) обновленизалогирован'); }, error: function(error) { console.log('Ошибкаприобновлениистатусамультирума (аудио)'); } });});$('#toggle_multiroom_video_button').click(function() { var videoStatus = $('#multiroom_video_status').text(); var newVideoStatus = (videoStatus == 'Включено') ? 'Выключено' : 'Включено'; $('#multiroom_video_status').text(newVideoStatus); var audioStatus = $('#multiroom_audio_status').text() == 'Включено'; // Отправкаданныхостатусемультируманасервер $.ajax({ url: '/set_device_status/multiroom', type: 'POST',contentType: 'application/json', data: JSON.stringify({audio_enabled: audioStatus,video_enabled: newVideoStatus == 'Включено' }), success: function(response) { console.log('Статусмультирума (видео) обновленизалогирован'); }, error: function(error) { console.log('Ошибкаприобновлениистатусамультирума (видео)'); } });}); });SmartDevice.py# эмуляторустройствclass SmartDevice:def __init__(self, device_type):self.device_type = device_typedef get_status(self):raise NotImplementedErrordef set_status(self, status):raise NotImplementedErrorclass SmartLight(SmartDevice):def __init__(self):super().__init__("light")self.state = Falseself.brightness = 50def get_status(self):return {"state": self.state, "brightness": self.brightness}def set_status(self, status):self.state = status.get("state", self.state)self.brightness = status.get("brightness", self.brightness)class SmartGate(SmartDevice):def __init__(self):super().__init__("gate")self.is_open = False def get_status(self):return {"is_open": self.is_open}def set_status(self, status):self.is_open = status.get("is_open", self.is_open)class SecuritySystem(SmartDevice):def __init__(self):super().__init__("security")self.is_armed = Falseself.cameras_active = False def get_status(self):return {"is_armed": self.is_armed, "cameras_active": self.cameras_active}def set_status(self, status):self.is_armed = status.get("is_armed", self.is_armed)self.cameras_active = status.get("cameras_active", self.cameras_active)class MultiRoom(SmartDevice):def __init__(self):super().__init__("multiroom")self.audio_enabled = Falseself.video_enabled = False def get_status(self):return {"audio_enabled": self.audio_enabled, "video_enabled": self.video_enabled}def set_status(self, status):self.audio_enabled = status.get("audio_enabled", self.audio_enabled)self.video_enabled = status.get("video_enabled", self.video_enabled)Logger.py# логированиевмонгоimport pymongofrom pymongo.errorsimport PyMongoErrorimport logging# Настройкалогированияlogging.basicConfig(filename='server.log', level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')class Logger:def __init__(self, db_name):# Подключениек MongoDBself.client = pymongo.MongoClient('mongodb://localhost:27017/')self.db = self.client[db_name]def validate_data(self, data):for key, value in data.items():if not isinstance(value, bool) and not isinstance(value, int):logging.error(f'Недопустимоезначение{key}: {value}')return False return True def log_temperature(self, temperature):print(temperature)if self.validate_data({'temperature': temperature}):try:print(temperature)self.db.temperatures.insert_one({'temperature': temperature}) logging.info('Температурауспешнозалогирована: {}'.format(temperature))except PyMongoErroras e:logging.error(f"Ошибкаприлогированиитемпературы: {e}")def log_device_status(self, device_name, status):if self.validate_data(status):try: collection = self.db[device_name]collection.insert_one(status) logging.info(f'Статусустройства{device_name}залогирован: {status}')except PyMongoErroras e:logging.error(f"Ошибкаприлогированиистатусаустройства{device_name}: {e}")DataAnalysis.pyimport datetimefrom statistics import mean, stdevimport pymongoclass DataAnalysis:def __init__(self, db_name):self.client = pymongo.MongoClient('mongodb://localhost:27017/')self.db = self.client[db_name]def analyze_collection(self, collection_name, data_key): collection = self.db[collection_name] cursor = collection.find({})data_count = collection.count_documents({})print(f"Найденодокументоввколлекции '{collection_name}': {data_count}")if data_count == 0:print(f"Нетданныхдляанализавколлекции '{collection_name}'")return Nonedata = []for record in cursor:try: value = float(record[data_key]) # Преобразованиестрокивчислоdata.append(value)except (ValueError, TypeError):print(f"Невозможнопреобразоватьзначение{record[data_key]}вчислодлядокумента: {record}")if not data:print(f"Данныепоключу '{data_key}' непригодныдляанализавколлекции '{collection_name}'")return None# Теперь, когдаунасестьсписокчисел, мыможембезопасновычислитьстатистикуavg_value = mean(data)max_value = max(data)min_value = min(data)std_value = stdev(data) if len(data) > 1 else 0analysis_result = {'collection': collection_name,'average': avg_value,'max': max_value,'min': min_value,'std_dev': std_value,'date': datetime.datetime.now() }# Сохранениерезультатованализавотдельнуюколлекциюanalysis_collection = self.db['analysis_results']analysis_collection.insert_one(analysis_result)print(f"Результатыанализадляколлекции '{collection_name}' сохранены.")return analysis_resultControlPanel.py# Тутсобранывсеустройствадомаfrom model.SmartDeviceimport SmartLight, SmartGate, SecuritySystem, MultiRoomclass ControlPanel:def __init__(self):self.devices = {"light": SmartLight(),"gate": SmartGate(),"security": SecuritySystem(),"multiroom": MultiRoom(),}def get_device_status(self, device_name):return self.devices[device_name].get_status()def set_device_status(self, device_name, status):self.devices[device_name].set_status(status)

-