2023-04-19 02:47:49 +02:00
|
|
|
"""
|
|
|
|
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
|
2023-04-19 02:47:49 +02:00
|
|
|
from plantdatabase import PlantDataBase
|
2023-04-24 11:21:01 +02:00
|
|
|
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-19 02:47:49 +02:00
|
|
|
|
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:
|
2023-04-19 02:47:49 +02:00
|
|
|
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-24 11:21:01 +02:00
|
|
|
|
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-24 11:21:01 +02:00
|
|
|
|
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-24 11:21:01 +02:00
|
|
|
|
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-24 11:21:01 +02:00
|
|
|
|
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-24 11:21:01 +02:00
|
|
|
|
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-24 11:21:01 +02:00
|
|
|
|
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)
|
2023-04-24 11:21:01 +02:00
|
|
|
|
2023-04-19 02:47:49 +02:00
|
|
|
# END TOPIC SUBSCRIPTIONS
|
|
|
|
else:
|
|
|
|
print("connection failed")
|
|
|
|
|
|
|
|
|
|
|
|
def main():
|
2023-04-27 08:53:21 +02:00
|
|
|
client = mqtt.Client(BACKEND_CLIENT_ID)
|
2023-04-19 02:47:49 +02:00
|
|
|
client.on_connect = on_connect
|
|
|
|
client.connect(MQTT_BROKER_GLOBAL)
|
|
|
|
client.loop_forever()
|
|
|
|
|
|
|
|
|
|
|
|
if __name__ == "__main__":
|
|
|
|
main()
|