Sensor error handling added

This commit is contained in:
Luis Waldhauser 2023-05-07 12:32:50 +02:00
parent 56f9065fc7
commit 9f12f21ac4
2 changed files with 67 additions and 39 deletions

View File

@ -3,7 +3,7 @@ import json
import threading
import os
import raspy_sensors as Sensors
from defines import Topics
from defines import Topics, SENSORDATA
def measure_send_data(plantID, actionID, client: mqtt.Client):
"""
@ -14,13 +14,13 @@ def measure_send_data(plantID, actionID, client: mqtt.Client):
actionID (_type_): current ID of driving action
client (mqtt.Client): current mqtt client for publishing
"""
sensorData = SENSORDATA
try:
sensorData = Sensors.readSensors()
except Exception as e:
print(str(e))
# TODO Error message MQTT
sensorData["PlantID"] = plantID
sensorData["ActionID"] = actionID
@ -39,14 +39,14 @@ def drive_plant_thread(plantID, actionID, client: mqtt.Client):
client (mqtt.Client): current mqtt client for publishing
"""
# FIXME Change to color code driving
errorCode = os.system(f'sshpass -p maker ssh robot@ev3dev.local python3 /home/robot/Programme/plant_{plantID}.py')
# errorCode = os.system(f'sshpass -p maker ssh robot@ev3dev.local python3 /home/robot/Programme/drive_plant.py {plantID}')
# errorCode = os.system(f'sshpass -p maker ssh robot@ev3dev.local python3 /home/robot/Programme/plant_{plantID}.py')
# # errorCode = os.system(f'sshpass -p maker ssh robot@ev3dev.local python3 /home/robot/Programme/drive_plant.py {plantID}')
# # TODO Error Message
if errorCode != 0:
print(f"Robot Error {errorCode} occurred")
print("Drive Plant aborted, Robot at starting position")
return
# TODO Error Message
# if errorCode != 0:
# print(f"Robot Error {errorCode} occurred")
# print("Drive Plant aborted, Robot at starting position")
# return
print("Measuring Sensors")

View File

@ -3,40 +3,59 @@ import adafruit_dht
import adafruit_tsl2561
import board
import json
from defines import SENSORDATA
# TODO
def readDHT22():
# Air Temperature & Humidity
"""
Reads DHT22 air temperature and air humidity and return values as float
Raises:
Exception: If DHT22 not connected properly
Returns:
float: air temperature in °C
float: air humidity %
"""
try:
dht22 = adafruit_dht.DHT22(board.D4, use_pulseio=False)
except:
raise Exception("DHT22 not connected")
# read DHT22
# if Error reading Data try again
while True:
try:
sensorData["AirTemperature"] = dht22.temperature
sensorData["AirHumidity"] = dht22.humidity
temperature = dht22.temperature
humidity = dht22.humidity
except:
continue
raise Exception("DHT22 not connected")
return temperature, humidity
break
# TODO
def readTSL2561():
# Brightness
"""
Reads TSL2561 brightness in Lux
Raises:
Exception: If TSL2561 not connected properly
Returns:
int: brightness in Lux
"""
try:
tsl2561 = adafruit_tsl2561.TSL2561(board.I2C())
except:
raise Exception("TSL2561 not connected")
# read TSL2561
brightness = 0
if type(tsl2561.lux) == type(None): # Max Value 40.000 -> above error
sensorData["Brightness"] = 40000
brightness = 40000
else:
sensorData["Brightness"] = int(tsl2561.lux)
brightness = int(tsl2561.lux)
return brightness
# TODO SoilMoisture Sensor Function
@ -45,25 +64,34 @@ def readTSL2561():
# TODO Function for all sensors
def readSensors():
"""
Read all Sensors and return Dictionary with data
Read DHT22, TSL2561 and Humidity Sensor
Raises:
Exception: DHT22 not connected
Exception: TSL2561 not connected
Returns:
sensordata (dict): all data of sensors
dict: Sensordata
"""
sensorData = SENSORDATA
errorMessage = ""
try:
sensorData["AirTemperature"], sensorData["AirHumidity"] = readDHT22()
except Exception as e:
sensorData["AirHumidity"] = 0 # otherwise old value
sensorData["AirTemperature"] = 0
errorMessage = str(e) + "\n"
# global Variables
sensorData = {
"AirTemperature": 0.0,
"AirHumidity": 0.0,
"SoilMoisture": 0.0,
"Brightness": 0,
"PlantID": 0,
"ActionID": 0,
}
print("TEST")
try:
sensorData["Brightness"] = readTSL2561()
except Exception as e:
sensorData["Brightness"] = 0 # otherwise old value
errorMessage = errorMessage + str(e) + "\n"
# combined error message
if errorMessage != "":
raise Exception(errorMessage)
return sensorData