From 848bd58266fe22b6f0b67a1bd38584683136348d Mon Sep 17 00:00:00 2001 From: Nikitat0 Date: Wed, 28 Feb 2024 21:41:55 +0700 Subject: [PATCH] added more spaghetticode --- app.py | 135 +++++++++++++++---- bot.py | 305 +++++++++++++++++++++++++++++++++++++++++++ data.json | 2 +- pip | 0 templates/index.bk | 136 +++++++++++++++++++ templates/index.html | 253 ++++++++++++++++++----------------- 6 files changed, 678 insertions(+), 153 deletions(-) create mode 100644 bot.py create mode 100644 pip create mode 100644 templates/index.bk diff --git a/app.py b/app.py index 123c0f2..44e74f9 100644 --- a/app.py +++ b/app.py @@ -2,23 +2,93 @@ import requests, random, hashlib, json, os from esplistener.esplistener import * from flask import session, Flask, request, render_template, url_for, redirect -initialize_data = initialize() -socket, data = initialize_data[0], initialize_data[1] + +#initialize_data = initialize() + +#socket, data = initialize_data[0], initialize_data[1] #get_smth(socket, "Temperature") #send_command(socket, "Temperature", "GetValue") app = Flask(__name__) app.secret_key = '%TGHUI8uyFGHI(*&^5rUIO9i*&^TRfvgbHNJKLKJnhgfDE3WedFGhjKOlIuyTRe4567ioP:liuytr56&8()IuGTfrEdsXcghuy6' +cdata = {} +def get_data(): + global cdata + if open('data.json', 'r').read() != "": + with open('data.json', 'r') as w: + cdata = json.load(w) + print("get from json") + else: + if not(cdata): +# if session['loggedin']: + sensors = ['pozhar', 'pozharolikv', 'soundstatus','soundlikv', 'doorst', 'gaz', 'gazolikv'] + cdata = {'1': {}, + '2': {}, + '3': {}, + 'potok': 100, + 'earthquake': 1, + 'techka': 1, + 'tok': 100, + 'nasostoggle': 1, + 'lightst':1 + } + for i in range(1,4): + for j in sensors: + if j in ['earthquake', 'techka', 'nasostoggle', 'pozhar', 'soundstatus', 'gazolikv', 'pozharolikv', 'gaz','soundlikv']: + cdata[str(i)][j+str(i)] = random.randint(1,1) + else: + cdata[str(i)][j+str(i)] = random.randint(50, 50) + with open("data.json", 'w') as f: + json.dump(cdata, f, indent=4) + return cdata + else: + with open("data.json", 'w') as f: + json.dump(cdata, f, indent=4) + + print("not created") + return cdata + +def get_value(sensorid): + global cdata + if sensorid in cdata.keys(): + return cdata[sensorid] + else: + for i in cdata.keys(): + try: + if sensorid in cdata[str(i)].keys(): + return cdata[str(i)][sensorid] + except: + break + +def change_data(sensorid, value): + global cdata + if sensorid in cdata.keys(): + cdata[sensorid] = value + with open('data.json', 'w') as r: + json.dump(cdata, r, indent=4) + print("unluck") + else: + for i in cdata.keys(): + try: + if sensorid in cdata[str(i)].keys(): + cdata[str(i)][sensorid] = value + with open('data.json', 'w') as r: + json.dump(cdata, r, indent=4) + print("unluck") + break + except: + break + return '1' +cdata = {} def hash_data(data): hashpass = hashlib.sha256() hashpass.update(bytes(data, encoding='utf8')) passw = hashpass.hexdigest() return passw - def create_account(login, password): login, password = str(login), str(password) if not os.path.exists('accounts.json'): @@ -60,11 +130,10 @@ def define_session(session): -def get_cur_speed(session): - if session['loggedin']: - return random.randint(1, 100) - return "no rights" - #return int(requests.post("http://"+ip+"/get_speed")) + + + + #Основные страницы, индекс, и страницы лабораторий, авторизация @app.route("/", methods = ["GET", "POST"]) def index(): @@ -104,30 +173,50 @@ def login(): return redirect('/') else: return render_template("login.html", err="Неверный логин/пароль") + #Общение с ЕSP +@app.route("/change_value", methods = ["POST"]) +def ch_value(): + if session["loggedin"]: + sensorid = request.values.get("id") + value = request.values.get("value") + change_value(sensorid, value) + print(cdata) + else: + return 'No rights' + +@app.route("/send_command", methods = ["POST"]) +def change(): + if session["loggedin"]: + k = request.values.get('comm_id') + if 'alert' in k: + k = k.replace('alert', '') + + if k in ["lightst", "nasostoggle", "doorst1", "doorst2", "doorst3", "nasostoggle", "lightst", "pozharolikv1", "pozharolikv2","pozharolikv3","gazolikv1","gazolikv2","gazolikv3", "soundstatus1", "soundstatus2", "soundstatus3"]: + z = get_value(k) + print(k, z) + change_data(k, int(not(z))) + print(get_value(k), "lalka") + return '1' + else: + print("lol", k) + print(request.data) + print(request.args.keys()) + print(cdata) + return '0' + else: + return '0' @app.route("/get_data", methods = ["POST"]) def return_data(): - if 1: -# if session['loggedin']: - sensors = ['earthquake', 'techka', 'pozhar', 'soundstatus', 'tok', 'potok', 'nasostoggle', 'nasosspeed','lightst', 'lightpower', 'gaz'] - data = {'1': {}, - '2': {}, - '3': {}} - for i in range(1,4): - for j in sensors: - if j in ['earthquake', 'techka', 'nasostoggle', 'pozhar', 'soundstatus', 'lighst', 'onfire', 'gaz']: - data[str(i)][j] = random.randint(0,1) - else: - data[str(i)][j] = random.randint(0, 100) - print(data) - return json.dumps(data) + if session["loggedin"]: + cdata = get_data() + return json.dumps(cdata) return 'no_rights' - @app.route("/sos_check", methods = ["POST"]) def sos_check(): if random.randint(0,1): diff --git a/bot.py b/bot.py new file mode 100644 index 0000000..a492c76 --- /dev/null +++ b/bot.py @@ -0,0 +1,305 @@ +from aiogram import Bot, Dispatcher, executor, types +from aiogram.types import ChatType, ReplyKeyboardRemove, ReplyKeyboardMarkup, KeyboardButton, InlineKeyboardMarkup, InlineKeyboardButton +import socket, json + +chat_id = -1001710050337 + +API_TOKEN = '7074773527:AAFlDwOONJtLoeQXpRpOCjdpEFRHh_YIyHw' +bot = Bot(token=API_TOKEN) +dp = Dispatcher(bot) + +users = { + "1":[], + "2":[], + "3":[] + } +cdata = {} +def get_data(): + global cdata + if open('data.json', 'r').read() != "{}": + with open('data.json', 'r') as w: + cdata = json.load(w) + print("GOT FROM FILE") + else: + if not(cdata): +# if session['loggedin']: + sensors = ['pozhar', 'pozharolikv', 'soundstatus','soundlikv', 'doorst', 'gaz', 'gazolikv'] + cdata = {'1': {}, + '2': {}, + '3': {}, + 'potok': 100, + 'earthquake': 1, + 'techka': 1, + 'tok': 100, + 'nasostoggle': 1, + 'lightst':1 + } + for i in range(1,4): + for j in sensors: + if j in ['earthquake', 'techka', 'nasostoggle', 'pozhar', 'soundstatus', 'gazolikv', 'pozharolikv', 'gaz','soundlikv']: + cdata[str(i)][j+str(i)] = random.randint(1,1) + else: + cdata[str(i)][j+str(i)] = random.randint(50, 50) + with open("data.json", 'w') as f: + json.dump(cdata, f, indent=4) + + return cdata + else: + with open("data.json", 'w') as f: + json.dump(cdata, f, indent=4) + + print("not created") + return cdata + +cdata = get_data() + +def get_value(sensorid): + global cdata + if sensorid in cdata.keys(): + return cdata[sensorid] + else: + for i in cdata.keys(): + try: + if sensorid in cdata[str(i)].keys(): + return cdata[str(i)][sensorid] + except: + break + +def change_data(sensorid, value): + global cdata + if sensorid in cdata.keys(): + cdata[sensorid] = value + with open('data.json', 'w') as r: + json.dump(cdata, r) + print("changed", sensorid, value) + else: + for i in cdata.keys(): + try: + if sensorid in cdata[str(i)].keys(): + cdata[str(i)][sensorid] = value + print("chengci", sensorid, value) + with open('data.json', 'w') as r: + json.dump(cdata, r) + break + except: + break + return '1' +@dp.message_handler(commands=['start']) +async def start(message: types.Message): + tt = message.from_user.id + k=1 + for i in users.keys(): + if tt in users[i]: + k = 0 + if k: + keyboard = InlineKeyboardMarkup() + keyboard.add( + InlineKeyboardButton(text="1", callback_data="1"), + InlineKeyboardButton(text="2", callback_data="2"), + InlineKeyboardButton(text="3", callback_data="3") + ) + await message.answer("В каком подъезде вы живёте?", reply_markup=keyboard) + else: + await message.answer("Вы уже зарегистрированы") + +@dp.callback_query_handler(lambda query: query.data in ['1', '2', '3']) +async def process_callback(callback_query: types.CallbackQuery): + user_id = callback_query.from_user.id + users[callback_query.data].append(user_id) + await bot.delete_message(chat_id=callback_query.from_user.id, message_id=callback_query.message.message_id) + await bot.send_message(user_id, f"Вы добавлены в подъезд {callback_query.data}") + +@dp.message_handler(content_types=types.ContentTypes.NEW_CHAT_MEMBERS) +async def add_chat_members(message: types.Message): + for member in message.new_chat_members: + user_id = member.id + if user_id not in users: + await message.answer(f"Пользователь {member.full_name}, зарегистрируйтесь у меня для работы с умным домом") + +@dp.message_handler(lambda message: message.text == "Открыть дверь") +async def open_the_door(message: types.Message): + k = '' + for i in users.keys(): + if message.from_user.id in users[i]: + k = i + change_data("doorst"+k, 0) + print(cdata[k]["doorst"+k]) + data = get_data() + k = '' + keyboard = types.ReplyKeyboardMarkup(resize_keyboard=True) + button_open = types.KeyboardButton("Открыть дверь") + button_toggle = types.KeyboardButton("Включить освещение") + button_untoggle = types.KeyboardButton("Выключить освещение") + button_close = types.KeyboardButton("Закрыть дверь") + button_clear_snow = types.KeyboardButton("Очистка снега") + button_doctor = types.KeyboardButton("Врач") + keyboard.add(button_clear_snow, button_doctor) + if get_value("lightst"): + keyboard.add(button_untoggle) + else: + keyboard.add(button_toggle) + if not(get_value("doorst"+k)): + print("opened") + keyboard.add(button_close) + else: + print("closed") + keyboard.add(button_open) + + await message.answer("Вы открыли дверь" + cdata,reply_markup=keyboard) + +@dp.message_handler(lambda message: message.text == "Закрыть дверь") +async def close_the_door(message: types.Message): + k = '' + for i in users.keys(): + if message.from_user.id in users[i]: + k = i + change_data("doorst"+k, 1) + print(cdata[k]["doorst"+k]) + data = get_data() + k = '' + keyboard = types.ReplyKeyboardMarkup(resize_keyboard=True) + button_open = types.KeyboardButton("Открыть дверь") + button_toggle = types.KeyboardButton("Включить освещение") + button_untoggle = types.KeyboardButton("Выключить освещение") + button_close = types.KeyboardButton("Закрыть дверь") + button_clear_snow = types.KeyboardButton("Очистка снега") + button_doctor = types.KeyboardButton("Врач") + keyboard.add(button_clear_snow, button_doctor) + if get_value("lightst"): + keyboard.add(button_untoggle) + else: + keyboard.add(button_toggle) + if not(get_value("doorst"+k)): + print("opened") + keyboard.add(button_close) + else: + keyboard.add(button_open) + + await message.answer("Вы закрыли дверь",reply_markup=keyboard) + +@dp.message_handler(lambda message: message.text == "Включить освещение") +async def turn_on_light(message: types.Message): + for i in users.keys(): + if message.from_user.id in users[i]: + k = i + change_data("lightst", 1) + data = get_data() + k = '' + keyboard = types.ReplyKeyboardMarkup(resize_keyboard=True) + button_open = types.KeyboardButton("Открыть дверь") + button_toggle = types.KeyboardButton("Включить освещение") + button_untoggle = types.KeyboardButton("Выключить освещение") + button_close = types.KeyboardButton("Закрыть дверь") + button_clear_snow = types.KeyboardButton("Очистка снега") + button_doctor = types.KeyboardButton("Врач") + keyboard.add(button_clear_snow, button_doctor) + if get_value("lightst"): + keyboard.add(button_untoggle) + else: + keyboard.add(button_toggle) + if not(get_value("doorst"+k)): + print("opened") + keyboard.add(button_close) + else: + keyboard.add(button_open) + + print(cdata["lightst"]) + await message.answer("Вы включили свет",reply_markup=keyboard) + + +@dp.message_handler(lambda message: message.text == "Выключить освещение") +async def turn_off_light(message: types.Message): + for i in users.keys(): + if message.from_user.id in users[i]: + k = i + change_data("lightst", 0) + print(cdata["lightst"]) + data = get_data() + k = '' + keyboard = types.ReplyKeyboardMarkup(resize_keyboard=True) + button_open = types.KeyboardButton("Открыть дверь") + button_toggle = types.KeyboardButton("Включить освещение") + button_untoggle = types.KeyboardButton("Выключить освещение") + button_close = types.KeyboardButton("Закрыть дверь") + button_clear_snow = types.KeyboardButton("Очистка снега") + button_doctor = types.KeyboardButton("Врач") + keyboard.add(button_clear_snow, button_doctor) + if get_value("lightst"): + keyboard.add(button_untoggle) + else: + keyboard.add(button_toggle) + if not(get_value("doorst"+k)): + keyboard.add(button_close) + else: + keyboard.add(button_open) + + await message.answer("Вы выключили свет",reply_markup=keyboard) + + +@dp.message_handler(lambda message: message.text == "Очистка снега") +async def clear_snow(message: types.Message): + for i in users.keys(): + if message.from_user.id in users[i]: + k = i + await message.answer("Вы вызвали очистку снега",reply_markup=keyboard) + +@dp.message_handler(lambda message: message.text == "Врач") +async def call_doctor(message: types.Message): + for i in users.keys(): + if message.from_user.id in users[i]: + k = i + await message.answer("Вы вызвали врача",reply_markup=keyboard) + + + +@dp.message_handler(lambda message: message.chat.type == ChatType.PRIVATE) +async def private_chat(message: types.Message): + data = get_data() + k = '' + keyboard = types.ReplyKeyboardMarkup(resize_keyboard=True) + button_open = types.KeyboardButton("Открыть дверь") + button_toggle = types.KeyboardButton("Включить освещение") + button_untoggle = types.KeyboardButton("Выключить освещение") + button_close = types.KeyboardButton("Закрыть дверь") + button_clear_snow = types.KeyboardButton("Очистка снега") + button_doctor = types.KeyboardButton("Врач") + for i in users.keys(): + if message.from_user.id in users[i]: + k = i + + keyboard.add(button_clear_snow, button_doctor) + if get_value("lightst"): + keyboard.add(button_untoggle) + else: + keyboard.add(button_toggle) + if not(get_value("doorst"+k)): + keyboard.add(button_close) + else: + keyboard.add(button_open) + await message.answer("Выберите действие:", reply_markup=keyboard) + +async def udp_listener(): + with socket.socket(socket.AF_INET, socket.SOCK_DGRAM) as sock: + sock.bind(('0.0.0.0', 9876)) + while True: + data, addr = sock.recvfrom(1024) + message = data.decode('utf-8') + try: + lst = message.split(',') + if lst[1] == 'pozhar': + await bot.send_message(chat_id, f"У вас пожар") + if lst[1] == 'sound': + for user in users[lst[0]]: + await bot.send_message(user, f"У вас слишком громкий звук") + if lst[1] == 'gaz': + await bot.send_message(chat_id, f"У вас утечка газа") + if lst[1] == 'protechka': + await bot.send_message(chat_id, f"У вас протечка") + except: + continue + + + +if __name__ == '__main__': + executor.start_polling(dp, skip_updates=True) + executor.start(udp_listener()) diff --git a/data.json b/data.json index 0967ef4..e559d91 100644 --- a/data.json +++ b/data.json @@ -1 +1 @@ -{} +{"1": {"pozhar1": 1, "pozharolikv1": 1, "soundstatus1": 1, "soundlikv1": 1, "doorst1": 1, "gaz1": 1, "gazolikv1": 1}, "2": {"pozhar2": 1, "pozharolikv2": 1, "soundstatus2": 1, "soundlikv2": 1, "doorst2": 1, "gaz2": 1, "gazolikv2": 1}, "3": {"pozhar3": 1, "pozharolikv3": 1, "soundstatus3": 1, "soundlikv3": 1, "doorst3": 0, "gaz3": 1, "gazolikv3": 1}, "potok": 100, "earthquake": 1, "techka": 1, "tok": 100, "nasostoggle": 1, "lightst": 1} \ No newline at end of file diff --git a/pip b/pip new file mode 100644 index 0000000..e69de29 diff --git a/templates/index.bk b/templates/index.bk new file mode 100644 index 0000000..1853512 --- /dev/null +++ b/templates/index.bk @@ -0,0 +1,136 @@ + + + + + + + Mashinka Control + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + diff --git a/templates/index.html b/templates/index.html index 4a4cb53..9874386 100644 --- a/templates/index.html +++ b/templates/index.html @@ -1,139 +1,134 @@ - - - - - Mashinka Control - - - - - - - - - - - - - -
-
- - - - - - - - + + + + - - - - - + setInterval(homedata, 3000); + +