97 lines
3.2 KiB
Python
97 lines
3.2 KiB
Python
import time
|
|
from moisture_sensor import MoistureSensor
|
|
from dht22 import TemperatureHumiditySensor
|
|
from ambilight_sensor import AmbilightSensor
|
|
from pump import Pump
|
|
from sensor_data_manager import SensorDataManager
|
|
from grow_system_api import GrowSystemApi
|
|
from device_info import DeviceInfo
|
|
|
|
|
|
class GrowSystem:
|
|
|
|
grow_system_api = GrowSystemApi()
|
|
|
|
# moisture_sensor = None
|
|
# temperature_humidity_sensor = None
|
|
|
|
sensors = []
|
|
|
|
engines = []
|
|
|
|
most_recent_values = []
|
|
|
|
sensor_data_manager = None
|
|
|
|
device_id = None
|
|
|
|
device_info = DeviceInfo()
|
|
|
|
def __init__(self, settings):
|
|
# Init sensors
|
|
for sensor in self.device_info.sensors:
|
|
print("")
|
|
print("Initialize sensor:")
|
|
print(sensor)
|
|
sensor_type = sensor['type']
|
|
if sensor_type == 'moisture':
|
|
print("Found sensor of type moisture")
|
|
self.sensors.append(MoistureSensor(sensor))
|
|
elif sensor_type == 'dht22':
|
|
print("Found sensor of type DHT22")
|
|
self.sensors.append(TemperatureHumiditySensor(sensor))
|
|
elif sensor_type == 'ambilight':
|
|
print("Found sensor of type GY302/BH1750")
|
|
self.sensors.append(AmbilightSensor(sensor))
|
|
else:
|
|
print("No sensor type configured for: " + sensor['type'])
|
|
|
|
# Init engines
|
|
for engine in self.device_info.engines:
|
|
print("")
|
|
print("Initialize engine:")
|
|
print(engine)
|
|
engine_type = engine['type']
|
|
if engine_type == 'pump':
|
|
print("Found egine of type pump")
|
|
self.engines.append(Pump(engine))
|
|
self.engines[0].on()
|
|
time.sleep(15)
|
|
self.engines[0].off()
|
|
|
|
|
|
#if not self.moisture_sensor:
|
|
# self.moisture_sensor = MoistureSensor(settings['moisture_sensor'])
|
|
|
|
#if not self.temperature_humidity_sensor:
|
|
# self.temperature_humidity_sensor = TemperatureHumiditySensor(settings['temperature_humidity_sensor'])
|
|
|
|
def start(self):
|
|
print("Say the server hello...")
|
|
result = self.grow_system_api.say_hello()
|
|
message = result['message']
|
|
|
|
if message != 'OK':
|
|
print("Device not activated. Stopping")
|
|
return
|
|
|
|
self.device_id = result['data']['device_id']
|
|
self.sensor_data_manager = SensorDataManager(self.device_id)
|
|
|
|
print("Start reading sensors ...")
|
|
while True:
|
|
# Reset data
|
|
self.most_recent_values = []
|
|
|
|
for sensor in self.sensors:
|
|
print("Read sensor of type " + sensor.type + " at pin " + str(sensor.sensor_pin_int))
|
|
sensor.read()
|
|
for measurement in sensor.most_recent_values:
|
|
print(f"Got {measurement['value']} {measurement['unit']} ({measurement['type']})")
|
|
self.most_recent_values = self.most_recent_values + sensor.most_recent_values
|
|
|
|
self.sensor_data_manager.handleData(self.most_recent_values)
|
|
|
|
time.sleep(self.device_info.read_secs)
|
|
|