Browse Source

SSH start for robot scripts

master
Luis Waldhauser 1 year ago
parent
commit
6adc5a3426
2 changed files with 52 additions and 23 deletions
  1. 52
    23
      software/roboter/raspy/mainProg.py
  2. 0
    0
      software/roboter/raspy/raspy_sensors.py

+ 52
- 23
software/roboter/raspy/mainProg.py View File

@@ -1,10 +1,15 @@
import paho.mqtt.client as mqtt
import json
from raspySensors import RaspySensors
import threading
import os
import signal
import time
from raspy_sensors import RaspySensors

#region global Varaibles
sensors = RaspySensors()
client = mqtt.Client()
#sensors:RaspySensors()
leftRight = 50
plantNumber = 0

sensorData = {
"Air Temperature [°C]" : 0,
@@ -38,26 +43,48 @@ def measure_send_data(plantID, actionID):
client.publish("Robot/Data/SensorData", json.dumps(sensorData, indent=4))


def drive_home():
'''Function to drive robot back to starting position in thread'''
thread = threading.Thread(target= os.system(f'sshpass -p maker ssh robot@ev3dev.local python3 /home/robot/Programme/drive_back.py {leftRight}'), daemon=True)
thread.start()


def drive_plant():
'''Function to drive to plant according to number from MQTT message in thread'''
print(f"Driving to Plant {plantNumber}")
os.system(f'sshpass -p maker ssh robot@ev3dev.local python3 /home/robot/Programme/plant_{plantNumber}.py')
print("Raising Signal")
signal.raise_signal(signal.SIGUSR1)


def init_mqtt():
'''Initialise MQTT client'''
mqttBroker = "mqtt.eclipseprojects.io"
global client
client = mqtt.Client("Robot")

#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.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)

#Subscribe to topics
client.subscribe("Robot/Data") #Testing
client.subscribe("Robot/Action/Drive")
client.subscribe("Robot/Action/GetPosition")
client.subscribe("Robot/Action/GetBattery")
client.subscribe("ROBOT/DATA") #Testing
client.subscribe("ROBOT/ACTION/DRIVE")
client.subscribe("ROBOT/Action/GETPOSITION")
client.subscribe("ROBOT/ACTION/GETBATTERY")

client.connect(mqttBroker)


def signal_measure():
'''Signal function to measure one plant and start driving home'''
print("Measuring Sensors")
#measure_send_data()
print("Driving Home")
drive_home()

#endregion

#region MQTT callbacks
@@ -71,19 +98,18 @@ def send_data_json(client, userdata, message):

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}")
measure_send_data() # With Signal not here
print("received drive to plant")

print("Driving back to start position")
#[ ]TODO Start Drive Back Function in Thread
plantNumber = int(message.payload.decode("UTF-8"))
if plantNumber % 2 == 0:
leftRight = -50 #rotating left
else:
leftRight = 50 #rotating right

thread = threading.Thread(target= drive_plant, daemon=True)
thread.start()

print("Back at starting Position") #Signal

def get_position(clients, userdata, message):
'''Callback function for GPS position request
@@ -115,10 +141,13 @@ def get_BatteryStatus(clients, userdata, message):

def main():
init_mqtt()
dataDict = {} #Testing
print("MQTT initialized")
signal.signal(signal.SIGUSR1, signal_measure)
# dataDict = {} #Testing

client.loop_start()
client.loop_forever()

print("Starting Loop")
while True:
pass


software/roboter/raspy/raspySensors.py → software/roboter/raspy/raspy_sensors.py View File


Loading…
Cancel
Save