|
13 | 13 | from myDevices.utils.logger import exception, info, warn, error, debug, logJson
|
14 | 14 | from myDevices.sensors import sensors
|
15 | 15 | from myDevices.system.hardware import Hardware
|
16 |
| -# from myDevices.cloud.scheduler import SchedulerEngine |
| 16 | +from myDevices.cloud.scheduler import SchedulerEngine |
17 | 17 | from myDevices.cloud.download_speed import DownloadSpeed
|
18 | 18 | from myDevices.cloud.updater import Updater
|
19 | 19 | from myDevices.system.systemconfig import SystemConfig
|
@@ -195,7 +195,7 @@ def Start(self):
|
195 | 195 | if not self.Connect():
|
196 | 196 | error('Error starting agent')
|
197 | 197 | return
|
198 |
| - # self.schedulerEngine = SchedulerEngine(self, 'client_scheduler') |
| 198 | + self.schedulerEngine = SchedulerEngine(self, 'client_scheduler') |
199 | 199 | self.sensorsClient = sensors.SensorsClient()
|
200 | 200 | self.readQueue = Queue()
|
201 | 201 | self.writeQueue = Queue()
|
@@ -398,6 +398,8 @@ def ExecuteMessage(self, message):
|
398 | 398 | self.ProcessConfigCommand(message)
|
399 | 399 | elif channel == cayennemqtt.AGENT_MANAGE:
|
400 | 400 | self.ProcessAgentCommand(message)
|
| 401 | + elif channel == cayennemqtt.AGENT_SCHEDULE: |
| 402 | + self.ProcessScheduleCommand(message) |
401 | 403 | else:
|
402 | 404 | info('Unknown message')
|
403 | 405 |
|
@@ -514,8 +516,33 @@ def ProcessDeviceCommand(self, message):
|
514 | 516 | error = '{}: {}'.format(type(ex).__name__, ex)
|
515 | 517 | self.EnqueueCommandResponse(message, error)
|
516 | 518 |
|
| 519 | + def ProcessScheduleCommand(self, message): |
| 520 | + """Process command to add/edit/remove a scheduled action""" |
| 521 | + error = None |
| 522 | + try: |
| 523 | + if 'actions' in message['payload']: |
| 524 | + for action in message['payload']['actions']: |
| 525 | + self.mqttClient.transform_command(action) |
| 526 | + if message['suffix'] == 'add': |
| 527 | + result = self.schedulerEngine.add_scheduled_item(message['payload'], True) |
| 528 | + elif message['suffix'] == 'edit': |
| 529 | + result = self.schedulerEngine.update_scheduled_item(message['payload']) |
| 530 | + elif message['suffix'] == 'delete': |
| 531 | + result = self.schedulerEngine.remove_scheduled_item(message['payload']) |
| 532 | + else: |
| 533 | + error = 'Unknown schedule command: {}'.format(message['suffix']) |
| 534 | + debug('ProcessScheduleCommand result: {}'.format(result)) |
| 535 | + if result is False: |
| 536 | + error = 'Schedule command failed' |
| 537 | + except Exception as ex: |
| 538 | + error = '{}: {}'.format(type(ex).__name__, ex) |
| 539 | + self.EnqueueCommandResponse(message, error) |
| 540 | + |
517 | 541 | def EnqueueCommandResponse(self, message, error):
|
518 | 542 | """Send response after processing a command message"""
|
| 543 | + if not hasattr(message, 'cmdId'): |
| 544 | + # If there is no command idea we assume this is a scheduled command and don't send a response message. |
| 545 | + return |
519 | 546 | debug('EnqueueCommandResponse error: {}'.format(error))
|
520 | 547 | if error:
|
521 | 548 | response = 'error,{}={}'.format(message['cmdId'], error)
|
|
0 commit comments