コード例 #1
0
ファイル: remind.py プロジェクト: StickBrush/Pylosophorum
class ReminderTimersService:
    ANSWER_CHANNEL = "/dsh/damaso/reminders/notifications"

    def __init__(self):
        self._timers = {}
        self._publisher = MQTTPublisher(self.ANSWER_CHANNEL)
        self._reminders = ReminderData()
        self._add_id = self._reminders.register_add_callback(self._start_timer)
        self._remove_id = self._reminders.register_remove_callback(
            self._stop_timer)
        log("ReminderTimersService: Created and started")

    def _start_timer(self, r_id: str):
        log("ReminderTimersService: Starting timer for " + r_id)
        secs = self._reminders.get_seconds_to(r_id)
        tmr = Timer(secs, self.notify, [r_id])
        self._timers[r_id] = tmr
        self._timers[r_id].start()

    def _stop_timer(self, r_id):
        log("ReminderTimersService: Stopping timer for " + r_id)
        try:
            self._timers.pop(r_id).stop()
        except Exception:
            logw("ReminderTimersService: Error stopping timer. Probably " +
                 r_id + " does not exist")

    def notify(self, r_id: str):
        log("ReminderTimersService: Notifying reminder " + r_id)
        rmndr = self._reminders.get_reminder(r_id)
        if rmndr is not None:
            self._publisher.publish(rmndr[2])
        sleep(1.0)  # Wait for a second to make sure enough time has passed
        self._reminders.repeat_reminder(r_id)
コード例 #2
0
ファイル: remind.py プロジェクト: StickBrush/Pylosophorum
 def __init__(self):
     self._timers = {}
     self._publisher = MQTTPublisher(self.ANSWER_CHANNEL)
     self._reminders = ReminderData()
     self._add_id = self._reminders.register_add_callback(self._start_timer)
     self._remove_id = self._reminders.register_remove_callback(
         self._stop_timer)
     log("ReminderTimersService: Created and started")
コード例 #3
0
class ProactiveAwakenParallelService(Thread):
    LISTEN_CHANNEL = "/dsh/damaso/proactive/awaken"
    ANSWER_CHANNEL = "hermes/hotword/hey_snips/detected"

    def __init__(self):
        Thread.__init__(self)
        self._publisher = MQTTPublisher(self.ANSWER_CHANNEL)
        log("ProactiveAwakenParallelService: Created")

    def run(self):
        log("ProactiveAwakenParallelService: Running")
        MQTTDaemon(self.interact, self.LISTEN_CHANNEL)

    def interact(self, message):
        log("ProactiveAwakenParallelService: Got message " + message)
        self._publisher.publish(
            dumps({
                'siteId': 'default',
                'modelId': 'hey_snips'
            }))
コード例 #4
0
ファイル: remind.py プロジェクト: StickBrush/Pylosophorum
class ReminderManagementParallelService(Thread):
    LISTEN_CHANNEL = "/dsh/damaso/reminders/management"
    ANSWER_CHANNEL = "/dsh/damaso/reminders/management/ids"

    def __init__(self):
        Thread.__init__(self)
        self._reminders = ReminderData()
        self._publisher = MQTTPublisher(self.ANSWER_CHANNEL)
        log("ReminderManagementParallelService: Created")

    def run(self) -> None:
        MQTTDaemon(self.interact, self.LISTEN_CHANNEL)

    def interact(self, message):
        log("ReminderManagementParallelService: Got message")
        try:
            json = dejson(message)
            log("ReminderManagementParallelService: Unmarshalled message")
            action = json['action']
            if action == 'ADD':
                log("ReminderManagementParallelService: Adding reminder...")
                hour = int(json['hour'])
                minute = int(json['minute'])
                weekday = int(json['weekday'])
                concept = int(json['concept'])
                log("ReminderManagementParallelService: Added " +
                    str(concept) + " reminder @" + str(hour) + ":" +
                    str(minute) + " on days " + str(weekday))
                r_id = self._reminders.add_reminder(hour, minute, weekday,
                                                    concept)
                self._publisher.publish(r_id)
                #ReminderSenderParallelService().interact("")
            else:
                r_id = json['id']
                log("ReminderManagementParallelService: Removing reminder " +
                    r_id)
                self._reminders.remove_reminder(r_id)

        except Exception:
            logw("ReminderManagementParallelService: Unreadable message: " +
                 message)
