Browse Source

Docu small changes and MQTT topics added to robot

master
waldluis 1 year ago
parent
commit
6e66611e06

BIN
documentation/Definitions.docx View File


+ 240
- 3
documentation/Kommunikation.mdj View File

@@ -3504,7 +3504,8 @@
"_parent": {
"$ref": "AAAAAAGHMigXUpG7rpw="
},
"name": "Role1"
"name": "Role1",
"type": ""
},
{
"_type": "UMLAttribute",
@@ -3512,7 +3513,8 @@
"_parent": {
"$ref": "AAAAAAGHMigXUpG7rpw="
},
"name": "Role2"
"name": "Role2",
"type": ""
},
{
"_type": "UMLAttribute",
@@ -3520,7 +3522,242 @@
"_parent": {
"$ref": "AAAAAAGHMigXUpG7rpw="
},
"name": "Role3"
"name": "Role3",
"type": ""
}
]
},
{
"_type": "UMLModel",
"_id": "AAAAAAGHSvOnT6lLzLI=",
"_parent": {
"$ref": "AAAAAAFF+h6SjaM2Hec="
},
"name": "Model1",
"ownedElements": [
{
"_type": "UMLClassDiagram",
"_id": "AAAAAAGHSvOnUKlMd1M=",
"_parent": {
"$ref": "AAAAAAGHSvOnT6lLzLI="
},
"name": "ClassDiagram1",
"ownedViews": [
{
"_type": "UMLClassView",
"_id": "AAAAAAGHSvO0JalSVe0=",
"_parent": {
"$ref": "AAAAAAGHSvOnUKlMd1M="
},
"model": {
"$ref": "AAAAAAGHSvO0JalQDB0="
},
"subViews": [
{
"_type": "UMLNameCompartmentView",
"_id": "AAAAAAGHSvO0JalTHAU=",
"_parent": {
"$ref": "AAAAAAGHSvO0JalSVe0="
},
"model": {
"$ref": "AAAAAAGHSvO0JalQDB0="
},
"subViews": [
{
"_type": "LabelView",
"_id": "AAAAAAGHSvO0JalU/Lk=",
"_parent": {
"$ref": "AAAAAAGHSvO0JalTHAU="
},
"visible": false,
"font": "Arial;13;0",
"height": 13
},
{
"_type": "LabelView",
"_id": "AAAAAAGHSvO0JalVXXc=",
"_parent": {
"$ref": "AAAAAAGHSvO0JalTHAU="
},
"font": "Arial;13;1",
"left": 637,
"top": 119,
"width": 190,
"height": 13,
"text": "RaspySensors"
},
{
"_type": "LabelView",
"_id": "AAAAAAGHSvO0JalW0mo=",
"_parent": {
"$ref": "AAAAAAGHSvO0JalTHAU="
},
"visible": false,
"font": "Arial;13;0",
"width": 80.9072265625,
"height": 13,
"text": "(from Model1)"
},
{
"_type": "LabelView",
"_id": "AAAAAAGHSvO0JalXjv8=",
"_parent": {
"$ref": "AAAAAAGHSvO0JalTHAU="
},
"visible": false,
"font": "Arial;13;0",
"height": 13,
"horizontalAlignment": 1
}
],
"font": "Arial;13;0",
"left": 632,
"top": 112,
"width": 200,
"height": 25,
"stereotypeLabel": {
"$ref": "AAAAAAGHSvO0JalU/Lk="
},
"nameLabel": {
"$ref": "AAAAAAGHSvO0JalVXXc="
},
"namespaceLabel": {
"$ref": "AAAAAAGHSvO0JalW0mo="
},
"propertyLabel": {
"$ref": "AAAAAAGHSvO0JalXjv8="
}
},
{
"_type": "UMLAttributeCompartmentView",
"_id": "AAAAAAGHSvO0JqlYsbg=",
"_parent": {
"$ref": "AAAAAAGHSvO0JalSVe0="
},
"model": {
"$ref": "AAAAAAGHSvO0JalQDB0="
},
"font": "Arial;13;0",
"left": 632,
"top": 137,
"width": 200,
"height": 10
},
{
"_type": "UMLOperationCompartmentView",
"_id": "AAAAAAGHSvO0JqlZXW4=",
"_parent": {
"$ref": "AAAAAAGHSvO0JalSVe0="
},
"model": {
"$ref": "AAAAAAGHSvO0JalQDB0="
},
"subViews": [
{
"_type": "UMLOperationView",
"_id": "AAAAAAGHSvPxiKl9u9A=",
"_parent": {
"$ref": "AAAAAAGHSvO0JqlZXW4="
},
"model": {
"$ref": "AAAAAAGHSvPxg6l6DOE="
},
"font": "Arial;13;0",
"left": 637,
"top": 152,
"width": 190,
"height": 13,
"text": "+measureAll(): Dictionary",
"horizontalAlignment": 0
}
],
"font": "Arial;13;0",
"left": 632,
"top": 147,
"width": 200,
"height": 23
},
{
"_type": "UMLReceptionCompartmentView",
"_id": "AAAAAAGHSvO0JqlauSU=",
"_parent": {
"$ref": "AAAAAAGHSvO0JalSVe0="
},
"model": {
"$ref": "AAAAAAGHSvO0JalQDB0="
},
"visible": false,
"font": "Arial;13;0",
"width": 10,
"height": 10
},
{
"_type": "UMLTemplateParameterCompartmentView",
"_id": "AAAAAAGHSvO0Jqlbl7Q=",
"_parent": {
"$ref": "AAAAAAGHSvO0JalSVe0="
},
"model": {
"$ref": "AAAAAAGHSvO0JalQDB0="
},
"visible": false,
"font": "Arial;13;0",
"width": 10,
"height": 10
}
],
"font": "Arial;13;0",
"containerChangeable": true,
"left": 632,
"top": 112,
"width": 200,
"height": 280,
"nameCompartment": {
"$ref": "AAAAAAGHSvO0JalTHAU="
},
"attributeCompartment": {
"$ref": "AAAAAAGHSvO0JqlYsbg="
},
"operationCompartment": {
"$ref": "AAAAAAGHSvO0JqlZXW4="
},
"receptionCompartment": {
"$ref": "AAAAAAGHSvO0JqlauSU="
},
"templateParameterCompartment": {
"$ref": "AAAAAAGHSvO0Jqlbl7Q="
}
}
]
},
{
"_type": "UMLClass",
"_id": "AAAAAAGHSvO0JalQDB0=",
"_parent": {
"$ref": "AAAAAAGHSvOnT6lLzLI="
},
"name": "RaspySensors",
"operations": [
{
"_type": "UMLOperation",
"_id": "AAAAAAGHSvPxg6l6DOE=",
"_parent": {
"$ref": "AAAAAAGHSvO0JalQDB0="
},
"name": "measureAll",
"parameters": [
{
"_type": "UMLParameter",
"_id": "AAAAAAGHSvSoBamCDuA=",
"_parent": {
"$ref": "AAAAAAGHSvPxg6l6DOE="
},
"type": "Dictionary",
"direction": "return"
}
]
}
]
}
]
}

