From 66e933d769be033201834029fb05d81f48fe5378 Mon Sep 17 00:00:00 2001 From: Matthias Mair Date: Sun, 25 Jun 2023 21:48:18 +0200 Subject: [PATCH 1/4] bump version --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 0de9f26..4f01249 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -5,7 +5,7 @@ build-backend = "setuptools.build_meta" [project] name = "inventree-wled-locator" -version = "0.2.0" +version = "0.2.1" description="Use WLED to locate InvenTree StockLocations." readme = "README.md" license = {text = "MIT license"} From ef253ead63fc6e1ce1e5fcb8c2f2b9978d116b42 Mon Sep 17 00:00:00 2001 From: Matthias Mair Date: Sun, 25 Jun 2023 21:51:02 +0200 Subject: [PATCH 2/4] enable turning off leds with function --- src/inventree_wled_locator/WledPlugin.py | 28 ++++++++++++------------ 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/src/inventree_wled_locator/WledPlugin.py b/src/inventree_wled_locator/WledPlugin.py index 3c64a96..7bdb318 100644 --- a/src/inventree_wled_locator/WledPlugin.py +++ b/src/inventree_wled_locator/WledPlugin.py @@ -43,19 +43,6 @@ class WledPlugin(LocateMixin, SettingsMixin, InvenTreePlugin): superusers = list(get_user_model().objects.filter(is_superuser=True).all()) - def set_led(self, target_led: int = None): - """Turn on a specific LED.""" - base_url = f'http://{self.get_setting("ADDRESS")}/json/state' - color_black = '000000' - color_marked = 'FF0000' - - # Turn off all segments - requests.post(base_url, json={"seg": {"i": [0, self.get_setting("MAX_LEDS"), color_black]}}) - - # Turn on target led - if target_led: - requests.post(base_url, json={"seg": {"i": [target_led, color_marked]}}) - def locate_stock_location(self, location_pk): """Locate a StockLocation. @@ -68,7 +55,7 @@ def locate_stock_location(self, location_pk): location = StockLocation.objects.get(pk=location_pk) led_nbr = location.get_metadata('wled_led') if led_nbr: - self.set_led(led_nbr) + self._set_led(led_nbr) else: # notify superusers that a location has no LED number logger.error(f"Location ID {location_pk} has no WLED LED number!") @@ -76,3 +63,16 @@ def locate_stock_location(self, location_pk): except (ValueError, StockLocation.DoesNotExist): # pragma: no cover logger.error(f"Location ID {location_pk} does not exist!") + + def _set_led(self, target_led: int = None): + """Turn on a specific LED.""" + base_url = f'http://{self.get_setting("ADDRESS")}/json/state' + color_black = '000000' + color_marked = 'FF0000' + + # Turn off all segments + requests.post(base_url, json={"seg": {"i": [0, self.get_setting("MAX_LEDS"), color_black]}}) + + # Turn on target led + if target_led: + requests.post(base_url, json={"seg": {"i": [target_led, color_marked]}}) From 6a175e81fab789583a191aec74c3fc5663ac50f5 Mon Sep 17 00:00:00 2001 From: Matthias Mair Date: Sun, 25 Jun 2023 21:52:23 +0200 Subject: [PATCH 3/4] add URL to turn off all LEDs --- src/inventree_wled_locator/WledPlugin.py | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/src/inventree_wled_locator/WledPlugin.py b/src/inventree_wled_locator/WledPlugin.py index 7bdb318..96da870 100644 --- a/src/inventree_wled_locator/WledPlugin.py +++ b/src/inventree_wled_locator/WledPlugin.py @@ -4,18 +4,20 @@ import requests from common.notifications import NotificationBody +from django.conf.urls import url from django.contrib.auth import get_user_model from django.core.validators import MinValueValidator +from django.shortcuts import redirect from django.utils.translation import ugettext_lazy as _ from InvenTree.helpers_model import notify_users from plugin import InvenTreePlugin -from plugin.mixins import LocateMixin, SettingsMixin +from plugin.mixins import LocateMixin, SettingsMixin, UrlsMixin from stock.models import StockLocation logger = logging.getLogger('inventree') -class WledPlugin(LocateMixin, SettingsMixin, InvenTreePlugin): +class WledPlugin(UrlsMixin, LocateMixin, SettingsMixin, InvenTreePlugin): """Use WLED to locate InvenTree StockLocations..""" NAME = 'WledPlugin' @@ -64,6 +66,17 @@ def locate_stock_location(self, location_pk): except (ValueError, StockLocation.DoesNotExist): # pragma: no cover logger.error(f"Location ID {location_pk} does not exist!") + def view_off(self, request): + """Turn off all LEDs.""" + self._set_led() + return redirect(self.settings_url) + + def setup_urls(self): + """Return the URLs defined by this plugin.""" + return [ + url(r'off/', self.view_off, name='off'), + ] + def _set_led(self, target_led: int = None): """Turn on a specific LED.""" base_url = f'http://{self.get_setting("ADDRESS")}/json/state' From c3a9c37965edfd7fa5dd64787891cb4047d6fb3b Mon Sep 17 00:00:00 2001 From: Matthias Mair Date: Sun, 25 Jun 2023 21:52:37 +0200 Subject: [PATCH 4/4] Add settings panel to control LEDs --- src/inventree_wled_locator/WledPlugin.py | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/inventree_wled_locator/WledPlugin.py b/src/inventree_wled_locator/WledPlugin.py index 96da870..05ac1ac 100644 --- a/src/inventree_wled_locator/WledPlugin.py +++ b/src/inventree_wled_locator/WledPlugin.py @@ -8,6 +8,7 @@ from django.contrib.auth import get_user_model from django.core.validators import MinValueValidator from django.shortcuts import redirect +from django.urls import reverse from django.utils.translation import ugettext_lazy as _ from InvenTree.helpers_model import notify_users from plugin import InvenTreePlugin @@ -77,6 +78,13 @@ def setup_urls(self): url(r'off/', self.view_off, name='off'), ] + def get_settings_content(self, request): + """Add context to the settings panel.""" + return f""" +

WLED controlls

+

Turn off all LEDs: turn off

+ """ + def _set_led(self, target_led: int = None): """Turn on a specific LED.""" base_url = f'http://{self.get_setting("ADDRESS")}/json/state'