Skip to content

Commit

Permalink
Add function to list tracker entities and register them.
Browse files Browse the repository at this point in the history
  • Loading branch information
Tony763 committed Oct 29, 2021
1 parent 6994339 commit f9e2428
Show file tree
Hide file tree
Showing 8 changed files with 68 additions and 14 deletions.
25 changes: 23 additions & 2 deletions __init__.py
@@ -1,6 +1,8 @@
"""
Home Assistant skill
""" # pylint: disable=C0103
from os.path import join as pth_join

from mycroft import MycroftSkill, intent_handler
from mycroft.skills.core import FallbackSkill
from mycroft.util.format import nice_number
Expand Down Expand Up @@ -76,10 +78,29 @@ def _setup(self, force=False):
self.enable_fallback = \
self.settings.get('enable_fallback')

# Register tracker entities
self._list_tracker_entities()

def _force_setup(self):
self.log.debug('Creating a new HomeAssistant-Client')
self._setup(True)

def _list_tracker_entities(self):
"""List tracker entities.
Add them to entity file and registry it so
Padatious react only to known entities.
Should fix conflict with Where is skill.
"""
types = ['device_tracker']
entities = self.ha_client.list_entities(types)

if entities:
entity_file = pth_join(self.root_dir, 'vocab', 'tracker.entity')
with open(entity_file, 'w', encoding='utf8') as voc_file:
voc_file.write('\n'.join(entities))
self.register_entity_file('tracker.entity')

def initialize(self):
"""Initialize skill, set language and priority."""
# pylint: disable=W0201
Expand Down Expand Up @@ -249,8 +270,8 @@ def handle_automation_intent(self, message):
@intent_handler('tracker.intent')
def handle_tracker_intent(self, message):
"""Handle tracker intent."""
self.log.debug("Turn on intent on entity: %s", message.data.get("entity"))
message.data["Entity"] = message.data.get("entity")
self.log.debug("Turn on intent on entity: %s", message.data.get("tracker"))
message.data["Entity"] = message.data.get("tracker")
self._handle_tracker(message)

@intent_handler('set.climate.intent')
Expand Down
28 changes: 28 additions & 0 deletions ha_client.py
Expand Up @@ -196,6 +196,34 @@ def find_entity_attr(self, entity):
return entity_attr
return None

def list_entities(self, types):
"""List all entities matching domains used within our skill
and return them as list.
Throws request Exceptions
(Subclasses of ConnectionError or RequestException,
raises HTTPErrors if non-Ok status code)
"""

json_data = self._get_state()
entities = []
if json_data:
for state in json_data:
try:
entity_id = state['entity_id'].split(".")
domain = entity_id[0]
entity = entity_id[1]
if domain in types:
"""Domain of Entity is in handled types.
Add Entity and its friendly name to list.
"""
entities.append(entity)
entities.append(state['attributes']
['friendly_name'].lower())
except KeyError:
pass
return entities

def execute_service(self, domain, service, data):
"""Execute service at HAServer
Expand Down
5 changes: 5 additions & 0 deletions test/behave/12_tracker.feature
Expand Up @@ -4,3 +4,8 @@ Feature: tracker
Given an English speaking user
When the user says "give me location of the mark"
Then mycroft reply should contain "home"

Scenario: tracker - where skill conflict
Given an English speaking user
When the user says "give me location of the Czech Republic"
Then "skill-homeassistant" should not reply
8 changes: 4 additions & 4 deletions vocab/cs-cz/tracker.intent
@@ -1,5 +1,5 @@
Jaká je pozice {Entity}.
Kde (je| se nachází) {Entity}.
Můžeš (prosím|) (najít|vyhledat) {Entity} (please|).
Rád bych (našel|vyhledal|lokalizoval) {Entity}
Jaká je pozice {Tracker}.
Kde (je| se nachází) {Tracker}.
Můžeš (prosím|) (najít|vyhledat) {Tracker} (prosím|).
Rád bych (našel|vyhledal|lokalizoval) {Tracker}

4 changes: 2 additions & 2 deletions vocab/de-de/tracker.intent
@@ -1,2 +1,2 @@
wo ist (der|die|das|) {entity}.
gib mit den standort von {entity}
wo ist (der|die|das|) {Tracker}.
gib mit den standort von {Tracker}
4 changes: 2 additions & 2 deletions vocab/en-us/tracker.intent
@@ -1,2 +1,2 @@
Where is (the|) {Entity}.
(Give|Find) me (location|position) of (the|) {Entity}.
Where is (the|) {Tracker}.
(Give|Find) me (location|position) of (the|) {Tracker}.
4 changes: 2 additions & 2 deletions vocab/fr-fr/tracker.intent
@@ -1,2 +1,2 @@
où se trouve {Entity}.
(donne|trouve) la (localisation|position) (de|du) {Entity}.
où se trouve {Tracker}.
(donne|trouve) la (localisation|position) (de|du) {Tracker}.
4 changes: 2 additions & 2 deletions vocab/it-it/tracker.intent
@@ -1,2 +1,2 @@
(Dove|Dov') è (il|la|lo|) {Entity}
(Dammi|Trova) (la|) (positione) (di|del|della|degli|) {Entity}.
(Dove|Dov') è (il|la|lo|) {Tracker}
(Dammi|Trova) (la|) (positione) (di|del|della|degli|) {Tracker}.

0 comments on commit f9e2428

Please sign in to comment.