"""Для нормальной работы скрипта требуется наличие в директории данного скрипта следующих файлов:
1. Пустой текстовый файл userids.txt
2. Текстовый файл tokenf.txt, содержащий ТОЛЬКО токен вашего telegram-бота, который вы можете получить, создав бота
 с помощью BotFather в Telegram
 Также должны быть установлены сторонние библиотеки PyTelegramBotAPI, PySerial"""
import telebot
import serial
import time
from telebot import types
useridsf = open('userids.txt', 'r')
userids = useridsf.readlines()
useridsf.close()
for i in range(1, len(userids)):
    userids[i] = int(userids[i])
print(userids)
ntime = time.time()
status = 1
temp = 0
humb = 0
press = 0
hin = 0
tin = 0
debug =  #ввести ID чата отладки
busvoltage = 0
current = 0
loadvoltage = 0
try:
    port = "COM4"  # Replace with the appropriate COM port name
    baudrate = 9600
    ser = serial.Serial(port, baudrate=baudrate, bytesize=8)
except:
    status = 0
def datahandler():
    #Здесь данные, полученные из COM-порта должны становится
    #нормальными списками из 8 элементов каждый. В списках должны содержаться передаваемые погодные данные
    global status
    try:
            # Read a line of data from the serial port
        line_in = ser.readline().decode().strip()
        if line_in:
            print(line_in)
        global temp
        global humb
        global press
        global hin
        global tin
        global busvoltage
        global loadvoltage
        global current
        zindexs = []
        for i1 in range(0, len(line_in)):
            if line_in[i1] == '.':
                zindexs.append(i1)
        print(zindexs)
        temp = line_in[0:zindexs[0]+3]
        humb = line_in[zindexs[0]+3:zindexs[1]+3]
        press = line_in[zindexs[1]+3:zindexs[2]+3]
        hin = line_in[zindexs[2]+3:zindexs[3]+3]
        tin = line_in[zindexs[3]+3:zindexs[4]+3]
        busvoltage = line_in[zindexs[4]+3:zindexs[5]+3]
        loadvoltage = line_in[zindexs[5]+3:zindexs[6]+3]
        current = line_in[zindexs[6]+3:zindexs[7]+3]
    except:
        status = 0
def error(mess):
    global status
    bot.send_message(mess.chat.id, 'На данный момент ни одна из метеостанций Kvazitec, к сожалению, не способна предоставить данные. После получения данных хотя бы с одной из них вам будет отправлено уведомление. Приятного ожидания!')
    bot.send_message(mess.chat.id, '⌛')
    bot.send_message(debug, 'Error')
    status = 1
tokenf = open('tokenf.txt', 'r')
toke = tokenf.readline()
bot = telebot.TeleBot(toke)
@bot.message_handler(commands=['start'])
def starter(mess):
    global status
    try:
        userids.index(mess.chat.id)
    except:
        useridsf = open('userids.txt', 'a')
        useridsf.write('\n'+str(mess.chat.id))
        useridsf.close()
        userids.append(mess.chat.id)
    if status == 0:
        error(mess)
    elif status == 1:
        datahandler()
        if status == 1:
            markup = types.InlineKeyboardMarkup()
            markup.add(types.InlineKeyboardButton('KW V1 54.1', callback_data='v1.54.1'))
            bot.send_message(mess.chat.id,'Доброго дня! Вам доступны погодные данные с метеостанций Kvazitec, список которых вы видите ниже. Для получения данных с какой-либо метеостанции нажмите на кнопку с её названием', reply_markup=markup)
        elif status == 0:
            error(mess)
    print(userids)
@bot.callback_query_handler(func=lambda call: True)
def caller(call):
    global status
    if call.data == 'v1.54.1':
        datahandler()
        if status == 1:
            markup1 = types.InlineKeyboardMarkup()
            markup1.add(types.InlineKeyboardButton('Обновить данные', callback_data='v1.54.1'))
            bot.send_message(call.message.chat.id,'Данные об окружающем воздухе:' + '\n' + 'Температура: ' + temp + '°C'+'\n' + 'Влажность: ' + humb + '%' + '\n' + 'Давление: ' + press + ' кПа', reply_markup=markup1)
        elif status == 0:
            error(call.message)
bot.polling(non_stop=True)

