79 lines
2.8 KiB
Python
Raw Normal View History

"""
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
2023-04-27 08:53:21 +02:00
from software.defines import MQTT_BROKER_LOCAL, MQTT_BROKER_GLOBAL, Topics, BACKEND_CLIENT_ID
from plantdatabase import PlantDataBase
import data_functions
2023-04-19 03:40:51 +02:00
2023-04-20 03:21:08 +02:00
# inits
mydatabase = PlantDataBase()
mydatabase.create_table()
2023-04-27 19:00:09 +02:00
order_handler = [] # will contain UUIDS with Order IDs
2023-04-20 03:21:08 +02:00
2023-04-27 19:00:09 +02:00
def on_connect(_client: mqtt.Client, _userdata, _flags, _rc):
2023-04-20 03:21:08 +02:00
"""
This method gets called, when it connects to a mqtt broker.
It is used to subscribe to the specific topics
2023-04-27 19:00:09 +02:00
:param _client: mqtt client object
:param _userdata:
:param _flags:
:param _rc: connection flag
2023-04-20 03:21:08 +02:00
:return:
"""
2023-04-27 19:00:09 +02:00
if _rc == 0:
print("connected")
# TOPIC SUBSCRIPTIONS
2023-04-20 03:21:08 +02:00
# From Robot:
2023-04-27 19:00:09 +02:00
_client.subscribe(Topics['ROBOT_DATA_SENSORDATA'])
_client.message_callback_add(Topics['ROBOT_DATA_SENSORDATA'], lambda client, userdata, message: data_functions.
data_sensordata(client, userdata, message, mydatabase, order_handler))
2023-04-27 19:00:09 +02:00
_client.subscribe(Topics['ROBOT_DATA_POSITION'])
_client.message_callback_add(Topics['ROBOT_DATA_POSITION'], data_functions.data_position)
2023-04-27 19:00:09 +02:00
_client.subscribe(Topics['ROBOT_DATA_BATTERY'])
_client.message_callback_add(Topics['ROBOT_DATA_BATTERY'], lambda client, userdata, message: data_functions.
data_battery(client, userdata, message, mydatabase))
2023-04-20 03:21:08 +02:00
# client.subscribe('Robot/Data/Picture')
# From FrontEnd:
2023-04-27 19:00:09 +02:00
_client.subscribe(Topics['BACKEND_ACTION_DRIVE'])
_client.message_callback_add(Topics['BACKEND_ACTION_DRIVE'], lambda client, userdata, message: data_functions.
action_drive(client, userdata, message, mydatabase, order_handler))
2023-04-27 19:00:09 +02:00
_client.subscribe(Topics['BACKEND_ACTION_GETPOSITION'])
_client.message_callback_add(Topics['BACKEND_ACTION_GETPOSITION'], data_functions.action_getposition)
2023-04-27 19:00:09 +02:00
_client.subscribe(Topics['BACKEND_ACTION_GETBATTERY'])
_client.message_callback_add(Topics['BACKEND_ACTION_GETBATTERY'], data_functions.action_getbattery)
2023-04-27 19:00:09 +02:00
_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():
2023-04-27 08:53:21 +02:00
client = mqtt.Client(BACKEND_CLIENT_ID)
client.on_connect = on_connect
client.connect(MQTT_BROKER_GLOBAL)
client.loop_forever()
if __name__ == "__main__":
main()