Compare commits

..

1 Commits

Author SHA1 Message Date
8bef861cdb Add sorting order to README 2021-01-08 12:37:11 +01:00
3 changed files with 13 additions and 31 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 extension for ulauncher from [qcasey](https://github.com/qcasey/ulauncher-homeassistant).
This extension is heavily inspired by the home assistant extesnsion for ulauncher from [qcasey](https://github.com/qcasey/ulauncher-homeassistant).
![Demo](./ha_demo.mp4)
![Demo](./ha_demo.gif)
## Requirements
To use this extension, you need the Python `requests` library:
```bash
```
pip install requests
```
@ -19,16 +19,7 @@ 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:
The item order is based on the entity class. Lights and switches are show first, then scenes etc. You can change the order in the configuration file. See the default sorting order below:
```json
{ ...
sort_order: {"light": 1, "switch": 1, "scene": 2, "group": 2, "automation": 3}
@ -36,9 +27,7 @@ The item order is based on the entity class. Lights and switches are shown first
```
## Usage
```
<trigger> <entity search>
```
`<trigger> <entity search>`
You can see the actions by pressing the `alt` key.
@ -46,6 +35,7 @@ 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", "script", "input_boolean", "climate", "camera"]
toggle_types = ["light", "switch", "automation", "group", "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,12 +193,7 @@ def showEntities(query):
entity["state"].capitalize()
)
if state == "unavailable" and "unavailable" not in entity:
entity["unavailable"] = True
entities.append(entity)
continue
# Build item for list
# build item for list
item = Item(id=__title__,
icon=entity_icon,
text=entity["attributes"]["friendly_name"],
@ -206,7 +201,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")))
@ -216,16 +211,13 @@ 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, "cover/%s_cover") % (open_or_close)))
if entity_class == "automation":
item.addAction(FuncAction("Trigger", lambda d=data: sendCommand(d, "automation/trigger")))
item.addAction(FuncAction("%s Cover" % (open_or_close.capitalize()), lambda d=data: sendCommand(d, "homeassistant/cover/%s_cover") % (open_or_close)))
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__,

Binary file not shown.