[add] fixed backend data

This commit is contained in:
caliskan 2023-08-14 20:52:07 +02:00
parent 2c065573a5
commit 90235a73f1
6 changed files with 65 additions and 13 deletions

2
.idea/webServers.xml generated
View File

@ -3,7 +3,7 @@
<component name="WebServers"> <component name="WebServers">
<option name="servers"> <option name="servers">
<webServer id="1b3e9e3f-7394-4cbc-a32d-b95ef2abda52" name="backend"> <webServer id="1b3e9e3f-7394-4cbc-a32d-b95ef2abda52" name="backend">
<fileTransfer accessType="SFTP" host="192.168.137.197" port="22" sshConfigId="8ca8aafc-5b14-4074-b370-599a5b56368a" sshConfig="lego@192.168.137.197:22 password"> <fileTransfer accessType="SFTP" host="lego-K53SV" port="22" sshConfigId="40359a92-2c87-41df-943b-cfac73c7ea3d" sshConfig="lego@lego-K53SV:22 password">
<advancedOptions> <advancedOptions>
<advancedOptions dataProtectionLevel="Private" keepAliveTimeout="0" passiveMode="true" shareSSLContext="true" /> <advancedOptions dataProtectionLevel="Private" keepAliveTimeout="0" passiveMode="true" shareSSLContext="true" />
</advancedOptions> </advancedOptions>

View File

