Skip to content

Commit f341775

Browse files
authored
Merge pull request #36 from Garulf/add-scene-support
Add scene support
2 parents baf46fd + 49ad9a4 commit f341775

File tree

3 files changed

+32
-11
lines changed

3 files changed

+32
-11
lines changed

plugin.json

+2-2
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,9 @@
44
"Name": "HA-Commander",
55
"Description": "Search, and interact with Home Assistant using Wox or Flow Launcher.",
66
"Author": "Garulf",
7-
"Version": "4.0.0",
7+
"Version": "5.0.0",
88
"Language": "python",
99
"Website": "https://github.com/Garulf/HA-Commander",
1010
"IcoPath": "icons\\home-assistant.png",
1111
"ExecuteFileName": "main.py"
12-
}
12+
}

plugin/homeassistant.py

+29-8
Original file line numberDiff line numberDiff line change
@@ -176,7 +176,8 @@ def __init__(self, client, entity):
176176
self.entity_id = entity.get("entity_id")
177177
self.domain = self.entity_id.split(".")[0]
178178
self.name = entity.get("name")
179-
self.friendly_name = entity.get("attributes", "").get("friendly_name", "")
179+
self.friendly_name = entity.get(
180+
"attributes", "").get("friendly_name", "")
180181
self.state = entity.get("state")
181182
self.attributes = entity["attributes"]
182183
self.target = {"entity_id": self.entity_id}
@@ -225,15 +226,17 @@ def turn_on(self, **service_data) -> any:
225226
for arg in service_data:
226227
service_data[arg] = service_data[arg]
227228
service_data["entity_id"] = self.entity_id
228-
self._client.call_services("homeassistant", "turn_on", data=service_data)
229+
self._client.call_services(
230+
"homeassistant", "turn_on", data=service_data)
229231

230232
@service(icon="switch_off", score=100)
231233
def turn_off(self, **service_data) -> None:
232234
"""Turn entity off."""
233235
for arg in service_data:
234236
service_data[arg] = service_data[arg]
235237
service_data["entity_id"] = self.entity_id
236-
self._client.call_services("homeassistant", "turn_off", data=service_data)
238+
self._client.call_services(
239+
"homeassistant", "turn_off", data=service_data)
237240

238241

239242
class Light(Entity):
@@ -250,7 +253,8 @@ def __init__(self, client: Client, entity: dict) -> None:
250253
for effect in self.attributes.get("effect_list", []):
251254
setattr(self, f"{effect}", partial(self.turn_on, effect=effect))
252255
getattr(self, f"{effect}").name = effect.title()
253-
getattr(self, f"{effect}").__doc__ = f"Set light effect to {effect}."
256+
getattr(
257+
self, f"{effect}").__doc__ = f"Set light effect to {effect}."
254258
getattr(self, f"{effect}").icon = "star-circle-outline"
255259
getattr(self, f"{effect}").score = 0
256260
# print(getattr(self, f"{color}").__icon__)
@@ -336,12 +340,14 @@ def play(self) -> None:
336340
@service(icon="pause")
337341
def pause(self) -> None:
338342
"""Pause currently playing media."""
339-
self._client.call_services("media_player", "media_pause", data=self.target)
343+
self._client.call_services(
344+
"media_player", "media_pause", data=self.target)
340345

341346
@service(icon="play-pause")
342347
def play_pause(self) -> None:
343348
"""Toggle Play/Pause."""
344-
self._client.call_services("media_player", "media_play_pause", data=self.target)
349+
self._client.call_services(
350+
"media_player", "media_play_pause", data=self.target)
345351

346352

347353
class Climate(Entity):
@@ -362,7 +368,8 @@ def cycle_mode(self) -> None:
362368
mode_index = 0
363369
service_data = self.target
364370
service_data["hvac_mode"] = self.hvac_modes[mode_index]
365-
self._client.call_services("climate", "set_hvac_mode", data=service_data)
371+
self._client.call_services(
372+
"climate", "set_hvac_mode", data=service_data)
366373

367374

368375
class Script(Entity):
@@ -413,7 +420,8 @@ def snapshot(self) -> None:
413420
@service(icon="television")
414421
def view(self) -> None:
415422
"""View a still from this Camera entity."""
416-
webbrowser.open(f'{self._client._url}{self.attributes["entity_picture"]}')
423+
webbrowser.open(
424+
f'{self._client._url}{self.attributes["entity_picture"]}')
417425

418426

419427
class InputSelect(BaseEntity):
@@ -467,3 +475,16 @@ def __init__(self, client: Client, entity: dict) -> None:
467475
getattr(self, entity).__doc__ = 'Toggle entity "{}"'.format(entity)
468476
getattr(self, entity).icon = "checkbox-multiple-blank"
469477
getattr(self, entity)._service = True
478+
479+
480+
class Scene(Entity):
481+
def __init__(self, client: Client, entity: dict) -> None:
482+
super().__init__(client, entity)
483+
484+
def _default_action(self):
485+
self.activate()
486+
487+
@service(icon="play")
488+
def activate(self) -> None:
489+
"""Activate scene."""
490+
self._client.call_services("scene", "turn_on", data=self.target)

requirements.txt

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
11
requests==2.25.1
2-
flox-lib==0.18.0
2+
flox-lib==0.18.1

0 commit comments

Comments
 (0)