Advertisement
BERKYT

fake data

Apr 16th, 2022
1,131
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 7.22 KB | None | 0 0
  1. # ======================================================================================================================
  2.  
  3. # Author: BERKYT
  4.  
  5. # ======================================================================================================================
  6.  
  7. # Температура, открытие, закрытие открытие дверей, вкл выкл свет, в случае протечки: замыкание или размыкание
  8. # Статус: онлайн и оффлайн,
  9. # уровень света, открыто или закрыто окно, время суток, время года.
  10.  
  11. import random
  12. import shm_exceptions
  13.  
  14. from datetime import datetime
  15.  
  16.  
  17. # Обычная заглушка для значений
  18. _PASS = 'PASS'
  19.  
  20.  
  21. class DataForSensor:
  22.     def __init__(self, *, name_sensor, status_network, name_room,
  23.                  temperature='10', status_door_switch='close', status_light_switch='off',
  24.                  status_window_switch='close', status_light_level_switch='0'):
  25.         self.name_sensor = name_sensor
  26.         self.status_network = status_network
  27.         self.name_room = name_room
  28.         self.temperature = temperature
  29.         self.status_door_switch = status_door_switch
  30.         self.status_light_switch = status_light_switch
  31.         self.status_window_switch = status_window_switch
  32.         self.status_light_level_switch = status_light_level_switch
  33.         self._check_status_network()
  34.  
  35.     def _check_status_network(self):
  36.         if self.status_network == 'online':
  37.             return True
  38.         elif self.status_network == 'offline':
  39.             return False
  40.         else:
  41.             raise shm_exceptions.ExceptionOnlineStatus
  42.  
  43.     def _get_status_network(self):
  44.         if self._check_status_network():
  45.             return {'bool': True, 'info': 'Доступ есть!'}
  46.         else:
  47.             return {'bool': False, 'info': 'Не могу получить доступ!'}
  48.  
  49.     def _now_hour(self):
  50.         return datetime.now().time().hour
  51.  
  52.     def _get_sub_time_range(self, start, end):
  53.         return str(list(range(start, end)))
  54.  
  55.     def get_now_date_and_time(self):
  56.         if self._get_status_network()['bool']:
  57.             return f'Текущая дата и время = {datetime.now().strftime("Дата: %d/%m/%Y  Время: %H:%M:%S")}'
  58.         else:
  59.             return self._get_status_network()['info']
  60.  
  61.     def get_name_room(self):
  62.         if self._get_status_network()['bool']:
  63.             return self.name_room
  64.         else:
  65.             return self._get_status_network()['info']
  66.  
  67.     def get_temperature(self):
  68.         """
  69.            Возвращает температуру в комнате в зависимости от времени суток.
  70.        """
  71.         if self._get_status_network()['bool']:
  72.             time_range_with_temperature = {
  73.                 self._get_sub_time_range(0, 6): random.randint(-1, 5),
  74.                 self._get_sub_time_range(6, 10): random.randint(13, 20),
  75.                 self._get_sub_time_range(10, 16): random.randint(20, 30),
  76.                 self._get_sub_time_range(16, 20): random.randint(15, 20),
  77.                 self._get_sub_time_range(20, 24): random.randint(5, 10),
  78.             }
  79.             temperature = self.temperature
  80.             koef_temperature = 10
  81.  
  82.             for key in time_range_with_temperature:
  83.                 if str(self._now_hour()) in key:
  84.                     temperature = time_range_with_temperature[key]
  85.                     break
  86.  
  87.             return f'Температура в комнате "{self.get_name_room()}" = {temperature + koef_temperature} градусов.'
  88.         else:
  89.             return self._get_status_network()['info']
  90.  
  91.     def get_status_online(self):
  92.         return self.status_network
  93.  
  94.     def get_status_window_switch(self):
  95.         if self._get_status_network()['bool']:
  96.             return self.status_window_switch
  97.         else:
  98.             return self._get_status_network()['info']
  99.  
  100.     def get_status_door_switch(self):
  101.         if self._get_status_network()['bool']:
  102.             return self.status_door_switch
  103.         else:
  104.             return self._get_status_network()['info']
  105.  
  106.     def get_status_light_switch(self):
  107.         if self._get_status_network()['bool']:
  108.             return self.status_light_switch
  109.         else:
  110.             return self._get_status_network()['info']
  111.  
  112.     def get_light_level(self):
  113.         """
  114.            Возвращает уровень освещенности в комнате в зависимости от того, открыло ли окно, открыта ли дверь и
  115.            включен ли свет?
  116.        """
  117.         if self._get_status_network()['bool']:
  118.             koef_light_level = random.randint(5, 10)
  119.             result_list = [koef_light_level]
  120.  
  121.             for item in [self.status_light_switch, self.status_door_switch, self.status_window_switch]:
  122.                 if 'on' in item or 'open' in item:
  123.                     result_list.append(random.randint(10, 30))
  124.  
  125.             return 'Уровень освещенности в комнате {name_room} = {level_light}%'.format(level_light=sum(result_list),
  126.                                                                                         name_room=self.get_name_room())
  127.         else:
  128.             return self._get_status_network()['info']
  129.  
  130.     def set_status_network(self, new_status_network):
  131.         self.status_network = new_status_network
  132.  
  133.     def set_status_door_switch(self, status_window_switch):
  134.         if self._get_status_network()['bool']:
  135.             self.status_window_switch = status_window_switch
  136.         else:
  137.             print(self._get_status_network()['info'])
  138.  
  139.     def set_status_light_switch(self, status_light_switch):
  140.         if self._get_status_network()['bool']:
  141.             self.status_light_switch = status_light_switch
  142.         else:
  143.             print(self._get_status_network()['info'])
  144.  
  145.     def set_name_room(self, name_room):
  146.         if self._get_status_network()['bool']:
  147.             self.name_room = name_room
  148.         else:
  149.             print(self._get_status_network()['info'])
  150.  
  151.  
  152. if __name__ == '__main__':
  153.     # Тестовый код
  154.     dfs = DataForSensor(name_sensor='test_sensor', status_network='offline', name_room='Спальня')
  155.     print('Вывод без подключения к сети: ')
  156.     print(dfs.get_temperature())
  157.  
  158.     dfs.set_status_network('online')
  159.     print('Вывод c подключением к сети: ')
  160.  
  161.     print(dfs.get_temperature())
  162.     print(dfs.get_light_level())
  163.     print(dfs.get_now_date_and_time())
  164.     print(dfs.get_name_room())
  165.     print(dfs.get_status_door_switch())
  166.     print(dfs.get_status_light_switch())
  167.     print(dfs.get_status_window_switch())
  168.     print(dfs.get_status_online())
  169.  
  170.     dfs.set_status_network('offline')
  171.     print('Вывод без подключения к сети: ')
  172.  
  173.     print(dfs.get_temperature())
  174.     print(dfs.get_light_level())
  175.     print(dfs.get_now_date_and_time())
  176.     print(dfs.get_name_room())
  177.     print(dfs.get_status_door_switch())
  178.     print(dfs.get_status_light_switch())
  179.     print(dfs.get_status_window_switch())
  180.     print(dfs.get_status_online())
  181.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement