diff --git a/controller/lockdown.py b/controller/lockdown.py new file mode 100644 index 0000000..f62038e --- /dev/null +++ b/controller/lockdown.py @@ -0,0 +1,3 @@ +import state + +state.safely_panic() diff --git a/controller/state/__init__.py b/controller/state/__init__.py index ec5bca0..0680035 100644 --- a/controller/state/__init__.py +++ b/controller/state/__init__.py @@ -3,25 +3,31 @@ from state.server import Server from state.changer import Changer from state.file import File +def safely_panic(): + safe_state = {} + changer = Changer(safe_state,safe_state) + changer.stop_everything + + def sync(): - server = Server(config.API_BASE_URL, config.CONTROLLER_ID) - local = File(config.STATE_FILE) - server_state = server.get_state() + try: + server = Server(config.API_BASE_URL, config.CONTROLLER_ID) + local = File(config.STATE_FILE) + server_state = server.get_state() + if local.present(): + local.load() + print "local present: " + repr(local.data) + else: + local.data = server_state + print "local not present, server: " + repr(local.data) + local.save() + local_state = local.data - if local.present(): - local.load() - print "local present: " + repr(local.data) - else: - local.data = server_state - print "local not present, server: " + repr(local.data) - local.save() + changer = Changer(local_state, server_state) + current_state = changer.process_change() - - local_state = local.data - - changer = Changer(local_state, server_state) - current_state = changer.process_change() - - server.post_state(current_state) + server.post_state(current_state) + except: + safely_panic(); diff --git a/controller/state/changer.py b/controller/state/changer.py index 2e2c1c8..b23ddf7 100644 --- a/controller/state/changer.py +++ b/controller/state/changer.py @@ -24,6 +24,10 @@ class Changer(object): 'closed': self.close_in_valve } + def stop_everything: + self.close_in_valve + self.close_out_valve + def safe_remote_state(self, key): if key in ['out_valve', 'in_valve']: return self.remote_state.get(key, 'closed')