Ошибка traceback (most recent call last) telebot
Столкнулся со следующей проблемой, которую вот уже месяц как не могу решить. Я написал код на python, телеграм бот с рассылкой, который берет данные из google таблицы и присылает уведомления пользователю каждый день в определенное время. На этапе тестирования все было хорошо, запускал программу на рабочем компьютере (на винде) и все работало стабильно, программа не вылетала. Затем было принято решение поставить код на ruspberry pi 4 (на родной оперативной системе), но именно на ней стала вылетать ошибка, описанная в заголовке. Если кто-то знает с чем может быть связана проблема, буду очень благодарен. Код ниже:
import telebot
from telebot import types
import httplib2
import apiclient
from oauth2client.service_account import ServiceAccountCredentials
from datetime import datetime
import time
import schedule
# ПОДКЛЮЧЕНИЕ TELEBOT API
tb_token = 'тут токен'
bot = telebot.TeleBot(tb_token)
# СПРАВОЧНЫЙ ТЕКСТ БОТА
help_text = '''Привет! Я - бот, призванный упростить контроль за сроком истечения патентов иностранных сотрудников вашей компании. Вот небольшая инструкция о том, как меня включить: \n\nПеред тем, как мы начнем наше общение, нужно нажать кнопку /log_in, чтобы я точно знал, знаете ли Вы, дорогой пользователь, пароль. \n\nТеперь, когда Вы ввели пароль правильно, я могу присылать Вам уведомления о сроках окончания действия панетов. \n\nОчень важно правильно заполнять таблицу, чтобы я мог корректно работать. Я и таблица - лучшие друзья, мы работаем полностью автономно, так что, если Вам, дорого пользователь, нужно внести какие-то изменения в таблицу, Вы можете сделать это в любой моменет. ФИО сотрудника нужно указывать с столбце B, а срок действия патента в столбце N в формате (00.00.0000). \n\nЕсли Вы следовали моей инструкции, значит Вы сделали все правильно. Приятного пользования!'''
users = []
password = '04011290'
# ПОДКЛЮЧЕНИЕ GOOGLE SHEETS API
credentials_file = 'creds.json'
spreadsheet_id = 'тут id таблицы'
# ФУНКЦИЯ ОБРАЩЕНИЯ К ТАБЛИЦЕ С ДАННЫМИ
def table_read_data():
credentials = ServiceAccountCredentials.from_json_keyfile_name(credentials_file, ['https://www.googleapis.com/auth/spreadsheets', 'https://www.googleapis.com/auth/drive'])
httpAuth = credentials.authorize(httplib2.Http())
service = apiclient.discovery.build('sheets', 'v4', http=httpAuth)
objects = []
spreadsheet = service.spreadsheets().get(spreadsheetId=spreadsheet_id).execute()
sheetList = spreadsheet.get('sheets')
lists_arr = []
for sheet in sheetList:
objects.append(sheet['properties']['title'])
for i in objects:
values = service.spreadsheets().values().get(
spreadsheetId=spreadsheet_id,
range=i,
majorDimension='ROWS'
).execute()
lists_arr.append(values)
return lists_arr
def send_daily_report():
today = datetime.now()
print('Оповещения отправлены!')
for i in table_read_data():
for table_string in i['values']:
if table_string[13] == 'Срок действия':
continue
elif table_string[9] == 'Регистрация' or table_string[9] == 'РВП' or table_string[9] == 'ВНЖ' or table_string[9] == '':
continue
else:
if today.strftime('%d.%m.%Y') == table_string[13]:
sending_messages(users, 'Срок действия патента ' + table_string[1] + ' истекает сегодня' + ', РЦ ' + table_string[0])
elif today <= datetime.strptime(table_string[13], '%d.%m.%Y'):
date_difference = datetime.strptime(table_string[13], '%d.%m.%Y') - today
if int(date_difference.days) <= 30:
sending_messages(users, 'Срок действия патента ' + table_string[1] + ' истекает через ' + str(date_difference.days) + ' дней' + ', РЦ ' + table_string[0])
schedule.every().day.at('08:00').do(send_daily_report)
def run_scheduler():
while True:
schedule.run_pending()
time.sleep(1)
# ФУНКЦИЯ ОТПРАВКИ СООБЩЕНИЙ АВТОРИЗИРОВАННЫМ ПОЛЬЗОВАТЕЛЯМ
def sending_messages(users_arr, message):
for i in users_arr:
bot.send_message(i, message)
# ФУНКЦИЯ START TG БОТА
@bot.message_handler(commands=['start'])
def cmd_start(message):
markup = types.ReplyKeyboardMarkup(resize_keyboard=True)
btn1 = types.KeyboardButton('/log_in')
markup.add(btn1)
bot.send_message(message.chat.id, help_text, reply_markup=markup)
# ФУНКЦИИ LOG_IN И PASSWORD_CHECK TG БОТА
@bot.message_handler(commands=['log_in'])
def cmd_log_in(message):
pass_input = bot.send_message(message.chat.id, 'Введите пароль!')
bot.register_next_step_handler(pass_input, password_check)
def password_check(message):
user = str(message.from_user.id)
if message.text == password:
if user in users:
bot.send_message(message.chat.id, 'Вы уже авторизированы в системе!')
else:
users.append(user)
bot.send_message(message.chat.id, 'Вы успешно авторизированы в системе!')
print(users)
else:
if user in users:
bot.send_message(message.chat.id, 'Вы уже авторизированы в системе!')
else:
bot.send_message(message.chat.id, 'Неверный пароль!')
bot.send_message(message.chat.id, 'Отправка уведомлений активирована!')
run_scheduler()
# ФУНКЦИЯ INFO TG БОТА
bot.polling(none_stop=True)
Traceback (most recent call last):
File "/home/pi/Documents/bot/venv/lib/python3.9/site-packages/urllib3/connectionpool.py", line 467, in _make_request
self._validate_conn(conn)
File "/home/pi/Documents/bot/venv/lib/python3.9/site-packages/urllib3/connectionpool.py", line 1092, in _validate_conn
conn.connect()
File "/home/pi/Documents/bot/venv/lib/python3.9/site-packages/urllib3/connection.py", line 642, in connect
sock_and_verified = _ssl_wrap_socket_and_match_hostname(
File "/home/pi/Documents/bot/venv/lib/python3.9/site-packages/urllib3/connection.py", line 783, in _ssl_wrap_socket_and_match_hostname
ssl_sock = ssl_wrap_socket(
File "/home/pi/Documents/bot/venv/lib/python3.9/site-packages/urllib3/util/ssl_.py", line 469, in ssl_wrap_socket
ssl_sock = _ssl_wrap_socket_impl(sock, context, tls_in_tls, server_hostname)
File "/home/pi/Documents/bot/venv/lib/python3.9/site-packages/urllib3/util/ssl_.py", line 513, in _ssl_wrap_socket_impl
return ssl_context.wrap_socket(sock, server_hostname=server_hostname)
File "/usr/lib/python3.9/ssl.py", line 500, in wrap_socket
return self.sslsocket_class._create(
File "/usr/lib/python3.9/ssl.py", line 1040, in _create
self.do_handshake()
File "/usr/lib/python3.9/ssl.py", line 1309, in do_handshake
self._sslobj.do_handshake()
socket.timeout: _ssl.c:1106: The handshake operation timed out
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "/home/pi/Documents/bot/venv/lib/python3.9/site-packages/requests/adapters.py", line 486, in send
resp = conn.urlopen(
File "/home/pi/Documents/bot/venv/lib/python3.9/site-packages/urllib3/connectionpool.py", line 844, in urlopen
retries = retries.increment(
File "/home/pi/Documents/bot/venv/lib/python3.9/site-packages/urllib3/util/retry.py", line 470, in increment
raise reraise(type(error), error, _stacktrace)
File "/home/pi/Documents/bot/venv/lib/python3.9/site-packages/urllib3/util/util.py", line 39, in reraise
raise value
File "/home/pi/Documents/bot/venv/lib/python3.9/site-packages/urllib3/connectionpool.py", line 790, in urlopen
response = self._make_request(
File "/home/pi/Documents/bot/venv/lib/python3.9/site-packages/urllib3/connectionpool.py", line 491, in _make_request
raise new_e
File "/home/pi/Documents/bot/venv/lib/python3.9/site-packages/urllib3/connectionpool.py", line 469, in _make_request
self._raise_timeout(err=e, url=url, timeout_value=conn.timeout)
File "/home/pi/Documents/bot/venv/lib/python3.9/site-packages/urllib3/connectionpool.py", line 370, in _raise_timeout
raise ReadTimeoutError(
urllib3.exceptions.ReadTimeoutError: HTTPSConnectionPool(host='api.telegram.org', port=443): Read timed out. (read timeout=20)
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/pi/Documents/bot/bot.py", line 124, in <module>
bot.polling(none_stop=True)
File "/home/pi/Documents/bot/venv/lib/python3.9/site-packages/telebot/__init__.py", line 1043, in polling
self.__threaded_polling(non_stop=non_stop, interval=interval, timeout=timeout, long_polling_timeout=long_polling_timeout,
File "/home/pi/Documents/bot/venv/lib/python3.9/site-packages/telebot/__init__.py", line 1118, in __threaded_polling
raise e
File "/home/pi/Documents/bot/venv/lib/python3.9/site-packages/telebot/__init__.py", line 1073, in __threaded_polling
polling_thread.raise_exceptions()
File "/home/pi/Documents/bot/venv/lib/python3.9/site-packages/telebot/util.py", line 108, in raise_exceptions
raise self.exception_info
File "/home/pi/Documents/bot/venv/lib/python3.9/site-packages/telebot/util.py", line 90, in run
task(*args, **kwargs)
File "/home/pi/Documents/bot/venv/lib/python3.9/site-packages/telebot/__init__.py", line 649, in __retrieve_updates
updates = self.get_updates(offset=(self.last_update_id + 1),
File "/home/pi/Documents/bot/venv/lib/python3.9/site-packages/telebot/__init__.py", line 623, in get_updates
json_updates = apihelper.get_updates(self.token, offset, limit, timeout, allowed_updates, long_polling_timeout)
File "/home/pi/Documents/bot/venv/lib/python3.9/site-packages/telebot/apihelper.py", line 321, in get_updates
return _make_request(token, method_url, params=payload)
File "/home/pi/Documents/bot/venv/lib/python3.9/site-packages/telebot/apihelper.py", line 156, in _make_request
result = _get_req_session().request(
File "/home/pi/Documents/bot/venv/lib/python3.9/site-packages/requests/sessions.py", line 589, in request
resp = self.send(prep, **send_kwargs)
File "/home/pi/Documents/bot/venv/lib/python3.9/site-packages/requests/sessions.py", line 703, in send
r = adapter.send(request, **kwargs)
File "/home/pi/Documents/bot/venv/lib/python3.9/site-packages/requests/adapters.py", line 532, in send
raise ReadTimeout(e, request=request)
requests.exceptions.ReadTimeout: HTTPSConnectionPool(host='api.telegram.org', port=443): Read timed out. (read timeout=20)