From bb072fd573057b9882412fdc92eb4e2fa20a5348 Mon Sep 17 00:00:00 2001 From: Devmel Apps Date: Wed, 16 Nov 2022 12:59:19 +0100 Subject: [PATCH] AirSend duo --- README.md | 11 +- custom_components/airsend/__init__.py | 26 +++- custom_components/airsend/button.py | 127 +++++-------------- custom_components/airsend/cover.py | 154 +++++++++-------------- custom_components/airsend/device.py | 172 ++++++++++++++++++++++++++ custom_components/airsend/switch.py | 133 +++++--------------- icons/icon.png | Bin 28025 -> 22442 bytes 7 files changed, 318 insertions(+), 305 deletions(-) create mode 100644 custom_components/airsend/device.py diff --git a/README.md b/README.md index beccec6..6c9842c 100644 --- a/README.md +++ b/README.md @@ -2,15 +2,16 @@ # AirSend Home Assistant -Component for sending radio commands (433-434Mhz) through the AirSend device. +Component for sending radio commands through the AirSend (RF433) or AirSend duo (RF433 & RF868). ## Installation -1. Add `airsend:` to your HA configuration (see configuration below). -2. Into the terminal, run `wget -q -O - https://raw.githubusercontent.com/devmel/hass_airsend/master/install | bash -` +1. Into the terminal, run `wget -q -O - https://raw.githubusercontent.com/devmel/hass_airsend/master/install | bash -` OR copy the `airsend` folder into your [custom_components folder](https://developers.home-assistant.io/docs/creating_integration_file_structure/#where-home-assistant-looks-for-integrations). -3. To allow a local LAN connection please install and start [hass_airsend-addon](https://github.com/devmel/hass_airsend-addon). -4. Restart Home Assistant +2. To allow a local LAN connection please install and start [hass_airsend-addon](https://github.com/devmel/hass_airsend-addon). +3. Restart Home Assistant +4. Add `airsend:` to your HA configuration (see configuration below). +5. Restart Home Assistant ## Configuration diff --git a/custom_components/airsend/__init__.py b/custom_components/airsend/__init__.py index 317180c..3bc15f2 100644 --- a/custom_components/airsend/__init__.py +++ b/custom_components/airsend/__init__.py @@ -2,17 +2,33 @@ from homeassistant.core import HomeAssistant from homeassistant.helpers.typing import ConfigType from homeassistant.helpers import discovery -from homeassistant.const import ( - CONF_DEVICES, +from homeassistant.components.hassio import ( + async_get_addon_info, ) +from homeassistant.const import CONF_INTERNAL_URL DOMAIN = "airsend" -AS_TYPE = ['switch', 'cover', 'button'] +AS_TYPE = ["switch", "cover", "button"] -async def async_setup(hass : HomeAssistant, config : ConfigType): + +async def async_setup(hass: HomeAssistant, config: ConfigType): """Set up the AirSend component.""" if DOMAIN not in config: return True + internalurl = "" + try: + internalurl = config[DOMAIN][CONF_INTERNAL_URL] + except KeyError: + pass + if internalurl == "": + try: + addon_info: dict = await async_get_addon_info(hass, "local_airsend") + ip = addon_info["ip_address"] + if ip: + internalurl = "http://" + str(ip) + ":33863/" + except KeyError: + pass + config[DOMAIN][CONF_INTERNAL_URL] = internalurl for plateform in AS_TYPE: - discovery.load_platform(hass, plateform, DOMAIN, config[DOMAIN][CONF_DEVICES].copy(), config) + discovery.load_platform(hass, plateform, DOMAIN, config[DOMAIN].copy(), config) return True diff --git a/custom_components/airsend/button.py b/custom_components/airsend/button.py index 17abcac..b05ec9e 100644 --- a/custom_components/airsend/button.py +++ b/custom_components/airsend/button.py @@ -1,84 +1,44 @@ """AirSend buttons.""" -import logging -import json from typing import Any -from requests import get, post + +from .device import Device + +from homeassistant.components.button import ButtonEntity from homeassistant.core import HomeAssistant from homeassistant.helpers.typing import ConfigType -from homeassistant.helpers.entity import async_generate_entity_id -from homeassistant.components.hassio import ( - async_get_addon_discovery_info, - async_get_addon_info, -) -from homeassistant.components.button import ( - ButtonEntity, -) -from . import ( - DOMAIN, -) -_LOGGER = logging.getLogger(DOMAIN) +from homeassistant.const import CONF_DEVICES, CONF_INTERNAL_URL -async def async_setup_platform(hass : HomeAssistant, config : ConfigType, async_add_entities, discovery_info=None): - addons_url = "" - try: - addon_info: dict = await async_get_addon_info(hass, 'local_airsend') - ip = addon_info["ip_address"] - if ip: - addons_url = "http://"+str(ip)+":33863/" - # _LOGGER.warning("Addon '%s'", addon_info) - except: - pass +from . import DOMAIN + + +async def async_setup_platform( + hass: HomeAssistant, config: ConfigType, async_add_entities, discovery_info=None +) -> None: if discovery_info is None: return - for name, options in discovery_info.items(): - if options['type'] == 4096 : - id = "" - apiKey = "" - spurl = "" - channel = {} - note = {"method":1,"type":0,"value": "TOGGLE"} - try: - id = options['id'] - except KeyError: - pass - try: - apiKey = options['apiKey'] - except KeyError: - pass - try: - spurl = options['spurl'] - except KeyError: - pass - try: - channel = options['channel'] - except KeyError: - pass - try: - note = options['note'] - except KeyError: - pass - entity = AirSendButton(hass, name, id, options['type'], apiKey, addons_url, spurl, channel, note) + for name, options in discovery_info[CONF_DEVICES].items(): + device = Device(name, options, discovery_info[CONF_INTERNAL_URL]) + if device.is_button: + entity = AirSendButton( + hass, + device, + ) async_add_entities([entity]) - return class AirSendButton(ButtonEntity): """Representation of an AirSend Button.""" - def __init__(self, hass : HomeAssistant, name : str, id: str, type : int, apikey : str, addons_url : str, spurl : str, channel : dict, note : dict): + def __init__( + self, + hass: HomeAssistant, + device: Device, + ) -> None: """Initialize a button.""" - self._name = name - self._id = id - self._type = type - self._apikey = apikey - self._addons_url = addons_url - self._spurl = spurl - self._channel = channel - self._note = note - uname = DOMAIN+name + self._device = device + uname = DOMAIN + device.name self._unique_id = "_".join(x for x in uname) - self._state = False @property def unique_id(self): @@ -97,7 +57,7 @@ class AirSendButton(ButtonEntity): @property def name(self): """Return the name of the device if any.""" - return self._name + return self._device.name @property def extra_state_attributes(self): @@ -109,37 +69,8 @@ class AirSendButton(ButtonEntity): """Return true if unable to access real state of entity.""" return True - def press(self) -> None: + def press(self, **kwargs: Any) -> None: """Handle the button press.""" - command = "6" - note = self._note - url = "https://airsend.cloud/device/" + str(self._id) + "/command/" + command + "/" - payload = '{"wait": true, "channel":' + json.dumps(self._channel) + ', "thingnotes":{"notes":[' + json.dumps( - note) + ']}}' - self._action(url, payload, True) - - def _action(self, cloud_url : str, payload : str, new_state : bool): - status_code = 404 - if self._addons_url and self._spurl: - headers = {"Authorization": "Bearer "+self._spurl, "content-type": "application/json", "User-Agent": "hass_airsend"} - try: - response = post(self._addons_url+"airsend/transfer", headers=headers, data=payload, timeout=6) - status_code = 500 - jdata = json.loads(response.text) - if jdata["type"] < 0x100: - status_code = response.status_code - except: - pass - if status_code != 200 and self._apikey and cloud_url: - headers = {"Authorization": "Bearer "+self._apikey, "content-type": "application/json", "User-Agent": "hass_airsend"} - try: - response = get(cloud_url, headers=headers, timeout=10) - status_code = response.status_code - except: - pass - if status_code == 200: - self._state = new_state + note = {"method": 1, "type": 0, "value": "TOGGLE"} + if self._device.transfer(note): self.schedule_update_ha_state() - else: - _LOGGER.error("action error : "+str(status_code)) - raise Exception("action error : "+str(status_code)) diff --git a/custom_components/airsend/cover.py b/custom_components/airsend/cover.py index d5a4f73..d1a4b85 100644 --- a/custom_components/airsend/cover.py +++ b/custom_components/airsend/cover.py @@ -1,78 +1,47 @@ """AirSend switches.""" -import logging -import json from typing import Any -from requests import get, post + +from .device import Device + +from homeassistant.components.cover import CoverEntity from homeassistant.core import HomeAssistant from homeassistant.helpers.typing import ConfigType -from homeassistant.helpers.entity import async_generate_entity_id -from homeassistant.components.hassio import ( - async_get_addon_discovery_info, - async_get_addon_info, -) -from homeassistant.components.cover import ( - CoverEntity, -) -from . import ( - DOMAIN, -) -_LOGGER = logging.getLogger(DOMAIN) +from homeassistant.const import CONF_DEVICES, CONF_INTERNAL_URL -async def async_setup_platform(hass : HomeAssistant, config : ConfigType, async_add_entities, discovery_info=None): - addons_url = "" - try: - addon_info: dict = await async_get_addon_info(hass, 'local_airsend') - ip = addon_info["ip_address"] - if ip: - addons_url = "http://"+str(ip)+":33863/" - # _LOGGER.warning("Addon '%s'", addon_info) - except: - pass +from . import DOMAIN + + +async def async_setup_platform( + hass: HomeAssistant, config: ConfigType, async_add_entities, discovery_info=None +) -> None: if discovery_info is None: return - for name, options in discovery_info.items(): - if options['type'] == 4098: - id = "" - apiKey = "" - spurl = "" - channel = {} - try: - id = options['id'] - except KeyError: - pass - try: - apiKey = options['apiKey'] - except KeyError: - pass - try: - spurl = options['spurl'] - except KeyError: - pass - try: - channel = options['channel'] - except KeyError: - pass - entity = AirSendCover(hass, name, id, options['type'], apiKey, addons_url, spurl, channel) + for name, options in discovery_info[CONF_DEVICES].items(): + device = Device(name, options, discovery_info[CONF_INTERNAL_URL]) + if device.is_cover: + entity = AirSendCover( + hass, + device, + ) async_add_entities([entity]) - return class AirSendCover(CoverEntity): """Representation of an AirSend Cover.""" - def __init__(self, hass : HomeAssistant, name : str, id: str, type : int, apikey : str, addons_url : str, spurl : str, channel : dict): + def __init__( + self, + hass: HomeAssistant, + device: Device, + ) -> None: """Initialize a cover device.""" - self._name = name - self._id = id - self._type = type - self._apikey = apikey - self._addons_url = addons_url - self._spurl = spurl - self._channel = channel - uname = DOMAIN+name + self._device = device + uname = DOMAIN + device.name self._unique_id = "_".join(x for x in uname) - self._state = False + self._closed = False + if device.is_cover_with_position: + self._attr_current_cover_position = 50 @property def unique_id(self): @@ -91,7 +60,7 @@ class AirSendCover(CoverEntity): @property def name(self): """Return the name of the device if any.""" - return self._name + return self._device.name @property def extra_state_attributes(self): @@ -106,51 +75,42 @@ class AirSendCover(CoverEntity): @property def is_closed(self): """Return if the cover is closed.""" - return not self._state + return not self._closed def open_cover(self, **kwargs: Any) -> None: """Open the cover.""" - note = {"method":1,"type":0,"value": "UP"} - url = "https://airsend.cloud/device/"+str(self._id)+"/command/5/" - payload = '{"wait": true, "channel":'+json.dumps(self._channel)+', "thingnotes":{"notes":['+json.dumps(note)+']}}' - self._action(url, payload, False) + note = {"method": 1, "type": 0, "value": "UP"} + if self._device.transfer(note): + self._closed = False + if self._device.is_cover_with_position: + self._attr_current_cover_position = 100 + self.schedule_update_ha_state() def close_cover(self, **kwargs: Any) -> None: """Close cover.""" - note = {"method":1,"type":0,"value": "DOWN"} - url = "https://airsend.cloud/device/"+str(self._id)+"/command/4/" - payload = '{"wait": true, "channel":'+json.dumps(self._channel)+', "thingnotes":{"notes":['+json.dumps(note)+']}}' - self._action(url, payload, False) + note = {"method": 1, "type": 0, "value": "DOWN"} + if self._device.transfer(note): + self._closed = True + if self._device.is_cover_with_position: + self._attr_current_cover_position = 0 + self.schedule_update_ha_state() def stop_cover(self, **kwargs): """Stop the cover.""" - note = {"method":1,"type":0,"value": "STOP"} - url = "https://airsend.cloud/device/"+str(self._id)+"/command/3/" - payload = '{"wait": true, "channel":'+json.dumps(self._channel)+', "thingnotes":{"notes":['+json.dumps(note)+']}}' - self._action(url, payload, False) + note = {"method": 1, "type": 0, "value": "STOP"} + if self._device.transfer(note): + self._closed = False + if self._device.is_cover_with_position: + self._attr_current_cover_position = 50 + self.schedule_update_ha_state() - def _action(self, cloud_url : str, payload : str, new_state : bool): - status_code = 404 - if self._addons_url and self._spurl: - headers = {"Authorization": "Bearer "+self._spurl, "content-type": "application/json", "User-Agent": "hass_airsend"} - try: - response = post(self._addons_url+"airsend/transfer", headers=headers, data=payload, timeout=6) - status_code = 500 - jdata = json.loads(response.text) - if jdata["type"] < 0x100: - status_code = response.status_code - except: - pass - if status_code != 200 and self._apikey and cloud_url: - headers = {"Authorization": "Bearer "+self._apikey, "content-type": "application/json", "User-Agent": "hass_airsend"} - try: - response = get(cloud_url, headers=headers, timeout=10) - status_code = response.status_code - except: - pass - if status_code == 200: - self._state = new_state + def set_cover_position(self, **kwargs): + """Move the cover to a specific position.""" + position = int(kwargs["position"]) + note = {"method": 1, "type": 9, "value": position} + if self._device.transfer(note): + self._attr_current_cover_position = position + self._closed = False + if self._attr_current_cover_position == 0: + self._closed = True self.schedule_update_ha_state() - else: - _LOGGER.error("action error : "+str(status_code)) - raise Exception("action error : "+str(status_code)) diff --git a/custom_components/airsend/device.py b/custom_components/airsend/device.py new file mode 100644 index 0000000..5fbb9d1 --- /dev/null +++ b/custom_components/airsend/device.py @@ -0,0 +1,172 @@ +"""AirSend device.""" +import logging +import json +from requests import get, post, exceptions +from . import DOMAIN + +_LOGGER = logging.getLogger(DOMAIN) + + +class Device: + """Representation of a Device.""" + + def __init__( + self, + name: str, + options, + serviceurl: str, + ) -> None: + """Initialize a device.""" + self._name = name + self._serviceurl = serviceurl + self._uid = None + self._rtype = None + self._apikey = None + self._spurl = None + self._channel = {} + self._note = None + try: + self._uid = options["id"] + except KeyError: + pass + try: + self._rtype = options["type"] + except KeyError: + pass + try: + self._apikey = options["apiKey"] + except KeyError: + pass + try: + self._spurl = options["spurl"] + except KeyError: + pass + try: + self._channel = options["channel"] + except KeyError: + pass + try: + self._note = options["note"] + except KeyError: + pass + + @property + def name(self) -> str: + """Return the name.""" + return self._name + + @property + def is_button(self) -> bool: + """Return if is a button.""" + if self._rtype == 4096: + return True + return False + + @property + def is_cover(self) -> bool: + """Return if is a cover.""" + if self._rtype in (4098, 4099): + return True + return False + + @property + def is_cover_with_position(self) -> bool: + """Return if is a cover with position.""" + if self._rtype == 4099: + return True + return False + + @property + def is_switch(self) -> bool: + """Return if is a switch.""" + if self._rtype == 4097: + return True + return False + + def transfer(self, note) -> bool: + """Send a command.""" + status_code = 404 + if self._serviceurl and self._spurl: + jnote = json.dumps(note) + if ( + self._note is not None + and "method" in self._note + and "type" in self._note + and "value" in self._note + and "method" in note.keys() + and "type" in note.keys() + and "value" in note.keys() + and note["method"] == 1 and note["type"] == 0 + and (note["value"] == "TOGGLE" or note["value"] == 6) + ): + jnote = json.dumps(self._note) + payload = ( + '{"wait": true, "channel":' + + json.dumps(self._channel) + + ', "thingnotes":{"notes":[' + + jnote + + "]}}" + ) + headers = { + "Authorization": "Bearer " + self._spurl, + "content-type": "application/json", + "User-Agent": "hass_airsend", + } + try: + response = post( + self._serviceurl + "airsend/transfer", + headers=headers, + data=payload, + timeout=6, + ) + status_code = 500 + jdata = json.loads(response.text) + if jdata["type"] < 0x100: + status_code = response.status_code + except exceptions.RequestException: + pass + if status_code != 200 and self._apikey: + action = "command" + value = 6 + if ( + "method" in note.keys() + and "type" in note.keys() + and "value" in note.keys() + ): + if note["method"] == 1 and note["type"] == 0: + if note["value"] == "OFF": + value = 0 + if note["value"] == "ON": + value = 1 + if note["value"] == "STOP": + value = 3 + if note["value"] == "DOWN": + value = 4 + if note["value"] == "UP": + value = 5 + if note["method"] == 1 and note["type"] == 9: + action = "level" + value = int(note["value"]) + cloud_url = ( + "https://airsend.cloud/device/" + + str(self._uid) + + "/" + + action + + "/" + + str(value) + + "/" + ) + headers = { + "Authorization": "Bearer " + self._apikey, + "content-type": "application/json", + "User-Agent": "hass_airsend", + } + try: + response = get(cloud_url, headers=headers, timeout=10) + status_code = response.status_code + except exceptions.RequestException: + pass + if status_code == 200: + return True + _LOGGER.error("Transfer error '%s' : '%s'", self.name, status_code) + raise Exception("Transfer error " + self.name + " : " + str(status_code)) diff --git a/custom_components/airsend/switch.py b/custom_components/airsend/switch.py index afbfa47..0473ced 100644 --- a/custom_components/airsend/switch.py +++ b/custom_components/airsend/switch.py @@ -1,82 +1,43 @@ """AirSend switches.""" -import logging -import json from typing import Any -from requests import get, post + +from .device import Device + +from homeassistant.components.switch import SwitchEntity from homeassistant.core import HomeAssistant from homeassistant.helpers.typing import ConfigType -from homeassistant.helpers.entity import async_generate_entity_id -from homeassistant.components.hassio import ( - async_get_addon_discovery_info, - async_get_addon_info, -) -from homeassistant.components.switch import ( - SwitchEntity, -) -from . import ( - DOMAIN, -) -_LOGGER = logging.getLogger(DOMAIN) +from homeassistant.const import CONF_DEVICES, CONF_INTERNAL_URL -async def async_setup_platform(hass : HomeAssistant, config : ConfigType, async_add_entities, discovery_info=None): - addons_url = "" - try: - addon_info: dict = await async_get_addon_info(hass, 'local_airsend') - ip = addon_info["ip_address"] - if ip: - addons_url = "http://"+str(ip)+":33863/" - # _LOGGER.warning("Addon '%s'", addon_info) - except: - pass +from . import DOMAIN + + +async def async_setup_platform( + hass: HomeAssistant, config: ConfigType, async_add_entities, discovery_info=None +) -> None: if discovery_info is None: return - for name, options in discovery_info.items(): - if options['type'] == 4097: - id = "" - apiKey = "" - spurl = "" - channel = {} - note = {"method":1,"type":0,"value": "TOGGLE"} - try: - id = options['id'] - except KeyError: - pass - try: - apiKey = options['apiKey'] - except KeyError: - pass - try: - spurl = options['spurl'] - except KeyError: - pass - try: - channel = options['channel'] - except KeyError: - pass - try: - note = options['note'] - except KeyError: - pass - entity = AirSendSwitch(hass, name, id, options['type'], apiKey, addons_url, spurl, channel, note) + for name, options in discovery_info[CONF_DEVICES].items(): + device = Device(name, options, discovery_info[CONF_INTERNAL_URL]) + if device.is_switch: + entity = AirSendSwitch( + hass, + device, + ) async_add_entities([entity]) - return class AirSendSwitch(SwitchEntity): """Representation of an AirSend Switch.""" - def __init__(self, hass : HomeAssistant, name : str, id: str, type : int, apikey : str, addons_url : str, spurl : str, channel : dict, note : dict): + def __init__( + self, + hass: HomeAssistant, + device: Device, + ) -> None: """Initialize a switch or light device.""" - self._name = name - self._id = id - self._type = type - self._apikey = apikey - self._addons_url = addons_url - self._spurl = spurl - self._channel = channel - self._note = note - uname = DOMAIN+name + self._device = device + uname = DOMAIN + device.name self._unique_id = "_".join(x for x in uname) self._state = False @@ -97,7 +58,7 @@ class AirSendSwitch(SwitchEntity): @property def name(self): """Return the name of the device if any.""" - return self._name + return self._device.name @property def extra_state_attributes(self): @@ -115,42 +76,14 @@ class AirSendSwitch(SwitchEntity): def turn_on(self, **kwargs: Any) -> None: """Turn the device on.""" - command = "1" - note = {"method":1,"type":0,"value": "ON"} - url = "https://airsend.cloud/device/"+str(self._id)+"/command/"+command+"/" - payload = '{"wait": true, "channel":'+json.dumps(self._channel)+', "thingnotes":{"notes":['+json.dumps(note)+']}}' - self._action(url, payload, True) + note = {"method": 1, "type": 0, "value": "ON"} + if self._device.transfer(note): + self._state = True + self.schedule_update_ha_state() def turn_off(self, **kwargs: Any) -> None: """Turn the device off.""" - command = "0" - note = {"method":1,"type":0,"value": "OFF"} - url = "https://airsend.cloud/device/"+str(self._id)+"/command/"+command+"/" - payload = '{"wait": true, "channel":'+json.dumps(self._channel)+', "thingnotes":{"notes":['+json.dumps(note)+']}}' - self._action(url, payload, False) - - def _action(self, cloud_url : str, payload : str, new_state : bool): - status_code = 404 - if self._addons_url and self._spurl: - headers = {"Authorization": "Bearer "+self._spurl, "content-type": "application/json", "User-Agent": "hass_airsend"} - try: - response = post(self._addons_url+"airsend/transfer", headers=headers, data=payload, timeout=6) - status_code = 500 - jdata = json.loads(response.text) - if jdata["type"] < 0x100: - status_code = response.status_code - except: - pass - if status_code != 200 and self._apikey and cloud_url: - headers = {"Authorization": "Bearer "+self._apikey, "content-type": "application/json", "User-Agent": "hass_airsend"} - try: - response = get(cloud_url, headers=headers, timeout=10) - status_code = response.status_code - except: - pass - if status_code == 200: - self._state = new_state + note = {"method": 1, "type": 0, "value": "OFF"} + if self._device.transfer(note): + self._state = False self.schedule_update_ha_state() - else: - _LOGGER.error("action error : "+str(status_code)) - raise Exception("action error : "+str(status_code)) diff --git a/icons/icon.png b/icons/icon.png index 7280984c2354bb436a9ac93beeb45cde4cc4467a..28bf2c14169e0407f5b6a953262410714572fe64 100644 GIT binary patch literal 22442 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 literal 28025 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