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 37 additions and 12 deletions

View File

@ -2,15 +2,15 @@
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
To use this extension, you need the Python `requests` library:
```
```bash
pip install requests
```
@ -19,8 +19,26 @@ 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.
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}
}
```
## Usage
`<trigger> <entity search>`
```
<trigger> <entity search>
```
You can see the actions by pressing the `alt` key.
@ -28,7 +46,6 @@ You can see the actions by pressing the `alt` key.
- renew icons (.svg)
- test more device classes and adjust which service to call
- sort items: name matching first
## Contributing

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&nbsp;&nbsp;|&nbsp;&nbsp;%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.