Compare commits
8 Commits
f13d3d2d9b
...
master
Author | SHA1 | Date | |
---|---|---|---|
1114014bc9 | |||
31dfa017cf | |||
7a2f84dc25 | |||
e4439cb176 | |||
e8d6057264 | |||
9cf9bc11d3 | |||
3f06c92abb | |||
5703fff482 |
@ -2,9 +2,9 @@
|
|||||||
|
|
||||||
An [Albert](https://albertlauncher.github.io/) extention to view and control devices in your [HomeAssistant](https://www.home-assistant.io/) instance.
|
An [Albert](https://albertlauncher.github.io/) extention to view and control devices in your [HomeAssistant](https://www.home-assistant.io/) instance.
|
||||||
|
|
||||||
This extension is heavily inspired by the home assistant extesnsion for ulauncher from [qcasey](https://github.com/qcasey/ulauncher-homeassistant).
|
This extension is heavily inspired by the home assistant extension for ulauncher from [qcasey](https://github.com/qcasey/ulauncher-homeassistant).
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
## Requirements
|
## Requirements
|
||||||
|
|
||||||
@ -20,10 +20,10 @@ You need to specify the URL and [API Key](https://developers.home-assistant.io/d
|
|||||||
You can generate a new long lived API Key by clicking your name in the bottom left in the Home Assistant UI.
|
You can generate a new long lived API Key by clicking your name in the bottom left in the Home Assistant UI.
|
||||||
|
|
||||||
Example:
|
Example:
|
||||||
```
|
```json
|
||||||
{
|
{
|
||||||
"hass_url": "http://192.168.1.2:8123",
|
"hass_url": "http://192.168.1.2:8123",
|
||||||
"hass_key": "s1GeOobviEbg019H32dTs973GU2sJ3zBIMETxKSLCzoJulgljXB31m1aqq2GFWe2TsaLRxYo0J08FHxEdXxzSzNJMNZS3OjfkYVmOQDMbCRIH0kCtisGVi2EQoKbDeqq"
|
"hass_key": "s1GeOobviEbZS3OjfkYVmOQDMbCRIH0kCtisGVi2EQoKbDeqq"
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
22
__init__.py
22
__init__.py
@ -34,7 +34,7 @@ icon_files = {
|
|||||||
"switch": "icons/switch.png",
|
"switch": "icons/switch.png",
|
||||||
}
|
}
|
||||||
|
|
||||||
toggle_types = ["light", "switch", "automation", "group", "input_boolean", "climate", "camera"]
|
toggle_types = ["light", "switch", "automation", "group", "script", "input_boolean", "climate", "camera"]
|
||||||
on_off_types = ["scene", "media_player"] # use turn_{on,off} instead of toggle
|
on_off_types = ["scene", "media_player"] # use turn_{on,off} instead of toggle
|
||||||
|
|
||||||
|
|
||||||
@ -124,12 +124,12 @@ def showEntities(query):
|
|||||||
|
|
||||||
entity_query_list = query.string.split()
|
entity_query_list = query.string.split()
|
||||||
|
|
||||||
|
# Query entities from HASS
|
||||||
# query entities from HASS
|
|
||||||
try:
|
try:
|
||||||
response = requests.get(config["state_query"], headers=config["headers"])
|
response = requests.get(config["state_query"], headers=config["headers"])
|
||||||
response.raise_for_status()
|
response.raise_for_status()
|
||||||
except requests.exceptions.RequestException as error:
|
except requests.exceptions.RequestException as error:
|
||||||
|
critical(str(error))
|
||||||
return Item(id=__title__,
|
return Item(id=__title__,
|
||||||
icon=os.path.dirname(__file__) + "/" + icon_files["logo"],
|
icon=os.path.dirname(__file__) + "/" + icon_files["logo"],
|
||||||
text="Error while getting entity states from Home Assistant",
|
text="Error while getting entity states from Home Assistant",
|
||||||
@ -193,7 +193,12 @@ def showEntities(query):
|
|||||||
entity["state"].capitalize()
|
entity["state"].capitalize()
|
||||||
)
|
)
|
||||||
|
|
||||||
# build item for list
|
if state == "unavailable" and "unavailable" not in entity:
|
||||||
|
entity["unavailable"] = True
|
||||||
|
entities.append(entity)
|
||||||
|
continue
|
||||||
|
|
||||||
|
# Build item for list
|
||||||
item = Item(id=__title__,
|
item = Item(id=__title__,
|
||||||
icon=entity_icon,
|
icon=entity_icon,
|
||||||
text=entity["attributes"]["friendly_name"],
|
text=entity["attributes"]["friendly_name"],
|
||||||
@ -201,7 +206,7 @@ def showEntities(query):
|
|||||||
subtext="%s | %s" % (state_colored, entity_class.capitalize())
|
subtext="%s | %s" % (state_colored, entity_class.capitalize())
|
||||||
)
|
)
|
||||||
|
|
||||||
# add actions depending on class
|
# Add actions depending on class
|
||||||
if entity_class in toggle_types:
|
if entity_class in toggle_types:
|
||||||
item.addAction(FuncAction("Toggle", lambda d=data: sendCommand(d, "homeassistant/toggle")))
|
item.addAction(FuncAction("Toggle", lambda d=data: sendCommand(d, "homeassistant/toggle")))
|
||||||
|
|
||||||
@ -211,13 +216,16 @@ def showEntities(query):
|
|||||||
|
|
||||||
if entity_class == "cover":
|
if entity_class == "cover":
|
||||||
open_or_close = "open" if state != "open" else "close"
|
open_or_close = "open" if state != "open" else "close"
|
||||||
item.addAction(FuncAction("%s Cover" % (open_or_close.capitalize()), lambda d=data: sendCommand(d, "homeassistant/cover/%s_cover") % (open_or_close)))
|
item.addAction(FuncAction("%s Cover" % (open_or_close.capitalize()), lambda d=data: sendCommand(d, "cover/%s_cover") % (open_or_close)))
|
||||||
|
|
||||||
|
if entity_class == "automation":
|
||||||
|
item.addAction(FuncAction("Trigger", lambda d=data: sendCommand(d, "automation/trigger")))
|
||||||
|
|
||||||
item.addAction(ClipAction("Copy ID", entity["entity_id"]))
|
item.addAction(ClipAction("Copy ID", entity["entity_id"]))
|
||||||
|
|
||||||
results.append(item)
|
results.append(item)
|
||||||
|
|
||||||
# no entity found
|
# No entity found
|
||||||
if len(results) == 0:
|
if len(results) == 0:
|
||||||
results.append(
|
results.append(
|
||||||
Item(id=__title__,
|
Item(id=__title__,
|
||||||
|
BIN
ha_demo.mp4
Normal file
BIN
ha_demo.mp4
Normal file
Binary file not shown.
Reference in New Issue
Block a user