@ -23,11 +23,13 @@ def data_sensordata(client: mqtt.Client, userdata, message: mqtt.MQTTMessage, my
payload = json.loads(str_in) payload = json.loads(str_in)
logging.info("ROBOT_DATA_SENSORDATA Received data: " + json.dumps(payload)) logging.info("ROBOT_DATA_SENSORDATA Received data: " + json.dumps(payload))
drive_data = { drive_data = {
"PlantID": payload['PlantID'], "PlantID": [payload['PlantID']],
"ActionID": payload['ActionID'] "ActionID": payload['ActionID']
} }
try: try:
print(drive_data)
print(robot.order_handler)
robot.delete_order(drive_data) robot.delete_order(drive_data)
mydatabase.insert_measurement_data(plant_id=payload['PlantID'], mydatabase.insert_measurement_data(plant_id=payload['PlantID'],
sensordata_temp=payload['AirTemperature'], sensordata_temp=payload['AirTemperature'],
@ -35,9 +37,42 @@ def data_sensordata(client: mqtt.Client, userdata, message: mqtt.MQTTMessage, my
sensordata_soil_moisture=payload['SoilMoisture'], sensordata_soil_moisture=payload['SoilMoisture'],
sensordata_brightness=payload['Brightness']) sensordata_brightness=payload['Brightness'])
logging.debug("Inserted to data base: " + json.dumps(payload)) logging.debug("Inserted to data base: " + json.dumps(payload))
action_getalldata(client, userdata, message, mydatabase)
except Exception as e: except Exception as e:
logging.error("Could not delete order: " + str(e)) logging.error("Could not delete order: " + str(e))
def data_sensordataall(client: mqtt.Client, userdata, message: mqtt.MQTTMessage, mydatabase: PlantDataBase,
robot: Robot):
str_in = str(message.payload.decode("UTF-8"))
payload = json.loads(str_in)
logging.info("ROBOT_DATA_SENSORDATAALL Received data: " + json.dumps(payload))
plant_ids = []
for i in payload['SensorData']:
plant_ids.append(i["PlantID"])
print("Plant Names:", str(plant_ids))
drive_data = {
"PlantID": plant_ids,
"ActionID": payload['ActionID']
}
try:
print(robot.order_handler)
print(drive_data)
robot.delete_order(drive_data)
for i in payload['SensorData']:
mydatabase.insert_measurement_data(plant_id=i['PlantID'],
sensordata_temp=i['AirTemperature'],
sensordata_humidity=i['AirHumidity'],
sensordata_soil_moisture=i['SoilMoisture'],
sensordata_brightness=i['Brightness'])
logging.debug("Inserted to data base: " + json.dumps(payload))
action_getalldata(client, userdata, message, mydatabase)
except Exception as e:
logging.error("Could not delete order: " + str(e))
def data_position(client: mqtt.Client, userdata, message: mqtt.MQTTMessage, robot: Robot): def data_position(client: mqtt.Client, userdata, message: mqtt.MQTTMessage, robot: Robot):
logging.info("ROBOT_DATA_POSITION Received data: " + json.dumps(message.payload.decode("UTF-8"))) logging.info("ROBOT_DATA_POSITION Received data: " + json.dumps(message.payload.decode("UTF-8")))
@ -57,6 +92,7 @@ def data_battery(client: mqtt.Client, userdata, message: mqtt.MQTTMessage, robot
"Timestamp": str(datetime.now()) "Timestamp": str(datetime.now())
} }
client.publish(Topics['BACKEND_DATA_BATTERY'], json.dumps(battery_data)) client.publish(Topics['BACKEND_DATA_BATTERY'], json.dumps(battery_data))
client.publish(Topics['BACKEND_DATA_ROBOTREADY'], str(robot.get_robot_status()))
def data_error(client: mqtt.Client, userdata, message: mqtt.MQTTMessage, robot: Robot): def data_error(client: mqtt.Client, userdata, message: mqtt.MQTTMessage, robot: Robot):
@ -72,14 +108,15 @@ def data_robotready(client: mqtt.Client, userdata, message: mqtt.MQTTMessage, ro
logging.info("Waiting Order send to Robot") logging.info("Waiting Order send to Robot")
logging.info("ROBOT_DATA_ROBOTREADY status updated: " + str(robot.get_robot_status())) logging.info("ROBOT_DATA_ROBOTREADY status updated: " + str(robot.get_robot_status()))
client.publish(Topics['BACKEND_DATA_ROBOTREADY'], message.payload.decode("UTF-8")) client.publish(Topics['BACKEND_DATA_ROBOTREADY'], str(robot.get_robot_status()))
# FrontEnd Channel Reactions # FrontEnd Channel Reactions
def action_drive(client: mqtt.Client, userdata, message: mqtt.MQTTMessage, mydatabase: PlantDataBase, def action_drive(client: mqtt.Client, userdata, message: mqtt.MQTTMessage, mydatabase: PlantDataBase,
robot: Robot): robot: Robot):
plant_id = mydatabase.get_plant_id(plant_name=json.loads(message.payload.decode("UTF-8"))["PlantName"]) plant_id = mydatabase.get_plant_id(plant_name=json.loads(str(message.payload.decode("UTF-8"))))
print(str(plant_id))
action_id = str(uuid.uuid4()) action_id = str(uuid.uuid4())
drive_data = { drive_data = {
"PlantID": plant_id, "PlantID": plant_id,
@ -87,7 +124,7 @@ def action_drive(client: mqtt.Client, userdata, message: mqtt.MQTTMessage, mydat
} }
if robot.get_order_number() < 6 and robot.get_robot_status() is True: if robot.get_order_number() < 6 and robot.get_robot_status() is True:
robot.add_order(drive_data) robot.add_order({"PlantID": [plant_id], "ActionID": action_id})
client.publish(Topics['ROBOT_ACTION_DRIVE'], json.dumps(drive_data)) client.publish(Topics['ROBOT_ACTION_DRIVE'], json.dumps(drive_data))
logging.info("BACKEND_ACTION_DRIVE Drive Command published: " + json.dumps(drive_data)) logging.info("BACKEND_ACTION_DRIVE Drive Command published: " + json.dumps(drive_data))
else: else:
@ -106,7 +143,7 @@ def action_driveall(client: mqtt.Client, userdata, message: mqtt.MQTTMessage, my
print(plant_names) print(plant_names)
for names in plant_names: for names in plant_names:
_id = mydatabase.get_plant_id(names) _id = mydatabase.get_plant_id(names[0])
plant_ids.append(_id) plant_ids.append(_id)
action_id = str(uuid.uuid4()) action_id = str(uuid.uuid4())
@ -117,7 +154,7 @@ def action_driveall(client: mqtt.Client, userdata, message: mqtt.MQTTMessage, my
print(drive_data) print(drive_data)
if robot.get_order_number() < 6 and robot.get_robot_status() is True: if robot.get_order_number() < 6 and robot.get_robot_status() is True:
robot.add_order(drive_data) robot.add_order(drive_data)
client.publish(Topics['ROBOT_ACTION_DRIVEALL'], json.dumps(plant_ids)) client.publish(Topics['ROBOT_ACTION_DRIVEALL'], json.dumps(drive_data))
logging.info("BACKEND_ACTION_DRIVEALL Drive Command published: " + json.dumps(drive_data)) logging.info("BACKEND_ACTION_DRIVEALL Drive Command published: " + json.dumps(drive_data))
else: else:
if robot.get_order_number() < 6: if robot.get_order_number() < 6:
@ -146,9 +183,10 @@ def action_getbattery(client: mqtt.Client, userdata, message: mqtt.MQTTMessage):
def action_getalldata(client: mqtt.Client, userdata, message: Union[mqtt.MQTTMessage, list], mydatabase: PlantDataBase): def action_getalldata(client: mqtt.Client, userdata, message: Union[mqtt.MQTTMessage, list], mydatabase: PlantDataBase):
plant_names = mydatabase.get_plant_names() plant_names = mydatabase.get_plant_names()
print("SUIII" + str(plant_names))
alldata = [] alldata = []
for i in plant_names: for i in plant_names:
alldata.append(mydatabase.get_latest_data(plant_name=i)) alldata.append(mydatabase.get_latest_data(plant_name=i[0]))
client.publish(Topics['BACKEND_DATA_SENSORDATAALL'], json.dumps(alldata)) client.publish(Topics['BACKEND_DATA_SENSORDATAALL'], json.dumps(alldata))
logging.info("BACKEND_DATA_SENSORDATAALL got data from database:" + str(alldata)) logging.info("BACKEND_DATA_SENSORDATAALL got data from database:" + str(alldata))

View File

@ -4,7 +4,7 @@ created by caliskan at 19.04.2023
contains all constants for the backend architecture of the smart garden project contains all constants for the backend architecture of the smart garden project
""" """
MQTT_BROKER_LOCAL = "192.168.137.197" MQTT_BROKER_LOCAL = "192.168.0.102"
MQTT_BROKER_GLOBAL = "mqtt.eclipseprojects.io" MQTT_BROKER_GLOBAL = "mqtt.eclipseprojects.io"
RASPI_CLIENT_ID = "smart_farming_raspi" RASPI_CLIENT_ID = "smart_farming_raspi"
BACKEND_CLIENT_ID = "smart_farming_server" BACKEND_CLIENT_ID = "smart_farming_server"

View File

@ -0,0 +1,12 @@
test_dict = {
"PlantData": [ {"PlantID":1, "Test": 0}, {"PlantID": 2, "Test": 0}],
"ActionID": "SUIIII"
}
plant_ids = []
for i in test_dict["PlantData"]:
plant_ids.append(i["PlantID"])
print(plant_ids)

View File

@ -39,6 +39,9 @@ def on_connect(_client: mqtt.Client, _userdata, _flags, _rc, _mydatabase, _robot
_client.message_callback_add(Topics['ROBOT_DATA_SENSORDATA'], lambda client, userdata, message: data_functions. _client.message_callback_add(Topics['ROBOT_DATA_SENSORDATA'], lambda client, userdata, message: data_functions.
data_sensordata(client, userdata, message, _mydatabase, _robot)) data_sensordata(client, userdata, message, _mydatabase, _robot))
_client.subscribe(Topics['ROBOT_DATA_ALL'])
_client.message_callback_add(Topics['ROBOT_DATA_ALL'], lambda client, userdata, message: data_functions.
data_sensordataall(client, userdata, message, _mydatabase, _robot))
_client.subscribe(Topics['ROBOT_DATA_POSITION']) _client.subscribe(Topics['ROBOT_DATA_POSITION'])
_client.message_callback_add(Topics['ROBOT_DATA_POSITION'], data_functions.data_position) _client.message_callback_add(Topics['ROBOT_DATA_POSITION'], data_functions.data_position)
@ -100,14 +103,14 @@ def main():
robot = Robot() robot = Robot()
my_database = PlantDataBase(database_name=DATABASE_NAME) my_database = PlantDataBase(database_name=DATABASE_NAME)
my_database.create_tables() my_database.create_tables()
mqttclient = mqtt.Client(BACKEND_CLIENT_ID) mqttclient = mqtt.Client(BACKEND_CLIENT_ID, transport="websockets")
mqttclient.on_connect = lambda client, userdata, flags, rc: on_connect(_client=client, mqttclient.on_connect = lambda client, userdata, flags, rc: on_connect(_client=client,
_userdata=userdata, _userdata=userdata,
_flags=flags, _flags=flags,
_rc=rc, _rc=rc,
_mydatabase=my_database, _mydatabase=my_database,
_robot=robot) _robot=robot)
mqttclient.connect(MQTT_BROKER_GLOBAL) mqttclient.connect(MQTT_BROKER_LOCAL)
logging.basicConfig(filename="server.log", filemode="a", encoding="utf-8", level=logging.DEBUG, logging.basicConfig(filename="server.log", filemode="a", encoding="utf-8", level=logging.DEBUG,
format='%(asctime)s %(name)s %(levelname)s %(message)s', format='%(asctime)s %(name)s %(levelname)s %(message)s',
datefmt="%d-%m-%Y %H:%M:%S") datefmt="%d-%m-%Y %H:%M:%S")

View File

@ -2,7 +2,6 @@
import sqlite3 import sqlite3
from typing import Optional from typing import Optional
import logging import logging
from itertools import chain
class PlantDataBase: class PlantDataBase:
@ -140,7 +139,7 @@ class PlantDataBase:
def get_plant_names(self) -> list: def get_plant_names(self) -> list:
try: try:
self.cur.execute("SELECT PlantName FROM plants") self.cur.execute("SELECT PlantName FROM plants")
return [row[0] for row in self.cur.fetchall()] return self.cur.fetchall()
except Exception as e: except Exception as e:
logging.error("Could not get plant names: " + str(e)) logging.error("Could not get plant names: " + str(e))