From 71da17fa45efce51196f0313e0739dd278506387 Mon Sep 17 00:00:00 2001 From: deathbybandaid Date: Thu, 10 Dec 2020 11:35:26 -0500 Subject: [PATCH 1/5] Enhance Config Variable Validation --- fHDHR/config/__init__.py | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/fHDHR/config/__init__.py b/fHDHR/config/__init__.py index 3891d66..38e52c0 100644 --- a/fHDHR/config/__init__.py +++ b/fHDHR/config/__init__.py @@ -215,6 +215,22 @@ class Config(): self.dict[each_section.lower()][each_key.lower()] = each_val def write(self, section, key, value): + + if not value: + value = None + if value.lower() in ["none"]: + value = None + elif value.lower() in ["false"]: + value = False + elif value.lower() in ["true"]: + value = True + elif isint(value): + value = int(value) + elif isfloat(value): + value = float(value) + elif isinstance(value, list): + ",".join(value) + if section == self.dict["main"]["dictpopname"]: self.dict["origin"][key] = value else: @@ -226,7 +242,7 @@ class Config(): if not config_handler.has_section(section): config_handler.add_section(section) - config_handler.set(section, key, value) + config_handler.set(section, key, str(value)) with open(self.config_file, 'w') as config_file: config_handler.write(config_file) From 328320192a35f72cbc4e611815487d591ffcf58e Mon Sep 17 00:00:00 2001 From: deathbybandaid Date: Thu, 10 Dec 2020 11:59:21 -0500 Subject: [PATCH 2/5] Move Web Conf --- fHDHR/config/__init__.py | 6 ++++++ .../web_ui.json => fHDHR_web/web_ui_conf.json | 0 2 files changed, 6 insertions(+) rename data/internal_config/web_ui.json => fHDHR_web/web_ui_conf.json (100%) diff --git a/fHDHR/config/__init__.py b/fHDHR/config/__init__.py index 38e52c0..62b3c3a 100644 --- a/fHDHR/config/__init__.py +++ b/fHDHR/config/__init__.py @@ -42,6 +42,7 @@ class Config(): "origin_web": pathlib.Path(origin_dir).joinpath('origin_web'), "cache_dir": pathlib.Path(data_dir).joinpath('cache'), "internal_config": pathlib.Path(data_dir).joinpath('internal_config'), + "fHDHR_web_dir": fHDHR_web_dir, "www_dir": www_dir, "www_templates_dir": pathlib.Path(fHDHR_web_dir).joinpath('templates'), "font": pathlib.Path(data_dir).joinpath('garamond.ttf'), @@ -52,6 +53,11 @@ class Config(): if str(conffilepath).endswith(".json"): self.read_json_config(conffilepath) + for file_item in os.listdir(self.internal["paths"]["fHDHR_web_dir"]): + file_item_path = pathlib.Path(self.internal["paths"]["fHDHR_web_dir"]).joinpath(file_item) + if str(file_item_path).endswith("_conf.json"): + self.read_json_config(file_item_path) + for dir_type in ["alternative_epg", "origin"]: for file_item in os.listdir(self.internal["paths"][dir_type]): diff --git a/data/internal_config/web_ui.json b/fHDHR_web/web_ui_conf.json similarity index 100% rename from data/internal_config/web_ui.json rename to fHDHR_web/web_ui_conf.json From afed209051c194bbf91a03f9647cdb24a272230b Mon Sep 17 00:00:00 2001 From: deathbybandaid Date: Thu, 10 Dec 2020 12:06:24 -0500 Subject: [PATCH 3/5] Add Advanced Button --- fHDHR_web/templates/base.html | 34 +++++++++++++++++++++++++++++++--- fHDHR_web/web_ui_conf.json | 5 +++++ 2 files changed, 36 insertions(+), 3 deletions(-) diff --git a/fHDHR_web/templates/base.html b/fHDHR_web/templates/base.html index e00aecf..aae904c 100644 --- a/fHDHR_web/templates/base.html +++ b/fHDHR_web/templates/base.html @@ -17,19 +17,47 @@

- + + + + + + + - - + + {% if fhdhr.config.dict["web_ui"]["advanced"] %} + + {% endif %} + + {% if fhdhr.config.dict["web_ui"]["advanced"] %} + + {% endif %} + xmltv m3u +
+ + + {% if fhdhr.config.dict["web_ui"]["advanced"] %} + + {% else %} + + {% endif %} + + {% if fhdhr.config.dict["web_ui"]["advanced"] %} + + {% else %} + + {% endif %} +

