Compare commits

..

8 Commits

Author SHA1 Message Date
1114014bc9 Show connection errors in Albert log 2022-01-29 09:49:29 +01:00
31dfa017cf Add demo video 2021-01-25 13:07:13 +01:00
7a2f84dc25 Move unavailable devices to end of list 2021-01-14 18:17:43 +01:00
e4439cb176 Add script class to toggle list 2021-01-13 15:05:09 +01:00
e8d6057264 Clean up 2021-01-09 11:53:39 +01:00
9cf9bc11d3 Add trigger action to automation class 2021-01-09 11:51:15 +01:00
3f06c92abb Fix cover api url 2021-01-09 11:46:26 +01:00
5703fff482 Add sorting order to README 2021-01-09 11:46:04 +01:00
3 changed files with 27 additions and 10 deletions

View File

@ -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.
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).
![Demo](./ha_demo.gif)
![Demo](./ha_demo.mp4)
## Requirements
@ -19,7 +19,16 @@ pip install requests
You need to specify the URL and [API Key](https://developers.home-assistant.io/docs/api/rest/¦) of your Home Assistant instance in the configuration file (e.g. location: `$HOME/.config/albert/homeassistant_config.json`).
You can generate a new long lived API Key by clicking your name in the bottom left in the Home Assistant UI.
The item order is based on the entity class. Lights and switches are shown first, then scenes etc. You can change the order in the configuration file with `sort_order`. See the default sorting order below:
Example:
```json
{
"hass_url": "http://192.168.1.2:8123",
"hass_key": "s1GeOobviEbZS3OjfkYVmOQDMbCRIH0kCtisGVi2EQoKbDeqq"
}
```
The item order is based on the entity class. Lights and switches are shown first, then scenes and groups etc. You can change the order in the configuration file with `sort_order`. See the default sorting order below:
```json
{ ...
sort_order: {"light": 1, "switch": 1, "scene": 2, "group": 2, "automation": 3}

View File

@ -34,7 +34,7 @@ icon_files = {
"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
@ -124,12 +124,12 @@ def showEntities(query):
entity_query_list = query.string.split()
# query entities from HASS
# Query entities from HASS
try:
response = requests.get(config["state_query"], headers=config["headers"])
response.raise_for_status()
except requests.exceptions.RequestException as error:
critical(str(error))
return Item(id=__title__,
icon=os.path.dirname(__file__) + "/" + icon_files["logo"],
text="Error while getting entity states from Home Assistant",
@ -193,7 +193,12 @@ def showEntities(query):
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__,
icon=entity_icon,
text=entity["attributes"]["friendly_name"],
@ -201,7 +206,7 @@ def showEntities(query):
subtext="%s  |  %s" % (state_colored, entity_class.capitalize())
)
# add actions depending on class
# Add actions depending on class
if entity_class in toggle_types:
item.addAction(FuncAction("Toggle", lambda d=data: sendCommand(d, "homeassistant/toggle")))
@ -211,13 +216,16 @@ def showEntities(query):
if entity_class == "cover":
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"]))
results.append(item)
# no entity found
# No entity found
if len(results) == 0:
results.append(
Item(id=__title__,

BIN
ha_demo.mp4 Normal file

Binary file not shown.