mirror of
https://github.com/JarvyJ/HomeIntent.git
synced 2022-02-11 01:01:05 +03:00
Home Intent: HA API translation support (#279)
* HA API translation support at API layer * fix for empty list on call_service with added delay * removed debugging print statements * Update README.md closes #274, #275
This commit is contained in:
@@ -53,8 +53,8 @@ class HomeAssistantSettings(BaseModel):
|
||||
|
||||
|
||||
class HomeAssistantComponent:
|
||||
def __init__(self, config: HomeAssistantSettings):
|
||||
self.api = HomeAssistantAPI(config.url, config.bearer_token)
|
||||
def __init__(self, config: HomeAssistantSettings, language: str):
|
||||
self.api = HomeAssistantAPI(config.url, config.bearer_token, language)
|
||||
self.services = self.api.get("/api/services")
|
||||
all_entities = self.api.get("/api/states")
|
||||
self.entities = [x for x in all_entities if x["entity_id"] not in config.ignore_entities]
|
||||
@@ -67,7 +67,9 @@ class HomeAssistantComponent:
|
||||
def setup(home_intent):
|
||||
# only needed if there are additional settings!
|
||||
config = home_intent.get_config(HomeAssistantSettings)
|
||||
home_assistant_component = HomeAssistantComponent(config)
|
||||
home_assistant_component = HomeAssistantComponent(
|
||||
config, home_intent.settings.home_intent.language
|
||||
)
|
||||
|
||||
if "climate" in home_assistant_component.domains and "climate" not in config.ignore_domains:
|
||||
climate = home_intent.import_module(f"{__name__}.climate")
|
||||
|
||||
@@ -1,3 +1,7 @@
|
||||
import json
|
||||
from pathlib import Path
|
||||
from time import sleep
|
||||
|
||||
import requests
|
||||
from requests import Session
|
||||
from requests.adapters import HTTPAdapter
|
||||
@@ -9,7 +13,7 @@ class HomeAssistantAPIException(Exception):
|
||||
|
||||
|
||||
class HomeAssistantAPI:
|
||||
def __init__(self, url, bearer_token):
|
||||
def __init__(self, url, bearer_token, language):
|
||||
self.session = Session()
|
||||
self.session.headers.update(
|
||||
{
|
||||
@@ -23,6 +27,20 @@ class HomeAssistantAPI:
|
||||
self.session.mount("http://", HTTPAdapter(max_retries=retries))
|
||||
self.session.mount("https://", HTTPAdapter(max_retries=retries))
|
||||
|
||||
# Setup the language stuff, the HA API returns state in English, so we need to translate it on our end
|
||||
# to make life a bit easier
|
||||
self.language = language
|
||||
api_translation_file = Path(__file__).parent / f"./api_translations/{language}.json"
|
||||
if language != "en":
|
||||
if api_translation_file.is_file():
|
||||
self.translation = json.load(api_translation_file.open())
|
||||
else:
|
||||
raise HomeAssistantAPIException(
|
||||
f"API Translation file for language '{language}' doesn't exist. "
|
||||
f"You will need to create one in components/home_assistant/api_translations/{language}.json"
|
||||
)
|
||||
|
||||
# Make a test call to see if everything works
|
||||
try:
|
||||
self.get("/api/")
|
||||
except requests.exceptions.ConnectionError:
|
||||
@@ -43,7 +61,26 @@ class HomeAssistantAPI:
|
||||
response.raise_for_status()
|
||||
return response.json()
|
||||
|
||||
def get_entity(self, entity):
|
||||
def get_entity(self, entity, service_response=None):
|
||||
entity = self._get_entity(entity, service_response)
|
||||
|
||||
if self.language != "en":
|
||||
if "state" in entity:
|
||||
entity["state"] = self.translation[entity["state"]]
|
||||
|
||||
return entity
|
||||
|
||||
def _get_entity(self, entity, service_response=None):
|
||||
if isinstance(service_response, list):
|
||||
# call_service in HA returns a list of entities.
|
||||
# There's a bug where sometimes it returns an empty list
|
||||
# you have to wait ~1s to actually get the new state
|
||||
if service_response:
|
||||
try:
|
||||
return _extract_from_list(service_response, entity)
|
||||
except EntityIdNotFoundInList:
|
||||
pass
|
||||
sleep(1)
|
||||
return self.get(f"/api/states/{entity}")
|
||||
|
||||
def post(self, url, body):
|
||||
@@ -53,3 +90,15 @@ class HomeAssistantAPI:
|
||||
|
||||
def call_service(self, domain, service, body):
|
||||
return self.post(f"/api/services/{domain}/{service}", body)
|
||||
|
||||
|
||||
class EntityIdNotFoundInList(LookupError):
|
||||
pass
|
||||
|
||||
|
||||
def _extract_from_list(service_response, entity_id):
|
||||
for entity in service_response:
|
||||
if entity["entity_id"] == entity_id:
|
||||
return entity
|
||||
|
||||
raise EntityIdNotFoundInList()
|
||||
|
||||
@@ -0,0 +1,5 @@
|
||||
The Home Assistant API returns certain attributes/states in english, that a user may have to translate across multiple components. The json files in this directory translate the specific english words in API responses to the corresponding languages.
|
||||
|
||||
This includes things like "on" and "off" as well as "high", "medium", and "low".
|
||||
|
||||
The json file will get auto-loaded based on language and is used in the HA API code to handle the translation.
|
||||
@@ -0,0 +1,4 @@
|
||||
{
|
||||
"on": "an",
|
||||
"off": "aus"
|
||||
}
|
||||
@@ -106,20 +106,20 @@ class BaseClimate:
|
||||
return self._turn_off(climate)
|
||||
|
||||
def _turn_off(self, climate):
|
||||
self.ha.api.call_service("climate", "turn_off", {"entity_id": climate})
|
||||
response = self.ha.api.get_entity(climate)
|
||||
response = self.ha.api.call_service("climate", "turn_off", {"entity_id": climate})
|
||||
response = self.ha.api.get_entity(climate, response)
|
||||
return response
|
||||
|
||||
def _turn_on(self, climate):
|
||||
self.ha.api.call_service("climate", "turn_on", {"entity_id": climate})
|
||||
response = self.ha.api.get_entity(climate)
|
||||
response = self.ha.api.call_service("climate", "turn_on", {"entity_id": climate})
|
||||
response = self.ha.api.get_entity(climate, response)
|
||||
return response
|
||||
|
||||
def _set_hvac_mode(self, climate, climate_hvac_mode):
|
||||
self.ha.api.call_service(
|
||||
response = self.ha.api.call_service(
|
||||
"climate", "set_hvac_mode", {"entity_id": climate, "hvac_mode": climate_hvac_mode}
|
||||
)
|
||||
response = self.ha.api.get_entity(climate)
|
||||
response = self.ha.api.get_entity(climate, response)
|
||||
return response
|
||||
|
||||
def _set_target_temperature(self, climate_target_temperature_entity, temperature: float):
|
||||
@@ -127,12 +127,12 @@ class BaseClimate:
|
||||
SupportedFeatures.SUPPORT_TARGET_TEMPERATURE
|
||||
in self.climate_device_features[climate_target_temperature_entity]
|
||||
):
|
||||
self.ha.api.call_service(
|
||||
response = self.ha.api.call_service(
|
||||
"climate",
|
||||
"set_temperature",
|
||||
{"entity_id": climate_target_temperature_entity, "temperature": temperature},
|
||||
)
|
||||
response = self.ha.api.get_entity(climate_target_temperature_entity)
|
||||
response = self.ha.api.get_entity(climate_target_temperature_entity, response)
|
||||
return response
|
||||
|
||||
def _set_target_temperature_high(
|
||||
@@ -143,7 +143,7 @@ class BaseClimate:
|
||||
in self.climate_device_features[climate_target_temperature_range_entity]
|
||||
):
|
||||
response = self.ha.api.get_entity(climate_target_temperature_range_entity)
|
||||
self.ha.api.call_service(
|
||||
response = self.ha.api.call_service(
|
||||
"climate",
|
||||
"set_temperature",
|
||||
{
|
||||
@@ -152,7 +152,7 @@ class BaseClimate:
|
||||
"target_temp_high": temperature,
|
||||
},
|
||||
)
|
||||
response = self.ha.api.get_entity(climate_target_temperature_range_entity)
|
||||
response = self.ha.api.get_entity(climate_target_temperature_range_entity, response)
|
||||
return response
|
||||
|
||||
def _set_target_temperature_low(
|
||||
@@ -163,7 +163,7 @@ class BaseClimate:
|
||||
in self.climate_device_features[climate_target_temperature_range_entity]
|
||||
):
|
||||
response = self.ha.api.get_entity(climate_target_temperature_range_entity)
|
||||
self.ha.api.call_service(
|
||||
response = self.ha.api.call_service(
|
||||
"climate",
|
||||
"set_temperature",
|
||||
{
|
||||
@@ -172,7 +172,7 @@ class BaseClimate:
|
||||
"target_temp_high": response["attributes"]["target_temp_high"],
|
||||
},
|
||||
)
|
||||
response = self.ha.api.get_entity(climate_target_temperature_range_entity)
|
||||
response = self.ha.api.get_entity(climate_target_temperature_range_entity, response)
|
||||
return response
|
||||
|
||||
def _set_humidity(self, climate_target_humidity_entity, humidity: int):
|
||||
@@ -180,12 +180,12 @@ class BaseClimate:
|
||||
SupportedFeatures.SUPPORT_TARGET_HUMIDITY
|
||||
in self.climate_device_features[climate_target_humidity_entity]
|
||||
):
|
||||
self.ha.api.call_service(
|
||||
response = self.ha.api.call_service(
|
||||
"climate",
|
||||
"set_humidity",
|
||||
{"entity_id": climate_target_humidity_entity, "humidity": humidity},
|
||||
)
|
||||
response = self.ha.api.get_entity(climate_target_humidity_entity)
|
||||
response = self.ha.api.get_entity(climate_target_humidity_entity, response)
|
||||
return response
|
||||
|
||||
def _set_preset_mode(self, climate_preset_mode_entity, climate_preset_mode):
|
||||
@@ -193,12 +193,12 @@ class BaseClimate:
|
||||
SupportedFeatures.SUPPORT_PRESET_MODE
|
||||
in self.climate_device_features[climate_preset_mode_entity]
|
||||
):
|
||||
self.ha.api.call_service(
|
||||
response = self.ha.api.call_service(
|
||||
"climate",
|
||||
"set_preset_mode",
|
||||
{"entity_id": climate_preset_mode_entity, "preset_mode": climate_preset_mode},
|
||||
)
|
||||
response = self.ha.api.get_entity(climate_preset_mode_entity)
|
||||
response = self.ha.api.get_entity(climate_preset_mode_entity, response)
|
||||
return response
|
||||
|
||||
def _toggle_aux_heat(self, climate_aux_heat_entity):
|
||||
@@ -209,15 +209,15 @@ class BaseClimate:
|
||||
return self._turn_off(climate_aux_heat_entity)
|
||||
|
||||
def _turn_aux_off(self, climate_aux_heat_entity):
|
||||
self.ha.api.call_service(
|
||||
response = self.ha.api.call_service(
|
||||
"climate", "set_aux_heat", {"entity_id": climate_aux_heat_entity, "aux_heat": False}
|
||||
)
|
||||
response = self.ha.api.get_entity(climate_aux_heat_entity)
|
||||
response = self.ha.api.get_entity(climate_aux_heat_entity, response)
|
||||
return response
|
||||
|
||||
def _turn_aux_on(self, climate_aux_heat_entity):
|
||||
self.ha.api.call_service(
|
||||
response = self.ha.api.call_service(
|
||||
"climate", "set_aux_heat", {"entity_id": climate_aux_heat_entity, "aux_heat": True}
|
||||
)
|
||||
response = self.ha.api.get_entity(climate_aux_heat_entity)
|
||||
response = self.ha.api.get_entity(climate_aux_heat_entity, response)
|
||||
return response
|
||||
|
||||
@@ -94,59 +94,69 @@ class BaseCover:
|
||||
|
||||
def _open_cover(self, cover_open):
|
||||
if SupportedFeatures.SUPPORT_OPEN in self.cover_features[cover_open]:
|
||||
self.ha.api.call_service("cover", "open_cover", {"entity_id": cover_open})
|
||||
response = self.ha.api.call_service("cover", "open_cover", {"entity_id": cover_open})
|
||||
elif SupportedFeatures.SUPPORT_OPEN_TILT in self.cover_features[cover_open]:
|
||||
self.ha.api.call_service("cover", "open_cover_tilt", {"entity_id": cover_open})
|
||||
response = self.ha.api.get_entity(cover_open)
|
||||
response = self.ha.api.call_service(
|
||||
"cover", "open_cover_tilt", {"entity_id": cover_open}
|
||||
)
|
||||
response = self.ha.api.get_entity(cover_open, response)
|
||||
return response
|
||||
|
||||
def _close_cover(self, cover_close):
|
||||
if SupportedFeatures.SUPPORT_CLOSE in self.cover_features[cover_close]:
|
||||
self.ha.api.call_service("cover", "close_cover", {"entity_id": cover_close})
|
||||
response = self.ha.api.call_service("cover", "close_cover", {"entity_id": cover_close})
|
||||
elif SupportedFeatures.SUPPORT_CLOSE_TILT in self.cover_features[cover_close]:
|
||||
self.ha.api.call_service("cover", "close_cover_tilt", {"entity_id": cover_close})
|
||||
response = self.ha.api.get_entity(cover_close)
|
||||
response = self.ha.api.call_service(
|
||||
"cover", "close_cover_tilt", {"entity_id": cover_close}
|
||||
)
|
||||
response = self.ha.api.get_entity(cover_close, response)
|
||||
return response
|
||||
|
||||
def _stop_cover(self, cover_stop):
|
||||
if SupportedFeatures.SUPPORT_STOP in self.cover_features[cover_stop]:
|
||||
self.ha.api.call_service("cover", "stop_cover", {"entity_id": cover_stop})
|
||||
response = self.ha.api.call_service("cover", "stop_cover", {"entity_id": cover_stop})
|
||||
if SupportedFeatures.SUPPORT_STOP_TILT in self.cover_features[cover_stop]:
|
||||
self.ha.api.call_service("cover", "stop_cover_tilt", {"entity_id": cover_stop})
|
||||
response = self.ha.api.get_entity(cover_stop)
|
||||
response = self.ha.api.call_service(
|
||||
"cover", "stop_cover_tilt", {"entity_id": cover_stop}
|
||||
)
|
||||
response = self.ha.api.get_entity(cover_stop, response)
|
||||
return response
|
||||
|
||||
def _open_cover_tilt(self, cover_open_tilt):
|
||||
self.ha.api.call_service("cover", "open_cover_tilt", {"entity_id": cover_open_tilt})
|
||||
response = self.ha.api.get_entity(cover_open_tilt)
|
||||
response = self.ha.api.call_service(
|
||||
"cover", "open_cover_tilt", {"entity_id": cover_open_tilt}
|
||||
)
|
||||
response = self.ha.api.get_entity(cover_open_tilt, response)
|
||||
return response
|
||||
|
||||
def _close_cover_tilt(self, cover_close_tilt):
|
||||
self.ha.api.call_service("cover", "close_cover_tilt", {"entity_id": cover_close_tilt})
|
||||
response = self.ha.api.get_entity(cover_close_tilt)
|
||||
response = self.ha.api.call_service(
|
||||
"cover", "close_cover_tilt", {"entity_id": cover_close_tilt}
|
||||
)
|
||||
response = self.ha.api.get_entity(cover_close_tilt, response)
|
||||
return response
|
||||
|
||||
def _set_cover_position(self, cover_set_position, cover_positions):
|
||||
if SupportedFeatures.SUPPORT_SET_POSITION:
|
||||
self.ha.api.call_service(
|
||||
response = self.ha.api.call_service(
|
||||
"cover",
|
||||
"set_cover_position",
|
||||
{"entity_id": cover_set_position, "position": cover_positions},
|
||||
)
|
||||
elif SupportedFeatures.SUPPORT_SET_TILT_POSITION:
|
||||
self.ha.api.call_service(
|
||||
response = self.ha.api.call_service(
|
||||
"cover",
|
||||
"set_cover_tilt_position",
|
||||
{"entity_id": cover_set_position, "position": cover_positions},
|
||||
)
|
||||
response = self.ha.api.get_entity(cover_set_position)
|
||||
response = self.ha.api.get_entity(cover_set_position, response)
|
||||
return response
|
||||
|
||||
def _set_cover_tilt_position(self, cover_set_tilt_position, cover_positions):
|
||||
self.ha.api.call_service(
|
||||
response = self.ha.api.call_service(
|
||||
"cover",
|
||||
"set_cover_tilt_position",
|
||||
{"entity_id": cover_set_tilt_position, "tilt_position": cover_positions},
|
||||
)
|
||||
response = self.ha.api.get_entity(cover_set_tilt_position)
|
||||
response = self.ha.api.get_entity(cover_set_tilt_position, response)
|
||||
return response
|
||||
|
||||
@@ -75,55 +75,65 @@ class BaseFan:
|
||||
return slots
|
||||
|
||||
def _toggle_fan(self, fan):
|
||||
self.ha.api.call_service("fan", "toggle", {"entity_id": fan})
|
||||
response = self.ha.api.get_entity(fan)
|
||||
response = self.ha.api.call_service("fan", "toggle", {"entity_id": fan})
|
||||
response = self.ha.api.get_entity(fan, response)
|
||||
return response
|
||||
|
||||
def _turn_off(self, fan):
|
||||
self.ha.api.call_service("fan", "turn_off", {"entity_id": fan})
|
||||
response = self.ha.api.get_entity(fan)
|
||||
response = self.ha.api.call_service("fan", "turn_off", {"entity_id": fan})
|
||||
response = self.ha.api.get_entity(fan, response)
|
||||
return response
|
||||
|
||||
def _turn_on(self, fan):
|
||||
self.ha.api.call_service("fan", "turn_on", {"entity_id": fan})
|
||||
response = self.ha.api.get_entity(fan)
|
||||
response = self.ha.api.call_service("fan", "turn_on", {"entity_id": fan})
|
||||
response = self.ha.api.get_entity(fan, response)
|
||||
return response
|
||||
|
||||
def _oscillate_fan(self, oscillating_fan):
|
||||
response = self.ha.api.get_entity(oscillating_fan)
|
||||
oscillation_change = not response["attributes"]["oscillating"]
|
||||
self.ha.api.call_service(
|
||||
"fan", "oscillate", {"entity_id": oscillating_fan, "oscillating": oscillation_change,},
|
||||
response = self.ha.api.call_service(
|
||||
"fan",
|
||||
"oscillate",
|
||||
{
|
||||
"entity_id": oscillating_fan,
|
||||
"oscillating": oscillation_change,
|
||||
},
|
||||
)
|
||||
response = self.ha.api.get_entity(oscillating_fan)
|
||||
response = self.ha.api.get_entity(oscillating_fan, response)
|
||||
return response
|
||||
|
||||
def _set_preset(self, preset_fan, preset_mode):
|
||||
self.ha.api.call_service(
|
||||
response = self.ha.api.call_service(
|
||||
"fan", "set_preset_mode", {"entity_id": preset_fan, "preset_mode": preset_mode}
|
||||
)
|
||||
response = self.ha.api.get_entity(preset_fan)
|
||||
return f"Setting the {response['attributes']['friendly_name']} to {preset_mode}"
|
||||
response = self.ha.api.get_entity(preset_fan, response)
|
||||
return response
|
||||
|
||||
def _reverse_airflow(self, directional_fan):
|
||||
response = self.ha.api.get_entity(directional_fan)
|
||||
forward_or_reverse = (
|
||||
"reverse" if response["attributes"]["direction"] == "reverse" else "forward"
|
||||
)
|
||||
self.ha.api.call_service(
|
||||
response = self.ha.api.call_service(
|
||||
"fan",
|
||||
"set_direction",
|
||||
{"entity_id": directional_fan, "direction": forward_or_reverse,},
|
||||
{
|
||||
"entity_id": directional_fan,
|
||||
"direction": forward_or_reverse,
|
||||
},
|
||||
)
|
||||
response = self.ha.api.get_entity(directional_fan)
|
||||
response = self.ha.api.get_entity(directional_fan, response)
|
||||
return response
|
||||
|
||||
def _set_fan_speed(self, speed_fan, fan_speed):
|
||||
self.ha.api.call_service(
|
||||
"fan", "set_speed", {"entity_id": speed_fan, "speed": fan_speed},
|
||||
response = self.ha.api.call_service(
|
||||
"fan",
|
||||
"set_speed",
|
||||
{"entity_id": speed_fan, "speed": fan_speed},
|
||||
)
|
||||
response = self.ha.api.get_entity(speed_fan)
|
||||
return f"Setting the {response['attributes']['friendly_name']} to {fan_speed}"
|
||||
response = self.ha.api.get_entity(speed_fan, response)
|
||||
return response
|
||||
|
||||
def _increase_fan_speed(self, speed_fan, fan_speed_list):
|
||||
response = self.ha.api.get_entity(speed_fan)
|
||||
@@ -138,10 +148,12 @@ class BaseFan:
|
||||
else:
|
||||
new_fan_speed = fan_speed_list[current_fan_speed_index + 1]
|
||||
|
||||
self.ha.api.call_service(
|
||||
"fan", "set_speed", {"entity_id": speed_fan, "speed": new_fan_speed},
|
||||
response = self.ha.api.call_service(
|
||||
"fan",
|
||||
"set_speed",
|
||||
{"entity_id": speed_fan, "speed": new_fan_speed},
|
||||
)
|
||||
response = self.ha.api.get_entity(speed_fan)
|
||||
response = self.ha.api.get_entity(speed_fan, response)
|
||||
return response, new_fan_speed
|
||||
|
||||
def _decrease_fan_speed(self, speed_fan, fan_speed_list):
|
||||
@@ -154,8 +166,10 @@ class BaseFan:
|
||||
else:
|
||||
new_fan_speed = fan_speed_list[current_fan_speed_index - 1]
|
||||
|
||||
self.ha.api.call_service(
|
||||
"fan", "set_speed", {"entity_id": speed_fan, "speed": new_fan_speed},
|
||||
response = self.ha.api.call_service(
|
||||
"fan",
|
||||
"set_speed",
|
||||
{"entity_id": speed_fan, "speed": new_fan_speed},
|
||||
)
|
||||
response = self.ha.api.get_entity(speed_fan)
|
||||
response = self.ha.api.get_entity(speed_fan, response)
|
||||
return response, new_fan_speed
|
||||
|
||||
@@ -18,16 +18,16 @@ class BaseGroup:
|
||||
return slots
|
||||
|
||||
def _toggle_group(self, group):
|
||||
self.ha.api.call_service("homeassistant", "toggle", {"entity_id": group})
|
||||
response = self.ha.api.get_entity(group)
|
||||
response = self.ha.api.call_service("homeassistant", "toggle", {"entity_id": group})
|
||||
response = self.ha.api.get_entity(group, response)
|
||||
return response
|
||||
|
||||
def _turn_on_group(self, group):
|
||||
self.ha.api.call_service("homeassistant", "turn_on", {"entity_id": group})
|
||||
response = self.ha.api.get_entity(group)
|
||||
response = self.ha.api.call_service("homeassistant", "turn_on", {"entity_id": group})
|
||||
response = self.ha.api.get_entity(group, response)
|
||||
return response
|
||||
|
||||
def _turn_off_group(self, group):
|
||||
self.ha.api.call_service("homeassistant", "turn_off", {"entity_id": group})
|
||||
response = self.ha.api.get_entity(group)
|
||||
response = self.ha.api.call_service("homeassistant", "turn_off", {"entity_id": group})
|
||||
response = self.ha.api.get_entity(group, response)
|
||||
return response
|
||||
|
||||
@@ -32,30 +32,34 @@ class BaseHumidifier:
|
||||
return humidifier_modes
|
||||
|
||||
def _toggle_humidifier(self, humidifier):
|
||||
self.ha.api.call_service("humidifier", "toggle", {"entity_id": humidifier})
|
||||
response = self.ha.api.get_entity(humidifier)
|
||||
response = self.ha.api.call_service("humidifier", "toggle", {"entity_id": humidifier})
|
||||
response = self.ha.api.get_entity(humidifier, response)
|
||||
return response
|
||||
|
||||
def _turn_off(self, humidifier):
|
||||
self.ha.api.call_service("humidifier", "turn_off", {"entity_id": humidifier})
|
||||
response = self.ha.api.get_entity(humidifier)
|
||||
response = self.ha.api.call_service("humidifier", "turn_off", {"entity_id": humidifier})
|
||||
response = self.ha.api.get_entity(humidifier, response)
|
||||
return response
|
||||
|
||||
def _turn_on(self, humidifier):
|
||||
self.ha.api.call_service("humidifier", "turn_on", {"entity_id": humidifier})
|
||||
response = self.ha.api.get_entity(humidifier)
|
||||
response = self.ha.api.call_service("humidifier", "turn_on", {"entity_id": humidifier})
|
||||
response = self.ha.api.get_entity(humidifier, response)
|
||||
return response
|
||||
|
||||
def _change_humidity(self, humidifier, humidity):
|
||||
self.ha.api.call_service(
|
||||
"humidifier", "set_humidity", {"entity_id": humidifier, "humidity": humidity},
|
||||
response = self.ha.api.call_service(
|
||||
"humidifier",
|
||||
"set_humidity",
|
||||
{"entity_id": humidifier, "humidity": humidity},
|
||||
)
|
||||
response = self.ha.api.get_entity(humidifier)
|
||||
response = self.ha.api.get_entity(humidifier, response)
|
||||
return response
|
||||
|
||||
def _set_mode(self, humidifier, humidifier_mode):
|
||||
self.ha.api.call_service(
|
||||
"humidifier", "set_mode", {"entity_id": humidifier, "mode": humidifier_mode},
|
||||
response = self.ha.api.call_service(
|
||||
"humidifier",
|
||||
"set_mode",
|
||||
{"entity_id": humidifier, "mode": humidifier_mode},
|
||||
)
|
||||
response = self.ha.api.get_entity(humidifier)
|
||||
response = self.ha.api.get_entity(humidifier, response)
|
||||
return response
|
||||
|
||||
@@ -53,60 +53,60 @@ class BaseLight:
|
||||
return color_temperatures
|
||||
|
||||
def _toggle_light(self, light):
|
||||
self.ha.api.call_service("light", "toggle", {"entity_id": light})
|
||||
response = self.ha.api.get_entity(light)
|
||||
response = self.ha.api.call_service("light", "toggle", {"entity_id": light})
|
||||
response = self.ha.api.get_entity(light, response)
|
||||
return response
|
||||
|
||||
def _turn_on(self, light):
|
||||
self.ha.api.call_service("light", "turn_on", {"entity_id": light})
|
||||
response = self.ha.api.get_entity(light)
|
||||
response = self.ha.api.call_service("light", "turn_on", {"entity_id": light})
|
||||
response = self.ha.api.get_entity(light, response)
|
||||
return response
|
||||
|
||||
def _turn_off(self, light):
|
||||
self.ha.api.call_service("light", "turn_off", {"entity_id": light})
|
||||
response = self.ha.api.get_entity(light)
|
||||
response = self.ha.api.call_service("light", "turn_off", {"entity_id": light})
|
||||
response = self.ha.api.get_entity(light, response)
|
||||
return response
|
||||
|
||||
def _change_color(self, light, color):
|
||||
self.ha.api.call_service(
|
||||
response = self.ha.api.call_service(
|
||||
"light", "turn_on", {"entity_id": light, "rgb_color": color_to_hex(color)}
|
||||
)
|
||||
response = self.ha.api.get_entity(light)
|
||||
response = self.ha.api.get_entity(light, response)
|
||||
color_name = self.color_value_to_name[color]
|
||||
return response, color_name
|
||||
|
||||
def _change_color_brightness(self, light, color, brightness):
|
||||
self.ha.api.call_service(
|
||||
response = self.ha.api.call_service(
|
||||
"light",
|
||||
"turn_on",
|
||||
{"entity_id": light, "rgb_color": color_to_hex(color), "brightness_pct": brightness},
|
||||
)
|
||||
response = self.ha.api.get_entity(light)
|
||||
response = self.ha.api.get_entity(light, response)
|
||||
color_name = self.color_value_to_name[color]
|
||||
return response, color_name
|
||||
|
||||
def _change_brightness(self, light, brightness):
|
||||
self.ha.api.call_service(
|
||||
response = self.ha.api.call_service(
|
||||
"light", "turn_on", {"entity_id": light, "brightness_pct": brightness}
|
||||
)
|
||||
response = self.ha.api.get_entity(light)
|
||||
response = self.ha.api.get_entity(light, response)
|
||||
return response
|
||||
|
||||
def _change_color_temperature(self, light, color_temperature):
|
||||
self.ha.api.call_service(
|
||||
response = self.ha.api.call_service(
|
||||
"light", "turn_on", {"entity_id": light, "kelvin": color_temperature}
|
||||
)
|
||||
response = self.ha.api.get_entity(light)
|
||||
response = self.ha.api.get_entity(light, response)
|
||||
color_name = self.color_temp_to_name[int(color_temperature)]
|
||||
return response, color_name
|
||||
|
||||
def _change_color_temperature_brightness(self, light, color_temperature, brightness):
|
||||
self.ha.api.call_service(
|
||||
response = self.ha.api.call_service(
|
||||
"light",
|
||||
"turn_on",
|
||||
{"entity_id": light, "kelvin": color_temperature, "brightness_pct": brightness},
|
||||
)
|
||||
response = self.ha.api.get_entity(light)
|
||||
response = self.ha.api.get_entity(light, response)
|
||||
color_name = self.color_temp_to_name[int(color_temperature)]
|
||||
return response, color_name
|
||||
|
||||
|
||||
@@ -30,16 +30,16 @@ class BaseLock:
|
||||
return slots
|
||||
|
||||
def _lock_the_lock(self, lock):
|
||||
self.ha.api.call_service("lock", "lock", {"entity_id": lock})
|
||||
response = self.ha.api.get_entity(lock)
|
||||
response = self.ha.api.call_service("lock", "lock", {"entity_id": lock})
|
||||
response = self.ha.api.get_entity(lock, response)
|
||||
return response
|
||||
|
||||
def _unlock_the_lock(self, lock):
|
||||
self.ha.api.call_service("lock", "unlock", {"entity_id": lock})
|
||||
response = self.ha.api.get_entity(lock)
|
||||
response = self.ha.api.call_service("lock", "unlock", {"entity_id": lock})
|
||||
response = self.ha.api.get_entity(lock, response)
|
||||
return response
|
||||
|
||||
def _open_the_lock(self, lock_open_entity):
|
||||
self.ha.api.call_service("lock", "open", {"entity_id": lock_open_entity})
|
||||
response = self.ha.api.get_entity(lock_open_entity)
|
||||
response = self.ha.api.call_service("lock", "open", {"entity_id": lock_open_entity})
|
||||
response = self.ha.api.get_entity(lock_open_entity, response)
|
||||
return response
|
||||
|
||||
@@ -14,16 +14,16 @@ class BaseRemote:
|
||||
return slots
|
||||
|
||||
def _toggle_remote(self, remote):
|
||||
self.ha.api.call_service("remote", "toggle", {"entity_id": remote})
|
||||
response = self.ha.api.get_entity(remote)
|
||||
response = self.ha.api.call_service("remote", "toggle", {"entity_id": remote})
|
||||
response = self.ha.api.get_entity(remote, response)
|
||||
return response
|
||||
|
||||
def _turn_off(self, remote):
|
||||
self.ha.api.call_service("remote", "turn_off", {"entity_id": remote})
|
||||
response = self.ha.api.get_entity(remote)
|
||||
response = self.ha.api.call_service("remote", "turn_off", {"entity_id": remote})
|
||||
response = self.ha.api.get_entity(remote, response)
|
||||
return response
|
||||
|
||||
def _turn_on(self, remote):
|
||||
self.ha.api.call_service("remote", "turn_on", {"entity_id": remote})
|
||||
response = self.ha.api.get_entity(remote)
|
||||
response = self.ha.api.call_service("remote", "turn_on", {"entity_id": remote})
|
||||
response = self.ha.api.get_entity(remote, response)
|
||||
return response
|
||||
|
||||
@@ -18,16 +18,16 @@ class BaseSwitch:
|
||||
return slots
|
||||
|
||||
def _toggle_switch(self, switch):
|
||||
self.ha.api.call_service("switch", "toggle", {"entity_id": switch})
|
||||
response = self.ha.api.get_entity(switch)
|
||||
response = self.ha.api.call_service("switch", "toggle", {"entity_id": switch})
|
||||
response = self.ha.api.get_entity(switch, response)
|
||||
return response
|
||||
|
||||
def _turn_off(self, switch):
|
||||
self.ha.api.call_service("switch", "turn_off", {"entity_id": switch})
|
||||
response = self.ha.api.get_entity(switch)
|
||||
response = self.ha.api.call_service("switch", "turn_off", {"entity_id": switch})
|
||||
response = self.ha.api.get_entity(switch, response)
|
||||
return response
|
||||
|
||||
def _turn_on(self, switch):
|
||||
self.ha.api.call_service("switch", "turn_on", {"entity_id": switch})
|
||||
response = self.ha.api.get_entity(switch)
|
||||
response = self.ha.api.call_service("switch", "turn_on", {"entity_id": switch})
|
||||
response = self.ha.api.get_entity(switch, response)
|
||||
return response
|
||||
|
||||
Reference in New Issue
Block a user