+ 77
- 15
software/roboter/raspy/mainProg.py View File

@@ -5,31 +5,86 @@ from raspySensors import RaspySensors
#region global Varaibles
sensors = RaspySensors()

sensorData = {
"Air Temperature [°C]" : 0,
"Air Humidity [%]" : 0,
"Earth Humidity [%]" : 0,
"Brightness [Lux]" : 0,
"Plant ID": 0,
"Action ID": 0
}

gpsPosition = {
"Position": 0,
"Action ID": 0
}

batteryStatus = {
"Battery": 0,
"Action ID": 0
}


#endregion

#region

def measureSendData():
'''Measure Data via sensor class and send via MQTT'''
def measureSendData(plantID, actionID):
'''Measure data for one plant via sensor class and send via MQTT'''
sensorData = sensors.readSensors()
client.publish("Robot/Data", json.dumps(sensorData, indent=4))
sensorData["Plant_ID"] = plantID
sensorData["Action_ID"] = actionID
client.publish("Robot/Data/SensorData", json.dumps(sensorData, indent=4))

#endregion

#region MQTT callbacks

#Testing
def send_data_json(client, userdata, message):
strIn = str(message.payload.decode("UTF-8"))
dataDict = json.loads(strIn)
print("Received data: ", json.dumps(dataDict))

#Function for all Plants or one which changes according to request
def drive_plant_1(clients, userdata, message):
#TODO Start drive forward
print("Driving to plant 1")
measureSendData()
#TODO Start Drive Back Function

def drive_plant(clients, userdata, message):
'''Function to drive to plant according to request'''
#[ ]TODO handle MQTT message
print(f"Driving to plant {message}")
#[ ]TODO Start drive forward -> Thread

print(f"Measuring data at Plant {message}")
measureSendData() # With threads not here

print("Driving back to start position")
#[ ]TODO Start Drive Back Function in Thread

print("Back at starting Position")

def get_position(clients, userdata, message):
'''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
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'''

#[ ]TODO handle MQTT message
batteryStatus["Battery"] = sensors.readBattery()
batteryStatus["Action ID"] = message
client.publish("Robot/Data/Battery", json.dumps(batteryStatus, indent=4))

batteryStatus()


@@ -37,15 +92,22 @@ def drive_plant_1(clients, userdata, message):


mqttBroker = "mqtt.eclipseprojects.io"
client = mqtt.Client("Smartphone_temp")
client = mqtt.Client("Robot")

dataDict = {}
dataDict = {} #Testing

client.message_callback_add("Robot/Data", send_data_json)
client.message_callback_add("Robot/Plant/1", drive_plant_1)
#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.connect(mqttBroker)
client.subscribe("Robot/Data")
client.subscribe("Robot/Plant/1")

#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()

+ 13
- 2
software/roboter/raspy/raspySensors.py View File

@@ -6,9 +6,10 @@ import json

class RaspySensors:
'''Class to handle all sensors'''

def __init__(self) -> None:
'''Init all Sensors'''
#Message if Error
#[ ]TODO Message if Error

#Air Temperature & Humidity
@@ -22,7 +23,9 @@ class RaspySensors:
"Air Temperature [°C]" : 0,
"Air Humidity [%]" : 0,
"Earth Humidity [%]" : 0,
"Brightness [Lux]" : 0
"Brightness [Lux]" : 0,
"Plant ID": 0,
"Action ID": 0
}

def readSensors(self):
@@ -44,13 +47,21 @@ class RaspySensors:

return self.sensorData
#[ ]TODO - take picture function
def takePicture(self):
'''Take picture and return image'''
return self.image
#[ ]TODO
def readPosition(self):
'''Read and return Position'''
return self.position
#[ ]TODO
def readBattery(self):
'''Read and return battery of ev3'''
return self.battery


#for Testing only

Loading…
Cancel
Save