コード例 #5
0
 def __init__(self):
     Thread.__init__(self)
     self._kodi = KodiRpc()
     self._timer = None
     self._awakener = MQTTPublisher(self.WAKEUP_CHANNEL)
     self._pauser = MQTTPublisher(self.PAUSE_CHANNEL)
     self._stopper = MQTTPublisher(self.STOP_CHANNEL)
     log("ProactiveManagementParallelService: Created")
コード例 #6
0
class ProactiveManagementParallelService(Thread):
    LISTEN_CHANNEL = "/dsh/damaso/proactive/sensor"
    WAKEUP_CHANNEL = ProactiveAwakenParallelService.LISTEN_CHANNEL
    PAUSE_CHANNEL = TVPauseParallelService.LISTEN_CHANNEL
    STOP_CHANNEL = TVStopParallelService.LISTEN_CHANNEL
    TIMER_DEADLINE = 5.0 * 60.0

    def __init__(self):
        Thread.__init__(self)
        self._kodi = KodiRpc()
        self._timer = None
        self._awakener = MQTTPublisher(self.WAKEUP_CHANNEL)
        self._pauser = MQTTPublisher(self.PAUSE_CHANNEL)
        self._stopper = MQTTPublisher(self.STOP_CHANNEL)
        log("ProactiveManagementParallelService: Created")

    def run(self):
        log("ProactiveManagementParallelService: Running")
        MQTTDaemon(self.interact, self.LISTEN_CHANNEL)

    def interact(self, message):
        log("ProactiveManagementParallelService: Got message " + message)
        if message == "ON":
            if self._kodi.is_playing():
                if self._kodi.is_paused():
                    log("ProactiveManagementParallelService: Playing back")
                    self._pauser.publish("PLAY")
                    if self._timer is not None:
                        log("ProactiveManagementParallelService: Cancelling timer"
                            )
                        self._timer.cancel()
                        self._timer = None
                else:
                    log("ProactiveManagementParallelService: No effects")
            else:
                log("ProactiveManagementParallelService: Waking up")
                self._awakener.publish("AWAKEN MY MASTERS")
        else:
            if self._kodi.is_paused():
                log("ProactiveManagementParallelService: No effects")
            else:
                log("ProactiveManagementParallelService: Pausing and starting timer"
                    )
                self._pauser.publish("PAUSE")
                self._timer = Timer(self.TIMER_DEADLINE, self.stop)

    def stop(self):
        self._stopper.publish("STOP HAMMERTIME")
コード例 #7
0
ファイル: remind.py プロジェクト: StickBrush/Pylosophorum
class ReminderIDSenderParallelService(Thread):
    LISTEN_CHANNEL = "/dsh/damaso/reminders/requests"
    ANSWER_CHANNEL = "/dsh/damaso/reminders/IDresponses"

    def __init__(self):
        Thread.__init__(self)
        self._reminders = ReminderData()
        self._reminders.load()
        self._publisher = MQTTPublisher(self.ANSWER_CHANNEL)
        log("ReminderIDSenderParallelService: Created")

    def run(self):
        MQTTDaemon(self.interact, self.LISTEN_CHANNEL)

    def interact(self, message):
        try:
            log("ReminderIDSenderParallelService: Got message " + message)
            jsonvar = self._reminders.jsonify_id()
            log("ReminderIDSenderParallelService: Sending " + jsonvar)
            self._publisher.publish(jsonvar)
        except:
            traceback.print_exc()
            pass
コード例 #8
0
ファイル: remind.py プロジェクト: StickBrush/Pylosophorum
 def __init__(self):
     Thread.__init__(self)
     self._reminders = ReminderData()
     self._publisher = MQTTPublisher(self.ANSWER_CHANNEL)
     log("ReminderManagementParallelService: Created")
コード例 #9
0
 def __init__(self):
     Thread.__init__(self)
     self._publisher = MQTTPublisher(self.ANSWER_CHANNEL)
     log("ProactiveAwakenParallelService: Created")