Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # ======================================================================================================================
- # Author: BERKYT
- # ======================================================================================================================
- # Температура, открытие, закрытие открытие дверей, вкл выкл свет, в случае протечки: замыкание или размыкание
- # Статус: онлайн и оффлайн,
- # уровень света, открыто или закрыто окно, время суток, время года.
- import random
- import shm_exceptions
- from datetime import datetime
- # Обычная заглушка для значений
- _PASS = 'PASS'
- class DataForSensor:
- def __init__(self, *, name_sensor, status_network, name_room,
- temperature='10', status_door_switch='close', status_light_switch='off',
- status_window_switch='close', status_light_level_switch='0'):
- self.name_sensor = name_sensor
- self.status_network = status_network
- self.name_room = name_room
- self.temperature = temperature
- self.status_door_switch = status_door_switch
- self.status_light_switch = status_light_switch
- self.status_window_switch = status_window_switch
- self.status_light_level_switch = status_light_level_switch
- self._check_status_network()
- def _check_status_network(self):
- if self.status_network == 'online':
- return True
- elif self.status_network == 'offline':
- return False
- else:
- raise shm_exceptions.ExceptionOnlineStatus
- def _get_status_network(self):
- if self._check_status_network():
- return {'bool': True, 'info': 'Доступ есть!'}
- else:
- return {'bool': False, 'info': 'Не могу получить доступ!'}
- def _now_hour(self):
- return datetime.now().time().hour
- def _get_sub_time_range(self, start, end):
- return str(list(range(start, end)))
- def get_now_date_and_time(self):
- if self._get_status_network()['bool']:
- return f'Текущая дата и время = {datetime.now().strftime("Дата: %d/%m/%Y Время: %H:%M:%S")}'
- else:
- return self._get_status_network()['info']
- def get_name_room(self):
- if self._get_status_network()['bool']:
- return self.name_room
- else:
- return self._get_status_network()['info']
- def get_temperature(self):
- """
- Возвращает температуру в комнате в зависимости от времени суток.
- """
- if self._get_status_network()['bool']:
- time_range_with_temperature = {
- self._get_sub_time_range(0, 6): random.randint(-1, 5),
- self._get_sub_time_range(6, 10): random.randint(13, 20),
- self._get_sub_time_range(10, 16): random.randint(20, 30),
- self._get_sub_time_range(16, 20): random.randint(15, 20),
- self._get_sub_time_range(20, 24): random.randint(5, 10),
- }
- temperature = self.temperature
- koef_temperature = 10
- for key in time_range_with_temperature:
- if str(self._now_hour()) in key:
- temperature = time_range_with_temperature[key]
- break
- return f'Температура в комнате "{self.get_name_room()}" = {temperature + koef_temperature} градусов.'
- else:
- return self._get_status_network()['info']
- def get_status_online(self):
- return self.status_network
- def get_status_window_switch(self):
- if self._get_status_network()['bool']:
- return self.status_window_switch
- else:
- return self._get_status_network()['info']
- def get_status_door_switch(self):
- if self._get_status_network()['bool']:
- return self.status_door_switch
- else:
- return self._get_status_network()['info']
- def get_status_light_switch(self):
- if self._get_status_network()['bool']:
- return self.status_light_switch
- else:
- return self._get_status_network()['info']
- def get_light_level(self):
- """
- Возвращает уровень освещенности в комнате в зависимости от того, открыло ли окно, открыта ли дверь и
- включен ли свет?
- """
- if self._get_status_network()['bool']:
- koef_light_level = random.randint(5, 10)
- result_list = [koef_light_level]
- for item in [self.status_light_switch, self.status_door_switch, self.status_window_switch]:
- if 'on' in item or 'open' in item:
- result_list.append(random.randint(10, 30))
- return 'Уровень освещенности в комнате {name_room} = {level_light}%'.format(level_light=sum(result_list),
- name_room=self.get_name_room())
- else:
- return self._get_status_network()['info']
- def set_status_network(self, new_status_network):
- self.status_network = new_status_network
- def set_status_door_switch(self, status_window_switch):
- if self._get_status_network()['bool']:
- self.status_window_switch = status_window_switch
- else:
- print(self._get_status_network()['info'])
- def set_status_light_switch(self, status_light_switch):
- if self._get_status_network()['bool']:
- self.status_light_switch = status_light_switch
- else:
- print(self._get_status_network()['info'])
- def set_name_room(self, name_room):
- if self._get_status_network()['bool']:
- self.name_room = name_room
- else:
- print(self._get_status_network()['info'])
- if __name__ == '__main__':
- # Тестовый код
- dfs = DataForSensor(name_sensor='test_sensor', status_network='offline', name_room='Спальня')
- print('Вывод без подключения к сети: ')
- print(dfs.get_temperature())
- dfs.set_status_network('online')
- print('Вывод c подключением к сети: ')
- print(dfs.get_temperature())
- print(dfs.get_light_level())
- print(dfs.get_now_date_and_time())
- print(dfs.get_name_room())
- print(dfs.get_status_door_switch())
- print(dfs.get_status_light_switch())
- print(dfs.get_status_window_switch())
- print(dfs.get_status_online())
- dfs.set_status_network('offline')
- print('Вывод без подключения к сети: ')
- print(dfs.get_temperature())
- print(dfs.get_light_level())
- print(dfs.get_now_date_and_time())
- print(dfs.get_name_room())
- print(dfs.get_status_door_switch())
- print(dfs.get_status_light_switch())
- print(dfs.get_status_window_switch())
- print(dfs.get_status_online())
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement