Skip to content

Commit b3dac1b

Browse files
authored
Merge pull request #25 from fillefilip8/media_source
Adds support for media_source
2 parents eb4051e + 8cb66d2 commit b3dac1b

File tree

1 file changed

+73
-37
lines changed
  • custom_components/hass_agent_notifier

1 file changed

+73
-37
lines changed

custom_components/hass_agent_notifier/notify.py

Lines changed: 73 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -8,107 +8,143 @@
88
- name: hass notifier
99
platform: hass_agent_notifier
1010
resource: http://192.168.0.1:5115/notify
11-
11+
1212
With this custom component loaded, you can send messaged to a HASS Agent.
1313
"""
1414

1515
import logging
16+
from typing import Any
17+
18+
from functools import partial
1619

1720
import requests
1821
import voluptuous as vol
1922

2023
from homeassistant.components.notify import (
21-
ATTR_MESSAGE,
24+
ATTR_TITLE_DEFAULT,
2225
ATTR_TITLE,
2326
ATTR_DATA,
2427
PLATFORM_SCHEMA,
2528
BaseNotificationService,
2629
)
2730

31+
from homeassistant.components import media_source
32+
2833
from http import HTTPStatus
2934

3035
from homeassistant.const import (
3136
CONF_RESOURCE,
3237
)
3338
import homeassistant.helpers.config_validation as cv
3439

35-
PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend(
36-
{
37-
vol.Required(CONF_RESOURCE): cv.url
38-
}
39-
)
40+
PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({vol.Required(CONF_RESOURCE): cv.url})
4041

4142
_LOGGER = logging.getLogger(__name__)
4243

44+
4345
def get_service(hass, config, discovery_info=None):
4446
"""Get the HASS Agent notification service."""
4547
resource = config.get(CONF_RESOURCE)
4648

4749
_LOGGER.info("Service created")
4850

49-
return HassAgentNotificationService(
50-
hass,
51-
resource
52-
)
51+
return HassAgentNotificationService(hass, resource)
5352

5453

5554
class HassAgentNotificationService(BaseNotificationService):
5655
"""Implementation of the HASS Agent notification service"""
5756

58-
def __init__(
59-
self,
60-
hass,
61-
resource
62-
):
57+
def __init__(self, hass, resource):
6358
"""Initialize the service."""
6459
self._resource = resource
6560
self._hass = hass
6661

67-
def send_message(self, message="", title="", **kwargs):
62+
def send(self, url, data):
63+
return requests.post(url, json=data, timeout=10)
64+
65+
async def async_send_message(self, message: str, **kwargs: Any):
6866
"""Send the message to the provided resource."""
6967
_LOGGER.debug("Preparing notification ..")
7068

69+
title = kwargs.get(ATTR_TITLE, ATTR_TITLE_DEFAULT)
7170
data = kwargs.get(ATTR_DATA, None)
7271

73-
payload = ({
74-
'message': message,
75-
'title': title,
76-
'data': data
77-
})
72+
image = data.get("image", None)
73+
if image is not None:
74+
if media_source.is_media_source_id(image):
75+
sourced_media = await media_source.async_resolve_media(self.hass, image)
76+
sourced_media = media_source.async_process_play_media_url(
77+
self.hass, sourced_media.url
78+
)
79+
80+
data.update({"image": sourced_media})
81+
82+
payload = {"message": message, "title": title, "data": data}
7883

7984
_LOGGER.debug("Sending notification ..")
8085

8186
try:
8287

83-
response = requests.post(
84-
self._resource,
85-
json=payload,
86-
timeout=10
88+
response = await self.hass.async_add_executor_job(
89+
self.send, self._resource, payload
8790
)
8891

8992
_LOGGER.debug("Checking result ..")
9093

9194
if response.status_code == HTTPStatus.INTERNAL_SERVER_ERROR:
92-
_LOGGER.error("Server error. Response %d: %s", response.status_code, response.reason)
95+
_LOGGER.error(
96+
"Server error. Response %d: %s",
97+
response.status_code,
98+
response.reason,
99+
)
93100
elif response.status_code == HTTPStatus.BAD_REQUEST:
94-
_LOGGER.error("Client error (bad request). Response %d: %s", response.status_code, response.reason)
101+
_LOGGER.error(
102+
"Client error (bad request). Response %d: %s",
103+
response.status_code,
104+
response.reason,
105+
)
95106
elif response.status_code == HTTPStatus.NOT_FOUND:
96-
_LOGGER.debug("Server error (not found). Response %d: %s", response.status_code, response.reason)
107+
_LOGGER.debug(
108+
"Server error (not found). Response %d: %s",
109+
response.status_code,
110+
response.reason,
111+
)
97112
elif response.status_code == HTTPStatus.METHOD_NOT_ALLOWED:
98-
_LOGGER.error("Server error (method not allowed). Response %d", response.status_code)
113+
_LOGGER.error(
114+
"Server error (method not allowed). Response %d",
115+
response.status_code,
116+
)
99117
elif response.status_code == HTTPStatus.REQUEST_TIMEOUT:
100-
_LOGGER.debug("Server error (request timeout). Response %d: %s", response.status_code, response.reason)
118+
_LOGGER.debug(
119+
"Server error (request timeout). Response %d: %s",
120+
response.status_code,
121+
response.reason,
122+
)
101123
elif response.status_code == HTTPStatus.NOT_IMPLEMENTED:
102-
_LOGGER.error("Server error (not implemented). Response %d: %s", response.status_code, response.reason)
124+
_LOGGER.error(
125+
"Server error (not implemented). Response %d: %s",
126+
response.status_code,
127+
response.reason,
128+
)
103129
elif response.status_code == HTTPStatus.SERVICE_UNAVAILABLE:
104-
_LOGGER.error("Server error (service unavailable). Response %d", response.status_code)
130+
_LOGGER.error(
131+
"Server error (service unavailable). Response %d",
132+
response.status_code,
133+
)
105134
elif response.status_code == HTTPStatus.GATEWAY_TIMEOUT:
106-
_LOGGER.error("Network error (gateway timeout). Response %d: %s", response.status_code, response.reason)
135+
_LOGGER.error(
136+
"Network error (gateway timeout). Response %d: %s",
137+
response.status_code,
138+
response.reason,
139+
)
107140
elif response.status_code == HTTPStatus.OK:
108-
_LOGGER.debug("Success. Response %d: %s", response.status_code, response.reason)
141+
_LOGGER.debug(
142+
"Success. Response %d: %s", response.status_code, response.reason
143+
)
109144
else:
110-
_LOGGER.debug("Unknown response %d: %s", response.status_code, response.reason)
145+
_LOGGER.debug(
146+
"Unknown response %d: %s", response.status_code, response.reason
147+
)
111148

112149
except Exception as e:
113150
_LOGGER.debug("Error sending message: %s", e)
114-

0 commit comments

Comments
 (0)