From f29e567f0782b226beb735798884f24077153732 Mon Sep 17 00:00:00 2001 From: waldluis Date: Tue, 18 Apr 2023 16:50:34 +0200 Subject: [PATCH] Robot Docu extended and main to mainProg added --- documentation/Robot.docx | Bin 55953 -> 58629 bytes software/roboter/raspy/mainProg.py | 58 ++++++++++++++++++----------- 2 files changed, 37 insertions(+), 21 deletions(-) diff --git a/documentation/Robot.docx b/documentation/Robot.docx index 14c964c11cae2f37e7e5a4d1ab2b0ca0117f5b56..35d38ad59cd2db17778682d74d7e502f48154da0 100644 GIT binary patch delta 15475 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 D&o2=o diff --git a/software/roboter/raspy/mainProg.py b/software/roboter/raspy/mainProg.py index c835469..fe63ed2 100644 --- a/software/roboter/raspy/mainProg.py +++ b/software/roboter/raspy/mainProg.py @@ -4,6 +4,7 @@ from raspySensors import RaspySensors #region global Varaibles sensors = RaspySensors() +client = mqtt.Client() sensorData = { "Air Temperature [°C]" : 0, @@ -27,15 +28,35 @@ batteryStatus = { #endregion -#region +#region global functions -def measureSendData(plantID, actionID): +def measure_send_data(plantID, actionID): '''Measure data for one plant via sensor class and send via MQTT''' sensorData = sensors.readSensors() sensorData["Plant_ID"] = plantID sensorData["Action_ID"] = actionID client.publish("Robot/Data/SensorData", json.dumps(sensorData, indent=4)) - + + +def init_mqtt(): + '''Initialise MQTT client''' + mqttBroker = "mqtt.eclipseprojects.io" + client = mqtt.Client("Robot") + + #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) + + #Subscribe to topics + client.subscribe("Robot/Data") #Testing + client.subscribe("Robot/Action/Drive") + client.subscribe("Robot/Action/GetPosition") + client.subscribe("Robot/Action/GetBattery") + + client.connect(mqttBroker) + #endregion @@ -56,12 +77,12 @@ def drive_plant(clients, userdata, message): #[ ]TODO Start drive forward -> Thread print(f"Measuring data at Plant {message}") - measureSendData() # With threads not here + measure_send_data() # With Signal not here print("Driving back to start position") #[ ]TODO Start Drive Back Function in Thread - print("Back at starting Position") + print("Back at starting Position") #Signal def get_position(clients, userdata, message): @@ -74,8 +95,8 @@ def get_position(clients, userdata, message): 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''' @@ -91,23 +112,18 @@ def get_BatteryStatus(clients, userdata, message): #endregion -mqttBroker = "mqtt.eclipseprojects.io" -client = mqtt.Client("Robot") -dataDict = {} #Testing +def main(): + init_mqtt() + dataDict = {} #Testing -#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.loop_start() -client.connect(mqttBroker) + while True: + pass -#Subscribe to topics -client.subscribe("Robot/Data") #Testing -client.subscribe("Robot/Action/Drive") -client.subscribe("Robot/Action/GetPosition") -client.subscribe("Robot/Action/GetBattery") -client.loop_forever() \ No newline at end of file + + +if __name__ == "__main__": + main() \ No newline at end of file