From 07d40cca572b4ec78e353b8b807533940255b4da Mon Sep 17 00:00:00 2001 From: PolishKrowa <45701824+Mrredstone5230@users.noreply.github.com> Date: Tue, 9 Apr 2024 10:58:50 -0400 Subject: [PATCH 1/2] Added the templatable component --- custom_components/divoom_pixoo/sensor.py | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/custom_components/divoom_pixoo/sensor.py b/custom_components/divoom_pixoo/sensor.py index dd1ad58..6bdf8a3 100644 --- a/custom_components/divoom_pixoo/sensor.py +++ b/custom_components/divoom_pixoo/sensor.py @@ -130,7 +130,7 @@ async def _async_next_page(self): self._current_page_index = (self._current_page_index + 1) % len(self._pages) iteration_count += 1 - def _render_page(self, page): + def _render_page(self, page: dict): pixoo = self._pixoo pixoo.clear() @@ -150,7 +150,8 @@ def _render_page(self, page): for var_name in variables: rendered_variables[var_name] = Template(str(variables[var_name]), self.hass).async_render() - for component in page['components']: + components: list = page['components'].copy() # Copy the list so we can add new items to it. + for index, component in enumerate(components): if component['type'] == "text": try: @@ -255,6 +256,14 @@ def _render_page(self, page): except TemplateError as e: _LOGGER.error("Template render error: %s", e) + elif component["type"] == "templatable": + try: + rendered_list = list(Template(str(component.get("template", [])), self.hass).async_render(variables=rendered_variables)) + for item in rendered_list[::-1]: # Reverse the list so that the order is correct. + components.insert(index + 1, item) + + except TemplateError as e: + _LOGGER.error("Template render error: %s", e) pixoo.push() From 9c41b3a849f201d5b83a15f485ba0524553222b9 Mon Sep 17 00:00:00 2001 From: PolishKrowa <45701824+Mrredstone5230@users.noreply.github.com> Date: Tue, 9 Apr 2024 16:14:51 -0400 Subject: [PATCH 2/2] Added the gif page_type --- custom_components/divoom_pixoo/pixoo64/_pixoo.py | 10 ++++++++++ custom_components/divoom_pixoo/sensor.py | 2 ++ 2 files changed, 12 insertions(+) diff --git a/custom_components/divoom_pixoo/pixoo64/_pixoo.py b/custom_components/divoom_pixoo/pixoo64/_pixoo.py index 5cfcd78..269f6f3 100644 --- a/custom_components/divoom_pixoo/pixoo64/_pixoo.py +++ b/custom_components/divoom_pixoo/pixoo64/_pixoo.py @@ -347,6 +347,16 @@ def set_custom_page(self, index): if data['error_code'] != 0: self.__error(data) + def play_gif(self, gif_url): + response = requests.post(self.__url, json.dumps({ + 'Command': 'Device/PlayTFGif', + 'FileType': 2, + 'FileName': gif_url + }), timeout=self.timeout) + data = response.json() + if data['error_code'] != 0: + self.__error(data) + def set_face(self, face_id): self.set_clock(face_id) diff --git a/custom_components/divoom_pixoo/sensor.py b/custom_components/divoom_pixoo/sensor.py index dd1ad58..1e1ded7 100644 --- a/custom_components/divoom_pixoo/sensor.py +++ b/custom_components/divoom_pixoo/sensor.py @@ -144,6 +144,8 @@ def _render_page(self, page): pixoo.set_visualizer(page['id']) elif page_type == "clock": pixoo.set_clock(page['id']) + elif page_type == "gif": + pixoo.play_gif(page['gif_url']) elif page_type in ["custom", "components"]: variables = page.get('variables', {}) rendered_variables = {}