""" created by caliskan at 19.04.2023 This file contains the main script for the backend server of smart garden project It has the task to be a bridge between the frontend and robot. It also contains a database with the current plant data Used protocol for interaction: mqtt (paho-mqtt module) """ # imports import paho.mqtt.client as mqtt from software.defines import MQTT_BROKER_LOCAL, MQTT_BROKER_GLOBAL, Topics, BACKEND_CLIENT_ID from plantdatabase import PlantDataBase import data_functions # inits mydatabase = PlantDataBase() mydatabase.create_table() def on_connect(client: mqtt.Client, userdata, flags, rc): """ This method gets called, when it connects to a mqtt broker. It is used to subscribe to the specific topics :param client: mqtt client object :param userdata: :param flags: :param rc: connection flag :return: """ if rc == 0: print("connected") # TOPIC SUBSCRIPTIONS # From Robot: client.subscribe(Topics['ROBOT_DATA_SENSORDATA']) client.message_callback_add(Topics['ROBOT_DATA_SENSORDATA'], data_functions.data_sensordata) client.subscribe(Topics['ROBOT_DATA_POSITION']) client.message_callback_add(Topics['ROBOT_DATA_POSITION'], data_functions.data_position) client.subscribe(Topics['ROBOT_DATA_BATTERY']) client.message_callback_add(Topics['ROBOT_DATA_BATTERY'], data_functions.data_sensordata) # client.subscribe('Robot/Data/Picture') # From FrontEnd: client.subscribe(Topics['BACKEND_ACTION_DRIVE']) client.message_callback_add(Topics['BACKEND_ACTION_DRIVE'], data_functions.action_drive) client.subscribe(Topics['BACKEND_ACTION_GETPOSITION']) client.message_callback_add(Topics['BACKEND_ACTION_GETPOSITION'], data_functions.action_getposition) client.subscribe(Topics['BACKEND_ACTION_GETBATTERY']) client.message_callback_add(Topics['BACKEND_ACTION_GETBATTERY'], data_functions.action_getbattery) client.subscribe(Topics['BACKEND_ACTION_GETALLDATA']) client.message_callback_add(Topics['BACKEND_ACTION_GETALLDATA'], data_functions.action_getalldata) # END TOPIC SUBSCRIPTIONS else: print("connection failed") def main(): client = mqtt.Client(BACKEND_CLIENT_ID) client.on_connect = on_connect client.connect(MQTT_BROKER_GLOBAL) client.loop_forever() if __name__ == "__main__": main()