CCCPaste

fake data

# ======================================================================================================================

# 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())