def __init__(self, bus): super(SkillManager, self).__init__() self._stop_event = Event() self._connected_event = Event() self.loaded_skills = {} self.bus = bus self.enclosure = EnclosureAPI(bus) # Schedule install/update of default skill self.msm = self.create_msm() self.num_install_retries = 0 self.update_interval = Configuration.get()['skills']['update_interval'] self.update_interval = int(self.update_interval * 60 * MINUTES) self.dot_msm = join(self.msm.skills_dir, '.msm') if exists(self.dot_msm): self.next_download = os.path.getmtime(self.dot_msm) + \ self.update_interval else: self.next_download = time.time() - 1 # Conversation management bus.on('skill.converse.request', self.handle_converse_request) # Update on initial connection bus.on('mycroft.internet.connected', lambda x: self._connected_event.set()) # Update upon request bus.on('skillmanager.update', self.schedule_now) bus.on('skillmanager.list', self.send_skill_list) bus.on('skillmanager.deactivate', self.deactivate_skill) bus.on('skillmanager.keep', self.deactivate_except) bus.on('skillmanager.activate', self.activate_skill)
def __init__(self, bus): """Constructor Arguments: bus (event emitter): Mycroft messagebus connection """ super(SkillManager, self).__init__() self.bus = bus self._stop_event = Event() self._connected_event = Event() self.config = Configuration.get() self.upload_queue = UploadQueue() self.skill_loaders = {} self.enclosure = EnclosureAPI(bus) self.initial_load_complete = False self.num_install_retries = 0 self.settings_downloader = SkillSettingsDownloader(self.bus) self._define_message_bus_events() self.skill_updater = SkillUpdater() self.daemon = True # Statuses self._alive_status = False # True after priority skills has loaded self._loaded_status = False # True after all skills has loaded
def __init__(self, bus, watchdog=None): """Constructor Arguments: bus (event emitter): Mycroft messagebus connection watchdog (callable): optional watchdog function """ super(SkillManager, self).__init__() self.bus = bus # Set watchdog to argument or function returning None self._watchdog = watchdog or (lambda: None) self._stop_event = Event() self._connected_event = Event() self.config = Configuration.get() self.upload_queue = UploadQueue() self.skill_loaders = {} self.enclosure = EnclosureAPI(bus) self.initial_load_complete = False self.num_install_retries = 0 self.settings_downloader = SkillSettingsDownloader(self.bus) self.empty_skill_dirs = set() # Save a record of empty skill dirs. # Statuses self._alive_status = False # True after priority skills has loaded self._loaded_status = False # True after all skills has loaded self.skill_updater = SkillUpdater() self._define_message_bus_events() self.daemon = True self.lang_code = self.config.get("lang", 'en-us') load_languages([self.lang_code, 'en-us'])
def __init__(self, message_bus_client, config): self.bus = message_bus_client self.platform = config['enclosure'].get("platform", "unknown") self.enclosure = EnclosureAPI(self.bus) self.is_paired = False self.backend_down = False # Remember "now" at startup. Used to detect clock changes. self.start_ticks = time.monotonic() self.start_clock = time.time()
def init(self, bus): """Performs intial setup of TTS object. Arguments: bus: Mycroft messagebus connection """ self.bus = bus self.playback.init(self) self.enclosure = EnclosureAPI(self.bus) self.playback.enclosure = self.enclosure
def bind(self, bus): """Register messagebus emitter with skill. Arguments: bus: Mycroft messagebus connection """ if bus: self._bus = bus self.events.set_bus(bus) self.intent_service.set_bus(bus) self.event_scheduler.set_bus(bus) self.event_scheduler.set_id(self.skill_id) self._enclosure = EnclosureAPI(bus, self.name) self._register_system_event_handlers() # Initialize the SkillGui self.gui.setup_default_handlers()
def bind(self, bus): """ Register messagebus emitter with skill. Arguments: bus: Mycroft messagebus connection """ if bus: self.bus = bus self.enclosure = EnclosureAPI(bus, self.name) self.add_event('mycroft.stop', self.__handle_stop) self.add_event('mycroft.skill.enable_intent', self.handle_enable_intent) self.add_event('mycroft.skill.disable_intent', self.handle_disable_intent) name = 'mycroft.skills.settings.update' func = self.settings.run_poll bus.on(name, func) self.events.append((name, func))
def __init__(self, message_bus_client, config): self.bus = message_bus_client self.platform = config['enclosure'].get("platform", "unknown") self.enclosure = EnclosureAPI(self.bus) self.is_paired = False self.backend_down = False
def handle_open(): # TODO: Move this into the Enclosure (not speech client) # Reset the UI to indicate ready for speech processing EnclosureAPI(bus).reset()
def check_connection(): """ Check for network connection. If not paired trigger pairing. Runs as a Timer every second until connection is detected. """ if connected(): enclosure = EnclosureAPI(bus) if is_paired(): # Skip the sync message when unpaired because the prompt to go to # home.mycrof.ai will be displayed by the pairing skill enclosure.mouth_text(dialog.get("message_synching.clock")) # Force a sync of the local clock with the internet config = Configuration.get() platform = config['enclosure'].get("platform", "unknown") if platform in ['mycroft_mark_1', 'picroft']: bus.wait_for_response(Message('system.ntp.sync'), 'system.ntp.sync.complete', 15) if not is_paired(): try_update_system(platform) # Check if the time skewed significantly. If so, reboot skew = abs((time.monotonic() - start_ticks) - (time.time() - start_clock)) if skew > 60 * 60: # Time moved by over an hour in the NTP sync. Force a reboot to # prevent weird things from occcurring due to the 'time warp'. # data = {'utterance': dialog.get("time.changed.reboot")} bus.emit(Message("speak", data)) wait_while_speaking() # provide visual indicators of the reboot enclosure.mouth_text(dialog.get("message_rebooting")) enclosure.eyes_color(70, 65, 69) # soft gray enclosure.eyes_spin() # give the system time to finish processing enclosure messages time.sleep(1.0) # reboot bus.emit(Message("system.reboot")) return else: bus.emit(Message("enclosure.mouth.reset")) time.sleep(0.5) enclosure.eyes_color(189, 183, 107) # dark khaki enclosure.mouth_text(dialog.get("message_loading.skills")) bus.emit(Message('mycroft.internet.connected')) # check for pairing, if not automatically start pairing try: if not is_paired(ignore_errors=False): payload = {'utterances': ["pair my device"], 'lang': "en-us"} bus.emit(Message("recognizer_loop:utterance", payload)) else: from mycroft.api import DeviceApi api = DeviceApi() api.update_version() except BackendDown: data = {'utterance': dialog.get("backend.down")} bus.emit(Message("speak", data)) bus.emit(Message("backend.down")) else: thread = Timer(1, check_connection) thread.daemon = True thread.start()