68 lines
2.0 KiB
Python
68 lines
2.0 KiB
Python
"""
|
|
created by waldluis
|
|
|
|
This file contains the main script for the RaspberryPi of smart garden project
|
|
It has the task to control the EV3 robot and take measurements with the mounted sensor
|
|
The sensor data is published to MQTT topics to be available for the backend server
|
|
Used protocol for interaction: mqtt (paho-mqtt module)
|
|
Interaction with the EV3 via SSH
|
|
"""
|
|
|
|
import paho.mqtt.client as mqtt
|
|
import functions
|
|
from raspy_sensors import RaspySensors
|
|
from defines import Topics, RASPI_CLIENT_ID, MQTT_BROKER_GLOBAL
|
|
|
|
|
|
def on_connect(client: mqtt.Client, userdata, flags, rc):
|
|
"""
|
|
This method gets called, when it connects to a mqtt broker.
|
|
It is used to subscribe to the specific topics
|
|
|
|
Args:
|
|
client (mqtt.Client): current mqtt client
|
|
userdata (_type_): _description_
|
|
flags (_type_): _description_
|
|
rc (_type_): _description_
|
|
"""
|
|
if rc == 0:
|
|
#Add callbacks
|
|
client.message_callback_add("ROBOT/DATA", functions.send_data_json) #Testing
|
|
client.message_callback_add(Topics["ROBOT_ACTION_DRIVE"], functions.drive_plant)
|
|
client.message_callback_add(Topics["ROBOT_ACTION_GETPOSITION"], functions.get_position)
|
|
client.message_callback_add(Topics["ROBOT_ACTION_GETBATTERY"], functions.get_BatteryStatus)
|
|
|
|
#Subscribe to topics
|
|
client.subscribe("ROBOT/DATA") #Testing
|
|
client.subscribe(Topics["ROBOT_ACTION_DRIVE"])
|
|
client.subscribe(Topics["ROBOT_ACTION_GETPOSITION"])
|
|
client.subscribe(Topics["ROBOT_ACTION_GETBATTERY"])
|
|
|
|
print("MQTT initialized")
|
|
|
|
|
|
|
|
def main():
|
|
"""
|
|
Initialises MQTT and Sensors
|
|
Runs forever and controlls all robot functions
|
|
"""
|
|
client = mqtt.Client(RASPI_CLIENT_ID)
|
|
client.on_connect = on_connect
|
|
client.connect(MQTT_BROKER_GLOBAL)
|
|
# dataDict = {} #Testing
|
|
|
|
# CHECK forever or start
|
|
client.loop_start()
|
|
|
|
print("Starting Loop")
|
|
while True:
|
|
# print("Looping")
|
|
# time.sleep(1)
|
|
pass
|
|
|
|
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main() |