diff --git a/fHDHR_web/web_ui_conf.json b/fHDHR_web/web_ui_conf.json index 5f87553..9ab3a59 100644 --- a/fHDHR_web/web_ui_conf.json +++ b/fHDHR_web/web_ui_conf.json @@ -4,6 +4,11 @@ "value": "none", "config_file": true, "config_web": true + }, + "advanced":{ + "value": false, + "config_file": true, + "config_web": true } } } From d5c7a1ea471d9eed1463ee237eb8f7fafb18add9 Mon Sep 17 00:00:00 2001 From: deathbybandaid Date: Thu, 10 Dec 2020 12:19:56 -0500 Subject: [PATCH 4/5] Allow Cluster Bar Hiding --- fHDHR_web/templates/base.html | 18 ++++++++++-------- fHDHR_web/web_ui_conf.json | 6 ++++++ 2 files changed, 16 insertions(+), 8 deletions(-) diff --git a/fHDHR_web/templates/base.html b/fHDHR_web/templates/base.html index aae904c..4d52cbf 100644 --- a/fHDHR_web/templates/base.html +++ b/fHDHR_web/templates/base.html @@ -62,14 +62,16 @@
- {% set locations = fhdhr.device.cluster.get_cluster_dicts_web() %} - {% if locations %} -
- {% for location in locations %} - - {% endfor %} -
-
+ {% if fhdhr.config.dict["web_ui"]["cluster_bar"] %} + {% set locations = fhdhr.device.cluster.get_cluster_dicts_web() %} + {% if locations %} +
+ {% for location in locations %} + + {% endfor %} +
+
+ {% endif %} {% endif %} {% set retmessage = request.args.get('retmessage', default=None) %} diff --git a/fHDHR_web/web_ui_conf.json b/fHDHR_web/web_ui_conf.json index 9ab3a59..ab5413c 100644 --- a/fHDHR_web/web_ui_conf.json +++ b/fHDHR_web/web_ui_conf.json @@ -10,5 +10,11 @@ "config_file": true, "config_web": true } + , + "cluster_bar":{ + "value": true, + "config_file": true, + "config_web": true + } } } From a8972371c21d03c6a3f4c51961d3a6dd95615feb Mon Sep 17 00:00:00 2001 From: deathbybandaid Date: Thu, 10 Dec 2020 14:27:08 -0500 Subject: [PATCH 5/5] Enhance Channel Numbering system --- fHDHR/device/channels/__init__.py | 10 ++++-- fHDHR/device/channels/channel.py | 40 +++++++++++++++------ fHDHR/device/epg/__init__.py | 39 +++++++++++--------- fHDHR/device/epg/blocks.py | 6 ++-- fHDHR_web/api/channels.py | 7 +++- fHDHR_web/api/epg.py | 12 +++---- fHDHR_web/api/xmltv.py | 24 ++++++------- fHDHR_web/pages/channels_editor.py | 4 +++ fHDHR_web/pages/channels_html.py | 4 +++ fHDHR_web/pages/guide_html.py | 2 +- fHDHR_web/rmg/devices_devicekey_channels.py | 4 +-- 11 files changed, 98 insertions(+), 54 deletions(-) diff --git a/fHDHR/device/channels/__init__.py b/fHDHR/device/channels/__init__.py index 74c3177..9d8cf01 100644 --- a/fHDHR/device/channels/__init__.py +++ b/fHDHR/device/channels/__init__.py @@ -25,10 +25,16 @@ class Channels(): self.get_channels() def get_channel_obj(self, keyfind, valfind): - return next(self.list[fhdhr_id] for fhdhr_id in list(self.list.keys()) if self.list[fhdhr_id].dict[keyfind] == valfind) + if keyfind == "number": + return next(self.list[fhdhr_id] for fhdhr_id in list(self.list.keys()) if self.list[fhdhr_id].number == valfind) or None + else: + return next(self.list[fhdhr_id] for fhdhr_id in list(self.list.keys()) if self.list[fhdhr_id].dict[keyfind] == valfind) or None def get_channel_list(self, keyfind): - return [self.list[x].dict[keyfind] for x in list(self.list.keys())] + if keyfind == "number": + return [self.list[x].number for x in list(self.list.keys())] + else: + return [self.list[x].dict[keyfind] for x in list(self.list.keys())] def set_channel_status(self, keyfind, valfind, updatedict): self.get_channel_obj(keyfind, valfind).set_status(updatedict) diff --git a/fHDHR/device/channels/channel.py b/fHDHR/device/channels/channel.py index 299486f..bf116e6 100644 --- a/fHDHR/device/channels/channel.py +++ b/fHDHR/device/channels/channel.py @@ -14,11 +14,19 @@ class Channel(): else: channel_id = id_system.assign() self.channel_id = channel_id + self.dict = self.fhdhr.db.get_channel_value(str(channel_id), "dict") or self.default_dict self.verify_dict() self.fhdhr.db.set_channel_value(self.dict["id"], "dict", self.dict) + @property + def number(self): + if self.dict["subnumber"]: + return "%s.%s" % (self.dict["number"], self.dict["subnumber"]) + else: + return self.dict["number"] + @property def thumbnail(self): if str(self.dict["thumbnail"]).lower() in ["none"]: @@ -35,9 +43,9 @@ class Channel(): return { "callsign": self.dict["callsign"], "name": self.dict["name"], - "number": self.dict["number"], + "number": self.number, "id": self.dict["origin_id"], - "thumbnail": self.dict["thumbnail"], + "thumbnail": self.thumbnail, "listing": [], } @@ -49,6 +57,10 @@ class Channel(): for key in list(default_dict.keys()): if key not in list(self.dict.keys()): self.dict[key] = default_dict[key] + if self.dict["number"]: + if "." in self.dict["number"]: + self.dict["subnumber"] = self.dict["number"].split(".")[1] + self.dict["number"] = self.dict["number"].split(".")[0] def basics(self, channel_info): """Some Channel Information is Critical""" @@ -77,9 +89,17 @@ class Channel(): if "number" not in list(channel_info.keys()): channel_info["number"] = self.id_system.get_number(channel_info["id"]) - self.dict["origin_number"] = str(float(channel_info["number"])) + self.dict["origin_number"] = str(channel_info["number"]) if not self.dict["number"]: - self.dict["number"] = self.dict["origin_number"] + self.dict["number"] = self.dict["origin_number"].split(".")[0] + try: + self.dict["subnumber"] = self.dict["origin_number"].split(".")[1] + except IndexError: + self.dict["subnumber"] = None + else: + if "." in self.dict["number"]: + self.dict["subnumber"] = self.dict["number"].split(".")[1] + self.dict["number"] = self.dict["number"].split(".")[0] if "thumbnail" not in list(channel_info.keys()): channel_info["thumbnail"] = None @@ -106,7 +126,7 @@ class Channel(): "id": str(self.channel_id), "origin_id": None, "name": None, "origin_name": None, "callsign": None, "origin_callsign": None, - "number": None, "origin_number": None, + "number": None, "subnumber": None, "origin_number": None, "tags": [], "origin_tags": [], "thumbnail": None, "origin_thumbnail": None, "enabled": True, "favorite": 0, @@ -123,14 +143,14 @@ class Channel(): def set_status(self, updatedict): for key in list(updatedict.keys()): if key == "number": - updatedict[key] = str(float(updatedict[key])) + updatedict[key] = str(updatedict[key]) self.dict[key] = updatedict[key] self.fhdhr.db.set_channel_value(self.dict["id"], "dict", self.dict) @property def lineup_dict(self): return { - 'GuideNumber': self.dict['number'], + 'GuideNumber': self.number, 'GuideName': self.dict['name'], 'Tags': ",".join(self.dict['tags']), 'URL': self.stream_url, @@ -140,15 +160,15 @@ class Channel(): @property def generic_image_url(self): - return "/api/images?method=generate&type=channel&message=%s" % self.dict["number"] + return "/api/images?method=generate&type=channel&message=%s" % self.number @property def stream_url(self): - return '/auto/v%s' % self.dict['number'] + return '/auto/v%s' % self.number @property def play_url(self): - return '/api/m3u?method=get&channel=%s' % self.dict['number'] + return '/api/m3u?method=get&channel=%s' % self.number def set_favorite(self, enablement): if enablement == "+": diff --git a/fHDHR/device/epg/__init__.py b/fHDHR/device/epg/__init__.py index 9f5a8f8..80fe33d 100644 --- a/fHDHR/device/epg/__init__.py +++ b/fHDHR/device/epg/__init__.py @@ -60,15 +60,18 @@ class EPG(): self.fhdhr.db.delete_fhdhr_value("epg_dict", method) - def whats_on_now(self, channel, method=None): + def whats_on_now(self, channel_number, method=None): + nowtime = datetime.datetime.utcnow() epgdict = self.get_epg(method) - listings = epgdict[channel]["listing"] + try: + listings = epgdict[channel_number]["listing"] + except KeyError: + listings = [] for listing in listings: - nowtime = datetime.datetime.utcnow() start_time = datetime.datetime.strptime(listing["time_start"], '%Y%m%d%H%M%S +0000') end_time = datetime.datetime.strptime(listing["time_end"], '%Y%m%d%H%M%S +0000') if start_time <= nowtime <= end_time: - epgitem = epgdict[channel].copy() + epgitem = epgdict[channel_number].copy() epgitem["listing"] = [listing] return epgitem return None @@ -83,9 +86,18 @@ class EPG(): channel_guide_list = [] epgdict = self.get_epg(method) - channels = list(epgdict.keys()) - for channel in channels: - whatson = self.whats_on_now(epgdict[channel]["number"], method) + if method in ["blocks", "origin", self.fhdhr.config.dict["main"]["dictpopname"]]: + epgdict = epgdict.copy() + for c in list(epgdict.keys()): + chan_obj = self.channels.get_channel_obj("origin_id", epgdict[c]["id"]) + epgdict[chan_obj.number] = epgdict.pop(c) + epgdict[chan_obj.number]["name"] = chan_obj.dict["name"] + epgdict[chan_obj.number]["callsign"] = chan_obj.dict["callsign"] + epgdict[chan_obj.number]["number"] = chan_obj.number + epgdict[chan_obj.number]["id"] = chan_obj.dict["origin_id"] + epgdict[chan_obj.number]["thumbnail"] = chan_obj.thumbnail + for channel_number in list(epgdict.keys()): + whatson = self.whats_on_now(channel_number, method) if whatson: channel_guide_list.append(whatson) return channel_guide_list @@ -121,17 +133,15 @@ class EPG(): def find_channel_dict(self, channel_id): epgdict = self.get_epg() - channel_list = [] - for channel in list(epgdict.keys()): - channel_list.append(epgdict[channel]) - return next(item for item in channel_list if item["id"] == channel_id) + channel_list = [epgdict[x] for x in list(epgdict.keys())] + return next(item for item in channel_list if item["id"] == channel_id) or None def find_program_dict(self, event_id): epgdict = self.get_epg() event_list = [] for channel in list(epgdict.keys()): event_list.extend(epgdict[channel]["listing"]) - return next(item for item in event_list if item["id"] == event_id) + return next(item for item in event_list if item["id"] == event_id) or None def epg_method_selfadd(self): self.fhdhr.logger.info("Checking for Alternative EPG methods.") @@ -166,11 +176,6 @@ class EPG(): else: programguide = self.epg_handling[method].update_epg() - for chan in list(programguide.keys()): - floatnum = str(float(chan)) - programguide[floatnum] = programguide.pop(chan) - programguide[floatnum]["number"] = floatnum - programguide = OrderedDict(sorted(programguide.items())) for cnum in programguide: diff --git a/fHDHR/device/epg/blocks.py b/fHDHR/device/epg/blocks.py index e43aac5..cec6a74 100644 --- a/fHDHR/device/epg/blocks.py +++ b/fHDHR/device/epg/blocks.py @@ -16,12 +16,12 @@ class blocksEPG(): for fhdhr_id in list(self.channels.list.keys()): chan_obj = self.channels.list[fhdhr_id] - if str(chan_obj.dict["number"]) not in list(programguide.keys()): - programguide[str(chan_obj.dict["number"])] = chan_obj.epgdict + if str(chan_obj.number) not in list(programguide.keys()): + programguide[str(chan_obj.number)] = chan_obj.epgdict clean_prog_dicts = self.empty_channel_epg(timestamps, chan_obj) for clean_prog_dict in clean_prog_dicts: - programguide[str(chan_obj.dict["number"])]["listing"].append(clean_prog_dict) + programguide[str(chan_obj.number)]["listing"].append(clean_prog_dict) return programguide diff --git a/fHDHR_web/api/channels.py b/fHDHR_web/api/channels.py index 94ee365..6363eea 100644 --- a/fHDHR_web/api/channels.py +++ b/fHDHR_web/api/channels.py @@ -84,7 +84,12 @@ class Channels(): if key in ["name", "callsign", "thumbnail"]: updatedict[key] = str(request.form.get(key)) elif key in ["number"]: - updatedict[key] = float(request.form.get(key)) + number = str(request.form.get(key)) + if "." in number: + updatedict["subnumber"] = number.split(".")[1] + updatedict["number"] = number.split(".")[0] + else: + updatedict["number"] = number elif key in ["enabled"]: confvalue = request.form.get(key) if str(confvalue).lower() in ["false"]: diff --git a/fHDHR_web/api/epg.py b/fHDHR_web/api/epg.py index c7dcc69..3836e0a 100644 --- a/fHDHR_web/api/epg.py +++ b/fHDHR_web/api/epg.py @@ -32,12 +32,12 @@ class EPG(): epgdict = epgdict.copy() for c in list(epgdict.keys()): chan_obj = self.fhdhr.device.channels.get_channel_obj("origin_id", epgdict[c]["id"]) - epgdict[chan_obj.dict["number"]] = epgdict.pop(c) - epgdict[chan_obj.dict["number"]]["name"] = chan_obj.dict["name"] - epgdict[chan_obj.dict["number"]]["callsign"] = chan_obj.dict["callsign"] - epgdict[chan_obj.dict["number"]]["number"] = chan_obj.dict["number"] - epgdict[chan_obj.dict["number"]]["id"] = chan_obj.dict["origin_id"] - epgdict[chan_obj.dict["number"]]["thumbnail"] = chan_obj.thumbnail + epgdict[chan_obj.number] = epgdict.pop(c) + epgdict[chan_obj.number]["name"] = chan_obj.dict["name"] + epgdict[chan_obj.number]["callsign"] = chan_obj.dict["callsign"] + epgdict[chan_obj.number]["number"] = chan_obj.number + epgdict[chan_obj.number]["id"] = chan_obj.dict["origin_id"] + epgdict[chan_obj.number]["thumbnail"] = chan_obj.thumbnail epg_json = json.dumps(epgdict, indent=4) diff --git a/fHDHR_web/api/xmltv.py b/fHDHR_web/api/xmltv.py index 690794f..bcb8e97 100644 --- a/fHDHR_web/api/xmltv.py +++ b/fHDHR_web/api/xmltv.py @@ -43,12 +43,12 @@ class xmlTV(): epgdict = epgdict.copy() for c in list(epgdict.keys()): chan_obj = self.fhdhr.device.channels.get_channel_obj("origin_id", epgdict[c]["id"]) - epgdict[chan_obj.dict["number"]] = epgdict.pop(c) - epgdict[chan_obj.dict["number"]]["name"] = chan_obj.dict["name"] - epgdict[chan_obj.dict["number"]]["callsign"] = chan_obj.dict["callsign"] - epgdict[chan_obj.dict["number"]]["number"] = chan_obj.dict["number"] - epgdict[chan_obj.dict["number"]]["id"] = chan_obj.dict["origin_id"] - epgdict[chan_obj.dict["number"]]["thumbnail"] = chan_obj.thumbnail + epgdict[chan_obj.number] = epgdict.pop(c) + epgdict[chan_obj.number]["name"] = chan_obj.dict["name"] + epgdict[chan_obj.number]["callsign"] = chan_obj.dict["callsign"] + epgdict[chan_obj.number]["number"] = chan_obj.number + epgdict[chan_obj.number]["id"] = chan_obj.dict["origin_id"] + epgdict[chan_obj.number]["thumbnail"] = chan_obj.thumbnail xmltv_xml = self.create_xmltv(base_url, epgdict, source) @@ -100,12 +100,12 @@ class xmlTV(): if source in ["origin", "blocks", self.fhdhr.config.dict["main"]["dictpopname"]]: for c in list(epgdict.keys()): chan_obj = self.fhdhr.device.channels.get_channel_obj("origin_id", epgdict[c]["id"]) - epgdict[chan_obj.dict["number"]] = epgdict.pop(c) - epgdict[chan_obj.dict["number"]]["name"] = chan_obj.dict["name"] - epgdict[chan_obj.dict["number"]]["callsign"] = chan_obj.dict["callsign"] - epgdict[chan_obj.dict["number"]]["number"] = chan_obj.dict["number"] - epgdict[chan_obj.dict["number"]]["id"] = chan_obj.dict["origin_id"] - epgdict[chan_obj.dict["number"]]["thumbnail"] = chan_obj.thumbnail + epgdict[chan_obj.number] = epgdict.pop(c) + epgdict[chan_obj.number]["name"] = chan_obj.dict["name"] + epgdict[chan_obj.number]["callsign"] = chan_obj.dict["callsign"] + epgdict[chan_obj.number]["number"] = chan_obj.number + epgdict[chan_obj.number]["id"] = chan_obj.dict["origin_id"] + epgdict[chan_obj.number]["thumbnail"] = chan_obj.thumbnail for c in list(epgdict.keys()): diff --git a/fHDHR_web/pages/channels_editor.py b/fHDHR_web/pages/channels_editor.py index ea83ba9..bd455ed 100644 --- a/fHDHR_web/pages/channels_editor.py +++ b/fHDHR_web/pages/channels_editor.py @@ -17,7 +17,11 @@ class Channels_Editor_HTML(): for fhdhr_id in list(self.fhdhr.device.channels.list.keys()): channel_obj = self.fhdhr.device.channels.list[fhdhr_id] channel_dict = channel_obj.dict.copy() + + channel_dict["number"] = channel_obj.number + channel_dict["chan_thumbnail"] = channel_obj.thumbnail channel_dict["play_url"] = channel_obj.play_url + channelslist.append(channel_dict) return render_template('channels_editor.html', request=request, fhdhr=self.fhdhr, channelslist=channelslist) diff --git a/fHDHR_web/pages/channels_html.py b/fHDHR_web/pages/channels_html.py index 1ca0611..2478418 100644 --- a/fHDHR_web/pages/channels_html.py +++ b/fHDHR_web/pages/channels_html.py @@ -22,7 +22,11 @@ class Channels_HTML(): for fhdhr_id in list(self.fhdhr.device.channels.list.keys()): channel_obj = self.fhdhr.device.channels.list[fhdhr_id] channel_dict = channel_obj.dict.copy() + + channel_dict["number"] = channel_obj.number + channel_dict["chan_thumbnail"] = channel_obj.thumbnail channel_dict["play_url"] = channel_obj.play_url + channelslist.append(channel_dict) if channel_dict["enabled"]: channels_dict["Enabled"] += 1 diff --git a/fHDHR_web/pages/guide_html.py b/fHDHR_web/pages/guide_html.py index 7c70276..12d9408 100644 --- a/fHDHR_web/pages/guide_html.py +++ b/fHDHR_web/pages/guide_html.py @@ -42,7 +42,7 @@ class Guide_HTML(): chan_obj = self.fhdhr.device.channels.get_channel_obj("origin_id", channel["id"]) chan_dict["name"] = chan_obj.dict["name"] - chan_dict["number"] = chan_obj.dict["number"] + chan_dict["number"] = chan_obj.number chan_dict["chan_thumbnail"] = chan_obj.thumbnail chan_dict["enabled"] = chan_obj.dict["enabled"] chan_dict["play_url"] = chan_obj.play_url diff --git a/fHDHR_web/rmg/devices_devicekey_channels.py b/fHDHR_web/rmg/devices_devicekey_channels.py index 8122f93..93d98a0 100644 --- a/fHDHR_web/rmg/devices_devicekey_channels.py +++ b/fHDHR_web/rmg/devices_devicekey_channels.py @@ -27,10 +27,10 @@ class RMG_Devices_DeviceKey_Channels(): if channel_obj.enabled: sub_el(out, 'Channel', drm="0", - channelIdentifier="id://%s" % channel_obj.dict["number"], + channelIdentifier="id://%s" % channel_obj.number, name=channel_obj.dict["name"], origin=channel_obj.dict["callsign"], - number=str(channel_obj.dict["number"]), + number=str(channel_obj.number), type="tv", # TODO param signalStrength="100",