From 02b4061c9107eeecfb4a7d9995b0d3622910007c Mon Sep 17 00:00:00 2001 From: Bart Koolen Date: Sun, 2 Mar 2025 11:46:30 +0100 Subject: [PATCH] Added Comments heb comments toegevoegt aan de script en ook de docs bijgewerkt. --- docs/Glucosemeter Project Logboek.docx | Bin 35483 -> 35586 bytes src/GlucoseCheck.py | 7 ++-- src/ServerCheck.py | 29 +++++++------- src/TeleBot.py | 53 +++++++++++++------------ 4 files changed, 46 insertions(+), 43 deletions(-) diff --git a/docs/Glucosemeter Project Logboek.docx b/docs/Glucosemeter Project Logboek.docx index 83833a8c13f778663ae2a42b87b8d2eb68d2fa60..49e59151245dadbd0cbe84970935fc1f2f580cef 100644 GIT binary patch delta 17404 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 0: # error processing - print(f"Failed to connect to MQTT broker. Error code: {rc}") + print(f"Failed to connect to MQTT broker. Error code: {reason_code}") def on_message(client, userdata, msg): #This runs everytime a mqtt message is recieved global last_bolus_time global last_bolus_type args = msg.payload.decode() if not args: + #Empty string return - elif args[0] == "c": + elif args[0] == "c": #Sets compesation var last_bolus_type = 0 - elif args[0] == "e": + elif args[0] == "e": #Sets eating var last_bolus_type = 1 last_bolus_time = time.time() print("Bolussen") diff --git a/src/ServerCheck.py b/src/ServerCheck.py index 105020c..01caa22 100644 --- a/src/ServerCheck.py +++ b/src/ServerCheck.py @@ -137,29 +137,30 @@ def on_connect(client, userdata, flags, reason_code, properties): #This runs o Mqtt.subscribe(recieve_topic) if reason_code > 0: # error processing - print(f"Failed to connect to MQTT broker. Error code: {rc}") + print(f"Failed to connect to MQTT broker. Error code: {reason_code}") -def on_message(client, userdata, msg): #This runs everytime a mqtt message is recieved - checkWebServer(webServers) #Update list of websites status - messageStatus = statusCheck(True) #True returns every server and state - user_topic = msg.topic.split("/")[-1] +def on_message(client, userdata, msg): #This runs everytime a mqtt message is recieved + checkWebServer(webServers) #Update list of websites status + messageStatus = statusCheck(True) #True returns every server and state + user_topic = msg.topic.split("/")[-1] #Get the last word from subsription "/tele/out/bart" this get "bart" args = msg.payload.decode() - print(user_topic) - keys = list(User.keys()) + keys = list(User.keys()) #Gives list of all keys in User dict if not args: + #Empty string return elif args[0] == "m": - for i in keys: + for i in keys: #This checks if the name in the user_topic is in the User dict and sends the message to them if User[i].name.lower() == user_topic: print(f"right: {user_topic}: {i}") - if User[i].mute > 0: + if User[i].mute > 0: #Removes mute for user User[keys[0]].mute = 0 User[keys[1]].mute = 0 + #User[i].mute = 0 else: - User[i].mute = mute_time//interval_offline_message #This is defined in the setup variables + User[i].mute = mute_time//interval_offline_message #This mutes for a time elif args[0] == "s": print("s") - Mqtt.publish(send_topic + user_topic , messageStatus) + Mqtt.publish(send_topic + user_topic , messageStatus) #Sends a overview of server to user Mqtt = mqtt.Client(mqtt.CallbackAPIVersion.VERSION2) #Creates a mqqt object Mqtt.on_connect = on_connect #Create callback on connect @@ -175,13 +176,13 @@ def main(): #This is the main loop while True: checkWebServer(webServers) #Update list of websites status messageStatus = statusCheck(False) #False is only on state change - if User[keys[0]].mute == 0 | User[keys[1]].mute == 0: + if User[keys[0]].mute == 0 | User[keys[1]].mute == 0: # If anyone has muted it wont send message Mqtt.publish(send_topic + "broadcast", messageStatus) sleep(30) - if User[keys[0]].mute > 0: + if User[keys[0]].mute > 0: #Counts down mute for User 0 User[keys[0]].mute = User[keys[0]].mute - 1 - if User[keys[1]].mute > 0: + if User[keys[1]].mute > 0: #Counts down mute for User 1 User[keys[1]].mute = User[keys[1]].mute - 1 print(User[keys[0]].mute) print(User[keys[1]].mute) diff --git a/src/TeleBot.py b/src/TeleBot.py index c53b332..99f77e3 100644 --- a/src/TeleBot.py +++ b/src/TeleBot.py @@ -13,12 +13,12 @@ recieve_topic = "telegrambot/out/#" send_topic_server = "telegrambot/in/server/" send_topic_glucose = "telegrambot/in/glucose/" brokercreds = ["hass","Bruk#5"] -x = "AS" +message = " " flag = " " ##### Bot Variabels ##### BotToken = '7690417088:AAGcmBegbLHBDXMBKiE6MEgCp3rnLz5vPCE' -class User: # Custom classes for my dictionaries +class User: # Custom classes for my dictionary def __init__(self, name, lastName, userID, mute): self.name = name self.lastName = lastName @@ -33,14 +33,16 @@ User = { async def subscribe(update: Update, context: ContextTypes.DEFAULT_TYPE): #This command can be run to test setting up a database for users await context.bot.send_message(chat_id=update.effective_chat.id, text=update.message.chat.id) #Mqtt.publish(send_topic,1) -async def gluc_command(update: Update, context: CallbackContext): #This command can be run to test setting up a database for users + +async def gluc_command(update: Update, context: CallbackContext): args = ' '.join(context.args) - current_user = User[str(update.effective_chat.id)].name - Mqtt.publish(send_topic_glucose + current_user.lower(), args) + current_user = User[str(update.effective_chat.id)].name #Checks wich user sends the message + Mqtt.publish(send_topic_glucose + current_user.lower(), args) #Sends message with current_user added to the end of topic + async def server_command(update: Update, context: CallbackContext): args = ' '.join(context.args) - current_user = User[str(update.effective_chat.id)].name - Mqtt.publish(send_topic_server + current_user.lower(), args) + current_user = User[str(update.effective_chat.id)].name #Checks wich user sends the message + Mqtt.publish(send_topic_server + current_user.lower(), args) #Sends message with current_user added to the end of topic def on_connect(client, userdata, flags, reason_code, properties): print(f"Connected with result code {reason_code}") @@ -50,39 +52,38 @@ def on_connect(client, userdata, flags, reason_code, properties): Mqtt.subscribe(recieve_topic) if reason_code > 0: # error processing - print(f"Failed to connect to MQTT broker. Error code: {rc}") + print(f"Failed to connect to MQTT broker. Error code: {reason_code}") def on_message(client, userdata, msg): #This runs everytime a mqtt message is recieved - global x + global message global flag - print(msg.topic) - x = msg.payload.decode() - flag = msg.topic.split("/")[-1] + message = msg.payload.decode() #Decode message into string + flag = msg.topic.split("/")[-1] #Get the last word from subsription "/tele/out/bart" this get "bart" async def Cat(context: ContextTypes.DEFAULT_TYPE): #This runs evert second to check for if a mqtt message is recieved - global x + global message global flag - keys = list(User.keys()) + keys = list(User.keys()) #Gives list of all keys in User dict print(flag) - if flag == "broadcast": - await context.bot.send_message(chat_id=keys[0], text=x) - await context.bot.send_message(chat_id=keys[1], text=x) + if flag == "broadcast": #If true it sends the message to everyone + await context.bot.send_message(chat_id=keys[0], text=message) + await context.bot.send_message(chat_id=keys[1], text=message) flag = " " else: - for i in keys: + for i in keys: #This checks if the name in the flag is in the User dict and sends the message to them if User[i].name.lower() == flag: - #await context.bot.send_message(chat_id=keys[0], text=x) - await context.bot.send_message(chat_id=i, text=x) + #await context.bot.send_message(chat_id=keys[0], text=message) + await context.bot.send_message(chat_id=i, text=message) flag = " " flag = " " -Mqtt = mqtt.Client(mqtt.CallbackAPIVersion.VERSION2) -Mqtt.on_connect = on_connect -Mqtt.on_message = on_message +Mqtt = mqtt.Client(mqtt.CallbackAPIVersion.VERSION2) #Create Mqtt object +Mqtt.on_connect = on_connect #Create callback on connect +Mqtt.on_message = on_message #Create callback on message -Mqtt.username_pw_set(brokercreds[0], password=brokercreds[1]) -Mqtt.connect(broker_address, broker_port, 60) -Mqtt.loop_start() +Mqtt.username_pw_set(brokercreds[0], password=brokercreds[1]) #Set User and Password +Mqtt.connect(broker_address, broker_port, 60) #Set Connection settings +Mqtt.loop_start() #Start Mqtt def main():#This is the main loop application = ApplicationBuilder().token(BotToken).build()