67 lines
2.4 KiB
Python
67 lines
2.4 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
|
|
import logging
|
|
import sys
|
|
from defines import Topics, RASPI_CLIENT_ID, MQTT_BROKER_GLOBAL, MQTT_BROKER_LOCAL
|
|
|
|
|
|
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(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)
|
|
client.message_callback_add(Topics["ROBOT_ACTION_DRIVEALL"], functions.drive_plant_all)
|
|
|
|
#Subscribe to topics
|
|
client.subscribe(Topics["ROBOT_ACTION_DRIVE"])
|
|
client.subscribe(Topics["ROBOT_ACTION_GETPOSITION"])
|
|
client.subscribe(Topics["ROBOT_ACTION_GETBATTERY"])
|
|
client.subscribe(Topics["ROBOT_ACTION_DRIVEALL"])
|
|
|
|
logging.info("MQTT initialized")
|
|
|
|
|
|
|
|
def main():
|
|
"""
|
|
Initialises MQTT and Sensors
|
|
Runs forever and controlls all robot functions
|
|
"""
|
|
logging.basicConfig(filename="robot.log", filemode="a", encoding="utf-8", level=logging.DEBUG, format='%(asctime)s %(name)s %(levelname)s %(message)s',
|
|
datefmt="%d-%m-%Y %H:%M:%S")
|
|
logging.getLogger().addHandler(logging.StreamHandler(sys.stdout))
|
|
|
|
client = mqtt.Client(RASPI_CLIENT_ID)
|
|
# client = mqtt.Client(RASPI_CLIENT_ID, transport="websockets") # Local Broker
|
|
client.on_connect = on_connect
|
|
client.connect(MQTT_BROKER_GLOBAL)
|
|
# client.connect("192.168.137.197") # Local Broker
|
|
|
|
logging.info("Robot initialised")
|
|
|
|
client.loop_forever() # Loop_start not needed
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main() |