defines changed to software dir and topics added & callback messages added in backend
This commit is contained in:
parent
d54bfdd101
commit
f3fab66cb5
BIN
documentation/~$finitions.docx
Normal file
BIN
documentation/~$finitions.docx
Normal file
Binary file not shown.
46
software/backend/data_functions.py
Normal file
46
software/backend/data_functions.py
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
"""
|
||||||
|
created by caliskan at 19.04.2023
|
||||||
|
|
||||||
|
This file contains all functions, which handle the different cases.
|
||||||
|
Every function should return json format with the wanted data from the database
|
||||||
|
"""
|
||||||
|
import paho.mqtt.client as mqtt
|
||||||
|
from plantdatabase import PlantDataBase
|
||||||
|
from software.defines import Topics
|
||||||
|
|
||||||
|
|
||||||
|
# Robot Channel Reactions
|
||||||
|
|
||||||
|
def data_sensordata(client: mqtt.Client, userdata, message: mqtt.MQTTMessage):
|
||||||
|
print("message received")
|
||||||
|
# TODO: Store data in database
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
def data_position(client: mqtt.Client, userdata, message: mqtt.MQTTMessage):
|
||||||
|
# TODO: Publish as json
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
def data_battery(client: mqtt.Client, userdata, message: mqtt.MQTTMessage):
|
||||||
|
# TODO: Publish as json
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
# FrontEnd Channel Reactions
|
||||||
|
|
||||||
|
def action_drive(client: mqtt.Client, userdata, message: mqtt.MQTTMessage):
|
||||||
|
client.publish('Robot/Action/Drive', message.payload).decode("utf-8")
|
||||||
|
|
||||||
|
|
||||||
|
def action_getposition(client: mqtt.Client, userdata, message: mqtt.MQTTMessage):
|
||||||
|
client.publish('Robot/Action/GetPosition')
|
||||||
|
|
||||||
|
|
||||||
|
def action_getbattery(client: mqtt.Client, userdata, message: mqtt.MQTTMessage):
|
||||||
|
client.publish(Topics.drive)
|
||||||
|
|
||||||
|
|
||||||
|
def action_getalldata(client: mqtt.Client, userdata, message: mqtt.MQTTMessage):
|
||||||
|
# TODO: get data from database
|
||||||
|
pass
|
@ -1,70 +0,0 @@
|
|||||||
"""
|
|
||||||
created by caliskan at 19.04.2023
|
|
||||||
|
|
||||||
This file contains all functions, which handle the different cases.
|
|
||||||
Every function should return json format with the wanted data from the database
|
|
||||||
"""
|
|
||||||
import paho.mqtt.client as mqtt
|
|
||||||
from plantdatabase import PlantDataBase
|
|
||||||
|
|
||||||
|
|
||||||
def data_handler(client: mqtt.Client, message: mqtt.MQTTMessage, mydatabase: PlantDataBase) -> None:
|
|
||||||
"""
|
|
||||||
main entrypoint for a message handling method
|
|
||||||
:param mydatabase: database with plant data
|
|
||||||
:param client: mqtt client
|
|
||||||
:param message: received message
|
|
||||||
:return: None
|
|
||||||
"""
|
|
||||||
if message.topic.startswith('Robot'):
|
|
||||||
if message.topic == 'Robot/Action/SensorData':
|
|
||||||
data_sensordata(client, message)
|
|
||||||
elif message.topic == 'Robot/Action/Position':
|
|
||||||
data_position(client, message)
|
|
||||||
elif message.topic == 'Robot/Action/Battery':
|
|
||||||
data_battery(client, message)
|
|
||||||
elif message.topic.startswith('BackEnd'):
|
|
||||||
if message.topic == 'BackEnd/Action/Drive':
|
|
||||||
action_drive(client, message)
|
|
||||||
elif message.topic == 'BackEnd/Action/GetPosition':
|
|
||||||
action_getposition(client)
|
|
||||||
elif message.topic == 'BackEnd/Action/GetBattery':
|
|
||||||
action_getbattery(client)
|
|
||||||
elif message.topic == 'BackEnd/Action/GetAllData':
|
|
||||||
action_getalldata(client)
|
|
||||||
|
|
||||||
|
|
||||||
# Robot Channel Reactions
|
|
||||||
|
|
||||||
def data_sensordata(client: mqtt.Client, message: mqtt.MQTTMessage):
|
|
||||||
# TODO: Store data in database
|
|
||||||
pass
|
|
||||||
|
|
||||||
|
|
||||||
def data_position(client: mqtt.Client, message: mqtt.MQTTMessage):
|
|
||||||
# TODO: Publish as json
|
|
||||||
pass
|
|
||||||
|
|
||||||
|
|
||||||
def data_battery(client: mqtt.Client, message: mqtt.MQTTMessage):
|
|
||||||
# TODO: Publish as json
|
|
||||||
pass
|
|
||||||
|
|
||||||
|
|
||||||
# FrontEnd Channel Reactions
|
|
||||||
|
|
||||||
def action_drive(client: mqtt.Client, message: mqtt.MQTTMessage):
|
|
||||||
client.publish('Robot/Action/Drive', message.payload).decode("utf-8")
|
|
||||||
|
|
||||||
|
|
||||||
def action_getposition(client: mqtt.Client):
|
|
||||||
client.publish('Robot/Action/GetPosition')
|
|
||||||
|
|
||||||
|
|
||||||
def action_getbattery(client: mqtt.Client):
|
|
||||||
client.publish('Robot/Action/GetBattery')
|
|
||||||
|
|
||||||
|
|
||||||
def action_getalldata(client: mqtt.Client):
|
|
||||||
# TODO: get data from database
|
|
||||||
pass
|
|
@ -1,10 +0,0 @@
|
|||||||
"""
|
|
||||||
created by caliskan at 19.04.2023
|
|
||||||
|
|
||||||
contains all constants for the backend architecture of the smart garden project
|
|
||||||
"""
|
|
||||||
|
|
||||||
MQTT_BROKER_LOCAL = "lorem ipsum"
|
|
||||||
MQTT_BROKER_GLOBAL = "mqtt.eclipseprojects.io"
|
|
||||||
RASPI_CLIENT_ID = "lorem ipsum"
|
|
||||||
BACKEND_CLIENT_ID = "lorem ipsum"
|
|
@ -9,8 +9,7 @@ client = mqtt.Client("Temperature_Inside")
|
|||||||
client.connect(mqttBroker)
|
client.connect(mqttBroker)
|
||||||
|
|
||||||
while True:
|
while True:
|
||||||
randNumber = uniform(20.0, 21.0)
|
client.publish("ROBOT/ACTION/DRIVE")
|
||||||
client.publish("Robot/Data/Battery")
|
print("Just published to topic TEMPERATURE")
|
||||||
print("Just published " + str(randNumber) + " to topic TEMPERATURE")
|
|
||||||
time.sleep(0.5)
|
time.sleep(0.5)
|
||||||
|
|
||||||
|
@ -9,29 +9,15 @@ Used protocol for interaction: mqtt (paho-mqtt module)
|
|||||||
|
|
||||||
# imports
|
# imports
|
||||||
import paho.mqtt.client as mqtt
|
import paho.mqtt.client as mqtt
|
||||||
from defines import MQTT_BROKER_LOCAL, MQTT_BROKER_GLOBAL
|
from software.defines import MQTT_BROKER_LOCAL, MQTT_BROKER_GLOBAL, Topics
|
||||||
from plantdatabase import PlantDataBase
|
from plantdatabase import PlantDataBase
|
||||||
from data_handling_functions import data_handler
|
import data_functions
|
||||||
|
|
||||||
# inits
|
# inits
|
||||||
mydatabase = PlantDataBase()
|
mydatabase = PlantDataBase()
|
||||||
mydatabase.create_table()
|
mydatabase.create_table()
|
||||||
|
|
||||||
|
|
||||||
def on_message(client: mqtt.Client, userdata, message):
|
|
||||||
"""
|
|
||||||
This method gets called, if a subscribed channel gets a new message.
|
|
||||||
Message gets forwarded to the data handler
|
|
||||||
:param client: mqtt client object
|
|
||||||
:param userdata:
|
|
||||||
:param message: received message object
|
|
||||||
:return: None
|
|
||||||
"""
|
|
||||||
print(type(message))
|
|
||||||
print(f'message received! {message.topic}')
|
|
||||||
data_handler(client, message, mydatabase)
|
|
||||||
|
|
||||||
|
|
||||||
def on_connect(client: mqtt.Client, userdata, flags, rc):
|
def on_connect(client: mqtt.Client, userdata, flags, rc):
|
||||||
"""
|
"""
|
||||||
This method gets called, when it connects to a mqtt broker.
|
This method gets called, when it connects to a mqtt broker.
|
||||||
@ -48,16 +34,30 @@ def on_connect(client: mqtt.Client, userdata, flags, rc):
|
|||||||
# TOPIC SUBSCRIPTIONS
|
# TOPIC SUBSCRIPTIONS
|
||||||
|
|
||||||
# From Robot:
|
# From Robot:
|
||||||
client.subscribe('Robot/Data/SensorData')
|
client.subscribe(Topics['robot_data_sensordata'])
|
||||||
client.subscribe('Robot/Data/Position')
|
client.message_callback_add(Topics['robot_data_sensordata'], data_functions.data_sensordata)
|
||||||
client.subscribe('Robot/Data/Battery')
|
|
||||||
|
client.subscribe(Topics['robot_data_position'])
|
||||||
|
client.message_callback_add(Topics['robot_data_position'], data_functions.data_position)
|
||||||
|
|
||||||
|
client.subscribe(Topics['robot_data_battery'])
|
||||||
|
client.message_callback_add(Topics['robot_data_battery'], data_functions.data_sensordata)
|
||||||
|
|
||||||
# client.subscribe('Robot/Data/Picture')
|
# client.subscribe('Robot/Data/Picture')
|
||||||
|
|
||||||
# From FrontEnd:
|
# From FrontEnd:
|
||||||
client.subscribe('BackEnd/Action/Drive')
|
client.subscribe(Topics['backend_action_drive'])
|
||||||
client.subscribe('BackEnd/Action/GetPosition')
|
client.message_callback_add(Topics['backend_action_drive'], data_functions.action_drive)
|
||||||
client.subscribe('BackEnd/Action/GetBattery')
|
|
||||||
client.subscribe('BackEnd/Action/GetAllData')
|
client.subscribe(Topics['backend_action_getposition'])
|
||||||
|
client.message_callback_add(Topics['backend_action_getposition'], data_functions.action_getposition)
|
||||||
|
|
||||||
|
client.subscribe(Topics['backend_action_getbattery'])
|
||||||
|
client.message_callback_add(Topics['backend_action_getbattery'], data_functions.action_getbattery)
|
||||||
|
|
||||||
|
client.subscribe(Topics['backend_action_getalldata'])
|
||||||
|
client.message_callback_add(Topics['backend_action_getalldata'], data_functions.action_getalldata)
|
||||||
|
|
||||||
# END TOPIC SUBSCRIPTIONS
|
# END TOPIC SUBSCRIPTIONS
|
||||||
else:
|
else:
|
||||||
print("connection failed")
|
print("connection failed")
|
||||||
@ -66,7 +66,6 @@ def on_connect(client: mqtt.Client, userdata, flags, rc):
|
|||||||
def main():
|
def main():
|
||||||
client = mqtt.Client()
|
client = mqtt.Client()
|
||||||
client.on_connect = on_connect
|
client.on_connect = on_connect
|
||||||
client.on_message = on_message
|
|
||||||
client.connect(MQTT_BROKER_GLOBAL)
|
client.connect(MQTT_BROKER_GLOBAL)
|
||||||
client.loop_forever()
|
client.loop_forever()
|
||||||
|
|
||||||
|
34
software/defines.py
Normal file
34
software/defines.py
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
"""
|
||||||
|
created by caliskan at 19.04.2023
|
||||||
|
|
||||||
|
contains all constants for the backend architecture of the smart garden project
|
||||||
|
"""
|
||||||
|
|
||||||
|
MQTT_BROKER_LOCAL = "lorem ipsum"
|
||||||
|
MQTT_BROKER_GLOBAL = "mqtt.eclipseprojects.io"
|
||||||
|
RASPI_CLIENT_ID = "lorem ipsum"
|
||||||
|
BACKEND_CLIENT_ID = "lorem ipsum"
|
||||||
|
|
||||||
|
# Topics:
|
||||||
|
Topics = {
|
||||||
|
"robot_action_drive": "ROBOT/ACTION/DRIVE",
|
||||||
|
"robot_action_getposition": "ROBOT/ACTION/GETPOSITION",
|
||||||
|
"robot_action_getbattery": "ROBOT/ACTION/GETBATTERY",
|
||||||
|
|
||||||
|
"robot_data_sensordata": "ROBOT/DATA/SENSORDATA",
|
||||||
|
"robot_data_battery": "ROBOT/DATA/BATTERY",
|
||||||
|
"robot_data_position": "ROBOT/DATA/POSITION",
|
||||||
|
"robot_data_picture": "ROBOT/DATA/PICTURE",
|
||||||
|
|
||||||
|
"backend_action_drive": "BACKEND/ACTION/DRIVE",
|
||||||
|
"backend_action_getposition": "BACKEND/ACTION/GETPOSITION",
|
||||||
|
"backend_action_getbattery": "BACKEND/ACTION/GETBATTERY",
|
||||||
|
"backend_action_getalldata": "BACKEND/ACTION/GETALLDATA",
|
||||||
|
|
||||||
|
"backend_data_sensordata": "BACKEND/DATA/SENSORDATA",
|
||||||
|
"backend_data_sensordataall": "BACKEND/DATA/SENSORDATA_ALL",
|
||||||
|
"backend_data_position": "BACKEND/DATA/POSITION",
|
||||||
|
"backend_data_battery": "BACKEND/DATA/BATTERY",
|
||||||
|
"backend_data_picture": "BACKEND/DATA/PICTURE"
|
||||||
|
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user