60 lines
2.0 KiB
Python
60 lines
2.0 KiB
Python
"""Support for the Asterisk CDR interface."""
|
|
import logging
|
|
import hashlib
|
|
import datetime
|
|
|
|
from homeassistant.core import callback
|
|
from homeassistant.components.asterisk_mbox import SIGNAL_CDR_UPDATE
|
|
from homeassistant.components.asterisk_mbox import DOMAIN as ASTERISK_DOMAIN
|
|
from homeassistant.components.mailbox import Mailbox
|
|
from homeassistant.helpers.dispatcher import async_dispatcher_connect
|
|
|
|
_LOGGER = logging.getLogger(__name__)
|
|
|
|
MAILBOX_NAME = 'asterisk_cdr'
|
|
|
|
|
|
async def async_get_handler(hass, config, discovery_info=None):
|
|
"""Set up the Asterix CDR platform."""
|
|
return AsteriskCDR(hass, MAILBOX_NAME)
|
|
|
|
|
|
class AsteriskCDR(Mailbox):
|
|
"""Asterisk VM Call Data Record mailbox."""
|
|
|
|
def __init__(self, hass, name):
|
|
"""Initialize Asterisk CDR."""
|
|
super().__init__(hass, name)
|
|
self.cdr = []
|
|
async_dispatcher_connect(
|
|
self.hass, SIGNAL_CDR_UPDATE, self._update_callback)
|
|
|
|
@callback
|
|
def _update_callback(self, msg):
|
|
"""Update the message count in HA, if needed."""
|
|
self._build_message()
|
|
self.async_update()
|
|
|
|
def _build_message(self):
|
|
"""Build message structure."""
|
|
cdr = []
|
|
for entry in self.hass.data[ASTERISK_DOMAIN].cdr:
|
|
timestamp = datetime.datetime.strptime(
|
|
entry['time'], "%Y-%m-%d %H:%M:%S").timestamp()
|
|
info = {
|
|
'origtime': timestamp,
|
|
'callerid': entry['callerid'],
|
|
'duration': entry['duration'],
|
|
}
|
|
sha = hashlib.sha256(str(entry).encode('utf-8')).hexdigest()
|
|
msg = "Destination: {}\nApplication: {}\n Context: {}".format(
|
|
entry['dest'], entry['application'], entry['context'])
|
|
cdr.append({'info': info, 'sha': sha, 'text': msg})
|
|
self.cdr = cdr
|
|
|
|
async def async_get_messages(self):
|
|
"""Return a list of the current messages."""
|
|
if not self.cdr:
|
|
self._build_message()
|
|
return self.cdr
|