From 0c08ab1d8bd7edccfbddfc4f420f50b5d6921800 Mon Sep 17 00:00:00 2001 From: waldluis Date: Mon, 24 Apr 2023 13:04:03 +0200 Subject: [PATCH] MQTT messages defined --- documentation/Definitions.docx | Bin 44160 -> 44158 bytes software/defines.py | 85 +++++++++++++++++++++++++++++ software/roboter/raspy/mainProg.py | 62 ++++++++++++--------- 3 files changed, 120 insertions(+), 27 deletions(-) diff --git a/documentation/Definitions.docx b/documentation/Definitions.docx index e9633d88be8f04ccc0cc3a70e2da9bdea472d672..75a6d78a3ac16fae9fbd66383b2d84c433ec521f 100644 GIT binary patch delta 6491 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 delta 6445 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 O2-d2khR-hfH~4=`qFK8D diff --git a/software/defines.py b/software/defines.py index 5c82d7e..face226 100644 --- a/software/defines.py +++ b/software/defines.py @@ -32,3 +32,88 @@ Topics = { "BACKEND_DATA_PICTURE": "BACKEND/DATA/PICTURE" } + + +# MQTT Messages: + +# region Robot -> Backend +SENSORDATA = { + "AirTemperature": 0.0, + "AirHumidity" : 0.0, + "SoilMoisture" : 0.0, + "Brightness" : 0, + "PlantID": 0, + "ActionID": 0 +} + +# TODO When sensor is available +POSITION = { + "Position": "" +} + +BATTERY = { + "Battery": 0.0 +} + +# endregion + +# region Backend -> Robot + +DRIVE = { + "PlantID": 0, + "ActionID": 0 +} + +# GETPOSITION -> no message needed + +# GETBATTERY -> no message needed + +# endregion + +# region Backend -> Frontend + +PLANTDATA = { + "AirTemperature": 0.0, + "AirHumidity" : 0.0, + "SoilMoisture" : 0.0, + "Brightness" : 0, + "PlantID": 0, + "Timestamp": "", + "MeasurementID": 0 +} + +ALLPLANTDATA = [ + PLANTDATA, + PLANTDATA, + PLANTDATA, + PLANTDATA, + PLANTDATA, + PLANTDATA +] + +# TODO When sensor is available +POSITION = { + "Position": "", + "Timestamp": "" +} + +BATTERY = { + "Battery": 0.0, + "Timestamp": "" +} + +# endregion + +# region Frontend -> Backend + +DRIVE = { + "PlantID": 0 +} + +# GETPOSITION -> no message needed + +# GETBATTERY -> no message needed + +# GETALLDATA -> no message needed + +# endregion \ No newline at end of file diff --git a/software/roboter/raspy/mainProg.py b/software/roboter/raspy/mainProg.py index 29cc48a..d8ed488 100644 --- a/software/roboter/raspy/mainProg.py +++ b/software/roboter/raspy/mainProg.py @@ -5,11 +5,12 @@ import os import signal import time from raspy_sensors import RaspySensors +from software.defines import Topics #region global Varaibles #sensors:RaspySensors() leftRight = 50 -plantNumber = 0 +plantID = 0 sensorData = { "Air Temperature [°C]" : 0, @@ -40,7 +41,7 @@ def measure_send_data(plantID, actionID): sensorData = sensors.readSensors() sensorData["Plant_ID"] = plantID sensorData["Action_ID"] = actionID - client.publish("ROBOT/DATA/SENSORDATA", json.dumps(sensorData, indent=4)) + client.publish(Topics["ROBOT_DATA_SENSORDATA"], json.dumps(sensorData, indent=4)) def drive_home(): @@ -54,9 +55,10 @@ def drive_home(): def drive_plant_thread(): '''Function to drive to plant according to number from MQTT message in thread''' - os.system(f'sshpass -p maker ssh robot@ev3dev.local python3 /home/robot/Programme/plant_{plantNumber}.py') + os.system(f'sshpass -p maker ssh robot@ev3dev.local python3 /home/robot/Programme/plant_{plantID}.py') print("Raising Signal to meassure") signal.raise_signal(signal.SIGUSR1) + #TODO alles hier ohne weitere Threads def init_mqtt(): @@ -67,17 +69,17 @@ def init_mqtt(): #Add callbacks client.message_callback_add("ROBOT/DATA", send_data_json) #Testing - client.message_callback_add("ROBOT/ACTION/DRIVE", drive_plant) - client.message_callback_add("ROBOT/ACTION/GETPOSITION", get_position) - client.message_callback_add("ROBOT/ACTION/GETBATTERY", get_BatteryStatus) + client.message_callback_add(Topics["ROBOT_ACTION_DRIVE"], drive_plant) + client.message_callback_add(Topics["ROBOT_ACTION_GETPOSITION"], get_position) + client.message_callback_add(Topics["ROBOT_ACTION_GETBATTERY"], get_BatteryStatus) client.connect(mqttBroker) #Has to be before subscribing #Subscribe to topics client.subscribe("ROBOT/DATA") #Testing - client.subscribe("ROBOT/ACTION/DRIVE") - client.subscribe("ROBOT/Action/GETPOSITION") - client.subscribe("ROBOT/ACTION/GETBATTERY") + client.subscribe(Topics["ROBOT_ACTION_DRIVE"]) + client.subscribe(Topics["ROBOT_ACTION_GETPOSITION"]) + client.subscribe(Topics["ROBOT_ACTION_GETBATTERY"]) @@ -94,22 +96,22 @@ def signal_measure(signum, frame): #region MQTT callbacks #Testing -def send_data_json(client, userdata, message): +def send_data_json(clients: mqtt.Client, userdata, message: mqtt.MQTTMessage): strIn = str(message.payload.decode("UTF-8")) dataDict = json.loads(strIn) print("Received data: ", json.dumps(dataDict)) -def drive_plant(clients, userdata, message): +def drive_plant(clients: mqtt.Client, userdata, message: mqtt.MQTTMessage): '''Function to drive to plant according to request Starting Drive in Thread''' - global plantNumber, leftRight + global plantID, leftRight #TODO define MQTT message - plantNumber = int(message.payload.decode("UTF-8")) + plantID = int(message.payload.decode("UTF-8")) - print(f"received drive to plant {plantNumber}") + print(f"received drive to plant {plantID}") - if plantNumber % 2 == 0: + if plantID % 2 == 0: leftRight = -50 #rotating left else: leftRight = 50 #rotating right @@ -118,23 +120,26 @@ def drive_plant(clients, userdata, message): thread.start() -def get_position(clients, userdata, message): +def get_position(clients: mqtt.Client, userdata, message: mqtt.MQTTMessage): '''Callback function for GPS position request Function to send actual GPS position via MQTT''' - #[ ]TODO handle MQTT message - gpsPosition["Position"] = sensors.readPosition() - gpsPosition["Action_ID"] = message + #[ ]TODO Write Sensor Function client.publish("ROBOT/DATA/POSITION", json.dumps(gpsPosition, indent=4)) -def get_BatteryStatus(clients, userdata, message): - '''Callback function for battery status request - Function to read battery status from ev3 and send via MQTT''' +def get_BatteryStatus(clients: mqtt.Client, userdata, message: mqtt.MQTTMessage): + """ + Callback function for battery status request + Function to read battery status from ev3 and send via MQTT - #[ ]TODO handle MQTT message - batteryStatus["Battery"] = sensors.readBattery() - batteryStatus["Action_ID"] = message + Args: + clients (mqtt.Client): _description_ + userdata (_type_): _description_ + message (mqtt.MQTTMessage): _description_ + """ + + #[ ]TODO read Battery client.publish("ROBOT/DATA/BATTERY", json.dumps(batteryStatus, indent=4)) @@ -143,9 +148,12 @@ def get_BatteryStatus(clients, userdata, message): def main(): - '''Initialises MQTT and Sensors - Runs forever and controlls all robot functions''' + """ + Initialises MQTT and Sensors + Runs forever and controlls all robot functions + """ + #TODO on_connect init_mqtt() print("MQTT initialized") signal.signal(signal.SIGUSR1, signal_measure)