113 lines
2.8 KiB
Python

import paho.mqtt.client as mqtt
import json
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(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))
#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))
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()
#endregion
mqttBroker = "mqtt.eclipseprojects.io"
client = mqtt.Client("Robot")
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.connect(mqttBroker)
#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()