-
Notifications
You must be signed in to change notification settings - Fork 0
/
gc_hardware.py
72 lines (63 loc) · 2.43 KB
/
gc_hardware.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
from logging import error
from HardwareController.Chamber import Chamber
import click
from time import sleep
from pprint import pprint
from datetime import datetime
from HardwareController import VERSION
import signal
import sys
import GrowCabApi
chamber = None
@click.command()
@click.option('--api_host', default='http://localhost:5000', show_default=True)
@click.option('--chamber_id', default=1, show_default=True)
@click.option('--save_status_frequency', default=30, show_default=True, help="Save the measured status each X seconds")
@click.option('--update_configuration_frequency', default=5, show_default=True)
@click.version_option()
def main(api_host, chamber_id, save_status_frequency, update_configuration_frequency):
print(f"GC_hardware - {VERSION}")
print("Press CTRL-C to terminate")
running = True
chamber = None
api_client = GrowCabApi.ApiClient(configuration=GrowCabApi.Configuration(host=api_host))
try:
chamber = Chamber(api_client, update_configuration_frequency)
time = 0
while running:
#print("updating sensor data...")
chamber.updateSensorData()
if time % save_status_frequency == 0:
#print("Current status....")
#print(chamber.current_status)
chamber.saveSensorData()
if time % update_configuration_frequency == 0:
#print("Updating schedule....")
chamber.updateSchedule()
#pprint(chamber.chamber_schedule)
chamber.currentExpectedMeasures()
#print("Updating actuators....")
chamber.updateActuators()
# TODO: Update actuator here, maybe a function that wraps the two operations "updateChamber"
chamber.updatePowerStatus()
sleep(1)
time += 1
except:
print("Terminating...")
if chamber != None:
chamber.stopActuators()
raise
def handler(signum, frame):
print(f"Terminating ({signum}:{signal.strsignal(signum)})...")
if chamber != None:
chamber.stopActuators()
exit(0 )
signal.signal(signal.SIGABRT, handler)
signal.signal(signal.SIGILL, handler)
signal.signal(signal.SIGHUP, handler)
signal.signal(signal.SIGINT, handler)
signal.signal(signal.SIGTERM, handler)
signal.signal(signal.SIGQUIT, handler)
signal.signal(signal.SIGTERM, handler)
if __name__ == "__main__":
main()