diff --git a/application/src/main/data/json/system/widget_bundles/air_quality.json b/application/src/main/data/json/system/widget_bundles/air_quality.json new file mode 100644 index 0000000000..ff0d1aaefb --- /dev/null +++ b/application/src/main/data/json/system/widget_bundles/air_quality.json @@ -0,0 +1,71 @@ +{ + "widgetsBundle": { + "alias": "air_quality", + "title": "Air quality", + "image": "data:image/png;base64,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", + "description": "Contains widgets displaying air quality telemetry.", + "order": 12600, + "externalId": null, + "name": "Air quality" + }, + "widgetTypeFqns": [ + "air_quality_card", + "air_quality_card_with_background", + "horizontal_air_quality_card", + "horizontal_air_quality_card_with_background", + "air_quality_chart_card", + "air_quality_chart_card_with_background", + "simple_air_quality_chart_card", + "simple_air_quality_chart_card_with_background", + "humidity_card", + "humidity_card_with_background", + "horizontal_humidity_card", + "horizontal_humidity_card_with_background", + "humidity_chart_card", + "humidity_chart_card_with_background", + "simple_humidity_chart_card", + "simple_humidity_chart_card_with_background", + "humidity_progress_bar", + "humidity_progress_bar_with_background", + "co2_card", + "co2_card_with_background", + "horizontal_co2_card", + "horizontal_co2_card_with_background", + "co2_chart_card", + "co2_chart_card_with_background", + "simple_co2_chart_card", + "simple_co2_chart_card_with_background", + "pm2_5_card", + "pm2_5_card_with_background", + "horizontal_pm2_5_card", + "horizontal_pm2_5_card_with_background", + "pm2_5_chart_card", + "pm2_5_chart_card_with_background", + "simple_pm2_5_chart_card", + "simple_pm2_5_chart_card_with_background", + "pm10_card", + "pm10_card_with_background", + "horizontal_pm10_card", + "horizontal_pm10_card_with_background", + "pm10_chart_card", + "pm10_chart_card_with_background", + "simple_pm10_chart_card", + "simple_pm10_chart_card_with_background", + "radon_level_card", + "radon_level_card_with_background", + "horizontal_radon_level_card", + "horizontal_radon_level_card_with_background", + "radon_level_chart_card", + "radon_level_chart_card_with_background", + "simple_radon_level_chart_card", + "simple_radon_level_chart_card_with_background", + "volatile_organic_compounds_card", + "volatile_organic_compounds_card_with_background", + "horizontal_volatile_organic_compounds_card", + "horizontal_volatile_organic_compounds_card_with_background", + "volatile_organic_compounds_chart_card", + "volatile_organic_compounds_chart_card_with_background", + "simple_volatile_organic_compounds_chart_card", + "simple_volatile_organic_compounds_chart_card_with_background" + ] +} \ No newline at end of file diff --git a/application/src/main/data/json/system/widget_bundles/alarm_widgets.json b/application/src/main/data/json/system/widget_bundles/alarm_widgets.json index 314b962089..576e8aae79 100644 --- a/application/src/main/data/json/system/widget_bundles/alarm_widgets.json +++ b/application/src/main/data/json/system/widget_bundles/alarm_widgets.json @@ -4,6 +4,7 @@ "title": "Alarm widgets", "image": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAACgCAMAAAB+IdObAAABRFBMVEXg4ODf39/g4ODg4OAAAAD////9/f3g4OD39/f7+/vv7+/RJzDo6Oj5+fnu7u7z8/P09PSXl5eGhobLy8vm5uapqanc3Ny6urrU1NSfn5+xsbHy8vJVVVW2trbCwsJtbW3Dw8N5eXnok5dhYWGOjo7x8fHOzs6SkpL55OXPz8/0ycuPj4/XQkpSoGr88vLt7e3x9/P/9ODxu77ieH7i7+bb29v+6MDd3d2MwJzcXWT80oI8PDwhISHroKR+t499fX10dHT8xmOoqKjlhYpJSUnG382pz7Rubm78wVP/+u/319jurrHtrrGayKj7u0P/+e+42MGysrL93aGFhYVvr4L8zHI2kFHj7+aoz7T+4rBgp3bfanFEmF3UND3U59r+7tDfanD7ryX6pgrlhYsniEQvLy/T59r915L90YJEmF7ZT1fTND1WwGlnAAAABXRSTlPvIL+vAC9A4IoAAAo+SURBVHja7JfRbtowFIbD2t+xi2iZGIRQhKJMkaLV6sW4mggSgl6tfYOJq6nv/wo7juIlYKfKtmqOq34x2MYnwKfjQ0hwOfgQhL5zMbgMBsEVg+ewjDQuMrwBrmhbeZ8PBQuCEG+C8F2kZ7yLvCqscxjrJsL8whSpPYQQowZCNU25JOqR+B0kdK9DqhEhmuuNs3Rg8xUdbkEYIyG0iiFCGiPOx+1wOqgpyhHNyye9pKhmelV1BNdHOdFn12+q4ZbPbIHzEakYItpD+HN5FGRiFyEPfzQIpkxMEUoIF/AKwe0iIw6/oJQwZhMZwzPGVhHhpwgzil3wG1Q8HocW5BN6xg0XtozUInJo5YgGq2k8TaC45ij5iP8NiRgZYSRyi4phC6iov/inGfh+xal3IXL7aiLRIlnwOOKL1WLSExG0iBzW7SJVi2a4juLIlQg7EWFM1YgpsgW2L4jE1JRIzGc9EWnZWhKEbBeZT/cJ5jFP9tNFr0W+gvhSi5hw9VDNBVnXYl+j5Ieeo2dkXTOSA4+UlPzYZxGcFTtMkRSAlABSn0QoI9mpiIQWuZf9FOlY7E8g0q2ud1Mky+AOLQIjI6MzkTUafDNFkoeiWIZwh31rmRnJoTj8hCI3RMLiIZo+L+GI7iIpoGtEkZ6LzHdzYFfAGebWstdIjhPurcW+2cAR3Yv9O07ITZHJ8nkzh0uyLhmRaZODNEWS3efiDn9Dz+5HoGokgzP0X5R/FJnsQuCuCOEQyghsN1bZn4gkxTJJelDsYC/8/B7tHhJN4o3zC+Ivbq0gt2EQCJ5wDBLx3jn3zEPan/T/97KB6azQRpErH0InDjDrWdsTYsnJ8vIe+XL/Rvn+nIsr7/CIsrkzshiezcgRFgNnZDKyVFWhQfwfVllWKytInoygziNLTckme94CjbAQmuXIYRVssQhukbliFXcpHyndiTauHGNQq4YRSr4u2YgHP15HU0d61Q7grpTS0Xy4RlDUPTrK6KWT0jZlOoAADThjNlkzNUQtE0qxjBAw7JBZJ/ujrBt8Iw15XwSotDtGYOVSxBOyUwlqQ+GUp8OwAqj6GfJoMgMgjpJ6hhnLDU6Cd3D2MOKufOiI26/SvG23IWqAPAL88enohuzRgXPMc4JAhIayYcM3staqmkAbNEIvL3L/iODz61cHETBKtdI+6gwS20GGF7PZarxvlCLNcHxfeme1Ezm78AxnsselZygIEgpJeAQ2uG6TSe18Je+9gu4CqJF0Wx53NZKXeuT1EePtn6zE/mHHjlEgCGEoDFep07wtBiJBAkoOYLXt3GDuf5dlpzFHMOLfWX7IQ3CvjWzRnpDaCEo5ixC/rz+EHTQAH86O95ShCHmKEBT2EZba7m7WjbVIiu+uAGFBbVAqXSAgoavQl60PylCAFHuqQr2yTgi8SQpJgGgjvoeyqbRwI9VSjGRCZkyxFAvZ9R3J3IGs1oGs1oGs1oH82KuDFblhGIzjpw/mUGLqkQsaJKvCxSbsOadeB/IA8/7v0kxoaRkYhy5Z2A37O9ig2x8Eem+OGDJ8Ww14ghZ4MAzYFKgz6KDwypCYVhFPNJNbeOiIcbOEyq0E/CtnzdjUXJIqFlX/M+TP94xGRGrJ5oY2873jx+XyslUyCY2U5pZ0ZC0eSklJhLMyumQKo8joXk1Sg5H7tF8IJ5kERYvKvYPOZ3o5oU/tRj9VvlvLwpavYGWt0Su6KMrETNqi8hgh1ZT2CwniJDAttQIYcD4vT19VWJJa4QXXnIOsIZCCvobszOr6O4Ry5J1CcgNM6eqO5ozFPWRLcDdi95Aaks3BkLLO1Br62Equc7Y5VhtLNHLPu4SsRgMJVr2QbWSE3TyGDKt+yIQw4a/T6bUhFW8Wcvm6uuBDOuJl/9g+Q96bJeR0CEvIl0M40mrhED5DfrFf9ipuA1EYrT4YUly4mv9bLC7cqVIzgWmy6uRGxgYVrozdJO//BBk5C9kVW8isipXxgRn9NIeDENL9bnw26q6Sz0bdVXLHb3zQWivczf4INGWVPeEeQlAmYIKmBUIkaqUUSL3tAAGKQFBsFJSiccOE5prw+4pdg3PCboddWXMQ0ew8/mtuZ9Z9PQTOQ1s2ta985VhqI+XqVeTArtpY0ppjqO1mGtK16C/7fsgpH7vu1HYJc6gA53zg6ORQq1cZ1XLYLhTCkTcVLHnN0JtftipHI1tiuoWQZ8vTkLY75Qty7lPuzyUrYW5IMUaO/qdUxKPab7HUE4mO6C2EJFRExNgijiFmvPcioGlIf7o2l9Q1JaRNp2FuCBeT8+IU1WDif2oV3QKjLgWQtSTQKjgWDxO98gjRk/YmintR8NFMX/a8zxj27Z8h5aYdmuMZsygqQ2EU6iLwN3VRmaVHXcbdtEd8ZK1f9gbvWXHIe54hz5C18EghPx6CRwrBQ/AM+dve2bWoDURhePvxtkMvBibzdWYugkgKEpsgUVAv1KKsF7YLFpa2bMuy0FJo//8P6MS1rUq7bmkoGnwyM87c5OQh4jDjITk06igi7QqJo2RDZCJXTHCU/MXCymutGX6PYvgjaXeWA3kzX+RNrLnBXrj33MTYwat/F+HyDQcR+n3qE8rKJGd9YlLxhAzjnPphiB1aL/JZMy1axWiYF0gL5K9SDLEXobgwFrdhUEYMPXIVLXW99yaixGsjSJRVReQpUQmt1uyeXMNim6IJoDtLu6+G+XDxYTQbFTeL4X3X7NJ7qanNIrK3oSsSEdrJX5sPL7UjgXi6sfmQaL8rMkO+6LZa3bSLYfMVMOoO03uIJIAy1jkt4/Xmg5PVbT7YBvG1CLlwWCUQmYg7o+U0iBhHEtvk39JPr0uRxYfWMO0WzZv0w31EXIOcsdaSalMQWYUWRpgKfrWYAkiCYJjiggg8NqxsiXPJpeGGgWKGHVqjFGmep3jdKlCM8tbropViPyQZU2UbAjAqx2VAXvU8cmh/x9dxZj9uTiKHxknk0KhTwgCrBXX6aqEWnEQOjTomZ+5Pl90HB6qn+s2HmLCJC4XjJxpApDwn7DCfI8PgC34yxv3wDZQopWy1IlYCXDdwe0CEwi0s875hLTxiP2ENH0liW4GvL88/v8s6g8ve+WA5HlxgfH1xucQg9O5GREDsuRB9GTNSpKlCkYR7apvIeEBoPeEiyEQs4k5FyvEwNpoJ8tjka7j6rHexvHo/7nzufHz39vyyl83H1xnuxHhvSHMrpdFWOhPxdpUikNaL2Jn1HRG3FXolF5UiEI5jk+yq8zFc+kX2fo63yILIANlg3tsjMk0iLSVYKcJWmSO2KhFnyU4FN4JN8EPEJj9EmPAvueBtJRNsMbhCtjz/ON4SKce4Cx4BbSWmnhxpCMna1leUr8U4ZwgFoQWw6jAVBuUnCy1f9VkssUWnU5Zep1e2WNfecn6FO2GhlKeFWp0fUOz/ZtCxNwz76bwf94DTzH4SOXyenp3V4rFUT56ePXyGGvD8UXj79POjvydPngWNxw8ePT12zh4+ePwduACXxehGBMkAAAAASUVORK5CYII=", "description": "Visualization of alarms for devices, assets, and other entities.", + "order": 3000, "externalId": null, "name": "Alarm widgets" }, diff --git a/application/src/main/data/json/system/widget_bundles/analogue_gauges.json b/application/src/main/data/json/system/widget_bundles/analogue_gauges.json index d7e5f4d9fc..f04547a919 100644 --- a/application/src/main/data/json/system/widget_bundles/analogue_gauges.json +++ b/application/src/main/data/json/system/widget_bundles/analogue_gauges.json @@ -4,6 +4,7 @@ "title": "Analogue gauges", "image": "data:image/png;base64,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", "description": "Display temperature, humidity, speed, pressure, direction, and other values on analog-style gauges.", + "order": 7000, "externalId": null, "name": "Analogue gauges" }, diff --git a/application/src/main/data/json/system/widget_bundles/cards.json b/application/src/main/data/json/system/widget_bundles/cards.json index c1420e6549..39996839f1 100644 --- a/application/src/main/data/json/system/widget_bundles/cards.json +++ b/application/src/main/data/json/system/widget_bundles/cards.json @@ -4,6 +4,7 @@ "title": "Cards", "image": "data:image/png;base64,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", "description": "Includes cards that display dynamic content based on data from one or more entities. It also includes static HTML cards.", + "order": 2000, "externalId": null, "name": "Cards" }, diff --git a/application/src/main/data/json/system/widget_bundles/charts.json b/application/src/main/data/json/system/widget_bundles/charts.json index 4270cede84..5119d01671 100644 --- a/application/src/main/data/json/system/widget_bundles/charts.json +++ b/application/src/main/data/json/system/widget_bundles/charts.json @@ -4,6 +4,7 @@ "title": "Charts", "image": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAACgCAMAAAB+IdObAAAC91BMVEX////K5vz/wQchlvP0QzZgfYtMr1C20ujl5eUAAADi4uL/ySX9/v7/9+Dg4OA8o/TK2eT+6Ob1Wk7q9f7x8fHw8PHy8/L5+vn09PTT2t/p6ekznvRfs/b+wxHLy8v8/Pz/6KL///3+8/JRsVX6+/vq9uqTw+rn5+diuWVNq/bk5OTY2NjNzc2+vr6lzqfqop3u1Yr/wgzD4/w2oPSs2Pv4+Pnj4+S83/v8xBj/wgr0+v5itfdGqPX/1lv29vZUrvXHx8fH5fx2vvgunPTO5OvQ4+Oryd35xSG23fuRy/qAw/n39/jt7e3U4NK3t7eqqqprufdasfY/pPXL5PHu7u7r6+vf3t3/8srW3sjCwsK6urqxsbGw2vum1fuGxvn//fj/+urtzVf3/P/i8v6g0vvL5vqa0PqMyfns7Ozm5ubl1IL/333p0nLtz1/zyj/7/f/S6v17wfjM5fR4uevS0tJtiJX/3HLq0Wrxy0b1yTj/zDD/xhn9/v/u9/7/+PgpmvT//PPS4dj8w77/663c2qnm03yXzvpwu/dmt/fv7+/m6+2uz+ra4eX93tzV1dX/7LOurq6tra3g15j/4of/2WfvzFH1V0v/0kj0STz3yDH5xyjZ7f2gyerR4t7/9tzb3Nv/9dT61tPY3b/Z3Lrb27KMoavf2J92j5v/5JPrz2P2ZFn/xx++4fvr7/Dg6Ou+ztD8zcquvcT/8MKarbakpKSCmqT5n5iTz5Zmgo/5kIn3cWfpx0z1T0P/zz7U6/3P4+bO3ObO19vF0tq80dm6x82jtLz/7rni1YyJy4zc7/3O6Pz+7uz94d/Y7tm437qx3LPIz7P6sauo1ar/5pv6opuRkZHi1o97xH7aynr4gHdpvGzhymZbtl7zxC36wRC30ui30uTM1Njz69TM6M3F5cbC5MPDz7/p3bt/q52huI64wIf4gXjfzG67umTVvUDk8+Tm5N3a185yss2TwMjCz8T7ta/7s610qaWOr5PSy5H4hn33fnX3eG83NCs7AAAOvklEQVR42tzaSYyLYRzH8Z9SaV6P19a+7+u1VKmUWhJLK7baDpY2StKZCSNmwsFMHJDgYM84WGIZIUgkloMQYt8FsUessUWIiy0ODk4ccDDzvG2fvn3eeVvK+758LxKHJ/30eZ63/+kM/p+ICGVhHA5r9Gj0m7wQv1LlHiRrt8BZSae7kiSS+IWk55WhLXAWRIY4uW/fLaiHTFBsZdO9k5OOgRApJAiCCqm+78LTNZVQwoIQTcgoIlJfL/abPBpEEPYIf6kwiioeEqMpGbToQpLqGknjasWoj6D4BNhYUBVDMpqK+MSw8i9A4kLB1+kvExPE4ZBYOORHEUmiShwMkbmXZ0ZZ51QIUcUg8lPWb4hh2TAYlBDjjoTEREnvOnrs1JlFbre7Izo0b96p95qJQ5ZDlz+sOhCSEAhYwWunGgw0Ckk3YmazZfrzJTsM4hdSYB29pSkYhDVo0q5csCg5CiKLEWTbsN/NYhDW8LvIRjwJB0EiYpDtRobBQ1hTryCbqv5VyKpufKthnCISpIvfYgADCGssu/gpz9+EtHbxtYJhceboeMBtDmF1moBMXo8jIHLWQU5wCAbhGzsruyeqAyDBcj+0lP1uMwhf79lIV1ZjO4RkPwmOHHCbQ/gGZe+8R7Ib4lGgtX6RuxCEb9yY7PsRtBfiVZmjMIRvZbPsTbMVIovcuTKF8I2bz94SGyGZAxE84y4Owjcoc+PDEfsgUhm0TrmLhfD1ngWaX7QNQjKfIDfdxUP4xkKrxmcXJKSkL/r5kiDNh0BLJPZAiJj+94y7NEin5eyk2gFRFdCOuUuA0BY0uSVXO/ONLR1iuCGxRSVA0s0HzZuA1rTInul0+bbN+dr8YUiZBNoJd+mQztASQSt/LiWRtAoighZfVAIkW7Pc0xqsnC7Vo94iSCTENqR0yPDM9yp0Qyqfd7VuR2plNEYWlQJhzdZd900Nd6QcRBBuGM0Cwq/00QAyXhDC+SfrmvvPQOaAts4HliU7Ele5b35KgXSeARqJWg1RY0hHNtw6UBJk5fDBy9lGWw0RQVtVrQ0pJ8zHeFPFMO7qWQkRQOvmWtKNs/CQQgqWlLASwh6+I+n/P9UsR26e+QXIuClMwSJRayFeH2itXFqHD7bmLGaQTmOHzAMtRKBLtBaiRrQr4mIt3do6oFn2F4CMGNxhHpt0FOgSfhsS6G5QIYhA0FiFi8Ysu6lFub7/fFOQUUP0ByqmQleU/C6kXQu+9gUg7K7n12XuXmqJpS16yKgJwwpcCqgxOyBbXQYNWKxZ4m9Onc+FrB04CwD87849MPnZKSXZAVnsMm7otopA+hdX5zXIlGZUEXx37nXLlg9NID6vHZBtrqbbVlGlWdZj2Hx6ueX3dxoUDZ0zgUgpOyAjXaaNPFmFTPKHOz2oogBEqXEgpKEdt1c1Kh6+oIp0d0wgcdWZEJerNQDygikK7UjCaXck3UGgbgXkHrmQJ2Z3ZJ0dkLmFj1YAG3deAB7kQj6YQNZJdkAOFnJ0WYUVh1q0qAP650B6mkASiqUQEbTNhSAVwIWG9S61A3mVdbxCTsFa6ArJlkI8fjS2t4BjLlBHF7wYgJSFPOI/N1gCLIXUKNrA2cXUsSSAdpe0FZ8B79OOHhJy8sjQJVoJYQ/Jy6aQavgvZpY8DtwxeGZBhK0Qf5gbtvg2A2ezS27vDj8dUHrptkD2QJccshLC3rjbZgMKsK8F6yXwufFgPTCZ2oGEZDEkrN32qqYvyeEqdG+fu+hX4BGdfM1OlkCA2OnToX7TR1sD8fkKDSm7ge+6RXduBHnxiPstJA+TUn02JZG0AsIuyWaT0eRxC32HVsAPfSIB+K/GlUqyBfVWQNhLqFpqMprkL3sBeUkq9IUiAOTTHimpbgHxeq8bQbzGbTSAbPe+NYJ4vRIypbzcuMWNJlx10EXKidHDN9a3r6D0jYP4fIYQn3H7jCA+Q4jP50UmIoBW3cVkNNGljSq5qRL0KWVgWXS0EPU3Pcov1kYTvosBsGJh5BUO2gBRVG5LuNGE7xn/9wasoAAbIBBJU7ekGoH0aMK3jzkiyKs2bgOEfQasasWPJs+MDJlRRSss8X88DDsgbEtOmowmfC9B8/iQXyhmE0QJQWsxP5qY9AUAiXqRnyzAJgiiMmhVl/WjySdjARtVEFXAJcjFQnr24HtVCiQoQmv3UpPRhMVGFQIuSUXRkJZ8vUqBoMwHrYrMM/hyAPe50cR0VGEPYxshEGVorR6qfRNfDdz7VMCxvQ58Qgx2QvwiyUgGuBraisaOHzJhXDq7AnypGtgKgVKLrITOvLRA3cWmduPsPRgUEWAzBGoC6SoOL61Gto1n2/PPq5d1VTAqWE5sh6B2HdK1Pgld9x9/O7QzuxU/zh5fAeP85TLsh/xk545xGgaCAIr+Eo1GUzn2apsVkoUlF0Bjl1wASsgZnKOk4AZIKDfIPaDiBtyEDhdZkLPVRPKrd4uv3WKqYaz52/XH6+F4PHzmG+apy0OIWqDMfN9FCNpXlEv2gJMQ6CZKNdbgJ4S4U4rU1uIphGANBWKv+Aoh2abgW1XgLQSmMx9FozR4DKEdO2WxYDX4DIFgUcnJn/QbArXFtHTBgOsQCCKV8o+hs0nBfQjos437RI6GznYDcBEhQNr01k+hZaaP+87sZWAxFfm+OfUm77envmR7lyHb+wyRnuVSeLoy+TXGamC1Wq1WPxoFtAfR4rpyDpE6ugxDHZSIy4EBw1AHfaAYcQDHCCemLMcQEULij3pkUAiNeoR8odq04eERE2ljz2HgkZOBNrHmxkY09wgHBtCmppBZsXMxOzu7mvMBqhuvTc8Y6Q4K9GAEgULNfOI15u8zKU6vISpGtHUdSmhfIQq3G6cxQkGgF1Eaa43S2m3qg6yLNWWsiPGIhLa2ro4OjT1iIh3QzQgDRkEmBDQKm3ta8ztrdnilGDEysjsG2CQT4REdHm1dGsfIbHtNE0Z2RjgwkZ6NW2NyoWY9v0xhmwdUMUijl/Ep4jM7J608YhUnHQd2DwKkB1nh0lhg7BRrhFAJ1dgmHTPgxe8afhlzqHsQIMAaV5Eg3YasDq7RxDhuYD0i3M6fBncPAjhqtmHVaOIci6QKWaO5ZkDSAHkE0N7ZhTQVhnF879NFRcSCPoiOZxREMLKLbdHO2sbcV/uAlXOQm87VdHMwp+kMt5lR4lZCYmBJaFqhIklR0K2UQZDUVRBEEH1c9UVFX1DdtffMebZ5ds5ZlJT0v5j4+Pzf9/zeZ+/zvuzCdZ3f2SY1GuSIBQRZCT2LMVQ1goqAIHmZ7ujig6zx+nTpzkl3HVYQ1KhYW2g8dFKqZLIWGg1V59lnrP8jIA3WkNOoKLMHrrI9D6M23aF8426nU464QJCNkOPELfm9xKsm+n4XyO61Da16pbfuREhNEM62xuILy0iv8+WN1aA5qUeI21inCIhEq2+SQ9ozPZe24FpYK41Om5ynIq1r+UBslU6pRmxcdowQa3ROdaUh2/4FgKCr4hERo1sKuwCjtcrecwQyknX63377HMKF5wZpIKR93CCNGltj3U7rKZQrbhB3YpxZX+M9UVZywiZoBVzvAbSrXz3sOGeZwxnyh5Mf8RA1+z0Vkh0Lb7994vYy3S6ui+cpYs9yLPzKiDP0lQKYvp4NtYv75oYaMW7jMDJ6+RSefb+9YvvzdkLcvuPHu+kMzqfMN0tI0lpQkXqdAek1Po6KXHs9rUpMCFhFJmS2QIIEMuyaC/VWzr1FxV5OY1YDJAw5fAq7QmO3ZkvknkxN0Q8lkeCKFIJ09arRjOtUVV0RkAM92meA1TImHMQ0BC1RczOAJZkJyTUB3HYNGiUSAGLyA8SiCDW25Z02XHvk4N237+MWUD198noNC8iWGx1HMMMj84Al/eOBQJBoCwyZ8D5pSZscdMhKINFutU6OBIC4h4FKMiFukOPVPU3aThnQolT4dfjs5ku5IFuqO64AwIc3ZrqyYQpg0CEEJDgIFtqDgpMUqGImnBVQtEp79UzWneRUbDzKMlYwrIKWUSQIpOPcKsjI8uHdwNgMcj0Ix+k30BHt5eoDdNKlCM7pPLNHKs8WPEUCNHfzg8SAmgc2RWRADbzAx/UyO8rKMRun144cHDAXjGWOA6SCSBiICvdmbdPmahexc94Q/PJGe4Ue/VzT3TOdALCqqVrkFStzVjFCgmpqlAfkMZBuxMgRB3g6hpA+gGhFxyPDuJvGH4UTkFYi5Q4yY01QYBlHSCDIw9OZfxpzngjkGtSVXRc2n8UIuDbNN9I5rTQpM6w5JgNZZIYLZABUE/mRiWEAfwbfPOknAYCaSt7J/bU5acpsrgjA4AwSDJK9eYtteQa9LkQ3gNNNN7WnD6ygM04ULn93MwCZMhUFSapgsjAWfUy3YjdTAmzMK5AqPutY3p0A2SxCpYLsltoLDMrcJpz21Et9LMM6/ABU2MU+0xgJj1m2DW7FMmZTFBi7Z+P4jxYKht2oZJBDZZULDF5CngPS1dvLPiyNkjKxzOSgIMbeWN0JGI4lXcUe0TURswD4Tah0EINTv9AQUNxjQHxSfbFhx1pwVUyFM41awB9kB0HBbp52F3wwgVDpICGNnM0QqjqaBdkpVnIMOzYIQEbMuSF8oMejLI8oOCQMpEJS0T//cVCdWMluMOjqMyDPCS/3sG6M8sTMBFz0gf7nQTb09+8ol2AQfJ8dKXbx1JWtwLpNbOO96r6cBpA9yd5xX0yD5TpL1u8MbccgtfvnP6BrJeqKksulNtzSNO1ClszhV4Fs7rSfAqr7ty4//x5pUDRyGJRir6hLfVLgTI7mOZQIUG60yCAaH6fBS9y36/SCZ8IoqqkUyMbRYoPYeAwBY9XVUmYajeHzbBItOgivwWYtcabRCPkI/YUgvxAyoSUCgv6D/AdZEiB79y4REI9niYAsmYrQWvkPS5SvlSJW/SNZS1F4q/CrZoeApNr15fv5szySDQKmlJSXe0oD8QjKr60VkLR9fW0Nf9bGw+US/qxNnq2SP1KRGgFJF9d5BKTt6z+8jz+rQlJzmCflJ6e3vqMkTdRjAAAAAElFTkSuQmCC", "description": "Display time series data using customizable line and bar charts. Use various pie charts to display the latest values.", + "order": 1000, "externalId": null, "name": "Charts" }, diff --git a/application/src/main/data/json/system/widget_bundles/control_widgets.json b/application/src/main/data/json/system/widget_bundles/control_widgets.json index 59a6d6b39d..fb7c6e1ee2 100644 --- a/application/src/main/data/json/system/widget_bundles/control_widgets.json +++ b/application/src/main/data/json/system/widget_bundles/control_widgets.json @@ -4,6 +4,7 @@ "title": "Control widgets", "image": "data:image/png;base64,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", "description": "Various interactive widgets to control the behavior and state of the IoT devices.", + "order": 8000, "externalId": null, "name": "Control widgets" }, diff --git a/application/src/main/data/json/system/widget_bundles/count_widgets.json b/application/src/main/data/json/system/widget_bundles/count_widgets.json index 1ee5567770..775947de01 100644 --- a/application/src/main/data/json/system/widget_bundles/count_widgets.json +++ b/application/src/main/data/json/system/widget_bundles/count_widgets.json @@ -4,6 +4,7 @@ "title": "Count widgets", "image": "data:image/png;base64,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", "description": "Cards to display the number of alarms or entities based on the selected filter.", + "order": 5000, "externalId": null, "name": "Count widgets" }, diff --git a/application/src/main/data/json/system/widget_bundles/date.json b/application/src/main/data/json/system/widget_bundles/date.json index be52525df1..d6bf61a989 100644 --- a/application/src/main/data/json/system/widget_bundles/date.json +++ b/application/src/main/data/json/system/widget_bundles/date.json @@ -4,6 +4,7 @@ "title": "Date", "image": "data:image/png;base64,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", "description": "Contains widgets to change the data range for other widgets on the dashboard.", + "order": 20000, "externalId": null, "name": "Date" }, diff --git a/application/src/main/data/json/system/widget_bundles/digital_gauges.json b/application/src/main/data/json/system/widget_bundles/digital_gauges.json index a423877265..39140fbc9c 100644 --- a/application/src/main/data/json/system/widget_bundles/digital_gauges.json +++ b/application/src/main/data/json/system/widget_bundles/digital_gauges.json @@ -4,6 +4,7 @@ "title": "Digital gauges", "image": "data:image/png;base64,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", "description": "Display temperature, humidity, speed, pressure, and other values on digital-style gauges.", + "order": 12500, "externalId": null, "name": "Digital gauges" }, diff --git a/application/src/main/data/json/system/widget_bundles/edge_widgets.json b/application/src/main/data/json/system/widget_bundles/edge_widgets.json index e22c4fabdb..158a856eb9 100644 --- a/application/src/main/data/json/system/widget_bundles/edge_widgets.json +++ b/application/src/main/data/json/system/widget_bundles/edge_widgets.json @@ -4,6 +4,7 @@ "title": "Edge widgets", "image": "data:image/png;base64,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", "description": "Widgets to manage ThingsBoard Edge instances and navigate through their entities.", + "order": 16000, "externalId": null, "name": "Edge widgets" }, diff --git a/application/src/main/data/json/system/widget_bundles/entity_admin_widgets.json b/application/src/main/data/json/system/widget_bundles/entity_admin_widgets.json index 0d64bf85a6..fc4779c522 100644 --- a/application/src/main/data/json/system/widget_bundles/entity_admin_widgets.json +++ b/application/src/main/data/json/system/widget_bundles/entity_admin_widgets.json @@ -4,6 +4,7 @@ "title": "Entity admin widgets", "image": "data:image/png;base64,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", "description": "Templates of complex widgets that allow to list and create/update/delete devices and assets.", + "order": 13000, "externalId": null, "name": "Entity admin widgets" }, diff --git a/application/src/main/data/json/system/widget_bundles/entity_widgets.json b/application/src/main/data/json/system/widget_bundles/entity_widgets.json index 97bb12aa7d..13194d18b3 100644 --- a/application/src/main/data/json/system/widget_bundles/entity_widgets.json +++ b/application/src/main/data/json/system/widget_bundles/entity_widgets.json @@ -4,6 +4,7 @@ "title": "Entity widgets", "image": "data:image/png;base64,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", "description": "Visualize entity properties and hierarchy using table and tree widgets.", + "order": 17000, "externalId": null, "name": "Entity widgets" }, diff --git a/application/src/main/data/json/system/widget_bundles/gateway_widgets.json b/application/src/main/data/json/system/widget_bundles/gateway_widgets.json index 140d4845f9..bf48fd1c4f 100644 --- a/application/src/main/data/json/system/widget_bundles/gateway_widgets.json +++ b/application/src/main/data/json/system/widget_bundles/gateway_widgets.json @@ -4,6 +4,7 @@ "title": "Gateway widgets", "image": "data:image/png;base64,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", "description": "Widgets to manage ThingsBoard IoT Gateway instances.", + "order": 15000, "externalId": null, "name": "Gateway widgets" }, diff --git a/application/src/main/data/json/system/widget_bundles/gpio_widgets.json b/application/src/main/data/json/system/widget_bundles/gpio_widgets.json index a2f0b39def..78b9c1eea6 100644 --- a/application/src/main/data/json/system/widget_bundles/gpio_widgets.json +++ b/application/src/main/data/json/system/widget_bundles/gpio_widgets.json @@ -4,6 +4,7 @@ "title": "GPIO widgets", "image": "data:image/png;base64,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", "description": "Visualization and control of the state of the GPIO devices.", + "order": 22000, "externalId": null, "name": "GPIO widgets" }, diff --git a/application/src/main/data/json/system/widget_bundles/home_page_widgets.json b/application/src/main/data/json/system/widget_bundles/home_page_widgets.json index 5248b73639..a30d6ee76f 100644 --- a/application/src/main/data/json/system/widget_bundles/home_page_widgets.json +++ b/application/src/main/data/json/system/widget_bundles/home_page_widgets.json @@ -4,6 +4,7 @@ "title": "Home page widgets", "image": "data:image/png;base64,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", "description": "Contains useful widgets to design the user's home page.", + "order": 18000, "externalId": null, "name": "Home page widgets" }, diff --git a/application/src/main/data/json/system/widget_bundles/html_widgets.json b/application/src/main/data/json/system/widget_bundles/html_widgets.json index e7f9a6d254..9293ed5fcb 100644 --- a/application/src/main/data/json/system/widget_bundles/html_widgets.json +++ b/application/src/main/data/json/system/widget_bundles/html_widgets.json @@ -4,6 +4,7 @@ "title": "HTML widgets", "image": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAACgCAMAAAB+IdObAAAA81BMVEUAAADg4ODf39/g4ODg4ODR0dHPz8/R0dHR0dH////f39/t7e3v7+/6+vr09PT8/Pzn5+fR0dHk5OT29vbx8fH4+Pjr6+uUlJTp6emMjIyGhobLy8vGxsalpaXh4eGAgIC3t7erq6vb29u5ubnZ2dmamprDw8PAwMCysrKnp6fd3d3IyMjW1taJiYmurq6jo6Ofn5+Pj4/X19fNzc3T09OXl5eDg4NtbW16enq7u7t9fX2RkZG9vb13d3ehoaG0tLSwsLBycnLQ0NBXV1deXl5kZGTPz8+cnJxqampnZ2dbW1tSUlJOTk5hYWFHR0c3NzdAQEAykmEAAAAACXRSTlMA7yC/r+8gv69spyeXAAAWJklEQVR42uybiZaiRhiFsyc/u+ybbIIIioAKuCuttlt3Z97/aYKgpnti9jYnnZM7Z/6pQ48Wn7eKul3CF1989/23tbeykI+mb74qOL5FePStcPhgItkvv/riBw0thJV/ytYHBAHAvv6ixpcnX6pqYX8ShBWhEkNx8AdFse/syZdf1NCfHaGa1M9Da4D5Ig4+RdFcVatX+Bpo/mtUZrSFSnbAw2+LH9eql6bqW2b+74IhBcjVkV6cIVcQPPadAY7X1a7LkGWtPv4oRMPodbdEXYJKtYz6vREg+2TZWDcYeCXOa78LSIXCJ8GTfQHxjU307NWMTMiSmnuq1adNB3pDD2h65Lk8sErXU8UCRFQIptZN9hTX6y54vE8AYH3M8Lo0VFLYgrhPNxKkAKFb3SeD4UdeSwRsZA5YQn2WjQ7zd0GwiyNN93gF6cRZsPbUOJM3ieqcqlgNn60+1rcW7ZpSiNckx2wWIEi4ZBU5lJ/pxyCMZGrSY/nHSWdjbmc4lAoGLGZNbCNTcWD1KPy04CeRuVOxZG4OXd5d68sB806OFOqsriCEsJ3LD6gghIGL1k+Vq4ZPGGRBWCMsVxqjaqryLBs+bz2EN2V6tO90ZXqQNyTDC41YWfHaS4UPqeHNR5LI76YcNPMOvTKauipmhjqLRrlDU7O6SJDv4sjnIO1dnu3D0S7LN85odqp0NUaixbQVqaN4rg8pNbAK5PnL3gAqCaGW9Z0QsCAKk10Wmcoa4MmGUuE22zh1AvICxAswWDe6EgKzRjebhLEpMuPFu80R7C2Iv95uJs3HtTzT3cf8VDE4Sd3WmNq2JaSdUD+D1PMwVbAowGtZJ5JwMWtMn9Pxrn8COfagVHud6s8uA8MFA82MKkDUvEnvjObO6NkUh4+7JMC7OeINP80UvgKhho+5ytHDqdRl+OBUoZTr9KDnLOaZMB5eQCS2rtv9PEg3tJLLesrbL4rxhL4GwX7st19sEsxMeuDTsfDSQMN0cjTEZDaJHwCcYTzC3s0RtVs3O2cQYsA/Um9qJcrGALNpZNpaqARfYwFwpAasSnH9ZWvEcErLsIGdMrxLiirA9HJ2LYaZsgCi0UJwy1gufZxSGscmTrtLgwLwG613uWr9+axFchz5+SHmdAQnf+d1ZSGB3QZybAEAVy1b+PvNEezS+keyFtc3Gp+Z8A6OfPD0+/k68mAuff4Dg1wc0SRHTukPDHJxhO62jafeBwZ5NUeU1UcG+Tlr9fTkIw+tqyNWIPc+8mS/OiLoNf4jX34vjtBPMyFpix8X5HrVSpLkQ4NUjmD/nZX9mrU+KshfcYRloRLD/juw31y1aqOp9jMIJnLl7hsDJI0BhcIrMVMDKnVa7K2wLvJlFeEizMFI+Ez3umrxYSL/vCAS7QaNk8Rjw+IwZ8pGbzaiMEGCSg2dh18IF0cuSxa1wV7Ont/zdwe57mstm/OVfQYhjEkaaawhyE7Pn02UPEHFgWIRQPh9BeELEFbjOLrvjHmcerQYgsKBxCj0QRmwJFWX5QVW1NTEzuSPwskRrKYMOKhE9/sUCffJWr3Fs38GYcP1Su/z4X41ayrxOBhHVMcUBJWsJbHgUoIkLg22Iwj5TLQTYdLwPZrB+mZ7LMQmrumr54lY1JUsQil/PrML0nCSeARUegwnEn2nrGXudOQMAj1huCCg5wxNtB2OM6mOoHZzKBCttInw/CQPHRuN0sF2aBW1lbvSyHUXgrFDGiuWU4fpAIo67EMlwlopHHCree+6byzW3MMUv48jjWSv8GeQjqqoaFkpN6zP51GnbZoziW8JGgAWv8xUsIQlNPR2UZFg7iT52DMbMxDXCNdstxUoqtKEi9YFCClMPIWBUty0a65bzH0cQfl168bK3pjbhOo0U32UxheQQzzXkKRONnQl8UhbXnqzPAvUE8jGghvaNBkAohlnWjUxqDyaPi+Ju/yGaCzM5zb/S5BWpEE/GQWSK19ABKkzifylbEjDoi68FBmtDWFP/zpIEBgI4bqNVa8CoYdRc7cg7uGIHcjjOnVjQXxs8qCNLFeIgxbRn/IAxGhE1kxNCwPZJLS5HDeBTljb4XohEA4FNzTQg0d0EkvO+dxJI57Ibe4uK7uIiL+5suMEQ36+lXU6QnI4/L64goBkmVcHWO6eWQvFPmxoPDlyRcEujjA0IpIc/4vdfoKB3xXOwu8LI++YfmlbvIBo27pKUIajEgVU+3r1Z9T+ZaC8Fe63L4gkbVb//hYP0eXv5wg9F7QLyMNwaTP8NHN4AHayZK4pKyzPsTf9HKQ9RC9NZV3lKxN+XVRWu1v65bubZ+sKIltQyJnzQNhmnwMgkP4jhcZyH2FwP84HCF/mK7HIWh0Wp5smUTDQj4rNKMf+gCBR42UwOBvH9wedGnHOV2hHUdATiM8yGgcaip/eGX+/lb2Xb3e3QKil1GCBfIgkvUVJz1LUY0fZyjEUQ+RYZUqFsTBiFUGgAChPklJR+SQJBm4FnxyHhlJTPZDSAePGkofCKJCDgZY9IF6PCmmoN/n6OO5a5Hs5Ikr16U0QwpKjAmcsDeIYiSVFdwhfyAaamrT7qjefz0b1zKdaeQ+IVqYoK0Q5DhYr4rUjE0cOpITVOqOXHjkTBj2WyrpxndfyAczqyHiuzDzsvRxR1tP6ui3+EqSqTcmFUECEsKgoZ6YAvSiZyWEkjbuR3obesAdUEgF1QJR1UTXSPsJFE9NzFhJf63afVHzWYACo/VEQ4QyiN6CbWO/lSJjNdi8O9RZkOxfLSoEqLYjt5ATiCTzX1QFoL89mk5Y0W7amdAEyAHErEP6qADkFFdJ6In8GaY4akr1yFscrSJYqDJU9XkAm/rvta9l2a/Pw2dAyE1djyooEQWMonUHIxVixqfqmmw59L1YGFgAie7Y4zQ3v6QwC2qE9wC4gAK6k7Nqd1QUk63v6AzvzHvYhMo76ev3dvkMspAT0ZyBWkC+xqnbqwXNMdRsw7WLQCfKtNo3QRR18IZsl5Gl+SDbWCtInaiCBKFGACdnwEUp1XYB+nZ3M0n2PFPo4ADqx8KiFucNZNqXzVS758F6OVPUCUhsbGleufHgZs3Ac6bcDj/w5eHGvUhNZBi+C5Pt9L8OvUYwg4K2Iz/aaqvfh9UWZ4t7NEezVvpYvDz0eXol18llE/0426ed5+gB/VphTK+p7OlK1SgtYjPuTd7GJlZVk9TqeBAL+kNjy/zHExd7f7Bdn/oAjlG/b1BmEd73OnyJh1bp38otrI1AIizh0AaWIS70tvPtAFvjTop4YuFqvPKpp+K2PS2v+gZXdTbaRfwahuwePhT8hZlCfPQAQo7x26tDdXRIX3r3U20Jyt6jU2AXy0bqGOdZx2Fu9NGZ/IGvFutm6XrVAXrIAGG1RHIkhvogDLvoIhrMEEBhJUBZNwOkHFEmyiEYAgCU/AFnLXChESHVcOfgIA1znR01jysrilI+wJBC0pXEAbNWRKdhFHcU2Sed1DeUncdEZTjWaZbyzaObcDc5bPs8YO6Q4AgyCFFW0fPaWI/K88OMtiBrrnkaYY71LkVY91Q3eVaDtEr1oLHRIepmOTYIy5KB/BmGNHVlm200PVz6lqQq09KMgaGXtoZIuuxy40ligAdwuevJOX2AAIMwx1DxmQgORDmmo8QuphQGnpnpinbsRW3raYhZPslQjuZE8UcjivCT3liPpzOnzb0Fou7k36fG2mbWocapIsSV4EAoYaivBmKrn7WiImPnU21MVCJ3Uy6HcP5C48tQ3PjFs80dFYcvKa8dm49hnjqZdYwGEfeeEnCtFxcYGMIOdoCBiLDeHDmvFMQ1EOFSClC+7odsr1bKZxaE53yPKyl0eKNyqeU/sDUceF+mx9gaERNxWNvf1BkieUWatCgTlHxfBWBW60NCVIhOHw2YFggSjcmQ5QvVbyQsC7I8AUFX6QIEUsXmq8tdd8kXsF7Up1QDKu7awKsxBV6DL2yVHervshrI2ic2c5ggih1EMaLrEO4v6yv/ckUrPLeoCEnRZQPNZuI+sAkSoL+IRHk38sh862Uf6rCl0cUNvy8O6t/TPjkjlpBb3DxXIsfc5iLBlieU+twCq1TJdYkV1Iv4CUmUgWJ5BpmnVDUVqwsEhChBfirYTwFJz8LSNjtaN3fiePViPxAuIk/QYf2aIQViB9PRA1SXRielk0hMksZX26rO2MLNDWRMvkx2LdByArK3wKwj5IyIyp0ox9PGRzqaEJtKrEQMthwLgM+WEOTbK6VKnMP4M0ojbGFaCVN3QGC02d5qxo5r5g5vR/U2tmVGdZ+uXjiC7zUpGrkNrkK9N0dlnB1OLVYhabC2ZrSS2P1wfHMzI9htdpOez9Qz15dVeJysQUlkPAIjCesAfZgB7C0BabdplbVgvq1WKodluk3cAnKwoDckCgHZQZrLF7jnpzLvQmqOgBQeh1kqgPaHKbijlsNsLjHrcb5aAxavnOtD5Jnumb+1r9ejX+1ocWzQYlIBKJEoXppLnAIVjLFkcQeZygcBhePG3fwonmJmLwO+Uz5buqtIH5NQkebZ8/1O+kk0UALZbCqrlnXu9i1Y1qm6KHtDTAaZKUAxXpgkU/7V9rQrkljDpsI7fRNTiErLWO1CJdzbZqc2aU/D3t0MBlVPwVpyukkWVRiTc1rWbP/kdIvbLL0PJ21yA47/1UyAASPgndPOqRdG/dMRH8DMR9mZPzVa5olI95nb06nIkjcC9dTtr8b1FSP8CRKoTVQOdTDC4ivWk298hVtDtZyC6mQZ31m1H2rvZ/ArCFYdI4AgsPYOQmHvygCSwche1lxin9lLnz0cYDCUAJ1CUrW7kLliTHIe76rYj4saxxevQaieprhDtRF7NKxDKPMUf0OqypwHAVNaANtP9TKRa8sQG7FEYO2IRiHSvylpFpZ96cH9dQS4avMixKl5AJNlVeHEfjPZRBcIOAokGQhgaQ4EAxkxJor4bBTPazIxkhyqHqF9j1YNqPwCQnePJNXbiwP11BblYYqzm9ReVv4B0MYCG3P95jpTxpzaZwnQyAD/pglVlraLly10vhUIPh4QCAGJeTiCipcNddduRRuajwzn9GqQVDz4DUSYqNCcKNGUbbMEoQNSianE0F8qJZMVPk0vwAMIL4K667Yh9rPGbJfUapLdb4CcQtW4BwGJiAS3VuVCiOVPHgXckrqF3nJjrZ4/GRqyWFfpIk/axfA90uIT76wpylfP0VJjyGgS8w9OniABn3QQAa/giI83Np00TOo5XxrGXlxytZZ+OdRAnn467tvtyeJrhhCeX9tQ+EXA33Xak8oTSfnErIF5eWjmmPIazTFGIot2SB9XGFYZft7g4ngFgTkGYz0/coG3ubMhtR7A/cZsTLow5+HX5T0w5Q0y4v64g3/Lof+DeeBL54nsERT/6I64A7DfFs7rax39WF/vy9NTxD7WP/vT0l19/9cX/+qm9e91REwjAMNzTnw+YgzOMoiKCIIjgCdGqtWratE16/xdUFNvapkfb7tLWN3EzjjHjE5nFTSRbvR49fqj9wZ48uqNFHj00GP5czHx4R4s8MfEHK6+Zv5NFNIY/G3v44E4W0fCn0x7cxSI3yA1SdoPcIDfIPUJyGwgdBCGD1gZoaJC5k7q+L8B91/WHL7K267prayuBpJg3KwrRYip3BhlM6qj5gOHVld8LXcehkM5275jreT31ciE8CbiR45CKQqjnpAdwdz3/BKIJBiDZAsUD+tjCGaKJqh5aiGz/BWxbG6gLyNieky9BBnatshDemZhq53kTcYRQT9CBFkYAvgR5Xd3NDjXeIxgbMopqk/1e2N7ep2FcjD6D7Ab7nlvMV3WzA1JCSYBRQillhBoS6jg6f1GKHm8Exwflab6ykIv+5vPI+26QG+QGuUFukM/7ZyCMlT9YGRg7T5e3L1ef61WDiGcuIBe74Wx0LDb7oxBAMmqYfLTGVwpWSdUgTvcA0Naz+tZ/thn7ttlcPSNQ01XLEKvBXwihwGDjALTZ2mjgy+UnkHzacCmMQ2OaA9pucSgg5r6xG1YJ0g/DbfcC0m/uEY2ml5BhdxF3XdVfeo1NZi5a49kqUfFy/KxVrxCk22yONheQN/um0Y/jS8h4YzE36m1c8FZH67osXyXWZifaq6RCEI9S6/LQWjjd7TLvXEImLRNAvmmDzvrZyj7ukd5qOZu1wgpBPt8jDdXozszdJWTQ5QjDoLuHaMViM0D5jpimJqsMwXp1ICfILI5jASBtTcebgeyPBv1ujS5ah8YqkZ2lN27wykD4NAHobiwBe2oBND5ATAXZd2i9f8wBwNpvFq4C9xZv5gTOtO9PU+j7Rd8mlYH8YITgmGKX38wlrELnkV/t+xBJ8LORCkKsyWSaX7JclLHI/KojJpWDiKkCBgk+5K5QZnc5vtaROJC/DtGH5HdBFiaKdgTnAreDU9xbc3wr79chrNMyfxNE+TgWK5TRQ72EkIGzPUO03klogKbcHY8zAO3C+bwTAuIQxy6tAATsxOngnJejHG9tvIfU1ijyOYzpVCempwMdEHNimZA7S8nXY3Y9JOnsdSDwOi9ADu1DCHHoJPLavxAHQ5QND6SE6Dv5BciKAgiHBeR8aFkuitbG1ZDNaLbxoS1HzU0gV93uQTRbzU37SkjmoUy9kUDntIKFL0BiFOXJR4gZc/ZLe2RpGaO+2nW5vpzKVUMYg01gPFuoqyD6hKEsrqF8kdsQX4IMUJTaHyEQAy/iv7TZ5bMGHW0ajWVDrjygXwxbM3oNhC0kysTb5mw2ezV7I1+OisHT5Ux9D1LkTMJfhTzrpkE6PEGm3XkxJFdAVJ/jsvNmv3hHch9F+y9BCDs9Q/81CItWcTJ9cYK83kzt2L7mt5an4TsQHgNgz8XnEApkEYp2V0MOCyqnExC/2XrD5cgFmD1r9YMrIO5yfUygNv8aBNvxa7vzjH8GWbsZIR13bk9sBt+6AvLli++ZZLgCQvkpCmKgjOKcIjjH855J3z+kZDlQvUCB8TzTAZgKuPdPv+f+/o/xx26QG+QGuUFukM+7Qf5TCGGf3f+7IJoBDCmKehyfFBhf+fd5lKngEzHFh8x7g/A2sAYzGFKhCCRAZfnq8joUBYjBTnNEUapIcY+1BTEAqsCUKQE4CYGkOD5b2vp9QVSk6gnZphFNRU0gkdk8EQCNauu6ZddqKkxtmbUTZ7jtpVYW1kJ9WzMi1n4data6FpnAfG2K9jwwbb3N/eC+IEi1pA4rW1slRI/SWhtIh8it9uvMV2HPMG0wfeggtQIOW3+t04hGILaYIxCANUdYyyOkPkUi7w1Cwwg00pMCkjuw9VBwHchOkB7npO7Yug3QzyAh1AXE1jhHvjXvE8LCAHKb+zwVVpj6Mp+nHDDtNKpzO8hoO5vT9MULcYJkdmaT4HRo5cnQKiE01LUk04xEn5N2dm8QGASoc0NSwizLAOEWw3FGL+4LCV2YUMUcJaAkCwSF5Oo4VYcyQQkArpjFiaTQYdbv/zzyI2n1yp5Hfi5W3RPiJ/0bH1H+RshDhj8bKyB3schjA3+w8pr5O1nk0UOT4Y9VXjN/R4s80f5c5TXzd7HIO9jqsoYL1vqIAAAAAElFTkSuQmCC", "description": "Visualize HTML based on a configurable template or function and device attributes or time-series values.", + "order": 21000, "externalId": null, "name": "HTML widgets" }, diff --git a/application/src/main/data/json/system/widget_bundles/indoor_environment.json b/application/src/main/data/json/system/widget_bundles/indoor_environment.json index 1464ab1135..f4fc3a0201 100644 --- a/application/src/main/data/json/system/widget_bundles/indoor_environment.json +++ b/application/src/main/data/json/system/widget_bundles/indoor_environment.json @@ -4,6 +4,7 @@ "title": "Indoor Environment", "image": "data:image/png;base64,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", "description": "Contains widgets displaying indoor environment telemetry.", + "order": 10000, "externalId": null, "name": "Indoor Environment" }, diff --git a/application/src/main/data/json/system/widget_bundles/input_widgets.json b/application/src/main/data/json/system/widget_bundles/input_widgets.json index 5118c245c5..fe24d68960 100644 --- a/application/src/main/data/json/system/widget_bundles/input_widgets.json +++ b/application/src/main/data/json/system/widget_bundles/input_widgets.json @@ -4,6 +4,7 @@ "title": "Input widgets", "image": "data:image/png;base64,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", "description": "Various input forms to set the location, image, and other configuration parameters of the device, asset, or other entity.", + "order": 14000, "externalId": null, "name": "Input widgets" }, diff --git a/application/src/main/data/json/system/widget_bundles/liquid_level_tanks.json b/application/src/main/data/json/system/widget_bundles/liquid_level_tanks.json new file mode 100644 index 0000000000..61f7e234ec --- /dev/null +++ b/application/src/main/data/json/system/widget_bundles/liquid_level_tanks.json @@ -0,0 +1,23 @@ +{ + "widgetsBundle": { + "alias": "liquid_level_tanks", + "title": "Liquid level", + "image": "data:image/png;base64,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", + "description": "Visualize the level of liquid inside the tank. Supports various tank shapes.", + "order": 12000, + "externalId": null, + "name": "Liquid level" + }, + "widgetTypeFqns": [ + "vertical_cylinder_tank", + "rectangle_tank", + "horizontal_cylinder_tank", + "horizontal_ellipse_tank", + "horizontal_oval_tank", + "vertical_oval_tank", + "horizontal_capsule_tank", + "vertical_capsule_tank", + "horizontal_2_1_elliptical_tank", + "horizontal_dish_ends_tank" + ] +} diff --git a/application/src/main/data/json/system/widget_bundles/maps.json b/application/src/main/data/json/system/widget_bundles/maps.json index aa92068c3a..86754f0bd4 100644 --- a/application/src/main/data/json/system/widget_bundles/maps.json +++ b/application/src/main/data/json/system/widget_bundles/maps.json @@ -4,6 +4,7 @@ "title": "Maps", "image": "data:image/png;base64,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", "description": "Visualize the latest location or trip of the devices or other entities on the indoor or outdoor maps.", + "order": 6000, "externalId": null, "name": "Maps" }, diff --git a/application/src/main/data/json/system/widget_bundles/navigation_widgets.json b/application/src/main/data/json/system/widget_bundles/navigation_widgets.json index 9df7d221d9..305cded236 100644 --- a/application/src/main/data/json/system/widget_bundles/navigation_widgets.json +++ b/application/src/main/data/json/system/widget_bundles/navigation_widgets.json @@ -4,6 +4,7 @@ "title": "Navigation widgets", "image": "data:image/png;base64,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", "description": "Contains widgets that enable navigation to other dashboards and menu items. Useful to define the home page or dashboard.", + "order": 19000, "externalId": null, "name": "Navigation widgets" }, diff --git a/application/src/main/data/json/system/widget_bundles/outdoor_environment.json b/application/src/main/data/json/system/widget_bundles/outdoor_environment.json index cdba1b55af..4deca7880f 100644 --- a/application/src/main/data/json/system/widget_bundles/outdoor_environment.json +++ b/application/src/main/data/json/system/widget_bundles/outdoor_environment.json @@ -4,6 +4,7 @@ "title": "Outdoor Environment", "image": "data:image/png;base64,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", "description": "Contains widgets displaying outdoor environment telemetry.", + "order": 11000, "externalId": null, "name": "Outdoor Environment" }, @@ -173,6 +174,14 @@ "pm2_5_chart_card", "pm2_5_chart_card_with_background", "simple_pm2_5_chart_card", - "simple_pm2_5_chart_card_with_background" + "simple_pm2_5_chart_card_with_background", + "pm10_card", + "pm10_card_with_background", + "horizontal_pm10_card", + "horizontal_pm10_card_with_background", + "pm10_chart_card", + "pm10_chart_card_with_background", + "simple_pm10_chart_card", + "simple_pm10_chart_card_with_background" ] } \ No newline at end of file diff --git a/application/src/main/data/json/system/widget_bundles/status_indicators.json b/application/src/main/data/json/system/widget_bundles/status_indicators.json index 429d3fe016..3c8192493b 100644 --- a/application/src/main/data/json/system/widget_bundles/status_indicators.json +++ b/application/src/main/data/json/system/widget_bundles/status_indicators.json @@ -4,6 +4,7 @@ "title": "Status indicators", "image": "data:image/png;base64,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", "description": "Contains widgets displaying battery level and signal strength.", + "order": 9000, "externalId": null, "name": "Status indicators" }, diff --git a/application/src/main/data/json/system/widget_bundles/tables.json b/application/src/main/data/json/system/widget_bundles/tables.json index ce46218178..206971f1d5 100644 --- a/application/src/main/data/json/system/widget_bundles/tables.json +++ b/application/src/main/data/json/system/widget_bundles/tables.json @@ -4,6 +4,7 @@ "title": "Tables", "image": "data:image/png;base64,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", "description": "Contains tables to display alarms, entities, and their telemetry.", + "order": 4000, "externalId": null, "name": "Tables" }, diff --git a/application/src/main/data/json/system/widget_types/air_quality_index_card.json b/application/src/main/data/json/system/widget_types/air_quality_index_card.json index 5041a13350..77e17197b8 100644 --- a/application/src/main/data/json/system/widget_types/air_quality_index_card.json +++ b/application/src/main/data/json/system/widget_types/air_quality_index_card.json @@ -3,7 +3,7 @@ "name": "Air quality index card", "deprecated": false, "image": "data:image/png;base64,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", - "description": "Displays a latest air quality index telemetry data in a box layout.", + "description": "Displays the latest air quality index telemetry in a box layout.", "descriptor": { "type": "latest", "sizeX": 3, @@ -24,6 +24,9 @@ "weather", "environment", "air", - "aqi" + "aqi", + "pollution", + "emission", + "smog" ] } \ No newline at end of file diff --git a/application/src/main/data/json/system/widget_types/air_quality_index_card_with_background.json b/application/src/main/data/json/system/widget_types/air_quality_index_card_with_background.json index 4f473d11c8..35d1cafd7b 100644 --- a/application/src/main/data/json/system/widget_types/air_quality_index_card_with_background.json +++ b/application/src/main/data/json/system/widget_types/air_quality_index_card_with_background.json @@ -3,7 +3,7 @@ "name": "Air quality index card with background", "deprecated": false, "image": "data:image/png;base64,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", - "description": "Displays a latest air quality index telemetry data in a box layout with background.", + "description": "Displays the latest air quality index telemetry in a box layout with background.", "descriptor": { "type": "latest", "sizeX": 3, @@ -24,6 +24,9 @@ "weather", "environment", "air", - "aqi" + "aqi", + "pollution", + "emission", + "smog" ] } \ No newline at end of file diff --git a/application/src/main/data/json/system/widget_types/air_quality_index_chart_card.json b/application/src/main/data/json/system/widget_types/air_quality_index_chart_card.json index a49ae839a0..a63c85c6cd 100644 --- a/application/src/main/data/json/system/widget_types/air_quality_index_chart_card.json +++ b/application/src/main/data/json/system/widget_types/air_quality_index_chart_card.json @@ -3,7 +3,7 @@ "name": "Air quality index chart card", "deprecated": false, "image": "data:image/png;base64,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", - "description": "Displays a air quality index data as a combination of the latest and aggregated values. Optionally may display the corresponding historical values as a simplified chart.", + "description": "Displays air quality index data as a combination of the latest and aggregated values. Optionally displays the corresponding historical values as a simplified chart.", "descriptor": { "type": "timeseries", "sizeX": 4.5, @@ -27,6 +27,9 @@ "weather", "environment", "air", - "aqi" + "aqi", + "pollution", + "emission", + "smog" ] } \ No newline at end of file diff --git a/application/src/main/data/json/system/widget_types/air_quality_index_chart_card_with_background.json b/application/src/main/data/json/system/widget_types/air_quality_index_chart_card_with_background.json index 804132c639..3e1e0277d5 100644 --- a/application/src/main/data/json/system/widget_types/air_quality_index_chart_card_with_background.json +++ b/application/src/main/data/json/system/widget_types/air_quality_index_chart_card_with_background.json @@ -3,7 +3,7 @@ "name": "Air quality index chart card with background", "deprecated": false, "image": "data:image/png;base64,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", - "description": "Displays a air quality index data as a combination of the latest and aggregated values with background. Optionally may display the corresponding historical values as a simplified chart.", + "description": "Displays air quality index data as a combination of the latest and aggregated values with background. Optionally displays the corresponding historical values as a simplified chart.", "descriptor": { "type": "timeseries", "sizeX": 4.5, @@ -27,6 +27,9 @@ "weather", "environment", "air", - "aqi" + "aqi", + "pollution", + "emission", + "smog" ] } \ No newline at end of file diff --git a/application/src/main/data/json/system/widget_types/alarm_count.json b/application/src/main/data/json/system/widget_types/alarm_count.json index d1a41be9e6..bce10fd653 100644 --- a/application/src/main/data/json/system/widget_types/alarm_count.json +++ b/application/src/main/data/json/system/widget_types/alarm_count.json @@ -19,5 +19,8 @@ "basicModeDirective": "tb-alarm-count-basic-config", "defaultConfig": "{\"datasources\":[{\"type\":\"function\",\"name\":\"function\",\"dataKeys\":[{\"name\":\"f(x)\",\"type\":\"function\",\"label\":\"count\",\"color\":\"#2196f3\",\"settings\":{},\"_hash\":0.2392660816082064,\"funcBody\":\"var value = Number((prevValue + Math.random() * 4 - 2).toFixed(0));\\nif (value < 0) {\\n\\tvalue = 0;\\n} else if (value > 25) {\\n\\tvalue = 25;\\n}\\nreturn value;\",\"aggregationType\":null,\"units\":null,\"decimals\":null,\"usePostProcessing\":null,\"postFuncBody\":null}],\"alarmFilterConfig\":{\"statusList\":[\"ACTIVE\"],\"assignedToCurrentUser\":false,\"assigneeId\":null}}],\"timewindow\":{\"realtime\":{\"timewindowMs\":60000}},\"showTitle\":false,\"backgroundColor\":\"rgb(255, 255, 255)\",\"color\":\"rgba(0, 0, 0, 0.87)\",\"padding\":\"0px\",\"settings\":{\"showLabel\":true,\"label\":\"Total\",\"labelFont\":{\"family\":\"Roboto\",\"size\":12,\"sizeUnit\":\"px\",\"style\":\"normal\",\"weight\":\"400\",\"lineHeight\":\"16px\"},\"labelColor\":{\"type\":\"constant\",\"color\":\"rgba(0, 0, 0, 0.54)\",\"colorFunction\":\"var temperature = value;\\nif (typeof temperature !== undefined) {\\n var percent = (temperature + 60)/120 * 100;\\n return tinycolor.mix('blue', 'red', percent).toHexString();\\n}\\nreturn 'blue';\"},\"showIcon\":true,\"iconSize\":20,\"iconSizeUnit\":\"px\",\"icon\":\"warning\",\"iconColor\":{\"type\":\"constant\",\"color\":\"rgba(255, 255, 255, 1)\",\"colorFunction\":\"var temperature = value;\\nif (typeof temperature !== undefined) {\\n var percent = (temperature + 60)/120 * 100;\\n return tinycolor.mix('blue', 'red', percent).toHexString();\\n}\\nreturn 'blue';\"},\"showIconBackground\":true,\"iconBackgroundSize\":36,\"iconBackgroundSizeUnit\":\"px\",\"iconBackgroundColor\":{\"type\":\"range\",\"color\":\"rgba(0, 105, 92, 1)\",\"rangeList\":[{\"from\":0,\"to\":0,\"color\":\"rgba(0, 105, 92, 1)\"},{\"from\":1,\"to\":null,\"color\":\"rgba(209, 39, 48, 1)\"}],\"colorFunction\":\"var temperature = value;\\nif (typeof temperature !== undefined) {\\n var percent = (temperature + 60)/120 * 100;\\n return tinycolor.mix('blue', 'red', percent).toHexString();\\n}\\nreturn 'blue';\"},\"valueFont\":{\"family\":\"Roboto\",\"size\":20,\"sizeUnit\":\"px\",\"style\":\"normal\",\"weight\":\"500\",\"lineHeight\":\"24px\"},\"valueColor\":{\"type\":\"constant\",\"color\":\"rgba(0, 0, 0, 0.87)\",\"colorFunction\":\"var temperature = value;\\nif (typeof temperature !== undefined) {\\n var percent = (temperature + 60)/120 * 100;\\n return tinycolor.mix('blue', 'red', percent).toHexString();\\n}\\nreturn 'blue';\"},\"showChevron\":false,\"chevronSize\":24,\"chevronSizeUnit\":\"px\",\"chevronColor\":\"rgba(0, 0, 0, 0.38)\",\"layout\":\"column\"},\"title\":\"Alarm count\",\"dropShadow\":true,\"enableFullscreen\":false,\"titleStyle\":{\"fontSize\":\"16px\",\"fontWeight\":400},\"units\":\"\",\"decimals\":null,\"useDashboardTimewindow\":true,\"showLegend\":false,\"widgetStyle\":{},\"actions\":{},\"configMode\":\"basic\",\"displayTimewindow\":true,\"margin\":\"0px\",\"borderRadius\":\"0px\",\"widgetCss\":\"\",\"pageSize\":1024,\"noDataDisplayMessage\":\"\",\"showTitleIcon\":false,\"titleTooltip\":\"\",\"titleFont\":{\"size\":12,\"sizeUnit\":\"px\",\"family\":null,\"weight\":null,\"style\":null,\"lineHeight\":\"1\"},\"titleIcon\":\"\",\"iconColor\":\"rgba(0, 0, 0, 0.87)\",\"iconSize\":\"14px\",\"timewindowStyle\":{\"showIcon\":true,\"iconSize\":\"14px\",\"icon\":\"query_builder\",\"iconPosition\":\"left\",\"font\":{\"size\":12,\"sizeUnit\":\"px\",\"family\":null,\"weight\":null,\"style\":null,\"lineHeight\":\"1\"},\"color\":null},\"titleColor\":\"rgba(0, 0, 0, 0.54)\"}" }, + "tags": [ + "alert" + ], "externalId": null } \ No newline at end of file diff --git a/application/src/main/data/json/system/widget_types/alarms_table.json b/application/src/main/data/json/system/widget_types/alarms_table.json index 964f478179..23b551def7 100644 --- a/application/src/main/data/json/system/widget_types/alarms_table.json +++ b/application/src/main/data/json/system/widget_types/alarms_table.json @@ -20,5 +20,8 @@ "basicModeDirective": "tb-alarms-table-basic-config", "defaultConfig": "{\"timewindow\":{\"realtime\":{\"interval\":1000,\"timewindowMs\":86400000},\"aggregation\":{\"type\":\"NONE\",\"limit\":200}},\"showTitle\":true,\"backgroundColor\":\"rgb(255, 255, 255)\",\"color\":\"rgba(0, 0, 0, 0.87)\",\"padding\":\"4px\",\"settings\":{\"enableSelection\":true,\"enableSearch\":true,\"displayDetails\":true,\"allowAcknowledgment\":true,\"allowClear\":true,\"allowAssign\":true,\"displayActivity\":true,\"displayPagination\":true,\"defaultPageSize\":10,\"defaultSortOrder\":\"-createdTime\",\"enableSelectColumnDisplay\":true,\"enableStickyAction\":false,\"enableFilter\":true,\"entitiesTitle\":null,\"alarmsTitle\":\"Alarms\"},\"title\":\"Alarms table\",\"dropShadow\":true,\"enableFullscreen\":true,\"titleStyle\":{\"fontSize\":\"16px\",\"fontWeight\":400,\"padding\":\"5px 10px 5px 10px\"},\"useDashboardTimewindow\":false,\"showLegend\":false,\"alarmSource\":{\"type\":\"function\",\"dataKeys\":[{\"name\":\"createdTime\",\"type\":\"alarm\",\"label\":\"Created time\",\"color\":\"#2196f3\",\"settings\":{\"useCellStyleFunction\":false,\"cellStyleFunction\":\"\",\"useCellContentFunction\":false,\"cellContentFunction\":\"\"},\"_hash\":0.021092237451093787},{\"name\":\"originator\",\"type\":\"alarm\",\"label\":\"Originator\",\"color\":\"#4caf50\",\"settings\":{\"useCellStyleFunction\":false,\"cellStyleFunction\":\"\",\"useCellContentFunction\":false,\"cellContentFunction\":\"\"},\"_hash\":0.2780007688856758},{\"name\":\"type\",\"type\":\"alarm\",\"label\":\"Type\",\"color\":\"#f44336\",\"settings\":{\"useCellStyleFunction\":false,\"cellStyleFunction\":\"\",\"useCellContentFunction\":false,\"cellContentFunction\":\"\"},\"_hash\":0.7323586880398418},{\"name\":\"severity\",\"type\":\"alarm\",\"label\":\"Severity\",\"color\":\"#ffc107\",\"settings\":{\"useCellStyleFunction\":false,\"useCellContentFunction\":false},\"_hash\":0.09927019860088193},{\"name\":\"status\",\"type\":\"alarm\",\"label\":\"Status\",\"color\":\"#607d8b\",\"settings\":{\"useCellStyleFunction\":false,\"cellStyleFunction\":\"\",\"useCellContentFunction\":false,\"cellContentFunction\":\"\"},\"_hash\":0.6588418951443418},{\"name\":\"assignee\",\"type\":\"alarm\",\"label\":\"Assignee\",\"color\":\"#9c27b0\",\"settings\":{},\"_hash\":0.5008441077416634}],\"entityAliasId\":null,\"name\":\"alarms\"},\"alarmSearchStatus\":\"ANY\",\"alarmsPollingInterval\":5,\"showTitleIcon\":false,\"titleIcon\":\"warning\",\"iconColor\":\"rgba(0, 0, 0, 0.87)\",\"iconSize\":\"24px\",\"titleTooltip\":\"\",\"widgetStyle\":{},\"displayTimewindow\":true,\"actions\":{},\"alarmStatusList\":[],\"alarmSeverityList\":[],\"alarmTypeList\":[],\"searchPropagatedAlarms\":false,\"configMode\":\"basic\",\"alarmFilterConfig\":null}" }, + "tags": [ + "alert" + ], "externalId": null } \ No newline at end of file diff --git a/application/src/main/data/json/system/widget_types/co2_card.json b/application/src/main/data/json/system/widget_types/co2_card.json index 908bb82c03..799df94da7 100644 --- a/application/src/main/data/json/system/widget_types/co2_card.json +++ b/application/src/main/data/json/system/widget_types/co2_card.json @@ -3,7 +3,7 @@ "name": "CO2 card", "deprecated": false, "image": "data:image/png;base64,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", - "description": "Displays a latest CO2 level telemetry data in a box layout.", + "description": "Displays a latest CO2 level telemetry in a box layout.", "descriptor": { "type": "latest", "sizeX": 3, @@ -23,6 +23,18 @@ "tags": [ "weather", "environment", - "co2" + "co2", + "carbon dioxide", + "carbon emission", + "carbon footprint", + "carbon output", + "carbon pollution", + "carbon capture", + "carbon offset", + "carbon reduction", + "carbon neutral", + "climate gas", + "fossil fuel emission", + "carbon cycle" ] } \ No newline at end of file diff --git a/application/src/main/data/json/system/widget_types/co2_card_with_background.json b/application/src/main/data/json/system/widget_types/co2_card_with_background.json index f897d0d7a0..8c2e72e3ed 100644 --- a/application/src/main/data/json/system/widget_types/co2_card_with_background.json +++ b/application/src/main/data/json/system/widget_types/co2_card_with_background.json @@ -3,7 +3,7 @@ "name": "CO2 card with background", "deprecated": false, "image": "data:image/png;base64,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", - "description": "Displays a latest CO2 level telemetry data in a box layout with background.", + "description": "Displays a latest CO2 level telemetry in a box layout with background.", "descriptor": { "type": "latest", "sizeX": 3, diff --git a/application/src/main/data/json/system/widget_types/compass.json b/application/src/main/data/json/system/widget_types/compass.json index 79e92d7d57..9fc926145a 100644 --- a/application/src/main/data/json/system/widget_types/compass.json +++ b/application/src/main/data/json/system/widget_types/compass.json @@ -11,11 +11,11 @@ "resources": [], "templateHtml": "", "templateCss": "", - "controllerScript": "self.onInit = function() {\n self.ctx.gauge = new TbAnalogueCompass(self.ctx, 'compass');\n}\n\nself.onDataUpdated = function() {\n self.ctx.gauge.update();\n}\n\nself.onResize = function() {\n self.ctx.gauge.resize();\n}\n\nself.onMobileModeChanged = function() {\n self.ctx.gauge.mobileModeChanged();\n}\n\nself.typeParameters = function() {\n return {\n maxDatasources: 1,\n maxDataKeys: 1,\n singleEntity: true\n };\n}\n\nself.onDestroy = function() {\n self.ctx.gauge.destroy();\n}\n", - "settingsSchema": "{}", + "controllerScript": "self.onInit = function() {\n self.ctx.gauge = new TbAnalogueCompass(self.ctx, 'compass');\n}\n\nself.onDataUpdated = function() {\n self.ctx.gauge.update();\n}\n\nself.onResize = function() {\n self.ctx.gauge.resize();\n}\n\nself.onMobileModeChanged = function() {\n self.ctx.gauge.mobileModeChanged();\n}\n\nself.typeParameters = function() {\n return {\n maxDatasources: 1,\n maxDataKeys: 1,\n singleEntity: true,\n defaultDataKeysFunction: function() {\n return [{ name: 'direction', label: 'Direction', type: 'timeseries' }];\n }\n };\n}\n\nself.onDestroy = function() {\n self.ctx.gauge.destroy();\n}\n", "settingsSchema": "{}", "dataKeySettingsSchema": "{}\n", "settingsDirective": "tb-analogue-compass-widget-settings", - "defaultConfig": "{\"datasources\":[{\"type\":\"function\",\"name\":\"function\",\"dataKeys\":[{\"name\":\"f(x)\",\"type\":\"function\",\"label\":\"Random\",\"color\":\"#2196f3\",\"settings\":{},\"_hash\":0.15479322438769105,\"funcBody\":\"var value = prevValue + Math.random() * 100 - 50;\\nvar multiplier = Math.pow(10, 2 || 0);\\nvar value = Math.round(value * multiplier) / multiplier;\\nif (value < -1000) {\\n\\tvalue = -1000;\\n} else if (value > 1000) {\\n\\tvalue = 1000;\\n}\\nreturn value;\"}]}],\"timewindow\":{\"realtime\":{\"timewindowMs\":60000}},\"showTitle\":false,\"backgroundColor\":\"#fff\",\"color\":\"rgba(0, 0, 0, 0.87)\",\"padding\":\"8px\",\"settings\":{\"minorTicks\":22,\"needleCircleSize\":15,\"showBorder\":true,\"borderOuterWidth\":10,\"colorPlate\":\"#222\",\"colorMajorTicks\":\"#f5f5f5\",\"colorMinorTicks\":\"#ddd\",\"colorNeedle\":\"#f08080\",\"colorNeedleCircle\":\"#e8e8e8\",\"colorBorder\":\"#ccc\",\"majorTickFont\":{\"family\":\"Roboto\",\"style\":\"normal\",\"weight\":\"500\",\"color\":\"#ccc\"},\"animation\":true,\"animationDuration\":500,\"animationRule\":\"cycle\",\"animationTarget\":\"needle\",\"majorTicks\":[\"N\",\"NE\",\"E\",\"SE\",\"S\",\"SW\",\"W\",\"NW\"]},\"title\":\"Compass\",\"dropShadow\":true,\"enableFullscreen\":true,\"widgetStyle\":{},\"titleStyle\":{\"fontSize\":\"16px\",\"fontWeight\":400},\"useDashboardTimewindow\":true,\"showLegend\":false,\"actions\":{},\"widgetCss\":\"\",\"pageSize\":1024,\"decimals\":0,\"noDataDisplayMessage\":\"\"}" - }, + "hasBasicMode": true, + "basicModeDirective": "tb-compass-gauge-basic-config", + "defaultConfig": "{\"datasources\":[{\"type\":\"function\",\"name\":\"function\",\"dataKeys\":[{\"name\":\"f(x)\",\"type\":\"function\",\"label\":\"Random\",\"color\":\"#2196f3\",\"settings\":{},\"_hash\":0.15479322438769105,\"funcBody\":\"var value = prevValue + Math.random() * 100 - 50;\\nvar multiplier = Math.pow(10, 2 || 0);\\nvar value = Math.round(value * multiplier) / multiplier;\\nif (value < -1000) {\\n\\tvalue = -1000;\\n} else if (value > 1000) {\\n\\tvalue = 1000;\\n}\\nreturn value;\"}]}],\"timewindow\":{\"realtime\":{\"timewindowMs\":60000}},\"showTitle\":false,\"backgroundColor\":\"#fff\",\"color\":\"rgba(0, 0, 0, 0.87)\",\"padding\":\"8px\",\"settings\":{\"minorTicks\":22,\"needleCircleSize\":15,\"showBorder\":true,\"borderOuterWidth\":10,\"colorPlate\":\"#222\",\"colorMajorTicks\":\"#f5f5f5\",\"colorMinorTicks\":\"#ddd\",\"colorNeedle\":\"#f08080\",\"colorNeedleCircle\":\"#e8e8e8\",\"colorBorder\":\"#ccc\",\"majorTickFont\":{\"family\":\"Roboto\",\"style\":\"normal\",\"weight\":\"500\",\"color\":\"#ccc\"},\"animation\":true,\"animationDuration\":500,\"animationRule\":\"cycle\",\"animationTarget\":\"needle\",\"majorTicks\":[\"N\",\"NE\",\"E\",\"SE\",\"S\",\"SW\",\"W\",\"NW\"]},\"title\":\"Compass\",\"dropShadow\":true,\"enableFullscreen\":true,\"widgetStyle\":{},\"titleStyle\":{\"fontSize\":\"16px\",\"fontWeight\":400},\"useDashboardTimewindow\":true,\"showLegend\":false,\"actions\":{},\"widgetCss\":\"\",\"pageSize\":1024,\"decimals\":0,\"noDataDisplayMessage\":\"\",\"configMode\":\"basic\"}" }, "externalId": null } \ No newline at end of file diff --git a/application/src/main/data/json/system/widget_types/flooding_level_card.json b/application/src/main/data/json/system/widget_types/flooding_level_card.json index 6a96ac6457..237e92a35d 100644 --- a/application/src/main/data/json/system/widget_types/flooding_level_card.json +++ b/application/src/main/data/json/system/widget_types/flooding_level_card.json @@ -3,7 +3,7 @@ "name": "Flooding level card", "deprecated": false, "image": "data:image/png;base64,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", - "description": "Displays a latest flooding level telemetry data in a box layout.", + "description": "Displays a latest flooding level telemetry in a box layout.", "descriptor": { "type": "latest", "sizeX": 3, diff --git a/application/src/main/data/json/system/widget_types/flooding_level_card_with_background.json b/application/src/main/data/json/system/widget_types/flooding_level_card_with_background.json index 351a40fe8b..e7ee79ffb1 100644 --- a/application/src/main/data/json/system/widget_types/flooding_level_card_with_background.json +++ b/application/src/main/data/json/system/widget_types/flooding_level_card_with_background.json @@ -3,7 +3,7 @@ "name": "Flooding level card with background", "deprecated": false, "image": "data:image/png;base64,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", - "description": "Displays a latest flooding level telemetry data in a box layout with background.", + "description": "Displays a latest flooding level telemetry in a box layout with background.", "descriptor": { "type": "latest", "sizeX": 3, diff --git a/application/src/main/data/json/system/widget_types/ground_temperature_card.json b/application/src/main/data/json/system/widget_types/ground_temperature_card.json index 202e88bcca..b8220858f8 100644 --- a/application/src/main/data/json/system/widget_types/ground_temperature_card.json +++ b/application/src/main/data/json/system/widget_types/ground_temperature_card.json @@ -3,7 +3,7 @@ "name": "Ground temperature card", "deprecated": false, "image": "data:image/png;base64,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", - "description": "Displays a latest ground temperature telemetry data in a box layout.", + "description": "Displays a latest ground temperature telemetry in a box layout.", "descriptor": { "type": "latest", "sizeX": 3, diff --git a/application/src/main/data/json/system/widget_types/ground_temperature_card_with_background.json b/application/src/main/data/json/system/widget_types/ground_temperature_card_with_background.json index 402501f7e8..4d27f7b273 100644 --- a/application/src/main/data/json/system/widget_types/ground_temperature_card_with_background.json +++ b/application/src/main/data/json/system/widget_types/ground_temperature_card_with_background.json @@ -3,7 +3,7 @@ "name": "Ground temperature card with background", "deprecated": false, "image": "data:image/png;base64,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", - "description": "Displays a latest ground temperature telemetry data in a box layout with background.", + "description": "Displays a latest ground temperature telemetry in a box layout with background.", "descriptor": { "type": "latest", "sizeX": 3, diff --git a/application/src/main/data/json/system/widget_types/horizontal_2_1_elliptical_tank.json b/application/src/main/data/json/system/widget_types/horizontal_2_1_elliptical_tank.json new file mode 100644 index 0000000000..ec27703f49 --- /dev/null +++ b/application/src/main/data/json/system/widget_types/horizontal_2_1_elliptical_tank.json @@ -0,0 +1,24 @@ +{ + "fqn": "horizontal_2_1_elliptical_tank", + "name": "Horizontal 2:1 elliptical tank", + "deprecated": false, + "image": "data:image/png;base64,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", + "description": "Widget indicates the level of liquid in Horizontal 2:1 elliptical tank.", + "descriptor": { + "type": "latest", + "sizeX": 4, + "sizeY": 4, + "resources": [], + "templateHtml": "\n", + "templateCss": "", + "controllerScript": "self.onInit = function() {\n self.ctx.$scope.liquidLevelWidget.onInit();\n};\n\nself.onDataUpdated = function() {\n self.ctx.$scope.liquidLevelWidget.update();\n}\n\nself.typeParameters = function() {\n return {\n maxDatasources: 1,\n maxDataKeys: 1,\n singleEntity: true,\n previewWidth: '250px',\n previewHeight: '250px',\n embedTitlePanel: true\n };\n};\n\nself.onDestroy = function() {\n}\n\nself.actionSources = function() { \n return { \n 'cardClick': {\n name: 'widget-action.card-click',\n multiple: false \n } \n };\n}", + "settingsSchema": "{}", + "dataKeySettingsSchema": "{}\n", + "settingsDirective": "tb-liquid-level-card-widget-settings", + "hasBasicMode": true, + "basicModeDirective": "tb-liquid-level-card-basic-config", + "defaultConfig": "{\"datasources\":[{\"type\":\"function\",\"name\":\"function\",\"dataKeys\":[{\"name\":\"f(x)\",\"type\":\"function\",\"label\":\"Random\",\"color\":\"#2196f3\",\"settings\":{},\"_hash\":0.15479322438769105,\"funcBody\":\"return Math.floor(Math.random() * 101);\",\"aggregationType\":null,\"units\":null,\"decimals\":null,\"usePostProcessing\":null,\"postFuncBody\":null}],\"alarmFilterConfig\":{\"statusList\":[\"ACTIVE\"]}}],\"timewindow\":{\"realtime\":{\"timewindowMs\":60000}},\"showTitle\":true,\"backgroundColor\":\"#fff\",\"color\":\"rgba(0, 0, 0, 0.87)\",\"padding\":\"0px\",\"settings\":{\"tankSelectionType\":\"static\",\"selectedShape\":\"Horizontal 2:1 Elliptical\",\"shapeAttributeName\":\"tankShape\",\"tankColor\":{\"type\":\"range\",\"color\":\"#242770\",\"rangeList\":[{\"from\":null,\"to\":20,\"color\":\"#E73535DE\"},{\"from\":20,\"to\":null,\"color\":\"#242770\"}],\"colorFunction\":\"var percent = value;\\nif (typeof percent !== undefined) {\\n if (percent < 20) {\\n return '#E73535DE';\\n }\\n}\\nreturn '#242770';\"},\"datasourceUnits\":\"%\",\"layout\":\"percentage\",\"volumeSource\":\"static\",\"volumeConstant\":500,\"volumeAttributeName\":\"volume\",\"volumeUnits\":\"L\",\"volumeFont\":{\"family\":\"Roboto\",\"size\":14,\"sizeUnit\":\"px\",\"style\":\"normal\",\"weight\":\"500\",\"lineHeight\":\"100%\"},\"volumeColor\":\"rgba(0, 0, 0, 0.18)\",\"units\":\"%\",\"widgetUnitsSource\":\"static\",\"widgetUnitsAttributeName\":\"units\",\"liquidColor\":{\"type\":\"range\",\"color\":\"#7A8BFF\",\"rangeList\":[{\"from\":null,\"to\":20,\"color\":\"#E27C7CDE\"},{\"from\":20,\"to\":null,\"color\":\"#7A8BFF\"}],\"colorFunction\":\"var percent = value;\\nif (typeof percent !== undefined) {\\n if (percent < 20) {\\n return '#E27C7CDE';\\n }\\n}\\nreturn '#7A8BFF';\"},\"valueFont\":{\"family\":\"Roboto\",\"size\":24,\"sizeUnit\":\"px\",\"style\":\"normal\",\"weight\":\"500\",\"lineHeight\":\"100%\"},\"valueColor\":{\"type\":\"range\",\"color\":\"#000000DE\",\"rangeList\":[{\"from\":null,\"to\":20,\"color\":\"#FF0000DE\"},{\"from\":20,\"to\":null,\"color\":\"rgba(0,0,0,0.87)\"}],\"colorFunction\":\"var percent = value;\\nif (typeof percent !== undefined) {\\n if (percent < 20) {\\n return '#FF0000DE';\\n }\\n}\\nreturn '#000000DE';\"},\"showBackgroundOverlay\":true,\"backgroundOverlayColor\":{\"type\":\"range\",\"color\":\"rgba(255, 255, 255, 0.76)\",\"rangeList\":[{\"from\":null,\"to\":20,\"color\":\"#FFEFEFDE\"},{\"from\":20,\"to\":null,\"color\":\"#FFFFFFC2\"}],\"colorFunction\":\"var percent = value;\\nif (typeof percent !== undefined) {\\n if (percent < 20) {\\n return '#FFEFEFDE';\\n }\\n}\\nreturn '#FFFFFFC2';\"},\"showTooltip\":true,\"showTooltipLevel\":true,\"tooltipUnits\":\"%\",\"tooltipLevelDecimals\":0,\"tooltipLevelFont\":{\"family\":\"Roboto\",\"size\":13,\"sizeUnit\":\"px\",\"style\":\"normal\",\"weight\":\"500\",\"lineHeight\":\"100%\"},\"tooltipLevelColor\":{\"type\":\"constant\",\"color\":\"rgba(0, 0, 0, 0.76)\",\"rangeList\":[],\"colorFunction\":\"var percent = value;\\nif (typeof percent !== undefined) {\\n if (percent < 20) {\\n return '#E27C7CDE';\\n }\\n}\\nreturn '#7A8BFF';\"},\"showTooltipDate\":true,\"tooltipDateFormat\":{\"format\":null,\"lastUpdateAgo\":true,\"custom\":false},\"tooltipDateFont\":{\"family\":\"Roboto\",\"size\":13,\"sizeUnit\":\"px\",\"style\":\"normal\",\"weight\":\"500\",\"lineHeight\":\"100%\"},\"tooltipDateColor\":\"rgba(0, 0, 0, 0.76)\",\"tooltipBackgroundColor\":\"rgba(255, 255, 255, 0.76)\",\"tooltipBackgroundBlur\":3,\"background\":{\"type\":\"color\",\"color\":\"#fff\",\"overlay\":{\"enabled\":false,\"color\":\"rgba(255,255,255,0.72)\",\"blur\":3}}},\"title\":\"Liquid level\",\"useDashboardTimewindow\":true,\"displayTimewindow\":true,\"configMode\":\"basic\",\"titleFont\":{\"family\":\"Roboto\",\"size\":16,\"sizeUnit\":\"px\",\"style\":\"normal\",\"weight\":\"500\",\"lineHeight\":\"1.5\"},\"titleColor\":\"rgba(0, 0, 0, 0.87)\",\"showTitleIcon\":false,\"titleIcon\":\"water_drop\",\"iconColor\":\"#5469FF\",\"decimals\":0,\"enableDataExport\":false,\"enableFullscreen\":false,\"borderRadius\":\"0px\",\"actions\":{},\"iconSize\":\"24px\",\"titleTooltip\":\"\",\"dropShadow\":true,\"margin\":\"0px\",\"widgetStyle\":{},\"widgetCss\":\"\",\"titleStyle\":{\"fontSize\":\"16px\",\"fontWeight\":400},\"pageSize\":1024,\"noDataDisplayMessage\":\"\"}" + }, + "externalId": null, + "tags": null +} diff --git a/application/src/main/data/json/system/widget_types/horizontal_air_quality_index_card.json b/application/src/main/data/json/system/widget_types/horizontal_air_quality_index_card.json index c8b5d12e1a..500a96045e 100644 --- a/application/src/main/data/json/system/widget_types/horizontal_air_quality_index_card.json +++ b/application/src/main/data/json/system/widget_types/horizontal_air_quality_index_card.json @@ -3,7 +3,7 @@ "name": "Horizontal air quality index card", "deprecated": false, "image": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAACgCAMAAAB+IdObAAAAmVBMVEUAAADf39/f39/g4ODg4ODf39/////k5OSAwyzg4OCg0mHy8vLQ6a+srKyQkJCQy0bf8Mrv9+Xj4+POzs5YWFiv2Xv5+fn3+/KIxznb29u2trbA4ZXV1dXHx8fCwsK8vLzn5+fIyMi43Yio1m47Ozt0dHTn9NjH5aNmZmZKSkrY7L2enp6YzlOCgoJLS0vt7e2dnZ3U1NQhISGmKTEOAAAABnRSTlMAIEDfv1C6kOEmAAADrUlEQVR42u3aa3OaQBiG4bRJn7yynEEOAh7xrEna///jykKrtjZK2iZDMs/1QWGXD3sP4OjIDREREREREREREREREREREREREREREdFb+vTu3Wifb+/fO//2S9VxH+HdU/efb+4UPoDo7qaHD6HHkI5hSNcwpGsY0jUM6Zo/hmSJGB5O+FvAylErbAsHlpVbUGgU+c/REa57g5CFGDNxYhzNS4U8V0oBVlisttWGX+Up2HZeFGvlQ0/ZllK+zrYtvV8f1IpnujgRuxcOcJfZJj6OXQzBAjDFxFH4tK2WaZdPwKpAHhYhQn8/Lwu7GrXLQan2lg6xwlWIh9Xa8h9W2yK05q0yDBEDB+4sMfCbmSSHYyvOBnqFRpt7xD0NGc1VqEMs3VTAX9chxTa0dIhfzW0f/DrExje9a833Vol9NXid54hhLvCDm8gh68ATEReaI7uN26/2roZ4bm2zEw8LD435OiyLHyF7G9Y81yEP+b4JWcN/CHEIWesQuygwL9uE9CXDkWksl2chpsxkWm80V/xUjKsh8tMShkgGzS+Bp70OqXfC0lfrVemvVuutDlFrG6F1CMF8FVp5OK9qihBXeeLA83DCPAvZySJJdIEhS1RikfhayMZsxIh3mSEezqknu3r5ZcQv1dlRaEWvZyfiLC6ELGSHaZ3gHK4w90LIuUxctPK0xd/KRIxsJkn8fEhfTLhivCzES+SEg1fXl35zzTwf4ugLIxHvRSHxtH+UxXhVx3s9k+mzIaYk1VocyXTABlrShHTqK8pSpldCZtJIgGlz2EIE10JmxonNpRtXPf4+oPAX3PoTdScm4P0xxBNZeBV9FlxJvDqtfz3EOUpkgdqgiVF4TFGLIkS9QA/0EAEYW2NEadpMRE15W31xMkOcemXnIcfdTGb6RWZTRxzvQsi5jZiHkDwP0skkqLaGGKbDUTQYBnk+CUaPwSgCgrEajVKooJ4IJiO0Fk9FxKhXNvtTiPNjFW79yWY6UpniBSE7xxD3EPI1GKhJMA6akPHXtNquxsZpMJzUIb00rUImg/FEVblDhfZiL27e0YbnuY7M4va/R7IkWaJhBekwGOSTodJnJBilw4EaTIJq7HE0ngTQIZE+I+ORpSfy4RCvyXOm/+eHVTrG875OUryNfw+JokuTCm10IqSLGNI1DOkahnQNQ7qmd3P3Af5mB9Rd9cDAB/ijPaoeGLj5cuvfv3e3nz/SQzVEREREREREREREREREREREREREREREb+Q79h0E444zJWUAAAAASUVORK5CYII=", - "description": "Displays a latest air quality index telemetry data in a horizontal layout.", + "description": "Displays a latest air quality index telemetry in a horizontal layout.", "descriptor": { "type": "latest", "sizeX": 5, @@ -24,6 +24,9 @@ "weather", "environment", "air", - "aqi" + "aqi", + "pollution", + "emission", + "smog" ] } \ No newline at end of file diff --git a/application/src/main/data/json/system/widget_types/horizontal_air_quality_index_card_with_background.json b/application/src/main/data/json/system/widget_types/horizontal_air_quality_index_card_with_background.json index 88ac73bc03..63d164b983 100644 --- a/application/src/main/data/json/system/widget_types/horizontal_air_quality_index_card_with_background.json +++ b/application/src/main/data/json/system/widget_types/horizontal_air_quality_index_card_with_background.json @@ -3,7 +3,7 @@ "name": "Horizontal air quality index card with background", "deprecated": false, "image": "data:image/png;base64,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", - "description": "Displays a latest air quality index telemetry data in a horizontal layout with background.", + "description": "Displays a latest air quality index telemetry in a horizontal layout with background.", "descriptor": { "type": "latest", "sizeX": 5, @@ -24,6 +24,9 @@ "weather", "environment", "air", - "aqi" + "aqi", + "pollution", + "emission", + "smog" ] } \ No newline at end of file diff --git a/application/src/main/data/json/system/widget_types/horizontal_capsule_tank.json b/application/src/main/data/json/system/widget_types/horizontal_capsule_tank.json new file mode 100644 index 0000000000..3efff49a81 --- /dev/null +++ b/application/src/main/data/json/system/widget_types/horizontal_capsule_tank.json @@ -0,0 +1,24 @@ +{ + "fqn": "horizontal_capsule_tank", + "name": "Horizontal capsule tank", + "deprecated": false, + "image": "data:image/png;base64,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", + "description": "Widget indicates the level of liquid in Horizontal capsule tank.", + "descriptor": { + "type": "latest", + "sizeX": 4, + "sizeY": 4, + "resources": [], + "templateHtml": "\n", + "templateCss": "", + "controllerScript": "self.onInit = function() {\n self.ctx.$scope.liquidLevelWidget.onInit();\n};\n\nself.onDataUpdated = function() {\n self.ctx.$scope.liquidLevelWidget.update();\n}\n\nself.typeParameters = function() {\n return {\n maxDatasources: 1,\n maxDataKeys: 1,\n singleEntity: true,\n previewWidth: '250px',\n previewHeight: '250px',\n embedTitlePanel: true\n };\n};\n\nself.onDestroy = function() {\n}\n\nself.actionSources = function() { \n return { \n 'cardClick': {\n name: 'widget-action.card-click',\n multiple: false \n } \n };\n}", + "settingsSchema": "{}", + "dataKeySettingsSchema": "{}\n", + "settingsDirective": "tb-liquid-level-card-widget-settings", + "hasBasicMode": true, + "basicModeDirective": "tb-liquid-level-card-basic-config", + "defaultConfig": "{\"datasources\":[{\"type\":\"function\",\"name\":\"function\",\"dataKeys\":[{\"name\":\"f(x)\",\"type\":\"function\",\"label\":\"Random\",\"color\":\"#2196f3\",\"settings\":{},\"_hash\":0.15479322438769105,\"funcBody\":\"return Math.floor(Math.random() * 101);\",\"aggregationType\":null,\"units\":null,\"decimals\":null,\"usePostProcessing\":null,\"postFuncBody\":null}],\"alarmFilterConfig\":{\"statusList\":[\"ACTIVE\"]}}],\"timewindow\":{\"realtime\":{\"timewindowMs\":60000}},\"showTitle\":true,\"backgroundColor\":\"#fff\",\"color\":\"rgba(0, 0, 0, 0.87)\",\"padding\":\"0px\",\"settings\":{\"tankSelectionType\":\"static\",\"selectedShape\":\"Horizontal Capsule\",\"shapeAttributeName\":\"tankShape\",\"tankColor\":{\"type\":\"range\",\"color\":\"#242770\",\"rangeList\":[{\"from\":null,\"to\":20,\"color\":\"#E73535DE\"},{\"from\":20,\"to\":null,\"color\":\"#242770\"}],\"colorFunction\":\"var percent = value;\\nif (typeof percent !== undefined) {\\n if (percent < 20) {\\n return '#E73535DE';\\n }\\n}\\nreturn '#242770';\"},\"datasourceUnits\":\"%\",\"layout\":\"percentage\",\"volumeSource\":\"static\",\"volumeConstant\":500,\"volumeAttributeName\":\"volume\",\"volumeUnits\":\"L\",\"volumeFont\":{\"family\":\"Roboto\",\"size\":14,\"sizeUnit\":\"px\",\"style\":\"normal\",\"weight\":\"500\",\"lineHeight\":\"100%\"},\"volumeColor\":\"rgba(0, 0, 0, 0.18)\",\"units\":\"%\",\"widgetUnitsSource\":\"static\",\"widgetUnitsAttributeName\":\"units\",\"liquidColor\":{\"type\":\"range\",\"color\":\"#7A8BFF\",\"rangeList\":[{\"from\":null,\"to\":20,\"color\":\"#E27C7CDE\"},{\"from\":20,\"to\":null,\"color\":\"#7A8BFF\"}],\"colorFunction\":\"var percent = value;\\nif (typeof percent !== undefined) {\\n if (percent < 20) {\\n return '#E27C7CDE';\\n }\\n}\\nreturn '#7A8BFF';\"},\"valueFont\":{\"family\":\"Roboto\",\"size\":24,\"sizeUnit\":\"px\",\"style\":\"normal\",\"weight\":\"500\",\"lineHeight\":\"100%\"},\"valueColor\":{\"type\":\"range\",\"color\":\"#000000DE\",\"rangeList\":[{\"from\":null,\"to\":20,\"color\":\"#FF0000DE\"},{\"from\":20,\"to\":null,\"color\":\"rgba(0,0,0,0.87)\"}],\"colorFunction\":\"var percent = value;\\nif (typeof percent !== undefined) {\\n if (percent < 20) {\\n return '#FF0000DE';\\n }\\n}\\nreturn '#000000DE';\"},\"showBackgroundOverlay\":true,\"backgroundOverlayColor\":{\"type\":\"range\",\"color\":\"#FFFFFFC2\",\"rangeList\":[{\"from\":null,\"to\":20,\"color\":\"#FFEFEFDE\"},{\"from\":20,\"to\":null,\"color\":\"#FFFFFFC2\"}],\"colorFunction\":\"var percent = value;\\nif (typeof percent !== undefined) {\\n if (percent < 20) {\\n return '#FFEFEFDE';\\n }\\n}\\nreturn '#FFFFFFC2';\"},\"showTooltip\":true,\"showTooltipLevel\":true,\"tooltipUnits\":\"%\",\"tooltipLevelDecimals\":0,\"tooltipLevelFont\":{\"family\":\"Roboto\",\"size\":13,\"sizeUnit\":\"px\",\"style\":\"normal\",\"weight\":\"500\",\"lineHeight\":\"100%\"},\"tooltipLevelColor\":{\"type\":\"constant\",\"color\":\"rgba(0, 0, 0, 0.76)\",\"rangeList\":[],\"colorFunction\":\"var percent = value;\\nif (typeof percent !== undefined) {\\n if (percent < 20) {\\n return '#E27C7CDE';\\n }\\n}\\nreturn '#7A8BFF';\"},\"showTooltipDate\":true,\"tooltipDateFormat\":{\"format\":null,\"lastUpdateAgo\":true,\"custom\":false},\"tooltipDateFont\":{\"family\":\"Roboto\",\"size\":13,\"sizeUnit\":\"px\",\"style\":\"normal\",\"weight\":\"500\",\"lineHeight\":\"100%\"},\"tooltipDateColor\":\"rgba(0, 0, 0, 0.76)\",\"tooltipBackgroundColor\":\"rgba(255, 255, 255, 0.76)\",\"tooltipBackgroundBlur\":3,\"background\":{\"type\":\"color\",\"color\":\"#fff\",\"overlay\":{\"enabled\":false,\"color\":\"rgba(255,255,255,0.72)\",\"blur\":3}}},\"title\":\"Liquid level\",\"useDashboardTimewindow\":true,\"displayTimewindow\":true,\"configMode\":\"basic\",\"titleFont\":{\"family\":\"Roboto\",\"size\":16,\"sizeUnit\":\"px\",\"style\":\"normal\",\"weight\":\"500\",\"lineHeight\":\"1.5\"},\"titleColor\":\"rgba(0, 0, 0, 0.87)\",\"showTitleIcon\":false,\"titleIcon\":\"water_drop\",\"iconColor\":\"#5469FF\",\"decimals\":0,\"enableDataExport\":false,\"enableFullscreen\":false,\"borderRadius\":\"0px\",\"actions\":{},\"iconSize\":\"24px\",\"titleTooltip\":\"\",\"dropShadow\":true,\"margin\":\"0px\",\"widgetStyle\":{},\"widgetCss\":\"\",\"titleStyle\":{\"fontSize\":\"16px\",\"fontWeight\":400},\"pageSize\":1024,\"noDataDisplayMessage\":\"\"}" + }, + "externalId": null, + "tags": null +} \ No newline at end of file diff --git a/application/src/main/data/json/system/widget_types/horizontal_co2_card.json b/application/src/main/data/json/system/widget_types/horizontal_co2_card.json index 85b8ef899f..462a720e95 100644 --- a/application/src/main/data/json/system/widget_types/horizontal_co2_card.json +++ b/application/src/main/data/json/system/widget_types/horizontal_co2_card.json @@ -3,7 +3,7 @@ "name": "Horizontal CO2 card", "deprecated": false, "image": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAACgCAMAAAB+IdObAAAAllBMVEUAAADf39/f39/g4ODg4ODf39/////k5OSAwyzg4OCQy0bQ6a/v9+Wv2XvIyMjf8Mqg0mD3+/LOzs6/4ZX09PT5+flYWFiIxznY7L3b29u3t7fV1dXCwsK8vLzx8fHn5+fn9NiQkJDH5aN0dHS43Yitra2YzlOenp6CgoJmZmY5OTnU1NS33Yio1m7t7e1KSkqn1m243YlPJUzgAAAABnRSTlMAIEDfv1C6kOEmAAADiElEQVR42u3a647aMBAFYNpuJyYX554QkkAId3ZZtu//cp1xUHoVpbS0gM4nYYaMf/jIGITIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOBfenf3BuL9B+veDT985BxWSncvsd4PnhJ6AOnTYEgPYYggNwZBbg2C3BoEuTUIcmvOC7KelUR6tpShltclfaXc0P93VpDNRh/0cqu3S70tdxOiuabJhCwiS551RhcJ29hxSfhtPKK+ul6Qw4RKK9Okt7zsLkidZevNWM+tw3Z9YZBYMbvpK7evwmsF2RHLSiozotmMJEg2Wx/0fDOeb5a7y4K4SvlNrGypbL95UQGRL9WbWlwrSKZppjdrWs4lhwmynWlNu4zm/HxZEEe98Zgrl15k5WGuQvKUw5XKyQjdMByNXFNR6Pgm/rEKfW6cCuI7js9THefraWWWZRNrlx0svcuyWoKU2XZNszm3OMqFQQITJKRAybFYqYYfslpbuccZ+1zxHhEH3Js3n/Q8qRqbx/ZUELUKchrlgf3t9k76oTfpny8T2qp1PymPOIhPZuwi8Ogfg6h45Kk8JB5iZ6UC6dmOwykW0jgZxCWXnIBij66tUWwVngryZq47HKQ1b76m67XHzXTPCxIodcU0siNvsa3iU0E8IjlB3dmhPY/SOzbs00GCVU6OeWuFbhvQ9bRmNbnyfxEk5rEL4v1OkJE57Dy69MkOWrqefb84eZjDLsfehAu/2ZG4myHdM4L8KPA4k5HQTySv319I6HwSYWFWM6JW7c2XCVEs1xqpjp9axxmeimWGci8KsgiCFzLGXZiEXgsy0pTSYSQXhpQS0XQ5pbQoukYqM3/NV8qLA2Wb0+J1pyXMTeUcg/QzPKl4Fl0URPRByjIqtI64qqgqqjodV1FZ6qh+jeqUKJomdV1QEplGpGv6tZF8FwSyGJerfEGskar98k3DL1euBHnhKgj/QpDn53Gio2nUBZk+F1zztWkRVdoEGRYFB9H1VCcct0roDKEb/lC5fSXr5ZfUnSSpTjgvyDIqqmhc6iqRHYnqohonYx3xtVdeeEQSJJUdmdZLaZRVRX/OBBEmyFV+WBXTE81nXfB4H0HS9FQzob+k6X+ajOIGP3XvDYLcGgS5NQhyax4oyNMD/M1OlDzxDQMP8Ed7yjcMDD5+GFr37sP7R7qpBgAAAAAAAAAAAAAAAAAAAAAAAAAAAOAf+QwerQBC9f0WmwAAAABJRU5ErkJggg==", - "description": "Displays a latest CO2 level telemetry data in a horizontal layout.", + "description": "Displays a latest CO2 level telemetry in a horizontal layout.", "descriptor": { "type": "latest", "sizeX": 5, diff --git a/application/src/main/data/json/system/widget_types/horizontal_co2_card_with_background.json b/application/src/main/data/json/system/widget_types/horizontal_co2_card_with_background.json index be668528e9..fe3f56d39d 100644 --- a/application/src/main/data/json/system/widget_types/horizontal_co2_card_with_background.json +++ b/application/src/main/data/json/system/widget_types/horizontal_co2_card_with_background.json @@ -3,7 +3,7 @@ "name": "Horizontal CO2 card with background", "deprecated": false, "image": "data:image/png;base64,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", - "description": "Displays a latest CO2 level telemetry data in a horizontal layout with background.", + "description": "Displays a latest CO2 level telemetry in a horizontal layout with background.", "descriptor": { "type": "latest", "sizeX": 5, diff --git a/application/src/main/data/json/system/widget_types/horizontal_cylinder_tank.json b/application/src/main/data/json/system/widget_types/horizontal_cylinder_tank.json new file mode 100644 index 0000000000..1791d5b29c --- /dev/null +++ b/application/src/main/data/json/system/widget_types/horizontal_cylinder_tank.json @@ -0,0 +1,24 @@ +{ + "fqn": "horizontal_cylinder_tank", + "name": "Horizontal cylinder tank", + "deprecated": false, + "image": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAACgCAMAAAB+IdObAAABa1BMVEXg4ODf39/g4ODg4OAAAAD///96i//g4ODf4/+Rk7d2eKb9/f8hISGQkJCyvP9bXZQ/QoIkJ3Dj5O2srKzIydvx8vbj4+OTof/x8fHIyMitrsni5f90dHQ9PT33+P/m6f9NUIueoMAyNHkxNHnk5O2Ehq/t7//W1+QfHyGenp5YWFjV1dXx8fY/QoE7Ozzr6/JZWVmsrslKSkrY3f/39/mfocC6urqCgoJmZmbGzf9vcaEvLy8uLi7u8f++xv9vfu27vNJZZcmSk7icnqwuM4IpLXmst/+bqP+Kmf+Ckv/7+/zt7fNoap3N1P/z8/e6u9JfbNJpa504P5J1d4KAgIHS2P91hfbv7/Td3/FpeOTT1eO9wNfExMhJU65oapxMT4yjr//4+PvQ1PaRkp5oa5w+RpxycnRSU1i1vv9lctvS09VTX8BOWbiZmZ5pa5xpanSmrNt/hsm0tsejprlwdrdzdaR/gZBDRUsrLC5yLDHaAAAABXRSTlPvIL+vAC9A4IoAAAcFSURBVHja7NZBioMwFMZxOzMfXTRZBR4JJAeIAZEsVNBjzP3PMi91ILR0mF15tvnTmkRB/KGC3dfpozsfvc/TV3fq7AUH72KZ8WnxAll+rA5/P0qXrjvjJTo3iLAaRFoNIq23hTiqw4PI4ck9hphxH3LCXd95H5Wuw4O0wvOrkPvrSJ5wl4lHhJCxgIsuTdepNQQ3AZgiVQjvjsSbxHCzr8RBjHI8DWELcDwlZeAD0Ku8VggNa68i+hHln7Y1rEkiZFiAfANxKoIqxK+EebVa2XJ8yMUjEEIqAv0NRCsLVEgOWi+KrDKmbHutcxAJMf9AQvCcRe+XEaRGXswCIXbzv5AJaYeYYqqQZWUX/+K6sXkbeUGCICOX9pfdLyrAbsM87BAbBp8rJG2D7jNglSoctcyDnDvidImSJsB43QeAvJ90whQBmr2Lbhe761JbsMGAm2Yfywnw9CrkzxhymN4DkhIO09t+xoutQaTVINJqEGk1iLQaRFoNIq0G+WG/7lkch4EADFdTSC5mJKRGlfyFGwdj8DZXhSuTkLBVulsCW+//L885LmQ3a2XUyNmAXwiEyAQejYzxT2uB/LRSQ6yr3/3qX/gu1va68lyQXhXoDqbR2piDQEUNXHouSOOVUiuPY6vV+NVfl54L4pTaCZHn58+L8Kp41omAEjV6UkoV5Hd1jdeVZ4No+JRZIAtkgSyQB0OsceJeNxASoXJjHwexOSraSSmxUKqQU5Vy3dj/Vzc5krzt15gc23mFvX4IxIoS3WUbm5yoh+9V9Rm5GlOjOb/d9dO222eXSx2SsPNDDKGBzzn6COyo1qbRE2ub43b4yt5RPzekLtZwU1vT+Ft8p/M0bnIkZoVY6Sv4nisFRLfvTlNnkaSdEeK9hakaEtGO7Qamar2fDyJHx3RV6SCqocsAAhI5F0RQePom7pVj020gVEtiHsi6qCBcPirZsm4P4arSzAHR5OBeWANbex/ryM4AkRICRe/nZpsBsxnpIVpVcL8cgakbgN2M5BD5G7i4x/OwBS6BqSGaKuByxA6Eqy1NYoiUwEeGGQif+EgL4e8Q/mAcB+BrlU0K6V8hora0956FGUSEIinkzUFM+ALBhiPE5DAlREcO3CF7svip6oSQHoGJO+FZ1mUQOdWEkD+xf44uCMkiIflrQkjZQFx1HXBANKQp0kG0gsicDw0EYiFQ6mSQA0aTi+DJioa8rZNBxF/mza0pbSAKwE/L0A24SUgQoyQECKaW0rEZrHYKjAQEHpihQB2sYB2tWm9j7+3Pby7aJipk7c4i38Nm9wGGjz0nu4Sz+GGb4QlSxAUWqYlA/EWKFcaGFvbXBqmJIAn//iYRz4j0lp6IAAjjop9cY0Bi/U3kZTw4I1PURFh8Ee3eKIxFIjEGLEWiT5OFRPCzTHoiy4AowBOFpCWSiKzbB05iIACenkiGJxPpJ6OWyIJ9muaZ1bhyE27hsyoSj8RiNyJxVySxsr4G4lMXYR8gonkGjEthibkWYZi43ViXVwvRaJxxufP8deaSnXGI6rFhX4+eDXXL4cxqbI5XhsfMNRSSnXzTAL0iskNBdzhe1vuyPNQvZZeT2OULt3dbBFET2ZOMOUw+fPEMFnM27y0O9cNB7ndhkLvShZyDaZ6YPaenzPkwJERxi9IOYdI99Qzayg2mbirKoV74pfcUh4E5OPnq9o2Qj40nGjURFRq4IlzF+5kWb9j9uWu3vStz8S/feoJzfRfyEd4r0tvGp0qYHjt135cbxuGWiIwEaiJ8GrTwRDpdUpEW4LI0f+ru44mMRqQi+wIL6InA4gZmrne8ozKWiP+tN6g+fFARXpJUuG3vcN7AEWmEvChIoiiST4tNHJHNrn/cnA+m5X9FnstSFAFIKuOIHG2GCPm0igBNERXJWJFVIRUpIYmqSD4jNjAi64jUo8FzWcp/9DwJhwKpdUhFwhACuiJCOnhKNmukHk2ezVIWASh4SmrEqR7WIKAtkk3zAav7OfGEbFkZQl0EaKjUmnjLqu2QBlYJaoC+SJ4tGhPXkFGIkLZKv4TDzXd+wqp4Udsm9Cjz9ItqXKqsuDV2/16vECcIW51e4dk4k516h9RDTGmAXATfpHy/xwXpHktMwWlWmUKWbzfvroR1whWkZfAsnG65bDW9WroVXtuj2imZRllWM9XpFzCnhFK78U/jvN4lyvNGWRYQKzxCbXyVtavZlbDN5+91tBt+MMbBwYHh9BRZVFG6Kj7OaQUJcSyCEKYyHMfC/+K1xQ/r+vE5h1Rxdo9dYCMtizN9EGYcM3cQ5k97d0IDAAwDILBfUv+OZ4M1nAMUgGEIjSE0htAYQmMIjSE0htAYQmMIjSE0htAYQmMIjSE0htAYQmMIzaGQuDEI3qgby+a+M9Ge7P1dVM4DayA5WtbTgEwAAAAASUVORK5CYII=", + "description": "Widget indicates the level of liquid in Horizontal cylinder tank.", + "descriptor": { + "type": "latest", + "sizeX": 4, + "sizeY": 4, + "resources": [], + "templateHtml": "\n", + "templateCss": "", + "controllerScript": "self.onInit = function() {\n self.ctx.$scope.liquidLevelWidget.onInit();\n};\n\nself.onDataUpdated = function() {\n self.ctx.$scope.liquidLevelWidget.update();\n}\n\nself.typeParameters = function() {\n return {\n maxDatasources: 1,\n maxDataKeys: 1,\n singleEntity: true,\n previewWidth: '250px',\n previewHeight: '250px',\n embedTitlePanel: true\n };\n};\n\nself.onDestroy = function() {\n}\n\nself.actionSources = function() { \n return { \n 'cardClick': {\n name: 'widget-action.card-click',\n multiple: false \n } \n };\n}", + "settingsSchema": "{}", + "dataKeySettingsSchema": "{}\n", + "settingsDirective": "tb-liquid-level-card-widget-settings", + "hasBasicMode": true, + "basicModeDirective": "tb-liquid-level-card-basic-config", + "defaultConfig": "{\"datasources\":[{\"type\":\"function\",\"name\":\"function\",\"dataKeys\":[{\"name\":\"f(x)\",\"type\":\"function\",\"label\":\"Random\",\"color\":\"#2196f3\",\"settings\":{},\"_hash\":0.15479322438769105,\"funcBody\":\"return Math.floor(Math.random() * 101);\",\"aggregationType\":null,\"units\":null,\"decimals\":null,\"usePostProcessing\":null,\"postFuncBody\":null}],\"alarmFilterConfig\":{\"statusList\":[\"ACTIVE\"]}}],\"timewindow\":{\"realtime\":{\"timewindowMs\":60000}},\"showTitle\":true,\"backgroundColor\":\"#fff\",\"color\":\"rgba(0, 0, 0, 0.87)\",\"padding\":\"0px\",\"settings\":{\"tankSelectionType\":\"static\",\"selectedShape\":\"Horizontal Cylinder\",\"shapeAttributeName\":\"tankShape\",\"tankColor\":{\"type\":\"range\",\"color\":\"#242770\",\"rangeList\":[{\"from\":null,\"to\":20,\"color\":\"#E73535DE\"},{\"from\":20,\"to\":null,\"color\":\"#242770\"}],\"colorFunction\":\"var percent = value;\\nif (typeof percent !== undefined) {\\n if (percent < 20) {\\n return '#E73535DE';\\n }\\n}\\nreturn '#242770';\"},\"datasourceUnits\":\"%\",\"layout\":\"percentage\",\"volumeSource\":\"static\",\"volumeConstant\":500,\"volumeAttributeName\":\"volume\",\"volumeUnits\":\"L\",\"volumeFont\":{\"family\":\"Roboto\",\"size\":14,\"sizeUnit\":\"px\",\"style\":\"normal\",\"weight\":\"500\",\"lineHeight\":\"100%\"},\"volumeColor\":\"rgba(0, 0, 0, 0.18)\",\"units\":\"%\",\"widgetUnitsSource\":\"static\",\"widgetUnitsAttributeName\":\"units\",\"liquidColor\":{\"type\":\"range\",\"color\":\"#7A8BFF\",\"rangeList\":[{\"from\":null,\"to\":20,\"color\":\"#E27C7CDE\"},{\"from\":20,\"to\":null,\"color\":\"#7A8BFF\"}],\"colorFunction\":\"var percent = value;\\nif (typeof percent !== undefined) {\\n if (percent < 20) {\\n return '#E27C7CDE';\\n }\\n}\\nreturn '#7A8BFF';\"},\"valueFont\":{\"family\":\"Roboto\",\"size\":24,\"sizeUnit\":\"px\",\"style\":\"normal\",\"weight\":\"500\",\"lineHeight\":\"100%\"},\"valueColor\":{\"type\":\"range\",\"color\":\"#000000DE\",\"rangeList\":[{\"from\":null,\"to\":20,\"color\":\"#FF0000DE\"},{\"from\":20,\"to\":null,\"color\":\"rgba(0,0,0,0.87)\"}],\"colorFunction\":\"var percent = value;\\nif (typeof percent !== undefined) {\\n if (percent < 20) {\\n return '#FF0000DE';\\n }\\n}\\nreturn '#000000DE';\"},\"showBackgroundOverlay\":true,\"backgroundOverlayColor\":{\"type\":\"range\",\"color\":\"#FFFFFFC2\",\"rangeList\":[{\"from\":null,\"to\":20,\"color\":\"#FFEFEFDE\"},{\"from\":20,\"to\":null,\"color\":\"#FFFFFFC2\"}],\"colorFunction\":\"var percent = value;\\nif (typeof percent !== undefined) {\\n if (percent < 20) {\\n return '#FFEFEFDE';\\n }\\n}\\nreturn '#FFFFFFC2';\"},\"showTooltip\":true,\"showTooltipLevel\":true,\"tooltipUnits\":\"%\",\"tooltipLevelDecimals\":0,\"tooltipLevelFont\":{\"family\":\"Roboto\",\"size\":13,\"sizeUnit\":\"px\",\"style\":\"normal\",\"weight\":\"500\",\"lineHeight\":\"100%\"},\"tooltipLevelColor\":{\"type\":\"constant\",\"color\":\"rgba(0, 0, 0, 0.76)\",\"rangeList\":[],\"colorFunction\":\"var percent = value;\\nif (typeof percent !== undefined) {\\n if (percent < 20) {\\n return '#E27C7CDE';\\n }\\n}\\nreturn '#7A8BFF';\"},\"showTooltipDate\":true,\"tooltipDateFormat\":{\"format\":null,\"lastUpdateAgo\":true,\"custom\":false},\"tooltipDateFont\":{\"family\":\"Roboto\",\"size\":13,\"sizeUnit\":\"px\",\"style\":\"normal\",\"weight\":\"500\",\"lineHeight\":\"100%\"},\"tooltipDateColor\":\"rgba(0, 0, 0, 0.76)\",\"tooltipBackgroundColor\":\"rgba(255, 255, 255, 0.76)\",\"tooltipBackgroundBlur\":3,\"background\":{\"type\":\"color\",\"color\":\"#fff\",\"overlay\":{\"enabled\":false,\"color\":\"rgba(255,255,255,0.72)\",\"blur\":3}}},\"title\":\"Liquid level\",\"useDashboardTimewindow\":true,\"displayTimewindow\":true,\"configMode\":\"basic\",\"titleFont\":{\"family\":\"Roboto\",\"size\":16,\"sizeUnit\":\"px\",\"style\":\"normal\",\"weight\":\"500\",\"lineHeight\":\"1.5\"},\"titleColor\":\"rgba(0, 0, 0, 0.87)\",\"showTitleIcon\":false,\"titleIcon\":\"water_drop\",\"iconColor\":\"#5469FF\",\"decimals\":0,\"enableDataExport\":false,\"enableFullscreen\":false,\"borderRadius\":\"0px\",\"actions\":{},\"iconSize\":\"24px\",\"titleTooltip\":\"\",\"dropShadow\":true,\"margin\":\"0px\",\"widgetStyle\":{},\"widgetCss\":\"\",\"titleStyle\":{\"fontSize\":\"16px\",\"fontWeight\":400},\"pageSize\":1024,\"noDataDisplayMessage\":\"\"}" + }, + "externalId": null, + "tags": null +} \ No newline at end of file diff --git a/application/src/main/data/json/system/widget_types/horizontal_dish_ends_tank.json b/application/src/main/data/json/system/widget_types/horizontal_dish_ends_tank.json new file mode 100644 index 0000000000..35ebb08750 --- /dev/null +++ b/application/src/main/data/json/system/widget_types/horizontal_dish_ends_tank.json @@ -0,0 +1,24 @@ +{ + "fqn": "horizontal_dish_ends_tank", + "name": "Horizontal dish ends tank", + "deprecated": false, + "image": "data:image/png;base64,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", + "description": "Widget indicates the level of liquid in Horizontal dish ends tank.", + "descriptor": { + "type": "latest", + "sizeX": 4, + "sizeY": 4, + "resources": [], + "templateHtml": "\n", + "templateCss": "", + "controllerScript": "self.onInit = function() {\n self.ctx.$scope.liquidLevelWidget.onInit();\n};\n\nself.onDataUpdated = function() {\n self.ctx.$scope.liquidLevelWidget.update();\n}\n\nself.typeParameters = function() {\n return {\n maxDatasources: 1,\n maxDataKeys: 1,\n singleEntity: true,\n previewWidth: '250px',\n previewHeight: '250px',\n embedTitlePanel: true\n };\n};\n\nself.onDestroy = function() {\n}\n\nself.actionSources = function() { \n return { \n 'cardClick': {\n name: 'widget-action.card-click',\n multiple: false \n } \n };\n}", + "settingsSchema": "{}", + "dataKeySettingsSchema": "{}\n", + "settingsDirective": "tb-liquid-level-card-widget-settings", + "hasBasicMode": true, + "basicModeDirective": "tb-liquid-level-card-basic-config", + "defaultConfig": "{\"datasources\":[{\"type\":\"function\",\"name\":\"function\",\"dataKeys\":[{\"name\":\"f(x)\",\"type\":\"function\",\"label\":\"Random\",\"color\":\"#2196f3\",\"settings\":{},\"_hash\":0.15479322438769105,\"funcBody\":\"return Math.floor(Math.random() * 101);\",\"aggregationType\":null,\"units\":null,\"decimals\":null,\"usePostProcessing\":null,\"postFuncBody\":null}],\"alarmFilterConfig\":{\"statusList\":[\"ACTIVE\"]}}],\"timewindow\":{\"realtime\":{\"timewindowMs\":60000}},\"showTitle\":true,\"backgroundColor\":\"#fff\",\"color\":\"rgba(0, 0, 0, 0.87)\",\"padding\":\"0px\",\"settings\":{\"tankSelectionType\":\"static\",\"selectedShape\":\"Horizontal Dish Ends\",\"shapeAttributeName\":\"tankShape\",\"tankColor\":{\"type\":\"range\",\"color\":\"#242770\",\"rangeList\":[{\"from\":null,\"to\":20,\"color\":\"#E73535DE\"},{\"from\":20,\"to\":null,\"color\":\"#242770\"}],\"colorFunction\":\"var percent = value;\\nif (typeof percent !== undefined) {\\n if (percent < 20) {\\n return '#E73535DE';\\n }\\n}\\nreturn '#242770';\"},\"datasourceUnits\":\"%\",\"layout\":\"percentage\",\"volumeSource\":\"static\",\"volumeConstant\":500,\"volumeAttributeName\":\"volume\",\"volumeUnits\":\"L\",\"volumeFont\":{\"family\":\"Roboto\",\"size\":14,\"sizeUnit\":\"px\",\"style\":\"normal\",\"weight\":\"500\",\"lineHeight\":\"100%\"},\"volumeColor\":\"rgba(0, 0, 0, 0.18)\",\"units\":\"%\",\"widgetUnitsSource\":\"static\",\"widgetUnitsAttributeName\":\"units\",\"liquidColor\":{\"type\":\"range\",\"color\":\"#7A8BFF\",\"rangeList\":[{\"from\":null,\"to\":20,\"color\":\"#E27C7CDE\"},{\"from\":20,\"to\":null,\"color\":\"#7A8BFF\"}],\"colorFunction\":\"var percent = value;\\nif (typeof percent !== undefined) {\\n if (percent < 20) {\\n return '#E27C7CDE';\\n }\\n}\\nreturn '#7A8BFF';\"},\"valueFont\":{\"family\":\"Roboto\",\"size\":24,\"sizeUnit\":\"px\",\"style\":\"normal\",\"weight\":\"500\",\"lineHeight\":\"100%\"},\"valueColor\":{\"type\":\"range\",\"color\":\"#000000DE\",\"rangeList\":[{\"from\":null,\"to\":20,\"color\":\"#FF0000DE\"},{\"from\":20,\"to\":null,\"color\":\"rgba(0,0,0,0.87)\"}],\"colorFunction\":\"var percent = value;\\nif (typeof percent !== undefined) {\\n if (percent < 20) {\\n return '#FF0000DE';\\n }\\n}\\nreturn '#000000DE';\"},\"showBackgroundOverlay\":true,\"backgroundOverlayColor\":{\"type\":\"range\",\"color\":\"rgba(255, 255, 255, 0.76)\",\"rangeList\":[{\"from\":null,\"to\":20,\"color\":\"#FFEFEFDE\"},{\"from\":20,\"to\":null,\"color\":\"#FFFFFFC2\"}],\"colorFunction\":\"var percent = value;\\nif (typeof percent !== undefined) {\\n if (percent < 20) {\\n return '#FFEFEFDE';\\n }\\n}\\nreturn '#FFFFFFC2';\"},\"showTooltip\":true,\"showTooltipLevel\":true,\"tooltipUnits\":\"%\",\"tooltipLevelDecimals\":0,\"tooltipLevelFont\":{\"family\":\"Roboto\",\"size\":13,\"sizeUnit\":\"px\",\"style\":\"normal\",\"weight\":\"500\",\"lineHeight\":\"100%\"},\"tooltipLevelColor\":{\"type\":\"constant\",\"color\":\"rgba(0, 0, 0, 0.76)\",\"rangeList\":[],\"colorFunction\":\"var percent = value;\\nif (typeof percent !== undefined) {\\n if (percent < 20) {\\n return '#E27C7CDE';\\n }\\n}\\nreturn '#7A8BFF';\"},\"showTooltipDate\":true,\"tooltipDateFormat\":{\"format\":null,\"lastUpdateAgo\":true,\"custom\":false},\"tooltipDateFont\":{\"family\":\"Roboto\",\"size\":13,\"sizeUnit\":\"px\",\"style\":\"normal\",\"weight\":\"500\",\"lineHeight\":\"100%\"},\"tooltipDateColor\":\"rgba(0, 0, 0, 0.76)\",\"tooltipBackgroundColor\":\"rgba(255, 255, 255, 0.76)\",\"tooltipBackgroundBlur\":3,\"background\":{\"type\":\"color\",\"color\":\"#fff\",\"overlay\":{\"enabled\":false,\"color\":\"rgba(255,255,255,0.72)\",\"blur\":3}}},\"title\":\"Liquid level\",\"useDashboardTimewindow\":true,\"displayTimewindow\":true,\"configMode\":\"basic\",\"titleFont\":{\"family\":\"Roboto\",\"size\":16,\"sizeUnit\":\"px\",\"style\":\"normal\",\"weight\":\"500\",\"lineHeight\":\"1.5\"},\"titleColor\":\"rgba(0, 0, 0, 0.87)\",\"showTitleIcon\":false,\"titleIcon\":\"water_drop\",\"iconColor\":\"#5469FF\",\"decimals\":0,\"enableDataExport\":false,\"enableFullscreen\":false,\"borderRadius\":\"0px\",\"actions\":{},\"iconSize\":\"24px\",\"titleTooltip\":\"\",\"dropShadow\":true,\"margin\":\"0px\",\"widgetStyle\":{},\"widgetCss\":\"\",\"titleStyle\":{\"fontSize\":\"16px\",\"fontWeight\":400},\"pageSize\":1024,\"noDataDisplayMessage\":\"\"}" + }, + "externalId": null, + "tags": null +} diff --git a/application/src/main/data/json/system/widget_types/horizontal_ellipse_tank.json b/application/src/main/data/json/system/widget_types/horizontal_ellipse_tank.json new file mode 100644 index 0000000000..01fdb879b0 --- /dev/null +++ b/application/src/main/data/json/system/widget_types/horizontal_ellipse_tank.json @@ -0,0 +1,24 @@ +{ + "fqn": "horizontal_ellipse_tank", + "name": "Horizontal ellipse tank", + "deprecated": false, + "image": "data:image/png;base64,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", + "description": "Widget indicates the level of liquid in Horizontal ellipse tank.", + "descriptor": { + "type": "latest", + "sizeX": 4, + "sizeY": 4, + "resources": [], + "templateHtml": "\n", + "templateCss": "", + "controllerScript": "self.onInit = function() {\n self.ctx.$scope.liquidLevelWidget.onInit();\n};\n\nself.onDataUpdated = function() {\n self.ctx.$scope.liquidLevelWidget.update();\n}\n\nself.typeParameters = function() {\n return {\n maxDatasources: 1,\n maxDataKeys: 1,\n singleEntity: true,\n previewWidth: '250px',\n previewHeight: '250px',\n embedTitlePanel: true\n };\n};\n\nself.onDestroy = function() {\n}\n\nself.actionSources = function() { \n return { \n 'cardClick': {\n name: 'widget-action.card-click',\n multiple: false \n } \n };\n}", + "settingsSchema": "{}", + "dataKeySettingsSchema": "{}\n", + "settingsDirective": "tb-liquid-level-card-widget-settings", + "hasBasicMode": true, + "basicModeDirective": "tb-liquid-level-card-basic-config", + "defaultConfig": "{\"datasources\":[{\"type\":\"function\",\"name\":\"function\",\"dataKeys\":[{\"name\":\"f(x)\",\"type\":\"function\",\"label\":\"Random\",\"color\":\"#2196f3\",\"settings\":{},\"_hash\":0.15479322438769105,\"funcBody\":\"return Math.floor(Math.random() * 101);\",\"aggregationType\":null,\"units\":null,\"decimals\":null,\"usePostProcessing\":null,\"postFuncBody\":null}],\"alarmFilterConfig\":{\"statusList\":[\"ACTIVE\"]}}],\"timewindow\":{\"realtime\":{\"timewindowMs\":60000}},\"showTitle\":true,\"backgroundColor\":\"#fff\",\"color\":\"rgba(0, 0, 0, 0.87)\",\"padding\":\"0px\",\"settings\":{\"tankSelectionType\":\"Static\",\"selectedShape\":\"Horizontal Ellipse\",\"shapeAttributeName\":\"tankShape\",\"tankColor\":{\"type\":\"range\",\"color\":\"#242770\",\"rangeList\":[{\"from\":null,\"to\":20,\"color\":\"#E73535DE\"},{\"from\":20,\"to\":null,\"color\":\"#242770\"}],\"colorFunction\":\"var percent = value;\\nif (typeof percent !== undefined) {\\n if (percent < 20) {\\n return '#E73535DE';\\n }\\n}\\nreturn '#242770';\"},\"datasourceUnits\":\"%\",\"layout\":\"percentage\",\"volumeSource\":\"static\",\"volumeConstant\":500,\"volumeAttributeName\":\"volume\",\"volumeUnits\":\"L\",\"volumeFont\":{\"family\":\"Roboto\",\"size\":14,\"sizeUnit\":\"px\",\"style\":\"normal\",\"weight\":\"500\",\"lineHeight\":\"100%\"},\"volumeColor\":\"rgba(0, 0, 0, 0.18)\",\"units\":\"%\",\"widgetUnitsSource\":\"static\",\"widgetUnitsAttributeName\":\"units\",\"liquidColor\":{\"type\":\"range\",\"color\":\"#7A8BFF\",\"rangeList\":[{\"from\":null,\"to\":20,\"color\":\"#E27C7CDE\"},{\"from\":20,\"to\":null,\"color\":\"#7A8BFF\"}],\"colorFunction\":\"var percent = value;\\nif (typeof percent !== undefined) {\\n if (percent < 20) {\\n return '#E27C7CDE';\\n }\\n}\\nreturn '#7A8BFF';\"},\"valueFont\":{\"family\":\"Roboto\",\"size\":24,\"sizeUnit\":\"px\",\"style\":\"normal\",\"weight\":\"500\",\"lineHeight\":\"100%\"},\"valueColor\":{\"type\":\"range\",\"color\":\"#000000DE\",\"rangeList\":[{\"from\":null,\"to\":20,\"color\":\"#FF0000DE\"},{\"from\":20,\"to\":null,\"color\":\"rgba(0,0,0,0.87)\"}],\"colorFunction\":\"var percent = value;\\nif (typeof percent !== undefined) {\\n if (percent < 20) {\\n return '#FF0000DE';\\n }\\n}\\nreturn '#000000DE';\"},\"showBackgroundOverlay\":true,\"backgroundOverlayColor\":{\"type\":\"range\",\"color\":\"#FFFFFFC2\",\"rangeList\":[{\"from\":0,\"to\":20,\"color\":\"#FFEFEFDE\"},{\"from\":20,\"to\":null,\"color\":\"#FFFFFFC2\"}],\"colorFunction\":\"var percent = value;\\nif (typeof percent !== undefined) {\\n if (percent < 20) {\\n return '#FFEFEFDE';\\n }\\n}\\nreturn '#FFFFFFC2';\"},\"showTooltip\":true,\"showTooltipLevel\":true,\"tooltipUnits\":\"%\",\"tooltipLevelDecimals\":0,\"tooltipLevelFont\":{\"family\":\"Roboto\",\"size\":13,\"sizeUnit\":\"px\",\"style\":\"normal\",\"weight\":\"500\",\"lineHeight\":\"100%\"},\"tooltipLevelColor\":{\"type\":\"constant\",\"color\":\"rgba(0, 0, 0, 0.76)\",\"rangeList\":[],\"colorFunction\":\"var percent = value;\\nif (typeof percent !== undefined) {\\n if (percent < 20) {\\n return '#E27C7CDE';\\n }\\n}\\nreturn '#7A8BFF';\"},\"showTooltipDate\":true,\"tooltipDateFormat\":{\"format\":null,\"lastUpdateAgo\":true,\"custom\":false},\"tooltipDateFont\":{\"family\":\"Roboto\",\"size\":13,\"sizeUnit\":\"px\",\"style\":\"normal\",\"weight\":\"500\",\"lineHeight\":\"100%\"},\"tooltipDateColor\":\"rgba(0, 0, 0, 0.76)\",\"tooltipBackgroundColor\":\"rgba(255, 255, 255, 0.76)\",\"tooltipBackgroundBlur\":3,\"background\":{\"type\":\"color\",\"color\":\"#fff\",\"overlay\":{\"enabled\":false,\"color\":\"rgba(255,255,255,0.72)\",\"blur\":3}}},\"title\":\"Liquid level\",\"useDashboardTimewindow\":true,\"displayTimewindow\":true,\"configMode\":\"basic\",\"titleFont\":{\"family\":\"Roboto\",\"size\":16,\"sizeUnit\":\"px\",\"style\":\"normal\",\"weight\":\"500\",\"lineHeight\":\"1.5\"},\"titleColor\":\"rgba(0, 0, 0, 0.87)\",\"showTitleIcon\":false,\"titleIcon\":\"water_drop\",\"iconColor\":\"#5469FF\",\"decimals\":0,\"enableDataExport\":false,\"enableFullscreen\":false,\"borderRadius\":\"0px\",\"actions\":{},\"iconSize\":\"24px\",\"titleTooltip\":\"\",\"dropShadow\":true,\"margin\":\"0px\",\"widgetStyle\":{},\"widgetCss\":\"\",\"titleStyle\":{\"fontSize\":\"16px\",\"fontWeight\":400},\"pageSize\":1024,\"noDataDisplayMessage\":\"\"}" + }, + "externalId": null, + "tags": null +} \ No newline at end of file diff --git a/application/src/main/data/json/system/widget_types/horizontal_flooding_level_card.json b/application/src/main/data/json/system/widget_types/horizontal_flooding_level_card.json index a37a2032b4..1676f3e539 100644 --- a/application/src/main/data/json/system/widget_types/horizontal_flooding_level_card.json +++ b/application/src/main/data/json/system/widget_types/horizontal_flooding_level_card.json @@ -3,7 +3,7 @@ "name": "Horizontal flooding level card", "deprecated": false, "image": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAACgCAMAAAB+IdObAAAAn1BMVEUAAADf39/f39/g4ODg4ODf39/////k5OQjTMfg4OCRpePk6fisrKzx8fHIyMg9PT11j9zOzs7y9PuQkJD09PT5+fmtvOqsvOpYWFjI0vHV1dXb29u3t7c+Ys4wV8vCwsK8vLy6x+5aedXn5+dohNlmZmaDmt+enp5aeNUrKyt0dHSfsedMbtGdnZ0/Ys6CgoJLS0vW3fTW3fUxV8pKSkpA7yNPAAAABnRSTlMAIEDfv1C6kOEmAAADcUlEQVR42u3a53KbQBSGYUV2DivKUgQSRTR1F9lOuf9ry9kVUkjGQyyT8WDN91iGBVx4h93xD3kEAAAAAAAAAAAAAAAAAAAAAAAAAAAA8JG+fHo6Y3xjfHaTm6/cYUT06YXGeHQb0hWIbkcTugoThAwMQoYGIUODkKFByNC8FmI9egm12dOpLW1quaep0z40qEV/aX/9Q3IhRD636CzeydSekqNu1+AAx3HpwCM11CddQ503+Ihf3E29BA9m67fXM+0dIVtxtJ6fQ2zDsadGvIlpunGl8bK5I5fce9dWQx0yjV0ZGwfbjn9WPUPmguXnkqXQLg8xxVn+0IRs7iVPrx3F6R3JDQ9c/WFPn3moQ+7s5/vDLjZeprtNvxBLiOS7KZbUeBLveyKJOFvu6yZEqnVyUCHuXyH2KWQhDeclJnehZmG/B+LxthAWHYmcfgusIEhqvvRtlnSHWHkrhKgdYvCD4an1M+XBXROihjrk4G4kxTbZbrzrF+IJNQ/WYk5aIPZktabLWt1grebbY1dI0HQUa978COhPjv7Um4ZRSfd0sbXvFzJvtto38aMQwgvO896crTli9lCIuiNkK/bNSit4n9C/OPZzSp36hxTbbS6W5yeiHpKw1K2aHSHW3BKM+z3ebamv/iEUBETWacmYegEJoYadIexJzUGimV4kvfUPYXrJXBaSLAuhrWvB5gF9uK1e7EuRnP4eWvqwvizkSazVItmrtV54efPTQnpF6Px9IqT/IRFLPZfUjNJd5numVh0QJbOEyJrNeFhbpCx0DL+cjLQoomjiqxMTivh4Za8oyrLjBT7RKykXnvmo1ue8SVKHHl0WQsGsJm6prSboFJKmfialz6OSyqysokXpp6n0K8evIiJ/FVZVRqGvL/iyovez1JzYBipkzYffczXTgwtDtoUQuae/dalWu/U7ZBFKf+UfQ1ZpxmM+t8r8UuqQSZZxiKxWMuTcMqQeAis47luHr+laI/t6novCTDxRbBOzSEix/az0F6ksQ/VE/CorF+FC+nzO4Rv3SYVE6omsKltdSMuSPpgOuVi26riYyozeYBAhUdR1MaS3GETIECFkaBAyNAgZGoQMzWR0ewVvsxOFt6OxcQVvtEfGeDT6ejMxPrub8TX9Uw0AAAAAAAAAAAAAAAAAAAAAAAAAAADAB/kFV7oA4xEmmqQAAAAASUVORK5CYII=", - "description": "Displays a latest flooding level telemetry data in a horizontal layout.", + "description": "Displays a latest flooding level telemetry in a horizontal layout.", "descriptor": { "type": "latest", "sizeX": 5, diff --git a/application/src/main/data/json/system/widget_types/horizontal_flooding_level_card_with_background.json b/application/src/main/data/json/system/widget_types/horizontal_flooding_level_card_with_background.json index 0dbe99ca95..8b8a1a78b2 100644 --- a/application/src/main/data/json/system/widget_types/horizontal_flooding_level_card_with_background.json +++ b/application/src/main/data/json/system/widget_types/horizontal_flooding_level_card_with_background.json @@ -3,7 +3,7 @@ "name": "Horizontal flooding level card with background", "deprecated": false, "image": "data:image/png;base64,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", - "description": "Displays a latest flooding level telemetry data in a horizontal layout with background.", + "description": "Displays a latest flooding level telemetry in a horizontal layout with background.", "descriptor": { "type": "latest", "sizeX": 5, diff --git a/application/src/main/data/json/system/widget_types/horizontal_ground_temperature_card.json b/application/src/main/data/json/system/widget_types/horizontal_ground_temperature_card.json index 288150a435..91561ca560 100644 --- a/application/src/main/data/json/system/widget_types/horizontal_ground_temperature_card.json +++ b/application/src/main/data/json/system/widget_types/horizontal_ground_temperature_card.json @@ -3,7 +3,7 @@ "name": "Horizontal ground temperature card", "deprecated": false, "image": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAACgCAMAAAB+IdObAAAAqFBMVEUAAADf39/f39/g4ODg4ODf39/////k5OQjTMfg4ODy8vLIyMjI0vFYWFh1j9yQkJDOzs7k6fg+Ys50dHT5+fmsrKxKSkpmZmaRpePb29vy9PvCwsK2trasvOrV1dXn5+efsedaedU9PT28vLy6x+6enp4/Ys66urowV8taeNVMbtI8PDzt7e2dnZ2CgoIhISExV8ovLy/W3fXW3fSRpuODmuBog9nW3vRsY+KEAAAABnRSTlMAIEDfv1C6kOEmAAADiUlEQVR42u3ai1LaQBiGYar232WXzflACIRzOSnVVtv7v7P+2bQijoVYHRqZ7xkIm92M7jtmBmegBQAAAAAAAAAAAAAAAAAAAAAAAAAAAHBKnz48m3FxKT669uVn7hARfXhKXLSuFJ2B6KrVprPQRkjDIKRpENI0CGkahDTNiyGDpXygp+ZuTC8I+anogAOrpwjpyeCHHNGOu9WJVkpR9RAk+MijCR9SThT8sPOkqgX7KhTpRIlybI9UX2fUnfmPo93GRoO99WMhHTnoSod2koKEcJPtjTFzHZIRJt3EIkm/csAmpSRM6C7cpKkRX0MjFomZx8nWDTc63CyM0KGehHz1nOpyJAu+8+jejnyy/GAVjMvXsZ0d1Anp7YVMVJzGrkuJUJMqRMShO6cJr4V6kcSm+EpuLCbCkDs37pyvJjFPXT63ISml23hCNQ1k0PnmyDXvpBo5ZM3W5MseUSBXs05Xyu81Qr7vhRhNLuMgkbwQYrRWv0MS4oobrTnELG4eQ0IKXa2pprXslPc379mRo3J026v2ddu5D2wnMb5paoSM9q4qTDpZcEg8MQuVpHc2RJj0jtdcwzPJn5C7NBELY+YccpMmW7VZ3CSmDClM6FJNs0G58TJkXCbRF+mT1V0u+XzMdayzqhNC+7kkqKKqJ3txIIzanav9RUWvMpArTihDbM6OnawcD1mPOeQfKJfexGe9ahRI/x1CmEP/wRf7i6uOEb01hH9IaUanN+p27dtGL5Bd+nvIrF7ISFq39P+sqw76Yfe8lD494VSLM7k+EjKWlZ+H/9FQ188nFL2Tx3eObjnwZfDszr/1beTDq0P6VYyi64ysKKKo7ZUTbYr4fBgPKcqyaoEn3pZ0L6VTGlBvKZ1uIEfPOwPnYSwD/0hIV1oBPQ0pCi/T2uNRTnmWT6N+7hWF9qbX3jQi8oZqOs1IeXbB01N6g7GsOETfAimXI3qG26Rc+XQkpBfI0mA/xOsr7Q29KmRYZDzmuWHm5dqGtLOMQ3R/qBXn5oreie/3DsweDCHfWcpVh3ZiL8u9fqFzxUm5N83yvuprj+eup0PtURkSlX+R4TQuF4o8p9OqQl4tG9LfFTqjOpoQEkWHFhXV0YiQJkJI0yCkaRDSNAhpmnbr6gw+ZidSV60LcQYftEfiotX6fNkWH93lxTl9qQYAAAAAAAAAAAAAAAAAAAAAAAAAAADgRH4BUVMBmbp0nFsAAAAASUVORK5CYII=", - "description": "Displays a latest ground temperature telemetry data in a horizontal layout.", + "description": "Displays a latest ground temperature telemetry in a horizontal layout.", "descriptor": { "type": "latest", "sizeX": 5, diff --git a/application/src/main/data/json/system/widget_types/horizontal_ground_temperature_card_with_background.json b/application/src/main/data/json/system/widget_types/horizontal_ground_temperature_card_with_background.json index 540398dad5..1e3c5a048a 100644 --- a/application/src/main/data/json/system/widget_types/horizontal_ground_temperature_card_with_background.json +++ b/application/src/main/data/json/system/widget_types/horizontal_ground_temperature_card_with_background.json @@ -3,7 +3,7 @@ "name": "Horizontal ground temperature card with background", "deprecated": false, "image": "data:image/png;base64,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", - "description": "Displays a latest ground temperature telemetry data in a horizontal layout with background.", + "description": "Displays a latest ground temperature telemetry in a horizontal layout with background.", "descriptor": { "type": "latest", "sizeX": 5, diff --git a/application/src/main/data/json/system/widget_types/horizontal_humidity_card.json b/application/src/main/data/json/system/widget_types/horizontal_humidity_card.json index 2b58b32288..ad654c941e 100644 --- a/application/src/main/data/json/system/widget_types/horizontal_humidity_card.json +++ b/application/src/main/data/json/system/widget_types/horizontal_humidity_card.json @@ -3,7 +3,7 @@ "name": "Horizontal humidity card", "deprecated": false, "image": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAACgCAMAAAB+IdObAAAAnFBMVEUAAADf39/f39/g4ODg4OD////k5OQjTMfg4ODz8/M+Ys7k6fjOzs51j9zIyMjy9PusrKz5+fm2trbb29vCwsKQkJCRpeMwV8usvOq8vLw9PT3n5+eesefW3fWRpuODm+DV1dVYWFhMbdHI0vF0dHS6x+1aedVmZmZohNnW3fTt7e2CgoJKSkpaeNUxV8ovLy8hISG6x+6enp6dnZ2UGhvnAAAABXRSTlMAIETfv0i0+14AAANBSURBVHja7dp5b9owHMZxxvrkh+OcJOSA0HCUY4WtO97/e5sdygCpg2orbVo9nz+Qa0uVvzKOUEuHiIiIiIiIiIiIiIiIiIiIiIiIiIiI6DV9evc6Vvez8971PndNhxPj3VNOt3Oj8AHEN50ePoQeQ1qGIW3DkLZhSNswpG2eDqlmIY5EDiYljmwABFEQoT2f054MuRVxNQ6mAaI7peDAaV4RAU40mATBVjlQ16oJq6zQsOZVttBH0/psyHHHacn0Z7C5C+4wdYab4Wo1xRCb1XAQDQbD/oPaRHhhx9v4AsDfjyztujP58pyQW2nMwkPI3WD1GGIOAt9NyAMiE+JMMfg5dHANWmQ+zsS1G3LnY1+WaGTfQri+6ZlfCBnLo/rkrXUaoob7kGC4wlUUsgaQi8ZM5kAoEu5CTNrSR+1eOhFX9uand2S7ejicyGC1NSFqW2Ia4SoKWTYhIYrCJoigUYnWbq1FXwgpRPwql3wt4uKUeuIH5WwVriJ0pdK1+Pt97UfhzF5g18eFENeW+/kYM3skl/3q40rGxzdV54cjGI9RufpCyBcRuV3Mxs2Vr/GGQlfWmSu3uw5XKhzovBhnmT4XMhcjtx2GjzdUid/ckfkuKsMR39f5V/MQPhOiHzvWVf7GJ7KWwm7Zvoaz045CdP0NcOszITD7X5jzsL9Cfpxe7FPqHqeUwkvypW6u7A/bVJ++6TL4zUP4XEgm4tb2nriHp1Z/F6Nwn6ARx4h7np3oIQYwikaIk2S3YCZeImku4mdLu4najKwFdhZmrvqmdV6cCwld2SuOQiYTLwkCz4xSpElaxv3Um0wCr7z3yhjwRqosEyivWfCCEv9vYXfyVQNL2cmOt7k0a+G5EOh9SYXjEK+vAm/k7UJGk8SMzdwo8dKgCekliQkJ+qNAmdxU4QWEOsRfaX3ps1ZYzERyf4w/Ii9Jvf4kSJU9Ea9M0r7qB56Zuy9HgQcbEtsTGZWRXZikKV7F+ZDLkhH+bhIkeI42hMTxuUWF52hFSBsxpG0Y0jYMaRuGtE2vc/MB/s0OqJtO12nPH3D/Wex07Vc4es5797n7kb5UQ0RERERERERERERERERERERERERERPRKfgPNbdZin3BhXgAAAABJRU5ErkJggg==", - "description": "Displays a latest humidity telemetry data in a horizontal layout.", + "description": "Displays a latest humidity telemetry in a horizontal layout.", "descriptor": { "type": "latest", "sizeX": 5, diff --git a/application/src/main/data/json/system/widget_types/horizontal_humidity_card_with_background.json b/application/src/main/data/json/system/widget_types/horizontal_humidity_card_with_background.json index 8dc416249c..05fde200a0 100644 --- a/application/src/main/data/json/system/widget_types/horizontal_humidity_card_with_background.json +++ b/application/src/main/data/json/system/widget_types/horizontal_humidity_card_with_background.json @@ -3,7 +3,7 @@ "name": "Horizontal humidity card with background", "deprecated": false, "image": "data:image/png;base64,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", - "description": "Displays a latest humidity telemetry data in a horizontal layout with background.", + "description": "Displays a latest humidity telemetry in a horizontal layout with background.", "descriptor": { "type": "latest", "sizeX": 5, diff --git a/application/src/main/data/json/system/widget_types/horizontal_illuminance_card.json b/application/src/main/data/json/system/widget_types/horizontal_illuminance_card.json index d07223f469..f084ba0564 100644 --- a/application/src/main/data/json/system/widget_types/horizontal_illuminance_card.json +++ b/application/src/main/data/json/system/widget_types/horizontal_illuminance_card.json @@ -3,7 +3,7 @@ "name": "Horizontal illuminance card", "deprecated": false, "image": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAACgCAMAAAB+IdObAAAAolBMVEUAAADg4ODf39/g4ODg4ODf39/////g4ODYGDjdNVH1xc2srKzx8fHOzs6QkJDiUmn98fM9PT364ubIyMjz8/P5+fnb29u2trZ0dHTj4+PCwsLnb4K8vLzn5+fwqLTri5vpfY/409pmZmbaJkXV1dXumqjzt8Hu7u7sjJzkYHbU1NRYWFjfQ12dnZ1LS0vgRF0vLy8hISHwqbSCgoLpfZDofY9vEfvyAAAABnRSTlMA7yC/r7BI7FImAAADHklEQVR42u3a53LaUBCGYcDJsmqoC9QLiGJip9//rWUlOWAcTMyECTLzPeD10dEf3jEyzMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAM42uhuO37sPI+kYrujd04ejwQedbsDqbjCmmzC8lZAxQnoGIX2DkL5BSN8cD/mp0HtzPCRmem4aapqr0Z4+ob55GWLFlswsJlGX1Jm5k4k20XUKKWwnae2CdF3uckhhd3BRVp1/c6ih1vmSnqisvCkk488WddZsPg+RG9n0ZWZXVdUt3IdtpWmPlU3fq2042douXdCahVLuVs55IZTnZK03n+OSStP6M+QrTbTQpuY208JJNdNmZOs2LcJH7fuMLsdhVsuclWalqGXB5nkhwlG4sSZxOmSbPOxD7Kkb0uVkvJE5Z4cKLoisOVu7EMtp1o7MkyEKd9QXIYvH6sthyMN224bQpHoMH+xKu2iI2YZYZPJSVp+43IU4PHdkKM7JkIyfmPSS/uqG3o0LshSunYJjkhCV2rkLoZxjKavp1ZDaLKjg30g1TbqaksVn62iIVMby+/WQXELifcjyiiHyWDe5wuujITKZHaIznlpXU3PcXiPq0RA58Yn+EmIp3PlG17ThTGYsU34OL/anl5b6jf9+c9rx6Ahv9XLDowuK+YdMhZdU86Z9MaF9iMPzJc+tkyFiyWJDe9M2Ru6rgFq+T/7YaDbG5MtxqqXkB0F3QjYukKQyx7n5+8rOFc6fhWzkqOD4byEli/gwZLEwAtc1ZBVRFESJP42MxcI1kpWR+ERG6iVJQJ7RnjDchP7ZUmFm03l6iswL2odkbZ9cPydDxDLLMucw5P5+6rlGanQh6X0ga9lLAyNy25BxEEiIm6SuJ7mRR//OcqyD1flv41XTLOgZzQgiY7pwI0+SIiMJoqk3dQ3ZW8kDN6gJ8Zu/SJpozYlFFNH/cjrkk1LQCUFKr7t3A7qCJuRsvn/qpEdv0YuQPkJI3yCkbxDSNzcUMqSbMB7c3cTH0/rHwWh4AyX6sPnqw4fxeze8Gw0AAAAAAAAAAAAAAAAAAAAAAAAAAAAA4Fy/AL5F9/papj6AAAAAAElFTkSuQmCC", - "description": "Displays a latest illuminance telemetry data in a horizontal layout.", + "description": "Displays a latest illuminance telemetry in a horizontal layout.", "descriptor": { "type": "latest", "sizeX": 5, diff --git a/application/src/main/data/json/system/widget_types/horizontal_illuminance_card_with_background.json b/application/src/main/data/json/system/widget_types/horizontal_illuminance_card_with_background.json index 1e70bae331..8416561ed0 100644 --- a/application/src/main/data/json/system/widget_types/horizontal_illuminance_card_with_background.json +++ b/application/src/main/data/json/system/widget_types/horizontal_illuminance_card_with_background.json @@ -3,7 +3,7 @@ "name": "Horizontal illuminance card with background", "deprecated": false, "image": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAACgCAMAAAB+IdObAAAC/VBMVEUAAAAWHB8VGB0ZHSAWHB4fISIgICAfICHIyckXHB/OzMrMy8rSzsvRzcveI0PJycnVz8vm2tDQzMrZ0czOzMvUzsvk2c8WGx4ZHR8YHB/X0MsbHSDOy8ri187k2c7LysrIycr///7e1Mzb0cxDR0no3NHa083d08zY0czW0Mzg1s7KysodHyDd1M0hIiJER0kfICEmISArJiM0KSIvKCTY0s09LSTb0802LCXi2NAzKiQyJyIqJCD//frdOFQ5KyM6LST45dXg1c1AMSctJSEnJSP87uAvJyJGMiY7LyZONidxcXI3KSL25NPd1c5XUE1ISUpENClTOChDMCX/+vT559YtJyMjIR/q3dH+9ez15tjz4dG9vb2MXDJJNypALiT+8+j769vp3tXg08zFxcVhVU5dU03RoahnWE9xSSptRypmQyr86djl29OHh4dwYFOYZTeUYTWtbDKjo6P56drz49VRTUuQYDV9UCx3Syr+8eX97N3v4tbBv729trKenp5bUU0wMDDs4tpqW1GeajuOXjT78efIwMCQkJDVdobcTmX/+O+lnZmZmZnYTGTKfTh4Ty1gQClLMyb+8eGtrazWo6moqKjwuodaPSnv39Dt3tDMtbmys7OtpqGlfltbW1tSUVF1XlBNS0veLUvfjUWGWTGkZy/UuLr91q3fj5eMionWYXX4sG/aiEG3cjWCVC7UysK2trbPipfbQlyObVPSgz07PD2hbTzAdjacZDJrRioiJylYPCj27eX06uHx5tzt39LMxsPQwcO2rafde4jUa37dZHbuqGhfXVxtWlBOOiv/6M3az8fYxcT+3bf+y5mVlZXUgY/bb3/vsHZnaGnmnl72o1nRkVaGaVN5YFG6fkencT7ZrK/9z6KelpHYnmjGjViVclXnlEoyMTDevrzMqa/ZmqHQlqD8xpGAfn37uXrZV23KmGu8j2a3i2Kcd1d9Y1GudUIxMTDjzcXgtbT3yZvlrHffW2+xh2Gge1rTzMfRs5beqHfLhUfRipd2EeMNAAAACHRSTlMA7yC/sO8gr7sVXXAAABGASURBVHja7MGBAAAAAICg/akXqQIAAAAAAAAAmD06VnEbBgM43qS36Aki41cwwbGMEHLABp9RBF5CIJ563kuHxsu9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", - "description": "Displays a latest illuminance telemetry data in a horizontal layout with background.", + "description": "Displays a latest illuminance telemetry in a horizontal layout with background.", "descriptor": { "type": "latest", "sizeX": 5, diff --git a/application/src/main/data/json/system/widget_types/horizontal_leaf_wetness_card.json b/application/src/main/data/json/system/widget_types/horizontal_leaf_wetness_card.json index 82c85c3c94..92d81e0bee 100644 --- a/application/src/main/data/json/system/widget_types/horizontal_leaf_wetness_card.json +++ b/application/src/main/data/json/system/widget_types/horizontal_leaf_wetness_card.json @@ -3,7 +3,7 @@ "name": "Horizontal leaf wetness card", "deprecated": false, "image": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAACgCAMAAAB+IdObAAAAk1BMVEUAAADf39/f39/g4ODg4ODf39/////k5ORLcN3g4ODy8vLIyMhYWFjOzs5hguHo7fv5+fm7yfK7u7v09v2Opurb29utra3CwsK2trZmZmbV1dWlt+7n5+c9PT2QkJB0dHTd5PmaruzS2/d4lOWwwPBWed+Dned4k+WCgoJKSkrt7e1ti+MsLCzH0vSenp6dnZ2DnOgFpIuiAAAABnRSTlMAIEDfv1C6kOEmAAADEklEQVR42u3aaW+iQBzHcde2f8Y5GOSUm3rbc9//q9sB7Wq3DfqAbUbz+6QYHEIyXwZsEzsCAAAAAAAAAAAAAAAAAAAAAAAAAAAA+Em/rl6XMb5zrt3k7sF0OB5dPe6MR/ecboB3P5rQTZggxDIIsQ1CbIMQ2yDENheFxA4d+buMTjhkh4tCpDAvnJvNIS7jbp+3Ce1bwc2o2eXHbWDNtBNQJ1jm+tKQZvkYGvn8JETI9M3Z1VK8pET+Vki+c3ap9F/qeJeWtE2lU9WleKtN6MBy1tnPRrurDZtfFDJ12UF4EpJu30oeV2X3hsut9LdxGpeOdOKKSv4S129V7fP31Oc0sDXLp4bez45pWvwmcl/PhYSMfRtSCRHXzj6EpIxL8Z4KQR8hQjiZSONM1BUNbMH06fIQhRvK3eBMyCP7JmQnt5msK1Gmh5Bqy1+Il2nN07oNoUqmWWXutHcpfRqYy+g461c2D9xQsyn1h8zZ15ADTl/w4zD/2DgNja2eGVvo45V2dRjSmZA16ywOITYIGFvnLvt7LzUNTVf6XMiKGavD8/5IVgga8/LMlvRBu0u9zJveEGa4et9hTrVHfnJZQzPD5zWbn1uRJmd7c7JBM20+h2imlyyg57AvZMFY/rEgbs9jbgaf/h3g9F9M2aK7taZ04D5S7pqpbvo/tVxzZud45qyLMT9PEXU8j7yJagcm5BFRERfkRdH+gBkYNClwzcO+OF7WZhPQK3vVpqf398jSrEpnQychWaYiIZTZSyiJEt+bJSrLhPKflO8RqYL7fkRcdQeU8GlAet3ORlPn9EO4N4QCYp0w+BSiZlyoQu1Diiwy+2asiFQiupBJFJkQMSsEN7kJpyEFOvg6dPZvrWC9YqvNnI5iFSVqlomEtyui/CiZ8ZlQZuzJL4SiNsRrV6Tw4/ZAliT0w05DLhcVPQczEdElbAjxvL6DnC5hRYiNEGIbhNgGIbZBiG0mo/sb+JqdiN+Pxs4NfNHuOePR6OFu4ly7u/Et/VMNAAAAAAAAAAAAAAAAAAAAAAAAAAAAwA/5A5Ee9c9zue74AAAAAElFTkSuQmCC", - "description": "Displays a latest leaf wetness telemetry data in a horizontal layout.", + "description": "Displays a latest leaf wetness telemetry in a horizontal layout.", "descriptor": { "type": "latest", "sizeX": 5, diff --git a/application/src/main/data/json/system/widget_types/horizontal_leaf_wetness_card_with_background.json b/application/src/main/data/json/system/widget_types/horizontal_leaf_wetness_card_with_background.json index 57acfcf515..8a4b13f7a1 100644 --- a/application/src/main/data/json/system/widget_types/horizontal_leaf_wetness_card_with_background.json +++ b/application/src/main/data/json/system/widget_types/horizontal_leaf_wetness_card_with_background.json @@ -3,7 +3,7 @@ "name": "Horizontal leaf wetness card with background", "deprecated": false, "image": "data:image/png;base64,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", - "description": "Displays a latest leaf wetness telemetry data in a horizontal layout with background.", + "description": "Displays a latest leaf wetness telemetry in a horizontal layout with background.", "descriptor": { "type": "latest", "sizeX": 5, diff --git a/application/src/main/data/json/system/widget_types/horizontal_noise_level_card.json b/application/src/main/data/json/system/widget_types/horizontal_noise_level_card.json index a32b3ff059..433a5d0468 100644 --- a/application/src/main/data/json/system/widget_types/horizontal_noise_level_card.json +++ b/application/src/main/data/json/system/widget_types/horizontal_noise_level_card.json @@ -3,7 +3,7 @@ "name": "Horizontal noise level card", "deprecated": false, "image": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAACgCAMAAAB+IdObAAAAnFBMVEUAAADf39/f39/g4ODg4ODf39/////k5OSAwyzg4ODP6a/f8MqQy0bIyMhYWFig0mDOzs67u7v09PTx8fHv9+X5+fn3+/LV1dXb29vi4uLCwsK2trav2Xt0dHTn5+e43Yi/4ZWIxznQ6a+rq6tmZmaYzlNKSkrH5aPn9NiCgoKQkJDt7e3X7L2enp7Y7L2w2Xuo1m48PDytra0hISE2LSZJAAAABnRSTlMAIEDfv1C6kOEmAAADL0lEQVR42u3ai1LaQBiGYar294fshs05hCQEEo6e2/u/t+4unVSoVaiMRuZ71GXdOGNeFobMQA8AAAAAAAAAAAAAAAAAAAAAAAAAAADgI3378mzGxeX1Vze6/K47riP68vzri96VT2cguur16Sz0EdIxCOkahHQNQroGIV1zUEidUOKRcTeiVrKm59YjOspnhLgu1QWRPlMZ0CggCvQPSVcvmWlgD7knC3GW1X3czmjHkB0KZ9r96pCQSe7shtzVxWjRLIJCboon6ekFG7IoFmYcucUiOFnIA2vCnGdlZ+F+yIAtEb4dIniwE+ItNoW3pnVtQrygWd896RC9XLuJ/pL61jtVyICFs6pYEIVmNuHh3yHz2Ww5Z3F8iJQ/i3pNhVfIRDZ1s5HShugDwcatE71JJ9uRXNzqccohTXhCFE85pq343tmG2LaYOXwtJHacF0KoKYKnxqVC3jWul7jNxoQErn60BT9HtG5cE3JC5vSHbJLmvCJrMGUW8zaEmFevhQyY25A9QTvaYff2hOIwNJth7/3taITMk1nONmQemj95pINCPo/DzEPaD1lyrsftjljz+KAQ+xj7HGE1EVzthzzycufJnrOIDwnRE0GfJp5yuBcy5EEbMvy90OmQ21lMZJ/oOQ+ePdnz/ZCcq2NDfHqBf7O/4NMpzO0OCD0u+dG+mJC1tKcv2pBQ8O2xIWMbo79vUrKiiKK+Mgt9ioiorEuK0nR7QC+8J2nJ04dqaP55LPihEly1jzazbkOmef44feMF0clze4miJ5NnIUmiUimVnmWUpZkXjTOVJFJ5N8qLiFTpe15KvrIHlPTo/w0E6zON9Sw0s/YsVvq34Z9LFDGJj71otCFq7EtVqm1ImaR6rtfKVGXShvTTVIfIcSl9nZv59A5hGLcvKfHO+juvfn+oNFPjRGa+2RHlpdnYH0ul1268UioyIZHZkdL7YQ4kWUYfzIYcLS3p3xKZ0gE6ERJFrx306RCdCOkihHQNQroGIV2DkK7p967O4G12Iv9Kf2DgDN5oj/QHBnrfL0fXX93lxTl9qAYAAAAAAAAAAAAAAAAAAAAAAAAAAADgg/wCTYn9BVfiGNYAAAAASUVORK5CYII=", - "description": "Displays a latest noise level telemetry data in a horizontal layout.", + "description": "Displays a latest noise level telemetry in a horizontal layout.", "descriptor": { "type": "latest", "sizeX": 5, diff --git a/application/src/main/data/json/system/widget_types/horizontal_noise_level_card_with_background.json b/application/src/main/data/json/system/widget_types/horizontal_noise_level_card_with_background.json index 02ddfe3a58..7dd7e09862 100644 --- a/application/src/main/data/json/system/widget_types/horizontal_noise_level_card_with_background.json +++ b/application/src/main/data/json/system/widget_types/horizontal_noise_level_card_with_background.json @@ -3,7 +3,7 @@ "name": "Horizontal noise level card with background", "deprecated": false, "image": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAACgCAMAAAB+IdObAAAC9FBMVEUAAAAPDw9DSlpaaXF2f4E3N0NYU1RiY2w9Oz+JlZpwSktZNTeAh4+erbIlJidERVOUk5p4aGpGQkpMUmlAPT+qssBKNTvR1NfR09XS1dje2drX2d3b3N7W2Nzc2tzR0tTa2t3c2dvZ3d/S1NZ8wyLS1dnS09TU1tnm6Onf19jk5ujb3uDY297f2Nnm5uje29zl5eba2NzU19rV19rn6erk4+TT1Nbj5efc293h5Obh4OLT1dni4uPf4OHd1tfj5+jc4OJEUWTf3d5BS1xNS03f4uRGTV/d3t/d3N7o6uzU1dfg1tZBQkZAPkCZl5tCSFKRx09VX2lDVGhKU2VERku8z6mxzZNBT2Cpp6dGR1hFTFVPWWd2Vlra2969u72zsLGTlppoeYB5eH5ZanN4aXJkaW9PT08+Q09JSEqWnaJGWW9KWmpkZmdRU2M8R1c5PEJ+ZWlSWF5KVF6TjZCMgIJjcX5wcnZaWVpASFhSUldNTVRHS1CHxTjN0czH0sC3trerrrCKmqJ+hot2g4d8fX5eant1dXh4W2KAUFF1SUpFQ0Sgqa+rq6xeeIaGdntqbntvb3BUX3BxXmdlXmGXo6qVk5Joe4duXWGBWVtxUVRlREifpKakoKGfnqF6i5SFipKEfoleYnNbWWdKTVyUqLGgnJmMlJmOjZdxeH5acH56cHthbXaFb3BpXmx5YmRKUVc7QEnQz9HDwsOqusF/goNbZWpHRFKLTUmNk6CEkZiPhY2GhYlvfoZtVl+Kn6lwhY54fIhIYHVtZnNRZXOizG9aXmJmUVppTFF+RUKgsLh9kp+JjItffounzXtpdHmOe3h9cnGcyWaIY2aJyDuptLe+2Z5mhZJzYW1zaGZQTl41NjvJxcZdU19KRkba1NXUzs+zwcewq6tdVFNsOzmBxC1SZ31kcHOMxkTEyctsi5iszYdWbHuOVFSJQz64yM/M37jB0LS/26C3zp6WgoFcNj5dTFTY1tiWyFpSKC/g594dHB22zZwhiGb5AAAAF3RSTlMABCYgICYgJiAgJiYmIwtFSODgwPzAwN6sdN0AABasSURBVHja7MGBAAAAAICg/akXqQIAAAAAAAAAmP3xeU0bDON4IS8hOUi3MfYX5ZisvJCD2EvfpkkVAlnmj2JzqUY82IZlpES2sXQM2yops6CB2ZWmIA4Wg3ooUgZePAhS2KXbfa+2f0NP+cD3+zw8z/vl5YmIiIiIiIiIiIiIiHhKAAVImqQB/WAgFqPJWGxRCCIG6NhCABB4h52kiaVoAhAE1jIDlpAkoHGcWDwGNEHTyw63OIHrIzhBkBSJDYsgcIqi8ZaiqIcp7rBICmDDQ0ARgHoEf4BtUbEvKgDYcWZ5xrPn929+XhwMT9P7N8OL1K/P6U9BalQvtuOdWil3elLqXBXatqEbQUF3SkK5L1szNDY999YSBdPM5nKiXPfFsWvqZT+3Jef02bCBirru2KFuNO4cw4b+zq3nGYbdFaCb9xhBfev1IFzf9dREogcnM7an8lpe89gkn9yReInnFEXStCZnsVyFZScVllcqk4mSnHJM/jf3MmlNewzH86qU1HhmOn2xurKyuvm3mj77cnN21MnEhwf7meN04T5+dPh677AfLzrXrat2QUgF/qw/MsV3TjiHnm6i8eZsUJazZt3NiQaqowYSkWjpA70/CJyc65eMuj92BWTbjcYcCaGBYNfIZkURyndd2M0K3pogQNVNQMg2VaiqyZ4Gm972uqJuJ9i8Z+1KCS6h8HmN16TeLj7nn8JWJGZtwuf5fPNcOT/XpnKFTUo7jMUxE2Z15dXFx+rWxt7tcHSS/r63UXb+jDKp1o1TrKVatdY4CGr+UXDSL1/Nr/2uMM8isV3+5oRjWbYal47drrro8liGyC3as8FXsSOKH9xMiC6FahYZP8LQMYy58d518TX/GaKD1qahAADA/Q/+pOX4XkvgHUoiYgxJX6nyzFtjSHLQLesO2TpTS7PDpBNXR7KCCWgOk9CAJRVryHqQUAIFLVgoBS/6A/T7C99U7HSmXdrqxq0sClj6hGslrSvF1ClFtqkDWrN1s2aYNleWJtHX2ooqBsaKLQcIQrgmUJahaaxsnWH6KwwY2wYKgvpK04x7lfs3r9pf2qdn1eHJ+3Z1fvdp8HE+um5eJ/NBdfLhoJi8c77eilUnHkr+zhI2hSXER855ngoLLVr6/lJa5GwRx2v1WOhuveVYinPBtSwvL4TcdYdavvWjJCmmO3G7E3t8r6u0xKDDBny0MVhOUxAlY86kZo0SihrpCtUACIIG5mpELjlShgSYECBAkAkxxgwXQvCSARq0mTUjy7qModyHdqU9m3lnN/XloP16//d+s/qifipdXvz43pyPRtvhyeXB5Fsze3hx66ZWlgws7VDcZKwfiX536hePN87RuN93Y6fveLmkHj+L80USq+JndaiKkuXFniW4v4Qs68zG8TmrioWStlwWizTt8WLkU5vd48Md4Xm+3OMkhDkIFRSQUgkaBISchrEcIgLg2zDQgYEZim0bYkCuoM4YDAY1pKUG+n9TeXr3982fw8Gjav15/cHPf0SPMWvCQBiG+y9aaKSSgooJIkoMthk6KAGRTA7iUI4Mpc6WQKd6p9yim+lSW9IhxGwdkiExELJ06mAHh9Ip0MWpv6FfojQPd9+93L3DPeOH3fx67OwcFMc7Z7ad95XY+cXLl9jBoe5gYwbT9E1sIqw/W8bwY2QO12iozBSEkT5c6RihO2QiZY2VraV7S93TsbLyQ8X0PUxWIbaI5U/8MCA+sYzIJb43NVyDqNR17chVJxNiT1U10NzJlBI61Vxboxq1KVW1AB5gRYSqj9SOqE2CRWvwNuj23ntH397s8+lncykIF4AkCJJYrlQq1WZTFEUYzYR2u32VwLEMBzAAy7Iw8wCf5yHJsszskTlOZuR9heNYgOdhs2kCToFcrl6v52q1YqdT7DTOGwknhUIhiXCcHdinQsrh5r8A5YT+V/f2vnvTOlI2i9H49ViSJEFKRYRquVSqVEUQSUk8MhH4GtgAqQeYMAwPG0hFsiQfRKCekYmAyR/ZdKzSQBBFAXT/whHCgi7EZZUoCeoUCWNnCEpKJViktBAhBITsDwgWYiGkEraxU+JPBAsLwcrCSvEL8gPe+16Gyca7w/DKd/bu4tQ3kM6eJEmMMQk9YWtkPoTJGI5VqiX985fJ0aAXFZ9F/+0DZSgEjFqaplkmiMwtQTYFoqnQgAjEtttWaghZJ4QJDEYUuNBIgw6UkpBBC25w/Bs3iQndlHC8qUY6nfz7Jh9NoufhcDx+byoEtdBByA4hzsFRgjDU0EGFxgKybUuM5UIChBKchjC0EuxPzEqCVOerchZJ2B/HD0b7oGR60s1Hg+ireChOn9gIgkLU4VhJljnn1NFqHQRJhesJw1tia20c/5cwYCvJOygJDpEggkEdXJ2rmhJEt/e3QUCgHrka9C7zPHo8e/29n7GL5i7CHz3LcIBg9uEQCRCLpSz2sRYDgacEOfQS7cRXQ8kWIPU6/g+PWSVEGVxdJJipUob3SQyN+K5Eg+nieJRPu9Hw53Z2dw2EppYCoZ14yLwTEAKEq/o2NCjlj+x6e20aiuMA3v8ibalpY45Q1rJWLVovRcWUothGkBa8dPpivUUfvCzq2iwPQxGKG8IQV4sPIopOMMUH0dc+WaYMEWT4Igw69rK6F28vfn8nOUbnd01O1rVwPvzO7ySLyK6BQPgIJZkEweMICJUFkHWbsHFt8goSAiToxp15lBMEQ7wPoICADAyivtP1a2OfA08u3TkzWxIOGFCPeCYTx9UuwhDjHwhGd8fK+pAsOfAOnbM4SMI/kKSl9Xe8pSVCkBAKggOTEzWgafvxgdQa5HIdtDNQRq8feXjqWuDxo5u32++5Ip0mwvDQcGbfvgwcgPCSlEbyIy3e7r2lBIU7xqfk2Ebe5zJlquP2iRsOlWOxKkmIgjLQiRw+xK0IqiEBIqmc4k/7v5IERciBAEKnZy/Grl3XA+2Zy2/OfEGXIyBAgKW1z5VQowxt3Var5UtGPr+0e7cdTCxFEwXHwTSbmqJ0FMfJOjJGRev8WWKplIzdGCpI+N4FAiIYwiEaHvXYEkJUT1JenlttcAmuftHoEw6ysmpVkNWB6kU6eVXHE3Ng9tad0swlqgYSdyFz3RWS7OIbF0F6JWPpgHlANewJY8Fua1qvEAGkaBSbmlzsaEbR0YDhEDhSCg5+Xa26LR/xICIC4kpC6n5AJKwWZJ4h9QEkc/zKAkNEJUiFIfQHUuCYHLt44bQe+PTg7uzMfTgEBKX4wL5iBMSV1FoHXhqt0fzoCYK0o+ZUb6FQaGrt4rQ2jp8mxjYgMgIBHOFwWFZkkvFFVo1Uq3iQScZ8iJAgkEghDqGpVli9PJhj9WDUoqsuO/iXw4P0K5XlPquLily4ePTsocCDY68fPbc5g7pDQOIIlhVJttaOH/9plEbzRsuwR2zzhDlh26gIJt9sOhPa9PhCs42KACECERwEiWWrgCBJJOY7iCIgVA4uoanO11cx5UVmBbusGw02FlnDYzRWyx7koCRJDcYsKCRVmjyyV9fx9Dv9+fKr6eEhMNK4i/xYWYlnPrCPfNciCdqkdnybaexfMGs5w+6ZWmtEMyeoRxzNLDrOz44yZWqA0MzXQHhNoIisBwQREDig4NmEht8vICoPhzTQD0Tqs4HrqCxiOfVZOQiICgljA5xDkvTsvI5/MgPfZ97evvR4OI3QbeQjYx6E30Xw6AgOduDt23NqLpcrJKIJxMEGhSiOnFJoHTlKmEa8UvhNQGReEq8myRjVw68IHCBsphsjBYyQxKM2LAvF4I0d9M6IxVi3Ms84pG/RR76BQfzJc1fPnj0f+P702I17l9MiApIRa2uIIDsJggBSoETgUPCigxJeEyoFQkOWaoLE/oEgvM+BgWQHQVzKFkkqM4bGWANRl9k81cdv9n4DX9mAb115sWdMP/ybDTt4bRqO4gCe/yJ24BRMxQlhVlPt1u7QFV3dwQ2VNgfJb4IiVhSdCh6SxoPgwVEP4sWloIcyGEOxXmQ4UOlFpMwiskOgtTBQdnA6RufR73v5ddmKX9Y1aXvIZ+/33i+dsrm4eXX+V3w3BM2ONYbNUc6toVRKQsayWXokguHE6+f/EnLIvXI/O2Kx3ZJj5GAIM5IBBOurWK/ZWl3tqciWtrZnj0pnQbM3NNuJRAGJXM7kb+UnlM25tzeXvselhJaWwZA/2lfDOIyAAchJQChAZAfxgAMQSi9E13WScJgCCRwcELhPtncRMBjCYYfKfY1mZwLPKbmD5FSVICo1O4IXuCDqxelT+XvnlfcXVr4sVuMBI4QYgNCecgKQFN9tdSuCUEmy3NMhogfCCTWBI0YQaOR9fChJBg66rI2cw5e9oTa0HJq62+yNHgjerrNdvVt4dev6OWXl4Z03D5bjUFBCyDdATgMCx7FUihgMCeoByD6HWzpktFo7IfiFpx4IFYM1bGGKbPYkV4Mu7AdXwMYFr1E7F7GjcJXW+PLtbUjR1jaiPB8+ZjJX8hmltFh5+e7TEf5iKCE8tQhiMGTIw8IaHxk5PvK6OgJIItvpJDpVgZnlVPuauGr/qd/XtCxdbzb7mk1dB0mXhQkhMfyEkL29kAhBkDVttVGf1GysL1tr1NEtgKi82vA6plYkh080tlY1OxpVKY8z+XR6QikteTNTFSoIS9ZrNcPALcqh9VodDm6R2dSwZblVIdzy2KA5aFqm16mYwnXbwnOEB4rwW55nDbRwgjdE2yMIS5iRgKM/Rhg8pEMGEnIkk+MRmZyt4Uodmrh0VMOBSvmNs8lJhlDsmkMO4F/k8+lzBeVZ+ebCwhnqEUiC2xSEpi8cCGoyOzRsueVx4f50xxIE8V1L+MIVFd8SZpshVQsVabUrfrslKrpJNZFtAgcg3dVFEt4Zd0mSRNnu+GLRUWXTFwGSEHodv+gTnCjCp5fT6fS1CeXvpflHC26q2yRYY5CclpAjh2lTLLvVGdez7s8cLGf7TeFZZrlVaQtTVBzPbwv86YXfREV03ztDb7imGfY+QfoBwfTlhHePXQkcCEaX3OBgOCAhMjQFZCLdYygCR/RxulC4Nq0szz2Zuu0Ox9mBfwPhILh1NLhDsBvyLoINkTsdGbX8QUo4pSgDA8GT27aCwx0UhCEcdnC2IaBgfHFJJEVGOsJEeeDCgJCEITcK9z4UlKn5559LZioum4S+JQLCMXg/HIKCHYDgK9Po6Ging47vStggQ4fNFg56JWDgwemurbDhwThKYziJ9EBwl77DESEAGDISBcjZ9I1ppXT/SekfF3as0jAUhQE4r+HmIqSCbYcWkWogDRThQoUi1EkQnBQ6OYij4OQguEkd8gDd7OQgZnFwEmcfwMmlL+B/zvmTk+bQkIQu9+M/9+Ymr399QDQDQHZLiU2SPhBgwAHDYWeI6tQSwdiTpNUKLTu7iZQdj4SFZUshtbdEe5g4xCwu8pKhN+phmt2ko2gxXn7NF1119NBaINk8iVGIpNvft0CwxQJk6BBNQx2oEIJKKovkBETCJZgGhsI8CJE8rLNMwqmCUwMkG5J1xwaOsyKbzLLo+/zkavW8Hbdjk2CZEknbvtB14QAEx4ES6GAWVoSgkoCreiyJJYISSqUhhBJREIJxDbbKUBiNnOlRYmkYDHhxN7qYHF1G41Wez8fDWB4iPSn5yogfotlDHMhDHYRoZ8HhkECIlkG8vRJIHKLFeaIS7lQIoUQhjmA6lKAqByW/xXU6GU2j/PHlY/l+GvcA8akhAozfHQaRZQuBUGGdFQziEvmD0wR34iBks9lcnoj0l2UhHgyxGjzuykQaEEo+Z8dZkabY/d4/3b79/NNZR69KQ3EcwP0Tgui9f6Deeoh6ORw4PRSF28NaGyG2GDpcIzX2VkZrG5bi0tyMSrdSkjaCYLNrq5sXrrOHChFsYXBJfEp7qfveKikiOgcO/N5+H37fA7+zxw5GkLUkClhEOHr08KFDPx1/INHXWDsOrB3/Qo7/CtwaEjnWZ/9/ID8k0bOGRH0f+QvyQ/YbtXasIVGx8xzD0hiH4zEtlTBuPHzzulhNFCepYrvX2Uhm73RPtm/dYNrvk7lqu5G9lt1sd0uljeS3b82TyZmR3KTpusxounJJyOn02Kjv0rqheoK3mo49w1dVJyksBdsQBtc1v67Ihl/WNMam87Z8c7Z4ebv1KENJM2pLwj5XqAp3kdviSO4VumidwsNTLoYjPoTpJwQBRZZgSRK5LCLEJ5AFiBcRCRDkMgTCwBksjRP4KYBw5Mbu92qJzu17zVrvzmBSSN3t1zrVfvN6v7rTzxZHqa9Ooy8wl5hnfn+YM64x/SYjNPXhkGnQDkO/U7dnq6GgLOWlpzL+ylMUz9c9gVFU2Ws4l2h5OpC7421Hmw7sll2W7PLteKt8Xrqdr9jSQtriXj2iKplXCFHWFt8CBC6a7EfAU5DkKQsXMzjgWYtEpAshK0IKwy0CAswKXWSFACPPAARAmAYYYmPdUaL3OHUl8eDp27s7qdTl4mhS/HL/wf1k98HTzmizcDJ5NbvBONtmt9RkNrRd43xjrg4+qY5gaGpD9VVFdby6rih04C+HQ22s6suV4inq+PFwrgxKZTqw7W5e0TTJbtGSNC1/bplmXjLz8cWUH3CSmeEqJsIoaOEUBwH4cAESFuCxCkQ8T7pWGoMwwgCSCBFLEsCCiL2I8yTMpDPcj+0EpTGAubF9yerD2rOrO/1JrfrlNFOdtPuFQvv+i0lts/rgvTO61+lcPVkv5a7nBgxT72rvhrtd2si19PF4HjheEAT647lKr4IhHXje4+mqIc+DKFPMUrH1bd3xZUGWfXnMlOP0I9uW8ruDVrlVrsjmLBOnzDOLvHQOmJUFJcYhHl0x5MSLiOVxSLksFCEeunx4goVPorEQadHFo7bJNE4SJAmQFc0ShXxU743tKVzt1ZpCp/blO3vm85o2GMZxEwgvJLHd9h+FQI6VJQNJm0MRQdrytrJ2RXrqoaIis40dM1pYl3RsrLRS2NBuw6IW/HErMnCCh4F4Wj32vq9dcinbYdut5PO8z8/vq/genpMH5eyrN9vd7mZ947z74jDa3dj9ks1fvK0f1vc2P7eW8je14roxl77KtUdGzbqKn8RPo0Y1bfSs3U6nH6lWq5POaGKdlq9TWyWrZKSGWI9nhev2ft9IOxZN1hy7ZdN8Mm8mbWdgO48Xjsznl7JthqXxCk0smCFNCodkeTW2peLP3soRXVtVn86HllcTUphWZH3wRFZkXaeSQtVG5UjR8ZD5LUnVFmYDzIOH5ezi3tLX8+2Tg2zk4PXHb9Gd9bmd7Lu94w/d75+OL87LuVxpv9BdPIz3I7lIqlRqxzOtfCuT67SLo05mVCuWUp10JoNVsaziJG2lrZN4xugX93u9VqvQax7HnagzvGkW+g27mbPHZtJ8/9IZ2rZ2av4YXzYaqrqCx4TVBlY5pp2FztYoHdBETIrRNV2vJKSEltBpRZFlBTsuSzRcWVaUhoYNUUw1pD2aZQIMw4hBkQSDHBFFMRgkImHRY8aKODx6wqOASgROYEWB8JhwRBB4ATKPRODgtp1WPIeEGncwuL0sEo5neZYlmBKWsCIcHQyZQ8VNE5zDgcN+lQLCFIiuIwiI3nWCNMPgIf/IzB8myH/94RnY/xIAzH0gMOXuzD3groC7cBSu7jaI0+QK6FzQeA4NBrzC073ofdFvfwyCa25yRU/y8fHx8fHx8fHx8fnZHhwIAAAAAAjyt15ghAoAAAAAAAAAOAFh9apN7e7BiAAAAABJRU5ErkJggg==", - "description": "Displays a latest noise level telemetry data in a horizontal layout with background.", + "description": "Displays a latest noise level telemetry in a horizontal layout with background.", "descriptor": { "type": "latest", "sizeX": 5, diff --git a/application/src/main/data/json/system/widget_types/horizontal_oval_tank.json b/application/src/main/data/json/system/widget_types/horizontal_oval_tank.json new file mode 100644 index 0000000000..d094cac0d4 --- /dev/null +++ b/application/src/main/data/json/system/widget_types/horizontal_oval_tank.json @@ -0,0 +1,24 @@ +{ + "fqn": "horizontal_oval_tank", + "name": "Horizontal oval tank", + "deprecated": false, + "image": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAACgCAMAAAB+IdObAAABcVBMVEXg4ODf39/g4ODg4OAAAAD///96i//g4ODf4/+trsl2eKZaXZMhISGyvP+8xf/9/f4kJ3A/QoKQkJCRk7fj5O3j4+Px8fF0dHTx8vbi5f/IyMg9PT3IydueoMCsrKzm6f/t8P/k5O1YWFj8/P/19/+Ehq8yNHlNT4sxNHk7OzwuLi7V1dWdnZ6focBvfu27vNKCgoKsrsllZWZZWVkfHyH3+P+JmP/V1uTr6/JKSkrv8f+hrv/W1+STof/29vmkpcC6urqPj48uM4LFzP+Ckv9PWbirq6toapzN1P+bqP9mdd9pa51oap1oa5y3wP75+fzMz+OrrMioqcaNjZB7fIIpLXm9xf+tt/+zu/nz8/d1hfbv7/Tt7fPd3ee9v9W6vMhTX8FKUq9ETaZETKU5QJOEhpDV2//Bwciws8hqbHRQUlg2Nz3Y3v/K0f+Akf+nrNuLk9uFj9tfbNJXYLeanKylpqtpa5xFSYs0OoswM3g4OT0tWm94AAAABXRSTlPvIL+vAC9A4IoAAAamSURBVHja7NYxa8MwEIZhp+1HloOA4E4ggQZvljQYe9LmLv3/P6l2XRANgZIhcE70giULL36QDeo+Tm/d+ei9nz66UycXHLyLrIx3wRMk62d1+P3YunTdGU/RuUGU1SDaahBtvSzEcZ1uxA539DjI17xPJeGqsewzmTrdyBDu6EGQ+h7JMq4K+YgQDgK47NLycyuB4RYAS+YKgYTM65CAFPaVOkggh0/yPno4cmAKsB7oqcQK4SH2lNHP2K4Uo49JI2SYgPIH4iiDK8RGxhjlk2R7PpTNoxDClIH+D8SQABVSvDETsVD42sbemOJVQsI/EO/tmqC30wymeV2MCiES7S9kQdohYTNVyBQFECDHGIA4A8KKIPNa2n92O5GHxGEcdoj4wZYKSXEwfQGEaOPQNA56dsSZLU6GgWBN7wG2djEJSwZ4tC67Xex+lkYA5IC1ZbQZcAb39/gjygo5TK8BSQmH6WWP8WprEG01iLYaRFsNoq0G0VaDaKtBvtmvY9bWYSCA49MN1g2+4zRokAYPkr2E4CkZTDp2eAnhZQtpv8aD9+1rQ0pJSGmPymkM/s8a/NPpBj9aM+TRmiGP1gz5Wc72TRziIzKdq3fBThUSiJ7bDoacDzVRN1GIbSglOsdE6CYKKShhlCB9QUxNXE0UAuR7AA5tjRQBp7ojQJcDmiEzZIbMkLtBXFdEs0NlV5CE53ZGgv8FiBUk3sZQfJoYTET4fuLwtFg8HQ5/uY5L39m+bhlMYz7OR2TCYO8KaTGZwsGXrQKSsQDl5rQ+7ksYWkasE/VxvZWrGVSFSdjeDdIyBgffrDL873V96hXfyxXM7V0gK2QPml7jf2NBUU+x40NCEtBUHtebyijtQjIyxCFXOsfLqRz4jYCmiv+4MSGWjdM51sf3L9NJnGE7HsSygNKx+bhjA6qErR4yvmOQRLVkJEgdf+AYJAtQZepxIFKDLufgolXjQVUdx4Astb/Xm5cSLgvsQFPV+BEgXGgf1h6uwwiKFHIFRFD9sG5dcQeqUHJDbFNpB1JmuA6fXGaIGKVjv7k5Ju2+o2SGsNc5yhJuJlE9kqyQliEPZJUcqEKfFfK8UEI+lWABqgSzQppO7ci0bDa5jBD/xr6d/6QNhnEA/+lFbIvhTVuo2qog9FARIS0kZcQIHoBKdIAas3ls3u4+smV//VqbMFcC6bO+dJL4TSgvDQl88h68aR8wgqU/RJQRLFgkCJG2STicqBwChcoAIP6mCM/bx9jUlCeIkoVBJIoghB704ZvMtHVcYxhG4z1AKOC6kVUAED/jNKbZkCkmz88wK11If0k6DYMUMUFIdMC4XpvWLMgKs4hQcqHrsCCklq1oMBCemUlakDxjteNMzBlsfH8HGn+iEC2ObEjSgfAPfbSUjG2OGmSN4Xsg8cX8Yhw9yaGFX6CezNsZ06dbLW2hNRbXrVdx/dXDyZWl/Ni8EwLbRgyHgNb+lJ1rzYqua9dt/XUqlVxIOfneired1rzvbVuWJgihMuGIK825bu5+zc2d6m3rceucKF5enrbFh+b7iDs/PkUgCUvbBCESFQ65Upjt5u7eOlzqun6/55xY3ft2m3fapZA70eUQJOGtDEGIKBvrbshkNycn9nFv9WbyT25OnOceSKMSAoXsphGpXN0NCXtKD2TjDchRKsqIJIRiq4QgP7+AIDVpmyhEVIx1IpDlDsixbuAsUQhSxYnQX/ngDVJ2fbO3sJF1KGLSl4Nod5ccvvPgOHR3CHDNMimWMERwugQcfx3S5HCC/CVTo+APAe+QgqmwiDREwJmw/w45hy1ZOYyIQ5AocxGfjrPKcQiQA24otxVQWhHqQQ6sMsLscG690ZRR9uOobIAmiEHRaDgQAbNmOShH2WRxgjyke7PcKAXjKBlpywGCQAsSDv7J0YA5qsKWkhhqCccO5swC3HHWOYMMq3AR7wgIDAHXu9SAlOWLSgOwUawKrJwZfplTQsE5VANM+uONzrn334961chhOhFI4ZldGsaZ1bq3yXHeuWh47Yv6gSlIGGcDKwUcp6O7OQ7NXlUnBubz1ws5/dFuNY+OjpoD31u7MhEn0SotBlqcmbAsKp1m+1ZnSiylqI+KM/ft4szVl/v7/d+/q8q0JPyHut9ilqUIhh0vjlIB8+OM9H+snDxDniGjkmfI7/buhAYAGAZAYL+k/h3PBms4ByiAxhAaQ2gMoTGExhAaQ2gMoTGExhAaQ2gMoTGExhAaQ2gMoTGExhCajbgxCN6oG8vmvjPRnuz9XVTOA1xUNhuTb2OxAAAAAElFTkSuQmCC", + "description": "Widget indicates the level of liquid in Horizontal oval tank.", + "descriptor": { + "type": "latest", + "sizeX": 4, + "sizeY": 4, + "resources": [], + "templateHtml": "\n", + "templateCss": "", + "controllerScript": "self.onInit = function() {\n self.ctx.$scope.liquidLevelWidget.onInit();\n};\n\nself.onDataUpdated = function() {\n self.ctx.$scope.liquidLevelWidget.update();\n}\n\nself.typeParameters = function() {\n return {\n maxDatasources: 1,\n maxDataKeys: 1,\n singleEntity: true,\n previewWidth: '250px',\n previewHeight: '250px',\n embedTitlePanel: true\n };\n};\n\nself.onDestroy = function() {\n}\n\nself.actionSources = function() { \n return { \n 'cardClick': {\n name: 'widget-action.card-click',\n multiple: false \n } \n };\n}", + "settingsSchema": "{}", + "dataKeySettingsSchema": "{}\n", + "settingsDirective": "tb-liquid-level-card-widget-settings", + "hasBasicMode": true, + "basicModeDirective": "tb-liquid-level-card-basic-config", + "defaultConfig": "{\"datasources\":[{\"type\":\"function\",\"name\":\"function\",\"dataKeys\":[{\"name\":\"f(x)\",\"type\":\"function\",\"label\":\"Random\",\"color\":\"#2196f3\",\"settings\":{},\"_hash\":0.15479322438769105,\"funcBody\":\"return Math.floor(Math.random() * 101);\",\"aggregationType\":null,\"units\":null,\"decimals\":null,\"usePostProcessing\":null,\"postFuncBody\":null}],\"alarmFilterConfig\":{\"statusList\":[\"ACTIVE\"]}}],\"timewindow\":{\"realtime\":{\"timewindowMs\":60000}},\"showTitle\":true,\"backgroundColor\":\"#fff\",\"color\":\"rgba(0, 0, 0, 0.87)\",\"padding\":\"0px\",\"settings\":{\"tankSelectionType\":\"static\",\"selectedShape\":\"Horizontal Oval\",\"shapeAttributeName\":\"tankShape\",\"tankColor\":{\"type\":\"range\",\"color\":\"#242770\",\"rangeList\":[{\"from\":null,\"to\":20,\"color\":\"#E73535DE\"},{\"from\":20,\"to\":null,\"color\":\"#242770\"}],\"colorFunction\":\"var percent = value;\\nif (typeof percent !== undefined) {\\n if (percent < 20) {\\n return '#E73535DE';\\n }\\n}\\nreturn '#242770';\"},\"datasourceUnits\":\"%\",\"layout\":\"percentage\",\"volumeSource\":\"static\",\"volumeConstant\":500,\"volumeAttributeName\":\"volume\",\"volumeUnits\":\"L\",\"volumeFont\":{\"family\":\"Roboto\",\"size\":14,\"sizeUnit\":\"px\",\"style\":\"normal\",\"weight\":\"500\",\"lineHeight\":\"100%\"},\"volumeColor\":\"rgba(0, 0, 0, 0.18)\",\"units\":\"%\",\"widgetUnitsSource\":\"static\",\"widgetUnitsAttributeName\":\"units\",\"liquidColor\":{\"type\":\"range\",\"color\":\"#7A8BFF\",\"rangeList\":[{\"from\":null,\"to\":20,\"color\":\"#E27C7CDE\"},{\"from\":20,\"to\":null,\"color\":\"#7A8BFF\"}],\"colorFunction\":\"var percent = value;\\nif (typeof percent !== undefined) {\\n if (percent < 20) {\\n return '#E27C7CDE';\\n }\\n}\\nreturn '#7A8BFF';\"},\"valueFont\":{\"family\":\"Roboto\",\"size\":24,\"sizeUnit\":\"px\",\"style\":\"normal\",\"weight\":\"500\",\"lineHeight\":\"100%\"},\"valueColor\":{\"type\":\"range\",\"color\":\"#000000DE\",\"rangeList\":[{\"from\":null,\"to\":20,\"color\":\"#FF0000DE\"},{\"from\":20,\"to\":null,\"color\":\"rgba(0,0,0,0.87)\"}],\"colorFunction\":\"var percent = value;\\nif (typeof percent !== undefined) {\\n if (percent < 20) {\\n return '#FF0000DE';\\n }\\n}\\nreturn '#000000DE';\"},\"showBackgroundOverlay\":true,\"backgroundOverlayColor\":{\"type\":\"range\",\"color\":\"rgba(255, 255, 255, 0.76)\",\"rangeList\":[{\"from\":null,\"to\":20,\"color\":\"#FFEFEFDE\"},{\"from\":20,\"to\":null,\"color\":\"#FFFFFFC2\"}],\"colorFunction\":\"var percent = value;\\nif (typeof percent !== undefined) {\\n if (percent < 20) {\\n return '#FFEFEFDE';\\n }\\n}\\nreturn '#FFFFFFC2';\"},\"showTooltip\":true,\"showTooltipLevel\":true,\"tooltipUnits\":\"%\",\"tooltipLevelDecimals\":0,\"tooltipLevelFont\":{\"family\":\"Roboto\",\"size\":13,\"sizeUnit\":\"px\",\"style\":\"normal\",\"weight\":\"500\",\"lineHeight\":\"100%\"},\"tooltipLevelColor\":{\"type\":\"constant\",\"color\":\"rgba(0, 0, 0, 0.76)\",\"rangeList\":[],\"colorFunction\":\"var percent = value;\\nif (typeof percent !== undefined) {\\n if (percent < 20) {\\n return '#E27C7CDE';\\n }\\n}\\nreturn '#7A8BFF';\"},\"showTooltipDate\":true,\"tooltipDateFormat\":{\"format\":null,\"lastUpdateAgo\":true,\"custom\":false},\"tooltipDateFont\":{\"family\":\"Roboto\",\"size\":13,\"sizeUnit\":\"px\",\"style\":\"normal\",\"weight\":\"500\",\"lineHeight\":\"100%\"},\"tooltipDateColor\":\"rgba(0, 0, 0, 0.76)\",\"tooltipBackgroundColor\":\"rgba(255, 255, 255, 0.76)\",\"tooltipBackgroundBlur\":3,\"background\":{\"type\":\"color\",\"color\":\"#fff\",\"overlay\":{\"enabled\":false,\"color\":\"rgba(255,255,255,0.72)\",\"blur\":3}}},\"title\":\"Liquid level\",\"useDashboardTimewindow\":true,\"displayTimewindow\":true,\"configMode\":\"basic\",\"titleFont\":{\"family\":\"Roboto\",\"size\":16,\"sizeUnit\":\"px\",\"style\":\"normal\",\"weight\":\"500\",\"lineHeight\":\"1.5\"},\"titleColor\":\"rgba(0, 0, 0, 0.87)\",\"showTitleIcon\":false,\"titleIcon\":\"water_drop\",\"iconColor\":\"#5469FF\",\"decimals\":0,\"enableDataExport\":false,\"enableFullscreen\":false,\"borderRadius\":\"0px\",\"actions\":{},\"iconSize\":\"24px\",\"titleTooltip\":\"\",\"dropShadow\":true,\"margin\":\"0px\",\"widgetStyle\":{},\"widgetCss\":\"\",\"titleStyle\":{\"fontSize\":\"16px\",\"fontWeight\":400},\"pageSize\":1024,\"noDataDisplayMessage\":\"\"}" + }, + "externalId": null, + "tags": null +} \ No newline at end of file diff --git a/application/src/main/data/json/system/widget_types/horizontal_pm10_card.json b/application/src/main/data/json/system/widget_types/horizontal_pm10_card.json new file mode 100644 index 0000000000..e6dff37da1 --- /dev/null +++ b/application/src/main/data/json/system/widget_types/horizontal_pm10_card.json @@ -0,0 +1,30 @@ +{ + "fqn": "horizontal_pm10_card", + "name": "Horizontal PM10 card", + "deprecated": false, + "image": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAACgCAMAAAB+IdObAAAAllBMVEUAAADf39/f39/g4ODg4ODf39/////k5OT/pgDg4OD/9N//vED/sSD/+u//3p//0oDOzs7z8/P/6L//x2D5+fnIyMj/6b//qxD/46/b29u2trbCwsL/2JBYWFjV1dW8vLzn5+erq6uQkJD/tzD/78//zW//zXD/x187Ozuenp7t7e1mZmb/wlBKSkp0dHT9/f2tra2CgoIEnlQuAAAABnRSTlMAIEDfv1C6kOEmAAADg0lEQVR42u3aiXLaMBSFYdqkh4ssb9jGNjY2OyFLl/d/uUqihTYt0IHSIfR8kzCynMnojwyBgQ4RERERERERERERERERERERERERERHRv/TuzetY7++6b13v7oPp6KZ48+Lu+859jBuQ3nd6uAWfejcSAoZcG4ZcG4ZcG4Zcm/8rZDKddjFpgWYNZI2d6OLK7AvpB4XCd6N19tCMHoCPL/gymqJ9al5wnn4dFv52hCNU4OMV3y7weEgiIrrYhmR4Go6esq6NmUwxXePlvC1JxNBzMwrdSOGglcYrhWidz4+GLMXK1feQl9EIo+nHyeRbyASjs0IC0YN5KBpQdrQUDwflyS8hIZSER0NyccLdjtibp4d4E7Je4yE+a0PcbueisJQl4Ofiw1EK5lC5o36hYEe2u28n3QxU0Ie18LQ6FqJkI/k5ZP0Rm5D45ekLzmeX74lNmskclhLtrrbEDGd2AZutejazA5nZmdBeitrm1Svp/+mO1Ngnxpl8pZaygAnpw92+DlnJLKi1eG42sSGyKBYmoi60hKjNRkpyKMQPkwC1WFrhUuy6xMP+ECWigML9TGD3a+CGWgJ7/Gy+dS7FoZCZ2wm3gXNcjgoXWsL9IW7d3269mR3uugM7VHXg40DIXAwNqMEcF+bnovaGBLsQJcEvIcf/ISoxZriwwv413R09keC3d/ZCttsQijohBCsR+7trrzhy144fX0/E+FMztwPa3Nby7Na//TP6dgmJ265vS9YeTglBEA4AXyTH1tDFmK/HEk6aIu1FdqKH1ByPJ2OkZbk5kR5/UKslT0LPLt/XkoRawm2IDhfucX9pR7l4piA4JWR3/eqfQpomKrMsMqMKVVm16bCKmiaL2seoTYFoHLdtiThyJ6KsxWGBFtPi27Xb0WJ3YeeSezYESzNeiWf2xz85ZPc0bRcSDeMsGkebkHFTmrGZG5dRlbmQXlmakGw4zmKTW8U4QikfG/52ZK8x/8d5+0Crk7/3NP5zVFbRsMmq2O5I1JbVMB5mkZl7bMdZBBuS2h0Zt5/tiaaqcBK1uw7qZ4W+luCiL6zKMfZrshLG2SFirXDRkDQ9dDLGyfyw3kWFyWLAl7pvF0OuDUOuDUOujQn5hFvQ69zfwNvsQHxvPjBwA2+0p+YDA50Pd73uW3f3/pY+VENERERERERERERERERERERERERERET0j3wFxKH86witj0MAAAAASUVORK5CYII=", + "description": "Displays a latest fine and coarse particulate matter (PM10) telemetry in a horizontal layout.", + "descriptor": { + "type": "latest", + "sizeX": 5, + "sizeY": 1, + "resources": [], + "templateHtml": "\n", + "templateCss": "", + "controllerScript": "self.onInit = function() {\n self.ctx.$scope.valueCardWidget.onInit();\n};\n\nself.onDataUpdated = function() {\n self.ctx.$scope.valueCardWidget.onDataUpdated();\n};\n\nself.typeParameters = function() {\n return {\n maxDatasources: 1,\n maxDataKeys: 1,\n singleEntity: true,\n horizontal: true,\n previewWidth: '420px',\n previewHeight: '90px',\n embedTitlePanel: true,\n defaultDataKeysFunction: function() {\n return [{ name: 'pm10', label: 'PM10', type: 'timeseries' }];\n }\n };\n};\n\nself.onDestroy = function() {\n};\n", + "settingsSchema": "", + "dataKeySettingsSchema": "", + "settingsDirective": "tb-value-card-widget-settings", + "hasBasicMode": true, + "basicModeDirective": "tb-value-card-basic-config", + "defaultConfig": "{\"datasources\":[{\"type\":\"function\",\"name\":\"function\",\"dataKeys\":[{\"name\":\"f(x)\",\"type\":\"function\",\"label\":\"PM10\",\"color\":\"#2196f3\",\"settings\":{},\"_hash\":0.2392660816082064,\"funcBody\":\"var value = prevValue + Math.random() * 100 - 50;\\nvar multiplier = Math.pow(10, 2 || 0);\\nvar value = Math.round(value * multiplier) / multiplier;\\nif (value < 0) {\\n\\tvalue = 0;\\n} else if (value > 500) {\\n\\tvalue = 500;\\n}\\nreturn value;\",\"aggregationType\":null,\"units\":null,\"decimals\":null,\"usePostProcessing\":null,\"postFuncBody\":null}],\"alarmFilterConfig\":{\"statusList\":[\"ACTIVE\"]}}],\"timewindow\":{\"realtime\":{\"timewindowMs\":60000}},\"showTitle\":false,\"backgroundColor\":\"rgba(0, 0, 0, 0)\",\"color\":\"rgba(0, 0, 0, 0.87)\",\"padding\":\"0px\",\"settings\":{\"labelPosition\":\"top\",\"layout\":\"horizontal\",\"showLabel\":true,\"labelFont\":{\"family\":\"Roboto\",\"size\":16,\"sizeUnit\":\"px\",\"style\":\"normal\",\"weight\":\"500\"},\"labelColor\":{\"type\":\"constant\",\"color\":\"rgba(0, 0, 0, 0.87)\",\"colorFunction\":\"var temperature = value;\\nif (typeof temperature !== undefined) {\\n var percent = (temperature + 60)/120 * 100;\\n return tinycolor.mix('blue', 'red', percent).toHexString();\\n}\\nreturn 'blue';\"},\"showIcon\":true,\"iconSize\":40,\"iconSizeUnit\":\"px\",\"icon\":\"bubble_chart\",\"iconColor\":{\"type\":\"range\",\"color\":\"rgba(0, 0, 0, 0.87)\",\"rangeList\":[{\"from\":0,\"to\":20,\"color\":\"#80C32C\"},{\"from\":20,\"to\":50,\"color\":\"#FFA600\"},{\"from\":50,\"to\":150,\"color\":\"#F36900\"},{\"from\":150,\"to\":null,\"color\":\"#D81838\"}],\"colorFunction\":\"var temperature = value;\\nif (typeof temperature !== undefined) {\\n var percent = (temperature + 60)/120 * 100;\\n return tinycolor.mix('blue', 'red', percent).toHexString();\\n}\\nreturn 'blue';\"},\"valueFont\":{\"size\":36,\"sizeUnit\":\"px\",\"family\":\"Roboto\",\"weight\":\"500\",\"style\":\"normal\"},\"valueColor\":{\"type\":\"range\",\"color\":\"rgba(0, 0, 0, 0.87)\",\"colorFunction\":\"var temperature = value;\\nif (typeof temperature !== undefined) {\\n var percent = (temperature + 60)/120 * 100;\\n return tinycolor.mix('blue', 'red', percent).toHexString();\\n}\\nreturn 'blue';\",\"rangeList\":[{\"from\":0,\"to\":20,\"color\":\"#80C32C\"},{\"from\":20,\"to\":50,\"color\":\"#FFA600\"},{\"from\":50,\"to\":150,\"color\":\"#F36900\"},{\"from\":150,\"to\":null,\"color\":\"#D81838\"}]},\"showDate\":true,\"dateFormat\":{\"format\":null,\"lastUpdateAgo\":true,\"custom\":false},\"dateFont\":{\"family\":\"Roboto\",\"size\":12,\"sizeUnit\":\"px\",\"style\":\"normal\",\"weight\":\"500\"},\"dateColor\":{\"type\":\"constant\",\"color\":\"rgba(0, 0, 0, 0.38)\",\"colorFunction\":\"var temperature = value;\\nif (typeof temperature !== undefined) {\\n var percent = (temperature + 60)/120 * 100;\\n return tinycolor.mix('blue', 'red', percent).toHexString();\\n}\\nreturn 'blue';\"},\"background\":{\"type\":\"color\",\"color\":\"#fff\",\"overlay\":{\"enabled\":false,\"color\":\"rgba(255,255,255,0.72)\",\"blur\":3}},\"autoScale\":true},\"title\":\"Horizontal temperature card\",\"dropShadow\":true,\"enableFullscreen\":false,\"titleStyle\":{\"fontSize\":\"16px\",\"fontWeight\":400},\"units\":\"µg/m³\",\"decimals\":0,\"useDashboardTimewindow\":true,\"showLegend\":false,\"widgetStyle\":{},\"actions\":{},\"configMode\":\"basic\",\"displayTimewindow\":true,\"margin\":\"0px\",\"borderRadius\":\"0px\",\"widgetCss\":\"\",\"pageSize\":1024,\"noDataDisplayMessage\":\"\",\"showTitleIcon\":false,\"titleTooltip\":\"\",\"titleFont\":{\"size\":12,\"sizeUnit\":\"px\",\"family\":null,\"weight\":null,\"style\":null,\"lineHeight\":\"1.6\"},\"titleIcon\":\"\",\"iconColor\":\"rgba(0, 0, 0, 0.87)\",\"iconSize\":\"14px\",\"timewindowStyle\":{\"showIcon\":true,\"iconSize\":\"14px\",\"icon\":\"query_builder\",\"iconPosition\":\"left\",\"font\":{\"size\":12,\"sizeUnit\":\"px\",\"family\":null,\"weight\":null,\"style\":null,\"lineHeight\":\"1\"},\"color\":null}}" + }, + "externalId": null, + "tags": [ + "environment", + "particulate", + "matter", + "air", + "pm10" + ] +} \ No newline at end of file diff --git a/application/src/main/data/json/system/widget_types/horizontal_pm10_card_with_background.json b/application/src/main/data/json/system/widget_types/horizontal_pm10_card_with_background.json new file mode 100644 index 0000000000..c3014fbd1c --- /dev/null +++ b/application/src/main/data/json/system/widget_types/horizontal_pm10_card_with_background.json @@ -0,0 +1,30 @@ +{ + "fqn": "horizontal_pm10_card_with_background", + "name": "Horizontal PM10 card with background", + "deprecated": false, + "image": "data:image/png;base64,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", + "description": "Displays a latest fine and coarse particulate matter (PM10) telemetry in a horizontal layout with background.", + "descriptor": { + "type": "latest", + "sizeX": 5, + "sizeY": 1, + "resources": [], + "templateHtml": "\n", + "templateCss": "", + "controllerScript": "self.onInit = function() {\n self.ctx.$scope.valueCardWidget.onInit();\n};\n\nself.onDataUpdated = function() {\n self.ctx.$scope.valueCardWidget.onDataUpdated();\n};\n\nself.typeParameters = function() {\n return {\n maxDatasources: 1,\n maxDataKeys: 1,\n singleEntity: true,\n horizontal: true,\n previewWidth: '420px',\n previewHeight: '90px',\n embedTitlePanel: true,\n defaultDataKeysFunction: function() {\n return [{ name: 'pm10', label: 'PM10', type: 'timeseries' }];\n }\n };\n};\n\nself.onDestroy = function() {\n};\n", + "settingsSchema": "", + "dataKeySettingsSchema": "", + "settingsDirective": "tb-value-card-widget-settings", + "hasBasicMode": true, + "basicModeDirective": "tb-value-card-basic-config", + "defaultConfig": "{\"datasources\":[{\"type\":\"function\",\"name\":\"function\",\"dataKeys\":[{\"name\":\"f(x)\",\"type\":\"function\",\"label\":\"PM10\",\"color\":\"#2196f3\",\"settings\":{},\"_hash\":0.2392660816082064,\"funcBody\":\"var value = prevValue + Math.random() * 100 - 50;\\nvar multiplier = Math.pow(10, 2 || 0);\\nvar value = Math.round(value * multiplier) / multiplier;\\nif (value < 0) {\\n\\tvalue = 0;\\n} else if (value > 500) {\\n\\tvalue = 500;\\n}\\nreturn value;\",\"aggregationType\":null,\"units\":null,\"decimals\":null,\"usePostProcessing\":null,\"postFuncBody\":null}],\"alarmFilterConfig\":{\"statusList\":[\"ACTIVE\"]}}],\"timewindow\":{\"realtime\":{\"timewindowMs\":60000}},\"showTitle\":false,\"backgroundColor\":\"rgba(0, 0, 0, 0)\",\"color\":\"rgba(0, 0, 0, 0.87)\",\"padding\":\"0px\",\"settings\":{\"labelPosition\":\"top\",\"layout\":\"horizontal\",\"showLabel\":true,\"labelFont\":{\"family\":\"Roboto\",\"size\":16,\"sizeUnit\":\"px\",\"style\":\"normal\",\"weight\":\"500\"},\"labelColor\":{\"type\":\"constant\",\"color\":\"rgba(0, 0, 0, 0.87)\",\"colorFunction\":\"var temperature = value;\\nif (typeof temperature !== undefined) {\\n var percent = (temperature + 60)/120 * 100;\\n return tinycolor.mix('blue', 'red', percent).toHexString();\\n}\\nreturn 'blue';\"},\"showIcon\":true,\"iconSize\":40,\"iconSizeUnit\":\"px\",\"icon\":\"bubble_chart\",\"iconColor\":{\"type\":\"range\",\"color\":\"rgba(0, 0, 0, 0.87)\",\"rangeList\":[{\"from\":0,\"to\":20,\"color\":\"#7CC322\"},{\"from\":20,\"to\":50,\"color\":\"#F89E0D\"},{\"from\":50,\"to\":150,\"color\":\"#F77410\"},{\"from\":150,\"to\":null,\"color\":\"#DE2343\"}],\"colorFunction\":\"var temperature = value;\\nif (typeof temperature !== undefined) {\\n var percent = (temperature + 60)/120 * 100;\\n return tinycolor.mix('blue', 'red', percent).toHexString();\\n}\\nreturn 'blue';\"},\"valueFont\":{\"size\":36,\"sizeUnit\":\"px\",\"family\":\"Roboto\",\"weight\":\"500\",\"style\":\"normal\"},\"valueColor\":{\"type\":\"range\",\"color\":\"rgba(0, 0, 0, 0.87)\",\"colorFunction\":\"var temperature = value;\\nif (typeof temperature !== undefined) {\\n var percent = (temperature + 60)/120 * 100;\\n return tinycolor.mix('blue', 'red', percent).toHexString();\\n}\\nreturn 'blue';\",\"rangeList\":[{\"from\":0,\"to\":20,\"color\":\"#7CC322\"},{\"from\":20,\"to\":50,\"color\":\"#F89E0D\"},{\"from\":50,\"to\":150,\"color\":\"#F77410\"},{\"from\":150,\"to\":null,\"color\":\"#DE2343\"}]},\"showDate\":true,\"dateFormat\":{\"format\":null,\"lastUpdateAgo\":true,\"custom\":false},\"dateFont\":{\"family\":\"Roboto\",\"size\":12,\"sizeUnit\":\"px\",\"style\":\"normal\",\"weight\":\"500\"},\"dateColor\":{\"type\":\"constant\",\"color\":\"rgba(0, 0, 0, 0.38)\",\"colorFunction\":\"var temperature = value;\\nif (typeof temperature !== undefined) {\\n var percent = (temperature + 60)/120 * 100;\\n return tinycolor.mix('blue', 'red', percent).toHexString();\\n}\\nreturn 'blue';\"},\"background\":{\"type\":\"image\",\"imageBase64\":\"data:image/png;base64,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\",\"imageUrl\":null,\"color\":\"#fff\",\"overlay\":{\"enabled\":true,\"color\":\"rgba(255,255,255,0.72)\",\"blur\":3}},\"autoScale\":true},\"title\":\"Horizontal temperature card\",\"dropShadow\":true,\"enableFullscreen\":false,\"titleStyle\":{\"fontSize\":\"16px\",\"fontWeight\":400},\"units\":\"µg/m³\",\"decimals\":0,\"useDashboardTimewindow\":true,\"showLegend\":false,\"widgetStyle\":{},\"actions\":{},\"configMode\":\"basic\",\"displayTimewindow\":true,\"margin\":\"0px\",\"borderRadius\":\"0px\",\"widgetCss\":\"\",\"pageSize\":1024,\"noDataDisplayMessage\":\"\",\"showTitleIcon\":false,\"titleTooltip\":\"\",\"titleFont\":{\"size\":12,\"sizeUnit\":\"px\",\"family\":null,\"weight\":null,\"style\":null,\"lineHeight\":\"1.6\"},\"titleIcon\":\"\",\"iconColor\":\"rgba(0, 0, 0, 0.87)\",\"iconSize\":\"14px\",\"timewindowStyle\":{\"showIcon\":true,\"iconSize\":\"14px\",\"icon\":\"query_builder\",\"iconPosition\":\"left\",\"font\":{\"size\":12,\"sizeUnit\":\"px\",\"family\":null,\"weight\":null,\"style\":null,\"lineHeight\":\"1\"},\"color\":null}}" + }, + "externalId": null, + "tags": [ + "environment", + "particulate", + "matter", + "air", + "pm10" + ] +} \ No newline at end of file diff --git a/application/src/main/data/json/system/widget_types/horizontal_pm2_5_card.json b/application/src/main/data/json/system/widget_types/horizontal_pm2_5_card.json index b138a18c34..3329be470e 100644 --- a/application/src/main/data/json/system/widget_types/horizontal_pm2_5_card.json +++ b/application/src/main/data/json/system/widget_types/horizontal_pm2_5_card.json @@ -3,7 +3,7 @@ "name": "Horizontal PM2.5 card", "deprecated": false, "image": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAACgCAMAAAB+IdObAAAAkFBMVEUAAADf39/f39/g4ODg4ODf39/////k5OSAwyzg4ODv9+XQ6bCQy0bz8/POzs7f8Mqv2XuQykb3+/LIyMj5+fm3t7fA4ZWg0mDb29vH5aOIxznCwsK8vLxYWFjn9Njn5+fV1dXY7L2tra243YiYzlM9PT2QkJCn1m5LS0t0dHTt7e2enp5mZmaCgoKdnZ0vLy8j+senAAAABnRSTlMAIEDfv1C6kOEmAAADWUlEQVR42u3aa1PaQBiGYar2yctmc2gSciaEk4Da9v//u+6uiFMcEVt0kHmuDzG8Ycbcs4TDwICIiIiIiIiIiIiIiIiIiIiIiIiIiIjoM3378lzG1bX31Q2vv5sOL8OXF3hXg5sAFyC7GQxxEYYMOTMMOTcMOTcMOTcMOTdHhcxubz3MWqC/h3c7243OyWshkT9VeDK+T5f9+DewWWOdbu7taJQGOImkyn2Fw5SfYE/i++qIkFhE9HQXkuJhNH5IvfESHjZ2SZY/ZziJXAzd4aC5qP20utYSvRkyF6tWTyHr8Rjj281stgTSNYyR99DiBJRI1OWicZBeYU+Uq0Tmb4bU4uS7FXGbh2WwRL8OAAT3uL3HCfiycv9Pbbvs30QlMLppZ28bkfiAStwEiR/Bygut3gpR8ij+O+TXBkss1+Of7QY/H9beaUIKF5LAEXGzGEgKewLyA0Zc23Na2ElemY0r8GOpjl2RCq871aWupVJzibEfEov2ff0YomMbIvE0F6mr6ULmJiNBvToUkuSxD5vtwj9eJ8YieREiooCpC/ElsiE1gIVUdrpAJFqLfyhk4VYif/up5GQrssq15PshkU3YblcaJsTtFuJvp6o6/PTbiWHvF3X4DJV7VGmJXoQsnkKUxC9DnEMhyq00Ps3KPT5i8fdC1POK+NK9M8SJReydq2L6xoUd3O0PArxfLHO3ItOnkG67SrVE22uk0HhviOPnEZCI1NgZPcYEuCvhZBmyYWgHQ2QAJrMJsrJ8PGAGxydFInFeiN5dIzqf1zYkFz03ez9MQfX+kJ2kFv1XSN+HZZqGZq9BUzZtNmrCvk/D9i5sMyCcBG1bIgjdgTBtcaypFpFCPYeYWzYEc5F6ZU65EvUfIbu3abuQcBSk4SR8DJn0pdk3s0kZNqkLGZalCUlHkzQwuU2Ao7kX8l0IVPI8j6SALk74Nj4sm3DUp01gVyRsy2YUjNLQzO7aSRrChmR2RSbtzB7omwbvtQvZihYdOi3Vh36wKid4XZ+WMP43xBerwIeGZNmhgwH+XZ7jiariecSPul8XQ84NQ84NQ87NBYXcXMDX7EBwM7jyLuCL9sy7Ggy+Xw+9r+766pJ+VENERERERERERERERERERERERERERET0Sf4AN2T4354zjDoAAAAASUVORK5CYII=", - "description": "Displays a latest fine particulate matter (PM2.5) telemetry data in a horizontal layout.", + "description": "Displays a latest fine particulate matter (PM2.5) telemetry in a horizontal layout.", "descriptor": { "type": "latest", "sizeX": 5, diff --git a/application/src/main/data/json/system/widget_types/horizontal_pm2_5_card_with_background.json b/application/src/main/data/json/system/widget_types/horizontal_pm2_5_card_with_background.json index 7eafc28272..4ef8d4b24f 100644 --- a/application/src/main/data/json/system/widget_types/horizontal_pm2_5_card_with_background.json +++ b/application/src/main/data/json/system/widget_types/horizontal_pm2_5_card_with_background.json @@ -3,7 +3,7 @@ "name": "Horizontal PM2.5 card with background", "deprecated": false, "image": "data:image/png;base64,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", - "description": "Displays a latest fine particulate matter (PM2.5) telemetry data in a horizontal layout with background.", + "description": "Displays a latest fine particulate matter (PM2.5) telemetry in a horizontal layout with background.", "descriptor": { "type": "latest", "sizeX": 5, diff --git a/application/src/main/data/json/system/widget_types/horizontal_pressure_card.json b/application/src/main/data/json/system/widget_types/horizontal_pressure_card.json index fbc79c2255..5e78644a15 100644 --- a/application/src/main/data/json/system/widget_types/horizontal_pressure_card.json +++ b/application/src/main/data/json/system/widget_types/horizontal_pressure_card.json @@ -3,7 +3,7 @@ "name": "Horizontal pressure card", "deprecated": false, "image": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAACgCAMAAAB+IdObAAAAolBMVEUAAADf39/f39/g4ODg4ODf39/////k5OTYGDjg4ODri5v64ub1xc3nboLdNVHwqLT98fPOzs5YWFjz8/O3t7faJkXx8fH5+fnb29vCwsK8vLziUmnV1dXHx8fkYHbn5+f409rIyMjzt8HpfY9mZmarq6t0dHTiUmrfQ13umqiQkJCCgoJKSko6Ojrt7e3tmajsi5z39/faJkTgRF3pfY4hISGGGYADAAAABnRSTlMAIEDfv1C6kOEmAAADqUlEQVR42u3ai1LaQBiGYar2z89uzgdIYgKEcBJBrW3v/9a6WUCgUiTMlAnM90hCTHCyr7Aggy0AAAAAAAAAAAAAAAAAAAAAAAAAAACAS/p29XTG3b1x7dr331WH8YOuXmDctR4CugE/HlptuglthDQMQpoGIU2DkKY5HOJKujaHQyy+upJDIc6bxaagrfF8blDDHQqxOVJfQ/rgj/NlZnQ6VOUYHb2otVoZ1eUs5vrqVXycaOCYq31CmLQmWGx+wFGGgzoh0mZmQVt+TqPQX+TPI7/zPFlk88kyn+SGb/xeGP7o+YyKMmKqvLFiS50xZbY2Z2fb/TvEYs2Wp4RsSwTt8Be+T35mLMejsT9JO3O16BCf5qPxkmpyZ6yQItk2ByVPq46ILaca5CNbcjBj8Tmk5zivM5VYY7LLJ9rl59XKMJZ52MlzP83y0XgS6pDnSZ5TTdIWziqk5FJ1RazGZrNDml2NdMj2R4g7HEodopMidlaPQnk8RIodw/0Q0g+t0cKYj/xwvBxVIcZiNKH65CrkUc/EGQ/UyC2S27GZPN2E9Gzmd3MToq/klJW3oyEm77DoL529Zbvv/BBzvS65F20mgCvNn+xsQlg4PZ5+hDzyE/W4NJ2I5bEQ19whqZ7zQ9TClrB5uh68Gu0m5JcaFHMVYpnm0OJIkhAuqRrnjHvkAiFCz5aBfvq1ondzd7KvQrSouoX7Wlo2O3XniHKBkGrL2gzO5NnnkJ7jOLrviaPZowqp+6yl/KcQPXA92fUDRa2HrjMkhflziKAVl1luo794HXmjHQEdELz8vSOoHfLKvWrbrram+rzS5Xc1ygHb/w6R/K6jnVNe2fdKQh2jLi8xad0uddtetaNNXfV9f9ynbhyvDqgdwYkhrq2nuFhv/WSrGqAtyojF4RCtuu2UvwxxV39rOXshWebFReGprYSSOEm7YeJlWeGlL16qRu71gzSNKfD0Aa9ITwvRv7Oo1Fs9Zi5ddXpVwdETHQkZ2MxTi8ujIYoQFps9dz/EC4PC63urkH4Wq221rx97SaFD2nGsQoqwXwQqNwnoRK50P21JSV+Q8qz3I2MvTrwwK5IgVCFeGidhEBae2veS9gsVp0K61T3ST8fVgSxJ6AyXf4cY9+nfsiKmy9MhtXW7xw4GdIpGhDQRQpoGIU2DkKZBSNO0Ww838DE7UfDQujNu4IP2H8Zdq/X9vm1cu/u7W/qnGgAAAAAAAAAAAAAAAAAAAAAAAAAAAIAL+QMW1wDljmkjjQAAAABJRU5ErkJggg==", - "description": "Displays a latest pressure telemetry data in a horizontal layout.", + "description": "Displays a latest pressure telemetry in a horizontal layout.", "descriptor": { "type": "latest", "sizeX": 5, diff --git a/application/src/main/data/json/system/widget_types/horizontal_pressure_card_with_background.json b/application/src/main/data/json/system/widget_types/horizontal_pressure_card_with_background.json index d0beafbf6d..3b832d5f8b 100644 --- a/application/src/main/data/json/system/widget_types/horizontal_pressure_card_with_background.json +++ b/application/src/main/data/json/system/widget_types/horizontal_pressure_card_with_background.json @@ -3,7 +3,7 @@ "name": "Horizontal pressure card with background", "deprecated": false, "image": "data:image/png;base64,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", - "description": "Displays a latest pressure telemetry data in a horizontal layout with background.", + "description": "Displays a latest pressure telemetry in a horizontal layout with background.", "descriptor": { "type": "latest", "sizeX": 5, diff --git a/application/src/main/data/json/system/widget_types/horizontal_radon_level_card.json b/application/src/main/data/json/system/widget_types/horizontal_radon_level_card.json index 0897a44fca..7909bef1b9 100644 --- a/application/src/main/data/json/system/widget_types/horizontal_radon_level_card.json +++ b/application/src/main/data/json/system/widget_types/horizontal_radon_level_card.json @@ -3,7 +3,7 @@ "name": "Horizontal radon level card", "deprecated": false, "image": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAACgCAMAAAB+IdObAAAApVBMVEUAAADf39/f39/g4ODg4OD////k5OSAwyzg4ODv9+Xf8Mqv2XuQy0bP6bDOzs5YWFj3+/Lx8fH09PT5+fnA4ZWg0mDHx8eYzlOIxznb29u2trbQ6a/CwsJ0dHTV1dU8PDy43Yjn5+fIyMjn9NjX7L28vLytra1mZmbH5aPY7L1KSkqenp6CgoKo1m6Qykbt7e3U1NSQkJDH5aKdnZ2n1m4vLy+qqqrWFLAGAAAABXRSTlMAIETfv0i0+14AAAPtSURBVHja7dqLVtpAEAZgSzsZkmyuBEi4BAhXsdba2/s/WmeWUiJW5dDSA5z/O4rJBOP87G6EAzcAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/9O7i3ejGu+dS9d835AcTosuXuo0bj6kdAVaH26adBWaCHJmEOTcIMi5QZBzgyDn5g9B3JiUt6ssHh8d2kiWtJN8pLq7ko5wsiArzmwcNu62FN11Rgk5ibRejogklOyRbES6kySU2P1hhw7lrbLg9+n7/ZisuC9uPXpm9rzm9W9fDzJm7pIIeJck6tAo+Thcl4v1cETRMEqGUfSoQWRn7Uip/LiU4sFBMhZmun3k2CPLZcvc0lNx7tOeMXe5+1qQjIWe1+gZY7Ki9fdH6txFi6h0Rp0lfb0bduxoRJ3RQqujZLRYLg4OErDxphkbUq6pB5Eh8TmP9+/v0Z4skFbdF4PoWcU9kccq247I1yGty4+LZccZlbUgEqHTSxbRneTrOAcHafNMbvNNI9J3LQiJLgc6DDLHYpdU25BsSuVWEnq3UxJT32SvjEjAIveI3C6L7m5qOdFyveiMZGoNl2tnG4R0SiXfHfm5PHxqzfquDRLbv5iZvSA2Z5AzmzZ7tjzWvPdamWlfmRYzY+KXg9yzCCgYu3HOon7XRL+3G/Vq/efhAu7aKWCoHsR13TEbuzme+WyPBOzagVtpivYsY9n3A1rx9OUgXdv9jPmb/KaY0qm4xp7cl1uzv9g9Xau+bcfT26694xed8LkdsUC+u7l58x+iJ8HptGJjJ8hU+zVPFvvK18vlvfStLXtaDWyQQDc/bTdnctF+M4hOLTqpuCs5hMTp93Mee/U14vNYH/VtkDG7z4NYbwaJ9euktFfb+S/tehCdVv5uREybjg1ijE7OnZT+IH3YL6R0qLGsQRV7yvBq+vTyO6aVzaZteBwcGyRjUb+29bRN/XooyGq1qNUMtdCkluxPfkyoVRSbA1J4I9KK+d4Xtp+na8T35SqbuxTn7GdtliM+x0cGcdkaPwlSlmFRVaFsDWhQDOat3iAsyyqcP4Rz6TycpPN5QWloD4TV/I2JteE/C6Lyb7ompkYmnB4xPh0ZxPDGtB7kc9hLq3ASboJMPheyLbVJEQ4qG6RZFBKk6k2qVOIOUvprrqtrZMazo5/G+13mvF1/Gh8Wg7BXVoNURyScF4Ne2qtCqT3MJ1VIGqSlIzKZL/RAORjQv6BBTvrCqpjQyz5XupAuI0ir9drBlP6ZIHPxUvdSIci5QZBzgyDn5oqCfLiCt9mJ0g83DecK3mhvOQ39CEfTuXTvG9f0oRoAAAAAAAAAAAAAAAAAAAAAAAAAAACA/+QnXMPkgka4f5kAAAAASUVORK5CYII=", - "description": "Displays a latest radon level telemetry data in a horizontal layout.", + "description": "Displays a latest radon level telemetry in a horizontal layout.", "descriptor": { "type": "latest", "sizeX": 5, diff --git a/application/src/main/data/json/system/widget_types/horizontal_radon_level_card_with_background.json b/application/src/main/data/json/system/widget_types/horizontal_radon_level_card_with_background.json index 7f37e96933..dee206f746 100644 --- a/application/src/main/data/json/system/widget_types/horizontal_radon_level_card_with_background.json +++ b/application/src/main/data/json/system/widget_types/horizontal_radon_level_card_with_background.json @@ -3,7 +3,7 @@ "name": "Horizontal radon level card with background", "deprecated": false, "image": "data:image/png;base64,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", - "description": "Displays a latest radon level telemetry data in a horizontal layout with background.", + "description": "Displays a latest radon level telemetry in a horizontal layout with background.", "descriptor": { "type": "latest", "sizeX": 5, diff --git a/application/src/main/data/json/system/widget_types/horizontal_rainfall_card.json b/application/src/main/data/json/system/widget_types/horizontal_rainfall_card.json index 4eefae88c8..a623986273 100644 --- a/application/src/main/data/json/system/widget_types/horizontal_rainfall_card.json +++ b/application/src/main/data/json/system/widget_types/horizontal_rainfall_card.json @@ -3,7 +3,7 @@ "name": "Horizontal rainfall card", "deprecated": false, "image": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAACgCAMAAAB+IdObAAAAqFBMVEUAAADf39/f39/g4ODg4ODf39/////k5OQjTMfg4OB1j9yRpePk6fjOzs7I0vGtvOry9Pvk6Pj09PT5+flYWFjIyMg+Ys7b29vV1dUwV8vCwsK2trbw8PC6x+6fseetra3n5+eDmuBohNi8vLyQkJCsvOo9PT1aeNVMbtE/Ys7W3fXW3vRohNkxV8q6urp0dHRmZmaenp6CgoJKSkovLy+su+pLS0shISHWoRcHAAAABnRSTlMAIEDfv1C6kOEmAAADUUlEQVR42u3aDW+aQBzHcWe7P3/BA+QZBETQ4aytfdr2/t/ZDgStjS7baBtqfp+m5Q5Mel8P0xg7AAAAAAAAAAAAAAAAAAAAAAAAAAAAAPhIXz69OmN4pXx2o6uvskOx6dOzlOHg2qILYF8PRnQRRgjpGYT0DUL6BiF9g5C+ORWilyF7Gh3MFguFKnfB7vBUT7f0qFBfnAjROFTVkj2TWs6D+y0mJaYgiGOFYueO5IG+kdMxRJffptFY789qWvIGITrPq4RlWB5CXPoWP26fgsVs4dw77vO94mydriH6PGR5GHNDo9p4xZJndgxZ5uGKailP9iFPzwtyH5zZQn7t1n+3+NUtxKzXWw30Wtj+ug2rk/WK591CNA7LdltDbbLfkYct/QweDyF3W6VjyPi7ZsiQls55E8i3RJSw10wnppkkciE3yU0z1eupof8pROeNSa0Vc27uby3Fuf95CAmc++e4U4g0fhGSs96s3EjqhZRUU1negHyrl8zVJhm88eQoVeWPlXk+ZM6TF1WGyjkdxESnZ91D5NCjl1RetoNQMzZy1UYayla5iVoiKzxj6XF6PkRlOpLf0juSIUcLP0j3XSpr9QMn1fAHGfVTy3xTPenz8yFpVTkOE/JS2uQy5CjsHUJOb8g6DCevQpqhwaocfa+6NFbPh5hyv2SNrssD568f+34h6tGzOw55Td1CaJwn1f2k8Y0uN1srTXo/h5Cx17w229mSuoS0wpxK7+h1b9EJVvz6hPW/Ict2TZNdh0ZvESK3wpSPKVe0N93FWBT7VLNtskeiOjEiW86zWUa27+8uyBPWv4W0G5KyWk1u1YreeUcSM5F7m6yPQoJA+K4r5CiiyI8KexqJIHBFEYvCJhKZVRQ+WaK+INziX0KWXFITMifixo+OIYc/J8chYmq5IhO7kCzw5Viey3wRuXXIyPdliDvNXEvmRhb9D/ON34+kczoyE34kpoEbWdWOiMKPptbUFfJcXGSuoCrErnYkK2bVhSCKqIOPe2PlZ3Re4Pr0N/oQYtt/umjR3+hFSB8hpG8Q0jcI6RuE9M1ocH0BH7MTWdeDoXIBH7TbynAw+Ho1Uj67q+El/VMNAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAf5Damp/4Ir985nAAAAAElFTkSuQmCC", - "description": "Displays a latest rainfall telemetry data in a horizontal layout.", + "description": "Displays a latest rainfall telemetry in a horizontal layout.", "descriptor": { "type": "latest", "sizeX": 5, diff --git a/application/src/main/data/json/system/widget_types/horizontal_rainfall_card_with_background.json b/application/src/main/data/json/system/widget_types/horizontal_rainfall_card_with_background.json index 62bad4bbb0..cb3f7a1818 100644 --- a/application/src/main/data/json/system/widget_types/horizontal_rainfall_card_with_background.json +++ b/application/src/main/data/json/system/widget_types/horizontal_rainfall_card_with_background.json @@ -3,7 +3,7 @@ "name": "Horizontal rainfall card with background", "deprecated": false, "image": "data:image/png;base64,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", - "description": "Displays a latest rainfall telemetry data in a horizontal layout with background.", + "description": "Displays a latest rainfall telemetry in a horizontal layout with background.", "descriptor": { "type": "latest", "sizeX": 5, diff --git a/application/src/main/data/json/system/widget_types/horizontal_snow_depth_card.json b/application/src/main/data/json/system/widget_types/horizontal_snow_depth_card.json index 690a99c3f0..4c3ce67d7c 100644 --- a/application/src/main/data/json/system/widget_types/horizontal_snow_depth_card.json +++ b/application/src/main/data/json/system/widget_types/horizontal_snow_depth_card.json @@ -3,7 +3,7 @@ "name": "Horizontal snow depth card", "deprecated": false, "image": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAACgCAMAAAB+IdObAAAAxlBMVEUAAADf39/f39/g4ODg4ODf39/////k5OQwWtfg4OCXrOsjTMfl6/qxwfDx8fFKb9zOzs5+mObz8/O7u7tYWFjy9f3k6fjj4+PIyMisrKw+Ys48PDz5+fnL1vXb29vV1dVaedXCwsKQkJA9ZNkwV8u2trZkg+Hn5+eKoul2j9zY4Pe+zPPW3fWCgoKkt+51j9x0dHSRpuMvLy9wjuRXed9mZmbt7e1KSkr39/dMbdGenp7I0vG6x+2fsebJyclLS0udnZ0hISFSqBZZAAAABnRSTlMAIEDfv1C6kOEmAAADuklEQVR42u3aeXOaQBjHcdukT1ZuOQKogIBXtRrrEdv0fv9vqvuANU7GsZVOMsT5fSZRZP1jv1k2OqMNAAAAAAAAAAAAAAAAAAAAAAAAAAAAgJf05tVrsLdXN6+df/VOdtx8olfPvnnbuLbpAny6bjTpIjQRUjMIqRuE1A1C6gYhdXMkxCO6U4luac94yHw6YvZ41qcgpAqeMeS2/ZFDPvS/0R/uQ/CDDMMgeVP8kE987Pp/HhmdJOTYSqa6RlI0V6Ye7UWKMq0ewt6rH+/UD/327WNI5vu0XHQSZ+s+OLPANbZE/naz9DO3E2TbzcJZzkJ341IVuhA6ESlCMjUqaevioVc55PaWS/pq0fGVSkbYyahDi9BNqGO4M9eZEclf1++Es0UW0pI6fshPqUAzi5BI5NFkLIZUWomWNlmLceWQz+2iRC3vvlBhQXKiHLKRIeRuwk5AFHLI0gn8/wwZC5NDFNEi8oQgiQ9yvuaESTvedKrxneZ5ER9N9Oh0SHlJ9dSi4yOVsh/ugjgkcN2Mspnxi5dp6y79n52Nk7mubFpUDJmI8ZBD5mJ8GKJPeZvsF2ieCyHGRa4pj/SVvFmfDClL7tSDDmY8PWBGeZOF5X01pqkVIV6e69qYJ/uoxQNlbT6fmkLhjaRwhanLtOmJkLter622e32191nt93q9D/R3TkDVKUInDuHJSkM6MN9fWSt+hiYfKmJVrJvGl6RyImQoQ2RBm0PUIuR5abwzOIT3fEsxDyc3yXONSrmY8JO1cieREMWfQKlwaT0XOXNdX4vWlFrFHsmFt2/k2e/wErBTIac3+zPTxI5JQxHRbnEYr5D+2Hs85Ox/vzYdYd8/PWHT2SK2FuMJrYp5mZyjlR3K4a5XuHr9JOTsF8RBGWPTfUyFbpe6TYtPNKlLRKNwRN04LgfkifOShuULotwjQ2HyHm9xUd5i0W67lBvoSci5b1E4JEms+Pt3Sx6llMap0x2kVpIElnNvOV0ia2Q7Tky2VQxYgXN2COkm/9fSdq8oYkenQiQH8zmdFeIdvGk8DBnYgTWyypBREstjeW4UW2lQhDTjWIYEziiwZW5q0/k0zSPmHR+s+jbeo73QilNrkASpzStiOXE6sAeBJc/dy4lbxCFdXpGRE/JAkqb00jjkbPHoxGASxPQv6hDS7Z4atOlf1CKkjhBSNwipG4TUDULqptm4voCP2Ynsa/mFgQv4oP2T/MJA492Vf/PaXb29pC/VAAAAAAAAAAAAAAAAAAAAAAAAAAAAALyQ32C4FBab7K0VAAAAAElFTkSuQmCC", - "description": "Displays a latest snow depth telemetry data in a horizontal layout.", + "description": "Displays a latest snow depth telemetry in a horizontal layout.", "descriptor": { "type": "latest", "sizeX": 5, diff --git a/application/src/main/data/json/system/widget_types/horizontal_snow_depth_card_with_background.json b/application/src/main/data/json/system/widget_types/horizontal_snow_depth_card_with_background.json index 76fcd31a5e..ec4780c0d8 100644 --- a/application/src/main/data/json/system/widget_types/horizontal_snow_depth_card_with_background.json +++ b/application/src/main/data/json/system/widget_types/horizontal_snow_depth_card_with_background.json @@ -3,7 +3,7 @@ "name": "Horizontal snow depth card with background", "deprecated": false, "image": "data:image/png;base64,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", - "description": "Displays a latest snow depth telemetry data in a horizontal layout with background.", + "description": "Displays a latest snow depth telemetry in a horizontal layout with background.", "descriptor": { "type": "latest", "sizeX": 5, diff --git a/application/src/main/data/json/system/widget_types/horizontal_soil_moisture_card.json b/application/src/main/data/json/system/widget_types/horizontal_soil_moisture_card.json index 1fb4e01f9e..1d15257d1d 100644 --- a/application/src/main/data/json/system/widget_types/horizontal_soil_moisture_card.json +++ b/application/src/main/data/json/system/widget_types/horizontal_soil_moisture_card.json @@ -3,7 +3,7 @@ "name": "Horizontal soil moisture card", "deprecated": false, "image": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAACgCAMAAAB+IdObAAAAolBMVEUAAADf39/f39/g4ODg4ODf39/////k5OQjTMfg4ODy8vLk6fg+Ys7IyMjOzs5YWFjj4+Py9Pv5+fmRpeN1j9zV1dWsrKyQkJDb29u7u7uDmuDCwsK2trZaedUwV8t0dHTn5+eesefW3fVKSkrI0vFMbtE8PDyRpuNmZmasvOqCgoK6x+6rq6uenp7t7e2tvOoxV8rW3fRohNkhISGwsLAvLy8aKS4pAAAABnRSTlMAIEDfv1C6kOEmAAADj0lEQVR42u3aCW/aMBjGcbZ2b42P3CEXCYSrQKHXtu//1faaQQPTFCYNlbR6fhVSaquS/3UcoZYeAAAAAAAAAAAAAAAAAAAAAAAAAAAAwHv68uH1rK83dx+dd/ONO+4C+vDk3dferaRPILjt9elT6COkYxDSNQjpGoR0DUK65u8h9dynI3KbeGRlxgyIvEQSJTFZI0lMXv/92l9D7oXQihru1kyJuCWOBwmR+Z7xa0CSRzZ2XC63JPnLk/ZFl6OeZmTN6vCBDvw6VGdCmo7TEjfxPHJHrpcMdiFLl0buwJsu17Sg0dqNF27MQ8ZdbNZL17tYRilEaVdeHi9IaT0XL+0hTQc7urvkZpHwSgfrfcjIlW4yWGc09RY03cZyNPB2IUZ+H4y2l+rQonya8EUu5rNJZJus8NknHfHs7EzIROzldDAiWpgpbZN9iJtNN6NdiFyQMdOYQ6a0tCE/jfHoMiIR0s6rXbMvxD5EE5UR5frcjmhx8JacTN0RrZdT7xAif3p2E9zE3lp8M214a5YLDqHEXcZ0EUpoUqr59hBSC6V0roQ6E7ISIqorUb0KcdQs969T8nhONmMXsRLlnNfwQsxX6m1/fDuqdERnQrQtj6oJze2WXFHIJz18Fc/2qD6d3OmTCdVanQl54R+5f5hP6L752euIhP2ll6K2Sw9zzRdvVLWahKFqC5kJVtkOFtGVNGc9FPlh7c9+MxepquSHcEuI2ne81tWVd6QW+T7k6YmYFrPm+Kj8mUfylhDi9T/wfnC1vWg5wPLxzwFJlzQT2ieaixVVNkFVb88pX4cU7R7CbSGhEDq350Q3T63h4bn0mNJOEFDQd+xAnwIiGm/GFKTp7wkekJe5t3RY2kXUvKJQNzf6gx17VnxQ2kJ8LQ5WRyFx7KTGOHxVUJEWWTAsnDg2TvboZAGRM5ZZlpJ0dhOOyej/+TmvobTbwBWiCv2TyZLn/LYQUoeSmo5DnKE0ztj5HTKOU77msXHqFGYX0k9TDjHDsZGcW0i6AF8dlqrs1Smlzr3X8ldzIapoQm9+OGnhDGNTSLsjTpYWQzk0Do89ZmPjkA0J7I6Msx92Ii4KehftIeel45bJ2KT0DzoREgRtk5L+RSdCugghXYOQrkFI1yCka/q920/wb3YiecsfGLj+H27/W8AfGOh9u/HuPrqbr5/pQzUAAAAAAAAAAAAAAAAAAAAAAAAAAAAA7+QX7yoAidBTT3IAAAAASUVORK5CYII=", - "description": "Displays a latest soil moisture telemetry data in a horizontal layout.", + "description": "Displays a latest soil moisture telemetry in a horizontal layout.", "descriptor": { "type": "latest", "sizeX": 5, diff --git a/application/src/main/data/json/system/widget_types/horizontal_soil_moisture_card_with_background.json b/application/src/main/data/json/system/widget_types/horizontal_soil_moisture_card_with_background.json index 3a40804efe..ff5f887e17 100644 --- a/application/src/main/data/json/system/widget_types/horizontal_soil_moisture_card_with_background.json +++ b/application/src/main/data/json/system/widget_types/horizontal_soil_moisture_card_with_background.json @@ -3,7 +3,7 @@ "name": "Horizontal soil moisture card with background", "deprecated": false, "image": "data:image/png;base64,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", - "description": "Displays a latest soil moisture telemetry data in a horizontal layout with background.", + "description": "Displays a latest soil moisture telemetry in a horizontal layout with background.", "descriptor": { "type": "latest", "sizeX": 5, diff --git a/application/src/main/data/json/system/widget_types/horizontal_solar_radiation_card.json b/application/src/main/data/json/system/widget_types/horizontal_solar_radiation_card.json index 1b357d2d38..901e74e3a8 100644 --- a/application/src/main/data/json/system/widget_types/horizontal_solar_radiation_card.json +++ b/application/src/main/data/json/system/widget_types/horizontal_solar_radiation_card.json @@ -3,7 +3,7 @@ "name": "Horizontal solar radiation card", "deprecated": false, "image": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAACgCAMAAAB+IdObAAAAk1BMVEUAAADf39/f39/g4ODg4ODf39/////k5OSAwyzg4OCQy0bf8Mrz8/Pv9+XQ6bCQkJD3+/LOzs6srKxYWFjIyMig0mGIxzm43Yj5+fmYzlPb29vV1dXCwsK2tra/4ZVKSkrY7L08PDzn5+fn9NjH5aO8vLyw2Xuenp6CgoJ0dHS6urqo1m5mZmbt7e2rq6svLy8hISGYzLGRAAAABnRSTlMAIEDfv1C6kOEmAAAEBElEQVR42u3aiW7aQBSFYZqk18N4X/AKGLNDSNL3f7reO9i1ukAbpCInOp/SaDLjkvnrcamUjgAAAAAAAAAAAAAAAAAAAAAAAAAAAADu6cuHNxIPj9ZHN378yh1WTh+eYz2Mnhz6BPKn0Zg+hTFCBgYhQ4OQoUHI0CBkaP4Q4gYk7H7G2fkWiehIHcv3IxJm+lidJ+mY0P1cD1mruclR2qVWvEtq2SXx3h2Hw3iY1Mnel5E0RVUlC07jyMDiKf7qCptaQTuy1/NFN+V5xBZeYD6vzGbki0532cK9GpIpVRDzVF8S+5ZF8SHmHR/j0876VnNITMnJqg8Hag5xxAv1aff69ur7Vn3a09uhSS5WZKn6MdIk5orpdrOpks1rJWWFMqVb/duxSVOt3Ssh5iVt80L9SzuvjV/FFO39yNrtYysmDnmLG8uJ/IYX/IgX/ENMDfn+/ki19U1u3h8FhWLEVql8CxOktL16VhkZW7XmRSVfBkrJFoJ0S7/ICv5d3uUQVyv2LK8t5mQciBo+XDvf55ZjG8LbtqKD1Vi1CdnvojYkoti5HOLquXcOsSc80uete7LptDvbW3MgCr6kOx02Bfzo2nKaXM/u/syv3BFPsdTmywvFCjL8Oj7Q/lTz0do1cd2FHOOkObxRfKojXqjjmhputWI+WhdDhGtC2ltBPw6Qbje2km/7rAoVcFNGbKLl0olsaT3vTspcra88I8+KeeRlbpAqFtCZI7/a0a/6hf6T+NeQLkFLjkhVQGmxVgvezsJcn5kjki0yjvAWWk5Kltp0JaQwu1/I6doqtqKb3R4yUfZKZbL9wix4/FnuSPdXgMe7W6tU6+xyiDD1E+rdOyRT6zWPUx20J6+gPsTmEB6uPGb/LUSOFvXuGyKz22cV8JFYqGdzufd7SOd6SCAfvf8eMlGL9tEw+EakE9mvVmtzg9xbQ7Ru34jYxafXefl1wrk1ZC5P84rH/ZM65572GdUTui2kf5/tzGSb8vFSkpHnlI9DmRhTTkTL1yXlZXle4AnnfSFBqrZz3b+/Zd17cmqu8W4McZWR/RRSVWGZJCGPpjQtp5t8Ng2rKgk3L+GGdx4unc2mJCc0C2GyeVcIrbRS6Zo6HhewzGx4mwY3hmh1tvopJJw5SbgMzyHLquQxzy3LcJqYkHFZckgyWyYO504deh/XvfRU6u3N/4zf8hlNJ5zeicJyGs6qZOrIHQk35XTmzJKQ5142yyQkCcnljiw3kSxU0yndm4S8W7mky6qkpH8xhJA8v7bo0L8YRMgQIWRoEDI0CBkahAzNePT0CX7MTuQ8jR6sT/CD9tx6GI2+Po6tj+7x4TP9pxoAAAAAAAAAAAAAAAAAAAAAAAAAAACAO/kOdioE5akwBJsAAAAASUVORK5CYII=", - "description": "Displays a latest solar radiation telemetry data in a horizontal layout.", + "description": "Displays a latest solar radiation telemetry in a horizontal layout.", "descriptor": { "type": "latest", "sizeX": 5, diff --git a/application/src/main/data/json/system/widget_types/horizontal_solar_radiation_card_with_background.json b/application/src/main/data/json/system/widget_types/horizontal_solar_radiation_card_with_background.json index 7122187d2c..f8a83b9e63 100644 --- a/application/src/main/data/json/system/widget_types/horizontal_solar_radiation_card_with_background.json +++ b/application/src/main/data/json/system/widget_types/horizontal_solar_radiation_card_with_background.json @@ -3,7 +3,7 @@ "name": "Horizontal solar radiation card with background", "deprecated": false, "image": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAACgCAMAAAB+IdObAAAC8VBMVEUAAADPfgjntTTCagSpWgHx0kb///rgoCDckg7/+H+hVgGhVgKtYAGaTwCfVgD////z38Pt2sJ8wyL14sPw3ML04MPy3sPv2sL46sv25MT57M7679Dy3cL358f57s/46cnr2ML568z78dH25cawYAH///r78tT89NT++dj358X358n//ufx3MTNegLQfgH///bUhQT//eP++tvKdgH999X//N7rvTutXAH//+/89dWyYgGjVwKzYwHBbAKmWQGtXwK9agH///PEgTH//eDSgQO1ZQH//uv78dOvXQGoWwGrWgHXjQe4ZwLnszPHcwKqXQHtwkGLxzbhnyX89tflri/ioyjFcALwy0zgnCDblA7ZkQu6aALV2JvuxkXpuTjclxP14sX02E7otjaMyTjmsDChVAGeUgH13VLy1EzWiQXKaQ3G1YbkqCvGZQZVUEaDxSzNcBP67F6ay0qx0WnuwzvBcAT248jwyUbkqyzgox7EuaGrpI734lWTyUDVigWaTwHy48XKv6bxz03emBjReRf89trb0bW+133451i3ZAHq2rrVgRvfnRXiqCTflyPYiR6yZASkm4jhq07xzkk8OTT36srtxmzXmkzbn0tJRTzr5rnPxqza46WxqZTP2ZKOiXf99XWKgG93cmTqvGDepEzquDK5ei+/YQLl3cDl3K/i2a/++568spqQkI7++ouq0F/ckCHw9uLy7s7f173ay6/d6qq+t565tZ3I2Ynxz3W30nP88mjv5b3j1LjVzrT//rHk4q7Z3aDmtlihzVXRlEqlVwK4XgHy8vD//87ksFFcWlEoJyTjtxThrhHx6sXs4sW/v7lqZVz36y7OkAuXTQGVTAHLy8X//8Curqv354bz3CTYoRDFfA7j4+P78Y/13oDz133y0lWTSwH//dnx89ng8cTLyrS3rZaCgoKZjnvarHToxRzhxKLR45jG34/rzCf5+OnV1dOXi3j25m+c0FDDjlDAh0TEfCWVSwH3+/Hj49mNwMzJAAAAD3RSTlMAICAgICAgICAgQL/f31DNJ4eVAAAOsklEQVR42uzBgQAAAACAoP2pF6kCAAAAAAAAAJg9eldNGAzDOF5P9VCpN2GnEhsRQhFjlcZB4iGIRpOiQRGM4OIgWhAHXSyY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", - "description": "Displays a latest solar radiation telemetry data in a horizontal layout with background.", + "description": "Displays a latest solar radiation telemetry in a horizontal layout with background.", "descriptor": { "type": "latest", "sizeX": 5, diff --git a/application/src/main/data/json/system/widget_types/horizontal_temperature_card.json b/application/src/main/data/json/system/widget_types/horizontal_temperature_card.json index 8884bcf132..534a6d25bc 100644 --- a/application/src/main/data/json/system/widget_types/horizontal_temperature_card.json +++ b/application/src/main/data/json/system/widget_types/horizontal_temperature_card.json @@ -3,7 +3,7 @@ "name": "Horizontal temperature card", "deprecated": false, "image": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAACgCAMAAAB+IdObAAAAsVBMVEUAAADf39/u7u7x8fHr6+vl5eXf39/f39/r6+vq6ur////z8/MjTMc+Ys7IyMjj4+Pk6fitvOqRpePPz8/x8fGtra2QkJDCwsLy9Pv5+fnI0vHV1dW2trZYWFg9PT3n5+cwV8vt7e1aeNXW3fV1j9zb29tog9laedW8vLxmZma6x+5MbtGCgoIvLy88PDyfsOeDmt+enp50dHRKSkrU1NSRpuNMbtIhISHd3d0xV8qdnZ2QKY5sAAAACnRSTlMAIN/vz6AQML+/B+y1FwAAA4lJREFUeNrt2glzmkAYxnHTptfLsssNCgoqGPCsR8/v/8H6LjTVaqsZ66TGeX4ZDbDMZP+yDpPRFgAAAAAAAAAAAAAAAAAAAAAAAAAAAMBzenv3wr1tae8+GC+dd3/Xat29phvw+q71hm7Cm9Y93YRXrVd0ExBybRBybRBybRBybW47ZGiKPKL/IurY9pAalm13dofs8a8te2zRrr+EmOZIOLTVZT4d4cV0GXYm2Mgi9lEwk6salpmJSZ3BA81Jp0Is4TjZgLaU31UexYqUkiqWPG/eJk8SxbHnSUX+WilFkmJ+5vGzdYQYOLkQD7z9SYiPjim+RdTIzcgS+ppM+KSPI26MnhASmQPaIbtE3elaBvNpb9VdynUwl/F82qVeFfe+z+V0LgOfvvCunK6qJZ3roU5whLCITL0oooyfG6MRUWYT2ULYepJ65HTIMNsPUbOgmgYB9cgPeDdYrqpg5vV4bNrz+UATomgWrCo6lxCL+u+Ljr44Q72+OK1hi9FDVgfmxHjEfELI4jCkp5S3DVktp0uleM+bedVvIXp5ncuyomaBWTQWgthiO117MOK0SPD60obOU64IHS6tYF3Jx5BZtVZqXa10yLya+d7cl71qpkO+97pL+je5GNQrqLkO5sHbqENbJ0LMBzGgfd5Ol7dzwGse3va8f8PvcusyIUPBPtPfqYAuzBSsQ0yvKYcuEzIR2oKe0cBkHWLDjDuOhAyfHmKL2reIHvXpj/oG7Wi3+ZHSP7JM7tgJcfaXRvT4Eo/z/ETISDTG9ChpZs3T3Gx4tvqH2/puyr/aZTP92NcnuFQPGf12nXlOR/5zq3nlR2L0x3uNHvl8IiQXjc5uSOom7cRVUhKFRmj4sfwqwzRWYT8xEtclfdjw9YarSqOUxUaW7XM6JtsFntc59uHd/1NzxewTIQvRiHZDvrqJUci0KJqQhEI3LVJ3UxJXuXEd0ncNHbJJiiItSnLTM+7sIjO1vH7Tmw+ZMGmfowdMwcknQqKJ0BzahoSyKH0jCeM0JCpC3/C5IyzT0k0oMUpX1SHtRHIIH2uXYRGHCZ0T0hjwjm3qDYv2NQOZQ6dCKMozMbHpmOOTbBdS0QVYw+hvA9x3GHKGPh1l9Ol53fp/iC8RQq4NQq4NQq4NQq7N/e18PH0zXxho3d17xkv3/t0tfakGAAAAAAAAAAAAAAAAAAAAAAAAAAAA4Jn8AJ01hSMevW95AAAAAElFTkSuQmCC", - "description": "Displays a latest temperature telemetry data in a horizontal layout.", + "description": "Displays a latest temperature telemetry in a horizontal layout.", "descriptor": { "type": "latest", "sizeX": 5, diff --git a/application/src/main/data/json/system/widget_types/horizontal_temperature_card_with_background.json b/application/src/main/data/json/system/widget_types/horizontal_temperature_card_with_background.json index 0bb6084afa..c7a644339b 100644 --- a/application/src/main/data/json/system/widget_types/horizontal_temperature_card_with_background.json +++ b/application/src/main/data/json/system/widget_types/horizontal_temperature_card_with_background.json @@ -3,7 +3,7 @@ "name": "Horizontal temperature card with background", "deprecated": false, "image": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAACgCAMAAAB+IdObAAAC91BMVEUAAADx8Ozp5uaalZKJhnyzrpXDs5dwenqsoYlaaGnLt6D39/CwqZfv7euamp/08u7n4eW9sJH29PDo5OTDt5vl4uL8/Pv7+/r5+Pn39vf49/j29fb6+fn09PX19Pbz8+8jTMf39ffx8fT6+vry8u7z8vXz8vPx8fPt7fHw7+vv7/L19fH9/fzv7/H09PDw7/P39/Py8e3v7vL08/Do5OXv7uro4uPs6ejr5+Xr7O3u7Ont6+js7e/29vLq5uXh4eDj5ujKvKHl6Onv7OjFwc/h5ebw7u3n6evFuJvn4+XIup7f4+S9vb3t7O3p6+xyc3Lt6ebHw9HCtZfv7erX0NjPydI9Yc2ysbKjnJzk5uapqamdmZysrb62rI88PDzy7+7SzNTT09KYlpm8sJGmteXJycnFxcSxscCrqK7IuqOjnqHKvZ7u7u7m4eXCv866tcCip7jDtpzf4+aMoN/V1dU9Ycy4t7jNv6G5rpCOjo5YWFfp6Orm5+fMx9LKxdLAvsumqrvMvaXEt6CfmZm6sJe+spVSc3n49/Ts6u3Z09pXddPIxM/Dv8q6uMa2tcGpqbadm6K/tJlZdn3Z3e8wVsqioKmrpZqWl5B+gH/g3eByi9nTztjEw8SyqKWtpKDFvJ+wq5yon5uTlJva3/C6sZ+0rZV3hIV/hYRqf4Nwen6Mhna+yOnc2dt+ldu4srmeo7OlpbGdnqiooZ+TjICXi3Tq6/Tc4PHP1u7By+vn4uXPz8++u8ezsLytrLm2ra+oo6akn5WimZWLi4tLbXZlZWXr5+ezvuequuearOJKa9C9vMuVmaKMj5ScmpOYkYiLi4aBf3bG0O50jtrIwsu+uL6vq7LBtaOuoZSyqY6SkI6hlo2klolreXxKSkrj5fHBu8OFjZulpJiGkYx+iYuVj4efkoaKiH+bjnovLy/n6fO1wug+Yc22rYqAe2whISFkgNZhe4WklHhkdHhZd9QwV8psg4u6sqVmbWuCmd5ng9fVzb/QxrZ2fHJ/vX40AAAAFnRSTlMAICAgICAgICAgICBEQM/f39+/v79QWvZnwAAAD0RJREFUeNrswYEAAAAAgKD9qRepAgAAAAAAAACY/bFHjRgGonDidlkSAqmnEQY1A0b+w4KkMBjcCXyAPYFP4FwkkIv4AL5X3hPOsptNlUAqfdK8N9otzJdIJBKJRCKRSCQS/8nh/hK8rp+HjMk6cDIEfvkrGSfDZSO5sn5F1Dg+iEqei7gc6bCQ3DBVCouqlat9n6z3Qzl1Q2F2xPxEYQqABWkt7hVVxFZdV+F8pefxvuv7EDxpGtytAahlWd5eSBuzjIzlWI/jWM7z4zM8FAhwDsNEwcLgIIHIq/dIPTWVtfOHEYeHEfLdRCTKWSoQKEHnRoUybAKPqYcKmXoSenq0oSEB1bbNtm0tLHjLs0dkXde5no93T07VGVEYEN2ViJG9NTh8qRjGqT1p742J4mqUf55tLta9qBHbFhwLbowo8kk7GaU0DARh2DsITZCCDwFBUkJC0ihKfBECeRNygJ4g5+gZPEoO0Hv5/dMhDbbYrdV/d2a23ULn45+FpH9hr99xBQ6BvH7sjOMZIAoVwVHtoKlqlsGgoRrq7vYmzTJ2hgvlHoBkDlFU7ZvsMRNqUeqrdUV789+5dYR7xD4kXGG5JgIvrBeG7B2SXoZwAMUmS7M1gRjGk4HYZFGMRBzDMHb1CIhkfZYqal/ZmTiIaP2YcUujLrfNgQ/e+UCavAAiAkFYnfnhLwYQODRWHDAFFDg+JDimDQ4kxJtxuIAZh64DBBKZkub5lkUmHasgTqrRJqZz0xCS1VQ1TVOSq+QfVTKW6Z5gHgAvN0VRyr9NsdEmKbdtS7Bn6vu2J/W7Do11VwNiWq4WM/HhLxVZRBERriRaRsulhee54nif4ocKW3gkDrJdoECQ1eXA3pudwiWSs4pbgQzmCJMV0Nr1phCXUCQ/csSWYgJLRoE0gOSL/5VmymuIkiQ53TzLTzM918gdyQMG6WrTxBKE8b35M3pyEE1WHtzt6tcMUsgL9/4DdMdGAhk+BdLw1ldo1ut0tov5pd9fPlkBfhxTqNdz+uK87HnThqIwzK+4FrV8dQylS6LuGagXlA1ZSMSDI1myhDyxWUKypaRjBGsY+MjGmDJC+AFWgLHZvVOQyNAM7db3GoOR41RRHq6NsZf38TnHwLf+j3a7DRFwcwqyb7y4gIVX9OnDc/6OwThupCR/Xmz/ow+NY5E4JPbzF/oTS4CkJtHuA7x7uJF/Np/PYoNJo7GeJHknjXVeVVVxtG40HtQdsqr26+16vZ4ri2m/OWVJyAJt/tIiKci5D1p7zSya9tvFeDN84pBU4mFDYDPNA5eAsVZjpkaXjIkqy7Lbja5MZZnL2Hi/PhzWh7lyOWktLPCT5i49HTWZdhlo501HY5rtYCG3rTGGA+bYTXEe1zWNOQznsR3m+y0DZMcC6bGedmnpDrq0yefVBtHAXdIL8ka4xnTUXSD3mKgzfjbIGHGucNC+urq4uEBF0l/sEClA5AhTZ8zqWY7n91Z62HJCz2qaoe6zVeD4ptXUQ1s3NYtZvtPTfRMKLFMAZD6UPsUTMSADpZgRoXEMGiB+h8Z8x3jJueFyDsGFovBRl8aKUhLUr6+ua7XcSZbI7SsRx/L8S89kW+Z5js56pq97W2ZJrAVBnBAikiVVt16gp/sfiCJk5cduDxSW5KIWE6KG2M1w+xdkxCL39NyhkcI71FFAyaVuacewBo9a1FrltMjilYgdanbzICIFrcDs95HcDpv+3Z0u7UVWdr+aOAiBtAHCx/ETh5jpdCKmQTigLCMe3X+FA0R/7Dzf4w0FKQkeXPdXqfTlS6EwrMDjGj9RMOxpEbYTkeKJhQjr+T5EpK0EkVVgabYf9ETy0F+17JVpWrpVtIpFzwpakUBmC6EGmQpAFchimNFgMj8SSUD+W6LHSKRQwIJGLFLJfcV/gc8nyVNGiCx/05OUpno4utOrhxNFvGErFs/i/jnDQdoAHCvk06h7ZPCIqHwnouxFSgcgch95JAy/VyoQ+UeHGbO2DURx3N+isrBcNWqkIjCBdAoUtJhA4FTIUIuEQlqIGg+uF8ta7MQZXTfJYi9xvRVKIc7Qobg4Q7aQeOsXMIVM6dJC273/d6dIF8v55Y47WRneT+/es/BDc+vx1lO5PL/rACL3crxJzdOQgIDoonymBSQJVQo/iz+eh44OtkkjP+rpNV4SehcHCiKLkobIyAKQRaBRLWa2ViuV1S0pzCl6OfiZavnYpMil25BsMUM6CdFx6tfBRR4eH0u8T2kkgkyQiIzZhTAOVYK18GGdi1RcsJpEbFzqnL8GeMBHw5hnYDgVWcHEdJ17CzqLkZaARkweTYo8+hoxIpFFWcQUC9ouFzjp96ewsCzrVbFYbbUyrttuuwUj4Y8uGMWfeJiNiqE5uTdBTtGUSk5r5pSm75hNpRkqJoXvn8Ml8FWVrppNU8WYm4lYQwSPJc93gHtc3WjEjSjqU/0q0oAHjYWOXuIifb1uCfYm1Vb1PRdpV+aJoHFychBxfM8Ix044NgymeErZ94OB5/hDNvRMzw/w+JnihgOIDILBMWPBIPCstIYoCQxBfoabK70ODw6+L1ARJf2SS5gEb1I4czWxnEJiCexWWweHh5k2UVASasKjRPscx1OMoe8pAUMSFAUiNH3XdwZjz2UuiagqU53AgYj/mo2HQcBU1uYKsgeef+SRJ4tERBML3j56dQIOiLT0q6fXuxS+XBU13OjUdb0+XRK8aE0mk1amjZ9V225Wjfla0oltNP2IMhsHrOx6jOJTx+xc3WTITuiEftlERgaOSiKWxyASDsIN5gVjxmYyQTMpiASNT43o6xElHKaLOjad7kKKbbrRq3EPe8m29w6qrbNWZm2NTDQNDyhLoHHgta3zDVfqHLIcHqQ6F9wojNnGXYlI4VYkSQIMZqCTFNEdTe8qWBjE9KRrcQ3bXl5eLp4dgMy73WHjbcOyTELT6CRadLWocTMhB253/HWhgZvik6gh0UzYWJEsRF1IxKlIOwCTkGKfS6xBIutHhyDz4/pL6B09K3DwL7Q8KRRsi7wisEXHENsYjWQeZVMkWcDCibsrEMt8AUEcPBLAY05jCyBCFHd2Xu7vZz79+/35evP5ysrKMwF2dAEZC5gWYdvWLcIYotyTIkP1iuAlC5lUf5IlZAdZA+H+J7SOUSIGojAA72k0BETICbKBYUAhncVA+hRbiGksTJNFtpFNkSaIvaTwBh7BQwjeYRtt/Od/4/BwFvbP7O6EbPG+vJkQfuniI0I5cNdf3vdj266maVkOH9baB1v7WKSytiaMNWf0ZTJX0GiB5Ej0plAGDBXNiEspFnvJI6RQAFHkrCh7GuEAZLebpkOPVJLSp4IFKtZcSwQgUlzzlHPVFokHUKFDSbq3aeCLuB9niuHLKxCpOknuG4EhjmyPldU0q/lrnl+XZ+dc3ztXlsaYruuMAQZhfySWEShOhZKnFP/BSBzp0+noviYjpPBHIb8cSJheREfVtON4+7nabB/vhuHbhRhzLaFFAhtPiACTzoqrDxJScK8VJs2/dvBtgxLNCBAUx7V8In+QmxHB0rpfb662w/rnjQ5hRAuDwmVOUxcuBUkWeqIhfEQlEP5JbQ22xAu0A5BfwstfN20oCuM8QNWpD9GlD2HJg+UtVqwiGaTIHuI/EjZdnA5Q7ECkyCQ2kWyGCjCWISGKDDhsYEKTrZB2AFJoK0FIUpYMmTr3mBfo53OP7rUH66fv3KN73204/k+y6a5vPyRieu84CDIRAsNwHJdlQUYQGcE4HEEUDuG4O9u6t92/d649uL8trupnJycHEDcHNzc3B2GC6cnLy8lZfVSO8jRtmCbL9o7GqEbubIPGk74neuQ2+fnw4uJie3sHAgRfDg93yHAKazKlbaFwwYMjhobC0e8Tmg/Mpjlst/W20x46ThuSYbJB/31vd/d4NxYq3BLQcSUpk9FjeiyWaeqSJEUIIpdjCILAVBUXhIog47KiIBVElvFsrfbjR83lOEVRNmSWbdvW7eoMdABNAgawnNXrp6v9Unmfpx0H/mqYU09cLMz+Fcuy3ji1Q6IkGcJ9JtOwINNpVNtKa6kUcIzHZApNJBJ5gNhCv3a/Jo711nC4dEbXzogegRyapvfn/K+fVXbar/KtVkvSpWYzk8lAkkCx3SBEkiLM83N8Lx6PP+9lQ+XAIayCIBACpyCcWoB3WDKUqqrgF86p6p3rgl/F1cPDqnh7b9sDa1CsWiWfj0Ypnt+PUjRNUZRhUBQ/FUUxiPW6KZLU0un8RETTWgJFQ5CUNl4svMVkMul+6naPjsQjT8x7vDFcLulGcX59fVp/GM2L3+ePf57W6/Xjl19PTz+rV0a71Ww2W7EMEOl6C55e0FwuI28K4AmQzOLxWq02m8VB4FASx3CMq1QwKDl8gwU1h0ARYkQhWyiAfVCSqltwXRXnOK5w51qD24+nvF8u+2UfYELRIIo2jLZpBqI4EcUp2xPhhg2GoJpGonmvXypZVqnv9cVe771XKvX9LxT90PjeAIxG43f99PHxz+VlZ93pnJ9frs87nfW3uWPw0avplGWvDJ4H7nYr0KXXkVcMk9uDkY3nskACQLUZwzB7TI5gQsJZIZkEkwgMF3BBERABq1QQRdlQAVZSBbAkJsuwrQDGrlrlcrnk+9GB71dDGAr0j93y900QiOK4CXdwGtOk/5UbCZNpt7qYdjBu7NTRNAxWFrU2rQSmJjBXsbNA0h9EYTFRpzLAUJcO/aJN0z/iPuHe+97d48fjjhe0oiE33Lb3dNPtFn95rdbr22AwnnkeXvMwmjanw0E0HPvB3NiZVj4xjUmSJMbODne2nbl2GMppaDvOJggu4iyO463j9/3Zylt4Z8/N92qpVD1VP1W1eHZYVWnoj9d6p6N3FAXLhA2nqliiTht9RW8reqM2qmGrwRQOn9UVCsXoUCuQ3sds9nD3NVgP14HZvx2PkYy20LTzel1DJp7m9bFGl1OUhd59r77oL00ryU1zHswX3iqKonjlL4N58pLklmXl1sSw7W85zTI33cvyXkY2jmGErpumoeM6G993Vlt7558gD8AYoyKlIqDs2BEroogGGKWCAPMbAcEqmAdwjFbgIXDAFArgBIESQnAlAbqAMpgj5E8QiUhSWSqXJUkiRCBMYAiDKmMQM3AYRxSDRe8wIByCocg/ShwOh8PhcDgcDofD4fy0B4cEAAAAAIL+v/aFCQAAAAAAAACAUTszAUz2y7WeAAAAAElFTkSuQmCC", - "description": "Displays a latest temperature telemetry data in a horizontal layout with background.", + "description": "Displays a latest temperature telemetry in a horizontal layout with background.", "descriptor": { "type": "latest", "sizeX": 5, diff --git a/application/src/main/data/json/system/widget_types/horizontal_uv_index_card.json b/application/src/main/data/json/system/widget_types/horizontal_uv_index_card.json index c05fb69779..716091c8fd 100644 --- a/application/src/main/data/json/system/widget_types/horizontal_uv_index_card.json +++ b/application/src/main/data/json/system/widget_types/horizontal_uv_index_card.json @@ -3,7 +3,7 @@ "name": "Horizontal UV Index card", "deprecated": false, "image": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAACgCAMAAAB+IdObAAAArlBMVEUAAADg4ODf39/g4ODg4ODg4ODf39/g4ODg4ODf39/////39/eAwyzg4ODCwsKQkJD6+vrn5+fz8/O2trbt7e3b29vV1dXOzs50dHSQy0bx8fHP6K88PDzv9+XHx8e7u7v3+/Lj4+PU1NTH5aPA4Zatra1YWFjY7L2enp7IyMiqqqqCgoKYzlMhISHf8Mqv2Xun1m5mZmZKSkqIxzmo1m6g0mDn9Ne43YgvLy/H5aK3Tah+AAAACnRSTlMAvxDv36eQgG8gyT+wCQAAAqtJREFUeNrt2OtuokAAhmFqtYevODDAgFIExPOhtrXHvf8b20HcqNntYv9QNN9jgs44MXkRBTWIiIiIiIiIiIiIiIiIiIiIiIiIiIiI6Nsa162LU3fTMIzbpufcnTqv2TBaIc6Ad2Vc2jgHl0YbZ6HNkJphSN0wpG7OPiRdDnBSvgrpmY84EIZAP+xDb4vRVhyjFo4O6VjoP4QPIeIoH42wZVmo3uppUh7S6w4BpB+T/PFycBCC8RSLzibEt6xFiGlHzyc6a+r3F6jG6uPFNO/LQ9LublXXHB6GJGNE8SYkjpLONIn8Z8uP/HESrztTVGJimseFoPc2QToZDnrA0y8choSfcYQiZAxLyzfROLLQ+UQ17t8GaWnI7vAytSH2LBbwI30XWXsh0+diE6K/XseoTHnIriM3wE5f7/c5ED/090LC/M0In8dRv2PFa5SoPmRoFl5S7AnxD2GxKVF9SLrsdld4M7fe8dTt1vDMeGzIq7m1OtmQvw6tejo2JN1+2IeoqW98/da648iQ3usE0CfEd+B116Js/OEdvEB7f0rmo8xDiUpCegeXKANsCQeQgWNnypl6gIR02vkwUE4mnblnZx7gBAJ2JuRmKbJMzyoUqg9Jl0Noj5NN1H6I7WezQPnO3AZcuFK0hfJnKpOurW9eYgOOgJ6VgK/0c0Eg5EyiRMWX8TrEcX3hBa49RxESwBWOUjN/roejIChCEjuQsPXSQMoggVIoUXVIIjxXCF/ona8ANxhJVyiZJGqWzO2k7QuBTYgvRnnITMi5G+jlDkr88E9dGzLAfzlqplDu5/98sL2y15b4Wo1C6oUhdcOQumFI3bSNS5wD+9K48nAGvJbRaHp3p87xmreG0bi5OHWt64ZBRERERERERERERERERERERERERERERN/1G1Juby0y7njrAAAAAElFTkSuQmCC", - "description": "Displays a latest UV index telemetry data in a horizontal layout.", + "description": "Displays a latest UV index telemetry in a horizontal layout.", "descriptor": { "type": "latest", "sizeX": 5, diff --git a/application/src/main/data/json/system/widget_types/horizontal_uv_index_card_with_background.json b/application/src/main/data/json/system/widget_types/horizontal_uv_index_card_with_background.json index 941cea4b4b..bbb888865b 100644 --- a/application/src/main/data/json/system/widget_types/horizontal_uv_index_card_with_background.json +++ b/application/src/main/data/json/system/widget_types/horizontal_uv_index_card_with_background.json @@ -3,7 +3,7 @@ "name": "Horizontal UV Index card with background", "deprecated": false, "image": "data:image/png;base64,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", - "description": "Displays a latest UV index telemetry data in a horizontal layout with background.", + "description": "Displays a latest UV index telemetry in a horizontal layout with background.", "descriptor": { "type": "latest", "sizeX": 5, diff --git a/application/src/main/data/json/system/widget_types/horizontal_value_card.json b/application/src/main/data/json/system/widget_types/horizontal_value_card.json index fd52ab74e4..417fcc6446 100644 --- a/application/src/main/data/json/system/widget_types/horizontal_value_card.json +++ b/application/src/main/data/json/system/widget_types/horizontal_value_card.json @@ -3,7 +3,7 @@ "name": "Horizontal value card", "deprecated": false, "image": "data:image/png;base64,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", - "description": "Displays a single entity attribute or the latest telemetry data in a horizontal layout.", + "description": "Displays a single entity attribute or the latest telemetry in a horizontal layout.", "descriptor": { "type": "latest", "sizeX": 5, diff --git a/application/src/main/data/json/system/widget_types/horizontal_vibration_card.json b/application/src/main/data/json/system/widget_types/horizontal_vibration_card.json index 4a2b878e4b..4b0125d57f 100644 --- a/application/src/main/data/json/system/widget_types/horizontal_vibration_card.json +++ b/application/src/main/data/json/system/widget_types/horizontal_vibration_card.json @@ -3,7 +3,7 @@ "name": "Horizontal vibration card", "deprecated": false, "image": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAACgCAMAAAB+IdObAAAAn1BMVEUAAADf39/f39/g4ODg4OD////k5OTYGDjg4OD64ubwqLTdNVH1xc3nboLIyMjiUmnOzs7aJkXx8fHsi5v09PT98fL5+fm3t7f41Nrb29vCwsLzt8GQkJDV1dW8vLxYWFjn5+fumqjpfY90dHTgQ1398fPiUmqsrKw8PDyenp5KSkqCgoLkYHYvLy9mZmZLS0shISGwsLCdnZ3pfZDpfY64MVbEAAAABXRSTlMAIETfv0i0+14AAAO7SURBVHja7doNb6IwHMfxnbc/tS30eBZQQHyYD9vu+f2/tmsL7LadOpZcFrb8PomsApp+04kmegUAAAAAAAAAAAAAAAAAAAAAAAAAAADwlj69ezZj8tl576afJ7rDSendi53J1XVMH0B6fTWlD2GKkJFByNggZGwQMjYIGZsTIZnb4tQJD0RK/XQOJT1wqFI0Jv+GNKwjqXcfUq1UuJ45FIbmRuE+LEvSY3L0vaHc7k8TzZ+MOnNhuHTO3KXHJ7svhHgeWZxRb3Fw9rRW62N9UPfH6vj1sLvfLRbOt69rul/v1bCKVcDIiJgm+cMooU7AjBs6gzOPHmwCyZpLIfxxCE/IUvVubUJUuFc1OYfbmva0WNzO6JvznRY7etl2w7T2eaWbrcx8XTO6Y6v+FCaFNqczBMuol0lBG3kphPFHIV8Eteq6NCGz8KhDbg+zLmRHdTgwhMtItCErM/NtwBLymDDTD/rJPVmMhFMydxOdO+dkfZH2LOEm/QKdDUmy5yGJS8ZiTybkW73QIT/39ZGOC/2vVX+9pYEhGm9DvrC53m5Ypm/m2SXrJurqQk4dXekFTC+ZWcmofXijNzesu5/JTXI2RNw8DxGSHgu77ZNNZ3iI2267BKlHlmCbgAXRQ0jQzHXF3Txi9rzGbD224iLQj8iCFdHrQi76nyERk7/1KkR9SGMWKbCrJ8x5N/1yCs/d6sWSko8zhHhip96HCHthsOfqYaY3NnalU2grjGSkIVbA+MkQr93fSL0W0UtviDx7HsKz/x6iZ9i+2LuXfcCS/i0uuRAi76iViaBPf/XlN6YT4vD5jnhQSMPuuhlG7Jeel50r7xbJHjgV4tr8rdzYC3hE1uA3xCQha9bGxBTmZKUppVPf7JhSSkTL3ZLSPG8P6B3xhZCtZF4kWaRHgR2JbmpzFtgDJ0M8PbDDO9H0i/b6jyg6pCz9XClfjwoq8qJKZ4VflsqvQr9KifxlXFU5xb494KvqfAhxyVh78czMqLGvYbMV5m5EJ0MCj4ytx/Q5goaERKwjn4T4s1j5S78NWZa5Hut9y9wvlA2Z5rkOUbOlinVuEdMFCU/6uG7E/949STD34bF86Md4t5NQ74efF/6sVEVsVsSv8mIWz5Sv94XVUvlkQlKzIsvqhzlQFgW9qS7k1fIlnVeqnIYYQ0iaXjoY0xCjCBkjhIwNQsYGIWODkLGZXl1/gK/ZieLrq4nzAb5oT52J+QnH1HnvPk8+0o9qAAAAAAAAAAAAAAAAAAAAAAAAAAAAAN7IH7CH4Te59eAaAAAAAElFTkSuQmCC", - "description": "Displays a latest vibration telemetry data in a horizontal layout.", + "description": "Displays a latest vibration telemetry in a horizontal layout.", "descriptor": { "type": "latest", "sizeX": 5, diff --git a/application/src/main/data/json/system/widget_types/horizontal_vibration_card_with_background.json b/application/src/main/data/json/system/widget_types/horizontal_vibration_card_with_background.json index b39869c2ab..a5bfbfa0f1 100644 --- a/application/src/main/data/json/system/widget_types/horizontal_vibration_card_with_background.json +++ b/application/src/main/data/json/system/widget_types/horizontal_vibration_card_with_background.json @@ -3,7 +3,7 @@ "name": "Horizontal vibration card with background", "deprecated": false, "image": "data:image/png;base64,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", - "description": "Displays a latest vibration telemetry data in a horizontal layout with background.", + "description": "Displays a latest vibration telemetry in a horizontal layout with background.", "descriptor": { "type": "latest", "sizeX": 5, diff --git a/application/src/main/data/json/system/widget_types/horizontal_visibility_card.json b/application/src/main/data/json/system/widget_types/horizontal_visibility_card.json index 2d7507602f..70e88e65ed 100644 --- a/application/src/main/data/json/system/widget_types/horizontal_visibility_card.json +++ b/application/src/main/data/json/system/widget_types/horizontal_visibility_card.json @@ -3,7 +3,7 @@ "name": "Horizontal visibility card", "deprecated": false, "image": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAACgCAMAAAB+IdObAAAAolBMVEUAAADf39/f39/g4ODg4ODf39/////k5OSAwyzg4OCg0mHf8Mrz8/PP6bCQy0bv9+XOzs75+fn3+/K3t7erq6vCwsLA4Za8vLyQkJDa2trV1dXHx8ew2Xvn5+fn9NjIyMi43YhYWFg8PDx0dHTY7L2YzlPH5aOIxzmenp6Ixzrt7e2CgoKn1m5mZmYhISHb29u43Ymo1m6tra3H5aJKSkovLy/b7uh5AAAABnRSTlMAIEDfv1C6kOEmAAADOUlEQVR42u3aCU/bMBjG8a6wN27jxM7dXE3Tm2uw6/t/tb02ZWEbdFWpqoCenxCx7EjwT0xboAMAAAAAAAAAAAAAAAAAAAAAAAAAAACAc/r07tmM4YXz3o0uPnOHE9C7J53h4FLSBxBcDkb0IYwQ0jMI6RuE9A1C+gYhfXNIiNwSleXWIZaVccaHG1rQVsoevUw7JIR+SmrLUpIjqSgmMRfFNKdY3nALOXRK7jr11NNoSTueGB8R4la+EJuxp+jJZOvMaVFOFvNyEk/au5a+0JzbfrTRggcnlArmT3+P1PEhaix2fI92yjZe2JBMcgjfDWlDHDPklNPxhO9OU+ETKTOaifHRIdMNF6xDmt5yyox22rbgkKK8i23Izy7k5kdEpzMWZjddCUUz88XDKxE+C1EqDBV/a0vFS567N0SZDkUun1s9K5nMiUO2d23EIXftDT2GxHOnnNMJLT1lQ8Jd0kpMu5AHsQpdsTI7Jk3tvtsT4vMJ3+nBnBUK9me27A5PI95zp+aJFXGIS/bz75DUXmG+uMuZ2TRLX6Svh3iCuVPBZrQS4r9bUy4cOjHli+kLIbaDQ8b2Rnlm7vb1kLUNUV2IT+cWmiv9b8hGmDwbYqft8PWQ0DcbkCrB+TbHozMLV6bj3xA2OziETa+E2ChaeiFVtuncKjHbHb0/ftg3yyvhHhbSlfic4Y6fPWhJeoG8/ntC0ps9PG38tfhqn0y655Gl8MODQ5haiZ3Nd9qJbAx/XOdkBQEFI20mRhQQUR3XFOT54wJPHJu0FuJrxTyzyavUF2kXQrfcdngIc6sVV4zXIT0LKQqdN43mUUJJnmRBlOiiaHR2rbOASNcyy3KS2i7oJjt2Yz2q7IOX2MyoCzFt6/0he3QhOpKNrvVjSF3c85jn6lwnjQ0Z5TmHNFHdSM5NJL1ZqMJTv/r9pu8THRVNIs0d0VmeRDJqNM9dZ3WjyYQE5o7U2TezUCQJHeH8v1jlNb2uaO7pEH0ICYJ9i5IO0YuQPkJI3yCkbxDSNwjpm9Hg8gP8m51IXg6GTo/+gnuswBkOBp8vRs57dzH8SG+qAQAAAAAAAAAAAAAAAAAAAAAAAAAAADiTXxBy+4qYs+NTAAAAAElFTkSuQmCC", - "description": "Displays a latest visibility telemetry data in a horizontal layout.", + "description": "Displays a latest visibility telemetry in a horizontal layout.", "descriptor": { "type": "latest", "sizeX": 5, diff --git a/application/src/main/data/json/system/widget_types/horizontal_visibility_card_with_background.json b/application/src/main/data/json/system/widget_types/horizontal_visibility_card_with_background.json index 95bf6c6a82..aa1678020e 100644 --- a/application/src/main/data/json/system/widget_types/horizontal_visibility_card_with_background.json +++ b/application/src/main/data/json/system/widget_types/horizontal_visibility_card_with_background.json @@ -3,7 +3,7 @@ "name": "Horizontal visibility card with background", "deprecated": false, "image": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAACgCAMAAAB+IdObAAAC+lBMVEUAAAC+y8+BgnCvsrezwMeeq7FmaV2SinuenZ3Hz8+irLJ5eGqyusCVoqqIh3ldYFawt7yVoKiJg3dhYVtZXFPr7e7t7u/u7/Dm5+bv8PHk5OHr7Ozn6Oh8wyLk5uTw8vLs7O3l5uPl5eLq6+vl5+bq7O3l5+Xt7e7o6enm6Ojp6uro6+zg4uHk5eS/x8vo6ure4ODh4+Lm6OnAyMvm6ern6uvh5OPk5+jCyc3q6+zj5OHk5ua8xcm2vsPk4+G4wcXP1dezu8C+xsni5eWxur+6w8e1vcKWzFPl5OK3wMOzvMKgrLOpqqvd396wuL24uLiNjn65wsWopqa0vMCtq6yQj4CLjXva3Nujr7W8xMeoqKicnp2Mi3+FhXbM37aJin6JinnP0M+ysrSjoqKNjoJ8emylsbeZpa2qqKni5ePR19nAyM2ptLmtsracqK+NkYGBhXW1treEjI6OjXuGiXiDgHNpcGnCys+st7yvsLOPmp+Mi3yRjnuDhneutbmdqrGvsK+kpaWMlZeVl45vdnBscmx4eGnK0dO0tLWura+XmZOGh3qHhnZucGVobGVjZmDY4s7K3bWWo6qVoamlo6TA25+y1oWQkYSPj32Nh3ZlaGPJz9Guub6rtbugpqmhoJ+Nl5uZm5eCg4OPjXmJh3mGg3OAfm1xc2l2dWhiZVze5drFy8+IkZN5gYF0fXuj0GtoamGJyDrM09XDxMO5u7qqrrKysLGkqq2fo6SRnKN/h4ePi3uRinl1eXNsbmNlaV5QUVE3NzfHzdC9xsu+v7+mrLCTn6a92ZyJj36Ninhpamrb5dHT4cPF3aqdnZm415GSlo+Sk4mLkISCgW94em11cmVdYVqXzVSPykeDxS7IzdCUmpeWjXtweXZ+enCJyDvExsWnsre2s7Osrq2q03h8fHLi6N2nrKaYnZydzl+yt7q7uLePkZGTkYCr1HnJysm5vcDV2NjU1dPP4Ly8uruKyDuDxS+EiXyq03d5gXZDRUQrKyseHx8eHh4NdTJ/AAAAFXRSTlMAICAgICAgICAgREDf39/fv7+/v1CGJ9OVAAAPGklEQVR42uzBgQAAAACAoP2pF6kCAAAAAAAAAJg9OsZtEIbCON4q6UDUDr2IFy8MRghkkCASUsVSLlAGV13pxh1gJSfgGJwkN+n3nrEoVdVumfzT4zlZiP+K53me53me53neLT3843DA7Bxpjr+4/ykIgu/f9h9YwM+fjgR7j+9hccbpaRiGtm0/oO/7s/UKb+z6Ti6XT5imSevSyUkUxTEGMlBELEYYIQx03TzPIRhaTrcK3cmksYRZLMUylbE4fsGPFHFE8iinKfO6TODxhI5xGBFCJS1KwIacqYNbXAiZ9KRhK8EroYgtW7IIQIqUhi6NCkMdUkp7YR7DGwt4MSFTkS4qTVWjGlCNq4CiKCKCghryJKkTonVVne6ex9GGuD9lawGbcuUSQAmptE4wawxezC0RQrgkXWyKDHlb7sbbIdaHjy9K6+W1iSiK43j+BDdpDJmLgUlwEqEDtaWEKha1BiENBBdRA4G4FLuIK3GRhZu6jEqyUWzJUgtii7RdFBLBFvKgu7a6CUIJWEqpSLvwAf7OmTl5TqV+c+fRTJvcz9wEHaZxdXj4EmICBImpBI2EIG4KAgBBYCJxOOJnXOvrJEEsochhUwhDEFBsDK3Ko1fxOCygwCIaDNIAAsmwHU4uYscozJbnzbZh6SpfxTKgS1gHUSSssNS0Xb5JkBsICBiuY4e3JwQU1B4gkFBigQSjI+G+ogcoRxZEyyIa6+5grcmSmLrDEL6/+IggnqjY2kKEa/hdjvhQTGEdxHCFDIgIeMBgxYZbWAkc4na5vT3X6urqOmFu477illL0Egks7JT1KeX34vuITzX31u7j249WL+1mZ2cXFycnJ++3m7xPP/KDz+QphONAixjS7OKs9JJ33Jd2/O434zkrG/L87Wi7sTEMuwvtgheCkruvoa48yOv1nhvIe84ryaljHq9nILzsUF9u6ft1gTxeRRdHqC6LAwWYrv5T4j1dnlMpwOhIJnO5mdzMjOvxY0hejI+PCEU4ThTka0tg6aubIgJni0eOMn9sTginBCHFZxAg1O1xWyIawZi2pVfj84EjDVqQE+Wke356AQgOHVqQeYJ8AqTHYgjFNDHI0k+BBRqf89qwpJ/ScVjWob65nww4MX7jxCAkNIJHaGBhTGRLdDwYgiEFKXpRv9+Nzc8Sx0VhyNBpwuRtwCDDLwo7gnz44JpHAiELQSTDGDU6FE5vW4hiawTEg0RMOQni7u28w6lzfJfoEezp8APlIsc8QwJiwbKIhOtQOKwLZ2kikYhvIFocgngHIbjR/r7g5hnKRDGwWeG+0JBDV/hoWzHkk+vJPFq2CCJBpGHJiJHcHx3NZvczZIllUzFY1vSqvj89PW2LIr6I7tPtbIrb8QvPK+LvRbuxitb9tiaIaE8Dm/yEHTbrgoT3RYefECBofnliYoIXJRDoxbDlV9IoZ7PJ0UzSXFoqpSBK6ZWx1PQaLHpG7xQOi0Ug3oEVEYfOm7ilH5vFQk2n24KzRoTmiq2gtiMcPSFdQHwAZHl5GRAECBUgybN3TaWOoxv5tqW0n6kY1WypWsmWUqXyVtn8bVbMcvZnOVYNVzD7MIcF4yNLghZE/iXv/o4AInAa3RUVOqrjWeuspnOA0CGCmcv3E0d8FPgFboEByIJAqPFAPqrsmhshu6flVHWEILEkICmjkmRIppQyK7GqiYCQLAqvCEmEwg9ES+JjhEMFdZSuF9WRadZUM10/UNvyPJ9wugxqDIX3XlOuhYUFgaD6sVLvN98E6t9A2ZVPWLm8FKpml7JbKYb8Sv4xKgZD1n7GTGS0YwogvCJCkQTSZtAfMt+gPzO2VQNPfFY140AdGEbrWLXougEIrtdqrVatFa43auFwq5A2JYFQr69du0aOPDny488a+cA7kgQQIKVKCJD9rfJdQLbKa4YFSVUy2YpBaZJBQeLz/wMSBITxkmYfG4UaXuOzeqOBhLMdVedLgBiw7bTSamcb8yoWsWvW+MYZgKy8XllxPRQIWd7jFzYndvFb+TcKPQtwIask77WkTBpnqaoQui19EE8/xIelEMNABbWjaVGVxuk29tZTUa2o3te0tFIHjQNMb7PRVEXD6t4KmnM9RALZ4MnXFdqd2ME+yg6mnA210zQMLlnN8DGE62cxzmpIIF0ST+d/6ID4CaI5F8o3VT0UAiRk7W0IHHkNkCgvVIGe+6ZZ3ZtbmZsDhPrLdv28pg2HcRzfPzH5ok1obJaskkC9CFPYxUN3mAR2CVgYpD153H8Q10vwpIftOnYNdCKGMXYOeGrtcVLGBAezp7LusuM+z/Novrjt7Y/G2mpeeb4p9pNA5gwZasjE3qYEopTGIEWX3QhCp0gBEQpzJPzZOoADP4sb39MDHBx6nOJI4+2OjRGeIYg63Dt8YywMrDKGyKBkU4pPqA2k0WgAkk5oAbbGBvjMmTFCUxQqhqM4Gzl01ZCaQCBhiKQ33IeV2mPss63+Lf0Ch0DwjsI5BAR9h0j2Hj4NUYCs1+urB58FIv2CfDFsX85SaMjU0hB5Z3yltMHkHEpxG4jrlojybyV3/0ltT9n8Czp5gbHx26HGfAxxsitqZiwuF8ZLRRBwaFAEUYc809X6PXrwmTqp1+uFZDJL26NjXl7IbtmhxshNofAntkHw/Z6PL5YVhhb2gCAHTyqP9iEhC38+34iEhXMEKwsQZJHFUha2LDoa341bIc2NW9sebpY2IMfq0viWqhE2FEMUQaQVGFdXAlkDIpYhTg1pMW+3pD5eLKTrz6VYPM/27jInNO/v/E6j0YveR/7RdGpZnqfq9drBUYU+9LkllwUlSgx0cQHBRLDvO5kI5+jtGM0cLPLx24nxFiZMHRBb3QLJEAWIkk2B3NwQ5OLiAhDPKyijMSyL43nabpuoZRIkz7NlkmTYiu14GT/3+nGW50nQvQ+6nUYviMJud2qGGZ74iJ9dMcRlSEliCOW6fLI7vCi3DJ9nOzakseUMJ9iJ344EiEO2+RYyYohdQAaDASAIECQUXLler9322dJv2XnWD5MsygQS5cssCvLgLJoGq9NOE5C76XTqh0k/etXJu5XEKyCSiMTxkCG2SW0dlr/J2uakw1QBoVOO2okc+Kb9QyAfPgByQw6hiEbCC7cxl5NsGWf9PInDvuPEWXcZn4VnSbAKzu670WnQbDaDqIOJ+FH3XfgiyJenyb4eibsDcmkivLYsjMD0LRoFqlarDAFNdNhz3s+deNd18vwPMDSkSFNkLIwxdVgRy8j3n6FyudykyqiKG46n2psGd/iwvY8A0W0YnIZIVR1xikE5yMKFVyE2ET/6G3I9GJyfA4Jujrj/aEDBYCRT8jsdHwjqKd8ziSBVpfb8owP+n1FL6H9YxMMQSOVJ7bGydgXlqo4WWIExJeHxE3o40BHk+vz6/MHXr4C8hoL7j4Q1hQT3UOjAoHirCsgfNuwYJ0IgjOL4HsPgxmQwsSOxnoKaxtoLeAILagtotTSh8RoeQ2jNnsF4g/3P+8jMfAkvgQWKDb99MxkWnhgNUiSlmwpyBlIM+ct2ULpd3ToHB5HGCiNAfgS5FMixRZSc0gV7KQSJnKZGMkQUOapyuMLZ7T2NPHS6f5dh5wQsd4wyOTqvsAtALEDog6E1TVBe+f/96FIwOydW6YkwQz80cgjSdjdnQZCwAaliDoIDCEsijWh+uXJLNYo8RdKGPMRDzheMdT3N84Tl/1BCPKhAkGhrqrT2fMLCbrEXJL4RhXcVNrZiE7EcxM9/FRSSI3AqS1lFn1GQ0ziO83T5BiKKi6Poo6/iEDFSiHNYDbkQZT/S2EKSGOTYkTXB9oRDk9FMQmmYva3btr18nj6WZXkf59+/J4uH+HgKxZhg/13bAKTM9ZTs0JoiiSA2S8KVzrrnTRsIAzievVv7Dfp5kDgh3w2uLVt+kdgOZKiEzkigqAjHTrog2c2CIoyBzUtYTMJqligBk5EhVdQBsVRIUbY+Z5ehQ//24YPtp+eQ/Pl/kPyIff5nLqDIOYUEruJ94PcvUEBSDskted/gpBXdFb2/117zdrtmnic3ZXlck8NxGHpqw3XbrqvkPV086IOBWC0JQscpCc5cg8vRWi2tXK6XeXX+RSv2846on69pmqaUohQhO0HEogFhCcMsQAhTijEy6AE2vu/TNTV82BgGNuDD8H3sr30DFiAMRQIIDyBXX8Fywpw8k+zuLsuyHWRySBRFG67ZRBE3eZ7rybIrg+XtTbnQ9UGlWhVFQXBKEFic1ilN62ua1rpttW4dx+mUSmJ3MLx5olyC0pRgKwgsRJBljYJVwgiiCPuIpgFGCIHJpwalBuZJhgQ/SpJhKAA4dTabzf5aYtDkcQqsSd50Mu2Z5m4HKzJNMzOjKHt9Nc1xsyl7jVCW5FBu86k8fhnqerdbETmmK5ZEoMB0Sj8FAUSOBpR+qxhPf95xBFF/eFynJCUEIUKYRSwyIrZtJwGxFnZgJTZMCQcHjKzgYB8QRghGxCEoQIwpUsIUJQwVhWEpZOHZp1lOmX1fxtdxDIzLq3vokje5BMh2OzV7PX7DmvayjGvMaDNujj2vpnphIwzdhnLxMBwOqtWqIMAtVCrA6ZRf5i+8+n5/PO73+3Id5lI+Hsv9/v5lLojnkttmROWMxIaHTeyDNRpZo2SxWKwWP1YrZqnJiiUBCgghqgpoC8gsYAyzRFL4oVY5x/t49uH5+Xm2BMoyXi6XMbS8ju/jggIT2QIE6m05Bp49cxNlkbnZjHk1ud1oNxqqapzfcEkFgj/KUK9wSuGC9YddM2ZpIIYC8KHUOxB08Wfd5Fg8FFw6HrRjMhyCoLRODmaOYv0DRTB0v0VQ2i1Tf0m/l0yFlv6B9+W9JByE8CX3hoNbwGazeBpSP3XN/TB03e/z3y1roTcx+PH4jrN/M974GH0MLjj3Y8TH4TChWYkJG+ZVFGhDJM6L4upSVL6wkZZlli+I0Jbr2TrF/HM2XyWPR94tSgSR5NJwK21rb8TjHrAgGHGCrhtdS/nXxKgeflNE2ZXulS+7h3/b9H3vgo+C4T68QSWICIgFTD/e2ce27ZQEy/GlWcMcjQs84Ow4J4TkIcqy2sMpmX7KyTDZYTCoqpK10naRp5A7oCMPUyiKoiiKoiiKoijKtj04JAAAAAAQ9P+1L0wAAAAAAAAAAIwCM0tjjEtNT74AAAAASUVORK5CYII=", - "description": "Displays a latest visibility telemetry data in a horizontal layout with background.", + "description": "Displays a latest visibility telemetry in a horizontal layout with background.", "descriptor": { "type": "latest", "sizeX": 5, diff --git a/application/src/main/data/json/system/widget_types/horizontal_volatile_organic_compounds_card.json b/application/src/main/data/json/system/widget_types/horizontal_volatile_organic_compounds_card.json index 1f4c86df24..f86a95ae51 100644 --- a/application/src/main/data/json/system/widget_types/horizontal_volatile_organic_compounds_card.json +++ b/application/src/main/data/json/system/widget_types/horizontal_volatile_organic_compounds_card.json @@ -3,7 +3,7 @@ "name": "Horizontal volatile organic compounds card", "deprecated": false, "image": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAACgCAMAAAB+IdObAAAAmVBMVEUAAADf39/f39/g4ODg4ODf39/////k5OTYGDjg4ODdNVH64ub1xc3ri5v98fPOzs7iUmnwqLTaJkX09PT5+fnnb4K7u7v41NrCwsK2trba2trumqjw8PDn5+fIyMhYWFjHx8fpfY/gQ13V1dXzt8Gtra3kYHaQkJB0dHRLS0s6OjrU1NSCgoLb29uenp7pfZDkYHflYXZmZmaiBA8wAAAABnRSTlMAIEDfv1C6kOEmAAADj0lEQVR42u3aiW6bQBSF4bRJL9csAwyrsQ1e4iXp3vd/uN6ZIcitWtrIaWS751PijIEg/2YGKYpvAAAAAAAAAAAAAAAAAAAAAAAAAAAAAF7Tm4tnM97eepducvtOOrycLl7mvb25y+gK5Hc3E7oKE4ScGYScG4ScG4ScG4Scm9+HqIp6809EyyVt9yXRZr+d0zn6fYjPIfUe59Qt9x+WD0vvofzU0dyj0w1nV/0onEX3R6MRPgd/HxJoHk62/+Q90sOGykP5gaj0ukN3asVK8zDyyYhY+EpGBYu1Oi1kliiyCp6ptD9+2W0P9OjR8rDdy1PvYbukU6g1CxKVloFvg9gPqx2viFIzWnN0WgjzjCI21rTihJyu28jkIpld38g7zJfbBzpF4EepCwkTGfnujUulkDVRYqZCJVstFSh1H5IIAlJp2IdUMhoNSbUv5yiKIuGwGN6V/SOR13WdRx+6RzO1DnSiwIW4S0FizaF7iebbvqOqn3FfNbNfmcAvLCPZ6dtRokbXyIy1PZHSmgv6wfzo4YVDXIK7w3A/Cp6WTpTu2Dch/uze58Ts89PU52g0RI4vXJGJH/FqISt51LI94dT+npJ9lf298ZCQP5ORslY04tVCInfrsSFuCg6TbzSEdhzaBamlaPCKIdqO9FGIe3QhyVFIMB4SaLfY04RnNPjHIe5eRZrV8DLpKGT3yytC4yG062+/FXNFRka/kM1/3pCdEhLx5/6muzIvPeXkKaQw08OukdmwRkJzxPoPIYE980oOLhKypjZGvuYNWXlO+SQ2GyaUy/PFdkF507gdsiF7fojSXEQ+p6aGi5WWUR8i29furqXNESt711qZI8ZDAm2vg2KTPYRsNnHTtrGMaqqbusyndbzZtHE5j8ucKF5kZdlQFtsdcVs+O4Qqn1nPSNwPIxuyk6dJICF2tFMmRPI4ovEQpXXgVt/9Ucj7eJq18SJ2IYv3H2Us2xZNXLc2ZNI0EtJOF20muXVGzxcEahiR5daIe2rXyHCEcqPxqaXcj4qebOOPdTzdtHVmrkhcNvU0m7axbJuXizYmE5KbK7Iot2bHpq7ppbjF3oe89B9WzWJk5/v2ozxeRkiej+3M6CWFUUhOGlX/95+6FwYh5wYh5wYh5+aKQu6u4N/sRNmdfGDgCv7RnssHBm7e3U68S3f79po+VAMAAAAAAAAAAAAAAAAAAAAAAAAAAADwSr4DXzz6NDozanMAAAAASUVORK5CYII=", - "description": "Displays a latest volatile organic compounds (VOCs) telemetry data in a horizontal layout.", + "description": "Displays a latest volatile organic compounds (VOCs) telemetry in a horizontal layout.", "descriptor": { "type": "latest", "sizeX": 5, diff --git a/application/src/main/data/json/system/widget_types/horizontal_volatile_organic_compounds_card_with_background.json b/application/src/main/data/json/system/widget_types/horizontal_volatile_organic_compounds_card_with_background.json index 92618265fe..994f401cf6 100644 --- a/application/src/main/data/json/system/widget_types/horizontal_volatile_organic_compounds_card_with_background.json +++ b/application/src/main/data/json/system/widget_types/horizontal_volatile_organic_compounds_card_with_background.json @@ -3,7 +3,7 @@ "name": "Horizontal volatile organic compounds card with background", "deprecated": false, "image": "data:image/png;base64,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", - "description": "Displays a latest volatile organic compounds (VOCs) telemetry data in a horizontal layout with background.", + "description": "Displays a latest volatile organic compounds (VOCs) telemetry in a horizontal layout with background.", "descriptor": { "type": "latest", "sizeX": 5, diff --git a/application/src/main/data/json/system/widget_types/horizontal_wind_speed_card.json b/application/src/main/data/json/system/widget_types/horizontal_wind_speed_card.json index e31569ea97..862a669d17 100644 --- a/application/src/main/data/json/system/widget_types/horizontal_wind_speed_card.json +++ b/application/src/main/data/json/system/widget_types/horizontal_wind_speed_card.json @@ -3,7 +3,7 @@ "name": "Horizontal wind speed card", "deprecated": false, "image": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAACgCAMAAAB+IdObAAAAn1BMVEUAAADg4ODf39/g4ODg4OD////g4OAjTMd1j9zk6fjx8fGtvOrOzs7IyMiRpePy9Pvj4+O3t7fI0vFaedU+Ys7z8/NYWFj5+fnb29swV8vCwsI8PDy8vLzn5+eesefV1dWenp6QkJCDmuCCgoJmZma6x+2rq6tohNkvLy90dHRLS0shISHW3fS6x+7W3fXU1NSRpuNMbtFMbdGsu+qtra1mE7QcAAAABXRSTlMA7yC/r1EOHTEAAAN3SURBVHja7dprU5tAGIbhJPpmOW2AcAgg4ZRzGrXa/v/f1neJLbY2FJypg5nnMgSy5MPeLMw4oyMAAAAAAAAAAAAAAAAAAAAAAAAAAAAA6G1yM55+drcT7hgb9OkZ48no9go6uORmNKWrML6WkClCBgYhQ4OQoUHI0FxtyIneMgpyUnKd0qCzkDenKB36Q5HTB2oPERW9tTdWIYUO9xgGdxlfeOwo3Tsy1Od6c9T+IKmfOSkPZs1uxu05XbYxO4VolGWbk02vHWQYGnfEP4e7rXNcq5CwcBzny+FopMew4LGVwSdlr4oqFqRooqb/qvB4Fpf5WqeQ+N4TLPZ2M3OuU60ow7JcqxBnW662pEKc7V3phLTahmWxXq23e7mmPitiPwlGiieyVyuyiYVoC9mI+44r4vH2IITnPQsxJyXfF3Jf/BZirIi+OEdauWEh89VBSnmgdY8Q3Z+ZLyHPvGvMvCxrQmzdtjcbnei0OVFN84npfJW7hJAQ30hXIbV9zq+XkDxc73moDMOVs18fHTfkWytUt9Z6L6kP/SVExGTTa2YTookqFiKeq9ukqsvUOdsT7Gu3EG22UyF/YfzcOaFRHzTbe0JsEfNcd/qFkHhm8kSezCyuZ2Oq969i9zDnz20hPj8jvi9E7O+qbGNTG6OkFh1DeBdrlS/8CyGz+ou6OvzGA5763k49J6a2aV+RSpuZDzr9Z00I2TpvfH3bQppDfqNM+Jq6yO0hH6IJaWbcJcQUOjHTV8/IwELmpppb1S3k2aMznVvMviEB/W3Q+HMgeF9IJnb87os5j/wr5HSe/JNvE83ErG+IW8fwy4iotljQYmqpgSktiGi5XdIiis4neCDoE2L7Qpt5wldJWnsIb3VrJTwz88X9O0Ly3IqktPgooSRK0oWbWHkurdSwUp65tQzSNKLAqk9YMu0RQronhPB0FVL9I8TfkWJX6pePjN4R8mi5gbSW1jlk+RjxMY8tIyuRdcg0ijhEuksZcG4SUB+2bp/31G7ePBY6h7eFzHV667sVJZabyyRQK2KlUeIGrrR4zEiX0iIVslArsky/qxN5ktBHUyG9RUu67FFG1MUQQhaLtpMBdTGIkCFCyNAgZGgQMjRXFDKmqzAd3VzHn6dvr+cfBkaT2+lnN76ZjAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgrx9YOdsEpKcg1gAAAABJRU5ErkJggg==", - "description": "Displays a latest wind speed telemetry data in a horizontal layout.", + "description": "Displays a latest wind speed telemetry in a horizontal layout.", "descriptor": { "type": "latest", "sizeX": 5, diff --git a/application/src/main/data/json/system/widget_types/horizontal_wind_speed_card_with_background.json b/application/src/main/data/json/system/widget_types/horizontal_wind_speed_card_with_background.json index 3808c7d538..7022327db2 100644 --- a/application/src/main/data/json/system/widget_types/horizontal_wind_speed_card_with_background.json +++ b/application/src/main/data/json/system/widget_types/horizontal_wind_speed_card_with_background.json @@ -3,7 +3,7 @@ "name": "Horizontal wind speed card with background", "deprecated": false, "image": "data:image/png;base64,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", - "description": "Displays a latest wind speed telemetry data in a horizontal layout with background.", + "description": "Displays a latest wind speed telemetry in a horizontal layout with background.", "descriptor": { "type": "latest", "sizeX": 5, diff --git a/application/src/main/data/json/system/widget_types/humidity_card.json b/application/src/main/data/json/system/widget_types/humidity_card.json index bf034c0bbf..8cae42422e 100644 --- a/application/src/main/data/json/system/widget_types/humidity_card.json +++ b/application/src/main/data/json/system/widget_types/humidity_card.json @@ -3,7 +3,7 @@ "name": "Humidity card", "deprecated": false, "image": "data:image/png;base64,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", - "description": "Displays a latest humidity telemetry data in a box layout.", + "description": "Displays a latest humidity telemetry in a box layout.", "descriptor": { "type": "latest", "sizeX": 3, diff --git a/application/src/main/data/json/system/widget_types/humidity_card_with_background.json b/application/src/main/data/json/system/widget_types/humidity_card_with_background.json index bd7c696405..38e07ff0c6 100644 --- a/application/src/main/data/json/system/widget_types/humidity_card_with_background.json +++ b/application/src/main/data/json/system/widget_types/humidity_card_with_background.json @@ -3,7 +3,7 @@ "name": "Humidity card with background", "deprecated": false, "image": "data:image/png;base64,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", - "description": "Displays a latest humidity telemetry data in a box layout with background.", + "description": "Displays a latest humidity telemetry in a box layout with background.", "descriptor": { "type": "latest", "sizeX": 3, diff --git a/application/src/main/data/json/system/widget_types/illuminance_card.json b/application/src/main/data/json/system/widget_types/illuminance_card.json index f118b2dd61..4b79730a49 100644 --- a/application/src/main/data/json/system/widget_types/illuminance_card.json +++ b/application/src/main/data/json/system/widget_types/illuminance_card.json @@ -3,7 +3,7 @@ "name": "Illuminance card", "deprecated": false, "image": "data:image/png;base64,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", - "description": "Displays a latest illuminance telemetry data in a box layout.", + "description": "Displays a latest illuminance telemetry in a box layout.", "descriptor": { "type": "latest", "sizeX": 3, diff --git a/application/src/main/data/json/system/widget_types/illuminance_card_with_background.json b/application/src/main/data/json/system/widget_types/illuminance_card_with_background.json index 7cdf502d79..c485af866e 100644 --- a/application/src/main/data/json/system/widget_types/illuminance_card_with_background.json +++ b/application/src/main/data/json/system/widget_types/illuminance_card_with_background.json @@ -3,7 +3,7 @@ "name": "Illuminance card with background", "deprecated": false, "image": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAACgCAMAAAB+IdObAAAC/VBMVEUjHyAWHB8WGx+XZDiRYTk9MCeUZTtAMibIyckYHB/LysnPzMrNy8reI0Pd08zQzcsWGx7a0szZ0czTzsvf1MzVz8v//vzSzcvX0MuFiIn///7m2c/j2M7r3M/d1M3t3tHb083h1s3o2s7W0Mw7LCTf1s48LiX/8+b//PkyKCLo29Dr3dEuJiL+8OM0KiP45dQ5KyMcHR/68+z/+fL35NP559bw39D/+vX89vA/LiTr39QhIB/48Ojz4dH97uBMNSb78ukjISDk2tLx4tXo3tU3KSMnIyH77N/w5dzu4NTw4NP77+T56Nn05NU3LCT14tI+MCYrJCHk18z/9ev/9+//+/caGhry6N/99e325thHMiX66txtRSj369/n3NJGNSiLiomXZThCMif37eX97Nz86tpDMCXcOFTv49jh2ND/9Ony5NeTYjdgQSpQNybs49pwRylbPytLNyn06+J2TCtXPChAMCZ5TSv36Nvr4djf1MupcT+lbz6eajvz5dmsdUJUOSf059zX0s50SipmRSy4t7XPoKick43UdoZzcnGQjYyaZzowMDCNXjWYkIxySSmenJqzn4/ee4fLv8HLtLjo4NjFwsFKSUixeER6UjBtSS786dfj3NaUjotQOilyTjCuraunpqSgn57fkpjdLUugbD6YXiyQWSyAUCre2NO/vr3ZTGTSi5eHUyrb1dCglY6Afn3XYXVpQyeHWTO0bjKAVTKkmI+onJLGejisZyzWubrPtrnRlqD9zJvTgY7ikUr3sXLyp2T93LnQtJqVlJKGhoeibDvczMHSxr730Ki7pJFcXFzbY3a8dzugYSzswZqZl5X7u3/eTmXQhEGlaDP917DeuZjHrJX8xI7YbX7inV7dOFQ/PTv/6c7vuobxnFG4f0zihzjIvbPPjVO9sqjoxaX84sXNqrCto5vjqXJsaWfbo6jUspRlZmeOhoDaWG3aQlzZjpjahI+WjYXIoHy2kW+HZUrSei62mn+ceV3eOVRkTTvSrLHhu6eGcmIMaDY/AAAACHRSTlMT77cgv7+wr1+KSX4AACaoSURBVHjapJVPiBJhGMYtiOo21w7dPr4QbBjbQ0iHyYNegmGGdaGGhalh69REM+xMhwiCBKlQ6NYa6SldugiZ63YYRl0oLCxkdRuiUSMQFupWewmi93WwKZEKepw/zh+/eX/zPO9nKBTav+/wTzG4Mr98D87Pau6V6OFo9NSpU/FTyaQUAbHhsCAIIqyUClRVVdHCjWiJVCRUYMMRouVNbXC/XL3cK5XKpdXStWyt7DS3OwPPO+557YuNRne4bD7Rlq+Vnz57trndbJc2P3SeXb4UZjlBpISjonowBNo3LT+oifm1woBs/mWsPlDUB4nHkxFUOMwCAKKIIlUVQFBU3KmWKFAOQSJSMi7uFg2qFvTlq9X19dWr69dd+53TaNmt1hgomu6wnC0BZfl1qdzrXRhU87oCA7MsR4lILM6C8cAPvzYfBotmfi98esjMgMyyzXJIks8hCCyhKBVARKBQgMNQVWpRcISNSFIyKXxZUwhL9EtWjBYKPP/R7jrNZst13X7Xbjpdp5bWTVPPr9bWszeyu4oEI6PXHBUIgTcEnwMhLBSXqSnMbKgCrH+IVxSyFZ8ECwQcwkQUgyUAhKUohqEoQGOpkAoWHUGQXd1SWClMOUsgtdGtjt0YOk7L7jZsx9l23OElmecs46aWv1C6Xh18A7eRREiIlIoWUWGrhAITfEN+qy3olrk0QaYCEPADHPFbBB+HEvCd+aky8IO2wIuEK74j8hvNwB9YjyhYaGrX2w0HQNxut/Xhg9O0h7K8VpQtPr/8fHM3O/gmSdh8CRyXoxS8JTEagtqDZDEzVf8LBRPgREF+sKYgQCJw2O5IAhwIYRgF3KlEwB6RwDyzXWDBmrXv+SqlpKjd77vDYXNs9/teczjs2tuW/qWop8187UKnl323l4yEIywMTAjBicPCiSPEBI0Q+DFhClLmH0f/lKoABEgmyfIxsEdw1oIgURVjhckyFOBQCeEwW3BrtaXruqXF9G/0iixnzZHX77r9xePHjqXadn/cHtE1nacyr69Cs5fefYTBASTBUeh2yFZMRJDZYmYiNef0XJwAJDkJlu8+iyTA4s++2Bvoh2EgCeQbIFnEHW2l93RFM7hwTKbaKD1aWXlwfCW1uJhaWPBOLnl7Mq+Z6Zualn3deXr/4yCGY0cSaDUHGBREsEdA89qa+QtAYMTMn8jUDxafh8Wy8CxVoH62DEQBIpiB0RGwxNj5uvc9z8mEixFe5su9u97CgwfHUisLqZTnLY5b5VqR500tnU53nM1Ox61hq7MJAS2BoS3chJggRsnPR/5b51F37sBy5yEqBwvoYS6Ty4AqvjKVDCqH1zKVl0e3Xm5UNjYqGdjW6/febp07cXphaWnp5MmTx86eGY+36vWN+j3Up52dnU+tF3BrJpe7/R7QMbITEETwTXn1+NB/6wet9dOaNhyHAbzHMctE7UjFaP3ziwd7CRlsVnKQ+CtIx8BbvOw3WC4JHnIIBLwUlksZDG/ZKW/Ai3tfg72HPd9vMJa5tpf4tHoUPjzfJ/o6zzlSeZTqPpqmNSiaVs3TSHaBo1q60a3VkW7HCFQ696zxBzAo78a2G0rHoPT0Vvtq9mnlp9ku0fC5v8UQWZhfhXlWfN39eFVCCgdDDvkHohWQQWIEzqilX3TrlBogjgwjQGBACBIBEoABR799dTdb+etsmzSqlcrPL7EwMRBTCG6ELX/KchxD2HGQ8P/jQhhSYwhVAog9BmLMsexovlZOoCOAXDNEbneDKiTfcVnmIsbrrJhy83QOSPYWbqSAwLF1FEE61MglSYwgC13bAmG5XOKNIdJBWi2CoBLfl1QJJBshBG5rYd4Awp2cEHJ8WxqFHIMEDqlGeo8glwzpBCp0PWsJB8WybA8jUWDA0W/jtiChSkiyQSPo4yZGI/vfJs1Sl/40BGEJO3ZZJqXCZXVqcABSRyNy7Xq2lSus6dT26LaYwZD3dzNIMpYAIlDHkMZOEm7kZEvnFJBD3uKwsjSVSjeokAMkBGRKEHbYfFuKISNASOL7KY4r0Ta32IgYilgAQn2UBznn/MdxJGnkjoly9Is3XEj+2HKk70YEGQNCDrqtyajPDobQ3kOSDB4EMYb81OKA0yzTAclLndBAMlkUUkAChnycLjF3DIQSuT4g5MDWc8hqzpIHE5UMScMQTvNkfRyvhB1cyBoz7nVQCE+dt+5M/G+fvSk/txjiEeR6RAw4AMHc7+9Z8kvc4k/EgHAbz23kLyt2E9o0GMYB3GMwrUGseHDWDzrBTqQTEVsmyraWqgiyQ4bKZDLYFA9FBrJeKoqRVnIQtjUXka4MPzY/KhT0MIYfFTaKTnAojDKE+VkceFBRRPD/PG2WZImrB/+YBbdLf/zf532T3kqO/w8HJBbL6qqjtZkKAQSBgyFoBNO+C6lCooBU2tiP7KRKEudIcj8YCIfDgUOB8DJSYET+Dhl19/wzZCkHGEZ4QLCwQlhYVAgg5EAhnjorpKsLhRAEbYChQw4ePkeS+8Fw2BfE0tqGRqrvIv8Lon/qpShYWAxpbcWR7UEhkKxENqzwbqw7ZkDg6EXao/tC5NAhuB883NfX3h79GAiEA7jCgJDCCdJvg+A3powogjD/VCgUHSBSVsHHXQJiOGhhbQABAcPrIUjUgPS2I1yIPh58Y0hHR/tHnOwB/Nu2hSCOM5LsGRA4F2+NCZyBnqRgSkoWBLWIm0MhUqlEEMk2JFXLKosDEFxexOPx1K0NnYj2dgGyHZAuKHQIKBxeYy2QHO3oeBKEAo1swYywwwYZc7shMUIOt3tsSYjhkJS0ZKuEXQuFsIN33oUykI0b2/xYWXCgEYZEEYL4GzDuHJr6nbsPHibJjp/YsWAJh5fpb4eLG7nndo8umhX3PedGhrQhupZrKU0tZ3BJUrksdWo5tVQQxZyqaoqY1VJqKSeK+HMps+r8kKZqEzQg7OA6SEFP6v59iQ5yVCGxGCCxyu7r92+i+PnJkSR97x+fpkYIwgz7OQIJNdI/PjrsHh69xY3A4Qi5LGeXZ3HJaiEll3BlJU2TUnI5W1LFLN00sVMuFrRIOq1qL3AbkVOZklbZeTnsYMimBpwiTXu3VyC9gMQIEvIjcFQfHRto3kGZnPp8NegL450ZjVAnDLFP+wcsJ07PB0iEWpCUKy3nREXurEAkMSWLaUXJFFVAFLoKckZKFzPlrRMTdxsnmuu9XnMfXEiohSFwGJBoHJXoEJL4+SG4pWVqZvKbz4eTBEuLFcDYIHAMu/XweNSGuOTORRBFi2iq6qpCOmVMyPk7842UtycZ4jU5aGWdMjcSjcVjPCQkYQgHEt6M372cnfwFScAHiH3XMsbbyPBALYjLCeLKyYorZYIoUvqSmNo6yEcIIEg9BQp2NFQge02QWDtXgim3SrAN/87PTf7oxrAHePvFZYPwvJtz76+QEXk+W1yASAsQkRrJybmCGtEh6YiWLUfSmcZiJqedxOdnhweOOooO6apC6AE+Ho/xBlyV6JBN/Mjy5Hn+0/vvAV8QEIozZNgCGe4XLMmpgqDN8y2lRubVrEvNuUS1ICrqC6moSTlVwo4lpouRUlkdKaiKiEvKlGRt6MqVj6XG0mU4aE3hBocOWU+QA3shqUJC8Zh+lMBhhqCT19evzU5+9XVvDuvDbpmR8WQy2S9cdFtzEadk0vkJ0vKcJemh/9DvzE9geC3kt5ArzfUcDAZ+6A7+liTRp0O2MyRUgeAphQsxIKjk9Zsbcw8fXzgT5BlhiRlCszGAM9Ea7MG0fzlDEMNhQJhihZwnx2BlPsDg1JkgLYmOA00EQQAJhbgSlqzjQtraqhBU8nnuxvTM5JMgIOQgTG3I2NIQlzPEZYHgiyyGtDaTw1NvKEwjgkIsEKMSbqRObwT5PH3t+MzM1B5fNyD2XWsAwc9FEDpKkFqFLA3B3ntzMFaFwGGHJPqoEJ72CqSVK4lCYoOsf5d/Nj03N/W9G5BKH07nyBcDYavCGcKpvbJicUDqvcZw0Mdra8PNjxHhQpp0SBwQVBI9B8j6hk0sMRp59SB/++zMp6/Bbn7WAsYJMm4dkX99F7EXYvoTQ7gRxHBg5QOC04FGBF+hNCG8tOgAaQ2dwJmYIMg6gpBDX1r5/HT+5czskTN6I45viKO2Qmo3giw40iPiIsca2rPi8cFjzf2mPRfhGaZZ30eb1oEufv5lCB7fQyfwZps41bJ/PfYtC+RV/tmz/Nyj2atB+5cPzkd7j202/tBud7EthWEcwF02IwSZiBkzWYhl6QUjLqxLt6Q6bSQ+oq1UGsxXoyIymV0sJalKL6QyeoHQkhCN0Au2ulh0rFoSlCEiQUwlEwkXIyFu/J/n7bODM9/H46urSPrb/33e95z3vCLxbyFxPSQRVYpkSL1PkFiiaw/tOLwlgjjkGqoE8W7wer27+CaX70Ts2GvY63Y7lyycqSJhBieSvnTn7MATNAkS+clOY5cs7u+6dH+XZUgsxL/FymKpGCQm09iysgmxshAgplAiOnZcMjnOdKpgGmtKxgCZHCocHET/5qYqSD6Pj5XLd3RUV+dyfC2IWQuK9r0ouTfEe53t7YAsb1mIGVgcVK9epm+fvf3k9afdah2RZtfV+RLkgGl0SDzbn40ls4Vs8lQqOo4yoJ+pQsQ3Iekr+KJj+wvZRCySDcXwVYhvDaODzc14nMOQ7qGDxeri8NDwYPXFnnARl+cEaW9vx0Dy+zs7t6Av8BbuPRxrHY5653KKhBkCSaefPXjwpPejLpE/hISSyVQo4UuGkmWpcQKZkEpOyIYKCbw0hWJx3zh6txCLFwSSH67oIEhHPlc8WB3OV/YMDvZUrni7ApAWvxsQt9PZRGW300UuOVCQ0OBCzZR6NdD38PWNJ5mP68fIw8PRIftlMfwBJOFLpEKmeCTLkHECiU3oD/XHqUci0ShDoniRGIGEK6YTpOLg0FC4+m0OkOJQZeVwB0ZWk4KUJC0ozsNms21EKOamloVf1yOcWklfen7v1m6afuWefVQJF9ZCPSSRTMZ88VgqFE+U9SfKUiZA4v1jo5RILBs7FcXLZNZEiRTwF6ZYUiArhnM5guSHq4vhyp7iiu7B/HBHLsy7oXCsxUd2O1F+/KBdBlsDlQ3v4+0lX9WjgavpS+m+DA+tnz7o6TpP1WXSVySbzcbjeOoZT+LJZ7Is6qNmj/gKp9AjvviEsn56ecoXjZiSEXoRSfK+3FBXc23xYPdBSqQYHuquzHV3hwdnFrsv5tTOWzu++0RxtFM0cNmWLavDM/e6OkWBZTkhlqPupq8OPBjIPAaEHPRzVIhcp/Dc+/sLSSr27YooszJB8BwHE9G8Cp53aUehMp/LXczzQFlCDIwifPNL5V271mvDSr+NSiiO+gWEYAgCeYA++bDpl5vYm2kR6fozSH/ZBL2E3sCObxUgdNtaus1DdfT0DAKBomGEz42iCBobl6lqXOlatQrHB1aWKK31ZvMCVXcHXt++1Ju59unXkMNoETj+AIISBTkgoT9lq5QgdjskYMyj7XXMQQiDRgp2RdbStx+PRlZyufB6Dr5aNZ8KFpY0tEIikBfP71x5krl2FENLTjcB8velf7j+DUQcBKmxAoKrJsWgWoiCY4HbAQd9bir+6C4UGItWUy2aDwkoDRtbj0kkd3sHzrzsu/cwYFGbD8ZDRIJ3JBByTJ49scZaaydJrXpow0WtKw58bio+MEAaMOZysWSlgqhI0COvr9x+lrl33WIx4EGPfmzpSwIpnz1pxtZ5WONmcokCDqdZOeRz80dfDQ++nMI1dy5nMkcg1PGP0leu9vbd/EAQpGEYRE/5LpDyckDW1doFwgyeSc0IpKFu2yo4pkgRhhnTUPiSMkEkODtUTxKefi896+17ejnIEKYYDxHGt5CpVTUVuHyCopYgJcaCBeZ6QOasnL9oLn/uEYxiiIQhEgn1yO30w0zmlYUTMeTAwE8fvGkOQCbWTJ9XSw5tumKHgqxSEKGIg0oNLoGoKfjRg5cb7137EJRml6FldCRSysEQNMmsCoFwJOxAIA6bGlpaBHilXsuXBNlWh7FFkZDkUTrTe+3m9kBbsHTRyIkYIRndIoEwBBMwR4K1UCBmCqR1IyCu+atVJFJ6yEgkqEcDjzOP0eoWQFCEMQCC+jEEDgWZOmkGjy1kwl0iiQBiq5Mm0ZfqER3kaiZz9zMcJ3TTr9GZSItIIIAgElrdZdoiCSeCSOZsW/WjSGT+FYiZYrx7r7f3UyBgCQTUEQ789t8h4pg6aWINX6a0cC0ZGVvHeGxxJCzRO1ZrkHoFeXWz91UgaCGI7M8ZAxHJ6HMWIHxQYwZF0tTkpxsnToQjqW9ttVGXQAKKvj+0axRbq6PezCne7Lt20hIMoACBxGAISgdRDiRCkWBRxBaPH3eBS6hk/m1dS11Cg0tC0RjskOtfONS/uNb3CYFgaAVlg86AQzWm34HIWSYrSZwikYnLUZKMLO+skDhc2h0JOcxut+Phe4qjLQgIhpU0u+GR6CdfcsgZIDtDWCKDC3sMDUoCirJoDFpBGrCE4MaKA3Gjcm2BIBhIRVZ2gyEofYuoVueqYgl2FyCRtV1JbJBsAwWpwMJFDhc3Obqc2sOsHJ2d/kNtbW1B5BHQXf0aJ9Eus7TJlyEiwegiCmJREJRIQHHBglxQi6Q5iHHsWOn20Injv1v23NoZDLZhcFkAkaehhkMg0bcIDCKpURInFRyqICEKUkEspTtDSYMcNKpQNCjtOFp0KBBEWdDuaHbjE5FIvr6C1wLRJNPX1bLELCUSW4Oy0O2ua1ujMMhRuhMhhtV6rscCCYogPGXhl6GnTKU0iOaYOHLKrGZ6BSTYckDhEyqHA5KNG7E2goKqw+4DGMpxrHQj0tRix1HIcxeqeoLoESyHHoLw4DIIIhJx6CETuUqh1HCj+J1wOOqp2IFIAIGEireGoGAHQ5xwgLGVDkJ206jCL0AYQRqjICiF+AoiyzrnwaUNL2oUP5YELlagGlDCgAOlJOC6nS322nXWGjhml18MeuDY5PHwJrY8DDVQIvUNRAIRiRzqJ0onURRiGRUNLL3EgX1Gv53jAGN2eTklEvAwhBBGLYh6iKyHWiAaRBoFoTTTMyns+XqVopFK7S2iQbiwha0YTfbmdVtrqibtm12OG4NuzFgej2exZzHPWvJU1/h219Z1hrCjSqOwBKEwpXPvXjyrUgwXFbYWG8Histmw69sJhsQBBuoiLSFIZJM8ntZ6xPh2Z4hyaBCx0NdEsRJl6d41Xjxw4yM1Lq5GJdmwzOvd27mFVg4rxTG1HA6GWOCgTAii7cYb3yUysgRCjKrxE78vplib+YjDml27NqhnunygHDCcNKWHcHsQBjP2CQMQxIFm3+RZzBC5HzE+Eq1FZGSNV/W9pESBBRiybICGCEBAsQOP5qGgo848qqTCFjBQiz0ytAxPpGT5HlJVgoyairIcIQw0VHSeEYgjzcetW7eqI/SKgbPckogH/8V3E5pdBzFu5pJIuEUUhAxv7qNOj6SjUdhCGCSD2kG/NaOsEgYY4lAVRptDsVidDvq33fiu819YOX/XJsIwju82nqgJFJT4KwgVKVkziFNnwTGL6GAWK7RghkwOcgahDsbFgu1gt7iE0iUXsurQya3kD3DI0NZRKvg83+e+ed/cnUHu+rXom7Nt7pPv87zPe++973UHR91RLwHSC8dHcjhSRyxFBEQNqQZfLoo+BDP5tgQxi2xYgpRBvADGsmBUvL1mAGkApNYoGlphf7bC7qNH0uvu8XAkb1gRMbKqZYIkSKxPC8AyW2mj67nK5UB6OnIQAyjvGw3JkJqCxDuNczrS9ZfYjWYgc6shT63TIkiZIAkSSl9jKbNJmvoNAAEHMTBkeNuoCYqsYMaGSoLk5qBCAyEHNfXKYTK09DRJQhkJhW9wHMSALokjqlrdciTfZjHeKW2Nw3Cwh1ZsyAAGdUfhVxC1vvsgZQeiLxaDOA4FMT/0HhJlIPVGvV7oCnGA0+yBCSShGYLDkfZbPaTQrxlI4HJEGXCii0n8wIIfhkGQmiZ6vaYgtCQHyAkW1nlRNgDIGMu77A5WpO3+XO9LECgbRPTPwDKCkgNpyF4xrI3PH1qIID/M+ogsuNAzkCW8+C4kC0G8YWSChIFVoSGg4CzNZyzxl79s+54qL8gJXzgQtlAQYc8IZYRBQxAUxuP4Mx/+UH2LUQKIkEgQj4MSR5ThrmwYWzFHcm7f20OCm3ozkJ8IMt4cHSFJMkHKP/B/ZsghDi6LgBI4qVEMLGJQ7+u6wF+0Wmim0WLI+lwsiDpSkFBbXYKc4biLrLIH8gex+U1BTrU5WTaRhBzOkCTI5zWpIUKygo0wuSex8WkfI8F76GgjbY4IgiEjsv2wcsdxeDlyBEoNnglK53LFJ0kGFkBK8yCra/BDHcm9xZWWDH6KCyfx2dObrqUIQWhIdR7k229tDi9f+WC4UEwiUgxwLKcCiyD11fqq+KG9Vh5HKPgAMS8A4jsyxCkyQ8oeiGqqzR+Xh3saY8NKggSiIdkgKwKhqqsjRSaxj9xQa2yXIc4RDwSRdTMFEgTI9+mhlU3IUHhdnMiQUgoEjyxZq7X9bRc5FLY8Q1DLfZAl54iBVFMg8GKCTL9KxSQiwXAZ4jgu4AsgyiGuNBrFQMbmRctwWmcl1T9BgiRIINLsgIa87PNIwAEQP7B4CaogwiHPWqq7JeW5QEJgfJUiHnVBEjmQOLLmHSl7IKzaE+M4tOsMY2Gi0BCCAIOKHREU2a7bLDRoZJergjnHCRDnSDpHOPqYgmMyxHhQBFOY84LByAIHQUjyTp50I5HVbm+KI5zEzmfIgL/UqqP8cqsjpbQjQcIR611/mSNnHNSKKSSJRUMI4hQne639HHd1OdbK1WOF/HBszCsNq+WceQhx1pk5AkOGcWj1lwiSJEkHFiWhpY6sNtrN10WSfYAFqDGHRdRY3q6HIKMjNtZirfZBqhieo+flj5Z8T4CSzpCEI5rqzebLDQ5RcoP8JMh4djYYSxIEtk2zQGDIKToJ1EMNS0cCFBNrSCaIdlkAKbDyAec4JgiwRvp+aIXxnFZLz/EOQToOxAxBYA27jEY3E0YSV9SJ4evd/ZU1AdnZWOcKujw5EtqVrnFEiI9I3w/Hj+2UTpHrWSBiCMdYwAW7IzEUYNCQTBBkyEsFwQ3EXI709nBlFaklVuL7tukQ7a6ekh2eAgRzWh0PRDIdH8Xw0lKIRilJAsGPRSCbDzfW33hr4/MUdqg/GJxYK7JAHlmhPx70rdZVYpCqnyNqyDGI9Tz7LD5MFJRG48jOdILUNLLebHOmsfi8lnW+RsLjca0TEOa6WNKJQXg1hfOMkO9irr8hS+Q4skHkOaDPn+ysv9lFsudfwDyW96daYYkgPkl/WCFIdR7ESsipJUCXl8oeCVguZQcWQeq19s6r9e2Dojd6Pn61qNrrj3slT9GgZYdHGDgRBDky/S36FVz+MJlMWkdxJvdOWqIQID6K48gEWZXIEkO2P7H7zf1YKp1tCMOI9R2ydiSHv2tHSkdEnblpN6l26a41sQMz2xBKrtmbm68ksvZnjhQAoZwf8Qt3b4Qg5U5HWTqBkGDWzfrWkip5Q5haCFK/KyBiyIE6AkPOBeSCOyNX2rxbCrEZnD60YRQtSel/QKzP2v2071f24iQAcf7wthsnsN2ktQPh7EhCaUcuZILcbcuTKHcBwiQpDlLC2es/DC3h8EEoBxJXbvlDJcAWGiITdI3NHQXZ3+I9xGIg1LwjS/MgN+c5eA+Kw1xconPOBOHmgagyQZ5JZG3vHuwj2YuHFuVfUzNFshwhCEiQQf70O3ozZ8tCkOaOpLpE1osCYy0qaUiJrcUgMQkoyrIh3J76p7uo9Yl0cEWUCeI8f9t8Lam+fbCF0MLXuYSWUSx0pOxbIgLG9dv3dJ286IZuxn18S1xBz6xaCLL5SkD2t7aecsr0HB0BUAYICQhiCqqCgYcaQY8e6Hbca+LKFaLQkgwOAdlYV5AXL/RxIoZSCCTtSTq0sjjUjr+9nVnoDXEUx215kqyRfZd9X7MmZN9S4krWxKVLl5E749IoZWjyZimeLlJSdg8eUApRHiwvwgNPvJEn5XPOzDHDXEsMZ2aue4txP//vOef3+//m9/sd9keQhZTRumImwy6YyGJvSCJR2v0cRAQpAxLgWoqSE4hZumEHJJu0AFEyOAbMilcVT9IpmIrStbO4V/1xBzO5/4G92wj1w8XVRUA4MFwrD5J0c5iAtDeQLikQ+QgHux7t0hmyajq5d9TIiaOjQFFRMpIk6f3CNronxw4frhVtkn8+IFhdkIxnteTACHPhUIy+kSkKJF2VhED5kSQq+IUdW+hnXUISHUVRmH8F0rp+iEQtB/Nl2U4LDhDMIDkxZIHEye6EpJ4g3P3qtuNXxLMAsWYkX0XSM5zqN+yihwqyZ4VxJCTrT+BcQgJwlsQE4eYXtpw6dqUIyL91LQPJKmKO1ZGN2mYqSNpUkomAdN/NX4WkLojc+9pxQA6vDgBJ7a+VqyTfdbVMEDMTZDwRkuLYhCHJOo33NImBpAVpDQgpC8/CYkVa5B4jmT5jBgOQjhGIAiwx2ySSxCBCQtNI5oLkuwiRlb9H6J0Ug9VBoH0tjnxdK5t9s7144VisuVcXjLA0wWzJEpVEwl1JMpLEIHD0PEJ3seh5gUfWgkHO/wzCL7y2KeMcOOIVFvECfEhmzh0yMSHJSCKCwNHqyJVLRc+Fw1zrn4CkJ8pmBNkNyOIIBI4RY2zRiyxih2TOzLnzpnU1kvZt25kiSYRI83T/0uHgbu2ut7qmY79y5gpiA58GEgvSJRFEORbr7pJzotVhXw2cEcuYuLxyz7RZAyAhCbeKfOs7QViaef+SV6u5Nc/1bKea/EGUo25XyzwLQdhs2Rbjp1exjxkzdtmUCSv3bZ6NKNpXMZBEEOHocn+1V624LmcDIP5tjFh7mA312LOm2MJDzFjwMdnsd9+e2V1FkgyICNKK6bXParVq9WjFrVSIkVxBft0eGgcg/dWzouW5Zh1MlqUj2JN15Z7Z0qU3EOMQEBGk97OgUq0cFVEEJBIlzwaxWd32sEvWs2hFCBHWtKbXrhvKGEj2be4KSHPSVhpEt3CGo/czvOoomlSP0mmEI+8GMZt9AamffG1XAUDMDAaSKSIJ0a4gybCGCgJH92fVChhimUHs/EHaZ0HaRCADtBVZgmdlOJRk6Qgkmda5Y3fLv8ZBqONYTHO+40JyFJQqIH+/DvE3Y71LAoLFIBYiJkTMwKtKMmHf5gFpEG4dh7pwdLxTiRzrVSWZwvFPQbrppHgjMRBLWiYIEFg6eY2dsHLzgB7dm7cCJCNIJ0CqFawKTHrINDcSaw/Tsc7+kt9KEgc7IBoiQJgcXPVBmilHnHtFkB53jlZAEUlsTmPOINlf2AHBUiCQ9JBfD2kPl5oiiRoW7YDgWpa1mmFwxIKwrdWdCiCQvHpFgxhbfiDfLYCJQt04LG9Z53flnOFjNUbkTJuCaLBr1oofomijboIIyN27RAm6AJJDIZVfhEhGkEQSomTKWPUtEyQdIpJ+Z/W3lh0zx9IIYZ+xO3c99OCUGMlfkQyIPj4E5NtuI207Y3P7qPWkJBk9yL4kra54Fp1GOMyx2O2GNoQIAaTiVQJJwbiWzdfKDQRLQPSpm21vD0laE3OutcNJwHU4iBAE6SwNO7FuIK1TgohrVWjcq9KOWEWu97m6FhwxSCsDwbL9RnWuCZTfsghXs3adCBFBzLNMkATkAz14rPLK0i/XjHP5Zl8b0xIQOCKr05PvujFxrm/bkOGkLCIkEcTaQjxLWiGsunp1zXU9wt3W6vLyICdJ4iSpIJZ864NoV76zSLJsTJy5uDiso7Vv2oAeGurfgpggiz96RS/wam7V1S6KjWwdev8nVeoydlAL1kmNOgrRsWuplJu7b6cZ77mwZ8/evXv6+c2924PSYbJ00pN7b948vfPsGX/v6gFK38lND3JX7niEf4Xd+VD1AFkNiBuDWONu22Nnip1y/aSSo5Y71UvPRZT0lNKB1Aw8uX3bti2n9h93rviO45TLvlMqlPxC4WIhvMhr6Djnz585/egGZWY/vb71/MnbE+tPvHj75Objl68/Xb/x6Mz5s4WLW7ZuYFXFokXUvJy+cAOP2uRh9OG7d++6lSBgJMgrBjUixWJETpXlq9mnmE4/xZwGZCRQxDiAzFAQKbm4ZtXJHTsYLj9ecMrHnLBcDp1SyeeAAQqft/5ZSM6cvnHj8o3LDz99eh3Zp0/XL984feasH4Zbtk2ePG4oRRMpFtlvaJ9VW3XUuhjcJVt5tSJjc1DUuJLJmT+vVJk+lSfhUFGs5mlcLlSq6aKIPDtmoogPiOgBih+WyshRKqFIqVRwRJPzFM19hCzgXL58nevGjUenzztnC1u27Ni7fDlleAYO5LYDma4xmR/MMcayPO8uMe4FwWEGGRHGU9eyb2dv0j94+4wlryYeIGpTjWMqF8ZsMKl3Csf2bYD4p3Ar8S2/VHbCAgSFixfxsbCARoCgibJAAwJ2Gp/yC1u2sbnGBpZ9MpNUil7KfOvtMsuBL+/erboMZ/GuuBpZ0MTGftORkpYkESDGixDSxTURZBgUsaki8wfDsQaQk4AU9vtl51gZmFD8CxrkCMHBCgUH5zoLihg0MPAZ3C07dixXDMrO9hPHmtGv14blzJ9BDwLDPcogkGIEkHherUHDmCD9XRMVvhOmRZpZMTA4uBQCWSLX6tdn/pqdq04CIpU+T5UxvAuOkO8Oh19AFN74pdJZMSQAgDcC4RPhO1Bj+bhx1D/uJ0WEMdx1OwKf4rEOESKtRy0oQgIVR9CgkY2ZmuPYt80mL46UIxqHBXuiySJxrT6Uy95+chsgRHtZE1Y5LBPsMIDAJX8SLPgcBJwOoGQAIgMMEaOXFBHqBwiCyD13Lj+5//gVBLnrEiGBiyJwHOYlWN2UItqpyDbvN4qfFpw2DPyKAwIlgoP/lCrNCymfqyCn4Dh25QouhRHnfkndKpRYKfshhI5fDlUJ/yIYiEGmooDFYCloq3pwT3KvTGg6JU9DPH4JYYAxKELBk2lQgsYNkjLadmDJa9q1shwYGEnu5YxcK44RKX2NIsdwK0lbIT9/vj9ZtRBCwSfhCh0fHwvPlkWhHXt36G4UfXqJGEohjkX+6LVmu6ZeQpteIgFSlOQrFIeDJo0bfAFYQ2yPkkGEQQAAAABJRU5ErkJggg==", - "description": "Displays a latest illuminance telemetry data in a box layout with background.", + "description": "Displays a latest illuminance telemetry in a box layout with background.", "descriptor": { "type": "latest", "sizeX": 3, diff --git a/application/src/main/data/json/system/widget_types/indoor_co2_card.json b/application/src/main/data/json/system/widget_types/indoor_co2_card.json index 3a3c955819..4a75cdd889 100644 --- a/application/src/main/data/json/system/widget_types/indoor_co2_card.json +++ b/application/src/main/data/json/system/widget_types/indoor_co2_card.json @@ -3,7 +3,7 @@ "name": "Indoor CO2 card", "deprecated": false, "image": "data:image/png;base64,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", - "description": "Displays a latest indoor CO2 level telemetry data in a box layout.", + "description": "Displays a latest indoor CO2 level telemetry in a box layout.", "descriptor": { "type": "latest", "sizeX": 3, diff --git a/application/src/main/data/json/system/widget_types/indoor_co2_card_with_background.json b/application/src/main/data/json/system/widget_types/indoor_co2_card_with_background.json index 3629187ba6..70230562d4 100644 --- a/application/src/main/data/json/system/widget_types/indoor_co2_card_with_background.json +++ b/application/src/main/data/json/system/widget_types/indoor_co2_card_with_background.json @@ -3,7 +3,7 @@ "name": "Indoor CO2 card with background", "deprecated": false, "image": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAACgCAMAAAB+IdObAAADAFBMVEW/s60AAAC8tLHNyMrl4ufn3+ewpaG8ubjJyMqzgFn5+Pn39/j29fb08/Ty8fHk4uc7kRzz8vPx8PDw7u/Nzcjf3uPY1tve3OHu7Ozm5Onv7e7s6+rLy8fKycbo5+bPz8nOzcrh3+TQ0MrZ2NXt5eHa2N3e3drU08/i4d/r6ejk4+Lj4uDm5eTS0s3S0NXW1NLU0tfz8O/b2tfFwcLn2dDR0c3q6Ofc29nV1dDX1tP08vLJxsnu5+Tf39zg397T0cvw6+nU08zLyMvo5uTV1M7r497o2tHZ2NLj4ebp4dzl2NDPz8vY19TMy8rBvr7U0tHv6ebp6OnCwMHc29bn5ODW1tHGw8bh39zX18+Btm3Qz82+u7zS0c7Ix8Xy7evZ1M/r3dTp3ti9ubjo3NVqqlLLysjs6+7PzcjPzM7j1c64tbTf2dIgHx/b2NWcd1dSnTbe3dzr6ezf29cjJRHQztKZxIqkgWLf3tjX0cyXclLc1tDH27/u4djW1dXZ2NfZ2c+iYjfl29WnhmqeaUZxb2qkbUfq5+Wri3Hb2tLS0dCgfF1pqVE/NzF6em6hbk0pLBUdIA6ylH2SbEtlQSipnpi3sbCek4tGlynr4NgxLCrh692Rj4tXVlWMZkYxMRmyqaWlpaWvpqKUk5A7Oh+cZD6VWjVsSS6TVS3d5tiro52jmZKNjIl+Wj1dOSGZmJiwr7CreVWdWzBWMRzJpo+KiITAiF6mck+vbj+GXz5zUDVFQyWajoN+fHjEjmezc0WmaT9IQTmioaK1mYRmXVKKTimx0aa1n4+wj3Z0Y1auzaHCrp+yd0zr8OmHg385OTmenZy9pZFoZF9NSEOraDmsq6rFk3B6VTezraqAb2GkyJaqm4bKmXa0gl66flNkU0eVvoSchnmEgnZYUEhNLRu5r6rbu6S2pJiNvHyMem9WTi/i39jS4czItammkX6gn56Tgnd3QyS71LFOmTPNwLuXXz3FvLfKnoCKtnh/ZkdepEW/nIaOjHh2sGGRi4NmXDK2y6Yjmb2TAAAACnRSTlMgAO+/tyC/sK+vmYehdgAALvxJREFUeNqM1EFI21AYwPG6KYxV18NoHpVdCgvsMNqOMnrIkFEQctGuPfQw1x08dEWYWBKEHepBAuKwJDV6kG7FWVA6xJMDWzyURdwQhCpFd5CBwxV22BBGLxuFvS9NXxtfrfsTayRP+H55Ty1dPd2It5ninYhlXDHOu7uz9sGNkP3yEMTmQqydRSyJaeaBdieQsRx+AaJXevRcbfJf3Q1Ll6XHTgAUpLKzQyCdKKOx+oR1DMOilvlgwtIEMktYRIEZw0EX8xtxODOAPAhbLN22/4Q4L5MABH8j43nCDHsBwpK3gdpDaIY4NiLWb4aGiAMkOoaDqwUYvm7h+Y6Qk0DDodcRglh9wtg70XxkYEfIcuJgSLRDFEc1WU67RP+m9E3i6i89xJEuMKrV0DULTH7RQiDnBOJs1E5SDtudzTcdW3Cx5i0pmR2wiD5YDcJIuiyWNVmQ5aSrfChnBSl3/OXvwUFBOKxxLRHGWWVmelwFCImCqHC0TBBa4rSjBQ4BxBiSSwOE5KEgAKYcBsOfzGZ//AJGJsktZ95szBW/ysrnbEYRMooijZgg+Jx5q9XKp9fz+fWOkF117cQEoS3IZedRLcQ2Ici/b4JQO0I5wAoKaKVQLGQVoSilvaK4vzy2lJEVQdnGn4osKLI2zDWD87ZXOkvNq/nVrc6Qc/j3SxztKMwwy6P3XvxBJLENDxwcGkIkLP0nAo4Yjjudy2pztSFR/3FxCe8DTioKWJIRhIwW4lry7s2kZtbV1aP8qyshCQQOImlW93kWARJGvKHAW+M/ZsikNMTk8DQ3BM8NiSJXOx4FBoTnz+oQDUNgT4SCFgk3GJFwtZQaf6uq+fnxVCvEEb0N9fdH40EHP+B7+fvjn+/3gvFoh2zuYDT+1BmPxvUczmDc53UEIYeR7f4LeIQXG4saz2wOG1wQfi8DE74pdyCSexaIPLwzFpmdDQSGt5Pbm0lcbiWZlCQJ352eegOJRGIK53P7Q5XpSXXraGvy52QLJGi9aWS19vb23Xr+5O7g4KPHD/qs+AFcVnzhL7iBRRAs/MdYHau2DYRxAN/dxGDLg5O0VtGFO9nyITgQOkGlNDgQgrSURksI9dYlxIQMoekWDzF0U/sOnfoAzarBgj5Ahs6lQ0jfod8niRNCSZy/E+KzAr6f/99ZedaKBa46HViWUZfxehl1BX/L6512W9uamMJjjMMP50zGEfHksROGocMZd/TeS0gvZMS3xuPJYLjV71+/+jO7/H77db5YJhVkY61Vh2xWkPLl0lIoWnVItQDHMyDrVdDe7vaHI59I2DIwDAMlXizZseOAw2Y8LCBHjFDTsqzReDAcDieXNz9vZ8nvLEkryEflwDdbr0OqstTfHFLb6VoDgnkMUj6qQgYWjZhjlOFcxrFtS8aY9CKPQSUQ3ZGE+j498wPrcHI9+fft5stFslwu5xVEa6kgpBit7XojdU4JUVtXqpWQZiFa/904EDYPdd3Qdb2nF514npR2RAQpJHrIY0GpKwhxffPg8CD9MUvSRZL+LRrBY6cg1WgpCKSqoRyyIoUDAnt9EtKcrPpgbWIhBHaL6UFAAqeEEM+LBD2jIoayYMps4lIqIjv2Ts/v7u6Ws9kcCsnSarSakA9v32xXjTRTQdptpGBWN9KEdFQhHg9fVxC5T4QQJMIPP6DEk1gRLAIqPHbMpqcn51dwH5mnizRdJg9BXpSNrIKoQtoYJemsaKTBUIVIByfLKCBcEjefIkEDy/SpgHoEPDdNH0bQ2dmbnpxc3V8ssmWaJAjZwMdDZ0RbAWmpI9LFqFLyJytGSxlyBxQyHAUunIPQcDhHiW7s7edNiGLzgU8hPpxxywwE/OfOpxySpfMM+lDfWnB7ao7WMyGdHKK1cwiuITlE7RldDUeJgHS7fbiHQCH8yOFMSpDoxm783jehCVcIlwbo8AMTYuFrkWS7088A+TVPsmSRZggpC2lCtOdCYCuapnXL4cr3BluvQ5qTpRRdrb81GFFiMwccHolixg0uCTXHIwsgIMFQHxEmmlyyP50i5Px+MV8k4EiyopEVkNZTkHw0ckghgYlHEzpqkGYhqND+c2J2oUmFcRjvOnVY88I8dTxozHk8IglOrXSMBl7oqlNIZdYgFkUdzVrZFxWIYG3EKogwbEi7XKybLkq86SKiqBMbXVQXxbqJCoLuioJ6/u85042zGvUQ6NyC8/P5fzzv67DbOS8vxoLgyPg9KTy1Ox2JpMEhiiK+fbc7hX8YwbAEMSYI5XKJM2cOg+PY00rpaukqmqTyF5C9S4MQh26Igz0+6xhAMZA2iRGEcRCG19uzSfLFgml/Rkj6o0HWF2hrzYBC0I1Nom1FbYZFA4Fo4uJFcJAAUqHKejxibHbSPEf2rjP/GQQcrDYIZK62Ouh9h9YVRpAWB1UVMHhJ7N4R63KnkUEoSBUQpHxxNDXlEDZ0KXmF9MwSiFwKZf2ewQQ4mN4UKwRSKZaWLK296/8MUgjjrxwOh++cyECk87yFfbLhHt8Gmdfr9fo8EPSGd5Mv1rUd33OEstRAMhLslnp6AEfyxcPoG38mmXSSkB2zoUxSEJKYvKgs0pnZb5i/lUq+VNIdMYIs7chxVVHUu3aOayqK0gTIVBWvKwjkoRLGoxsdqdXmQBgHWx7RSD+SomBbg0QY7RJ7OI7zAmaT2B1OeRBZBMipoYBiYMAmuECCVgfHmdmxxrdSfqRUyi+bM+QPIFv/6EhBnS4cLFcL8nPl5ZaHyr3O3cqkZVLZTYWvg+goRhCtP7gekWYuNqBgW71mzWohlIqJXjvEUf8XaEGCwmbTQIBEIKuFA67evlODgxcwuX6MXRkfGcmP5PO6I9C/gtSVgslyXn3BV8syZ29Wxd3lFZbzyt2VDg2k0FRrh0yTZbO5XuPNk+pMnUDaExsNIu0IRliqXQ0OgGTdMThCJGRWOAo/NIFVtwQgNtsBZ29vX39/f1/fZVxKfMufLuo98l8g5epyk2WlXd6svADIQ+UcmsQyhReHnYGo6qFyVZ5SZHNt2tys1ieVbW1HqLDIkJTfCQpg6CAFH9/j5Tg7h+jl9mSoMzIul3ZEcSU1EJDYnECBXLN0+gVGUZtaEIEsIFkaRAVIh12+rkzxnP2Lsg+zakC5hydkINvw3LIyJSv1sFI3K02TaaasgdBk66DBi5gYyZAbmjC0aHlIEli8vA+QSepwEr58ml2oNHCQgEKy/cDVypX3xZH8tWV6iv8PEDhiBsiAMiXJ3G1lj73znNpkGw5Y4bpCmjTVputVS5D9UAPIAkNibo9T58DDMZA41O0TsdIBKQgE4sHg3RkhlDmQ/UTC9GMClxLDr/K37sMRUPxPaU0px03mAeWFVK0BpKza7efUMnFw3JwjpHq1VrbAGvZDGwSGbOoOp0OaIezBBDo0IVNRGokVkOkFdDkDSScSREIgwKD/sV8nudwYR3G9PX0azQ4MI4hpyAod+bR267sb9OasEeSoOrPt+ox6SZpUnh9qKve4gFq9u3v3Hk4DkdWZg9umZZNcVe5aLLXqtkKz3gahkYVW97gwrlaDYwBfPuX2GOI6RZLzOBImCS5J+SsdTaTTNKWTwlxHtUAmJsaHJ9DuBLJIs9+03jhy5Ib19dqtR6z05sRi87eGatnASd1NVane5rg9Kmmak73cSzVsxq+r6AxTeQbTVy7jbwum8rQGwnYIVRbWIIke2JN2h5Fvu4JY5kglWfYrGr0ZkEAUVEIgATpzhOaxbbYx0ZgYHn9QZCCQEWS0o/Pru7MAOWI2nWUgRtHYAkjch9rC1HRg8GKZyTLn6LDMi7u02RckFFQWgruvK4qZBRFHNpCiAxRSIl0JZVFF+BwiVzLUJhBdqpAn+8kQ7QQ2C0NQW3fyI38DQY8sBYJuB0hc5GUGgrHJ8zwDMS8EaZPoIF4GkqStTT0dQFnpTY7DBoIJKyINRW/5dBQBP+sSALIf653kbI41cJE6/K3YApGWBNllhb4bQXhfnFnCDJF5STKAmBeeq9qOpDyZZCYEIb6jrFi+wmEjheKiPUkQennh5OgJ0FVEfxaEVFiu3l6AXB5mIB/zfy2tJ6O/5oGcGBoaumFdvlBmi0MWMTDJEmaI1AIxL+aIvkZaPeIPeSIB9ATiO9lBh6Yg5E6DRLC1JQi4VHEHt+cGPS4CPAAOIgHIxBhA4MgqIwhInlmZCIReAcI0ZF28SWAJzzk6HUd5UQSTnR1IFnGkFRlpjdA9lgcnQrpVoP7wsZMIFO7aDhKWSoS5mJXM4CZo+7FcYrDXaWNpq6/PTyDjIGGOMA7jZv8wNDo6+vPT2o2vR+HEz5vLl3/+2XLEWFtxUQORRLrLtOMAbzE4ooO09whFX7R4jO4V6Dweo7NhIAqQk9sT/TiEQKg8ttNDWU9aB3FRWSFpMZCxsUajMfatqIEYx6+pHeP1Mzt65PWjR2cNIKy2YAnPda7s5CSfD0gaiLkFYnSEFmePGEcddaHFYYaPccAhD754gOTStABBgQ9o9kLRVC6XOzN4CjWF7LuTgcyODxPIrWJlGa0RoyNGENNv0s0mptEqCsPu+6O0LCo4TMPEaaEdG5mUUg0lSA0x0kEKQixFEpMKqaEBNQzFwILFqE1GklY3kpIGkm6mPwmrVlfdaOKms2i6mJXGxKjJMNtZ+p57T7+ffIVqPMNM+aCZuQ/vPeeec+6ZD1764vvvv1feod1bHnISh81q3xEgOwOdWvdjBmESc0cRkCwswEtC25Pu0ZmhoRnvqCgHqWeNzba4uLg1OxEWIHAflPHYcmQQZH1vDxj7++sC5Mfnn52fH/8lT/beICAxAYSMvw27e1fZW6Nojg+GhvpIETdtMpvcWjsVBtlWQeyRZZHGJ6Pk7+BGikh1O+RBbeKPxYjk1uwsTvJp/7A4JtF0QDVMMMyB+hAk03D2J6Xj8+PzbDqTekFsrF5biwxRCybEEba6Sp9bFxwDI0MBz8JCK0LizLlHAyP4YQ8AZJBArINmy3Zl0Gyy7giQZrUKEIcjedeOIOcJ4HbA4R6cHBod889NxGWeOAELu2ihiFVjkyIuu1ETQ5AwQER1CEkQtp4UT08hSCoFkO7OrmkHqUcCSaMBwdPHhWRj29FoNdeWm4VRqyPwyD13spAsVBtec6vVqpgCeIM9WVk1v3lZiJrJXgPIQaPaXEYMjjVbTa+j2WicDcXOmic3kIJQToLq/A5MgEwgMNPmQ48CJCqIdJanpR9Oz5+nM3D2/wDCBDBFkZdf3UneHa24Rw8s1QPssu1H7gOAvGWJRkMFk7diCnl3GtvjFbO9smO7tHVAqp/3fbQMjz88cDcSsaYjcDbUvDfWKoAD5kQFNczmR2rvmRnH3gMJBS0JwiQAKR7/AEEyfLL3BjEaKxJtLdsjrcaBGSAWe+gEIOPJTcvm6kGVfOTNarRJIKFKtVpVQBoHAsQ2X/iombiXHAydeCtrc8kzJ5/kZDcliSsYQGeFvGjJAxKATLEkINl70s4dl2rZdCqNA/F/gMDjzcnlw6jtoAoQRLDQyfY8FFm2rEZDl9YXK+bWoZ1A7PbLHVNI2VrJe31JUqQacTQSwYr38MTTrE5cNpCiI/2QRiS8tyggjIPE/fenkEEBgec/reWK+WwqfYWPmP4NSLRQKNwdKrSq93aSlcahefMyZO4b+O6sWYGPNFo7puhltWDebLaqc5ZGwfxagX3kMGmxLDQK1bcAsnnZbCVGkmeXjyZjZ4/OolxkSaNzD01g1+xtN6rf8fEHM0srn+7vwXNUkl8xKpDNp1O7mf+iCLq5RiYzqgvOSPA5LmyQaiU/x6P2qpT7jtKUaypZTo6MOGdWK2O+uJOLdw3IHaC4KG55ZxSQ4Y0N0gRGIMViDYqkUulrfORDPQivpAuIVUmtQE+V7uqBfORVvyFA8EtLwq1f1C8Pks3LSPDrdyMJBmESJyVUdFMdHLu94vHOzBDI+tQG2kF0tDNIrl7KZsWBeFXU6uuAvGFmNciMKEIRK6/cQgm6oyOQDkT9C1gQBnkgzsJ5vyKIAMFvJLzTRDKNwz2Aw2Rpyb2y5RvuRzmyMQwUsm+f13OlfB4nIh+IPbeWjoNfVUVUEKSDaAvRyvUgJiOIjUGWqLz92u+EIho9qOMDEkKZpnzx/oob8XfO5aR3JUgUQnlaLJaLpVqaKkTYNYqoIEZjRSwSxNyhwpP+6k1VRH87ooLcCtKhHpEeQjUjVVRCEiS5sDBIKEve8vn7b9xYYxKgPMvlirk2FFG7KL2jVjcQfidpgEduLPwrEGtHkSGA4BbE53o3Qg1g0TgZviklAQiRYHfNLiLXH0Nr5RWAEK8k+bNcr2OmJp9Ps49c1aBjH2EQ0xUgNqEINxa6g5i6gwxQgeVZoSaQL07dN9FqQN9HgvinwxMTIHFNzAEkgPdQxQ5DtUt+svfs93q7Xa+l8pqoZesCgoGB9yQIo1wBwlm7BsSi9YhrQXDXI1JCtHppP6G99b4o2clZhu8IEODMjhHIhF/pSaBsx9H47KKcTeXaWYDIUSPj1mIQajVariDROzvpJX0EZRWT9AKRN4jjqEc8qHv9dIOALF7chtKCIYkrHBYgdLe4hZ3FhTxRQhKAXBRrtSIiMBS5Jmq9/fY1IPJZAVEexBUik+iGhwzRl0BAQih0zR5/l0GCBCJJZNxyUY2ydcuHdwAAhhe6XMDW+r1cqpWRppCP9AB5XS25dSYfRd0q7gw1IFaVhMOvAUQKAgMKefyKAIk4Yy4f3Rtia5HrUwgmg5Pc4hGhDQYRivx6US7X2yWoIhTBR1cQjDnB222W7iSqUyggFh1IZ4oJkhpArAzC3UncJW69H8fqI5AEHFgxOCQJzI+jJAi+mJNBOIUJPy3jZG9/ky22qWYn6waC6aB3aGALC4HpQCSasnIKv3oQImF7wwgCQVRFROCiTmkMhztIqGU3LEDW1m6Iazc58+RDDNCBTE2vP8kVS20ciPki34/0AtFbZ98QSR+t5xoQHH2GraW4iOQY8bpvw5E5a3wFtQh8mkEQj51g8Yffxw07QDQ+QneiPxUvysV2Pt3OSkVgRpCBDkifcdiHSdhFuoDohn+6g9gYhBpc8GNsm4RYeyIR6acFqyC4cgjD2ztjdEpOub7/uFQuQ5RU/kgZPLsahHyEReBRPza5LAlCsDz3ABBFEDEXYO3EvW6KYGMtTdL9LXXZae04t4nE2XGSfioWXTSEFpSKsGHuZv2rx6Vi+aJYKuXT3QfPtCAiavG6eMqMDSgqiMRk19dx2GhvMoZREYCgm43UI5EgEGIBCESQJLKFTS0iAoFqFJUZxLX+yeNsKZfLtZFtGUHIdCBWXqMSbWxWaTwNpFFExuLOUIoMsjCAcGFmBJEX0XFKahO4uRKyJMjjZRKJyheCxCeCYniWMhdhwtfDs5/8ks7Xc+V2LVfqBYJzRIKwyYWSsUdLRXAE8gJVEPkMQfDNK3zELkBGoQiSeCyfZhvAgmEOfzyOC0MOwOh0+YK+eeKg40UB2RcgxVyxVs/LeS18GIdqBkYkCActCzszCUIeLF6Ed+tA5JCTYuJZH38tWhL2EUpP6AhxxekTEAEkpoK45L2bkIOLL4q+BFKr19v1bDbVw0cYhJcgSGC8FLzyVbMCom45eht/hZ3dAMIkIzQ9N49maXw+KEMsfD3mp3XT1nLSZBAS4k7lpYLA2X9J1eq1Ur5Wk5ehxnFZPkdkrqW/b4Ip3m/cWswpPucXCWIIW4okGDtZwXDfvMs3t4Vs3gUAqkrI21mQaeK4GRHxeA1GJBS1wvuP09laDX2UbLaHIjoQdTG8JD5I1KhlNBVE7yRMAhR5sAfEkFxgTJQcIgDL61sQgQOdd/KYNWFMsgFJwn+gOARFPgUQksPgI1eC6JCkQjJx16a6MC2HEYS/TiSQBNWuB932gBhNno9RsBIhjP6krDFMDe2b/XoQeY34E/rwaDOmd3v4iD6NNxqPSCj1iNbUsMUg+r3FJCQJNheqxJVJrgETtIPYAOKnun2Kk6+OEcgG8sk/Upl0JpsWvV8+2q91dt068KRtojCIsUOhHDvaC0XjkKkIXGIi8P6nVDoJl07ABAl8HQXJFIGQJHqQjZs/ZnZTKXzw1ro+alk5QdQYpydqBaJfKhufj/bXrd2nTGWMkyQP0LW6v0i1bAQMkQhCl5LHT4GDQHj+RoKI5LH/4V8YcdpNH6V7h1+ZorBZDMZnOYPoYfiAtHUBYRLWhDL5GTRTFoN3YpQixuJ0iiBrZBIyeVsdIb3IRRjkt9PMbmb3CDBXgJi12a++au1EWbWDawRRSfhkV0EMJGp76/4WcmA6TnyodqHNK7xkjGsIEmFCF3m0g+ThaTpz9OVRJnPUSxGA0Dq6/Pt44eOZQADbXRNN9mvsY8NUEM9tgOAaOngYEB0ThC+OT3AHAqHs0c/tB3DAMPlQgh5fZnCr2xvkdT0IOyrzSA5gCdm67y6rxaCINAaxUXUlq10XtaxpJp5KeKeyi0gTLDsWp5NxWJjccA/PM2nykp+NijCJzLXe0SmilwXGeQZ+g0Qriq49J0b+u/9/Hr0kK4vBsItmyZe8Xsx3fC3avJqf/zCGBuiyFwbvnyJ7mKthVhaCfHm9jwDkH1rONUTGKIzjPrvlWqKsW+4SMphcWzWU++zYHUTkUoqp1Zg0RREtUpJLbVlJaYiSb/g8GM0HvmD2g0tksXwYJUT4/c85M+/M+2Jd1l/Meww772+e8zznvOc8zxnhA/EZBhIkFAviJ3HP7EFLOTkQmURrwLEY2TV1gwnHyndcvEmTlRKI9qojwyN7GhoaQLFppk8vnz92aBedq4OuZUD6lkC8W/kxiQPxIwvEIwnGDYHIJPStKFkpbOKG1NDykEKYlrTl8NqFW0QqQVPTHljmzyfRcd261qvPLp3G29/+BsgyHsgth0ci+UkE8qOxPewsEgTxTOIWgcnimMY+m5KxQ2NZejzIHHjN1GECGaKVFNJUUilDIrNE0J1d9y+f30XP8oM4eSALR4zxgwT3B2Bx7h4sBEOVFgmOSAbErsuPHY3qqJUEBPtQE0b9nl1xKHE4EBShZiFy58npZ8+uXTq099avfGRMNYhQAg7gOb63tOjjAMTj8FvEW3RU5xqvmk+bHc/0a7ZJ24gxr2cOTLqWEolmpRwHJKC8eXJo1+lnV0/vqrDIQF/XciB1YwYqfHooAmlPp9vtDWXSZeXtHeZzj5OF9soR50ddy+fujiQUYked7dEQqQ6146mDgWXR/Kk1cEykkFKpUFE4PJL3h9jQPc2K0PYOLQKI1oOqlCa7Jm4vv3DplO4hJU+ZRiLj4jPqoGtVkBjRx6xpTOKGSkuGrTKVSuPq6ogHEdyjTLL1QuvbQ3t3Xbp8v8uCnzq7B9LbR5IQiH3y2OgDaePCT+IPv8G+VSKR5PU4iynGxVNSkyPzlcRFEKhl37S+AiSyJ/L54tnjra1vT28/HexaUpVFSCOr3u5I9nIgCKYvcSt1pxzvtLVncpjlMLcXAPHcK2ASkSDr9FT01BkQTMAy/KLdcKg9nm06SIhaiPzspy/PnL3Z+pZaGFlkAb99FvGB9K588sv08kC6c5WvGCEP80Zfhnp1vgwMaFIHIOVJMCjWU8aPw6kBCRmLMHSY3WmCmd1wxCYIGoE8PXPmxd5Wqlz9FgmChMjxA0SyCwwYYWMJREmcFbc0WD1MIH34RwUNLszhAck0N3frli9mFRCkTCbTvUe+mEvnLQntwX36tOeKGT3CR4uFbzWj6w6EQkyJBTKSFNRam6CGtQjABiQCyJFXz58/P3PmzM0XQRA4PJD1AsFJSiS2YyXjJZA0zlBRHSlDjBdHH/0LJvBM4mURwLMFRYFTSQNCO0cbJc3/PUy7aNrxsYNsuPiSOnCAGXE9ICa1Wc5vk4TqU2WQ2JFzJ7ZuPXECmo4tMkYWQQ4mc6pXonclyOHeBOOM7SBF7sBO7D/wRt9JkyyHQD71smoTSEU77kASrn34g/4UiXI29NTIFnu9SvFhsb3NA1l05N7WDdLWrfjIgl+G39oxA0hRNBKKGIoOJBzuXeBLPmU+PzMJydd5AeQxtzpJFGE4TGxLJLMF3W3agmAc1xaI3n+co6032gqP3/Ga4umXaIuiqVn1uI2yi0NlkAg5nMMfnBDG6tUbNnDkjgMZ+JPZL84uEHV4PjIHQs+eAgmLjfstKeeB0Kd4IwGFywzaSKuZHtsM9EaBKDzLvIpu2PKw2nxCRkDt40ZOUx8tKGeuKaJ7lsNPxuUJXYMdCBw8f22CAi1ZvfonINp1Zg9RD1bLALECJUMVBt+9QIhHXOgLzOXi+iIPhMMCCRsljfO4SZpAkjbDU1HOgMRN4FI7ZINdHynBRe3oxm3bMElbfWpaNMJcfb6ZH6pCn8olxpiohcNM44ZsWL3E6hcgk8h8UOrDQPq6pC86rm/egtBtUHsuo5ec9Vu92NgmEAOBPJDu7fyDdgtiPU7tChAuHo+vpz8B8qGRHHmbijK/oSHGxH3GtpH1ytHkuqEpVQ/VmtUCWbFkxQqBiGQBIL6wNWnt3GUzZy5b6zicD3wKI4Go93vaaPpMlvuyc0NAPumqEgTlrZNUhe/iD0BiAqFglA33OSJB85SDplr9aGS6BeH0iqVwQLFiyhRAkLWIzyRhSObOXbvWIGiADocSGCSN+LwvmiV6kgW6dXMgKAlYKb+2AqS7B4LdkJzLB1I7mkdegUSm61AOQ2IX6dgnYQdOuc3qWRppAEFTECASo7sPRGuIAKBw+bvHIJXCfcvKCqSrwm9Xozgg5kIsv7ZI2gfCDlZklEBmCKQGEson+T3MPLVPV6I8LtL4ehwgE8HAJA5ECoBAAkqJobtR1g/SnEwmbaJ80hTJNOtvbYEGzmouqi2S9vmIaQtEwcOBqM7SgERmzJ83zEocgNg9H3E0pQCpPQCIMKpANvtKvCVfAk1z1kkekc3mzY2nSzf+hZdTrtQkz0XR/SSH1U1SlOte0bXU7u1ARCIQnVhjQOTr2AFB4kyifKEYT1TR1Os6QC5sxUPEsTIA4qEEZe8KydnNxScMkee1AFGW1yQ31mxfE/nyTxLIKTOOuAcZte04QrsEggzIIKpbpwskSpxlP6GGrBNA5CXknc6zIM4iJy9gkJ9aJMjiAJAPRF0j0Zb8ohe1GfHU1sidrPg5ZiSPJ9s0CcgYEFRq+y0yaPDoaRMFklI9zJwam29KBCZysecDiLpW9HU9Jmk9/l4gssjQBQuGOpAOFQThq3dKWN8ou1G8qjzTm0sl3VxLDG7W6LPIgOVUgFsQxvB5w7TyQC4gamggKQ0Rffc0Nb4eXVd3Z+fOF0usRYZKfwrSlkiUXLkZKE2c8lXtRMFfZ5rMCmUjIcv5iGl/Kpqpc5yfZ0C4KAzU+VSf3r17PHIWJpnHapBSUZq0omVo4IBkHSSvF77fdWXf2wDI34pCH187X4lRjlr55mZROBBibybjPVo5EbkGYpKR1LlGZ7H3Q3FMzRBAIk2NqcZGpomRBpd4uq4JlC1fd+4/dsOCgOFA/pO8cQRVgiA/CBwq7Rvvqq/GMchT/iaQaCM9DRJA8Hr5/jpc/u31r1c+vtpqQSD5jyBVUxRUBqnebvFI7BkKOplmnNayJ8coaydjk6EcYZGYQMyAj6e0Xm/5+PXcxRKIHP5/gYikA4sETcLSL1XttSGebJU5ZEurISGr1nLUIKHc5VTHV9ePWBAnQMxA0enyQDSb7BhEJqGAZ2xtiLU6m3HTjyxaUv21fa1tBUDYraoRyPWWz6/O3fYsIhD6snXOzu9ahXi8WOZAtLPdfwYCiRYdwRjAzrXOftAq9rBRzHxVI+42qwnK+Mnd6zsufgXEZxFIOl++fXlPP/MRd6AQGKwOMTpOXqqkjhrqkmWRmIYRzntieZ7Q1fqq5dHXcw99IAqUnW8Rj8SzSJDEwzAkoFD1oFBM35ookCETZkwbaTI9FkVUyKuMiFjD5x0tLa/OfQ6ClA8u/D8GYe75SxDkSFAfN6ZMmzjVgeggBYTHz5vKNHhGJPJ5x1Hqp09Wg1SVGnYWhn51aBLPInCURVsBjEn9miHs9KxZpCM6cHgqK1W7H1s0ebJAjra0HPeDlD63cz3kL7qWZNo6ZM8cDWEPTeGAJ3vkmSrHqRaPtu7AJOdOBEA60yTeuaEV+hVInx+C6BgY5RGsmTiZIyHqWKYbbwr4WeaalQKEY1GOrBBIfw8EOXfXHXSyNYI2YbenGgRVcwiEGSQ5Q3ZjQYXWLNExyCAKlmdZkAeABH0E2T72z85h/wxiBG0ijiCIZAb5kews6AwCW2htN+YQmyWpGy34yOofg3hnyHaej3skHYAEuxYg31m7n5Y2gjCO4y9CRFEIgUJoSmBJCEqqxlwMxEZWbaHQpoVtDsaDkKTnLOQi5NRLEd9Lj301vohCv888szOuQ/5o/JV07T+6H56Z2Ulmd/xcIk3qIYptggWNrAL/efj18y8O3lhlmxJvAnFZq3H5ITxghI4QwkYFGr2cCIQH3mRdoYzCRReE7u7+Pfy2kE0gOBTi/m/bOF6i0FfAmC/xXSQz7Gg4XZZ2gLCqoNtVafQPZUL2jc8ejAOIxkLWxSghMISMsGkpQ5/xGe1eaMxz7FQESGHvQvqHhyApRCjEEUA0FsDrmaOx/zdLGeGdIJmC068wxprAKI3HYyS6OqIUJyk3rGNZRXit7rB/M1T48SpUBE+OXRQ4e3aWlMidp7UbUtsfNt8qRsriKRNaFg4D2XKQXPzw+TzInMxDKASHMsry/FuplqbdiSYyaTTepNyOhgYLnUUlJL2kHgrZyiCjPEMphC/0q8WNzPdvOQZ5angv3cJvL2sd3GzaLKXdKI7jmUmPHB/3erJnObuTg8FS2FMJbTHF4SBhRcLkBqM5EMUvLEhWgGr1u4Qhtso8MWtWZjeEUtqIZ9zZOBgUba4+FMmA35vFEZYjs+USECRUxEOsZJQ/c/vDH9zpulMPmtTC0UoLAWJjh9WKc3J4ft5qbe9IJ/eOWpe7mwZnLkCuimfyUAYZcOfmJB3ybl4lQC4N4wCIiULChDY9aQfIqEY735EhqhtikJWwEwkLYofl1u42DHUwG2nETBGLjyVFGAcSwXyZTfaZrJS1m3T56NdADhxka7Tw9H1JeHmFG2uXKgTBwhGIkw5JkqTfT5KOLLfe3sqtALcVHOMbnqMWCQ3LOTwEyaAXpUMg6KFMgKgEiAbIyoFgjYEiHHJVQafQUohhOp322+12vT4lCRY+V2dHBxZxPwokimdQBKNB4jKgIunRI4gpCXkJZGkdfM8AYRUgaE6dpM+5n5pcEw5q+UQU0hVJLAOW0eiBvm96O6PXhBtsFEKAyALJCpDFp7y8RVVRtFRBLWCgUIaLWBIkzKnGXP66SKC4uF9E5ptDyLXxXSWbeElFVoSsgUChDUr6xT19oj+tQ3AQJ9GaAKEiUhIkNo2ubIKfmnCZH5Lm4xlk9HWliqxVCVVoi7qnFvQKywgr0s8qMvaQhkFQgX0u6UbQbDKdh1Hxk66JW55+NQhdO1+JDNERhWHgAHB6XT+tc/aOUe/j8BBpWgrBURPFEQJDYLJFzNtdC4kNhLweJDc+0SkEQSlsLWDgkHC85sVPGSMx4xYQOjudBIdGIexNrghDIOrIID+QiGP9pqUGVTgEBnutQAECxpy0qQYXRm5poiJyHclB0gwCwzu0IkQhSNZpWuEVTwdZ3yckIMK0yX/S7l4loTCO43hXUERTNAUGDY7i5CCIgUOa1GbDObkJQW0NLmcRvINzH95FUxfiRfT9vzzP46OHwvodGoPz4f/yWOKx4CI4aj78v1oJ5DZCJhPtLa3Im0FwNEOQ/LO1MORTEWaiTls29lMygJDUdVEohJNdzvXdikyIDkmCIGmCrF+0JH+HOAEDiKQYldZOMHQAPE5wA1lK8BrkAUhoLZYWBXEJECQ/QSYGQQLk5hgIgFSHUzH4gvKjwoZCGFGSK5zRgg2kY5BUkccIQRKHJMz6JVeEEK3IzCE4wAA57qwjEMRgc0FDYfDYclUEyRU1WfKqtzccUbgKSC9VBAidFSAMSQaJYWupYxei3zMnFCC/KxxxgSEQwpoVRbjtTuyp/VLIaLBvW/xya8Qk3e1BXh2y9t5qXFtp/64XQGYBwoXlnROt6fb9sEsHha9YE7Bma1IWvqAc0omMIinUwQBVcyD9/mpYCqRu9bo8ZKutB6JDeHHovZWvrTbXwYxYSU6C42Zqb8PYbTe+OWMMFCCUUFoK4g6XJFMyhAGveGkFhP+9PZXVnUO6OUT+SPchCRCRXLaZkQxyv3AJFbHQXXLHTbUIsRMPhu5YAHNPBiHJoYoUfq+seAxeNRr05dHF9JZCet1UEWY9g+ysLamH9VforPYsQMZAQq7P5b4zDYrMcYHDt+w8bKhdiE93o2NIFMIT/coBjzm+WhlkmEOsIs+xIkB82pUyGCRId4zDph2INpYV5Wx6EP/aOT7H8bH93G63X5vNhh/Nd1l37+I0HIcB3BdQ/AfcBN2cpODgIDi4q+DgIi4FsRwODoe4CMEaXLRwNA2UE0MlMbRnNUmbBKlJxCsqF8SXGHqYRuK1SofTK7QWKQg+3yTX+vJc017haPvJ8/umS3uZThvTxixTnF/m1tJ0utSYNBqTSePLn7mG/w55aTTCA2xtRd+ef7ty4tDhE8f60dJz+rtLB47+yGb7/UqN5/nWr9dIs9lcWV6+/+jN92rlQ+dxKd3z2LL4NBB9W/fUwYsLpYVUQpB/s39/fDM/5eLiwdHai5dXFUMxChRFYVmDFaWxJEmyrLKu69q26shyu91mGMcORds2Pd0KAl23fNysjXKLueOnSxUuGgx6Wr0oPUzOHFjRhkPZn/j9Cse3WoNXn+Js3KY8e/bs/fuNjdV3727eefr5NVj3kyzzNY6rVitCp1P6C7J/TkgzN+RAeH5DMQylUMjTRSGOwbKO40jkaMtxGNN2GIaxTdPzPMZhXT0ILN0Kw6DR2MwtxufQPLoAyPorQIby+pEYckErDiVr4n+tcK3B+qtXq6uxpDyTEITOHvgUkJXUsdwiyQyysA3Z/18ycQ25uAa89iR5MV8wDCM/Thmsw6gMdUBh8Ltneqrqmaath75lTQI9tLr+5qUjSfB457ICFz0s1jWt2OaTRhafaEO5O/Gn/GAdDgpRLieSFAIJIGklcPxq8TwoFUhSSPZ/SPz4IExf3uhizxeMBJHPG3kW1yxlPHaAoE2VZYlBPPyoHhymZ+oWFBau/cnmJXq4meTk2Q4XPejV61hPpXRnDXrDNhsEfrS1NYAFGqLcvjxv5C5Vkq6tZXKsEKRWI0pnLiHIHIEn+7H2HNOgGHmECKAYCpsXRWwsK4qMRE3EAcRxbc9hsLBU1Q1DF1UElu/7etdfG12f7Zg0uXOlalSkEWk/yWXSIenV22Iw8TEhrS2SxKW8TyqhIfkTAgmy0oKkVuOQKnVSiiH4kP+RDALDxR9rb5duFEiAOR7DgdlmqQXDcF0gJApVoMpUheQ4pm17ps24oc5iqnVLD3w91K23hJjvnQxtVMnxhWqkaYAMf6bPebSvabKIaf/Ib1OokfflcjmpZAbBkDRXQMEFbVAlmJJKpYpa4oEHZPdi7ugmeuh2rxo0zwhqyLMKGYBCEQqWGSsyDKZaRQ8qrkzTBIIktu3qemBR9O7LaVoFjiApJA1Vcr4S9QCpD6MMcvJ0SRCe9IYMDgxLPJJQINkoI0kj6ZAAAglBmvc5pEYQzLsACidQK3t37ABBUZQuouTHWEJYRHRgHUNADDTiKg5iOgzimK5t2jg4mS6WFIMDbzzdOAQrt76eySQ9wIHMIdsFCFEZhdSLXObIuSy+UdQRBr265MaQeEcnlNXbSSVpI9triyTN1wBQ0AdtAoLb/q4dOB/4PjjwOlDDeEyAOHJbklhHlLCicA8lMHjtnu26dmhiJHCgxUx4oR6GNn663bejTOb6jJEkgcwlx/utez1aXEK2X8KbGShcT2uLfmDFO5lGmCfKKkHmEoLQeyTyulmrURE49godARjcQfbs2PkbsJbvvZKeAEAAAAAASUVORK5CYII=", - "description": "Displays a latest indoor CO2 level telemetry data in a box layout with background.", + "description": "Displays a latest indoor CO2 level telemetry in a box layout with background.", "descriptor": { "type": "latest", "sizeX": 3, diff --git a/application/src/main/data/json/system/widget_types/indoor_horizontal_co2_card.json b/application/src/main/data/json/system/widget_types/indoor_horizontal_co2_card.json index 87ed101aee..5a380c571b 100644 --- a/application/src/main/data/json/system/widget_types/indoor_horizontal_co2_card.json +++ b/application/src/main/data/json/system/widget_types/indoor_horizontal_co2_card.json @@ -3,7 +3,7 @@ "name": "Indoor horizontal CO2 card", "deprecated": false, "image": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAACgCAMAAAB+IdObAAAAmVBMVEUAAADf39/f39/g4ODg4ODf39/////k5OQ/pxrg4OC33qnn9ONXsjbz8/OHyHBvvVPP6cbz+vHHx8fOzs6f04zV1dX5+flYWFhLrCjb29u2trbCwsK8vLzn5+fIyMiQkJCTzn5Xsjd0dHTD47jb79Sr2Jutra17wmHn9OKenp6CgoJmZmY5OTnD5Lhjt0Xt7e1KSkqTzn9juEU1uySMAAAABnRSTlMAIEDfv1C6kOEmAAADkElEQVR42u3aa2/aMBiGYdZ2b0wSx3HOISGcz7Rl+/8/bq+dCE3rhAobG6Dn+mCMjSbfDRlCbQ8AAAAAAAAAAAAAAAAAAAAAAAAAAADgX/py92zG07Nz7/rPX7nDyejuSeep9yLpAWQvvT49hD5CbgxCbg1Cbg1Cbg1Cbs3nQjajlCgaLc1Qm+cp/STd0v/3qZDtNjpEy120W0a7dC+JphFJSQ6RYx6jnC41cz0e566leRouktfrhRwkpU4eUbTjY7chdZ5vtoNo6hx2m8tDXCFcfgiExU2JYBN9rZA9sTylNCcajciE5KPNIZpuB9Ptcn9xyNpvQ5RYtFckFJNwvhLja4XkEY2i7YaWU9NhQ3ajKKJ9TlN+vDhkLHwb8iaoFZinWhRkaU/r11fPzki7ITGvm+mQN06FhC6/TPOP5+eXpXmeS2efH5xon+e1CUnz3YZGU97ilAtD1uKbsiF8ck1ki8xpfeGR4YpVIfgamcCV4Jln9gIzm/s8Lk6FiDdV0KxQfkI/k8fhSB4fL+VPPNVdAj7wymsTzBh2ISKZBaLQxEPivgll9iauyxXfzMbJEI88chUlCV1bwhE2ZC2KYMwn/BiyIjIv4ZAF9xZi3u4tTBIVwvtciBIioOtZm3/dhpBe22OGH0ICeyON23uHVjzaPdeG+KdD1PeC3EJNEtLeQtH1+CJx+e0SvB5v9OS3IQmPbUhwTsjM3uw8ejT21YKuRovOhELXsz958yaY2feMPobY9S7E7J4O+T0VuOGJ+1m+/7og6Ryh8SbGc1qIVXcdEvMRMuc2y+3WZ/Zq0VoI76KQsVJjsgZtjKT3kqwso6wfm4U+ZUQ0XA4pK8t2gxc+ndT+r+WLIFHm+Lrgmc9rXUi3ziF2PaCLQoxjSJrGZdPEPKuoKqs6G1RxmjZx/R7XGVE8lHVdkoztRtzU54TQWgkhlDmW+XwoFmTY8/LT754JGfNM6b8SMpBNPIzbkGFa8pzXhmVcNTakX5Yc0tTDRnJuJeks2tPU8o4zc4/w0+4T38w+ODdkGZdVPEibSporEtdlNZCDJua1dz54TCYkM1dkWC/NRlpV9OdsiGFDrvLFqhye2Eybksf7CMmyU5uS/pL58avJLJnjq+69QcitQcitQciteaCQlwf4NTuRfOk9OQ/wi/bMeer1vj73nXv3/PRIf1QDAAAAAAAAAAAAAAAAAAAAAAAAAAAA8I/8AKu9AITe3vWrAAAAAElFTkSuQmCC", - "description": "Displays a latest indoor CO2 level telemetry data in a horizontal layout.", + "description": "Displays a latest indoor CO2 level telemetry in a horizontal layout.", "descriptor": { "type": "latest", "sizeX": 5, diff --git a/application/src/main/data/json/system/widget_types/indoor_horizontal_co2_card_with_background.json b/application/src/main/data/json/system/widget_types/indoor_horizontal_co2_card_with_background.json index 1c12804184..dd26362066 100644 --- a/application/src/main/data/json/system/widget_types/indoor_horizontal_co2_card_with_background.json +++ b/application/src/main/data/json/system/widget_types/indoor_horizontal_co2_card_with_background.json @@ -3,7 +3,7 @@ "name": "Indoor horizontal CO2 card with background", "deprecated": false, "image": "data:image/png;base64,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", - "description": "Displays a latest indoor CO2 level telemetry data in a horizontal layout with background.", + "description": "Displays a latest indoor CO2 level telemetry in a horizontal layout with background.", "descriptor": { "type": "latest", "sizeX": 5, diff --git a/application/src/main/data/json/system/widget_types/indoor_horizontal_humidity_card.json b/application/src/main/data/json/system/widget_types/indoor_horizontal_humidity_card.json index 1d630dc25c..ac2c54b3de 100644 --- a/application/src/main/data/json/system/widget_types/indoor_horizontal_humidity_card.json +++ b/application/src/main/data/json/system/widget_types/indoor_horizontal_humidity_card.json @@ -3,7 +3,7 @@ "name": "Indoor horizontal humidity card", "deprecated": false, "image": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAACgCAMAAAB+IdObAAAAmVBMVEUAAADf39/f39/g4ODg4ODf39/////k5OQ/pxrg4ODz8/NXsja33qnOzs7IyMisrKyf04zz+vHn9ONLrCi2traHyHD5+fnb29vCwsKQkJDn9OJvvVPb79S8vLw9PT3n5+eTzn7V1dXP6cZYWFhjt0V0dHTD5LhmZmb19fXt7e2r2Jur2JqCgoJKSkp7wmGenp4vLy8hISH9/f1hfASuAAAABnRSTlMAIEDfv1C6kOEmAAADLUlEQVR42u3aa3OaQBiGYdukD6+7nJGDKApKtDGapv3/P64cYtFOqvmgDXGea0YHd794uy6DIwMiIiIiIiIiIiIiIiIiIiIiIiIiIiKi/+nLp9dkfL0zPrvh3beqw/iOT++78XVwr3ADvt8PhrgFv4Y3EgKG9A1D+oYhfcOQvrnxkKfSwwHHQJHhwBaA7dgO+nOd9maIK6J9dJY2nAelYMBonuEAhjMubHunDKgr1qxMH8DUbHhoeBvXPxPSdRyXLH/Y2wf7AUtjtp2t10vMsF3Pxs54PBu9qK2DazFFTAChNHzUUq1Lmb4nxJVG6XUhD+P1a0i1EPhZhbzAqUKMJcY/ZgauJNVtyEQ23Yq4gQcdVnOLMyFTeZUffbWOQ9RsH2LP1riWXHQTUgo6rq7KQuQaZ0K07C2O98hu/dKtyHi9q0LULsPSwZWkkk+aEAngYe9J/FTnqfhnQkyRcBNI8CyicUy98UIZO4Ur0dpvQjwJApFnHw2vrDewDnEmRIsAYTBFWS/JeT9GuBK3imhCUgnCXHef63SKJ+2fDGl3iLsqp3CbXfKBUgnRhsBLq0cgi24uMKeu658KWUglaDskxAfS4ppmKeEKrVBc7IVhGkxKmZ4ISV87njfBx66IJ680FqYPIO9CTPHzAND5iRAEIiu4AoT1QUvhDeoRx5TCJS1qpeTVhpDnZoUW+0btImxOwqdCXBGd1/vkYHeN2hiFxxiNKEI0tOqBISIAc2eOKI7biQi4WFJ71tISupPu7aw08BT41UY5FeJp2TMPQorCim3bqo4SJHGSRaPEKgrbyh6tLAKsucqyGMpqJiw7u2QI0omITHwc8CbViHcqBOm+ZIPDEGukbGtutSHzIq6Oq7F5bCV2EzKM4yrEHs1tVeUmChfl+R7+4vvnrrU8sxQJwin+cKw4sUaFnah6RawsTkZqZFvV2GM2ty3UIVG9IvPMqSeKJMEFXP+HVTzHvxV2jPfoQ0gUnZpUeI9ehPQRQ/qGIX3DkL65pZBfuAXDwf0N/M0OqPvbuWFg8O1uaHx2d19v6aYaIiIiIiIiIiIiIiIiIiIiIiIiIiIiov/kN5uj+TgHcSVHAAAAAElFTkSuQmCC", - "description": "Displays a latest indoor humidity telemetry data in a horizontal layout.", + "description": "Displays a latest indoor humidity telemetry in a horizontal layout.", "descriptor": { "type": "latest", "sizeX": 5, diff --git a/application/src/main/data/json/system/widget_types/indoor_horizontal_humidity_card_with_background.json b/application/src/main/data/json/system/widget_types/indoor_horizontal_humidity_card_with_background.json index b2776b6a8d..8601d276a8 100644 --- a/application/src/main/data/json/system/widget_types/indoor_horizontal_humidity_card_with_background.json +++ b/application/src/main/data/json/system/widget_types/indoor_horizontal_humidity_card_with_background.json @@ -3,7 +3,7 @@ "name": "Indoor horizontal humidity card with background", "deprecated": false, "image": "data:image/png;base64,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", - "description": "Displays a latest indoor humidity telemetry data in a horizontal layout with background.", + "description": "Displays a latest indoor humidity telemetry in a horizontal layout with background.", "descriptor": { "type": "latest", "sizeX": 5, diff --git a/application/src/main/data/json/system/widget_types/indoor_horizontal_illuminance_card.json b/application/src/main/data/json/system/widget_types/indoor_horizontal_illuminance_card.json index b0fb560e4a..41df45abcf 100644 --- a/application/src/main/data/json/system/widget_types/indoor_horizontal_illuminance_card.json +++ b/application/src/main/data/json/system/widget_types/indoor_horizontal_illuminance_card.json @@ -3,7 +3,7 @@ "name": "Indoor horizontal illuminance card", "deprecated": false, "image": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAACgCAMAAAB+IdObAAAAmVBMVEUAAADg4ODf39/g4ODg4OD////g4ODzaQD7x6D2jkD82r/x8fH+7N+srKz+9u/Ozs6QkJD0fCDIyMg9PT35tIDz8/P5+fnb29u3t7d0dHTj4+PCwsL3oWD0chC8vLz4q3Dn5+f0eyD9489mZmbV1dX9/f31hTD70K/U1NRYWFj3l1D6vZCdnZ1LS0s8PDwvLy8hISH6vpCCgoLwemShAAAABXRSTlMA7yC/r1EOHTEAAANOSURBVHja7dqLbqJAGIZhtf38OSMIogIi6mrVdk/3f3E7DN1l27V1jcag+R4bMgxJM28GqYntEBEREREREREREREREREREREREREREdHJeg/d/q177KmOrv0FN+6L3e11Hm3cAfuh07/5/ah86Xb6uAt9hrQMQ9qGIW3DkLY5HFIEuDWHQzLB38ZT1w1dNOwB2uZ9iJd56mhkUPYL1CbhYOAObBtTTPURrh7AttWPOsW0PrmMjeGo48LQquVYP6INXlli/leIIWsPtUjMv0PUC0N8m3xdLpf1IHzeLl33ZTnEz+V2Oth+DXEJhoih7wrNqRaiBN5pIYgieNFunS2wML1/Q75j4E6HqF4TdzpYTtwJhvYQq+mL+3OCC3CCOsSUfb0jlpTWYifFiSH6N1UiKJ+HbGfPTchwHE5xAYUEOmQtqGXVqSd5E+I5XrVO50hIIDXrXcjqZfntbcjzdqtDMFi+TJ+HSxfnc6QwdYjk8ABdZOlVOX9CLMk9GFJ6n4YYUjuwhfaHE3Z9uICgdMzXLchFdo5O0CFWc2sVEqHatw9DfpgFCvkNlmniyiIxoEMcybOilOBgiJfnkWT4OCRSIVkTsrl6iCMZ6hB4TrVgsQ6FYF8/z064ta4skMgw1pJtUMskOhji5LLGkRCvlJqBq/PkVQDLcFC/GUypsnLxmhAVmIt19PFbvn/8xjggtt9PxDibVVlLscBedq/7EEkBLKREE+JIaUjgHQnBRpQdGuM6JoadQBuNMOr71UQfIwBzd45RktQX1MR5SfVTq5QsMqvle7kaBWquCanOdhIdC1mIkr0NWa38JAx9NUqRJulsNE791Sr0Z7Y/GwH+PJ7NEsS+vuCHs7ND4JgiYupPXaVIvkcTEkmp3yaLIyHYGIbhvA15ehrHoT/365D5U6LGam6e+GmoQ/pJokLC2TyMVW4a43z6D7jm6NHpH+Mt0yzwF9dPUn+8CtO42hF/lqTjeBz6as5WC/dRhYyqHZnP3OrCKk1xDcdD1kGBTyRzfOwpTHB9OuRko9FnF2P8j1aEtBFD2oYhbcOQtrmjkO59fBna7zzcx9fTj/fzDwOd3mP/1nUfeh0iIiIiIiIiIiIiIiIiIiIiIiIiIiIiOtUvJ7/Ykm8IwzsAAAAASUVORK5CYII=", - "description": "Displays a latest indoor illuminance telemetry data in a horizontal layout.", + "description": "Displays a latest indoor illuminance telemetry in a horizontal layout.", "descriptor": { "type": "latest", "sizeX": 5, diff --git a/application/src/main/data/json/system/widget_types/indoor_horizontal_illuminance_card_with_background.json b/application/src/main/data/json/system/widget_types/indoor_horizontal_illuminance_card_with_background.json index a13e99ccf2..6762e33aab 100644 --- a/application/src/main/data/json/system/widget_types/indoor_horizontal_illuminance_card_with_background.json +++ b/application/src/main/data/json/system/widget_types/indoor_horizontal_illuminance_card_with_background.json @@ -3,7 +3,7 @@ "name": "Indoor horizontal illuminance card with background", "deprecated": false, "image": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAACgCAMAAAB+IdObAAAC91BMVEUAAADR0dTPz8/67+uzt7zS09b37+ezs7v67+vS0tbPz9K0uLv27ui2ub/Pz9f+//7+/vz++vjw8PD//Pn08fD3dBDz8PD+/Pv//frv8fL28vH18vL18/T/+/j8/fn8+ffu7/H8+PX39fT69/b39PP08/Tz8vP9+fXIyMj8/Pft7vD8/f7x8vTx8fL29vf59PL89/T38/H9+PP69vT59fS9vL/w7u62ur78/fv79fLz7+3v7e36+fn7+Pf28e6/ub35+Pf8+/rU1Nby7+/++/bLwL/W1di7u74XFxnKwsXCu77Y19nGvb7+8+i6vcG5ur65tbrNxMe8t7vh3dz19fXNztLLysvPzMr+9u7t6ejS0tXJyc3Xzszs7e346+HUzMu0s7f49vf+9Oz57+vX1dTKycjNw8LDvr/y9PXk4d/j393o3trc19X09ffq5uTs4Nv8+/X68u/07Ono5OLT0dHMyci+vsD4hSzj2tjd2djRzsz8+/T99+zv6+r77eLm4uHNzM25u7+2tbnd293Ky8/Gx8v37unCxMizt72wtbz9+vHy6efc19ra1dg9Ojn++PH26eDQ0dPGxci/wsb//vzr6Obn5OXf29rIzdTHyczh3+Hg2NXY09H617zl4OK8wMQeHh/v5+X05972k0j57eba2dvN1NvGwMG6trWJiYnW1tmko6P4xZ78+fns4+S8urrywJv5lUn3fB39+vTw49xycG/77+bn4t/55dbX0NHFy9HUyMfIxcTBvLuppaT2pGXk6OrU2+Hs49/2rHNISUr++ffg3OD97tvc1c/6toJjYmL54s782b/quJJXU1Lx3c7o1sqvrazzs4KCfXz2girm29Pg0MS2tLK0r66ynJT3jDorLS7b4unw5+D86Nnz49m/x87JvbfCsqmQi4psa22Jh4b3nFZBQ0U5OTvWxb7z07vaw7L3zK2al5b3vI/wnmCHbmBhW1kvJiPx2ceMd2u3pZudhXryj0NQOjDoybKmnpzvrHnGrZrE1aY2AAAAD3RSTlMA7yDv768gIL+/v7+wryBdcwczAAARbElEQVR42uzBgQAAAACAoP2pF6kCAAAAAAAAAJg9OlZpGIjjOK6iOIi+zXHjQSC55gy5JGMotIPk3iB7sxiht2Ry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", - "description": "Displays a latest indoor illuminance telemetry data in a horizontal layout with background.", + "description": "Displays a latest indoor illuminance telemetry in a horizontal layout with background.", "descriptor": { "type": "latest", "sizeX": 5, diff --git a/application/src/main/data/json/system/widget_types/indoor_horizontal_pm10_card.json b/application/src/main/data/json/system/widget_types/indoor_horizontal_pm10_card.json index e2fffc09fe..2fdd93dd05 100644 --- a/application/src/main/data/json/system/widget_types/indoor_horizontal_pm10_card.json +++ b/application/src/main/data/json/system/widget_types/indoor_horizontal_pm10_card.json @@ -3,7 +3,7 @@ "name": "Indoor horizontal PM10 card", "deprecated": false, "image": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAACgCAMAAAB+IdObAAAAn1BMVEUAAADf39/f39/g4ODg4ODf39/////k5OT/pgDg4OD/9N//6b//3p//sSD/vED/04D/+u//x1/Ozs7IyMjz8/P5+fm2trbCwsJYWFja2trV1dW8vLz/zW/n5+etra3/2JCQkJD/tzD/qxD/46//78//wk87Ozv19fX/+e/t7e16enpmZmZKSkrx8fGenp7b29v/tjD9/f3Pz8+dnZ3/2Y/zJp/4AAAABnRSTlMAIEDfv1C6kOEmAAADdElEQVR42u3aCVPaQBjGcVvtw8tmNyEHVxIIp/W21/f/bN3dRGkR044MHaTPb0bmdcOM/F1iZOCMiIiIiIiIiIiIiIiIiIiIiIiIiIiI6F/68O75jI/nnfeue/7JdnQ+49373Pl4dpHhBHy+OOviFHztnkgIGHJsGHJsGHJsGHJs/ouQnkJtOpt1MC2A/AFIc7fQwZFpCenNTQ/e6CG9zEeXwM0dbkYzFLf5Hfay0l4PnhtaqZd36Omlag/ZdEiEJiTF7WB0m3ZczHSG2QPu9tuSSLwATuWGVrHBlqUYs1i9CGnvwOhuNMJodjOdNiFTjPYLWUukLQVLmT+GLOIXIRGURH8KqUq96fA74m9uL+/rkO8PuLzHPkJReBLL4jlEKX9u9mAFS4V60hK4Rb8CpQM4ZWhUa0ig642PsB3y/QZ1yP3d7Q32YgQ91LRE5ilEifHPu9iOcxGJJfT7Z1cDmbuVyD02f+5WsQQtIUEoErmSL2hzj/3IYi4SKv/EMtgVEstcV8aHKIldiJTL0kZUSyMRqhKQ+PWQShxfEuBwrkTWkfG/2VhWu0KUiM1c+hAtKxviRyPafb+2X2Yhy9dDAnku0Tig3grAXCqsJMauEP+4m9vwy2Z099RuVJXutf35DZ9LFA4tktI2RFovpAy2QvQmRIneEeK1nSPyVHJIK72qQ5Q0wq2QpTxvQyTqDSGIpBZgI8MO2fX2Qoa/1DyUueirwDFSrZoQ8adNjKuFqOZ+JsRbQlCKY4CNQR2T4XoMr99Hv5u4hS76ACbTCfrjcX2g35S3uDKyjsLmh/x2joiJSrEhKN20kNAW6DeFNHuit0LyPBmnaWKnIYbjYdEfDJM8T5Pi+lvRB5JJVhRjZN/8gSQt0E6tRSRUO0IWsghdCEo7u+tILL03hkDFImo7JBlkaTJJ6pBJ/mhnuzYZJ8PUh3THYxuSDiZpZnOHGdr5K/ULSsxm3U5a1jDxHv/9qgC/miaPw2SQp8PM7UhSjIeDbJAmdu26mKQJXEjf7cikmLoD+XCIN/AhaFRrhcCIPugLq/EEr8vTR1j7hvwQJ8ZBQ/r9toPZHlf8qNpERXEZ8KXu+8WQY8OQY8OQY2NDvuIUdM8uTuBtdiC7OJ0PDJx9Ou923rvzj6f0oRoiIiIiIiIiIiIiIiIiIiIiIiIiIiKif+Qnt477Z3V+66gAAAAASUVORK5CYII=", - "description": "Displays a latest indoor fine and coarse particulate matter (PM10) telemetry data in a horizontal layout.", + "description": "Displays a latest indoor fine and coarse particulate matter (PM10) telemetry in a horizontal layout.", "descriptor": { "type": "latest", "sizeX": 5, diff --git a/application/src/main/data/json/system/widget_types/indoor_horizontal_pm10_card_with_background.json b/application/src/main/data/json/system/widget_types/indoor_horizontal_pm10_card_with_background.json index c4c1081b27..d33a5c95a5 100644 --- a/application/src/main/data/json/system/widget_types/indoor_horizontal_pm10_card_with_background.json +++ b/application/src/main/data/json/system/widget_types/indoor_horizontal_pm10_card_with_background.json @@ -3,7 +3,7 @@ "name": "Indoor horizontal PM10 card with background", "deprecated": false, "image": "data:image/png;base64,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", - "description": "Displays a latest indoor fine and coarse particulate matter (PM10) telemetry data in a horizontal layout with background.", + "description": "Displays a latest indoor fine and coarse particulate matter (PM10) telemetry in a horizontal layout with background.", "descriptor": { "type": "latest", "sizeX": 5, diff --git a/application/src/main/data/json/system/widget_types/indoor_horizontal_pm2_5_card.json b/application/src/main/data/json/system/widget_types/indoor_horizontal_pm2_5_card.json index e2fe5eb634..48d8552505 100644 --- a/application/src/main/data/json/system/widget_types/indoor_horizontal_pm2_5_card.json +++ b/application/src/main/data/json/system/widget_types/indoor_horizontal_pm2_5_card.json @@ -3,7 +3,7 @@ "name": "Indoor horizontal PM2.5 card", "deprecated": false, "image": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAACgCAMAAAB+IdObAAAAq1BMVEUAAADf39/f39/g4ODg4ODf39/////k5OSAwyzg4ODf8Mrv9+Wg0mHQ6bCQy0b3+/Lz8/POzs6/4ZXIyMiv2Xv5+fm7u7vCwsK2trZYWFja2trH5aPA4Zbn5+eYzlPY7L2tra2w2Xvj4+PV1dWQykbn9Ni43Yg9PT2QkJBLS0uIxzq33Yh0dHTt7e2enp5mZmaIxznU1NTb29uCgoKn1m6o1m6dnZ2o1m0vLy9qOap8AAAABnRSTlMAIEDfv1C6kOEmAAADhElEQVR42u3ai27aMBiG4W7tvv6NsZOQEyTjPKAUeti60/1f2WzDykbbVAMxAfoeqZVxIjWvHEMRnBERERERERERERERERERERERERERERH9T++Ons94f3557IbnH2zHZYajF12+P7uIcAKyi7MrnIQrhhwYhhwahhwahhwahhyaupBQYal/fT1EPwdGdxhe95+mDklNSNg1Ibz2XTIdtX8CixlmyeLOTeVJhB0EVVMrrGgdopZ6fkKoe6o+ZN0hH7EKSXCft++TYXuKIRZuSaaPfeygKZYZw6tEAtQaGGzoiTEP442Q+g4XMmu30b5e9PtTIJnByof3ObamxQTjphg4yrwZcpM+C2lCSfOtkGqi1x1+Rfyv+2k0xWjmbqnoDtd32FpDeu7yRMEayM1TiFJ+b4awgp6CG7nuwE36GSgdwJk0jKoNCbRfeNexEfJ9gSmms/ZjvsDj/WyIrfW08iGhv8qP5neIkk/+vkvtsCsiA2nA+maAQLpu5qO7Nr93q1SCmpCgYU92JV3Ui7Ar7f+GMgYvhQykqyvjQ5SkLkQmvbmNqHrGXmE1ByR9PaQSx5cE2C9lZOxvrPFLIUpEAT0fot2JgR8a0e7xV/tjHqT3ekggTyUaexUaf/OOJcVLIf66V78b3fXQnandUFU6rHv6bTyVKOzP+knRSFPrG5kEGyF6HaJEvxDi1e0R+V2yXwOZLK98pbER0pPVMriHaosQNGUpeGtjR7ebE/+w/yfyFU4YOEaqMVZdoYtMEd6IWl2yaWCbEMzFMcBaaxkT4baEl2XIrmI3cYUMQKffQVaWywOZO7NeJfIjtTSsv/aImOZE3L6Zu9GDNGyB3ipktSZ6I2Q0isskie2oQFEWedYq4tEoifPbOM+AuBPleYko9gfiJEetVJbS5yE38tDw83ORB/c6MpBwyxCoVERthHyOW1ESd+JlSOfzFzu2c50yLhIfclWWNiRpdZLI5hYRtuD2iH9Z9+zIPdGadIf/flWAP/XjL0XcGiVF5FYkzsuiFbWS2M7d5p0khgvJ3Ip08r47MCoKbBuCleqbQmBE7/WNVdnB6z4nX+DsGiLOAHsNybK6gxG2FjardVQznQd8q3u8GHJoGHJoGHJoTijk4gQ+ZgeiC/uFgRP4oD2zXxg4+3A+vDx25+9P6Us1RERERERERERERERERERERERERERERP/JL+y8/ulGq8beAAAAAElFTkSuQmCC", - "description": "Displays a latest indoor fine particulate matter (PM2.5) telemetry data in a horizontal layout.", + "description": "Displays a latest indoor fine particulate matter (PM2.5) telemetry in a horizontal layout.", "descriptor": { "type": "latest", "sizeX": 5, diff --git a/application/src/main/data/json/system/widget_types/indoor_horizontal_pm2_5_card_with_background.json b/application/src/main/data/json/system/widget_types/indoor_horizontal_pm2_5_card_with_background.json index c8479d0df5..45fe6b6755 100644 --- a/application/src/main/data/json/system/widget_types/indoor_horizontal_pm2_5_card_with_background.json +++ b/application/src/main/data/json/system/widget_types/indoor_horizontal_pm2_5_card_with_background.json @@ -3,7 +3,7 @@ "name": "Indoor horizontal PM2.5 card with background", "deprecated": false, "image": "data:image/png;base64,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", - "description": "Displays a latest indoor fine particulate matter (PM2.5) telemetry data in a horizontal layout with background.", + "description": "Displays a latest indoor fine particulate matter (PM2.5) telemetry in a horizontal layout with background.", "descriptor": { "type": "latest", "sizeX": 5, diff --git a/application/src/main/data/json/system/widget_types/indoor_horizontal_temperature_card.json b/application/src/main/data/json/system/widget_types/indoor_horizontal_temperature_card.json index a97f8d62c9..015832c41c 100644 --- a/application/src/main/data/json/system/widget_types/indoor_horizontal_temperature_card.json +++ b/application/src/main/data/json/system/widget_types/indoor_horizontal_temperature_card.json @@ -3,7 +3,7 @@ "name": "Indoor horizontal temperature card", "deprecated": false, "image": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAACgCAMAAAB+IdObAAAAt1BMVEUAAADf39/u7u7t7e3r6+vl5eXf39/x8fHw8PDr6+vf39/////z8/MjTMc+Ys7j4+ORpePHx8fk6fjPz8/x8fF1j9zI0vGQkJD5+fnV1dXCwsK2trZYWFisvOo9PT2tra3n5+ft7e28vLzy9Pvb29swV8tmZmZaeNXIyMiCgoIvLy/x9PvW3fWesedog9lMbtI8PDxaedWenp50dHRKSkqDm+DU1NQxV8q6x+6qqqohISHd3d2dnZ2F97sdAAAAC3RSTlMAIN/fz6AQ7++/MOBJYlEAAANbSURBVHja7dppc5pQFMZxbdP1cLisIiCKiLjvS5O23/9z9V6pI60NSdWmxnl+GQNceHH+IyGTiRUAAAAAAAAAAAAAAAAAAAAAAAAAAACAl/S++sq9ryifP2mvnXNXrVSqH+kGfKxW3tFNeFe5o5vwtvKGbgJCrg1Crg1Crg1Crs1th4x1djv034xJsmp7+0k60X3n5959FI2p6JEQXZ+yQQcNqUUlHJ8uZWx0dZJc3qvRjqUz67uSSZcl3SKpNMRiw+j26EC0GsIhX5AQpvBNObfcJ8ck8n3HMQU9rIUQZJIvv8vzp5ss1IgkRe5Oj9minUi3rO6EiDbMvc1U5y/WM0JGeo8KzAZRY7A2vfmguWoszbU3N/35oEHNzG9+n5uDuem16Ks8NAerbEknkxUzGXLgsks5Y0a02BDVmI38DVo8I2Tc/T1EDL1s4HnUpJYnD73lKvOGTlOeGzRbciEPETT0VhmdzKiRUQyx9m+ICphO1cH05/kJf+k8HTI5DmkK4RxCVsvBUgh55Ayd7JcQdXud4dcQlw9z3Pem6sely0Y+pWE8I4SOby1vnZn7kGG2FmKdrVTIPBu2nHnLbGZDFfK92VheLMTSOaJfjfhoqSREX3CPfucUupzCgpO/nMN1FwuJ8v0i6y9CxizN6HHCozKXC9E5OidkxsqEznR+SKR+cZx+a0WsFJ8JbfqjtkYF9bp8xSRdLERnl450eUPK2HU75SFTzt3TXphPLcfcbuW06ku2te1YbupJPr7/oC6waXdKa9fzzLNCIvXsPeLyl8O2NMTlXK0YEtthPbRFv08UaIH24Pe/9YPYF0E71ELbJrWstdSOLRIt6afbflI/M2TBLh2rMW/UpsvuEyETznWKId/sUEv7cZrmISEldpzG9jahQM7v70LatqZCtmGaxmlCdnxWiJq49ucLuLvQmXXriZDRjBWDDiFBP01aWhj4cUCUBi3tIbDjIIkTO6RQS2yxC6mHfRki1+pJkPpBSOeFuI89OSOdZYsxotIQVeJ2eRZRmfIh62lf0L80qln0GxVygjaV0tr0sm79L8TXCCHXBiHXBiHXBiHX5u52/j1d/UA34IP66MOdo712nz7f0odqAAAAAAAAAAAAAAAAAAAAAAAAAAAAAF7ID2D6pgpcp3y+AAAAAElFTkSuQmCC", - "description": "Displays a latest indoor temperature telemetry data in a horizontal layout.", + "description": "Displays a latest indoor temperature telemetry in a horizontal layout.", "descriptor": { "type": "latest", "sizeX": 5, diff --git a/application/src/main/data/json/system/widget_types/indoor_horizontal_temperature_card_with_background.json b/application/src/main/data/json/system/widget_types/indoor_horizontal_temperature_card_with_background.json index 6fe2e71a3f..660511133d 100644 --- a/application/src/main/data/json/system/widget_types/indoor_horizontal_temperature_card_with_background.json +++ b/application/src/main/data/json/system/widget_types/indoor_horizontal_temperature_card_with_background.json @@ -3,7 +3,7 @@ "name": "Indoor horizontal temperature card with background", "deprecated": false, "image": "data:image/png;base64,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", - "description": "Displays a latest indoor temperature telemetry data in a horizontal layout with background.", + "description": "Displays a latest indoor temperature telemetry in a horizontal layout with background.", "descriptor": { "type": "latest", "sizeX": 5, diff --git a/application/src/main/data/json/system/widget_types/indoor_humidity_card.json b/application/src/main/data/json/system/widget_types/indoor_humidity_card.json index 848cf84203..78a7c6a09c 100644 --- a/application/src/main/data/json/system/widget_types/indoor_humidity_card.json +++ b/application/src/main/data/json/system/widget_types/indoor_humidity_card.json @@ -3,7 +3,7 @@ "name": "Indoor humidity card", "deprecated": false, "image": "data:image/png;base64,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", - "description": "Displays a latest indoor humidity telemetry data in a box layout.", + "description": "Displays a latest indoor humidity telemetry in a box layout.", "descriptor": { "type": "latest", "sizeX": 3, diff --git a/application/src/main/data/json/system/widget_types/indoor_humidity_card_with_background.json b/application/src/main/data/json/system/widget_types/indoor_humidity_card_with_background.json index f1a69015fa..8e83fb2b26 100644 --- a/application/src/main/data/json/system/widget_types/indoor_humidity_card_with_background.json +++ b/application/src/main/data/json/system/widget_types/indoor_humidity_card_with_background.json @@ -3,7 +3,7 @@ "name": "Indoor humidity card with background", "deprecated": false, "image": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAANYAAACuCAMAAAB9TAOwAAAC/VBMVEUAAAAKCgqopqhLQzivralPRT9IQDZPRj/Mz9RnWEns3dU/pxr5+fny8/Po2tP39/j19fb7+/vq3NTz7+zs7e7u7/D09PXs7Ozl2dLq6uvw8fLp6Oj39vbl5ebc19Xn5+j9/f7g29nX0c/Z09Hi4eHj4+Pr3tfe2dXw7/Do3NXy7enw7Ojf3NvVz87u7e7d29vh3drg2tfx7uzb2tnh3tzt3tbe2tjz8vHg4OH08e7a1NPc1dPa1tXk3tvo6erk5OXs6+rr4Nr19PPr5uTs493p5OLg39/n3tjs4Nilbk6pcVDy8O7i19Hs5eDl4uCrdFLl5OPg3t7k3Njn5uTo4t/j29fj3dnj4N7a2NeudlPd3t7u5+LU0c+ibEzp5+bl4N3v6eft6ObW2dzo4Nrw7Oru6OSaZ0fe2dft6ujW09LJy82faknZ297t4tvLzc9VsDTy8fLGxsdORT1KQjrFyMxIPzfS1NjX1dTe1c++wcTP0NK9vr+4ur2oqKnv5t/b087Q0tWWlpaPjIvCw8Our7GFf3z18vG3t7idn6B/gIKUYkREOzOalJKTkZDc4OOMgns3LiqytLerrK6AcWWCVju8tLB8e3yKh4WTiIG/urfLxsPQtKKempeUaE/V1tnLztPCxcnCvruYmpuFh4mFg4OAenh2ZlpTSUCGeGtoZWQ3NjaZy4Q/Ni+koqKGfHXw6eO5vcLHwb2jn5xRSka0sbBfVEk7Mi2uqKR4d3dxcXJgXl1YTkXRzcrIw8C1rqqAdm/j2tQwKSX38O2jpaeLjY/KsJ95cm17bGBtYFYeHR2Cwml0bWhmWU/Oysdsa2vTt6StpJ2PkpWYjolYVlVsuU+PxniZblabdWDl697WxrnLtqedclnUwK+nnZShf2uJW0Hc59LD2rSv1J2ynIzYy8NNS0uQYUig0I3AqprR3se22aeNfXB5vl/M5cLN1sFjQi9UNyfZ4c6flY2ukX9htEHLurCniXW8pJRwSzaqz5hURDizzaLV58+jyZNuVEU9WhjtAAAACnRSTlMABSIitu+wwcC/oWp7YQAANZxJREFUeNrs1l1MW2UcBnBRY2JiQ03aknNKafho5KJ8aBtsoLZky3qlpFi0TSUuO2bBNicn9Hv9yjpaUgwDBoQwGCnFCGUGiGwrGMpAoxskFGnwamZ4w0xMdqdRk10Yn/e0taF6653PxgKnHXl/ff7ve85z/+f//J//Ns+/OPXboydXv/qop+dCl9mskIpEtIAW66wRdzQatdujCw7O7o4Gg5zK2PlG4xsfm4xGgy+hFwuEwspKiYCmdBSTDCKhgEauYezx1W+GPrnrcjozt/f3p6/5Ga93VK8TiURynX7+i/BWOotkXBtf87lxY+Xu7YeLi4ODiw8Pbu9n05lnnmHPs2epTDq7v7S3Nzk5ube3t7Q3+fTX0x8ek/zw4Oc/Tk9+Ob65tnuwtJ9NuTzDL73wD9Wdzc2d39afXHnv3YtdXWo1YYlpsFgOFLAcDi4Al5uLWI3Szs6PTWa11aDRyGmBADBaLGf11mTI7/dzAVajk7Nu/3hs/LO7zlQqlcmkB4fC8/PsqIKiKBFF6bnwJ2S96XTKs3Hjxtc3kA3P998Njk1PT6/tFlypZ0iJtTcJ1tLe099PHzx+9OgR7zo9Ob45tjwJVdrlGh5e8ZS7XpybO8mRvq68/tbF2o4ajbyqSiwWi+QJhz8YdNg5O+f1BjguEEmoNCaTyai2+Hw+FYVCoad1Vi4ZiMaTCc7LsuyoTqcJ+AN+/0A2RVipzGBsyM6NamQoSyym9N74pwfQZlLOYbD4fO7cejg9MDAwPbgIFxYKdBofCErNsxCwlpZ//PWPHwou1HV88+ny3tI+Ph+oVpwvl7FWw3PXievJ1Y7a1+u2e1tkFAaG0um9yaA/6iYcJhLAv6yVlGSw+nq37Q5uVK6jyEpH7cF7E+E4G7FHvIF5Vq6TsRGWmb92kHY6nVj/wPg1N2ZQJBbQtEAsZ7jQ0BaKdHpWCqqN4Z+2vpweOR4ZGFvb5V1IFoEKLJiWl+Eq1ZV3nR6jrL19DLMHKk96v4wVv7c6dwLX+pOrNe2Hs9tajUKvowjL7Y8meRXW62VYjUJjxTZJBOyOaJBjRhUyOWBsKDbxzZ2Yw5G0J0PYXKjLqqfY1ZHprBPLT18LhZOsXkTTQolAQusYLxcacXqwlI1CVxuu728vDly/PnI8Nph3IcQGFCxAkRDXJOq69bjIQllgpZ2eYSSVLWNVTC3EN3Mnm2DVv1a/PXtoY60amU4n13jd0aQ7Aoc335VGo7EmAthnDn8oyEUYdpTEG49NTIQncMEdjE34Gb0MLDEb98cOnEj60/gX/lGdQERXCrEXKYbxzsdvDw+DtVEoy/n9d4R1/fjm4Bpc2EgkYPAqwnoKAT+Gv5/+fPQYqjwL17IZsDCC2IYVZ107MwvBqZ2p32abapQW2+Eh51NZUYRcE7G7HdhW3gj2VYJhGLhYhvxsjwb99vmAFxe9bnc0FB+PheP2QDL2TTgUYFiW0ci88fin6YzL6cp8NuSO4NCkBGDRAhHDMonIiAusgmpj+C5hzRHW2BpckyTL+MpvK6AQso1IXRjDI6iOCizsLBfa8qSwDyvOuCp2NncWZmfvY/ralJbew1lHAACFXm+NcG53wBuJBOxQJYBgsaQEamOZgN1ud9vtHIdDLxa7F4/Hgzjh47FYlC8WjYS/PUihLJdz67NxNyuiSVsSMU3hlySY8a3hlSJrxXN3K99WibW7u4zkfQjPmsRc8mP44NbR0dEtnrUEFhlCVwaHTDkrl5va9jUdbm/btL7ew/tRjvSiUbDegBszGMAhCByW64UMAQ3XcCPDkQ5JeHVodSLu94di46GQP2BNeK0Mx3Hhh2knYWF3HcQYES2mKytxM5CNsqNMIjlYbAtlucA6M4Q8Zm15eRd/SsGhl/2z4Lp160GRlSF1OXGyps6wKirIxpr1aeuaDpu0CrmioUFGiZqbxaIqSqbXy2V6hUIvk+nxJZNSVSJRVRWlk8twWYNYrSzZbYmWlpaEzWdpMcjxepVcY1XZ7+XukORym/EA1SgRVr7yyisEJhZRMo1jdQ5Tx2dubnVzJ76wvn5/fWFmZmYK2Zn6l+zsbOZyuR3+yeHK21euPsHbTw5wk3OClXrmcfGqEit3ktucOayrq9vuowUkEmF1ZWVltVAiEfCh+eA1XEcKr5EI8Y7GZlBhRTqbG/sl1bgo7pQZ2izt9fX1Wkub2QhV5SuvkhBataSR0ndbbL2F2HxaVYuy22A2q9Xq1tra2jakFmnDd/n01SBa8vs6Xqt9q+edy5cvXzqPJyK18mYaLpfL5fF4ytqaA2tqYfZw23ZOUGBVIkLCKqoaiUpSYlXjVaFQSAi0GK48q4qw8N/6m6VGQ5u2vb2+XdunNJt4Flwllsxg8RVVYFlUSrXaYOBZygKlKEJgQoiqvr3mdbA++Jtl24cr5URj5azjX07Q7cL9WaXgTFnCggoohO4XSIoqsIgJPxJXo7gZrE6URVgCpLFKrlCrtHBpa/paG0ydpbaQIst2hqXsBopvC5RSwLGgKASqujpS1/sXL5y/fIln4f3XMYbYWCln6l9ZMwvrDWdYpbIa8SjViLbAwoeedyH5bySCfuICDGluBp9uFElNZmWflqSmTa2QV9HCf7BUPpuNoKACC1OoLrCI6rWaUrS8qZ2oENTVerGnwCKue+QhEsmWn4RQ5cgmnekuqspYYp6F8SpjFV00XCgMETUjok6pqaG7zaJFLH1Kg1Eq6heWhhC3LzwaggUXiY9ntSmVpbJeKxP5MH02mHqb4Kppe6vnwvlLlz68gLrMhhk8HfOPI1leVWKdYG/tkFj6iaqwg6oLKrJoEgxhkcWPII/P89FXqbBOSmoyNnS3WCyWGoulr03dYJI2C6pJTQWWRNAsVXSrtL5itGdZRNXR0aHVdqAiBPQ6YuptampCvdq+Vkzh+UsfmoxdXQ3mGTweP8R9bjJbNoQoa3MTh+eqr3QulMrqP8viUeckJKXdle+LHBtSqRwoc3eLyoKQ1Rq6TJQYrGJQFrZeg9Vi0fIihH9jC3EVWR1IEVUk4S9xoa5acw9cH8IF2MLg4uLi2tjY8n4ZK0dyB7cRrpEu21kFFiYLU4i9RXLu3JskaJbI+Pf18yr0BJOxoaFb2aLig7WqG4zyKv4gLKlEUoUBbZYCFdpqbVW3KkssXnXW9BdfdhfyUhzHAdz9Wlx4ycbWvGRlDuY0kmlhcyHLbDahPd7KywWWpEjZNC9liWLIBY9NdkRNKybDE62O5UlGuVFcLCVu5Ea58P39/jvn/+zv5fvQ4zXn83x////5n+PxY/xo5rKQHo8ms2DhX1t341yxeO/c5cu3b6lDSDl7uVzOTRIsRKjsIQQLv7dihUCtCQaDmkabowXXcO+2UDFbNR8NxGZNd0902SzMtmuie92SwCLCWIEKX4EFiGTZm8Q8G4Vv+NizFPeMeJRZgNXLxSJUl+91lLa+I28uo8sTmDRiiQ5sFh0MqK7FzhUIUHN3I5HIFPpFmGHi4Zu+DicUVgkWUInEktnJqRp2DFmWNnX6rE02aD6ZWCVZqgqRrnkzDnt8emYd6mLY1UL5HFjnnraVU8abN8AWn7abJ3jSYCKUDFjYD9AOD19w5+6VK6PRZDLrduNWFZmKmjDlIJEplkiAxS5WxTCDESwti4WycE9L9N1IAB/0CVlAESyhmilVEjYPmwbXBRfl1dmzhQLKetpRWJehLT/tdNonNGIhZBnD8n/URF2YP1JFU/EhvPVYB5rXizmYTRttwoqeCPCVsiqGfRBLa5osaxJOhAFrRmVYpQvWnDErS1UhM5Z6QqIuN/IYuwJOycVBFlzn7hXPFdudzsMcLt0JFySIZH12fEZbqIsHcGUqNRQOh/VMBrLZ2GJjOhyYI1ymcNHPA1ARa3ZSLi1sRTSD62Lz/6rSda5r4QBLrYtYM7muJKkikT3HHuBAffbyvbaytsAqVju1zqUcJo00ksXN3XE4HHc0sNYI1Y4d6fQCHy5jTw4kvbUlZO/mup7IZEgWuCvKag4nN+XE0uKbAy+tGLfFKl2cmVgkPkmWrEvJnsOe+Xp8XZZUkWWNJ3R7uvbmnjKEZajatVqzAtYkyWIVAhW5UFaQVGtTO8LrFyI+X81YEAi1zEueZZyNWPdgwaXrd827XJZRyz4ynRPOH7GPJBjCWVhb6JZUol0ZlaW60JeoS58FFm1bi66cauAo8frDG+XwdE6wHhZyUyZiCjms4vsSVMLlD2pCtXr9hoUUsEKhOXXzIR9wwKK6oGLYFVwjs7xbcs4JxguY+KmAj8GxQH+XGOuxWD7B+k9dM3iPBwsqLXCDn9GePPigtNXG+9T2aKdS2ktPFvBwxDHKVsGF3WLb2lU7mDUHH6GagWNO3awuGx1dergyuqzUKxsHG0Xj4JXMld4VPdczaiM1d+mRs2sal853l48/0t032YXFlUlg8VHGqCyXZMnVpQS3ro2CpWnBRP0GYKA9UdrqkKtayedzU+26ED4c/XTIfN4py6LMqY2USqUyWL3e0qWPep5LZvOCYTYbRi/eMBsZw7h7xqxlR40DR43mvkXm8PimwY+Y2XhsAVwi8OC7iGAttG7Hcg7VugQLZQX9iVYLMOSishO2n1bxTrWUL59ws8vlsh9PfkEj82nryrU7bBbaMg3ErHpslk+/ZMZTD40UWFfMvK4bNfeo4XIaN52Tu93xRnPaBD5l4PlvTHxI34XvYKEu2ZeVMSps8YKFbSxz9SpcdQRtSRRYxTJY+VLxqHs5XBpgfdX7/QOs/UNgQQUWp2Z4MITMWrZsDKvIrIb5BCxqy+8ybh5w5kfOmyewaRzQpibjui/Qf6j3UQIWTLLk+voXC0sr6PfPIhbSqisb/NNiuVJhlpdcBHOBhYeQl47BfN3MrGdkwoXYrO4hYm0Ea8ElMxU9Y0TBemWeJVZy1NAmGTf9B7zmiIFdgzaNLFggiQiZdInFJSJZlDGsjczCDK6JX0VardbVljqEVFe5VKgc9Xq9y6kwsOhWgxFU8mmV1RYuAqw5gtUZuV8yep4qWEWwKsyK94wLTbMWHTWmTDS6ORc2jiazXDZrDoVlCosWl4TNsKO0hRmUrKtKW51ONV+oFAqFHN6ZoTD8f4lrMrHekuTLt6/06R3P49sBVrOHq6obZU+9N9Lrdj1lw6cXjFS00Ft5w2jEXx0c6Xab8Ye9SKQ08sjvzJu4e/EUuuMZH6M8HgFbaLkwjirLckkaPfn7JAsqwRqnsIqlQqFcKO3tsyaCRWWxCidf2t1PfmTXl9VgUdK4BGyGMh7PrpBvgZ4ZSkWjK+kwjCMWrjOMRwg+5WgHmphBwcKeQSvIw2HYQmZhkTELh10ZxYUMsDLEqtMQqm1VeWn1WcunWjP4jscOrB+OO3ge4dJegkWudDo9yBKTpIdZZbFgTw/FU3zc13rmc74jEyslWQJmsUgVAgsuZQwVFu+EWhAs3jLgqg+2NY5uW+XhfCG/b7q3r5o83prBH+8n/GSV2D5+gAUSqcglwypRlmTRnwqHcdhPJbORcmMClSVYYZUFFwd9SZZSl9IWNnhiifsWZMoQPqxW28Xh0/n8cbdb7BfizfL+/rbuuONkFWf1apDClAVpmyWuR6hSUEkWAhdgeE+zWLCcgkVza0Wy6OwfCiks1YWXhRbLDxa/44ZLYbXbuCEPPx++u30KUH5xz5IsqA5AZbMgGqKQy2ejqCqo4lDZLNuFv5HKRvDYxSyXZP3RFh0WQ0pdMzkDZRErnnXTFOotqIilbvAdOj0N3717agm/5cRRkN/SgCVUB/zaS8eP/aI6sPDFR4Z4R2APh1RxqMDatg2slM1iWTy6279iArP86hB6VNYivCKUa0tlzQQLb+IxAKgrqPfLuvpY3QnbD6vl08PHrntxbGIVAthXofJrU146PkVTvNTert4xRIMWjQKWAcY2sSrKKosVDqdnPBYu1PWbj3uLabMM4wDuvSxsASGjK7XaBjLYwEI4qD2stXhBIMBKNUAoHSWrjaJNyBZWatbDaE1aDU0YgTRuVHZl6oGQ4EVHjHhlUqPJlnip3pglZskSb8xi4v953q992xfnf1FxmuKP5z1/76cfrVCyUK37CovbIKv6sNWBRx6rcTQU8tprV4204Qpi+dQtWDuhGydW8LTOjW3csfFakCK3JA/xcPyH59/3+BafipFwcREjGwLXfqm/BvVW932ogCLWGNogsTYPBatU9rgco85zNB33Hbzusfa+cmHrJEs7BsGpOzwIr59kYEKoDYJF+2NsuAaAAgt3LJQB/t4tzFlbsZRgyTziVvdER/3qiXWKlY/fpDsp8whcsTKd7b9Uhmmg3D1eig+gVB7PgsfjesVaAqujTKxSydtxVDS6JyZ1xAqlCu+4re3l+4K1swNW+cKrrxmNpbkKi3dwHGbJSFYvsXRBR/smsp0AS+lbrLpVSC0b+IGPFhwPPmAXVPjzPw95UUjFQkWCQXLFStgxHmSKsYG5dDT9TjKemvf7dw8Wdg9c8cN83nc/XswcevPFzPZOPrNzNX8QtfN0nH7H7cvkM8zK7mc32w+y+/HtOXyZEiqwyPMsFbFoxzpBM/1LRwhYIbVae/Fsdm8vvbFib0YwbCB8+vfkeTWPwSKVw0GuWAlHTnPXy9nS7v71uZ7urM6/sKCxPL7shf1t79Fhx85LB5npg0PrQc6UWKuwyhk0QowZL+2UjvLt8fIrme3dorEUf72HVXSOzQKhUl2vg0WtcAKnaiU6ad+kWzEKaysLVjwdXZ05a+OdCZnoSNPwm6J6ysVaCjoCrY6gfz5fwoiYyqeyc/PhaGFyMhsMdnUxyw1Wpry/i77VkTk6ZNbR/kEqTGMGsb7eF6xS9rCYb9+6MJDfPjg0dm/NEQsoepxSR1GrBRa5Ji6XcST90wGVS2mE8Sx1rVg6eZ3XhGebYeJzWr396UnV2Kw/GLBYAo6gLr8z0NcfK/fF5hIJRzIxlJ0PBAI7RwsHR+74a6/GXz468h4eluJT21libRYdEzpiDYI1F7+wQ6z72fbNTEdm+9UsGurcblYUCyjOM1hcre5ucaS3gzPp/cNUJBFWRsIsbY0LsUJ02WymizGtGooeez/6s4p68NhKqrElqCiBYDSfz5fvp4+jyyPRaNR0cSNtsZwfL+4fbrrjh5lt68v5zD5kmcP8dCm/bTxK58w8FObecY9vZg+zmIZfLmaLmQ6czGa3jehhJcmSLtHJpKqONf41jqQzxSRcarW24rHicaFQDOO42YzH+bgYRCh2mR4/fPDX++8/ePjU6LV6oPIHuyxYio3C1RXEw7N5PtdqpfNRoe1a8Ls8cZ8VwXzlRaYpVp87qI3wnQ5sj7WFcjt+dWyXy9kdnraYdb1areswKGHV22D19uMhuml895NPPonvRw9SEYW1tZctRqOxQjo8NCJY1P4m7HaCmU0zeFZFh4BGTKljLqgCUFHIFfTrglBRalhuz76VWeSamqqw/Baw6Im4wzWOiUu4iFXO728aBUu4KvkvE1B9OEIWKmbd2sof41KIcvJ0+6PYcS6XjkZDI8zS2XT6CdTNrsduWW8eIhc+qddHQztQFo3VRA2R4kDIFqA+F1hYcGEu1lj0J8GaItagxpoHy8guzlXst1iludAOZdrxh/ybdvyniGPxEUKNm3dvfXFvK1aMJlPqgdperJjLJZPR5aEhsAw6NEGTib+02XQGrldfH5oyVNSvhInCDRHRUTDoByjUBsHiEEurltfnqbJa5z1WL7O0iO1xby+5AKsNlHCKcJmEifqLeQLZvYVtFeqS+uq5etaP8Vg6moxsREMaS6e345HOkMlusFE343r18KMyqJAmGe5g/JwJfSwYrLB8GouLxa4psFyBwdNie+z3+GS1qFyCRWfXMz3/l24iDZEIXeSyAQkXCoV0bm01dFOtVjxbOE6FUrkQ/QguEwuSGVznMtjQZ2x688gMfkJ86E2sOlmgy+/CuheZmJ/HbIw26HdLFjKFSBbtj7Hhcvu87NJUvAllFcE4OOkWD5e6OfzlCEQg6dE7sDUUufIVcvfOtXc/Vjf92UK6uLqcSi5rLLRBQGbo+ehZDPYG1A4fSSvLViKdR5j0HZWLWOM+KwZbLN7hQrGYJRuhiLWGZfGD5T3JIsqQFhMFd01FNBD6O3oGn/rR0EvPfs137ty5CZTdplTrVvo4XQwvryVDIzTACxYKjnLp8QlnUTx8vkkc5WNM6OqCCygKsdxYjyPk8vsFi1T9/QzzTmnRWHh0N2gJun3UuaoujUUo0phliGZChIhJvMCrPoGzXcEFYaCa25QBPoth8HhlObKBkVCy+vrIhc+xYbTn0hvACpCKXFAx6zxYPmwKB7Ck9sC14BfVggrnM8iUrBa2Ji1gnWMWV0uWS7CqJDG72O127W/F+keQyMNbJ07zx3y5FpfXlWpFU8lidGV5NRnGT8s8UWXBRUqDgT8fH0vzrlBJVhOxvMarWKRNUrkQUa1eDrk02SKqNeqk44xTFgd+FNNGYz0LizzR0BC9EjaBRBUiUGM1bXY0S9xvbmxUWJHERjR6N7SaS0yCJasl6lX5DtRJHRjEFZaFWP1gXe3up96lsGS93mQWz8dOVAssVmkBqxvzK1QVkkGm0vTaJKmhmlN0v55OABuVRrgciuRyidBqVGWxy8RtGigEriC7qqxhS8DvHu+ns72efvQuheWtZ3VprFFmQVVdZ1ylao3Uq6RJoNoIVSWd0dKIGz6salCq9emNu6lkZGX1OFLHwiQI1ySvNnRawGKXGDHW19dHmfVWfw/drBCDoWRhKvIap6aFilhBlcUm/OJyCRaT9OyhMIqbn0BJUoWlXYBsOKNU68o1lGsjsVrcneTFE81bVdYMQ6sR5Qpg3hoeXmdWq25+YnyEVgf9zKqcY0BFmfbWsiyDdSwuFcLl6gYLKlknYaovVa3pRU4DN0v6bWXeunZtORJNrkYKEbDsBiwJxUIQoWoxy1Z10VIC0zFQyODoaKsDN9IwsWHGrLDGmOVlFxYYrCLW2IKFlxnOTkcdC1FZElXTq7hUkiRyprGRVQ2CJV03boYi0VxiLRvhNogP09HNOVb1AKqH1Car5aionHT/qfOiA43WTBO2YC3NgoXbABjAn8FqdI46XB5mQVXPEv3YBpRU1bVABQVW9XeVbSRe+VlDI9yI7w5RG8QELMqF0JDBKs11lhbqWOwODxKKXJ2drcJlGnmrynoDT5itfOZLLlaB9cbYkkWbjwMut69XshCwuAvwN2OTQAlV9aRZRSHVCipL3UhkdS21uhLditDH4scDFy2fuqGaJChvLG38F6hwQIxbQk4n3fhynsKRL5160E6mwpodewOPwbTp1iirdWlsKTDorMzH4+JgV7J6+kdodNI8ikoWC6p62BlNpfYt7MAiieW7sb0EPlZHF1Mr60BxFQscjkDRg02otOt5xGpmlxmrXY9gfQjW4tQUWEiFJavV0OgcDtAkLlnIQM8kdwFY8EugpEoWS0GBhbBMYR3nNvBC2drerQRUZ/E5uNmvgwvrTKwE9TS/I2crd3E7wXJWWC0f4L54q6gXs5Y0Fl+1YRa7mIW+tY5LXaJcLpSrRnWVWfwCAaWV08wqpVhqGIWoA3y6mEzcvBG9dzuhN/CFkzZy4RwDsXOr5NBxBas6P5AsuvjJ7zGQy+0m1pfEuoRqTQsWu6gNvjHb1bR+rpFYKJfLQywZ9C3a4GGKojRTWCXXFkrXUlnqSIhd2N0bK+lv7iUMVKw2sES70k+gB2sHhyL4LmAN1rEuEotcOJd3uWY1lry+wSxRrPPD6+coYFn8NGjUsPrAmjDg+/N/AMIoVlVXF6xS06BWi1FUrdxqKBX75nZCZ+NioV2BpeMlE8oHCeUFDhdrsMV5mgJWG7PE7eN5F7pWlTVNI7hWLrAwYKBY6+Ji7PowWiGzxLVwZtH+DsWSl9RZVWU1PKsRNvx3IzzGjj+Si9/eE7doSEDVQmziVo34RvT7+INYp5jFN1+ZxXGQa0mw3mMWDeAaC8WaXRBzOFDrw8OWLm6FjCLX27iDje1dK01RLVLWJnpWLUuFNXBOsnLJjdRGOr63FWbHRb58a6NZSt6BEjCh+uCUs8VJ38rZwveuiUV9z+Hw+5fQCD+sZQHGLBTrfNPw4LAWsaHpHdBYdL0NLLRBUmm3atsQUSy1Wsp0jPzHdIzXrlLRGLEMcFVaFH99UTRtyikiIG0olhMqKhaz+CIvdb9WwZpl1puS9e30NIqF8UKAKiyMhb1GlUWLcQq7IJMsOWSoLIRpypCBV8pSx2B9FqajD46BlzBaC2wRBq4Xeh5dgNdYTqZqfe4FwZoF6z3BgombIYpFCyeqVRMHf8G2esmDcoH1qsYasuv4oguiXIOWI6HiQovErVLxTxuVaq2trEREtfS1kazTiOZilZOgUgoStFhtBP0ujXWJWN92iIC1iPFieH1weLRJhFl+nrrYxSzTBFj03VSYeJp9cqHLXzdo/07jaZUVwoY//T2qVXd4YNDGi6oLX0HFxapAuV0KFda8YEGFEUOyhMrqoVEQrKYaFsrFvYtdzKJqaYO5bInMkvtHAZNpON2MnKWJSVllbKyE7qIVfvZZglAmRBzIoGupLPnD4xfTwJKqiw48CYdLdC1miTZIJ4RdTYMnWUGXaIaIypIwyYKLI0mUNjvChVBYudW7q6lcIRsP2+2kGhLn7zwoVrosUtsmzlGI9QGzhErnco3NVlh8P49URlbRemudVZKFZihcgjVj0tuYxSoNJh/QS5hMI9L8rsiVKwornUytbSSPCz+H9dVqyWKp1dKK1UgsKhdCrzlh2sILVWNjkiVuUxp7oQqM8ubsBCsI11s432nXWDrJ4tAmQbLQv6qR7/zZ6A3iOzcQpW/hBD6XzEWLhZCeXHxmf1knZ2JZLfpSUyFULnaRCm9tuTXWWJUFFD3/IdU5J7bSCku4fDjgofMFyZK1YNhpoUIEDr9qBhXzSjgcpj/CygCPJwvF4yhcIVoGmhFWVS7FE0S2B+WFNEQsIQ2XBx4hXq7WpUuLj7U8evTkya+//vLLORSrlvXL7w9/+Pw3cuGEp3dgAMcLohGKkVzCakAtMvId2xn633Rw6hshWHhkhydc0Rs6fldpQs8qsR7TTFRvzSRU8h0vWkHiOOMR3x76G3tjWhEu/vV8Xd4/Xc/6Q/vtJ11woSH2YssPVnMnWGrvUQd89lB4odqX2thIcpRqZWNwFfGA66YNLizEDayqzFnMkG8OaqgqiyYsHc5o+CGzZD2vsOi1L8mSt+ufaAXDk0VeO3EbPMNRYC3SwyCEXsT8NImCUI4V1r+U3W1MlWUYB/A+h5WYebJgtoWmh9bLcVT0AvRmbpSLWcu5xpzTlUwlN1fhOZgEqXzoA32glzFnQGvuzDTqA7S13OLT2WIjOdv5yGFrDIZuNL+VW//rf9031+E6kPVnxZEg/Z3rvu/nee7nvh+7BsHCtWTfObm+QMJooSoqggMflirtW6pquVmhrNcQsBbLWfXGmpavzBTz+DRVW/suYI/NvY6Wn3gEh1U/gi+NHUSRoyS92jzU2XnxIjbPnB0oYw12DXT2ncns0U3ROlhQpZtXY3SALVdh89z19lLWG28UabFMoVjGgqd9GkNGluUSWL4it4iLPbbBSmNVRhdZUNGDBBPmId6+ODLAjfSfur7VNTA4cLEnk04f5iVGXAmP6AyCj6LYBKFq4pbAHFFkMWTNvSCX+LwatmJJsOoolwKrgG+aqU3W1i6KD1sr7lOWuRiWK+wspQjhBm7ZE8f9W7///vEXn7sLk4GBkZHOvnR39178BExEOZVj6Qgi/Ur2GD+8/XpFZL0oObiPmzhSaE9UYbxYNmCgtFlhJdvBCp+zmH7EQdu6lmOZKu4EBgsd5rcBoL7A1jq/0WlkBPfJMxj7d6DCEeVV/E00qoq1wral7XukCepIKPcW9tWmsvIF+SFVkUWXsVLGmsU3p6CSKa0qc9lvaMXipIqpwPqTKrLc1THu/nfgAUFP8VwcqniICirXifneRdXuzdhkxr6fJwsmrNs4Lb+4UaICq6RcGP3zrFYFWdIE55NyQxrTqnDZ26iJh0gWiyZTeZZNZuDpJH2Z7qOnTjTq1aiI8BFHC06BWCJLR4tWDILaBK8rq/ZA85OYh1kQaPhmqBwrh/8o1ZIeWEwm8cscjHTVwwWYa/RWrKhCqGo1lhsyziBpPHTm3Ca7DEBURZJnxZm0ja27a1AsaX75J8iaSTUDtaZySr5Uuaa5UGh6IRSrpBUKJzudLOIH25PJGTksgxVgpwUGSjAt71m+Vq2tX0G1IiuTRsDa30CTV5Wz2NLZBLl7n/1oz6PKQufAzzxA6Wy7rrOcFhZCEgO1hG2wwA4WElsimqJlranUJKomqsiiqqxvdXR0g3Xi/f0bg+iWLD79A8VCz6rZwUPWX9sfJmseKLl4rViWrGcVoms2mcyjFyZLcneA2amnVxEVVLu/gsqzWC08/i3dffzEucOJKiSqrOd6Vnz4hy5taJFutICLQGWt4RV5ocK5gJK+ZZlZuNF+Iz+XTMoZx3Qk1dayZBHGczVT8ViFhH4FE/JzbIO+Wse6kTY8jWq9vjvGosqz4GK1HlHWTWln11tqdmfJggq5ppqF3EI4+yiGnuWjhyxTSUphiFNRZKrXf6aKrOXlwqVKN9ogWXRpG1yNxXJFViNP3G9iM3iTsqiqLORkDG/agMFinrApbYI+qZQcskwVYzBTcaCIIkRMyPcB9d0vvloIHlAF1hrEWKs0QkRZnKfnSL4Lc0ZbjcWWWvhbhkBkWsvlWXbSOw9RYa44R5jJ5Obgk/h/cNANpaJpk5CI4vMyYBLUL26XOFlHT0UWR4Ry1tIrpa8NLD33a23Cve7ZyAqjJUrF1Oc5NijDRw5ZqdS0Lk3PgmUJBTuNR3NslVopSkyGQr6kCSr/BAYW632w7onHdGNFmXtFlsxoSwvLvpuSm4yR5VX1pOc45+kzA8z03XMVITcKBFlLhAtpxoE/liqakM2iqvlSVayWGwnBkuf0LWPRpREMP1y1EhvZ8LLI7OzsFAcJvDAVUEiBnYsMFx6y7uY+vqkc36FkWcGaMdikEhz7eI1bHVFQ1eyqqZFlklgAipDjWHie21OPAEJWKJe59BNtkSUzGDqO+zhVfbOxXMXkkMWSVUjHksZaiKx9sWDIAaydJYoqmpgaydfYhjsM2TffuGqlcdTC0wb3Hk5QQpY1Q584ZODcaf3KLKBNVVotL+Mhi6ccCykM9QUOH3RZSJR5VYx9eIBKtZgsyvpkRRaeU3es7RRmEBOQSHjZYfXyAZxnGbiGWZlVRUg+1Er71oKagsquT+xTKl6mLGmYg7J04GVkNwLWkihUK/25lqu/3w3wfX2ZDmHt38iZ03Dd4WAlRG7CAgvzbddKkqMFL6rWNrH/B5bu1JvBS1HVm0sOWabDMYys6BIQSZxEQOCqfr0xYCzp4eHeXqD6R8tv26XbTuF5ig1hvjbM8kQYE15Etj56Il6hPyDRkVCvr6ZUwujO3unIQvhKD1lLLCRUy1AkyaoBzOg/h81wbIC61rWE1Suk0dGxsRVusrbJdO8mvSihKk7RQFZ6pshEtqgsytKrxmsVdJkqRwuiKnmZk1FfsiA9L5lK0kmUmZ4X07ZtsgQCWxehIooJrAxVnsU7/Z2Xjx8/3na0UWuks38y++lmdMMvogpnjaxTGPWVJShkiq72hRxfsFhUaTi453DIipOGbHzyuYA6edOdd165cgV3k+DatZkqZqlavf0IXNQYa7zr18sdlzvOn3+Kk4Px0U5xCSkMFuKsVqrS7pZlgUCS/uSe3TCz4olTUafidaTkG5C/dAndSUiY8A6meyV0PffWrmWqzZL0EPpWr7jcWUbveCeetYpJ7P0674RK8Ta3upQZE3ROJWPMC8pCz2dQDEtRL6OSq8TOMjCDT1I0kcSgYOJ6K7KA0nSPjw9BhrhGODH0aw9maXo+O6WLpyQJnQUlJcyi6vKPyNtAFQKVjPdPNs+2I/Ps7sxiTis2lS04hg3ilzSL+h7kIZI7mVu2bNnGOllYrzfFpSpbq3xscnIcgc1dmPw0dPbsZBe2NLRxeSI8MDXgMxiMQiUsJ5e2VEVVpaq2ctcMDzOWV4rFxVcurR7e5GOuFItzACmJJqcSGLY+PPeWbgBQVTXSNjg4CZljoRFeGB8cQg2Hh7r1W0FrwI1+PpEaUVLpojF9QgNVbIJSK6hQJnaMky+FnPy3vISPI7jDp3l+J0DMum3r1t2p8SxxySNCdzhWF1hoiI41Njk+OoaMZvRtoAysRGTR1HC/cNV2z3trlzXB96gCSrvGEQRv/JEjO4/cIviOnRoBaaBajYV2iE3OLeaC7Liqhn3fwpDRf0Ey0bcXkR9gxdC3SlWQhsjNNSvWXZiJBktUB6mSt/7/pI65/fZ1xrqVq6WFBWDOS/vrlQHe9a3hoYmfmB6sYlUXdwmsL2NVM7gSZrGo0measgUG1fNUsQLMTvmo4z91PtAg/PRvrlcjCy5uX+MT3BXWgToJamzC7zvuvwDT1atXO7dHV3UolrnQBLnpA00UTyhlsYIKz9IIqte0Voay1NVtAWILEVTw3y6ehfhy4ek+wsKfEjCEJ0+q8qzeMVGRtV1YXAwPVWTBJT0r3i/ftFGKZSppgQc4WpgquHxKCEDR5VgeFqqFD424Hpcdd4SJjCdPY2Td5lhSLWNhXwn6D1VMZDVyv1Pj/evvuKvSjsMcLryKcSSp2TJXeb2WUN4VUfe++uqVh8wltExU+WoNjY5NXBDZZ/rdXDIbVFsDi2vCubOwmsWCSgdB3GQ0lfQrc5nIauVcvmZRJXH10k8IN9pId1HZGW2BELghY0i48vUefusOWzLL9aVgYcCACn/LAlYJ4yG5d0UVViWwY1GlLGgiC4OEa30+cBFnNHJizXy5yKLrHe49YH4UEqviBvjx0OnGfmTPkj12rlhU7ZANiyjWfTzBsOGCxeIiE6rICuFQ4VVexhhLQZGFeNaHH9IV00MTctU1QhzLCBs9w/GlxvcsqlAqqSSKtWGpWGuhisU6GTuWMCKOI/p/ZjGm8sOGssT1jDyfO6YTII1rhJNgwdUPVouoUCyw7KhFFTfOYv1OgsWKKilW6RGLKEtdiIcpIMKcK3KcizJBIc88I8u/PmAu4u8U+YFZrlJWr7AwYIZjVoIwrhHQWlGF9Zn3bPBNkMWiCieqjrUE8yati2NZtUxlLIQsdT37tKoOjZDkWaxWr7IyuuROznJjGho4sKsKi2kTOBJXUqWj4OoqLytnRZf7z8YpZ1m58NjxQ8zIt98S9ccPrhGOB1Z/Jp7nIphtZKpFhc3VogqDexwFWaw4CppqG7OOCTRJuYpZgVXu8qyPwHoQJLLw91TQ5Vly/ktXOp7sW4CCCm1wr6gwuHNWhsWKKp40AWWqkPjnFlcczD1M60XWrV3G+qe9OwmZMY7jAG7nQESWLCmiLCclciCl7HFxUOaAmjKWwpCRZURZI3KQdaK4KBNxcbFf5UKWOJDciCwn+f6+v+c/3/Ezj5FyIN95551555mZ9/34/p//LGbm2T5lJFj8nHxjrbvQipUeNlf0zlgcgxExFlzIKNy/GNyHKt1k8a7gDFeJFWi6/Y2FpaUSB1acDekCa/tIuKAiy/pCY3Hd4oNLZKc6UuACDN/sRYwDeuslJEEFlkckJXPlspT2dYm1hKz168GyfWxrxwPK8KJWpXkwskQ+zBqayspUS10llmRi4YgKaw9rz8pcI8g6uT4lvtFpz9kdTHm4MswPsomDjyr7fzcE7ZOe2ZVYSoOltHGFEzNJK5dYI8jawIAVX1l95MjtPZYSAf7eab47kWm89xdPYISyoBILrlmJ1TfH1SIt62pAfpHFhLa21Lcc5ksoN2cWPRszEGm8RbEXyrKwLA5Bqpw1C18esZBfgOXVBUFwaRRGVqtBWC7XKvU6bBuTx0Qp/IGqRlk+X4xLZaUHJOCoLIioagWb2N7lLLkiC0ms9VCJpUF4xjbHB1t9mUDpLmFK9nmgzWVRBRbv4yLNKmLI+v26KMhlISPoOgmVJ8yEZ86swSeElMq1VULpeU+xhoLFsvD+A9xpEiupVBX/EHGiLM71OXXNiy6xkkqDcIO3FVlsy1XwNERiaQymstKqFW6MHRVkakWPjKMrvy4mzPAjkJ9NGVW41pQrWw6f9raUgZ7EUllzVdZ0xkVCKWIphgp9Ibksq04s5DvW/pTvJ3iwSqVSpX74SDVMFfZkfHJlM4bKAkuqmVAJFRNhqkuJcFDcBZZcrgJLg/DAxZS4bpVrtVpgGcqTWJwxUlkTVBa7mjl6plRaD/JchOUPQ7kQZ+mW7AfWtZTQFlgVzPC7d1VVVlRhDA5tLouspJpJlaPGZC7sIiy68NVuGCKhLdWVDUKxwgRfxXq1xW6TT2cmteUm3WqpLKmWLxfLUCqM+1hY7CuyYl28cHSBNcKiQXjt4sXAOl2q4z8j6/XKquYncj16B7rGoMoyFFTIGLWlGOwnUwdQYRwGli7agpVcmjICa2OtDlOlUp5sfz92hHncyS2l9expqqF4z5zKMlVzWaZSZyHRBRVc+Sy58liI34NPE3xct8pryrXyNG3sKIPRhPAlGIjfFI8lSyq1hd2YQVQFWyhMrjjL57PkEgu5vI4BLUwZa0r4FLJqqVYb1ksuxVRkeVmTVFZSiXXDMBkwH5Z785XLGiOWpsKMdYEqJNwcn65uXLbMNlQ63N8qmFgoy6O2rCywVBZVYjnKHzqOSU/QYpfriiot5IWVwILLVSvUVmDZu0BPn0GGNd4kTZTHYWLNxRhUWVI1OqIrRq7AyntMqUtpSLdcuQ55V9jScGAdHHUQbSEHB4DFtqjyiVDzO8egzYM5ZSFUMaRl34NLLKVtW2HdEusqRNzicbyXsWoZtlq8ahmG4lSyXJVuuBC/NQ5jMKxZYgGDGKYJGMZhHotpPwjV1vF78CC28eQwE2ITxqvgwgo27SBeLIlNAFe5RfS1tdpOvI6XL4faPMpI4+bPX34DG3l9ZduH/og8aYpt1hY5odxvOorjOgNPiOFpXMRDnt3DI9h73lg+f7ZNv78/9vUaPMzNmz98KlfVXMuwP7PlMJ7XwEsC7Am2vZ5zyJ0Hx2/1GzfDQE/ufn754dOn58+fP3r06GmWhw8fFp7OLhRWrizMnjMbmTNnzoIFC+YoCxYvWIAlOMfK2RacgOBEHPoxnmmOLVq8eI6dFVdn12jXubLIo8XiPuToi6PIly9v3717++WmEtYtTBjGOn1w6rKKqYByE2kw4bm2HUtu9bu06NWrVx+xWegPH6hCGqiVD089tF+LPyGLa0izvTFwSFfBXQTxO+PnmVMozMY/AVmQ+NdsuHBQdNYLsJC3gRXbWgaXjcKpw6r1XeiKzxk+OLsny21k65Hxt8Zum/f41eOPKIssqSA6xeCXFq0NK4wSY1kfdDnLCjOW+sKOwULWhb7tuGkKMOJfwesSK6uLLBuCPgzJUoyFz8+0rUbXUBY+zxWUI7vwUlfkMA9w52rhrUurMQa5gXyOQarYlJv2vbbsKxbZRmqKKLp4PLVAORAahkRbhbOxFOcjxI5DZ3UVi00sxlmcMJhrP0wZcNkG2Wt1sEA6fNheXWgzBWYOS6lUHnLr0hisWTYGwYoqBKYXZCFcf+hgHfRgRx/rau5La5c3TPScbLDa10oITdmSxbuD+y0XyRGrWt1YxY0xHvfX8Tbyw1tgKuHeVIZlqtW5ty5hDD7jhJHWLJgaKqAsr/cBhi/7y1nQYpZFGJJcZBXUF/e2jCwsQE+NFdU8hQJ+asW64PcxkHgvo4c9o1bis4VbzFQ+Uz1to9KCzbQ7a+jYS5seW1nOEkpd4deBxbjLYL7yULXAWO5C7LumQ2dxHILBjoAwlq1XCL6BJxZC1hX7H9YLyLpuYRB2qiHlGh+eALVmI1AHPbgRQ5FWZe+x216RRRVZj6gS66ixIEowyLwQteV1FZimutJ4hdiKMleBDrPPRks0URVY568zgHXtnLHk6gJPnVWV15zZuOxgQmF9K9Uq5Pa8NJ03WmJZVwrbwiAsWrwywtCIpgMOS58NNR36SkUWl7mIbRkPsVHtMVQz6ypYLKtr984dA+tfSYcO/6Srwz/pAuTXXX+LWZgQQbC38zmJB34s+8GX8SzpCv0Hi66IJ3FnX35EF+YSXa0nLfBTeSlfrCW6qH6lX39LUzi5zdn8qnSizs/DnKPxsjFakHMFuo7wQ7vo9+f7mkVtrzR/uf649hcKc3eb621v/J//+aP5BjBQJyRJSDNrAAAAAElFTkSuQmCC", - "description": "Displays a latest indoor humidity telemetry data in a box layout with background.", + "description": "Displays a latest indoor humidity telemetry in a box layout with background.", "descriptor": { "type": "latest", "sizeX": 3, diff --git a/application/src/main/data/json/system/widget_types/indoor_illuminance_card.json b/application/src/main/data/json/system/widget_types/indoor_illuminance_card.json index 6f9c866f4a..cbad2f7b0f 100644 --- a/application/src/main/data/json/system/widget_types/indoor_illuminance_card.json +++ b/application/src/main/data/json/system/widget_types/indoor_illuminance_card.json @@ -3,7 +3,7 @@ "name": "Indoor illuminance card", "deprecated": false, "image": "data:image/png;base64,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", - "description": "Displays a latest indoor illuminance telemetry data in a box layout.", + "description": "Displays a latest indoor illuminance telemetry in a box layout.", "descriptor": { "type": "latest", "sizeX": 3, diff --git a/application/src/main/data/json/system/widget_types/indoor_illuminance_card_with_background.json b/application/src/main/data/json/system/widget_types/indoor_illuminance_card_with_background.json index 7e215b854c..61b0bbd118 100644 --- a/application/src/main/data/json/system/widget_types/indoor_illuminance_card_with_background.json +++ b/application/src/main/data/json/system/widget_types/indoor_illuminance_card_with_background.json @@ -3,7 +3,7 @@ "name": "Indoor illuminance card with background", "deprecated": false, "image": "data:image/png;base64,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", - "description": "Displays a latest indoor illuminance telemetry data in a box layout with background.", + "description": "Displays a latest indoor illuminance telemetry in a box layout with background.", "descriptor": { "type": "latest", "sizeX": 3, diff --git a/application/src/main/data/json/system/widget_types/indoor_pm10_card.json b/application/src/main/data/json/system/widget_types/indoor_pm10_card.json index a8610563ef..0b750ff7ae 100644 --- a/application/src/main/data/json/system/widget_types/indoor_pm10_card.json +++ b/application/src/main/data/json/system/widget_types/indoor_pm10_card.json @@ -3,7 +3,7 @@ "name": "Indoor PM10 card", "deprecated": false, "image": "data:image/png;base64,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", - "description": "Displays a latest indoor fine and coarse particulate matter (PM10) telemetry data in a box layout.", + "description": "Displays a latest indoor fine and coarse particulate matter (PM10) telemetry in a box layout.", "descriptor": { "type": "latest", "sizeX": 3, diff --git a/application/src/main/data/json/system/widget_types/indoor_pm10_card_with_background.json b/application/src/main/data/json/system/widget_types/indoor_pm10_card_with_background.json index 5387b784dc..a2dd1d0010 100644 --- a/application/src/main/data/json/system/widget_types/indoor_pm10_card_with_background.json +++ b/application/src/main/data/json/system/widget_types/indoor_pm10_card_with_background.json @@ -3,7 +3,7 @@ "name": "Indoor PM10 card with background", "deprecated": false, "image": "data:image/png;base64,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", - "description": "Displays a latest indoor fine and coarse particulate matter (PM10) telemetry data in a box layout with background.", + "description": "Displays a latest indoor fine and coarse particulate matter (PM10) telemetry in a box layout with background.", "descriptor": { "type": "latest", "sizeX": 3, diff --git a/application/src/main/data/json/system/widget_types/indoor_pm2_5_card.json b/application/src/main/data/json/system/widget_types/indoor_pm2_5_card.json index f1a2e99e2a..2211ce9ff7 100644 --- a/application/src/main/data/json/system/widget_types/indoor_pm2_5_card.json +++ b/application/src/main/data/json/system/widget_types/indoor_pm2_5_card.json @@ -3,7 +3,7 @@ "name": "Indoor PM2.5 card", "deprecated": false, "image": "data:image/png;base64,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", - "description": "Displays a latest indoor fine particulate matter (PM2.5) telemetry data in a box layout.", + "description": "Displays a latest indoor fine particulate matter (PM2.5) telemetry in a box layout.", "descriptor": { "type": "latest", "sizeX": 3, diff --git a/application/src/main/data/json/system/widget_types/indoor_pm2_5_card_with_background.json b/application/src/main/data/json/system/widget_types/indoor_pm2_5_card_with_background.json index 56de801a4f..5414727923 100644 --- a/application/src/main/data/json/system/widget_types/indoor_pm2_5_card_with_background.json +++ b/application/src/main/data/json/system/widget_types/indoor_pm2_5_card_with_background.json @@ -3,7 +3,7 @@ "name": "Indoor PM2.5 card with background", "deprecated": false, "image": "data:image/png;base64,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", - "description": "Displays a latest indoor fine particulate matter (PM2.5) telemetry data in a box layout with background.", + "description": "Displays a latest indoor fine particulate matter (PM2.5) telemetry in a box layout with background.", "descriptor": { "type": "latest", "sizeX": 3, diff --git a/application/src/main/data/json/system/widget_types/indoor_temperature_card.json b/application/src/main/data/json/system/widget_types/indoor_temperature_card.json index c8316e3af6..5927ec19ce 100644 --- a/application/src/main/data/json/system/widget_types/indoor_temperature_card.json +++ b/application/src/main/data/json/system/widget_types/indoor_temperature_card.json @@ -3,7 +3,7 @@ "name": "Indoor temperature card", "deprecated": false, "image": "data:image/png;base64,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", - "description": "Displays a latest indoor temperature telemetry data in a box layout.", + "description": "Displays a latest indoor temperature telemetry in a box layout.", "descriptor": { "type": "latest", "sizeX": 3, diff --git a/application/src/main/data/json/system/widget_types/indoor_temperature_card_with_background.json b/application/src/main/data/json/system/widget_types/indoor_temperature_card_with_background.json index 28243c702b..ea0e698528 100644 --- a/application/src/main/data/json/system/widget_types/indoor_temperature_card_with_background.json +++ b/application/src/main/data/json/system/widget_types/indoor_temperature_card_with_background.json @@ -3,7 +3,7 @@ "name": "Indoor temperature card with background", "deprecated": false, "image": "data:image/png;base64,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", - "description": "Displays a latest indoor temperature telemetry data in a box layout with background.", + "description": "Displays a latest indoor temperature telemetry in a box layout with background.", "descriptor": { "type": "latest", "sizeX": 3, diff --git a/application/src/main/data/json/system/widget_types/leaf_wetness_card.json b/application/src/main/data/json/system/widget_types/leaf_wetness_card.json index 2c19b88b1f..6acc5c075f 100644 --- a/application/src/main/data/json/system/widget_types/leaf_wetness_card.json +++ b/application/src/main/data/json/system/widget_types/leaf_wetness_card.json @@ -3,7 +3,7 @@ "name": "Leaf wetness card", "deprecated": false, "image": "data:image/png;base64,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", - "description": "Displays a latest leaf wetness telemetry data in a box layout.", + "description": "Displays a latest leaf wetness telemetry in a box layout.", "descriptor": { "type": "latest", "sizeX": 3, diff --git a/application/src/main/data/json/system/widget_types/leaf_wetness_card_with_background.json b/application/src/main/data/json/system/widget_types/leaf_wetness_card_with_background.json index 5c61b126cb..f6c625bd2a 100644 --- a/application/src/main/data/json/system/widget_types/leaf_wetness_card_with_background.json +++ b/application/src/main/data/json/system/widget_types/leaf_wetness_card_with_background.json @@ -3,7 +3,7 @@ "name": "Leaf wetness card with background", "deprecated": false, "image": "data:image/png;base64,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", - "description": "Displays a latest leaf wetness telemetry data in a box layout with background.", + "description": "Displays a latest leaf wetness telemetry in a box layout with background.", "descriptor": { "type": "latest", "sizeX": 3, diff --git a/application/src/main/data/json/system/widget_types/noise_level_card.json b/application/src/main/data/json/system/widget_types/noise_level_card.json index 03d2551fdf..ece024faab 100644 --- a/application/src/main/data/json/system/widget_types/noise_level_card.json +++ b/application/src/main/data/json/system/widget_types/noise_level_card.json @@ -3,7 +3,7 @@ "name": "Noise level card", "deprecated": false, "image": "data:image/png;base64,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", - "description": "Displays a latest noise level telemetry data in a box layout.", + "description": "Displays a latest noise level telemetry in a box layout.", "descriptor": { "type": "latest", "sizeX": 3, diff --git a/application/src/main/data/json/system/widget_types/noise_level_card_with_background.json b/application/src/main/data/json/system/widget_types/noise_level_card_with_background.json index 8b01223e7e..35e45b8062 100644 --- a/application/src/main/data/json/system/widget_types/noise_level_card_with_background.json +++ b/application/src/main/data/json/system/widget_types/noise_level_card_with_background.json @@ -3,7 +3,7 @@ "name": "Noise level card with background", "deprecated": false, "image": "data:image/png;base64,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", - "description": "Displays a latest noise level telemetry data in a box layout with background.", + "description": "Displays a latest noise level telemetry in a box layout with background.", "descriptor": { "type": "latest", "sizeX": 3, diff --git a/application/src/main/data/json/system/widget_types/pm10_card.json b/application/src/main/data/json/system/widget_types/pm10_card.json new file mode 100644 index 0000000000..c9ac4c9582 --- /dev/null +++ b/application/src/main/data/json/system/widget_types/pm10_card.json @@ -0,0 +1,30 @@ +{ + "fqn": "pm10_card", + "name": "PM10 card", + "deprecated": false, + "image": "data:image/png;base64,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", + "description": "Displays a latest fine and coarse particulate matter (PM10) telemetry in a box layout.", + "descriptor": { + "type": "latest", + "sizeX": 3, + "sizeY": 3, + "resources": [], + "templateHtml": "\n", + "templateCss": "", + "controllerScript": "self.onInit = function() {\n self.ctx.$scope.valueCardWidget.onInit();\n};\n\nself.onDataUpdated = function() {\n self.ctx.$scope.valueCardWidget.onDataUpdated();\n};\n\nself.typeParameters = function() {\n return {\n maxDatasources: 1,\n maxDataKeys: 1,\n singleEntity: true,\n previewWidth: '250px',\n previewHeight: '250px',\n embedTitlePanel: true,\n defaultDataKeysFunction: function() {\n return [{ name: 'pm10', label: 'PM10', type: 'timeseries' }];\n }\n };\n};\n\nself.onDestroy = function() {\n};\n", + "settingsSchema": "", + "dataKeySettingsSchema": "", + "settingsDirective": "tb-value-card-widget-settings", + "hasBasicMode": true, + "basicModeDirective": "tb-value-card-basic-config", + "defaultConfig": "{\"datasources\":[{\"type\":\"function\",\"name\":\"function\",\"dataKeys\":[{\"name\":\"f(x)\",\"type\":\"function\",\"label\":\"PM10\",\"color\":\"#2196f3\",\"settings\":{},\"_hash\":0.2392660816082064,\"funcBody\":\"var value = prevValue + Math.random() * 100 - 50;\\nvar multiplier = Math.pow(10, 2 || 0);\\nvar value = Math.round(value * multiplier) / multiplier;\\nif (value < 0) {\\n\\tvalue = 0;\\n} else if (value > 500) {\\n\\tvalue = 500;\\n}\\nreturn value;\",\"aggregationType\":null,\"units\":null,\"decimals\":null,\"usePostProcessing\":null,\"postFuncBody\":null}],\"alarmFilterConfig\":{\"statusList\":[\"ACTIVE\"]}}],\"timewindow\":{\"realtime\":{\"timewindowMs\":60000}},\"showTitle\":false,\"backgroundColor\":\"rgba(0, 0, 0, 0)\",\"color\":\"rgba(0, 0, 0, 0.87)\",\"padding\":\"0px\",\"settings\":{\"labelPosition\":\"top\",\"layout\":\"square\",\"showLabel\":true,\"labelFont\":{\"family\":\"Roboto\",\"size\":16,\"sizeUnit\":\"px\",\"style\":\"normal\",\"weight\":\"500\"},\"labelColor\":{\"type\":\"constant\",\"color\":\"rgba(0, 0, 0, 0.87)\",\"colorFunction\":\"var temperature = value;\\nif (typeof temperature !== undefined) {\\n var percent = (temperature + 60)/120 * 100;\\n return tinycolor.mix('blue', 'red', percent).toHexString();\\n}\\nreturn 'blue';\"},\"showIcon\":true,\"iconSize\":40,\"iconSizeUnit\":\"px\",\"icon\":\"bubble_chart\",\"iconColor\":{\"type\":\"range\",\"color\":\"rgba(0, 0, 0, 0.87)\",\"rangeList\":[{\"from\":0,\"to\":20,\"color\":\"#80C32C\"},{\"from\":20,\"to\":50,\"color\":\"#FFA600\"},{\"from\":50,\"to\":150,\"color\":\"#F36900\"},{\"from\":150,\"to\":null,\"color\":\"#D81838\"}],\"colorFunction\":\"var temperature = value;\\nif (typeof temperature !== undefined) {\\n var percent = (temperature + 60)/120 * 100;\\n return tinycolor.mix('blue', 'red', percent).toHexString();\\n}\\nreturn 'blue';\"},\"valueFont\":{\"size\":32,\"sizeUnit\":\"px\",\"family\":\"Roboto\",\"weight\":\"500\",\"style\":\"normal\"},\"valueColor\":{\"type\":\"range\",\"color\":\"rgba(0, 0, 0, 0.87)\",\"colorFunction\":\"var temperature = value;\\nif (typeof temperature !== undefined) {\\n var percent = (temperature + 60)/120 * 100;\\n return tinycolor.mix('blue', 'red', percent).toHexString();\\n}\\nreturn 'blue';\",\"rangeList\":[{\"from\":0,\"to\":20,\"color\":\"#80C32C\"},{\"from\":20,\"to\":50,\"color\":\"#FFA600\"},{\"from\":50,\"to\":150,\"color\":\"#F36900\"},{\"from\":150,\"to\":null,\"color\":\"#D81838\"}]},\"showDate\":true,\"dateFormat\":{\"format\":null,\"lastUpdateAgo\":true,\"custom\":false},\"dateFont\":{\"family\":\"Roboto\",\"size\":12,\"sizeUnit\":\"px\",\"style\":\"normal\",\"weight\":\"500\"},\"dateColor\":{\"type\":\"constant\",\"color\":\"rgba(0, 0, 0, 0.38)\",\"colorFunction\":\"var temperature = value;\\nif (typeof temperature !== undefined) {\\n var percent = (temperature + 60)/120 * 100;\\n return tinycolor.mix('blue', 'red', percent).toHexString();\\n}\\nreturn 'blue';\"},\"background\":{\"type\":\"color\",\"color\":\"#fff\",\"overlay\":{\"enabled\":false,\"color\":\"rgba(255,255,255,0.72)\",\"blur\":3}},\"autoScale\":true},\"title\":\"Indoor PM10 card\",\"dropShadow\":true,\"enableFullscreen\":false,\"titleStyle\":{\"fontSize\":\"16px\",\"fontWeight\":400},\"units\":\"µg/m³\",\"decimals\":0,\"useDashboardTimewindow\":true,\"showLegend\":false,\"widgetStyle\":{},\"actions\":{},\"configMode\":\"basic\",\"displayTimewindow\":true,\"margin\":\"0px\",\"borderRadius\":\"0px\",\"widgetCss\":\"\",\"pageSize\":1024,\"noDataDisplayMessage\":\"\",\"showTitleIcon\":false,\"titleTooltip\":\"\",\"titleFont\":{\"size\":12,\"sizeUnit\":\"px\",\"family\":null,\"weight\":null,\"style\":null,\"lineHeight\":\"1.6\"},\"titleIcon\":\"\",\"iconColor\":\"rgba(0, 0, 0, 0.87)\",\"iconSize\":\"14px\",\"timewindowStyle\":{\"showIcon\":true,\"iconSize\":\"14px\",\"icon\":\"query_builder\",\"iconPosition\":\"left\",\"font\":{\"size\":12,\"sizeUnit\":\"px\",\"family\":null,\"weight\":null,\"style\":null,\"lineHeight\":\"1\"},\"color\":null}}" + }, + "externalId": null, + "tags": [ + "environment", + "matter", + "air", + "particulate", + "pm10" + ] +} \ No newline at end of file diff --git a/application/src/main/data/json/system/widget_types/pm10_card_with_background.json b/application/src/main/data/json/system/widget_types/pm10_card_with_background.json new file mode 100644 index 0000000000..acee15e1cb --- /dev/null +++ b/application/src/main/data/json/system/widget_types/pm10_card_with_background.json @@ -0,0 +1,30 @@ +{ + "fqn": "pm10_card_with_background", + "name": "PM10 card with background", + "deprecated": false, + "image": "data:image/png;base64,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", + "description": "Displays a latest fine and coarse particulate matter (PM10) telemetry in a box layout with background.", + "descriptor": { + "type": "latest", + "sizeX": 3, + "sizeY": 3, + "resources": [], + "templateHtml": "\n", + "templateCss": "", + "controllerScript": "self.onInit = function() {\n self.ctx.$scope.valueCardWidget.onInit();\n};\n\nself.onDataUpdated = function() {\n self.ctx.$scope.valueCardWidget.onDataUpdated();\n};\n\nself.typeParameters = function() {\n return {\n maxDatasources: 1,\n maxDataKeys: 1,\n singleEntity: true,\n previewWidth: '250px',\n previewHeight: '250px',\n embedTitlePanel: true,\n defaultDataKeysFunction: function() {\n return [{ name: 'pm10', label: 'PM10', type: 'timeseries' }];\n }\n };\n};\n\nself.onDestroy = function() {\n};\n", + "settingsSchema": "", + "dataKeySettingsSchema": "", + "settingsDirective": "tb-value-card-widget-settings", + "hasBasicMode": true, + "basicModeDirective": "tb-value-card-basic-config", + "defaultConfig": "{\"datasources\":[{\"type\":\"function\",\"name\":\"function\",\"dataKeys\":[{\"name\":\"f(x)\",\"type\":\"function\",\"label\":\"PM10\",\"color\":\"#2196f3\",\"settings\":{},\"_hash\":0.2392660816082064,\"funcBody\":\"var value = prevValue + Math.random() * 100 - 50;\\nvar multiplier = Math.pow(10, 2 || 0);\\nvar value = Math.round(value * multiplier) / multiplier;\\nif (value < 0) {\\n\\tvalue = 0;\\n} else if (value > 500) {\\n\\tvalue = 500;\\n}\\nreturn value;\",\"aggregationType\":null,\"units\":null,\"decimals\":null,\"usePostProcessing\":null,\"postFuncBody\":null}],\"alarmFilterConfig\":{\"statusList\":[\"ACTIVE\"]}}],\"timewindow\":{\"realtime\":{\"timewindowMs\":60000}},\"showTitle\":false,\"backgroundColor\":\"rgba(0, 0, 0, 0)\",\"color\":\"rgba(0, 0, 0, 0.87)\",\"padding\":\"0px\",\"settings\":{\"labelPosition\":\"top\",\"layout\":\"square\",\"showLabel\":true,\"labelFont\":{\"family\":\"Roboto\",\"size\":16,\"sizeUnit\":\"px\",\"style\":\"normal\",\"weight\":\"500\"},\"labelColor\":{\"type\":\"constant\",\"color\":\"rgba(0, 0, 0, 0.87)\",\"colorFunction\":\"var temperature = value;\\nif (typeof temperature !== undefined) {\\n var percent = (temperature + 60)/120 * 100;\\n return tinycolor.mix('blue', 'red', percent).toHexString();\\n}\\nreturn 'blue';\"},\"showIcon\":true,\"iconSize\":40,\"iconSizeUnit\":\"px\",\"icon\":\"bubble_chart\",\"iconColor\":{\"type\":\"range\",\"color\":\"rgba(0, 0, 0, 0.87)\",\"rangeList\":[{\"from\":0,\"to\":20,\"color\":\"#7CC322\"},{\"from\":20,\"to\":50,\"color\":\"#F89E0D\"},{\"from\":50,\"to\":150,\"color\":\"#F77410\"},{\"from\":150,\"to\":null,\"color\":\"#DE2343\"}],\"colorFunction\":\"var temperature = value;\\nif (typeof temperature !== undefined) {\\n var percent = (temperature + 60)/120 * 100;\\n return tinycolor.mix('blue', 'red', percent).toHexString();\\n}\\nreturn 'blue';\"},\"valueFont\":{\"size\":32,\"sizeUnit\":\"px\",\"family\":\"Roboto\",\"weight\":\"500\",\"style\":\"normal\"},\"valueColor\":{\"type\":\"range\",\"color\":\"rgba(0, 0, 0, 0.87)\",\"colorFunction\":\"var temperature = value;\\nif (typeof temperature !== undefined) {\\n var percent = (temperature + 60)/120 * 100;\\n return tinycolor.mix('blue', 'red', percent).toHexString();\\n}\\nreturn 'blue';\",\"rangeList\":[{\"from\":0,\"to\":20,\"color\":\"#7CC322\"},{\"from\":20,\"to\":50,\"color\":\"#F89E0D\"},{\"from\":50,\"to\":150,\"color\":\"#F77410\"},{\"from\":150,\"to\":null,\"color\":\"#DE2343\"}]},\"showDate\":true,\"dateFormat\":{\"format\":null,\"lastUpdateAgo\":true,\"custom\":false},\"dateFont\":{\"family\":\"Roboto\",\"size\":12,\"sizeUnit\":\"px\",\"style\":\"normal\",\"weight\":\"500\"},\"dateColor\":{\"type\":\"constant\",\"color\":\"rgba(0, 0, 0, 0.38)\",\"colorFunction\":\"var temperature = value;\\nif (typeof temperature !== undefined) {\\n var percent = (temperature + 60)/120 * 100;\\n return tinycolor.mix('blue', 'red', percent).toHexString();\\n}\\nreturn 'blue';\"},\"background\":{\"type\":\"image\",\"imageBase64\":\"data:image/png;base64,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\",\"imageUrl\":null,\"color\":\"#fff\",\"overlay\":{\"enabled\":true,\"color\":\"rgba(255,255,255,0.72)\",\"blur\":3}},\"autoScale\":true},\"title\":\"Indoor PM10 card\",\"dropShadow\":true,\"enableFullscreen\":false,\"titleStyle\":{\"fontSize\":\"16px\",\"fontWeight\":400},\"units\":\"µg/m³\",\"decimals\":0,\"useDashboardTimewindow\":true,\"showLegend\":false,\"widgetStyle\":{},\"actions\":{},\"configMode\":\"basic\",\"displayTimewindow\":true,\"margin\":\"0px\",\"borderRadius\":\"0px\",\"widgetCss\":\"\",\"pageSize\":1024,\"noDataDisplayMessage\":\"\",\"showTitleIcon\":false,\"titleTooltip\":\"\",\"titleFont\":{\"size\":12,\"sizeUnit\":\"px\",\"family\":null,\"weight\":null,\"style\":null,\"lineHeight\":\"1.6\"},\"titleIcon\":\"\",\"iconColor\":\"rgba(0, 0, 0, 0.87)\",\"iconSize\":\"14px\",\"timewindowStyle\":{\"showIcon\":true,\"iconSize\":\"14px\",\"icon\":\"query_builder\",\"iconPosition\":\"left\",\"font\":{\"size\":12,\"sizeUnit\":\"px\",\"family\":null,\"weight\":null,\"style\":null,\"lineHeight\":\"1\"},\"color\":null}}" + }, + "externalId": null, + "tags": [ + "environment", + "matter", + "air", + "particulate", + "pm10" + ] +} \ No newline at end of file diff --git a/application/src/main/data/json/system/widget_types/pm10_chart_card.json b/application/src/main/data/json/system/widget_types/pm10_chart_card.json new file mode 100644 index 0000000000..173e1be850 --- /dev/null +++ b/application/src/main/data/json/system/widget_types/pm10_chart_card.json @@ -0,0 +1,33 @@ +{ + "fqn": "pm10_chart_card", + "name": "PM10 chart card", + "deprecated": false, + "image": "data:image/png;base64,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", + "description": "Displays a fine and coarse particulate matter (PM10) data as a combination of the latest and aggregated values. Optionally may display the corresponding historical values as a simplified chart.", + "descriptor": { + "type": "timeseries", + "sizeX": 4.5, + "sizeY": 3.5, + "resources": [], + "templateHtml": "\n\n", + "templateCss": ".legend {\n font-size: 13px;\n line-height: 10px;\n}\n\n.legend table { \n border-spacing: 0px;\n border-collapse: separate;\n}\n\n.mouse-events .flot-overlay {\n cursor: crosshair; \n}\n\n", + "controllerScript": "self.onInit = function() {\n self.ctx.$scope.aggregatedValueCardWidget.onInit();\n};\n\nself.onDataUpdated = function() {\n self.ctx.$scope.aggregatedValueCardWidget.onDataUpdated();\n};\n\nself.onLatestDataUpdated = function() {\n self.ctx.$scope.aggregatedValueCardWidget.onLatestDataUpdated();\n}\n\nself.onResize = function() {\n self.ctx.$scope.aggregatedValueCardWidget.onResize();\n}\n\nself.onEditModeChanged = function() {\n self.ctx.$scope.aggregatedValueCardWidget.onEditModeChanged();\n}\n\nself.onDestroy = function() {\n self.ctx.$scope.aggregatedValueCardWidget.onDestroy();\n}\n\nself.typeParameters = function() {\n return {\n maxDatasources: 1,\n maxDataKeys: 1,\n singleEntity: true,\n previewWidth: '400px',\n previewHeight: '300px',\n embedTitlePanel: true,\n hasAdditionalLatestDataKeys: true,\n defaultDataKeysFunction: function() {\n return [\n { name: 'pm10', label: 'PM10', type: 'timeseries', color: 'rgba(0, 0, 0, 0.87)', units: 'µg/m³', decimals: 0 }\n ];\n },\n defaultLatestDataKeysFunction: function(configComponent, configData) {\n return configComponent.createDefaultAggregatedValueLatestDataKeys(configData, 'pm10', 'µg/m³', 0);\n }\n };\n}\n", + "settingsSchema": "{}", + "dataKeySettingsSchema": "{}", + "latestDataKeySettingsSchema": "{}", + "settingsDirective": "tb-aggregated-value-card-widget-settings", + "dataKeySettingsDirective": "", + "latestDataKeySettingsDirective": "tb-aggregated-value-card-key-settings", + "hasBasicMode": true, + "basicModeDirective": "tb-aggregated-value-card-basic-config", + "defaultConfig": "{\"datasources\":[{\"type\":\"function\",\"name\":\"Main building\",\"dataKeys\":[{\"name\":\"f(x)\",\"type\":\"function\",\"label\":\"PM10\",\"color\":\"rgba(0, 0, 0, 0.87)\",\"settings\":{\"showLines\":true,\"fillLines\":true,\"showPoints\":false},\"_hash\":0.8587686344902596,\"funcBody\":\"var value = prevValue + Math.random() * 100 - 50;\\nvar multiplier = Math.pow(10, 2 || 0);\\nvar value = Math.round(value * multiplier) / multiplier;\\nif (value < 0) {\\n\\tvalue = 0;\\n} else if (value > 500) {\\n\\tvalue = 500;\\n}\\nreturn value;\",\"aggregationType\":null,\"units\":\"µg/m³\",\"decimals\":0,\"usePostProcessing\":null,\"postFuncBody\":null}],\"alarmFilterConfig\":{\"statusList\":[\"ACTIVE\"]},\"latestDataKeys\":[{\"name\":\"f(x)\",\"type\":\"function\",\"label\":\"Latest\",\"color\":\"#4caf50\",\"settings\":{\"position\":\"center\",\"font\":{\"size\":52,\"sizeUnit\":\"px\",\"family\":\"Roboto\",\"weight\":\"500\",\"style\":\"normal\",\"lineHeight\":\"1\"},\"color\":{\"type\":\"range\",\"color\":\"rgba(0, 0, 0, 0.87)\",\"rangeList\":[{\"from\":0,\"to\":20,\"color\":\"#80C32C\"},{\"from\":20,\"to\":50,\"color\":\"#FFA600\"},{\"from\":50,\"to\":150,\"color\":\"#F36900\"},{\"from\":150,\"to\":null,\"color\":\"#D81838\"}],\"colorFunction\":\"var temperature = value;\\nif (typeof temperature !== undefined) {\\n var percent = (temperature + 60)/120 * 100;\\n return tinycolor.mix('blue', 'red', percent).toHexString();\\n}\\nreturn 'blue';\"},\"showArrow\":false},\"_hash\":0.9408410830697858,\"funcBody\":\"var value = prevValue + Math.random() * 100 - 50;\\nvar multiplier = Math.pow(10, 2 || 0);\\nvar value = Math.round(value * multiplier) / multiplier;\\nif (value < 0) {\\n\\tvalue = 0;\\n} else if (value > 500) {\\n\\tvalue = 500;\\n}\\nreturn value;\",\"aggregationType\":null,\"units\":\"µg/m³\",\"decimals\":0,\"usePostProcessing\":null,\"postFuncBody\":null},{\"name\":\"f(x)\",\"type\":\"function\",\"label\":\"Delta percent\",\"color\":\"#f44336\",\"settings\":{\"position\":\"rightTop\",\"font\":{\"size\":14,\"sizeUnit\":\"px\",\"family\":\"Roboto\",\"weight\":\"500\",\"style\":\"normal\",\"lineHeight\":\"20px\"},\"color\":{\"type\":\"range\",\"color\":\"rgba(0, 0, 0, 0.38)\",\"rangeList\":[{\"from\":null,\"to\":0,\"color\":\"#198038\"},{\"from\":0,\"to\":0,\"color\":\"rgba(0, 0, 0, 0.87)\"},{\"from\":0,\"to\":null,\"color\":\"#D12730\"}],\"colorFunction\":\"var temperature = value;\\nif (typeof temperature !== undefined) {\\n var percent = (temperature + 60)/120 * 100;\\n return tinycolor.mix('blue', 'red', percent).toHexString();\\n}\\nreturn 'blue';\"},\"showArrow\":true},\"_hash\":0.06392321853157967,\"funcBody\":\"var value = prevValue + Math.random() * 6 - 3;\\nvar multiplier = Math.pow(10, 2 || 0);\\nvar value = Math.round(value * multiplier) / multiplier;\\nif (value < -25) {\\n\\tvalue = -25;\\n} else if (value > 25) {\\n\\tvalue = 25;\\n} \\nreturn value;\",\"aggregationType\":null,\"units\":\"%\",\"decimals\":0,\"usePostProcessing\":null,\"postFuncBody\":null},{\"name\":\"f(x)\",\"type\":\"function\",\"label\":\"Delta absolute\",\"color\":\"#607d8b\",\"settings\":{\"position\":\"rightBottom\",\"font\":{\"size\":11,\"sizeUnit\":\"px\",\"family\":\"Roboto\",\"weight\":\"400\",\"style\":\"normal\",\"lineHeight\":\"16px\"},\"color\":{\"type\":\"constant\",\"color\":\"rgba(0, 0, 0, 0.38)\",\"rangeList\":[],\"colorFunction\":\"var temperature = value;\\nif (typeof temperature !== undefined) {\\n var percent = (temperature + 60)/120 * 100;\\n return tinycolor.mix('blue', 'red', percent).toHexString();\\n}\\nreturn 'blue';\"},\"showArrow\":false},\"_hash\":0.44695098620509865,\"funcBody\":\"var value = prevValue + Math.random() * 6 - 3;\\nif (value < -10) {\\n\\tvalue = -10;\\n} else if (value > 10) {\\n\\tvalue = 10;\\n}\\nreturn value;\",\"aggregationType\":null,\"units\":\"µg/m³\",\"decimals\":0,\"usePostProcessing\":null,\"postFuncBody\":null}]}],\"timewindow\":{\"hideInterval\":false,\"hideLastInterval\":false,\"hideQuickInterval\":false,\"hideAggregation\":false,\"hideAggInterval\":false,\"hideTimezone\":false,\"selectedTab\":1,\"history\":{\"historyType\":2,\"timewindowMs\":60000,\"interval\":43200000,\"fixedTimewindow\":{\"startTimeMs\":1691927717318,\"endTimeMs\":1692014117318},\"quickInterval\":\"CURRENT_MONTH_SO_FAR\"},\"aggregation\":{\"type\":\"AVG\",\"limit\":25000}},\"showTitle\":true,\"backgroundColor\":\"rgba(0, 0, 0, 0)\",\"color\":null,\"padding\":\"0\",\"settings\":{\"stack\":false,\"fontSize\":10,\"fontColor\":\"#545454\",\"showTooltip\":true,\"tooltipIndividual\":false,\"tooltipCumulative\":false,\"hideZeros\":false,\"grid\":{\"verticalLines\":true,\"horizontalLines\":true,\"outlineWidth\":1,\"color\":\"#545454\",\"backgroundColor\":null,\"tickColor\":\"#DDDDDD\"},\"xaxis\":{\"title\":null,\"showLabels\":true,\"color\":\"#545454\"},\"yaxis\":{\"min\":null,\"max\":null,\"title\":null,\"showLabels\":true,\"color\":\"#545454\",\"tickSize\":null,\"tickDecimals\":0,\"ticksFormatter\":\"\"},\"shadowSize\":4,\"smoothLines\":false,\"comparisonEnabled\":false,\"xaxisSecond\":{\"axisPosition\":\"top\",\"title\":null,\"showLabels\":true},\"showLegend\":true,\"legendConfig\":{\"direction\":\"column\",\"position\":\"bottom\",\"sortDataKeys\":false,\"showMin\":false,\"showMax\":false,\"showAvg\":true,\"showTotal\":false,\"showLatest\":false},\"customLegendEnabled\":false,\"showSubtitle\":true,\"subtitle\":\"${entityName}\",\"subtitleFont\":{\"family\":\"Roboto\",\"size\":12,\"sizeUnit\":\"px\",\"style\":\"normal\",\"weight\":\"400\",\"lineHeight\":\"16px\"},\"subtitleColor\":\"rgba(0, 0, 0, 0.38)\",\"showDate\":true,\"dateFormat\":{\"format\":null,\"lastUpdateAgo\":true,\"custom\":false},\"dateFont\":{\"family\":\"Roboto\",\"size\":12,\"sizeUnit\":\"px\",\"style\":\"normal\",\"weight\":\"400\",\"lineHeight\":\"16px\"},\"dateColor\":\"rgba(0, 0, 0, 0.38)\",\"showChart\":true,\"chartColor\":\"rgba(0, 0, 0, 0.87)\",\"background\":{\"type\":\"color\",\"color\":\"#fff\",\"overlay\":{\"enabled\":false,\"color\":\"rgba(255,255,255,0.72)\",\"blur\":3}},\"autoScale\":true},\"title\":\"PM10\",\"dropShadow\":true,\"enableFullscreen\":false,\"titleStyle\":{\"fontSize\":\"16px\",\"fontWeight\":400},\"mobileHeight\":null,\"configMode\":\"basic\",\"actions\":{},\"showTitleIcon\":true,\"titleIcon\":\"bubble_chart\",\"iconColor\":\"rgba(0, 0, 0, 0.87)\",\"titleFont\":{\"size\":16,\"sizeUnit\":\"px\",\"family\":\"Roboto\",\"weight\":\"500\",\"style\":\"normal\",\"lineHeight\":\"24px\"},\"iconSize\":\"24px\",\"titleTooltip\":\"\",\"widgetStyle\":{},\"widgetCss\":\"\",\"pageSize\":1024,\"noDataDisplayMessage\":\"\",\"useDashboardTimewindow\":false,\"displayTimewindow\":true,\"decimals\":0,\"timewindowStyle\":{\"showIcon\":true,\"iconSize\":\"24px\",\"icon\":null,\"iconPosition\":\"left\",\"font\":{\"size\":12,\"sizeUnit\":\"px\",\"family\":\"Roboto\",\"weight\":\"400\",\"style\":\"normal\",\"lineHeight\":\"16px\"},\"color\":\"rgba(0, 0, 0, 0.38)\",\"displayTypePrefix\":false},\"titleColor\":\"rgba(0, 0, 0, 0.87)\",\"borderRadius\":null}" + }, + "externalId": null, + "tags": [ + "environment", + "particulate", + "matter", + "air", + "pm10" + ] +} \ No newline at end of file diff --git a/application/src/main/data/json/system/widget_types/pm10_chart_card_with_background.json b/application/src/main/data/json/system/widget_types/pm10_chart_card_with_background.json new file mode 100644 index 0000000000..731e6220b7 --- /dev/null +++ b/application/src/main/data/json/system/widget_types/pm10_chart_card_with_background.json @@ -0,0 +1,33 @@ +{ + "fqn": "pm10_chart_card_with_background", + "name": "PM10 chart card with background", + "deprecated": false, + "image": "data:image/png;base64,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", + "description": "Displays a fine and coarse particulate matter (PM10) data as a combination of the latest and aggregated values with background. Optionally may display the corresponding historical values as a simplified chart.", + "descriptor": { + "type": "timeseries", + "sizeX": 4.5, + "sizeY": 3.5, + "resources": [], + "templateHtml": "\n\n", + "templateCss": ".legend {\n font-size: 13px;\n line-height: 10px;\n}\n\n.legend table { \n border-spacing: 0px;\n border-collapse: separate;\n}\n\n.mouse-events .flot-overlay {\n cursor: crosshair; \n}\n\n", + "controllerScript": "self.onInit = function() {\n self.ctx.$scope.aggregatedValueCardWidget.onInit();\n};\n\nself.onDataUpdated = function() {\n self.ctx.$scope.aggregatedValueCardWidget.onDataUpdated();\n};\n\nself.onLatestDataUpdated = function() {\n self.ctx.$scope.aggregatedValueCardWidget.onLatestDataUpdated();\n}\n\nself.onResize = function() {\n self.ctx.$scope.aggregatedValueCardWidget.onResize();\n}\n\nself.onEditModeChanged = function() {\n self.ctx.$scope.aggregatedValueCardWidget.onEditModeChanged();\n}\n\nself.onDestroy = function() {\n self.ctx.$scope.aggregatedValueCardWidget.onDestroy();\n}\n\nself.typeParameters = function() {\n return {\n maxDatasources: 1,\n maxDataKeys: 1,\n singleEntity: true,\n previewWidth: '400px',\n previewHeight: '300px',\n embedTitlePanel: true,\n hasAdditionalLatestDataKeys: true,\n defaultDataKeysFunction: function() {\n return [\n { name: 'pm10', label: 'PM10', type: 'timeseries', color: 'rgba(0, 0, 0, 0.87)', units: 'µg/m³', decimals: 0 }\n ];\n },\n defaultLatestDataKeysFunction: function(configComponent, configData) {\n return configComponent.createDefaultAggregatedValueLatestDataKeys(configData, 'pm10', 'µg/m³', 0);\n }\n };\n}\n", + "settingsSchema": "{}", + "dataKeySettingsSchema": "{}", + "latestDataKeySettingsSchema": "{}", + "settingsDirective": "tb-aggregated-value-card-widget-settings", + "dataKeySettingsDirective": "", + "latestDataKeySettingsDirective": "tb-aggregated-value-card-key-settings", + "hasBasicMode": true, + "basicModeDirective": "tb-aggregated-value-card-basic-config", + "defaultConfig": "{\"datasources\":[{\"type\":\"function\",\"name\":\"Main building\",\"dataKeys\":[{\"name\":\"f(x)\",\"type\":\"function\",\"label\":\"PM10\",\"color\":\"rgba(0, 0, 0, 0.87)\",\"settings\":{\"showLines\":true,\"fillLines\":true,\"showPoints\":false},\"_hash\":0.8587686344902596,\"funcBody\":\"var value = prevValue + Math.random() * 100 - 50;\\nvar multiplier = Math.pow(10, 2 || 0);\\nvar value = Math.round(value * multiplier) / multiplier;\\nif (value < 0) {\\n\\tvalue = 0;\\n} else if (value > 500) {\\n\\tvalue = 500;\\n}\\nreturn value;\",\"aggregationType\":null,\"units\":\"µg/m³\",\"decimals\":0,\"usePostProcessing\":null,\"postFuncBody\":null}],\"alarmFilterConfig\":{\"statusList\":[\"ACTIVE\"]},\"latestDataKeys\":[{\"name\":\"f(x)\",\"type\":\"function\",\"label\":\"Latest\",\"color\":\"#4caf50\",\"settings\":{\"position\":\"center\",\"font\":{\"size\":52,\"sizeUnit\":\"px\",\"family\":\"Roboto\",\"weight\":\"500\",\"style\":\"normal\",\"lineHeight\":\"1\"},\"color\":{\"type\":\"range\",\"color\":\"rgba(0, 0, 0, 0.87)\",\"rangeList\":[{\"from\":0,\"to\":20,\"color\":\"#7CC322\"},{\"from\":20,\"to\":50,\"color\":\"#F89E0D\"},{\"from\":50,\"to\":150,\"color\":\"#F77410\"},{\"from\":150,\"to\":null,\"color\":\"#DE2343\"}],\"colorFunction\":\"var temperature = value;\\nif (typeof temperature !== undefined) {\\n var percent = (temperature + 60)/120 * 100;\\n return tinycolor.mix('blue', 'red', percent).toHexString();\\n}\\nreturn 'blue';\"},\"showArrow\":false},\"_hash\":0.9408410830697858,\"funcBody\":\"var value = prevValue + Math.random() * 100 - 50;\\nvar multiplier = Math.pow(10, 2 || 0);\\nvar value = Math.round(value * multiplier) / multiplier;\\nif (value < 0) {\\n\\tvalue = 0;\\n} else if (value > 500) {\\n\\tvalue = 500;\\n}\\nreturn value;\",\"aggregationType\":null,\"units\":\"µg/m³\",\"decimals\":0,\"usePostProcessing\":null,\"postFuncBody\":null},{\"name\":\"f(x)\",\"type\":\"function\",\"label\":\"Delta percent\",\"color\":\"#f44336\",\"settings\":{\"position\":\"rightTop\",\"font\":{\"size\":14,\"sizeUnit\":\"px\",\"family\":\"Roboto\",\"weight\":\"500\",\"style\":\"normal\",\"lineHeight\":\"20px\"},\"color\":{\"type\":\"range\",\"color\":\"rgba(0, 0, 0, 0.38)\",\"rangeList\":[{\"from\":null,\"to\":0,\"color\":\"#198038\"},{\"from\":0,\"to\":0,\"color\":\"rgba(0, 0, 0, 0.87)\"},{\"from\":0,\"to\":null,\"color\":\"#D12730\"}],\"colorFunction\":\"var temperature = value;\\nif (typeof temperature !== undefined) {\\n var percent = (temperature + 60)/120 * 100;\\n return tinycolor.mix('blue', 'red', percent).toHexString();\\n}\\nreturn 'blue';\"},\"showArrow\":true},\"_hash\":0.06392321853157967,\"funcBody\":\"var value = prevValue + Math.random() * 6 - 3;\\nvar multiplier = Math.pow(10, 2 || 0);\\nvar value = Math.round(value * multiplier) / multiplier;\\nif (value < -25) {\\n\\tvalue = -25;\\n} else if (value > 25) {\\n\\tvalue = 25;\\n} \\nreturn value;\",\"aggregationType\":null,\"units\":\"%\",\"decimals\":0,\"usePostProcessing\":null,\"postFuncBody\":null},{\"name\":\"f(x)\",\"type\":\"function\",\"label\":\"Delta absolute\",\"color\":\"#607d8b\",\"settings\":{\"position\":\"rightBottom\",\"font\":{\"size\":11,\"sizeUnit\":\"px\",\"family\":\"Roboto\",\"weight\":\"400\",\"style\":\"normal\",\"lineHeight\":\"16px\"},\"color\":{\"type\":\"constant\",\"color\":\"rgba(0, 0, 0, 0.38)\",\"rangeList\":[],\"colorFunction\":\"var temperature = value;\\nif (typeof temperature !== undefined) {\\n var percent = (temperature + 60)/120 * 100;\\n return tinycolor.mix('blue', 'red', percent).toHexString();\\n}\\nreturn 'blue';\"},\"showArrow\":false},\"_hash\":0.44695098620509865,\"funcBody\":\"var value = prevValue + Math.random() * 6 - 3;\\nif (value < -10) {\\n\\tvalue = -10;\\n} else if (value > 10) {\\n\\tvalue = 10;\\n}\\nreturn value;\",\"aggregationType\":null,\"units\":\"µg/m³\",\"decimals\":0,\"usePostProcessing\":null,\"postFuncBody\":null}]}],\"timewindow\":{\"hideInterval\":false,\"hideLastInterval\":false,\"hideQuickInterval\":false,\"hideAggregation\":false,\"hideAggInterval\":false,\"hideTimezone\":false,\"selectedTab\":1,\"history\":{\"historyType\":2,\"timewindowMs\":60000,\"interval\":43200000,\"fixedTimewindow\":{\"startTimeMs\":1691927717318,\"endTimeMs\":1692014117318},\"quickInterval\":\"CURRENT_MONTH_SO_FAR\"},\"aggregation\":{\"type\":\"AVG\",\"limit\":25000}},\"showTitle\":true,\"backgroundColor\":\"rgba(0, 0, 0, 0)\",\"color\":null,\"padding\":\"0\",\"settings\":{\"stack\":false,\"fontSize\":10,\"fontColor\":\"#545454\",\"showTooltip\":true,\"tooltipIndividual\":false,\"tooltipCumulative\":false,\"hideZeros\":false,\"grid\":{\"verticalLines\":true,\"horizontalLines\":true,\"outlineWidth\":1,\"color\":\"#545454\",\"backgroundColor\":null,\"tickColor\":\"#DDDDDD\"},\"xaxis\":{\"title\":null,\"showLabels\":true,\"color\":\"#545454\"},\"yaxis\":{\"min\":null,\"max\":null,\"title\":null,\"showLabels\":true,\"color\":\"#545454\",\"tickSize\":null,\"tickDecimals\":0,\"ticksFormatter\":\"\"},\"shadowSize\":4,\"smoothLines\":false,\"comparisonEnabled\":false,\"xaxisSecond\":{\"axisPosition\":\"top\",\"title\":null,\"showLabels\":true},\"showLegend\":true,\"legendConfig\":{\"direction\":\"column\",\"position\":\"bottom\",\"sortDataKeys\":false,\"showMin\":false,\"showMax\":false,\"showAvg\":true,\"showTotal\":false,\"showLatest\":false},\"customLegendEnabled\":false,\"showSubtitle\":true,\"subtitle\":\"${entityName}\",\"subtitleFont\":{\"family\":\"Roboto\",\"size\":12,\"sizeUnit\":\"px\",\"style\":\"normal\",\"weight\":\"400\",\"lineHeight\":\"16px\"},\"subtitleColor\":\"rgba(0, 0, 0, 0.38)\",\"showDate\":true,\"dateFormat\":{\"format\":null,\"lastUpdateAgo\":true,\"custom\":false},\"dateFont\":{\"family\":\"Roboto\",\"size\":12,\"sizeUnit\":\"px\",\"style\":\"normal\",\"weight\":\"400\",\"lineHeight\":\"16px\"},\"dateColor\":\"rgba(0, 0, 0, 0.38)\",\"showChart\":true,\"chartColor\":\"rgba(0, 0, 0, 0.87)\",\"background\":{\"type\":\"image\",\"imageBase64\":\"data:image/png;base64,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\",\"imageUrl\":null,\"color\":\"#fff\",\"overlay\":{\"enabled\":true,\"color\":\"rgba(255,255,255,0.72)\",\"blur\":3}},\"autoScale\":true},\"title\":\"PM10\",\"dropShadow\":true,\"enableFullscreen\":false,\"titleStyle\":{\"fontSize\":\"16px\",\"fontWeight\":400},\"mobileHeight\":null,\"configMode\":\"basic\",\"actions\":{},\"showTitleIcon\":true,\"titleIcon\":\"bubble_chart\",\"iconColor\":\"rgba(0, 0, 0, 0.87)\",\"titleFont\":{\"size\":16,\"sizeUnit\":\"px\",\"family\":\"Roboto\",\"weight\":\"500\",\"style\":\"normal\",\"lineHeight\":\"24px\"},\"iconSize\":\"24px\",\"titleTooltip\":\"\",\"widgetStyle\":{},\"widgetCss\":\"\",\"pageSize\":1024,\"noDataDisplayMessage\":\"\",\"useDashboardTimewindow\":false,\"displayTimewindow\":true,\"decimals\":0,\"timewindowStyle\":{\"showIcon\":true,\"iconSize\":\"24px\",\"icon\":null,\"iconPosition\":\"left\",\"font\":{\"size\":12,\"sizeUnit\":\"px\",\"family\":\"Roboto\",\"weight\":\"400\",\"style\":\"normal\",\"lineHeight\":\"16px\"},\"color\":\"rgba(0, 0, 0, 0.38)\",\"displayTypePrefix\":false},\"titleColor\":\"rgba(0, 0, 0, 0.87)\",\"borderRadius\":null}" + }, + "externalId": null, + "tags": [ + "environment", + "particulate", + "matter", + "air", + "pm10" + ] +} \ No newline at end of file diff --git a/application/src/main/data/json/system/widget_types/pm2_5_card.json b/application/src/main/data/json/system/widget_types/pm2_5_card.json index c925624c81..0c721ae651 100644 --- a/application/src/main/data/json/system/widget_types/pm2_5_card.json +++ b/application/src/main/data/json/system/widget_types/pm2_5_card.json @@ -3,7 +3,7 @@ "name": "PM2.5 card", "deprecated": false, "image": "data:image/png;base64,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", - "description": "Displays a latest fine particulate matter (PM2.5) telemetry data in a box layout.", + "description": "Displays a latest fine particulate matter (PM2.5) telemetry in a box layout.", "descriptor": { "type": "latest", "sizeX": 3, diff --git a/application/src/main/data/json/system/widget_types/pm2_5_card_with_background.json b/application/src/main/data/json/system/widget_types/pm2_5_card_with_background.json index 8ddba63104..ea04acff8c 100644 --- a/application/src/main/data/json/system/widget_types/pm2_5_card_with_background.json +++ b/application/src/main/data/json/system/widget_types/pm2_5_card_with_background.json @@ -3,7 +3,7 @@ "name": "PM2.5 card with background", "deprecated": false, "image": "data:image/png;base64,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", - "description": "Displays a latest fine particulate matter (PM2.5) telemetry data in a box layout with background.", + "description": "Displays a latest fine particulate matter (PM2.5) telemetry in a box layout with background.", "descriptor": { "type": "latest", "sizeX": 3, diff --git a/application/src/main/data/json/system/widget_types/pressure_card.json b/application/src/main/data/json/system/widget_types/pressure_card.json index db557728f5..ef83f72cb1 100644 --- a/application/src/main/data/json/system/widget_types/pressure_card.json +++ b/application/src/main/data/json/system/widget_types/pressure_card.json @@ -3,7 +3,7 @@ "name": "Pressure card", "deprecated": false, "image": "data:image/png;base64,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", - "description": "Displays a latest pressure telemetry data in a box layout.", + "description": "Displays a latest pressure telemetry in a box layout.", "descriptor": { "type": "latest", "sizeX": 3, diff --git a/application/src/main/data/json/system/widget_types/pressure_card_with_background.json b/application/src/main/data/json/system/widget_types/pressure_card_with_background.json index b7d75d7426..7fbc5164f1 100644 --- a/application/src/main/data/json/system/widget_types/pressure_card_with_background.json +++ b/application/src/main/data/json/system/widget_types/pressure_card_with_background.json @@ -3,7 +3,7 @@ "name": "Pressure card with background", "deprecated": false, "image": "data:image/png;base64,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", - "description": "Displays a latest pressure telemetry data in a box layout with background.", + "description": "Displays a latest pressure telemetry in a box layout with background.", "descriptor": { "type": "latest", "sizeX": 3, diff --git a/application/src/main/data/json/system/widget_types/radial_gauge.json b/application/src/main/data/json/system/widget_types/radial_gauge.json index 7d793b2b87..d3da6ef045 100644 --- a/application/src/main/data/json/system/widget_types/radial_gauge.json +++ b/application/src/main/data/json/system/widget_types/radial_gauge.json @@ -11,11 +11,11 @@ "resources": [], "templateHtml": "\n", "templateCss": "", - "controllerScript": "self.onInit = function() {\n self.ctx.gauge = new TbAnalogueRadialGauge(self.ctx, 'radialGauge'); \n}\n\nself.onDataUpdated = function() {\n self.ctx.gauge.update();\n}\n\nself.onResize = function() {\n self.ctx.gauge.resize();\n}\n\nself.onMobileModeChanged = function() {\n self.ctx.gauge.mobileModeChanged();\n}\n\nself.typeParameters = function() {\n return {\n maxDatasources: 1,\n maxDataKeys: 1,\n singleEntity: true\n };\n}\n\nself.onDestroy = function() {\n self.ctx.gauge.destroy();\n}\n", - "settingsSchema": "{}", + "controllerScript": "self.onInit = function() {\n self.ctx.gauge = new TbAnalogueRadialGauge(self.ctx, 'radialGauge'); \n}\n\nself.onDataUpdated = function() {\n self.ctx.gauge.update();\n}\n\nself.onResize = function() {\n self.ctx.gauge.resize();\n}\n\nself.onMobileModeChanged = function() {\n self.ctx.gauge.mobileModeChanged();\n}\n\nself.typeParameters = function() {\n return {\n maxDatasources: 1,\n maxDataKeys: 1,\n singleEntity: true,\n defaultDataKeysFunction: function() {\n return [{ name: 'temperature', label: 'Temperature', type: 'timeseries' }];\n }\n };\n}\n\nself.onDestroy = function() {\n self.ctx.gauge.destroy();\n}\n", "settingsSchema": "{}", "dataKeySettingsSchema": "{}\n", "settingsDirective": "tb-analogue-radial-gauge-widget-settings", - "defaultConfig": "{\"datasources\":[{\"type\":\"function\",\"name\":\"function\",\"dataKeys\":[{\"name\":\"f(x)\",\"type\":\"function\",\"label\":\"Temp\",\"color\":\"#2196f3\",\"settings\":{},\"_hash\":0.7282710489093589,\"funcBody\":\"var value = prevValue + Math.random() * 50 - 25;\\nif (value < -100) {\\n\\tvalue = -100;\\n} else if (value > 100) {\\n\\tvalue = 100;\\n}\\nreturn value;\"}]}],\"timewindow\":{\"realtime\":{\"timewindowMs\":60000}},\"showTitle\":false,\"backgroundColor\":\"rgb(255, 255, 255)\",\"color\":\"rgba(0, 0, 0, 0.87)\",\"padding\":\"8px\",\"settings\":{\"maxValue\":100,\"startAngle\":45,\"ticksAngle\":270,\"showBorder\":true,\"defaultColor\":\"#e65100\",\"needleCircleSize\":10,\"highlights\":[],\"showUnitTitle\":true,\"colorPlate\":\"#fff\",\"colorMajorTicks\":\"#444\",\"colorMinorTicks\":\"#666\",\"minorTicks\":10,\"valueInt\":3,\"valueDec\":0,\"highlightsWidth\":15,\"valueBox\":true,\"animation\":true,\"animationDuration\":500,\"animationRule\":\"cycle\",\"colorNeedleShadowUp\":\"rgba(2, 255, 255, 0)\",\"numbersFont\":{\"family\":\"Roboto\",\"size\":18,\"style\":\"normal\",\"weight\":\"500\",\"color\":\"#616161\"},\"titleFont\":{\"family\":\"Roboto\",\"size\":24,\"style\":\"normal\",\"weight\":\"500\",\"color\":\"#888\"},\"unitsFont\":{\"family\":\"Roboto\",\"size\":22,\"style\":\"normal\",\"weight\":\"500\",\"color\":\"#616161\"},\"valueFont\":{\"family\":\"Segment7Standard\",\"size\":36,\"style\":\"normal\",\"weight\":\"normal\",\"shadowColor\":\"rgba(0, 0, 0, 0.49)\",\"color\":\"#444\"},\"minValue\":-100,\"colorNeedleShadowDown\":\"rgba(188,143,143,0.45)\",\"colorValueBoxRect\":\"#888\",\"colorValueBoxRectEnd\":\"#666\",\"colorValueBoxBackground\":\"#babab2\",\"colorValueBoxShadow\":\"rgba(0,0,0,1)\"},\"title\":\"Radial gauge\",\"dropShadow\":true,\"enableFullscreen\":true,\"titleStyle\":{\"fontSize\":\"16px\",\"fontWeight\":400},\"widgetStyle\":{},\"widgetCss\":\"\",\"pageSize\":1024,\"decimals\":0,\"noDataDisplayMessage\":\"\"}" - }, + "hasBasicMode": true, + "basicModeDirective": "tb-radial-gauge-basic-config", + "defaultConfig": "{\"datasources\":[{\"type\":\"function\",\"name\":\"function\",\"dataKeys\":[{\"name\":\"f(x)\",\"type\":\"function\",\"label\":\"Temp\",\"color\":\"#2196f3\",\"settings\":{},\"_hash\":0.7282710489093589,\"funcBody\":\"var value = prevValue + Math.random() * 50 - 25;\\nif (value < -100) {\\n\\tvalue = -100;\\n} else if (value > 100) {\\n\\tvalue = 100;\\n}\\nreturn value;\"}]}],\"timewindow\":{\"realtime\":{\"timewindowMs\":60000}},\"showTitle\":false,\"backgroundColor\":\"rgb(255, 255, 255)\",\"color\":\"rgba(0, 0, 0, 0.87)\",\"padding\":\"8px\",\"settings\":{\"maxValue\":100,\"startAngle\":45,\"ticksAngle\":270,\"showBorder\":true,\"defaultColor\":\"#e65100\",\"needleCircleSize\":10,\"highlights\":[],\"showUnitTitle\":true,\"colorPlate\":\"#fff\",\"colorMajorTicks\":\"#444\",\"colorMinorTicks\":\"#666\",\"minorTicks\":10,\"valueInt\":3,\"valueDec\":0,\"highlightsWidth\":15,\"valueBox\":true,\"animation\":true,\"animationDuration\":500,\"animationRule\":\"cycle\",\"colorNeedleShadowUp\":\"rgba(2, 255, 255, 0)\",\"numbersFont\":{\"family\":\"Roboto\",\"size\":18,\"style\":\"normal\",\"weight\":\"500\",\"color\":\"#616161\"},\"titleFont\":{\"family\":\"Roboto\",\"size\":24,\"style\":\"normal\",\"weight\":\"500\",\"color\":\"#888\"},\"unitsFont\":{\"family\":\"Roboto\",\"size\":22,\"style\":\"normal\",\"weight\":\"500\",\"color\":\"#616161\"},\"valueFont\":{\"family\":\"Segment7Standard\",\"size\":36,\"style\":\"normal\",\"weight\":\"normal\",\"shadowColor\":\"rgba(0, 0, 0, 0.49)\",\"color\":\"#444\"},\"minValue\":-100,\"colorNeedleShadowDown\":\"rgba(188,143,143,0.45)\",\"colorValueBoxRect\":\"#888\",\"colorValueBoxRectEnd\":\"#666\",\"colorValueBoxBackground\":\"#babab2\",\"colorValueBoxShadow\":\"rgba(0,0,0,1)\"},\"title\":\"Radial gauge\",\"dropShadow\":true,\"enableFullscreen\":true,\"titleStyle\":{\"fontSize\":\"16px\",\"fontWeight\":400},\"widgetStyle\":{},\"widgetCss\":\"\",\"pageSize\":1024,\"decimals\":0,\"noDataDisplayMessage\":\"\",\"configMode\":\"basic\"}" }, "externalId": null } \ No newline at end of file diff --git a/application/src/main/data/json/system/widget_types/radon_level_card.json b/application/src/main/data/json/system/widget_types/radon_level_card.json index ab1533e4c7..8ba60596c6 100644 --- a/application/src/main/data/json/system/widget_types/radon_level_card.json +++ b/application/src/main/data/json/system/widget_types/radon_level_card.json @@ -3,7 +3,7 @@ "name": "Radon level card", "deprecated": false, "image": "data:image/png;base64,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", - "description": "Displays a latest radon level telemetry data in a box layout.", + "description": "Displays a latest radon level telemetry in a box layout.", "descriptor": { "type": "latest", "sizeX": 3, diff --git a/application/src/main/data/json/system/widget_types/radon_level_card_with_background.json b/application/src/main/data/json/system/widget_types/radon_level_card_with_background.json index 5785502397..b0b0d732f5 100644 --- a/application/src/main/data/json/system/widget_types/radon_level_card_with_background.json +++ b/application/src/main/data/json/system/widget_types/radon_level_card_with_background.json @@ -3,7 +3,7 @@ "name": "Radon level card with background", "deprecated": false, "image": "data:image/png;base64,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", - "description": "Displays a latest radon level telemetry data in a box layout with background.", + "description": "Displays a latest radon level telemetry in a box layout with background.", "descriptor": { "type": "latest", "sizeX": 3, diff --git a/application/src/main/data/json/system/widget_types/rainfall_card.json b/application/src/main/data/json/system/widget_types/rainfall_card.json index a231670288..af02114cc8 100644 --- a/application/src/main/data/json/system/widget_types/rainfall_card.json +++ b/application/src/main/data/json/system/widget_types/rainfall_card.json @@ -3,7 +3,7 @@ "name": "Rainfall card", "deprecated": false, "image": "data:image/png;base64,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", - "description": "Displays a latest rainfall telemetry data in a box layout.", + "description": "Displays a latest rainfall telemetry in a box layout.", "descriptor": { "type": "latest", "sizeX": 3, diff --git a/application/src/main/data/json/system/widget_types/rainfall_card_with_background.json b/application/src/main/data/json/system/widget_types/rainfall_card_with_background.json index 1fe9cdb53e..6f6899d8fd 100644 --- a/application/src/main/data/json/system/widget_types/rainfall_card_with_background.json +++ b/application/src/main/data/json/system/widget_types/rainfall_card_with_background.json @@ -3,7 +3,7 @@ "name": "Rainfall card with background", "deprecated": false, "image": "data:image/png;base64,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", - "description": "Displays a latest rainfall telemetry data in a box layout with background.", + "description": "Displays a latest rainfall telemetry in a box layout with background.", "descriptor": { "type": "latest", "sizeX": 3, diff --git a/application/src/main/data/json/system/widget_types/rectangle_tank.json b/application/src/main/data/json/system/widget_types/rectangle_tank.json new file mode 100644 index 0000000000..d96165cc89 --- /dev/null +++ b/application/src/main/data/json/system/widget_types/rectangle_tank.json @@ -0,0 +1,24 @@ +{ + "fqn": "rectangle_tank", + "name": "Rectangle tank", + "deprecated": false, + "image": "data:image/png;base64,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", + "description": "Widget indicates the level of liquid in Rectangle tank.", + "descriptor": { + "type": "latest", + "sizeX": 4, + "sizeY": 4, + "resources": [], + "templateHtml": "\n", + "templateCss": "", + "controllerScript": "self.onInit = function() {\n self.ctx.$scope.liquidLevelWidget.onInit();\n};\n\nself.onDataUpdated = function() {\n self.ctx.$scope.liquidLevelWidget.update();\n}\n\nself.typeParameters = function() {\n return {\n maxDatasources: 1,\n maxDataKeys: 1,\n singleEntity: true,\n previewWidth: '250px',\n previewHeight: '250px',\n embedTitlePanel: true\n };\n};\n\nself.onDestroy = function() {\n}\n\nself.actionSources = function() { \n return { \n 'cardClick': {\n name: 'widget-action.card-click',\n multiple: false \n } \n };\n}", + "settingsSchema": "{}", + "dataKeySettingsSchema": "{}\n", + "settingsDirective": "tb-liquid-level-card-widget-settings", + "hasBasicMode": true, + "basicModeDirective": "tb-liquid-level-card-basic-config", + "defaultConfig": "{\"datasources\":[{\"type\":\"function\",\"name\":\"function\",\"dataKeys\":[{\"name\":\"f(x)\",\"type\":\"function\",\"label\":\"Random\",\"color\":\"#2196f3\",\"settings\":{},\"_hash\":0.15479322438769105,\"funcBody\":\"return Math.floor(Math.random() * 101);\",\"aggregationType\":null,\"units\":null,\"decimals\":null,\"usePostProcessing\":null,\"postFuncBody\":null}],\"alarmFilterConfig\":{\"statusList\":[\"ACTIVE\"]}}],\"timewindow\":{\"realtime\":{\"timewindowMs\":60000}},\"showTitle\":true,\"backgroundColor\":\"#fff\",\"color\":\"rgba(0, 0, 0, 0.87)\",\"padding\":\"0px\",\"settings\":{\"tankSelectionType\":\"static\",\"selectedShape\":\"Rectangle\",\"shapeAttributeName\":\"tankShape\",\"tankColor\":{\"type\":\"range\",\"color\":\"#242770\",\"rangeList\":[{\"from\":null,\"to\":20,\"color\":\"#E73535DE\"},{\"from\":20,\"to\":null,\"color\":\"#242770\"}],\"colorFunction\":\"var percent = value;\\nif (typeof percent !== undefined) {\\n if (percent < 20) {\\n return '#E73535DE';\\n }\\n}\\nreturn '#242770';\"},\"datasourceUnits\":\"%\",\"layout\":\"percentage\",\"volumeSource\":\"static\",\"volumeConstant\":500,\"volumeAttributeName\":\"volume\",\"volumeUnits\":\"L\",\"volumeFont\":{\"family\":\"Roboto\",\"size\":14,\"sizeUnit\":\"px\",\"style\":\"normal\",\"weight\":\"500\",\"lineHeight\":\"100%\"},\"volumeColor\":\"rgba(0, 0, 0, 0.18)\",\"units\":\"%\",\"widgetUnitsSource\":\"static\",\"widgetUnitsAttributeName\":\"units\",\"liquidColor\":{\"type\":\"range\",\"color\":\"#7A8BFF\",\"rangeList\":[{\"from\":null,\"to\":20,\"color\":\"#E27C7CDE\"},{\"from\":20,\"to\":null,\"color\":\"#7A8BFF\"}],\"colorFunction\":\"var percent = value;\\nif (typeof percent !== undefined) {\\n if (percent < 20) {\\n return '#E27C7CDE';\\n }\\n}\\nreturn '#7A8BFF';\"},\"valueFont\":{\"family\":\"Roboto\",\"size\":24,\"sizeUnit\":\"px\",\"style\":\"normal\",\"weight\":\"500\",\"lineHeight\":\"100%\"},\"valueColor\":{\"type\":\"range\",\"color\":\"#000000DE\",\"rangeList\":[{\"from\":null,\"to\":20,\"color\":\"#FF0000DE\"},{\"from\":20,\"to\":null,\"color\":\"rgba(0,0,0,0.87)\"}],\"colorFunction\":\"var percent = value;\\nif (typeof percent !== undefined) {\\n if (percent < 20) {\\n return '#FF0000DE';\\n }\\n}\\nreturn '#000000DE';\"},\"showBackgroundOverlay\":true,\"backgroundOverlayColor\":{\"type\":\"range\",\"color\":\"#FFFFFFC2\",\"rangeList\":[{\"from\":null,\"to\":20,\"color\":\"#FFEFEFDE\"},{\"from\":20,\"to\":null,\"color\":\"#FFFFFFC2\"}],\"colorFunction\":\"var percent = value;\\nif (typeof percent !== undefined) {\\n if (percent < 20) {\\n return '#FFEFEFDE';\\n }\\n}\\nreturn '#FFFFFFC2';\"},\"showTooltip\":true,\"showTooltipLevel\":true,\"tooltipUnits\":\"%\",\"tooltipLevelDecimals\":0,\"tooltipLevelFont\":{\"family\":\"Roboto\",\"size\":13,\"sizeUnit\":\"px\",\"style\":\"normal\",\"weight\":\"500\",\"lineHeight\":\"100%\"},\"tooltipLevelColor\":{\"type\":\"constant\",\"color\":\"rgba(0, 0, 0, 0.76)\",\"rangeList\":[],\"colorFunction\":\"var percent = value;\\nif (typeof percent !== undefined) {\\n if (percent < 20) {\\n return '#E27C7CDE';\\n }\\n}\\nreturn '#7A8BFF';\"},\"showTooltipDate\":true,\"tooltipDateFormat\":{\"format\":null,\"lastUpdateAgo\":true,\"custom\":false},\"tooltipDateFont\":{\"family\":\"Roboto\",\"size\":13,\"sizeUnit\":\"px\",\"style\":\"normal\",\"weight\":\"500\",\"lineHeight\":\"100%\"},\"tooltipDateColor\":\"rgba(0, 0, 0, 0.76)\",\"tooltipBackgroundColor\":\"rgba(255, 255, 255, 0.76)\",\"tooltipBackgroundBlur\":3,\"background\":{\"type\":\"color\",\"color\":\"#fff\",\"overlay\":{\"enabled\":false,\"color\":\"rgba(255,255,255,0.72)\",\"blur\":3}}},\"title\":\"Liquid level\",\"useDashboardTimewindow\":true,\"displayTimewindow\":true,\"configMode\":\"basic\",\"titleFont\":{\"family\":\"Roboto\",\"size\":16,\"sizeUnit\":\"px\",\"style\":\"normal\",\"weight\":\"500\",\"lineHeight\":\"1.5\"},\"titleColor\":\"rgba(0, 0, 0, 0.87)\",\"showTitleIcon\":false,\"titleIcon\":\"water_drop\",\"iconColor\":\"#5469FF\",\"decimals\":0,\"enableDataExport\":false,\"enableFullscreen\":false,\"borderRadius\":\"0px\",\"actions\":{},\"iconSize\":\"24px\",\"titleTooltip\":\"\",\"dropShadow\":true,\"margin\":\"0px\",\"widgetStyle\":{},\"widgetCss\":\"\",\"titleStyle\":{\"fontSize\":\"16px\",\"fontWeight\":400},\"pageSize\":1024,\"noDataDisplayMessage\":\"\"}" + }, + "externalId": null, + "tags": null +} \ No newline at end of file diff --git a/application/src/main/data/json/system/widget_types/simple_air_quality_index_chart_card.json b/application/src/main/data/json/system/widget_types/simple_air_quality_index_chart_card.json index 3e83976e26..73e0635a3b 100644 --- a/application/src/main/data/json/system/widget_types/simple_air_quality_index_chart_card.json +++ b/application/src/main/data/json/system/widget_types/simple_air_quality_index_chart_card.json @@ -27,6 +27,9 @@ "weather", "environment", "air", - "aqi" + "aqi", + "pollution", + "emission", + "smog" ] } \ No newline at end of file diff --git a/application/src/main/data/json/system/widget_types/simple_air_quality_index_chart_card_with_background.json b/application/src/main/data/json/system/widget_types/simple_air_quality_index_chart_card_with_background.json index 4e05bdf267..efc1b71eb2 100644 --- a/application/src/main/data/json/system/widget_types/simple_air_quality_index_chart_card_with_background.json +++ b/application/src/main/data/json/system/widget_types/simple_air_quality_index_chart_card_with_background.json @@ -27,6 +27,9 @@ "weather", "environment", "air", - "aqi" + "aqi", + "pollution", + "emission", + "smog" ] } \ No newline at end of file diff --git a/application/src/main/data/json/system/widget_types/simple_pm10_chart_card.json b/application/src/main/data/json/system/widget_types/simple_pm10_chart_card.json new file mode 100644 index 0000000000..496e6dd53e --- /dev/null +++ b/application/src/main/data/json/system/widget_types/simple_pm10_chart_card.json @@ -0,0 +1,33 @@ +{ + "fqn": "simple_pm10_chart_card", + "name": "Simple PM10 chart card", + "deprecated": false, + "image": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAACgCAMAAAB+IdObAAAAhFBMVEUAAADf39/g4ODf39/f39/g4OD////k5OT/pgDg4OAhISH/9N//3Z90dHT/vEBYWFiQkJD/6b//0oD/sSDy8vIvLy//+u//qxA8PDzHx8eCgoK6urr/x2CsrKz/zXBmZmb/78+rq6v/2JDV1dX/tzCenp7/wk//469KSkr/x1/29vb/2Y/dngZsAAAABnRSTlMAIL9AEN/GQiaNAAAEoElEQVR42uzPwQ2AIBAAsBMQc3+mYP8BjRv4BNJu0AAAAAAAAPivXZtr8akln83lXSOunH17I2uU0Q8wS2Q/QoosRmQ1Ii/7daxiMQhEYbg7AweGsVAwkRAkCHn/J9wkF26ysNYa1r9Suw9UtLcGpLcGpLcGpLcGpLf+BURwl1R13oBFNxypegBTAeCdqaB5dYjsjOk7c3RuZYLSTgEpcOEaa1zW2P6XWYdEksHfEABm0HiuaTghkxngmSGc0Lg6xPMs/YKsBrVQgDBTPrAPggsaV4cg8EieW0tZoOYMS5xeApHAkkk63BAzzYCa52S6vASykhGSNjwguFKDKeUJSfBMaFkd4kiDT/gTkmi4ITDbHNvfv5Uzkp2HsuBbibiaV/g9I0U5VSsAiQwZzTshlUpsv2HGE+W9DUhvDUhvDUhvDUhvDUhvDUhvDUhv9Q1JFhhUXg9R7rPTwPxyiKPDkexhezXkhz07Wk4UhsIAfHf4J4FAEkgQlbKUis6+//stJhS2U6FwwRRn/C80RDqTD3NIqAGLfCPN4qeGnNk7+RRZ+syQt5z6HNj5mSFZNDbjJ4Skh7T/Go5E49x6NkgaMcYKN3jmB+9Rh2eDRCw5RndJkMdfptn+Iek5OaZfb7kJy6MsC4gm5tYqCDdj23DaLH8yxsYfKyMWuM44fxsWwXFurYfw0gJaeUutAXtaZLloQ98jBazgU6ve9UCH/HPtziemkFsT10O4BrQFBHVRgLVAY352cDQPe215g5haLFI3Tg84T174DxYFRGmSs+wtWAy5QUsnaIk4cDEUAupnSI2QvsdITgQ9u1hEvgbyfGbjxeJrxuIkylmyFAKcqItFSXcC79pi4pKaStIQDe4bXFbUpZLGn6QEanqUd3bsa6C7zmkxt88NijguAqL7addgcbEPkBKNv9ggl9A3VP9mAR0CTiMdFlACgOahBVA6l9BaTcyYYLjgecaSpTeI/LgC0gLt8FWEAP8GcfUjNHrIDaGDWNenYYVF12W4IWpg5vdTQRIVB1qYIL8uhdTqBCiah3BAmA7QQzSMg2jfdyHitnuVaKS0mCiRrR91NYCGz0Jcu+ra0kOkryzv7z+6QBCVAGz9uET+bA1pQ6Wh+TxEwdIIuaHtIeP5J/fXvG3N1CPHphAf7or9MgM5QY8QA00TkLlHju0hbpzuZfKuVcKOkBCntZAgjzaFcCAkXx5OYNy8aQYIf1gjAnItpGDBphCyrs4rty4aoHQ21UPcsdFA92rdOC93CIemlZCEJbQt5C9gRQNX7FQCQljX9hB/DPgTtWvLrl+thBSdY2MIhRpd+h2r6tsDRAP2MpQKbHmHNODrIJFzbF7slZRm3PVJPhqB7tgYzj93VaYFKj6MmLsnGfe5f9vesf4J0UNoCK/J1YimKqxoebxjR5AGWikxvcWfrY89QbiG336shnzQb0N4GNJ/kXUdGtpBfv+/KC/IC7LvvCB7ywuyt7wge8sLsrf8a+cObgCEYSAIGltE8p8q6L9AWkDiQRLNdHAF3BoyG0Nm05EbpIPGuDKq/791fnb3EVHn+lmqrJ1CYQAAAAAAAK88ZP333TfpRkYAAAAASUVORK5CYII=", + "description": "Displays historical fine and coarse particulate matter (PM10) values as a simplified chart. Optionally may display the corresponding latest PM10 value.", + "descriptor": { + "type": "timeseries", + "sizeX": 4.5, + "sizeY": 2, + "resources": [], + "templateHtml": "\n\n", + "templateCss": ".legend {\n font-size: 13px;\n line-height: 10px;\n}\n\n.legend table { \n border-spacing: 0px;\n border-collapse: separate;\n}\n\n.mouse-events .flot-overlay {\n cursor: crosshair; \n}\n\n", + "controllerScript": "self.onInit = function() {\n self.ctx.$scope.valueChartCardWidget.onInit();\n};\n\nself.onDataUpdated = function() {\n self.ctx.$scope.valueChartCardWidget.onDataUpdated();\n};\n\nself.onLatestDataUpdated = function() {\n self.ctx.$scope.valueChartCardWidget.onLatestDataUpdated();\n}\n\nself.onEditModeChanged = function() {\n self.ctx.$scope.valueChartCardWidget.onEditModeChanged();\n}\n\nself.onDestroy = function() {\n self.ctx.$scope.valueChartCardWidget.onDestroy();\n}\n\nself.typeParameters = function() {\n return {\n maxDatasources: 1,\n maxDataKeys: 1,\n singleEntity: true,\n previewWidth: '300px',\n previewHeight: '150px',\n embedTitlePanel: true,\n hasAdditionalLatestDataKeys: true,\n defaultDataKeysFunction: function() {\n return [\n { name: 'pm10', label: 'PM10', type: 'timeseries', color: 'rgba(0, 0, 0, 0.87)'}\n ];\n },\n defaultLatestDataKeysFunction: function(configComponent) {\n return [{ name: 'pm10', label: 'Latest', type: 'timeseries'}];\n }\n };\n}\n", + "settingsSchema": "{}", + "dataKeySettingsSchema": "{}", + "latestDataKeySettingsSchema": "{}", + "settingsDirective": "tb-value-chart-card-widget-settings", + "dataKeySettingsDirective": "", + "latestDataKeySettingsDirective": "", + "hasBasicMode": true, + "basicModeDirective": "tb-value-chart-card-basic-config", + "defaultConfig": "{\"datasources\":[{\"type\":\"function\",\"name\":\"\",\"dataKeys\":[{\"name\":\"f(x)\",\"type\":\"function\",\"label\":\"PM10\",\"color\":\"rgba(0, 0, 0, 0.87)\",\"settings\":{},\"_hash\":0.8587686344902596,\"funcBody\":\"var value = prevValue + Math.random() * 100 - 50;\\nvar multiplier = Math.pow(10, 2 || 0);\\nvar value = Math.round(value * multiplier) / multiplier;\\nif (value < 0) {\\n\\tvalue = 0;\\n} else if (value > 500) {\\n\\tvalue = 500;\\n}\\nreturn value;\",\"aggregationType\":null,\"units\":null,\"decimals\":null,\"usePostProcessing\":null,\"postFuncBody\":null}],\"alarmFilterConfig\":{\"statusList\":[\"ACTIVE\"]},\"latestDataKeys\":[{\"name\":\"f(x)\",\"type\":\"function\",\"label\":\"Latest\",\"color\":\"rgba(0, 0, 0, 0.87)\",\"settings\":{},\"_hash\":0.8587686344902596,\"funcBody\":\"var value = prevValue + Math.random() * 100 - 50;\\nvar multiplier = Math.pow(10, 2 || 0);\\nvar value = Math.round(value * multiplier) / multiplier;\\nif (value < 0) {\\n\\tvalue = 0;\\n} else if (value > 500) {\\n\\tvalue = 500;\\n}\\nreturn value;\",\"aggregationType\":null,\"units\":null,\"decimals\":null,\"usePostProcessing\":null,\"postFuncBody\":null}]}],\"showTitle\":true,\"backgroundColor\":\"rgba(0, 0, 0, 0)\",\"color\":null,\"padding\":\"0\",\"settings\":{\"layout\":\"left\",\"autoScale\":true,\"showValue\":true,\"valueFont\":{\"family\":\"Roboto\",\"size\":28,\"sizeUnit\":\"px\",\"style\":\"normal\",\"weight\":\"500\",\"lineHeight\":\"32px\"},\"valueColor\":{\"type\":\"range\",\"color\":\"rgba(0, 0, 0, 0.87)\",\"rangeList\":[{\"from\":0,\"to\":20,\"color\":\"#80C32C\"},{\"from\":20,\"to\":50,\"color\":\"#FFA600\"},{\"from\":50,\"to\":150,\"color\":\"#F36900\"},{\"from\":150,\"to\":null,\"color\":\"#D81838\"}],\"colorFunction\":\"var temperature = value;\\nif (typeof temperature !== undefined) {\\n var percent = (temperature + 60)/120 * 100;\\n return tinycolor.mix('blue', 'red', percent).toHexString();\\n}\\nreturn 'blue';\"},\"background\":{\"type\":\"color\",\"color\":\"#fff\",\"overlay\":{\"enabled\":false,\"color\":\"rgba(255,255,255,0.72)\",\"blur\":3}}},\"title\":\"PM10\",\"dropShadow\":true,\"enableFullscreen\":false,\"titleStyle\":null,\"mobileHeight\":null,\"configMode\":\"basic\",\"actions\":{},\"showTitleIcon\":true,\"titleIcon\":\"bubble_chart\",\"iconColor\":\"rgba(0, 0, 0, 0.87)\",\"titleFont\":{\"size\":16,\"sizeUnit\":\"px\",\"family\":\"Roboto\",\"weight\":\"500\",\"style\":\"normal\",\"lineHeight\":\"24px\"},\"iconSize\":\"18px\",\"titleTooltip\":\"\",\"widgetStyle\":{},\"widgetCss\":\"\",\"pageSize\":1024,\"noDataDisplayMessage\":\"\",\"useDashboardTimewindow\":true,\"decimals\":0,\"titleColor\":\"rgba(0, 0, 0, 0.87)\",\"borderRadius\":null,\"units\":\"µg/m³\",\"displayTimewindow\":true,\"timewindow\":{\"hideInterval\":false,\"hideLastInterval\":false,\"hideQuickInterval\":false,\"hideAggregation\":false,\"hideAggInterval\":false,\"hideTimezone\":false,\"selectedTab\":1,\"history\":{\"historyType\":2,\"timewindowMs\":60000,\"interval\":43200000,\"fixedTimewindow\":{\"startTimeMs\":1697382151041,\"endTimeMs\":1697468551041},\"quickInterval\":\"CURRENT_MONTH_SO_FAR\"},\"aggregation\":{\"type\":\"AVG\",\"limit\":25000}},\"timewindowStyle\":{\"showIcon\":false,\"iconSize\":\"24px\",\"icon\":\"query_builder\",\"iconPosition\":\"left\",\"font\":{\"size\":12,\"sizeUnit\":\"px\",\"family\":\"Roboto\",\"weight\":\"400\",\"style\":\"normal\",\"lineHeight\":\"16px\"},\"color\":\"rgba(0, 0, 0, 0.38)\",\"displayTypePrefix\":true}}" + }, + "externalId": null, + "tags": [ + "environment", + "particulate", + "matter", + "air", + "pm10" + ] +} \ No newline at end of file diff --git a/application/src/main/data/json/system/widget_types/simple_pm10_chart_card_with_background.json b/application/src/main/data/json/system/widget_types/simple_pm10_chart_card_with_background.json new file mode 100644 index 0000000000..fdf7ff5d0b --- /dev/null +++ b/application/src/main/data/json/system/widget_types/simple_pm10_chart_card_with_background.json @@ -0,0 +1,33 @@ +{ + "fqn": "simple_pm10_chart_card_with_background", + "name": "Simple PM10 chart card with background", + "deprecated": false, + "image": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAACgCAMAAAB+IdObAAAC8VBMVEUAAADPzs6gmJjf39/39/e8trWIg4FzbmtaUkw1NDU4Mi87OztXV1ealJPv7+0oKCj09PL49/eTj49AQED7+/v6+vn5+Pj9/f3z8/L29fX09PT39/fx8fH39vbw8O/4ng3h4eHu7e0oKCjj4+Pg39/l5eXp6Ojs7Ozs6+vg4ODv7+7q6urn5+fd3d3v7u3S0tHW1dTU09IfHx/m4+Lc29ze3t/n5ePY1tXR0M/QzszOzczW1NPZ2NjX09HNzc3b2trX1tbp5+bY1dPS0c/a19XOzs7l4uHa2tjf3t3Y2Nbd29rRz87b2dbU1NTz8fHn5eX29PPj4eHU0M5WVlbW0c/Kycfj4N7r6ejU0tHg3tvTz81dXV7My8kvLy/s6ulbW1vDwr+op6dgYGDJyMa6urju7Ozf3Nrd2tfOzMpycnLS0tPHxsT6zYTV1dbPz8/Bv728vLo5OTn5qirFxcOgn580LCvEw8Kwr7CkpKSNjYyGhof5tUgsLCvi39yCgoG3t7eysbKXlZVIR0c7MTQrKSnZ2dq+vb2KiotkZGRZWFnBwcGqqar72aNsbGyBcGdiYmK0tLWtrK2Uk5Nzc3dfX2dSUVJNTE09PDw/NTna1dOamZqShHx9fXxoaWlDQEGioaKRgXn89u3U0dD75MC4s7GcnJ2YmJd2dn2MfXQ4LTD78N1/f4GEdGtCOzJROTD62KGQkJCbj4p6eoBkZGvBvLmXjIZ5eXhvb3CJeG9nZ275wWV3aFxVVFVsXUxcQTP679y+uLi5trOOgXc7OC9ra3FmZmZ8a2FqUkAzMisvKynX2NrMx8W1r62spKGeko+ViID4tEgzMzP88d+vqKWSkJr6x3VxY1RANS1JMy34pBz76s/Hw8Cyq6n605M7MiulpKuon5yNjJT48+qim5qBgYdoRzj4oxuglpT5u1dgTkL47dv85cFIQjqlm5ZRPzn54r373rCLg3/5sDn6wWf4rzn4oxz5pBz326330JFgYmOBd2lmn/KGAAAAFHRSTlMAICAgIB8gICD+IL8Qv0BA379AQL140MMAABw0SURBVHja7JTvaxJxHMet2PpN0F8g6R4IyXlw4uldefgDp+ueBIIP7kFjeyCO02JzFgRulD3YSLSHXZDEFgYSHXQhiGMZGElTorCgyGAMGbSBT3vU+3uyUSMoenwvznk3BT+ve3/eZzIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMPh3To2OHj46MnJYZ0Tn0B85cmT49lcO/TcjAFOMjh49OgrwPuSYzokT+t+DnNI1zp5eXNxcvDtZKBZX739YXV4oFLJL87NBWUyICUBRLJtMBqlkQm7lWrIgCLzXztidNrPZZrParFYnTsmJ0z4e4Xmvl+fDYZeLi1ETcUmSpqJSVIp7WIqigUNw4OA4zuHgcMk5fC78x0HjN4IeKTqbWn/55f23dqdRKpcbDUUplSv5Zq3ZbHa369369trr11trW2trT7++unX82vFzexw/YzIdVu+122r7xWax13v44UOvV5i+emdpNpqUZVEWRZGIJFkyCESYltzCrIzdbrWazRazFTjtTrOOdXzcGw6F+DAgs/on3J44JNxuD+uHBoeJw2GefCpgeoIAYyiJRMQdn5qZv7O+8v7bTrsDD1iUlFK1UsmDGkRq3Xq9DhGwu/v91pt3ENnnjOm0Cg2tPVicu97rra5mCneWluAhUbIsC0QFIkHWTzuopNxqtQQ+l2MYu9UGDTMJgqSyJ+Llw3woTKbkYhDxu93uqOTGPcClT8fF80RV/45IC+FwIEACISKe6Mzn1PrK240dTdM6DaWjNJBKByaVaj7f7NZr0ADI4+na00/p9Jtzv3DS1G/326raH8zNTfZAYRoi81PSRVYUh5lQySREHEORXM6ri9iQhwUixGHv1MmEQkKYTEnWJhaLTUy443E3bgLy8WHZXD5fABo8LwCYYNF4PoBMaLK+COTK+tsvGzuqqmqK0ul0Sg2oVAlkv5BItwuVrS2YQOSAiUlT1YGm9Z8trywUs5liFiII5CJLiToJJIKC4DJBQcTLeHNYrD0Rwv6ZnYlEwi59V4A/Rvn9rOSmaApNgAfwuQIIRF8vQDYLHj6Ogwiym0mRvepriqZ2yFY10JBGtVypIJRms9at1dCSbV0EfH2STt/+VWQwGLx48ODx5uTLQrGQyWSnU/OzUxeDFJpOkOGCjrAsLYoou93JMIzT6dwf3wKwZQBtH2cETHuBEPPHYjTNssNuuFyBQACZYLVCEYggFgiRVwAmNOVnPfGZ+ecvV75821E7ECiRKBSlXM4DtKQJiybZrf1EPh4U0bQbm5PLxUwxk8ksFLJXU1dmsFhJihJRb+ggCVL0BLZMaDE2i9PO2MxWs808ZiGMjVnGyGLhQNlDAjx0aIqO4U4PPaCng1wuRSKhUMirv+AzjISGSBSLhUA2+xqWSoFIqVRWyiU0RDfBkytfq6H0et3h8TF9QGRu4+3C5HI2O13IFLIL06nU0pQkBZFBgphAhdiQh66MntstFjx3LWRqMxSIyHl4oOj2cRwM73IhjEePLsdojkatoEEgDqhJIMBf4r1YzEiEiXhD3mHxBY6LTcBjNrXyfmOnr2oaDjyygNLIN2Ghlz1frfyoVpoQQSC7n76mb9+++VtHflJqd78tRnEcwHvbe2XUxKbe3x9vbY1hm3VeIlS9ZY9sqZdVw9YsK0vKFmpkLnCj8S4uhMhcERIkWCRckCwuJiHiVoK/wfd3fj07z9mvVb4bNl3nfPY7v/M8Pcfx169eHb/c3zXQ19c30IkLSGs4jKFj3DoA1NejxzGE0IyZmE0YOwlmcRaoT2Ox2KFYbNOmLVvUrG9p5mDglMOHD9ehFpsOxQ6Ftm+neRgLxbDMUVvV1zWuvhtpTSS/PP769dOH77++f/j1EQ3/EVeFJ2/uYPG6gzn27P71N2/eoO2fP3/5A/lZKBT8FgRXDXof7Lo0OH3evGnTpk2tUpkylskq1dXVwWBwYungkWr+MvMkO/wX+nuY5+BLq6qmTp02bdGimoNz9u/fvXvW+vUrVy7buHHjLpWTKnuRQ/hxbLm6Yc3OfZuj0bWUywUP5NWrgYGBLL3NgQIOgtiU/4DQV5eCWN9CQLRjTlkJORiyZucOhlAGTxvIwIEDA9lkNpudOU1C7JIIh4mBSIWEcILVCsIFgeOgkCgKOxiypbEI0ZLbBtLW1TfQ3Z1Op2tIQanSsQsiIbIi9LUWg5+oPwoi9nPgMAUBhCT7IVkJyTIjYYeBRLRk0EAeHzjQ1UYSMgiImFmVe0Q6OIYRKD7HFGQeHByykIQoWiIgHknOQB6/PoC1KpkUEORfe50hZvRm/EE8jWMcCP1pIKogNTU1+KMGlYFkPUuKFA3Bkohe1xJl8VakC9fyNCAg0C8B0Y6/9zpBvGYWCAVBWGLPLBOS7DaS0hCiRGxI1+BgZ1t3MpHUBAtiHKYgkmFDWCANRoFwRXSrY25R5iEkUZNLz67tGrIJkKsKwhKqigeCm/a2LEGqZKggotMrQJRYCoxCQiABhS5iTAJESbZRSRiCeCCQ6OllIG3ZLDo9kUhXUeweMQ4BCYx3VJdtJcnQcws9UsUSE2p86pKiBJDtu0KxYkUaFQQUhEtCd/MUQNrassl0opUrwg4JKfHDNQ7ENHdlx4QJ5PA2CVEMxgtZ5oEcYoiWcEne93AI8iWdoBfWBiIcQemYaEMqMVhACPrNO7dIwhYK98tBBdFTCy+oY3BwRa5eVRJdEUytnEup9XV20p17ItFa/IZ2j5Tu84AoSFAwBIQVEzg8t1hSHkIOhsR41TISXRHTI3g187qrszsRFQU5C4iux6VUKvVwxcSJ7anFNKpUajZGN3gNg5nfG08tl80tITCY6JKUlCiILgiaXTk2bTKQNSUhjzs708mOcKTKTt1pJ9OvIRN7nd7e886liSknjjFkHScU6HWdOMaSKrRfLMySCukQEL642xC+79IQXZC9eAkABiCNY5AdBpKvzecBwdUwERWQjOM4uQWABBmCfzceD6QK7mwUxHVigd5sHJD5TntwuTPoYQQ4XgZDrAiIoTCEW30ZFwSMZjAQQDbYEDefc2tdF81ODRKNdtiObQ6lv1gQhpwHJO5eCwTch06IYIAoBDBBeaWwZNJhQ0xV0CSAmJmlHM1kwButWxs8TQLIOwQd70sgydZIR8Tb5OgOlyD1fAEhSHt7yrkGSG880F7IOjEbUvJSwbUwDlkQ7hHNkBAuyCE4WpBGCm8KaEgkn3/3bXj4fb7W19HRiopEol5IXS537wQc53RBAInHU+0BQGY73fjIWSEhZpGVmVB+ZgGi4+mRsRZBh5AD+zCQkAMQODSk59vo6NDQN1xHotHWaEdrJBL2LLoXHSczpbl/LTqEHYDQMAkSiKeckBdyKTjfuWQYHEkRDglhiVq10Ov6IoKCwAEIoh174GDIZ+wM0V7Ee18H9nVRj3DYOKacc5wXUxb0m1eFgGAsDOnDwqUhGEs8fqzXiYmVaZyi/JpVCjJ7DnpdzywUBACG8LzaswcbNeyIoBxDjz5/Hn3vw94s3vCuGZQTNxZMeercM5fCawUe0cPzgdmnLwT6CgRJXcRoFhYct71UR3sMZRy6ICbs4EXLFKS5BRAK12Mp9mPvNjRsVjfyw0M/h0Y/fx7q8X2BBDuvDREYvJl8r9CvHUjATplLtx0z0YxFTiwDKbY6FQQtoiHYYmosKuAgCEkAIUf03TA65PPv0R5fWzLSAEdDxHbQtBKO8hDNEDEQKoQ9sUpA+J6RIXpm1QMChXasRlASgjRFoyPD33q+/fw9mve1JaJgwFLRwQP5D4ecZuwxBTEQMLRjNq1ZRUiIIRs2rF7DMZDwZoL4M8OjQz9/jrq+7kRHpGExds4FRDgwirIOCZFFMU83BTEQ45i/exyE9i5pzd2DLB2ryObNTU1Rd4Qm12iP35dOEwTbzZUdiJhYsh6T+M1m6Jp4HaYixjGPHFwQ7hGCNDcuWY0dZRVIEHzCkKaRjDuCLvmW9+GyHl6MLLUh0uGdIxaDYxwci0KPW+3FDg+k2Oc1gGDJ8kIWYtt+3WqUYAfScJcgOHqB4xhB3FzOzQzjJsWHo8rwVjy4mMZvFWTcUCVDOlgwaRJ+WRS7HnZBWML1YIcqiIaEFi6vBwRnKCqoyJ496ITNBDkGiDsy4rq4caRblMjSpVuXcEXMTohcrwREMHhOEUV/IB0aIioCBzeIduiKALIKRw/KcRcnFcpx7Bg5AMkURtQmnS+Ki+FWOplkATMsh4h+SFajiOCAISXWPpiBTDWQMYepSHMLTiUxfCxKPLHCcDSp5PwFOHK1Od8RnKotAWSJRhAD0QoRAGyi3eYmQGiKLIiAYGZRh8wHZBs1iIJspHMwQOpWkUQxcM6KawXaQ2VtzvU/eHDmzJlaH86lAEHMdg7yl3Ioirgb1JESpGSHWBA4uCASgm7HsTf9LwMoEDrLpnJEm2j3txYNAgkgR48wZF21pbAc0mIiC2KiHBaFHQaiHeUh3CQoiQ5DoFDJu7l8DyCuD8e2ytFSjVRgVHydYUtMu4uCTGaIXLMAWTAm6X/r999KddPcaoTEQDCniqFO73nw4IEfkKN4tKWuftw2yD8xbIVwjK+IPKaDgwIHQyDBoWQRcsrJv317xfH3AQIJRUHQIWt1aPHN5/M9rm8d0oLT79hfFRP+RUIMWRGOVRBAxNpLW/K6JNtIAkdq1fbpc5P+2ixJ6LUuIKvVzGJFFDeNBb/rYhMFkDoc2y6PhWaIi0PlWNUQ9RCXROkway9CDoaoyVWXuUkL8NxQuvYpJhdtP6DnAQmHxxxNTRmc7mZGXH/GdxSH3bHpOG62FHLI/F6GUakiYmJNAcMURJ8sKIiWtDv9y5bNACSUqg3jFBsWnMpjaukWwcoVafqJV4jv3ufe+f9wcmahTURRGJ5X39PWlRuX1FYTlXFFRAsiuOCGiErEaBREjUtGscXULW6tC8ElUaSNxCJiRSoKiqXQBy3om4p9qOCDRaSoqLj75n/uzZ3p8SZG/W2nSSzpfP3Pf+6ZyaRWDV4/9wegYn74+LG4L59xesicFIs50p9Dghgc1LS0JZKk+TAFBbVVXWufDs0nyQUl37Smg2PbggU37kOPRqC0cLHPKLp+IagX69JZIA4OwRf1wis7e42uEIcLokjiYXkeBSQLR2yaS9dLeCQLJAUEEEyMAKm3jswI+YPBymAld4Nb4ishzw+fwWEawhwZSuoPkieZY19BUFBbuEwiMwDHJWCZRCQ1RELaRpt3N+4/rMfJLXJk8khcjTG2slSoi8tzhG64dcWbL+NgjjCO8XfSd6YRyBX7OEACI4nkmL1jlEJRJHoWhi5IHTp0zZqEhAQrx44NFl/ySpuhHdFOcEf4bMI5vJ4lu++G+vqkXb97RWVlOI7ABwhkqX+C3TQqT4LykoMXTV4eCFCsUdUjA5WVIPm/quKZrjAPD00ODsIrKx7fXDU+Ht89/6Z9VoJMlJZkMtWaBJ1YTV40zl+eDTMO5UH8AAGHAvFxDM5R2hFN0R+HzVgawzPk6J27d2o0yAZ7F0Kyk14JSM9arEDIkuv2QkkymTzBDKkWFEK5cIhGRswo1mT03iAiYoJAJRG4I5CCMvwwAzJQ6Zhdj93eg9IikFNxSnvV+Cv79gcxqQQ0SK19rFp7MmnSLDJlag2RrMySJdcwNlqTUVpkSBXn6Oz1QHKdBQlMR6S4IxqDGeKB1NlNgaE1p+wdEmSzfWq06lsodgUyEkJtZbP+akIZv2U8SKi8ZoAEh+gAyWYPQVYItQVHqkarcx1y09n9VQgnlvORXjhC9LS3mj3KdKTPyRVoVx8ei9eP35gNi9QRp4iMrI9KkF32ZoC4S0kwoEhgSZ0dWe6v3pFBzQ04mCfBhaoLF2az58FyAaU1K0SWVI0GiFanA4zXQiTIkZgQr3H7U87d/WKO+FrFF5fCA3kjXne3i8cq6cBgHctuklm/U7+UQOJpyaEt0SAgWXrdtrMD7MNNB48NsJtkeR2hoCzMnj+fPR/PPrlmhUJI+9jR/UHahdNSVgaCj7Rzoi/naxMixnuUS6MwlHeizTy/WN774U15uXDMWZGSbtdKkOV2cv04fxRRd0EYCViWX490HaPIT26yszs1SU0SAkn8mjVqLkqrygNBbQnRXgb1iG4fIVBVJUSCZUQr97zFe8jBt0q1tjynJ3r+obec1Bt7LH4AxCisoQfteeCAauM2dIY4FAkHgfxSMvIHRwzYEJIkM2Ys60hnktl4/ALa78Tg2NHDRw/npwU1SLf4on7Zwid1Ut2I5b/0oAjxkKRpkbDwLiHwaGcbcia6CeTNY8eJmSBQFBFRJFt37TnjH+5yaEs8kKUjFQihrB+QpQUFKEciAMmk08mstTQQRELQ+n4rCt9HlJZrxUkyxgOpAIjafk04Ig/yWVYWOsNresxBwpGttvLeN71DhnwRvR6Hd/Y9ntIjo5x9OYiOu+cIRCDQ+MlEAjVEG6F05r01cjE6FgwZxzhexNopFgVBKiAJ8hT9IEcACsQROQlCrasd0UL36xF95R/Elw8fXgtjCYFq7IPgkGIgxGGC4NMjwdXgMvINqVQ0HOnIZC0UlgQZw3JKv+YvrX8CwRfcpiy0AER+afdBir8N/4UFpE88Lh/SLdD4fhTgGFprH9UTypgxJgiRcEc0CAQQWlG6ABKNLEsnrQCtIXiWcQzkY1vMEU6rAVLhgdCmhx56SyBkzEcG0gkQ2XaHvPn+PV9YgzhIk60ri0A0ide0wEFSIPjngngkzalUCiAdGSu4ogog4wiEq1WGva+gIzLsFZ+FQ3OuAsnhjgtSRiDlGsQ4CNEgyQ5myJ9A/P0dcYsrFGqOdnWBpCNtjcUaMhxZ06XFlhO10V0Le80c6RY9FRoEHrS7IGUcRHPwyqJV5BJxkIqABKR4aZFcS0KnmhsQk3Ck0UJAwAF5Vgi0Hx0PEORk3XxSoy1AnvbPCG6rjCRoo0DKGAg4ChoytCYeNzg0iMfBHanW0iDNzQ3RaCra2GGNHjdOPZVnRY/4hDp6jnWRKkZ0V1B/igHEh52n+xU5h0ByPSIBkD4CeQrnijnChyytmnj9PB0REwTiIJzDc+QUulY02hix8t3PA5Eu9CQ+CQo7rYgikfgmHPgADmRE3QeI/EYHtwmkDftf3BHCMDlW64RwELaKcJJqVzojd0+lGpCRiARR9vo8tTkCSqh4x+RtcEgBxAEnXPCpChNfuwnkk2gtBmIu6VAg6XKYjnggPO0ehgZBaXWhuCLICDhIDAR11dKS04NV7u1bjSEzgvu53FN6CGvi2+e5j4hKq0johHXmANLbSRxY1fX4bnDQuMh7FmTOjBxEIaisa5BTzV0/w41hayhpEZ6wyDEgl+paWk9fEFsf4vH8JC2N5sulvPUOdJW06zQHKy0GYnYtIJCUIRAyAg7UVlSDgIQDQPoo3ATR9nwSTgwjoo6HAQKOwoY0YTYpXFhVxFEMRMdcGaLC3tXQgLSnwtZA4iBpAHbUxzhMR2SWvr4wD0IYh2lIU55DR12SGLOv2bY4SEiGvRkgFPaBxDFwIIGw/ZcbU09Pnux3z9fy4sXJHKtGw5ACHGDQHAUTUry0OAc5IkEwAFv6yQFS4Tmi3fmjGADDYAkxOTRIwYCwmdEAcYOuQCZhQUzBkDAcwU+Qn6UcMeV9c+GAlObQIDwhmgMyM+JxyOn3LrKOqEeWAWQwPiDmiAx6CXEI05DCQR/K/WAgCoODkIiDgyg7IBq1wmEckViDpZYABOp/yrCkNIXnBzeEnTcpXlfcEM5hOqI5NEgDQKKwZBlAlAbpU54KAdt/csTkgEpzGPO7yQEQ7oibDwmiBhQMjRKCpNNNG99fcXBHyjgIa7wl4gGxJcQwBMpzsIRAcjEESNrSHACBFIyypDRJwcJidcU5jHh4HFARDp51kOjCIi28HY7Qv7QGwc8s1wAlETQoj3rhy2ZYXZXiIBCTg3dfDlILEGS9ESDKjmH4YOnw/QVIaUO4H2Y8ihcWW9Y1iWHIzLPnqLIaGzsyAHFV5vsnmbFQkgS0xBqjVBVpjbu35s6qfZ08Sod5ljwJdwTnq7dC8m9pbMZLVdugOVDdg3PngLEs3bEsaQ3T7xj0igEbfNIj2Dn2zh1v5qCGPRATmnybhHqjGi7hmwLhhdi9q+ZvpHeD099yoKtz6fL79Vu27Ny9e+3u7duP7iBt2LABbzw/cOBAbe3p06dPnFi3bl1dXd2lS3W7rly5cvHiwTNnbj6DXr48dmzPvn179ux5dev6rVtXb109e/bsprsP7t2+/eDB7TxHBrJUXalS+NXO+b00GcVxePRTCKKIyd6Wu44uLAgGBl0U4kXEeCmYSCGRzRpddJEQExzNG4sQZFsKYzqIOS/em9HEIXjhwLvZlZcTMhT6G7rr+ZzDTJHAP+A8nve8myKcZ9/vOdve95wT5bGBs4j+D2yE7/PK4yOX1OH0aVakvn6Mxx1tgcCOImiMjY29ff+edWnvXuCBBBZzcx8BiQ9o4CGRysREBZEaHBHJBtnJAxF8X1kprKWb8liH4jPgXX2eC9khX4msKkKhXb4fAc685p51ofLkKmWDdaQy0j4QHBKJb//Mak8mx18PKiDW47nCQTSkoXDYWOAxp2hgAdaiUpkAwoFFPlPPo4GHIiIRRQMK6XRzcX1ra329UWw0GkUissH1uYVQBCRg8sR8770FnCmJiNFEyVZykAEnsDHRp+eY/lMZxp1AplHHp1hgIJHbiCgebWWV1QA8AA/llJIKlFN4WJFarp6v1zOZX/KYnMQjexAEgVKLzGo2rUgDkSK59RS4Ih/Sy6l8j5DuDIlAmvCDS4w2HntjRkb4PgI6cMc7lbKLhFlWe3fo7tDI+KAmf397ov1d7qGBCNEgp6ShcEgCbDRkAYh0NWqIZGYQqc+gcZAtBxQ5rJgeki6kZ41IUZBd+sjI8Gsnm2kBnmebFouhoUJQiMl1kCxwsiI8xUAdIzU8TL9ITmlF2kPBqmAt1B54A6TUmHpGp9sxWq1Xrc1WVQ5diy9ICKJRKi0rGrVcDomZjHLKxCMIymtWpEApNGebiByGBA0+oDD8XlWKKNEloQSj9eJGwu/zvaNT3Y6uwyWxcEngPJoajicfdZdssqpjwEg8b7dZ7C8NpRQarWq1Vd027O58gZ+2W9C3K5VlE4pSCY88oCEFm1VBNltewwKNAmzNAh3ERuTZ56fmrsL8pdDl/lujw/2j/Z7XH0skvL7eqBnC/Ijnh8Oehl87i5FHRA4ZfqO/e7gkEjdTD+LJkcd2KTAOQO9ui86LDhKrq5ubHJJg+5bt6i47bbD7yc7e3j7Nr+VzuVJpgvYbh1zN9I0MBvTwcoAG0cCjXDAppe7x5xMXe8mnlyhsfOUWzzRj1sJSTyh0+YpC4Pf2qo3RcBiRXi/ah05Ybf+3pDV6XckXo0untDPDaDw+NDU+MjJ4//6TAZNLCHQIRLsD71ZxII3Y1agK27vE4QdQUfb3f7OVS62Uz+dQyVGrfwM5hQKRgDKsiQJDbjpNINJcalg036PMWMWwO899t6Xp6UvXQuL8udNidwE7e3J7LwoH1SFnTHWGAqqPc4Fygbr7VD9HuajjJD09HMewG4U5HA6Hw+FwOBwOh8PhcDgcDofD4XCcmr8BJgxve1/adQAAAABJRU5ErkJggg==", + "description": "Displays historical fine and coarse particulate matter (PM10) values as a simplified chart with background. Optionally may display the corresponding latest PM10 value.", + "descriptor": { + "type": "timeseries", + "sizeX": 4.5, + "sizeY": 2, + "resources": [], + "templateHtml": "\n\n", + "templateCss": ".legend {\n font-size: 13px;\n line-height: 10px;\n}\n\n.legend table { \n border-spacing: 0px;\n border-collapse: separate;\n}\n\n.mouse-events .flot-overlay {\n cursor: crosshair; \n}\n\n", + "controllerScript": "self.onInit = function() {\n self.ctx.$scope.valueChartCardWidget.onInit();\n};\n\nself.onDataUpdated = function() {\n self.ctx.$scope.valueChartCardWidget.onDataUpdated();\n};\n\nself.onLatestDataUpdated = function() {\n self.ctx.$scope.valueChartCardWidget.onLatestDataUpdated();\n}\n\nself.onEditModeChanged = function() {\n self.ctx.$scope.valueChartCardWidget.onEditModeChanged();\n}\n\nself.onDestroy = function() {\n self.ctx.$scope.valueChartCardWidget.onDestroy();\n}\n\nself.typeParameters = function() {\n return {\n maxDatasources: 1,\n maxDataKeys: 1,\n singleEntity: true,\n previewWidth: '300px',\n previewHeight: '150px',\n embedTitlePanel: true,\n hasAdditionalLatestDataKeys: true,\n defaultDataKeysFunction: function() {\n return [\n { name: 'pm10', label: 'PM10', type: 'timeseries', color: 'rgba(0, 0, 0, 0.87)'}\n ];\n },\n defaultLatestDataKeysFunction: function(configComponent) {\n return [{ name: 'pm10', label: 'Latest', type: 'timeseries'}];\n }\n };\n}\n", + "settingsSchema": "{}", + "dataKeySettingsSchema": "{}", + "latestDataKeySettingsSchema": "{}", + "settingsDirective": "tb-value-chart-card-widget-settings", + "dataKeySettingsDirective": "", + "latestDataKeySettingsDirective": "", + "hasBasicMode": true, + "basicModeDirective": "tb-value-chart-card-basic-config", + "defaultConfig": "{\"datasources\":[{\"type\":\"function\",\"name\":\"\",\"dataKeys\":[{\"name\":\"f(x)\",\"type\":\"function\",\"label\":\"PM10\",\"color\":\"rgba(0, 0, 0, 0.87)\",\"settings\":{},\"_hash\":0.8587686344902596,\"funcBody\":\"var value = prevValue + Math.random() * 100 - 50;\\nvar multiplier = Math.pow(10, 2 || 0);\\nvar value = Math.round(value * multiplier) / multiplier;\\nif (value < 0) {\\n\\tvalue = 0;\\n} else if (value > 500) {\\n\\tvalue = 500;\\n}\\nreturn value;\",\"aggregationType\":null,\"units\":null,\"decimals\":null,\"usePostProcessing\":null,\"postFuncBody\":null}],\"alarmFilterConfig\":{\"statusList\":[\"ACTIVE\"]},\"latestDataKeys\":[{\"name\":\"f(x)\",\"type\":\"function\",\"label\":\"Latest\",\"color\":\"rgba(0, 0, 0, 0.87)\",\"settings\":{},\"_hash\":0.8587686344902596,\"funcBody\":\"var value = prevValue + Math.random() * 100 - 50;\\nvar multiplier = Math.pow(10, 2 || 0);\\nvar value = Math.round(value * multiplier) / multiplier;\\nif (value < 0) {\\n\\tvalue = 0;\\n} else if (value > 500) {\\n\\tvalue = 500;\\n}\\nreturn value;\",\"aggregationType\":null,\"units\":null,\"decimals\":null,\"usePostProcessing\":null,\"postFuncBody\":null}]}],\"showTitle\":true,\"backgroundColor\":\"rgba(0, 0, 0, 0)\",\"color\":null,\"padding\":\"0\",\"settings\":{\"layout\":\"left\",\"autoScale\":true,\"showValue\":true,\"valueFont\":{\"family\":\"Roboto\",\"size\":28,\"sizeUnit\":\"px\",\"style\":\"normal\",\"weight\":\"500\",\"lineHeight\":\"32px\"},\"valueColor\":{\"type\":\"range\",\"color\":\"rgba(0, 0, 0, 0.87)\",\"rangeList\":[{\"from\":0,\"to\":20,\"color\":\"#7CC322\"},{\"from\":20,\"to\":50,\"color\":\"#F89E0D\"},{\"from\":50,\"to\":150,\"color\":\"#F77410\"},{\"from\":150,\"to\":null,\"color\":\"#DE2343\"}],\"colorFunction\":\"var temperature = value;\\nif (typeof temperature !== undefined) {\\n var percent = (temperature + 60)/120 * 100;\\n return tinycolor.mix('blue', 'red', percent).toHexString();\\n}\\nreturn 'blue';\"},\"background\":{\"type\":\"image\",\"imageBase64\":\"data:image/png;base64,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\",\"imageUrl\":null,\"color\":\"#fff\",\"overlay\":{\"enabled\":true,\"color\":\"rgba(255,255,255,0.72)\",\"blur\":3}}},\"title\":\"PM10\",\"dropShadow\":true,\"enableFullscreen\":false,\"titleStyle\":null,\"mobileHeight\":null,\"configMode\":\"basic\",\"actions\":{},\"showTitleIcon\":true,\"titleIcon\":\"bubble_chart\",\"iconColor\":\"rgba(0, 0, 0, 0.87)\",\"titleFont\":{\"size\":16,\"sizeUnit\":\"px\",\"family\":\"Roboto\",\"weight\":\"500\",\"style\":\"normal\",\"lineHeight\":\"24px\"},\"iconSize\":\"18px\",\"titleTooltip\":\"\",\"widgetStyle\":{},\"widgetCss\":\"\",\"pageSize\":1024,\"noDataDisplayMessage\":\"\",\"useDashboardTimewindow\":true,\"decimals\":0,\"titleColor\":\"rgba(0, 0, 0, 0.87)\",\"borderRadius\":null,\"units\":\"µg/m³\",\"displayTimewindow\":true,\"timewindow\":{\"hideInterval\":false,\"hideLastInterval\":false,\"hideQuickInterval\":false,\"hideAggregation\":false,\"hideAggInterval\":false,\"hideTimezone\":false,\"selectedTab\":1,\"history\":{\"historyType\":2,\"timewindowMs\":60000,\"interval\":43200000,\"fixedTimewindow\":{\"startTimeMs\":1697382151041,\"endTimeMs\":1697468551041},\"quickInterval\":\"CURRENT_MONTH_SO_FAR\"},\"aggregation\":{\"type\":\"AVG\",\"limit\":25000}},\"timewindowStyle\":{\"showIcon\":false,\"iconSize\":\"24px\",\"icon\":\"query_builder\",\"iconPosition\":\"left\",\"font\":{\"size\":12,\"sizeUnit\":\"px\",\"family\":\"Roboto\",\"weight\":\"400\",\"style\":\"normal\",\"lineHeight\":\"16px\"},\"color\":\"rgba(0, 0, 0, 0.38)\",\"displayTypePrefix\":true}}" + }, + "externalId": null, + "tags": [ + "environment", + "particulate", + "matter", + "air", + "pm10" + ] +} \ No newline at end of file diff --git a/application/src/main/data/json/system/widget_types/snow_depth_card.json b/application/src/main/data/json/system/widget_types/snow_depth_card.json index af275581c6..2f7da25f0a 100644 --- a/application/src/main/data/json/system/widget_types/snow_depth_card.json +++ b/application/src/main/data/json/system/widget_types/snow_depth_card.json @@ -3,7 +3,7 @@ "name": "Snow depth card", "deprecated": false, "image": "data:image/png;base64,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", - "description": "Displays a latest snow depth telemetry data in a box layout.", + "description": "Displays a latest snow depth telemetry in a box layout.", "descriptor": { "type": "latest", "sizeX": 3, diff --git a/application/src/main/data/json/system/widget_types/snow_depth_card_with_background.json b/application/src/main/data/json/system/widget_types/snow_depth_card_with_background.json index 1505e705e7..1b72e68163 100644 --- a/application/src/main/data/json/system/widget_types/snow_depth_card_with_background.json +++ b/application/src/main/data/json/system/widget_types/snow_depth_card_with_background.json @@ -3,7 +3,7 @@ "name": "Snow depth card with background", "deprecated": false, "image": "data:image/png;base64,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", - "description": "Displays a latest snow depth telemetry data in a box layout with background.", + "description": "Displays a latest snow depth telemetry in a box layout with background.", "descriptor": { "type": "latest", "sizeX": 3, diff --git a/application/src/main/data/json/system/widget_types/soil_moisture_card.json b/application/src/main/data/json/system/widget_types/soil_moisture_card.json index 05204d5204..5b6ecaa404 100644 --- a/application/src/main/data/json/system/widget_types/soil_moisture_card.json +++ b/application/src/main/data/json/system/widget_types/soil_moisture_card.json @@ -3,7 +3,7 @@ "name": "Soil moisture card", "deprecated": false, "image": "data:image/png;base64,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", - "description": "Displays a latest soil moisture telemetry data in a box layout.", + "description": "Displays a latest soil moisture telemetry in a box layout.", "descriptor": { "type": "latest", "sizeX": 3, diff --git a/application/src/main/data/json/system/widget_types/soil_moisture_card_with_background.json b/application/src/main/data/json/system/widget_types/soil_moisture_card_with_background.json index ba153c1ba7..0b4f945371 100644 --- a/application/src/main/data/json/system/widget_types/soil_moisture_card_with_background.json +++ b/application/src/main/data/json/system/widget_types/soil_moisture_card_with_background.json @@ -3,7 +3,7 @@ "name": "Soil moisture card with background", "deprecated": false, "image": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAACgCAMAAAB+IdObAAADAFBMVEVTT0gAAABYUklYVUl1cF2JgGk6NjOAgGh3cGDY1dTW1NPb19bd2dfa1tXg29oiSsHi3dve2tjU0tHS0NDk3tzf29nQz87Z19TV1NHl393n4d/Nzcza4dHe59Tp4+DY4c/j69bf6dXh39na49Hb5NJTR0bm4dxCPDrc5dTc4dTi7NBQRUPc3NXc5tFFPzxJQT/f4tbh4dQ3NTLb2dY+OTfW38/k4NzX2tLj4tpMQ0E7NzXZ2dTh4djY4NLr5eLn5N3g69PQ1szU3c1WSkji5NTS2c1fUU7m6tvm69jj59fe39dlVVLm7d/i5Ng1MzAvLive29fk5Nvh6td3Y17n59rk7tbY3dNwXVlzYFxhhUHe6dHk59rt89ArKiji7dXi6NTl7dSCa2ZdgD/k7NpYTEpchT/p79AyMC7o597t9MyHb2liUlHf3dXm49nn59Z8Z2BsWlZcTk5Zgjzp7+Hn69Tm79lbT0rf5NZVfjnp7Nvg59nt8eTc3NJpWFVIVD5ogMmMdGyqo6KSeXDl5dSkn52ZlpRWdT/r8NkdHhvt6OcmJiVYeDji6tzs8dStwJypvJmZfndZfT5bej2em5l9Z2Zfiz5IXjzj59E4W8Po7tVli0VjkT99hVxviFFQdzauqaXx7Ou2rKmSkY1qhUxWWknq6dxSb8efhHx2hFVMYz6CgWNXbUE6XcRkaF9UZEK+sa1SU0dnlUE/TTnq6eCstdFPaj6mqJ5CRD3DxbuUmI12jVdMT0dtl0WwtaXExtVsnEHLzMOLqHnHubOKhW24ubF9kmB8kMp+dWBfcke5wNGOjU1kf0ernluEj2VFST6YhWJLcDaGmM6Toc3Gz7uqsZ+mi4Ps8d+dq8+gkltskUxvcmSan5G1qVlwf1R0icugrJmIioFZX1J9e0l/mnGNfV7U0suyyJ59gnZceMihuZFxakqukomCbnB1lFVoW0zOztu6vaG40Z6NdnZxpUNFZcXIxam0mZG8xLBreExyhma8oZ6VsoWRln/Gzs/i5MXgyblYvsYaAAAACXRSTlMgAL+wv6+vICDGM72fAAA2vElEQVR42mTUP2vbQBjHcaV/aF9Q38ytB/cGNBRPHrUYEmSQBsn2kkIlG0pU8CIMGYxwIQQyZEkhlCyGDIEWLxk69Pf8nrtKcb6tU9NYOn30nBydfHz3E+122+32K15LaVbdV9U9epYf1azrrkOzWVXNz59/oNW3vvW6Xq9XSZKk1mVlWWbIuTiOR6MFu/EtFqPRKEY2TacomUjT2JmiKJqN1uC9McbhM2nsnDN4pQwrYKl8/N03HudY/W10En3Y7Xbi2C2hCBC5WpUQ0rZth15BgmS1xsnruodQgghhpAQIUgkhLLamQAFSFlkGSMxUElub4pBjCCRfUBS9X+60pUrICJBzNkctMQJpW0Curryjzmv8VIdCXEaIx/BahhL8GyCon4g1HEnjISUgrocwi0RyBLm4AORNhCsXxQAyI2SOyLhCiqGka9u5h1CS5zXLAeFAjEAa/FGJXIZIUi9ZIHUoZKKQlBJSmiDJhhMx3jKAfPITEchDtBXJUl/eUeGvQFRhEdaAhfurBUT+f5r4ibA6TCR1MpEGXeLFy+EFYXtPksXNYjASZ00PmWIRlGVFKRIcqs8YP4gyIzmOZEXJcCIo2l7LZuIcwuMhhXHgpiFrhDJ/UkeAcEPlGiFrhZQlGEwkMpiwK4DgSAQi5+RIFJJa64zj0ZvLS5lJRoeXGGYlWTkfo5cQ2faom0lgqIMM+eawqT6L8q3CByUMihA6XkPIOBwOkDRAlYVx1vFcCSxIr84gQLTUophHN+EeOELCZ7MAwdJYdywNIUggAMyUca/zMEjuycTfQRkJggLZaYD0EjrS3kHJhju+4P6HRNKLC/d4GmZCiUI2OF5GkimknwgkMkX5nqkpCQ5COk6jraq2FcZc4jh0j2I3kOKKQp55OsBIkpVI8l7yfyB0+LBJnjabAt3dQSJx4yukkMtCQwgkgFDCp52SAcRgfZXkA8jnCI6uZfPu8bd06juTHkN4fxo6Y7e3t79edMbP7Pf7P0ftfcMT9G+P4hm0/rfywdM+rI3F/z6ohP2ju45104aiMI77PQq6jmypNqqlLIillmgk1IrREkhhwKg8A0Ji4AkQfYJueYBOyVBl79SpC1u3TjxBln7nO/f6uLfKP4kCsWPuj2NDksBxvdLxcleWeV7mA1Y7N0Z3Idx2zvltvrFk2+vaZXlVVavVFK2RfL9hw+Gw0HKUZbmWDZBDcrSaDbCtKGR37OZ8g7h6uVxOJn/g+I4IuTLMI2fe4cwRQ1AHWeLHE36oow+hBJZGISZh/maA0KIQSApKBGwOq5Rqgbx5OJKCkqt2+foiTxB+NfvPMfOS6JhY+NiqzUHIOpROm4YSo1iQ2EwCRJSya5VnKskGXBbSUVLCkfw+Hn8iQi6+c+aLHLPZaxJXOwSDTiujY2WOxWIBR7pOmzYMxSy8QwiDwyDcTGYWR4cmkEdAtOQSQZyfZmD4/oHwGWLB5fgg5iDDl6YpZ0ILI4NVIrEIKQHx5AjSnZL7vZ/JIxxPSCF4bcTXOXKMhWEBEiQ8Zv/oeqcKjL5jt9vFEhbuxhJeAcU+DA+b+/lh7tEtJYA8vaUkgUM7B0Xs+KAOkXhH7uPirXgcULBPoBDCYGBt297w5OJ8c1ayAuu0l4eq0s8qMA7a/nZevhOIShJ54+Ofa2eHbB4dA1ESIHzQqkuWjvX3HBGDM/ESq5FaHQkPWLDgOEi09OIJB4dJ5r++iYQQGOQ/lvv7L47ZdU6GzySEeATPpuloSko0j10Pst3y3GLDzgGcSuR4Ya1QKINS09sp2RwOJwn7vJ8/P3QQKNjnDhIzTIItNhEyABltNpuRSPoQzRweEq6OFgwJEEjI6Far0zhtP562AePfVT2koUMtzz8gYclfuuwuRKY4jOP43HodL3m5mG0wczGz7dQ40ohVjpfmpVnZwoVxkNVE4YbFoPZCcZKXuEGREm442qKdmU4jsmm9RMyEZr3MWBq5ckFrQ/k9z3PO/Bf5rmVfOZ99zv+8OeVcte1TkL8d/45E1kcAMQQSdyQYDzskcRBEHBIgzJCRSM6ioZLJ/Zl4PJ5OdyGapbpAAAOOrq5j6XSaKcMj3+uX+ZzoOcwR5H+OX3+NRB17CRVpbc1mN7VC4i4SmYjUJQokEIkg0hL+2Ea0hGFcBuNIU2JxrnWaEHGgrceOFYZG3gzU6/XLlwVyWiD/Oqbr+nPvfYYgtd7ZwWEkWdQKBxKJm2yaYrhhZ3EgG7lZKlo72Hhs5q5du0jS3YXTKiDIgcinpfLQ0MgIHgJZlufatcPYuWiNqHU+iqHf93pJIhB3Jj42FCp35vsDDmRpKaJbFZIsLS8lBf5wFPtnl8ruYo6EZCRYIxwhEmiUJdGFgZCDKdg3BYKwWARyrAm5OwQKBQhLNm8+uXgxIMohFDhEImfFGEn9fMFYsE3TrM73RwRimYGCWQxgKIOmtgQNmnbzgGNYckoIRUrvIs5IaGD4tSmRyHXnWLJpEzl4IK5jV3daQWgkLEFNCCRUAxBIsHOdAgThYpb3qym6PhUTgUMkgMRWxBAg8oXWyv6lNbPmD5xpJUh5mCGQFE2ztG727LxpN6+uynowIllahCQbHcmsNYnu3JEj3QlCbGKJgjClu0tB1q1z1ztyIdIQQUQCCF1QIjiIoRwkgS7GFHwRQ+p5DK82OF+vavl72eygHQQEywcQu9rSUjZtOxIq2ZrdHwpajSB9WSNSMwy7XKu3tNTqS0q9P7U7/sbCJ7VcjiCbFESNhI95G7BTzV6HWKKOwAKRPANuJ9cihsycOZMGMnXqM6/qWYxbKhKgi2b+0p1YzF/X3v00f2YbZoQguLUqmg1jRcTKW3aobFRLdUMPaJbP0io1s9hfN0pBTKXF0rDv5Rv+6sJK0ezPqT0LEUQkfNzCoRuKlhYcF0edFYUikB/IM/D5u1RSDpKgB4qBbsUk9tLw+rFIGjFsfWu2rgFypkwQX6BoDhvFiFas28GGGQzqZs23EpCjlUBBByKI11CIIcPn/GZN159YCQVREjDgwFmRLy65UMS17EcEEQduxT2f3yM8cyBI2yIUGztWJA/O/gE5O11JMBKiFBrmpYpZas3eM7YJxOcjSLlqvzPLts2bHdAagPgLlmlYBPH58FFAZg2ad7p1k+qFA5BRB2ChiEMuLaWQaj81jHUOCR4peN6/f0id/15qa2PIjBljhNKjENwnUuL1IMK1ndaARbNkIk+23TNbBRIEpGTWrSAgDUPHyqkRpL/ge2fUgAiH8bpXIEeCZu0FVkhSnUo2JpNJHJiOHSMMfuZw0H2JjwuM8vBl2TAeOQwJ5MOHh6/Qw/cEmTcPDkhAGevuWKpbUMCBrwsjyyherJrFsK2VsEYcSBh3RYBE8maJILRGqkaBIHa+vwJo9WhFx1rp07TEoKm/eNFrDPb19iXVCTFJ0TWje2UIhtxxSXzXEl4clk7QI2mWeD48ffXq8ePHrx5+Yci8cTMmTJgxBl3lJX7rkxf18F52tc0tlYpGo428qdWi0bJlaPe2bfupZcta3170TiuHankcqurB4DschPt9PruKXevoyobPV8gbBb1u2lZvrrIQkGjVMKylSeesmHQYqr24svfxYw6qyQk7v5cGBh49ukBD8bADPfyyatWq8SRBEyZMuO1FzyfMGAdDz/jbLLkljO1woL0d0s7d2W1UNrt74/LlkPBvUdwmyS1GMOw8X2g+A4lGOzLx3K4XBw4cwJEpHs8kExI7OvZKYPAtLS1HtTzZg5cwv1XBo7qBgTcjQ0MCef368SuCTB7vNG7cWy96OW7evK/eHnyGB/N2u0SOjg78Q5mOzkxmFGQWbQcYcHDuPalPFUZ/OlBCQTrgiDaT5z7iUBZVBf8hAMr3kRFA4ECATMPLZMQc3rO+3h7/nBzbZeFfTzEj1d7eDkeGW706cS67XiTndicysi1RN2yVSBQj5ToIcjPO5RD+yGSSGHF7e7Q9ilLhVDjcJoyZ9PK3ZdEiQFB9oAoIOzCSb9O4yZPxC12XY+51bw8+CAe/N3duNCUOB7J169YruXPHXci5xOrVmc5ObEtUJRI1DnEc4G6mt2YyDEEEIQZKOYXb2tYuciA4LziSRQgKfKLvMnWjblUxERcyZ2KzaROnAcL1TJw4Bw5p+dy5c9vRAkDYwZCcC8kCQpIFvDUkbkIUI4rdkRwyEDhIwg6GLMB3zmlC5JQQo3PbWI4YDJH6LvMzbNyReD4oyByhSICIY9KkHu9XZz7Lly+fSw4HEofj5s0ruSMiWS8jWd3ZSVsDBteUKEc8DYg4MD8FoZ/BgjkcKVaRY56c2kQxZswMThR4o6+XA8bzQfatx4+/TUIK8kkck8hxa8chfvfqRkg64FjQiSAZBWHJ8XO5uEDmtGNrPn50JGT4yxFjRyf+KqwzSARC38k/UOzPOMRMa1slp7YxbmPJoerb07uMJVs8v+m0n9C2yziO4726fzrNTDt1SnCFdkFbgllkwTjX2bRaSGnmih20xTFi7R/HskldxK5r6EVh0MHsKSxQvQg7TEJ7KIQRFL2IMFQoqIf14mHbZeyiw/f3+32ePpnOz+bo7Jb+Xv0+3+df9h0lkVARkShGfv1JF/NIJPLp419PTU1/o1vgK6M9dCMMslAfHMyYBMiJ9+8JZHF2S0IaFYPU68FRX6+/fQbIGg1SyKSk3SgJcQVRhoeQHQ4S0gy5cO7cuZMnTx45CYQVkRn411/vRSIGsdzRaepOG/3xRWJ6+hf57d+jo+wgBi3lVSCZ1Gbh+sr05qkTD/56AKRYnO0byJe660ji9UYllqYqpfXaKx2v1A+ro7ZRx9Exsnb+DI7Np5EePNzV09t7tGQO36QSgexIRP9HwocCEcu5c0Bu/SiUX29ESIBEvlQJDn795acvpD6drwtkZEQcqfIqlVktV5ZSkxvrGw/u/nUXyP312fvrvdXaUjm1Wa6VK7GF2lpjc2Nt9fBaba3OGjrSW6ufOV+rVKpnrmdSCwtrjVijWquujizVyg2poyhgOAzrAZLtO6M7AyXUA8jp029qTrfMUBLNjWRE4h2RO/LsIRTmcOcLQEbyJCMVSaWSm9tbq5urC89vPnj/L4bWifvri1iqR/PVeq2RblQO1Tcba/3rtY712uFGTRwCObpxvlC9Xkgl+Gw1t1ZPL6zWF1LxP+KxmC4Au6FYsCBhqyEJjjC03nzzA82bLeMTlMQgbRELDMm/d42/nBrjcJplLAORiiSTycZSo7pZWK1tPDjRDHmWx11YBdJfrlTW4kBqGzdvNj7qo9Fr9fMHl86fqRYGY3uqFy5Uc39s9i+tSjtVN9lb8NxbEp18gDkJlJ3m2E7jGATDW+SDDxQy7yBtbQZxkm++aK4HDjn6vAekUMhk2suN1tbcUn0XFWnM3rwHBMm92uL6+mL1jWfXXlmvpCuVZ6oHG9X4+kJHY+mVo4fFcQbI2+V0f3UwueuZaqJRTSxVDpYb9epmvZrTrd4OoQjETT1aE09hkMHQ/a1BTEJFJibm5ud/nL/04402gbiqmOROOJJ8efSUQt6jIisKWSiXy6urSwsL9VKtVntw4u6GrCS/b9xsLFZvbtzve2NjrVaJV6q1cmu9XOlYX9s43NcLpHH4/PlVOiK1K7ejUl0oJ+rlcrWRuFquriaibL155kdLzIIjLinF2agDQYHDIHPzt6DciAAJDE3bnd++/Prrr7/89vviskCOHQuQ9qQ2VbK9PZNfsV0KY+vzzxcXF6vPsv+Ty/L4IU3pnRJzrw4sZixCoydjOWljTg2r9Xp1NWoJEiDq8H3iKdupR4kdH6c7Xr1y+/ZtHNLs4+NIsACJNFEk8j8Yb+3tU9PTxSIbkEdCkgLxS6JBaqPZPiDqiMqmoiSQgeCg0XHYk0WfWVpqPBZiklAR1yZENTgmJ9kpQSECuQ3kNBAkE2LR6dcgQWLf86kpIGM4DJLHYRIHyeTZbvmSADmbBYIjjkO2R9QkFMRWdBwoFOKWbItAcHhIkECx5HBoRHLzT3L7LeZfhRCFkADReEkzhEkLx952keDQsSU74ACZtYKYY1sUSLz/oYIwYSV880YDAwcQ65FdxBxEJ2WLOtjyEQbYOg4kbmhZbshTB4qDaHRs0epImH5H1KEQDc78NJATBtFtysiAFkQ2e8z8hxJAPlaIH1g7AEigWEHUEuqhjgAJyU1291wkUMhdroAEcroJcs0/d6iKr4g1id0EsrIPMq72msQgSLKuJAqR7XjaIITNKof85oJk0rmEfEoenHjMI4ZVgOxyicW6L16c9hIgSG6zSWmRPp+fmxgfB+IeXOfhEP2WBwgbFPoDCJK2UJKilcQg+cFUrJ9VYWcUhhYk3QTpHUlPxg3Cs4clQhg68fonedhhulhqapooBcgPPyjk5JGWS5cuffXVpbnxy9f0zzlHsDBrSTfnsx7CphGHxvo9DC7XJLMrQNhtuCkzkcjlKAg3tXq8/fnM7EhPV4lquRrwpzQoHIOXdCuarSMSX6TklECKOJD0AEGiFUFB5iaABImLfshDZzIFIEUPaTeI1cRJpCQBUsgkkzFZyDQ40gOf8Z7HzxrmgtGeDpNEcTQFBgr38u3yBAoJDr4YEItQ7inkT5rdIPPzE+NA/lsTdezbV1gJEClImzmsJm22lmQ/F4mHtCcjMd+kjOsUBaEiBlksFntUElXHbherRrJ9b4bsJfoIHmKPFiA4DIJEpi0gSHAYxNTeESCuIjgCZJ+jsGYm3ep+wkGuq8QdOJ/AwbHwvbNnFxfVsbhcHB3t7iiV2FpJFUiTA8W+fRl7dSfxBZEHYxh7SYCwJrZQDZp9fEaHlnc7h5dk9mXyjEsgo0BSQGBYzCJttDILhLCQrFx/bR8jY2u2cA4kBMfy8tjolZ4OrvpyOW3jLUiEFyoQVxR9kV0WHsxBkGDhFwf5c/j4Jx+0oJgbH58ZGjJIqInfz6tEIBwPgQwMMpgMEij8tgAEiU5bP18XCbMEkclCHApZXvaQsVFd1GKkCaIFgeEcxNqkGYJEc3GKCOTWjEImxi/PDA0fHx66ahASJj9DJXke/uIoeQjymsR7XluxozslcRAXqjWiBTl2bAyChxRH+y5enOJsFnvCNlMeomknBmmPmCR8f5Op1JQlPXXv1q1b380Mf/jJWy2X8ZBhKhJm7HAN4Vsszf2JQVLNEE/h4+taEtukCMQkDHfmbgoijjEkWd74VEiRYZ7PT02JBIebsmALI0mQ2ODyT+K2grScT/oGDoV80jI0NAyDXEXhJ48Qh4qluxXS08dlUCRANPaRQUKT+BQK4njvGO9Yd44Vs5ZisbjM27l5JO1A1OHnXhi2HW37P0jIte9wDB2Xigybg6EVtpiqkfOmJ3Fhxk5Nwz1gxCTEQV7TD21s6W6LacuPOCC9vTiAdPKvPbJygyeS5eXZ2ZWVlWYIT8vjE+Y57qaQML54dBxEIQ87dgGZkcb4hFnLQWZmrppD1ld+epC/A7A9pzSofg1mAKOESLt7CCvJPi8FklXH652dnS/gINNZMiuSfCZlQ8uOUrbHi9lQ8JMnDi9BmRLCHperKKgHB5IWFPwcGh8Hoo6QIGHPiUQdk5N8QU8hYepiZuNenlCRlYz7nDh6z+J4HYdA9DJphPbIrpBCRntEBoOH2GJuX8RcvnelSNIYaYHYPcVVBpWcq7igG6JJgFymIjhcNVCEszPhGBAvdXR3v9g9GXeDwK+bxmGa1FOLQZZn8zSsUaQgWerhIH04REJZcMhMm7RjuV/0SHjuJ4zloewYidwrT+bsYSsg2MMf2b+/ZWaGeUsCxKJDzJfEwum6RLo7ZDnWk6ifpq0ygBi8qYvTp5AAyTL0k6rMFFZ6z2a3HKNsDPTqeAoJDtsB2KUcMQYJrHDURRLjfQCChK21fLcv4KAe+w8caJG1UBzHHUTkfrvnHbDYjCPBYTskKCQUJqJTmyvJKYHIvKNbFxlZOBSi07eEouTz4qByQB4dzzAH2RNLD+h7Yl2T8QSbf7lptIIceLVlbnyIgPEQeQX+cwZrnJ08/cGSRt7ytVOE/eGm8w9HHgcpTk9BA9k+mO+dzQrkXQ+R622TFFQSNmVWC4uT+MtGf+0AhPRw/ExEcWy7IPfXDKz9B1rmdGknNLurhx+ojoGDv9LaqhI9vSKJhssOi4cgUUhMa5QCwpouECTcHeMg9s5ERiF7de32j8xXdI0fZG6oR4F0dQWInPQXMBCBcMjVmug6EuaOh6747F8Q6OCKAgnXHXa9SawbYz00iaQ4nQJi295sViCdriIfGQQJFL8dScY0/Xv0qsvGt1EChMdA0tXVo29SKmSbg1ARmv0y1yhMwDNs4/cQVxEgSHZLNczxpEoSCYW0hnuC5uye1JIQKpJUyECfOoAQIHwvJWpJUxSFILG5qD/H87mX9ZQA0bN/10cPQw4c2H/kiEhajjPzHv/w+MyE7X794HSQ7dpSOIDwZpE0/TYPcQ5/5GYM57p7rmxBIjJZDowYBMS7MrLkkogDoyWmlEEgKcJkpFeT7rbRSwIESZySDADpCpD9HvLhkCzyQ0C2BqpKDKIOqQGOx/gKURtm5rCpXDpIYXy+1H2l6CDtsghbQY7hIAaJc5qKEzw56XrdyqZ4/5S4O73H3LANEg+hJEggA9mpEOcAwuaE48jMBBBxWI+7GSOUhPCc7mOih23pTKFuE5vqSqUrnQ6iW3/qMcau10NGn+vq0OtgLIcAQcGiMUizJMwkzRCRdMkgBCLN7h1UZHhmYm6CnwwtD1GJ7xJn4cmJQcQBwyDWQk8++RTD72CJseUhGbkkyi6PsWcH4VpE77qiLl6S5gcOQguZJNoMcRIgIunvEocfWjSJQRhU85fm5+bnru2x7Nb8azkSBCYlERxi5TNma8VBWlsZW+IAMiXnkGKx2XFl9KOO+EHrMKKSSWl7fkp00daiaJvolwg1sZIkkIBlXTfIqy+//Cr9zr3W+Ny8XKMA8et4qAjxS4p90irsyx5GnpM8KZBigGQFQppG1iGtXqtIZIeApN/NvYjssKSSrQt5fhBfk0NICBDt1gA53UI9vsIxPnN1BwkQd9y1G1Q/m+nLuQsog7hbaJMESJ+DLAtkq9Wfo0PEoRKbm3JSkz0abZdB5uEcz+m29S5eAuRQXPqLmukgX3r5JYHsP8lt/D9knE1oY1UUx982H61NtdapWkSND4wmTBpH8xQ/6BjRYFKJ2CKEUihE2tGmm6ympp22C7saaGG6GxRsN4ILsxAXQSsUsmywFFx0JwxYKAylC6GO/3P+78xNnQOdpi8vefd3z+c9970ByK1lrHfvxim9HNp7cNUQCxcxtjCeAIQSaXe63Qt4OzKJuMiHX7aPDpoH3c4zCkIByGcEuegeN/ePtDRAHwVi7S9JKGi2TphRcDYdCTYPRZRDNZIGSD6VGp/36ltw9IVKfX7F8ppxGIh0Miy76C9iWaLBvLaOeTtXZPgVgIhlHWFzm9J872UTcRE1LWzac9ebXS1XJT4RJngcMw5KSAIQEXAYiGoEIAUvk1pcmqpMLc2uJHpAWNRa71e6ZNSzTRH/4hq1bYNu9Y0ht2M5/h6OOOk6X0fQwuWP3FtWi7gedT+WTD3bCjYQmTUOUEh6QFQhSYCUsrlMcWFmQZoPCQOxZSZVoi0ZAxES/RV2ZodwL4GBxOIK8ozdWWTHe9MhGvTbeo9hF2dtRwnQcguRhIxUxqASophKaPncegSJgqiPNApetVrO5ouVud09nCznGghJuAjUORlQAsOxwwfh7vVZs9nBguENgDS5D3zU6XQVafs1WtY0tuNQFnZxqI3LtEQlOtqjx5qnJGGYZYXi1EQbCKtzCKOloKyl8gxaRa9cLgf5fPFw7+aIuAJJFIQrP7YZ0CgzBTMWXLnCpfoRrb0bGWAlj17me7y9AHXXnTvv/eCMC43jj6WxfQxINagz3FwoAz3FSUccazyu43OJ3YkMn7GsZ+N9ZRH31DQK88UlL5vL+anZW3sPvhwFCa0eIwUIu0ro81p7QaIXU2NiIDwqY8BwRsPepvbKu+rjVwEC6ehNRliMaOPhE1k3NgGiWt3BaTLlTZxBM03EYlYDRUISWyJYVhaVuC7JXfQeiktL9Xrdmy006rf/fvDvg5sYrOgkDnBVCRt9AkIBSH9CLhTpi/c/MaK9HrWiA+02jmizF2WJHmsR5Pp1VdjnIHkOrSDt6AqIjNtAhPVUObiEs5TZpyQCQBFVaaLkqlX0E5N2EAT/4BaOyvKPDx482PtLQQYUJE4QnWhrxilmLBLFRSKxoYErAnKqzuBap9rt7hxBnlIQ7Cn9EIK8Ky0tbdsB5EwVICAYK844YARk3cZyZzAKnWD2eTBqW7+CAgbrV/2IMhElL5a4aGJPFWZ2z//47mcMmyAQUYmCIPQSZUQ44n3RQbnGcLz/iqhkX0BOyUEWadtDEWi0A2QaIBKizl5VkA+++ElO6cL9Yxh4W5QZj+8DlFWCw3jyyZAERzF1IvoWhBuotqzbk31D2QKd8+YLs+nkn7/9dvKtTL4FLo1bdAvGKL4ZiygIVJJQlch074yO9rePjlqnBPnyq1UYlIKsTq+uttVh8JzPNEC+V5CEoLX7o2cSvWJyQidc1xiGCElivCJE6mu+eLjUBufe7u4htqpuzS17gZ9OT/7+y9fpFa7Tufy3jiXjVNgtE4U8xUqpLy7urpbVPdW8DqK2+NGXq9cJIo3J1euaGi9CkJ8U5Mqxe7ymr68JTgZT4SAFSUQL0NFgCGZvCROXdgJy+3B3rj61vAyQXNCoLCSzqbvsYcR7IzgUxN6jwiRiw1wewhFFI2+31NWJoS+xNfoWO6sE6SjHvjywNP2cWpZsAA0YyXEsJnbWFgrH8bQIRyxiYBQeZzAQkNnCzHiqVJi77xWXGnMLk7OZwop5EEM1xN29RoOk23FzPDEwMvo2k2GPdNHtBoKA3MNdRUQ8fhEgz05/SBcBSH+i1Tzb3m6iEmjDOLtuLUAOkkBMCY+SAAQc8JH5fD7IjBdm7nvn53+fj+dnU+Nr4ca3oFA1IQWOs49FEH0dH4JCvrGZbR7s32N+b0+8AhIR6IKHjsDxwosAQUNOgzRMVL5IF/2SQpjdQAIvcByh8KVBORCJzpCV+mytWh5vJLe889sLy8l6ZTG9HoUwvpGBunAkEIKACVFr9JtvONidx0VjfJ7hOO5AjPLiBWpE7sWRuEgTFZJ4W/xdZo0gvQpRcboRcSRiWTrKNb9cRZGV80+8hduVVDqdKxVXonQADNkgREH8TRI25/BSNGIgZzIIoLV0/odufMSbd5q0LMkiHfwXCgRBEGTa0ysNx2BY+0P9icFOqxVxluUUconD3lWSEGS9WitXNzbS+Yw3eWu3UNqoBssKMkgSqkFEmYZ7NKLxIiI+8jZBOsKM3DWgf7WvqbcLChrNrabSXQgINhReujZgCU7ddR/vxRNRRr1mB0M1EotSpKA4SgGBj0D2Tmql8kY5na15fx8u1/1sLe+vi0IGSWLlPi1R1+mEA6rGceR2FCkcepzV14i6/tHoJ598aCBYN+yr8b0KEGzQX6N74DpahXR0GuDvlO3OJY+GGITj6CFRY7lbKdWyZT9brXqHc/PFIJfOlgVkkCAqUYKweUKBaTOGwyykSiGIBmj4DIPxT198+qGSEGRMz3n/1WevSx9e3INXkR9JIZHItpA2d+RfIlyC4amOQyX0Esi3jaC2sZGDdWFbYbZUTvslfxMgRvIoCOHYclSBm/Q3HcjQwEhHQb7BEwirEIBMjKHvrJGtBRC0r4cSohC5hkhXlBBtMS/CzKBOMyQD0fHiouToAbEEv5n0a+UNEa/QSNaCai2ZoY8A3lCsvytBmH9TwpfIJfs6SFnmSBh7qJEekL4xPefozjRAJrQtaXPRgSq6g4PHwOkTN5SYx1pEhu2cGqLxzHEQUW1jPVOqJnPj2WzZW0oWpibLtUywhg9YXUMSzR3m7Q8pHobhMFDthwuFoQPFGn1HI5WCiHMR9nPpw09gl8ntSkgKwcRJUa/JVgyN5QdAOGJaEEEucXCUkLWCnw3Gk6VSzqvkK3NLQSmXWcEnqESSMJvT1QniVMSlQfxUS9twqRBTpz299ob+fh3OnpCPaqbs3JGtKkQsd9OfphAoR0ASUq0LCHXlhq3hyWnEcRjJSibrp5IlJHfvEDJTTKb9u6ZDqlS8g8tKi8TWu45rAtN++bFaEzWkCtlBc6qpmfHq1QkBbnNhJSBokGipQNmGLuVjAiKtpcQ9dX03/86ro4+CGMkmXCRbLtWCwLt9/s8/h6nF+bz6CD9BEDgwZEj800BYPLMZLOpiOt8XD+6G/Z2hGy0WkGJZkRZTBNaKqx8//7xb7vVJClF+8ZEnZIkgyZF10FPOkOgNLCYdhwNZKVQ3cpl0EOS8TKM4VRmvb02uPCUcIcjjcAFZXEntrtcjh5GwFINiDpgB7jXPWI7E5P7ie3awuc3UfiEg6FWjgLbt1f3txzpaKbYEGgvRLvtJeCsy+LiM+Fcj6Y1jzPNOVmb9jaCRD2o5z58slP3ZYDK3PijR15mWA+EWVbhtJb7Btqla2P7lB6z7xkASVSp3tAMOOL+0eGGqbOf0tbusfYZ3mEcEGBgEuZQyyGFCEINZz+SqDT+fyma9cq2YSU7ma8E6H/6mtxOEpjUMEx2EWGSmmxDkEsm9C4kFY6gaj3s4di6euQO5fuPGhPb0xe/oY6x9aJ7C0eZWeG+M6h038+JloM0g2MjUNrJpaKRUDgI/50/epe3gbB3wMED6pcTDFzubDPdAiUKSdmhAOy2tJ7H1CpIL2BqNrfX6TQVBonftHHV6K+L4BdvNKLQsIKKRHrFrq5DEybf5KrJ5uRaUvK1kxk+nxpOTCL/MEFzqRxi0oGmGZPKxdmRkNnOHz7da7ajJ8Js3IK+MPd5pddq6P//Mq9KOuPlmhA5GEFeN4kI4VTp8JNRVOotGZ0OaYB4FWfOrVXTmaqXAmynOF6e2Tk78NQxPvltTr4Ek1LAelj1RVsOs2zkk9pVdxoQubyqIvh0TkJsKgnuvGb7ZbCMIQIWEq2vanNsBkx8T1mcEMb+H5a1XZ+uZ1HhqqeGlcun5xcX79wubEZJwROyPOYVAG/QPnsKlv0QhwbDczzmQLUtwDEmoGIuIRq6GIBGCCAlBRGGi5ThRCKIoYeFHBhPze0GgC236M7fyKXh53vNTWydblZl/ZtY0m3NGZKR6SfMQ5iVbZxEUTsQRhQ9PkEP8ZAwgEwPXRkaeSAxHoRF0hlCxoBYOOTBB8VCz/ERfjIZMDuqKKM45KAYCkVi8lqwvT9Xr2VrgBVN//7O2PllsoPpVFA5L7ZkxxNzcxHbaNZ/INXm6aVI3OaGQJ0YAMgSNAuSqLE9klDEF4QRwuBQ6D5e8faYtKsWBOBSB0JC2WUj5S9jn8QOvdrJ7+2SrmM2twQqVhFPFb9eqWzlYhlI48yzwAWFCDJmHmFjWFfQZEnp/lD5KNMHB04pMlcP/Xy/YsxcPIS0pUMjkFvMrU/P5LDZGxn0vmc7kSrXaIjK75jvl4HTo4K0ldwnE/EU5bK+ZPkCR+WUSAtUrNyACoiTiW0bCa5GEV2bVbcdNqBkORLO2yWa9vruVK1czOe98plQuZ/0Cmg9svUHUepj/bNgQHHRiZ1LkpTkLfswZuLYUl9Gnh+kY8C1upIZCl+dU6RfSPPmCEiqG0ZSLjTDHbBZRuyf98VzWW5ibRD97Prm8Z580DPNxE351j69Yi0IgbEyP6IaMeuMejYlVte2kCSy13mu+9kI9lTNLYa6T4VHWZgv3t6YqlVzgZZKF+YXlhSCziYsYvlUDIKHh9Dzva7NvYoleQpFekXNBUR79AR0+K/9SJSDhXhr77TZpbLAYipqZ9Qntar2bD+t+bvZWo1GvFL3/yrp6F9mpKB4VBNEnih+LCnYxxYUEYpqbwiaQJpAVUiTNFgOBgUmRpEkXmB1mC60GNv1zbbaSLbUU/4etLLSzmK22eIKVv3POHO+oB97OmI+b8ztf99xzT8ZpMrFtChPt2eJdAHcLE6aTlMXKmfCpBBQs4nMg5HIqBZ1m6D90AtRWRehRAooA0W0eJQKiRuh2fDSi3Ribmrz1x85LiwLL9tXj4RcCLlcwEgXC9brzxhopagsAIeJLtziUpEZ2QkJyUJNxrXciDNo5ED92bu08kOOyPst1Veml+822Pz4/LYd7LywKvK17fKweFAgEyU7CQFAsZs5JXWL4qhGHg9NzkC6LL0D6NHEl11YkJCJREvVROU2SE/ouMVE14ppfcUx5pL/7rF8eD4fnqvbywBb1aijMnnGIIHX1Do1ooxxOqmmwRB3p8oR1r+asSHC1u/+t/7kP49FUQXIWUogCkZ0pxUGhTnkkJNzCkXXzXM8m8Gw7+vNj3/rXmq5BHsQIkIizsw74GSAX85mYlf+aMEcEjp+6zyxmpxmAWNIJC7MrODT7UkUyEBzXd6kViDICwpq9DHxjTeSFQeEXbRJmd1qAYyDIgiWS6BNOc7xuF4m56JzM2lCSyUSMTGDoViebBeGQgc7zCNfZxkRQxEskXGtvog6idG1j9AnEZTZ4dW7SMImzaa8ZgQbNtyR+YCRdJTDJNC+1eTZoypN1qaSxUkGhBMndtwpEcKhEHBCnZk1/NUNlHKfmB3qKXi/cvhxsgnp8aVsvm3yTlGm4xlKXYZyX4Vj2zBy+uzRYw/xpH5my8LNm+v++V0ikm+iMQ0nTHNdfqDszGq9kTODAbqYC4dM63V3Xc2uDuFxfYqm79q0Z8vT7D9SF1PMuXDbPQCB+eboYu0Q2AsLsu8Zs1/BDotTWD8ahMPhBrBDHl8DSFEErA2KagCExy4UHZmg/jzYKkhhAbIQle9FP6Y2bk1RUDETSa53hXJZKR1gjlAaTHrRjAiR9LNpuxUzIw52fC6n/CV242CFGCXKtKK7DWEWC4kMWxjHWuik0EmbDsNn1yY3YLcjFQqcR2eNxa+4XOpjuHZFGOHeX93i+of1bVgbDwFldQxIMBQByEVvjg0ABjNN7EK6lURDrozlFidP1JWh95aXxfNj0h+18S0AECetct6fO20tPaZIKRwzCRWLe6wUI0HffffPNV58yG1Ic0anFCUfig5Iqmp/CuiW1yp7jSXBKKkLOtbIxwL7C1bdeWU6HQ7/bHe7UBxkIe4gkPU5sNL52AKpNAIcKC2ZIu+8MA/TNV59TJ4VmFkzqxbpKBLl0Te0PY5JCpCNM453Svxco+2bpG39N+yPGmvpw/3h8fOA5hJHo2lDzUI0nbkp4WxMXRSRVQ9qQI418J0hoS13MTlkWd9XqltBZugYkJ5XRuowNS9bxCkTTMhX63Xb2iwbZSeT1tW/74/F4/yApq/ayomqgeZy4PGe472n8OevSEWVc8N/3UXIgnYhGPkUbjvB/tsTVMM0IXCe/9FlQVFGdcH1QHsZIHBAXv+9WRTuvtsuq8lbVFHUH9P0+wJjcNqJmXfLJG21CuktOYIUkuAm9/TVclKAIEJKnMOzU6fRz/pshTA7JWZBhckDOYADIvu26sV6enldeFAVxVA3Z8KC7ti6hxngMToCcug7Ps25ntVAQ05dgDm4KpQAHig/K7kfSg6tIyM3ljMRortNLHJFkSgMn+4ySAnF0azvYVvX09OwFaXkZmywJri/+tTo+mRhE4YCIPjRX0c1GnmBeUFM1scgRgaMwcJAfaJs9/kq7qIZSAcJRVo5qcqmJEmA4HC7unvvITWpGv1uenw/eHz/8iE2f8vLqhuxI5OucXrSELxx32WQJx9meqygRCRf2EwDlQoI08044AEtYJaIOYgWi7zVpOxWuJYfR/FYBuJKEAhE6FSFv0zJOwrF5Onh//vpDkKTr9bc3Wl0j3tRVtNtBvN3h0NYwAQKC83/9EQHVuUX3tQgJWGWSacE5PJGEWUKiy2V1B/1kE9O6w3meR1UU34Zp4s/Ls/fTrz/YIE0TaET7UFz9Twol6nwsrH/j4LHZ80gl70Lc2BVg51IPFVMTGDIvvKtApCNekgGCAiKFcKIC0klYWVKNvKX7c1xpXG0bE2bz4v32RxaFQRSWNy51UJNkUn26PNHZFUVgUQlp4et34QLvaA+iEkERAwKJRiSfkXiukeErQgkgwCHnZItBprAvubmVSNtKYBnExs1UbbdzmIyL93vVta1f1Pk1T3wKRGUiKiF/BumupJZXZOeA1y08Pt6rRyMqKU3iGhNDcWsK4NAJlY9RrBZCcvYhgLxgF6PchheVBARIwIQikZ5NPIWAZJk/1+1Y7bxhGDqDmvbuF6meKY7TJrSmNueNLW7blyI/VKIbKpQevfc+gAkQJd54dPt1IM13GIfmATLvcDPY+aTOGiEgggRjMRB6CoBEYWqHZdkdPNPmrTF5vSUgakoKhL9rMwjofCP/BTGiQHAVgMCrqQAvcYzpbPWhlVWnc0qWFQeIgOCZOAzNsjd9JOHtS8IhqzytdGkX7X7OrT9U/WrlYbXeZjayxR0USamJs0ONhLr9DnJAWCEyQcojwOJHNFMQMuFdI7kDJF7oUmkAQTqjGvn8E8loxKG4SU3ztAtVuyRHwhno7nkzT8U8d5kXp5GJ0nUZXgODK63pykq3wM6BwEekT1pmYq3bvyBoFHg0Wyf6V9jXmswLFda7nCyfKYSY1tDg1gC6t6X9e66E9LKaRz+HTUVeCkIT2lX8u3sqO6/WhJxzCKmLnHo42bJU6RJtdKPApXqiU75NxUnComRZXF0U8h67+ultiS/k5XLdkHM9bzSuxuEbPwhCaw2AhGF6SR1PcfaZTKiyOHdtOUyKxFmWvhgqmRGRVoZO4nKVKR3oA65b4h6de5AsnwctallnEz0P14AiNUwSsM5u/6zxn0as2IMgMj6t2am/8SrJfpfeBm2yVyBnbdAOCA1CSFS4RK7k4mYyjR8CBJmMBBHtTOcWe+2rR8x6m+/TOdT9UA0rxSHRme3jm6XpDKbzEECCZE1ALpOxfvr+Fr+9eAu6+f77m9vr65fX9I2/v7y7e7m//V7oZn99vafT+OBb+AOf++s7XHf3AKIvL3ENPh9++eUBI8ldOIsjGGy/5wFwCa7DP770es+Eg3QX7qN/PMTPPz3g5O05/T7mc55nQRoHfuuVl+s1XGQd+MVQhOT6NkywoC8DM42jTZBOXuLCebXb9W38LdFl6CPFCSNjcG2K8liY0UbeGre0dTXMDa497DbVUFV1vTTD5vB46NsQA7bGtnM99HhjsJrnqs9DlKTKOC5jUFT0VdG2eZe3bTt2Q7/d9nWDNVM9F9Xu+Op+KdogTZIwSpAohkFg/ba1iFQxNAIga9LIGmf8cQrLBCdxCgfBlm+QvaR0NsqG1XaVJ1cMJAhDFCcxZgB9Xn2LmyEV3JRgadDXeVGt0HW/qeoV/XxBYaZ6tWpGw+91ZflcV9v7V8dDj6k4j+LLKyLUQeJoWC1119VVMxdd6/sTIGX+VAxDMU3N7vHxfrsUFkBskITEWlYMI/iIU7A3Yj2yxiiJhYiNH5alnXKDdLjEyOAzwMyJnm3oKZubIYPGUNQrAQEXXMolMR2Au0UYb6r7JjeQVFc0zVA0q82maZM09FtDIgxCQtpvDsdXx/tVHkGnUVIKjhIz9Kqv56HfYN9/KEbfkrjSwHT1PNms3uzoJ+Yan3iyY1MV/jgPHUAlgJW3nklK8BPCSAJALSHVLAqYPZhXDCMKgRTGY0hEE+QAdhgonr8Opmap2hJIzZgFGG+o2zAmeFFbTFBFhRpHinFSmA6UFkCxO7y1Qm/VrvKgTCJr8Sich5LtNNT1UC38y5Fb6DBKS/CGuts8RVGGM1uYZA0xB36zwwDV0GEqB/ljN3oZUIM3MAhLScAE9EJfSrYZv+vyCbVIO2UYqxiga9waJJh5QOuogpE8G8SKkGxhzlu0r16RXcYRXC3sYGkmhsRLpjjIiqZvwO1mtaq6CC180ZSFKRTqZyaMIIhm2ayqHl51f1jGgG6xWT5m1hRzMUMru4r8xNQbWNquL3xoH5QDyAS2QICAu0hNBijhwzHtWkcjLLqafTPOnYnaYRjJv0PGASpNf0QjYROgJd0fi2qZTboG22x1EDQCSDMbOBlZIyZemLc/dZOP1A6y73Bxauq+iyBH40cQqM0buCIixD01KAIJrCbzfeO3RVV30zhACLD8NMr73f0jesh9OxVFntMPTr5ukxgEn2eTT0LyyMxY6Aj+380Nue/YFYAwFlClDWmVT4YFjZj+/vjq8alIr1LbNZsdiR9lv0uAgVZSsJePBteTE0UYGzdHNkoSO8GTuywpCchgyBcthQ+YUb9URT48v3p4+Ot+GS1J3M+6YVkts08cdHORhSFE0e8OqyGLTE6/HjS+4XmGAiyIDIDCkQAxWVdMWV4TFRmNhsPtCGlGCfgiLwGrpl7hNXIYQRK2Ocy/suw7NB6ugfzJhC1jgCoxcgjFQFUJBW9yv8SAMZ+OJmzbBl42ZzZb7v96eHj13EBw2djNM56zFADSIYpUzUg6RNxohtySSjpYFv5/4G9CiJAv/pQQDB4bgmwOAMVQNXWR+9ZCveCI3uQ3EUnO9yMKQhn9SG3ztIwRGG2bzeIDH9sVlAte2yyCcbQAAlTWUhzBBQDKxu9bck4LiEkZExCCPuZtlAT59vjXPyoBHzSdzJnJxnFetpsGusTcVld14ZPYp9e91/4GllcTIsZ+EcAAAAAASUVORK5CYII=", - "description": "Displays a latest soil moisture telemetry data in a box layout with background.", + "description": "Displays a latest soil moisture telemetry in a box layout with background.", "descriptor": { "type": "latest", "sizeX": 3, diff --git a/application/src/main/data/json/system/widget_types/solar_radiation_card.json b/application/src/main/data/json/system/widget_types/solar_radiation_card.json index 812fb8d846..966cdcb005 100644 --- a/application/src/main/data/json/system/widget_types/solar_radiation_card.json +++ b/application/src/main/data/json/system/widget_types/solar_radiation_card.json @@ -3,7 +3,7 @@ "name": "Solar radiation card", "deprecated": false, "image": "data:image/png;base64,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", - "description": "Displays a latest solar radiation telemetry data in a box layout.", + "description": "Displays a latest solar radiation telemetry in a box layout.", "descriptor": { "type": "latest", "sizeX": 3, diff --git a/application/src/main/data/json/system/widget_types/solar_radiation_card_with_background.json b/application/src/main/data/json/system/widget_types/solar_radiation_card_with_background.json index 474d056fd1..4cba27e99e 100644 --- a/application/src/main/data/json/system/widget_types/solar_radiation_card_with_background.json +++ b/application/src/main/data/json/system/widget_types/solar_radiation_card_with_background.json @@ -3,7 +3,7 @@ "name": "Solar radiation card with background", "deprecated": false, "image": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAACgCAMAAAB+IdObAAAC91BMVEW/cAWSRAPLewq4ZwHBbgKPQwTOfQjLeQPAcwP////67tD57M378NH57c/46cr358r78tP46Mz35sb25Md8wyL89NT35sj25MT46Mj56sz56s7999b///n14sT568v++df++9rv1sT89db78tHUhgT///Ty28f578r14Mf//ubx2cb//+/25MnViAf//uP//Nz57s3z3MPShAT//eD24sjTgAT468j//+z+/N/468b99tTx2MTw2sPalAz//+ny28SMyjn14MXRfQPblg7s1cPOfALTdwb03cfWiwT03sTakQnZjwbXjQXVgwTt18LQdwLnrjH68cvWggzz38LKeQLSdALlpinUeg7ZiBXflSXnrC757cfkpCbbjBrcjx7YhhDWignUegbWiATLcQPQfwLosTTekiLCZQLjoSPPcwLEvqbq1MM8OjLYjQzhmim9ZAL89dDdmhP7882iUALlqSvbkwvEbAPRgQLjnSThmiLsxX8hIRzoszncoQylVgKppY/GdgKEPgLtyYHqwn3GcAT89dnKawLpvH20YQPflByrWQLRewHSiQTn08PYnga1sZruzITgmRnGZwLl0sLjoCvuzCPcmQ7YkwnXhAi/aQLqvYLpv3yt12ye0lfeqQ3BYQKdTALw9eGdmYXvyo66XwHUz7PerHuOiXfptTy5ZgKZzkzq5MbinR1XVUnTlwfVfQevXgLv6sri3cDe17vQkAXf8cerq6W52XjLgQbz2Znx0JGExy4hHxvqxBbirBbmuxLOiATP6au64IrsxIjy1ZPv6cDKxqxKRz6aSAKLQgLMzMTCwr+zVgL4+/K/3YD47C7ktRvisxDn5tvRonqpTgF9OgHy8tS/v7W0tLDd6anisnpzcGEvLSfn57Xwz43GnHqBfGzY4aDmt3tybV/03izv0ivZ7rnF5Z7K3o/x2oTy8uzT086goJnXqXrm9NXx9Mj025r39dL5+eDirVVlYlX4+uj691by31buz0qvfFMgHxveyLaVUhoSesfDAAAACXRSTlP9/vwVv7ewv6/8oWFpAAAj8UlEQVR42oTUsYpTQRTG8YsRFTWYJZAlAbstTRO8D+CFgI0gbhCvxERkEmxMJVwXLAQLWawEC9HSxmLBWlt9Dp9ByAv4nTNz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", - "description": "Displays a latest solar radiation telemetry data in a box layout with background.", + "description": "Displays a latest solar radiation telemetry in a box layout with background.", "descriptor": { "type": "latest", "sizeX": 3, diff --git a/application/src/main/data/json/system/widget_types/speed_gauge.json b/application/src/main/data/json/system/widget_types/speed_gauge.json index 2c70d27cf5..e6853629ce 100644 --- a/application/src/main/data/json/system/widget_types/speed_gauge.json +++ b/application/src/main/data/json/system/widget_types/speed_gauge.json @@ -11,11 +11,11 @@ "resources": [], "templateHtml": "\n", "templateCss": "", - "controllerScript": "self.onInit = function() {\n self.ctx.gauge = new TbAnalogueRadialGauge(self.ctx, 'radialGauge'); \n}\n\nself.onDataUpdated = function() {\n self.ctx.gauge.update();\n}\n\nself.onResize = function() {\n self.ctx.gauge.resize();\n}\n\nself.onMobileModeChanged = function() {\n self.ctx.gauge.mobileModeChanged();\n}\n\n\nself.typeParameters = function() {\n return {\n maxDatasources: 1,\n maxDataKeys: 1,\n singleEntity: true\n };\n}\n\nself.onDestroy = function() {\n self.ctx.gauge.destroy();\n}\n", - "settingsSchema": "{}", + "controllerScript": "self.onInit = function() {\n self.ctx.gauge = new TbAnalogueRadialGauge(self.ctx, 'radialGauge'); \n}\n\nself.onDataUpdated = function() {\n self.ctx.gauge.update();\n}\n\nself.onResize = function() {\n self.ctx.gauge.resize();\n}\n\nself.onMobileModeChanged = function() {\n self.ctx.gauge.mobileModeChanged();\n}\n\n\nself.typeParameters = function() {\n return {\n maxDatasources: 1,\n maxDataKeys: 1,\n singleEntity: true,\n defaultDataKeysFunction: function() {\n return [{ name: 'speed', label: 'Speed', type: 'timeseries' }];\n }\n };\n}\n\nself.onDestroy = function() {\n self.ctx.gauge.destroy();\n}\n", "settingsSchema": "{}", "dataKeySettingsSchema": "{}\n", "settingsDirective": "tb-analogue-radial-gauge-widget-settings", - "defaultConfig": "{\"datasources\":[{\"type\":\"function\",\"name\":\"function\",\"dataKeys\":[{\"name\":\"f(x)\",\"type\":\"function\",\"label\":\"Speed\",\"color\":\"#2196f3\",\"settings\":{},\"_hash\":0.7282710489093589,\"funcBody\":\"var value = prevValue + Math.random() * 50 - 25;\\nif (value < 0) {\\n\\tvalue = 0;\\n} else if (value > 220) {\\n\\tvalue = 220;\\n}\\nreturn value;\"}]}],\"timewindow\":{\"realtime\":{\"timewindowMs\":60000}},\"showTitle\":false,\"backgroundColor\":\"rgb(255, 255, 255)\",\"color\":\"rgba(0, 0, 0, 0.87)\",\"padding\":\"8px\",\"settings\":{\"maxValue\":180,\"startAngle\":45,\"ticksAngle\":270,\"showBorder\":false,\"defaultColor\":\"#e65100\",\"needleCircleSize\":7,\"highlights\":[{\"from\":80,\"to\":120,\"color\":\"#fdd835\"},{\"color\":\"#e57373\",\"from\":120,\"to\":180}],\"showUnitTitle\":false,\"colorPlate\":\"#fff\",\"colorMajorTicks\":\"#444\",\"colorMinorTicks\":\"#666\",\"minorTicks\":2,\"valueInt\":3,\"minValue\":0,\"valueDec\":0,\"highlightsWidth\":15,\"valueBox\":true,\"animation\":true,\"animationDuration\":1500,\"animationRule\":\"linear\",\"colorNeedleShadowUp\":\"rgba(2, 255, 255, 0)\",\"colorNeedleShadowDown\":\"rgba(188, 143, 143, 0.78)\",\"units\":\"MPH\",\"majorTicksCount\":9,\"numbersFont\":{\"family\":\"Roboto\",\"size\":22,\"style\":\"normal\",\"weight\":\"500\",\"color\":\"#616161\"},\"titleFont\":{\"family\":\"Roboto\",\"size\":24,\"style\":\"normal\",\"weight\":\"500\",\"color\":\"#888\"},\"unitsFont\":{\"family\":\"Roboto\",\"size\":28,\"style\":\"normal\",\"weight\":\"500\",\"color\":\"#616161\"},\"valueFont\":{\"size\":32,\"style\":\"normal\",\"weight\":\"normal\",\"shadowColor\":\"rgba(0, 0, 0, 0.49)\",\"color\":\"#444\",\"family\":\"Segment7Standard\"},\"colorValueBoxRect\":\"#888\",\"colorValueBoxRectEnd\":\"#666\",\"colorValueBoxBackground\":\"#babab2\",\"colorValueBoxShadow\":\"rgba(0,0,0,1)\"},\"title\":\"Speed gauge\",\"dropShadow\":true,\"enableFullscreen\":true,\"titleStyle\":{\"fontSize\":\"16px\",\"fontWeight\":400},\"widgetStyle\":{},\"widgetCss\":\"\",\"pageSize\":1024,\"decimals\":0,\"noDataDisplayMessage\":\"\"}" - }, + "hasBasicMode": true, + "basicModeDirective": "tb-radial-gauge-basic-config", + "defaultConfig": "{\"datasources\":[{\"type\":\"function\",\"name\":\"function\",\"dataKeys\":[{\"name\":\"f(x)\",\"type\":\"function\",\"label\":\"Speed\",\"color\":\"#2196f3\",\"settings\":{},\"_hash\":0.7282710489093589,\"funcBody\":\"var value = prevValue + Math.random() * 50 - 25;\\nif (value < 0) {\\n\\tvalue = 0;\\n} else if (value > 220) {\\n\\tvalue = 220;\\n}\\nreturn value;\"}]}],\"timewindow\":{\"realtime\":{\"timewindowMs\":60000}},\"showTitle\":false,\"backgroundColor\":\"rgb(255, 255, 255)\",\"color\":\"rgba(0, 0, 0, 0.87)\",\"padding\":\"8px\",\"settings\":{\"maxValue\":180,\"startAngle\":45,\"ticksAngle\":270,\"showBorder\":false,\"defaultColor\":\"#e65100\",\"needleCircleSize\":7,\"highlights\":[{\"from\":80,\"to\":120,\"color\":\"#fdd835\"},{\"color\":\"#e57373\",\"from\":120,\"to\":180}],\"showUnitTitle\":false,\"colorPlate\":\"#fff\",\"colorMajorTicks\":\"#444\",\"colorMinorTicks\":\"#666\",\"minorTicks\":2,\"valueInt\":3,\"minValue\":0,\"valueDec\":0,\"highlightsWidth\":15,\"valueBox\":true,\"animation\":true,\"animationDuration\":1500,\"animationRule\":\"linear\",\"colorNeedleShadowUp\":\"rgba(2, 255, 255, 0)\",\"colorNeedleShadowDown\":\"rgba(188, 143, 143, 0.78)\",\"units\":\"MPH\",\"majorTicksCount\":9,\"numbersFont\":{\"family\":\"Roboto\",\"size\":22,\"style\":\"normal\",\"weight\":\"500\",\"color\":\"#616161\"},\"titleFont\":{\"family\":\"Roboto\",\"size\":24,\"style\":\"normal\",\"weight\":\"500\",\"color\":\"#888\"},\"unitsFont\":{\"family\":\"Roboto\",\"size\":28,\"style\":\"normal\",\"weight\":\"500\",\"color\":\"#616161\"},\"valueFont\":{\"size\":32,\"style\":\"normal\",\"weight\":\"normal\",\"shadowColor\":\"rgba(0, 0, 0, 0.49)\",\"color\":\"#444\",\"family\":\"Segment7Standard\"},\"colorValueBoxRect\":\"#888\",\"colorValueBoxRectEnd\":\"#666\",\"colorValueBoxBackground\":\"#babab2\",\"colorValueBoxShadow\":\"rgba(0,0,0,1)\"},\"title\":\"Speed gauge\",\"dropShadow\":true,\"enableFullscreen\":true,\"titleStyle\":{\"fontSize\":\"16px\",\"fontWeight\":400},\"widgetStyle\":{},\"widgetCss\":\"\",\"pageSize\":1024,\"decimals\":0,\"noDataDisplayMessage\":\"\",\"configMode\":\"basic\"}" }, "externalId": null } \ No newline at end of file diff --git a/application/src/main/data/json/system/widget_types/temperature_card.json b/application/src/main/data/json/system/widget_types/temperature_card.json index 8986d46d23..84460a71fb 100644 --- a/application/src/main/data/json/system/widget_types/temperature_card.json +++ b/application/src/main/data/json/system/widget_types/temperature_card.json @@ -3,7 +3,7 @@ "name": "Temperature card", "deprecated": false, "image": "data:image/png;base64,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", - "description": "Displays a latest temperature telemetry data in a box layout.", + "description": "Displays a latest temperature telemetry in a box layout.", "descriptor": { "type": "latest", "sizeX": 3, diff --git a/application/src/main/data/json/system/widget_types/temperature_card_with_background.json b/application/src/main/data/json/system/widget_types/temperature_card_with_background.json index e6743fbe8a..67929b09c7 100644 --- a/application/src/main/data/json/system/widget_types/temperature_card_with_background.json +++ b/application/src/main/data/json/system/widget_types/temperature_card_with_background.json @@ -3,7 +3,7 @@ "name": "Temperature card with background", "deprecated": false, "image": "data:image/png;base64,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", - "description": "Displays a latest temperature telemetry data in a box layout with background.", + "description": "Displays a latest temperature telemetry in a box layout with background.", "descriptor": { "type": "latest", "sizeX": 3, diff --git a/application/src/main/data/json/system/widget_types/temperature_radial_gauge.json b/application/src/main/data/json/system/widget_types/temperature_radial_gauge.json index d11faa7ab2..1f5de24fec 100644 --- a/application/src/main/data/json/system/widget_types/temperature_radial_gauge.json +++ b/application/src/main/data/json/system/widget_types/temperature_radial_gauge.json @@ -11,11 +11,11 @@ "resources": [], "templateHtml": "\n", "templateCss": "", - "controllerScript": "self.onInit = function() {\n self.ctx.gauge = new TbAnalogueRadialGauge(self.ctx, 'radialGauge'); \n}\n\nself.onDataUpdated = function() {\n self.ctx.gauge.update();\n}\n\nself.onResize = function() {\n self.ctx.gauge.resize();\n}\n\nself.onMobileModeChanged = function() {\n self.ctx.gauge.mobileModeChanged();\n}\n\nself.typeParameters = function() {\n return {\n maxDatasources: 1,\n maxDataKeys: 1,\n singleEntity: true\n };\n}\n\nself.onDestroy = function() {\n self.ctx.gauge.destroy();\n}\n", - "settingsSchema": "{}", + "controllerScript": "self.onInit = function() {\n self.ctx.gauge = new TbAnalogueRadialGauge(self.ctx, 'radialGauge'); \n}\n\nself.onDataUpdated = function() {\n self.ctx.gauge.update();\n}\n\nself.onResize = function() {\n self.ctx.gauge.resize();\n}\n\nself.onMobileModeChanged = function() {\n self.ctx.gauge.mobileModeChanged();\n}\n\nself.typeParameters = function() {\n return {\n maxDatasources: 1,\n maxDataKeys: 1,\n singleEntity: true,\n defaultDataKeysFunction: function() {\n return [{ name: 'temperature', label: 'Temperature', type: 'timeseries' }];\n }\n };\n}\n\nself.onDestroy = function() {\n self.ctx.gauge.destroy();\n}\n", "settingsSchema": "{}", "dataKeySettingsSchema": "{}\n", "settingsDirective": "tb-analogue-radial-gauge-widget-settings", - "defaultConfig": "{\"datasources\":[{\"type\":\"function\",\"name\":\"function\",\"dataKeys\":[{\"name\":\"f(x)\",\"type\":\"function\",\"label\":\"Temperature\",\"color\":\"#2196f3\",\"settings\":{},\"_hash\":0.7282710489093589,\"funcBody\":\"var value = prevValue + Math.random() * 40 - 20;\\nif (value < -60) {\\n\\tvalue = -60;\\n} else if (value > 60) {\\n\\tvalue = 60;\\n}\\nreturn value;\"}]}],\"timewindow\":{\"realtime\":{\"timewindowMs\":60000}},\"showTitle\":false,\"backgroundColor\":\"rgb(255, 255, 255)\",\"color\":\"rgba(0, 0, 0, 0.87)\",\"padding\":\"8px\",\"settings\":{\"maxValue\":60,\"startAngle\":67.5,\"ticksAngle\":225,\"showBorder\":true,\"defaultColor\":\"#e65100\",\"needleCircleSize\":7,\"highlights\":[{\"from\":-60,\"to\":-50,\"color\":\"#42a5f5\"},{\"from\":-50,\"to\":-40,\"color\":\"rgba(66, 165, 245, 0.83)\"},{\"from\":-40,\"to\":-30,\"color\":\"rgba(66, 165, 245, 0.66)\"},{\"from\":-30,\"to\":-20,\"color\":\"rgba(66, 165, 245, 0.5)\"},{\"from\":-20,\"to\":-10,\"color\":\"rgba(66, 165, 245, 0.33)\"},{\"from\":-10,\"to\":0,\"color\":\"rgba(66, 165, 245, 0.16)\"},{\"from\":0,\"to\":10,\"color\":\"rgba(229, 115, 115, 0.16)\"},{\"from\":10,\"to\":20,\"color\":\"rgba(229, 115, 115, 0.33)\"},{\"from\":20,\"to\":30,\"color\":\"rgba(229, 115, 115, 0.5)\"},{\"from\":30,\"to\":40,\"color\":\"rgba(229, 115, 115, 0.66)\"},{\"from\":40,\"to\":50,\"color\":\"rgba(229, 115, 115, 0.83)\"},{\"from\":50,\"to\":60,\"color\":\"#e57373\"}],\"showUnitTitle\":true,\"colorPlate\":\"#cfd8dc\",\"colorMajorTicks\":\"#444\",\"colorMinorTicks\":\"#666\",\"minorTicks\":2,\"valueInt\":3,\"valueDec\":1,\"highlightsWidth\":15,\"valueBox\":true,\"animation\":true,\"animationDuration\":1000,\"animationRule\":\"bounce\",\"colorNeedleShadowUp\":\"rgba(2, 255, 255, 0)\",\"colorNeedleShadowDown\":\"rgba(188, 143, 143, 0.78)\",\"units\":\"°C\",\"majorTicksCount\":12,\"numbersFont\":{\"family\":\"Roboto\",\"size\":20,\"style\":\"normal\",\"weight\":\"normal\",\"color\":\"#263238\"},\"titleFont\":{\"family\":\"Roboto\",\"size\":24,\"style\":\"normal\",\"weight\":\"normal\",\"color\":\"#263238\"},\"unitsFont\":{\"family\":\"Roboto\",\"size\":28,\"style\":\"normal\",\"weight\":\"500\",\"color\":\"#616161\"},\"valueFont\":{\"family\":\"Segment7Standard\",\"size\":30,\"style\":\"normal\",\"weight\":\"normal\",\"shadowColor\":\"rgba(0, 0, 0, 0.49)\",\"color\":\"#444\"},\"colorValueBoxRect\":\"#888\",\"colorValueBoxRectEnd\":\"#666\",\"colorValueBoxBackground\":\"#babab2\",\"colorValueBoxShadow\":\"rgba(0,0,0,1)\",\"unitTitle\":\"Temperature\",\"minValue\":-60},\"title\":\"Temperature radial gauge\",\"dropShadow\":true,\"enableFullscreen\":true,\"titleStyle\":{\"fontSize\":\"16px\",\"fontWeight\":400},\"widgetStyle\":{},\"widgetCss\":\"\",\"pageSize\":1024,\"decimals\":0,\"noDataDisplayMessage\":\"\"}" - }, + "hasBasicMode": true, + "basicModeDirective": "tb-radial-gauge-basic-config", + "defaultConfig": "{\"datasources\":[{\"type\":\"function\",\"name\":\"function\",\"dataKeys\":[{\"name\":\"f(x)\",\"type\":\"function\",\"label\":\"Temperature\",\"color\":\"#2196f3\",\"settings\":{},\"_hash\":0.7282710489093589,\"funcBody\":\"var value = prevValue + Math.random() * 40 - 20;\\nif (value < -60) {\\n\\tvalue = -60;\\n} else if (value > 60) {\\n\\tvalue = 60;\\n}\\nreturn value;\"}]}],\"timewindow\":{\"realtime\":{\"timewindowMs\":60000}},\"showTitle\":false,\"backgroundColor\":\"rgb(255, 255, 255)\",\"color\":\"rgba(0, 0, 0, 0.87)\",\"padding\":\"8px\",\"settings\":{\"maxValue\":60,\"startAngle\":67.5,\"ticksAngle\":225,\"showBorder\":true,\"defaultColor\":\"#e65100\",\"needleCircleSize\":7,\"highlights\":[{\"from\":-60,\"to\":-50,\"color\":\"#42a5f5\"},{\"from\":-50,\"to\":-40,\"color\":\"rgba(66, 165, 245, 0.83)\"},{\"from\":-40,\"to\":-30,\"color\":\"rgba(66, 165, 245, 0.66)\"},{\"from\":-30,\"to\":-20,\"color\":\"rgba(66, 165, 245, 0.5)\"},{\"from\":-20,\"to\":-10,\"color\":\"rgba(66, 165, 245, 0.33)\"},{\"from\":-10,\"to\":0,\"color\":\"rgba(66, 165, 245, 0.16)\"},{\"from\":0,\"to\":10,\"color\":\"rgba(229, 115, 115, 0.16)\"},{\"from\":10,\"to\":20,\"color\":\"rgba(229, 115, 115, 0.33)\"},{\"from\":20,\"to\":30,\"color\":\"rgba(229, 115, 115, 0.5)\"},{\"from\":30,\"to\":40,\"color\":\"rgba(229, 115, 115, 0.66)\"},{\"from\":40,\"to\":50,\"color\":\"rgba(229, 115, 115, 0.83)\"},{\"from\":50,\"to\":60,\"color\":\"#e57373\"}],\"showUnitTitle\":true,\"colorPlate\":\"#cfd8dc\",\"colorMajorTicks\":\"#444\",\"colorMinorTicks\":\"#666\",\"minorTicks\":2,\"valueInt\":3,\"valueDec\":1,\"highlightsWidth\":15,\"valueBox\":true,\"animation\":true,\"animationDuration\":1000,\"animationRule\":\"bounce\",\"colorNeedleShadowUp\":\"rgba(2, 255, 255, 0)\",\"colorNeedleShadowDown\":\"rgba(188, 143, 143, 0.78)\",\"units\":\"°C\",\"majorTicksCount\":12,\"numbersFont\":{\"family\":\"Roboto\",\"size\":20,\"style\":\"normal\",\"weight\":\"normal\",\"color\":\"#263238\"},\"titleFont\":{\"family\":\"Roboto\",\"size\":24,\"style\":\"normal\",\"weight\":\"normal\",\"color\":\"#263238\"},\"unitsFont\":{\"family\":\"Roboto\",\"size\":28,\"style\":\"normal\",\"weight\":\"500\",\"color\":\"#616161\"},\"valueFont\":{\"family\":\"Segment7Standard\",\"size\":30,\"style\":\"normal\",\"weight\":\"normal\",\"shadowColor\":\"rgba(0, 0, 0, 0.49)\",\"color\":\"#444\"},\"colorValueBoxRect\":\"#888\",\"colorValueBoxRectEnd\":\"#666\",\"colorValueBoxBackground\":\"#babab2\",\"colorValueBoxShadow\":\"rgba(0,0,0,1)\",\"unitTitle\":\"Temperature\",\"minValue\":-60},\"title\":\"Temperature radial gauge\",\"dropShadow\":true,\"enableFullscreen\":true,\"titleStyle\":{\"fontSize\":\"16px\",\"fontWeight\":400},\"widgetStyle\":{},\"widgetCss\":\"\",\"pageSize\":1024,\"decimals\":0,\"noDataDisplayMessage\":\"\",\"configMode\":\"basic\"}" }, "externalId": null } \ No newline at end of file diff --git a/application/src/main/data/json/system/widget_types/thermometer_scale.json b/application/src/main/data/json/system/widget_types/thermometer_scale.json index cdc4a2268a..0dfcdd3a42 100644 --- a/application/src/main/data/json/system/widget_types/thermometer_scale.json +++ b/application/src/main/data/json/system/widget_types/thermometer_scale.json @@ -11,11 +11,11 @@ "resources": [], "templateHtml": "\n", "templateCss": "", - "controllerScript": "self.onInit = function() {\n self.ctx.gauge = new TbAnalogueLinearGauge(self.ctx, 'linearGauge'); \n}\n\nself.onDataUpdated = function() {\n self.ctx.gauge.update();\n}\n\nself.onResize = function() {\n self.ctx.gauge.resize();\n}\n\nself.onMobileModeChanged = function() {\n self.ctx.gauge.mobileModeChanged();\n}\n\nself.typeParameters = function() {\n return {\n maxDatasources: 1,\n maxDataKeys: 1,\n singleEntity: true\n };\n}\n\nself.onDestroy = function() {\n self.ctx.gauge.destroy();\n}\n", - "settingsSchema": "{}", + "controllerScript": "self.onInit = function() {\n self.ctx.gauge = new TbAnalogueLinearGauge(self.ctx, 'linearGauge'); \n}\n\nself.onDataUpdated = function() {\n self.ctx.gauge.update();\n}\n\nself.onResize = function() {\n self.ctx.gauge.resize();\n}\n\nself.onMobileModeChanged = function() {\n self.ctx.gauge.mobileModeChanged();\n}\n\nself.typeParameters = function() {\n return {\n maxDatasources: 1,\n maxDataKeys: 1,\n singleEntity: true,\n defaultDataKeysFunction: function() {\n return [{ name: 'temperature', label: 'Temperature', type: 'timeseries' }];\n }\n };\n}\n\nself.onDestroy = function() {\n self.ctx.gauge.destroy();\n}\n", "settingsSchema": "{}", "dataKeySettingsSchema": "{}\n", "settingsDirective": "tb-analogue-linear-gauge-widget-settings", - "defaultConfig": "{\"datasources\":[{\"type\":\"function\",\"name\":\"function\",\"dataKeys\":[{\"name\":\"f(x)\",\"type\":\"function\",\"label\":\"Temp\",\"color\":\"#2196f3\",\"settings\":{},\"_hash\":0.7282710489093589,\"funcBody\":\"var value = prevValue + Math.random() * 30 - 15;\\nif (value < -60) {\\n\\tvalue = -60;\\n} else if (value > 100) {\\n\\tvalue = 100;\\n}\\nreturn value;\"}]}],\"timewindow\":{\"realtime\":{\"timewindowMs\":60000}},\"showTitle\":false,\"backgroundColor\":\"rgb(255, 255, 255)\",\"color\":\"rgba(0, 0, 0, 0.87)\",\"padding\":\"8px\",\"settings\":{\"maxValue\":100,\"defaultColor\":\"#e64a19\",\"barStrokeWidth\":2.5,\"colorBar\":\"rgba(255, 255, 255, 0.4)\",\"colorBarEnd\":\"rgba(221, 221, 221, 0.38)\",\"showUnitTitle\":true,\"minorTicks\":2,\"valueBox\":true,\"valueInt\":3,\"colorPlate\":\"#fff\",\"colorMajorTicks\":\"#444\",\"colorMinorTicks\":\"#666\",\"colorNeedleShadowUp\":\"rgba(2,255,255,0.2)\",\"colorNeedleShadowDown\":\"rgba(188,143,143,0.45)\",\"colorValueBoxRect\":\"#888\",\"colorValueBoxRectEnd\":\"#666\",\"colorValueBoxBackground\":\"#babab2\",\"colorValueBoxShadow\":\"rgba(0,0,0,1)\",\"highlightsWidth\":10,\"animation\":true,\"animationDuration\":1500,\"animationRule\":\"linear\",\"showBorder\":false,\"majorTicksCount\":8,\"numbersFont\":{\"family\":\"Arial\",\"size\":18,\"style\":\"normal\",\"weight\":\"normal\",\"color\":\"#263238\"},\"titleFont\":{\"family\":\"Roboto\",\"size\":24,\"style\":\"normal\",\"weight\":\"normal\",\"color\":\"#78909c\"},\"unitsFont\":{\"family\":\"Roboto\",\"size\":26,\"style\":\"normal\",\"weight\":\"500\",\"color\":\"#37474f\"},\"valueFont\":{\"family\":\"Roboto\",\"size\":40,\"style\":\"normal\",\"weight\":\"500\",\"color\":\"#444\",\"shadowColor\":\"rgba(0,0,0,0.3)\"},\"minValue\":-60,\"highlights\":[{\"from\":-60,\"to\":-40,\"color\":\"#90caf9\"},{\"from\":-40,\"to\":-20,\"color\":\"rgba(144, 202, 249, 0.66)\"},{\"from\":-20,\"to\":0,\"color\":\"rgba(144, 202, 249, 0.33)\"},{\"from\":0,\"to\":20,\"color\":\"rgba(244, 67, 54, 0.2)\"},{\"from\":20,\"to\":40,\"color\":\"rgba(244, 67, 54, 0.4)\"},{\"from\":40,\"to\":60,\"color\":\"rgba(244, 67, 54, 0.6)\"},{\"from\":60,\"to\":80,\"color\":\"rgba(244, 67, 54, 0.8)\"},{\"from\":80,\"to\":100,\"color\":\"#f44336\"}],\"unitTitle\":\"Temperature\",\"units\":\"°C\",\"colorBarProgress\":\"#90caf9\",\"colorBarProgressEnd\":\"#f44336\",\"colorBarStroke\":\"#b0bec5\",\"valueDec\":1},\"title\":\"Thermometer scale\",\"dropShadow\":true,\"enableFullscreen\":true,\"titleStyle\":{\"fontSize\":\"16px\",\"fontWeight\":400},\"widgetStyle\":{},\"widgetCss\":\"\",\"pageSize\":1024,\"decimals\":0,\"noDataDisplayMessage\":\"\"}" - }, + "hasBasicMode": true, + "basicModeDirective": "tb-thermometer-scale-gauge-basic-config", + "defaultConfig": "{\"datasources\":[{\"type\":\"function\",\"name\":\"function\",\"dataKeys\":[{\"name\":\"f(x)\",\"type\":\"function\",\"label\":\"Temp\",\"color\":\"#2196f3\",\"settings\":{},\"_hash\":0.7282710489093589,\"funcBody\":\"var value = prevValue + Math.random() * 30 - 15;\\nif (value < -60) {\\n\\tvalue = -60;\\n} else if (value > 100) {\\n\\tvalue = 100;\\n}\\nreturn value;\"}]}],\"timewindow\":{\"realtime\":{\"timewindowMs\":60000}},\"showTitle\":false,\"backgroundColor\":\"rgb(255, 255, 255)\",\"color\":\"rgba(0, 0, 0, 0.87)\",\"padding\":\"8px\",\"settings\":{\"maxValue\":100,\"defaultColor\":\"#e64a19\",\"barStrokeWidth\":2.5,\"colorBar\":\"rgba(255, 255, 255, 0.4)\",\"colorBarEnd\":\"rgba(221, 221, 221, 0.38)\",\"showUnitTitle\":true,\"minorTicks\":2,\"valueBox\":true,\"valueInt\":3,\"colorPlate\":\"#fff\",\"colorMajorTicks\":\"#444\",\"colorMinorTicks\":\"#666\",\"colorNeedleShadowUp\":\"rgba(2,255,255,0.2)\",\"colorNeedleShadowDown\":\"rgba(188,143,143,0.45)\",\"colorValueBoxRect\":\"#888\",\"colorValueBoxRectEnd\":\"#666\",\"colorValueBoxBackground\":\"#babab2\",\"colorValueBoxShadow\":\"rgba(0,0,0,1)\",\"highlightsWidth\":10,\"animation\":true,\"animationDuration\":1500,\"animationRule\":\"linear\",\"showBorder\":false,\"majorTicksCount\":8,\"numbersFont\":{\"family\":\"Arial\",\"size\":18,\"style\":\"normal\",\"weight\":\"normal\",\"color\":\"#263238\"},\"titleFont\":{\"family\":\"Roboto\",\"size\":24,\"style\":\"normal\",\"weight\":\"normal\",\"color\":\"#78909c\"},\"unitsFont\":{\"family\":\"Roboto\",\"size\":26,\"style\":\"normal\",\"weight\":\"500\",\"color\":\"#37474f\"},\"valueFont\":{\"family\":\"Roboto\",\"size\":40,\"style\":\"normal\",\"weight\":\"500\",\"color\":\"#444\",\"shadowColor\":\"rgba(0,0,0,0.3)\"},\"minValue\":-60,\"highlights\":[{\"from\":-60,\"to\":-40,\"color\":\"#90caf9\"},{\"from\":-40,\"to\":-20,\"color\":\"rgba(144, 202, 249, 0.66)\"},{\"from\":-20,\"to\":0,\"color\":\"rgba(144, 202, 249, 0.33)\"},{\"from\":0,\"to\":20,\"color\":\"rgba(244, 67, 54, 0.2)\"},{\"from\":20,\"to\":40,\"color\":\"rgba(244, 67, 54, 0.4)\"},{\"from\":40,\"to\":60,\"color\":\"rgba(244, 67, 54, 0.6)\"},{\"from\":60,\"to\":80,\"color\":\"rgba(244, 67, 54, 0.8)\"},{\"from\":80,\"to\":100,\"color\":\"#f44336\"}],\"unitTitle\":\"Temperature\",\"units\":\"°C\",\"colorBarProgress\":\"#90caf9\",\"colorBarProgressEnd\":\"#f44336\",\"colorBarStroke\":\"#b0bec5\",\"valueDec\":1},\"title\":\"Thermometer scale\",\"dropShadow\":true,\"enableFullscreen\":true,\"titleStyle\":{\"fontSize\":\"16px\",\"fontWeight\":400},\"widgetStyle\":{},\"widgetCss\":\"\",\"pageSize\":1024,\"decimals\":0,\"noDataDisplayMessage\":\"\",\"configMode\":\"basic\"}" }, "externalId": null } \ No newline at end of file diff --git a/application/src/main/data/json/system/widget_types/uv_index_card.json b/application/src/main/data/json/system/widget_types/uv_index_card.json index cba061819f..0a12fb0902 100644 --- a/application/src/main/data/json/system/widget_types/uv_index_card.json +++ b/application/src/main/data/json/system/widget_types/uv_index_card.json @@ -3,7 +3,7 @@ "name": "UV Index card", "deprecated": false, "image": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAACgCAMAAAB+IdObAAAAnFBMVEXg4ODf39/g4ODg4OAAAAD////g4OCAwywhISGqqqr5+fm/4ZXj4+Oenp7P6a/Ozs62trbz8/PCwsJ0dHSkpKRYWFg9PT3n5+fv9+Xx8fH3+/LIyMisrKyQy0ag0mDu7u7f8Mra2trV1dWwsLCv2XsvLy+8vLyQkJCIxznn9NiYzlOCgoJKSkrH5aOrq6tmZmbX7L3H5aK43Yio1m6jslkrAAAABXRSTlPvIL+vAC9A4IoAAARXSURBVHja7M9JEQAwCAPAUA4PvPDvsjYCk3WwCHuo7dwChsn1GgbvPGAeKk/AlUgpQkYRNoqwUYSNImwUYaMIG0XYfGbraMVRGAyg8NUhPzTKQogYHaUUs9rqtLPM+7/bpo6zinVKb1ZyQDExNx8RyQuQvKsKou8FSKrUkej7z5C3Kz8UEUTLG5AZJz1wGu+YjGXW8qSdIIcDY0fV5dzLm3QLgvVALzpSyFGpZnoqvhyVUsUWJJEShoEJ4szvm23BtdYMAVLerHG0LZiEud0gRaXUgUUXpS5sQZy0YXD9hmjJkluwGd8asWFoksxSStmKZm43CHk1bUlRTJBLsQnBZiSiZ8jbeImBwd5nwlvHLfMti/aDkH8UcG46paomD8O0YBvyS/RgWUHG19Zi5Z7GiWfZLpC5d/VVdWadlgSQHpw3cl1DnCQj5DboELQ+TCzaF5Kq77qcdTY76X4U9N67NQQ76DKzXCWhTMJM23vH3K6QvFL/qlmnBxGfECrF8AA5ZeKthfa+KqhxvmduV0iqFh15yGmepd20yvHYLpDzZ13XZ/hcQv7Aex2K8wS5DWlUqIF6CTnARYVSYuyHHblUVXUOoPWOhPk6J8YC5IWfbyj2s/xzSNHNjoqou0Ne25I4v6hXIRwmRvdB3P1lzwxWG4ZhMHxShgzGkhGkNFATu5htp63v/3CTGxGWlhV6yJpDfoJi2X+IvhhD4jwCObZVcTg1jMvB0iflHPwptrH/ePu9TI2Dvf2eF+OJboru4U4h2lj65cvTLWlcH8Q4lpWfbvLe20O30OMC6xpCnMZGsi61CYaWGIgZrbnSF+Ln0WZkJjvegQTEAB1SZfFV8xj0YCkyAAtihKFgTqIpIfYAkwWCFFSQdiUBowo6DW4FEDifp7K/3t4N6PQN9yCcBOoA2fUIM4h3LKy9Q3QNE0ZqR0cziDKVBjImkJRr82AHFF6wi2IgsVYPiXCABUgrlUYIUQ10BQmCOIM4b2skY5Q+hnaxZ7W/DISVwkNOLGkGqdcZ8VyVKSaB/gqSSd3zjIjNCHbazKSe1hWH14AgosNSvMtYCJy0MjpfREFIk4QFo0MiUW9wFSXPIBlJxmmJSaeeorBYiNcE+Xi898stOG7BgUX2YB2zwVlqssTOiTM15+Z24xXkGbmCJe2/FXaQbWoH2Zp2kK1pB9madpAf9udYAAAAAGCQv/U0dpRBNyI3IjciNyI3IjciNyI3IjciNyK1d/c4CMNAEIWdH2cLS9TEElZKUkRCcP+7YTpSpptdvVdM/51grrbt+ZxLyL08rORz/iD1aGbmHrK1p5l7yP7+KQJAilkkSPtEgLSj5pt7yKvUvgEgPSBA/gICBAgQIECA9IAAAQIECBAgTgOiFhC1gKgFRC0gagFRC4haQNQCohYQtYCoBUQtIGoBUQuIWkDUAqIWELWAqAVELSBqAVFrSSmHaEljiMvmdUpDCiBZO2MepsV7aRzmL/oPrqtS4mUjAAAAAElFTkSuQmCC", - "description": "Displays a latest UV index telemetry data in a box layout.", + "description": "Displays a latest UV index telemetry in a box layout.", "descriptor": { "type": "latest", "sizeX": 3, diff --git a/application/src/main/data/json/system/widget_types/uv_index_card_with_background.json b/application/src/main/data/json/system/widget_types/uv_index_card_with_background.json index 73b0f89692..2c166a8e4c 100644 --- a/application/src/main/data/json/system/widget_types/uv_index_card_with_background.json +++ b/application/src/main/data/json/system/widget_types/uv_index_card_with_background.json @@ -3,7 +3,7 @@ "name": "UV Index card with background", "deprecated": false, "image": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAACgCAMAAAB+IdObAAAC+lBMVEW6o3DUs2IAAADs0ZTfvGTnz5Pvz4/20o+4qHP/9+D/9d7/8tL/9Nr/9Nf/9NT/9eH/+OP/+ef/993/883/8sj/88v/9tr/88//8dD/+uv/8sP/9Nz/8cz//fj/9dHz6tT37NP///7/++7/+/F8wyL169T//PP//PX/88X+8dXv6djx6tb//vr/9tf27db/1n/99ePz7Nj879D57tb57tH91ITz6ND88NPu48v679P789zv59P+2n7k28j99d7/1YPz58z61If67c38xU3r4s/n2sP/6q//3ID36sv778Pw5c7/1Xbi2sv98tjs5NLw0pD/2X3j2MPr4Mv68Njt59b/x0v90XL/1Ybh2s3x6tj8783/3oXrwWD/yVT26tDe2Mz/7rzd1sj88Nf504r/02r+0Gj00o3/2IHx5cb/zF3n38357tPl3cz/5a//4Y7903//1HD+zmT/1nv80nvg2cj06Mbv4MP/5qP/5Zzb1s31yWn2x2Dt0ZL10orp38nm3Mj47MT/0WD+zVXa1cn/45Xs3sP+0G3/7LWno5n/34n/yE/p3MTu4sjp0JXm4NGynmDxw17/yET/6ajxxWbCqGL+3I/3xlusqaH304z80Xbe1cP5zW3lvV8hIB/twFr/0FngsUJcPwPs4Mb/3pj+xj36y2barkzitlH+zU35w0z61IzTqEbbqjn9+e+4tKratFbLnj3+xjP65La3oV/878jctmCtml7Rrli7pGHHqlnhvGjpwGa+pFzDv7TLrWDSpDTJo0xAPzz40oC923Tyw1Tqt0XmsTSemo7zznx0cmyPyj3wuzrBmUDNyLvVtWhYV1XirCj91orXoiLO4Yjv78dMOAyTXwLz7d/k496e0FLTu30pHwX59erJrWr9wyTMy8XDkyaHVwDf6a+2kEX/zD4+Lgau1mnQwpovLi2tgyrutSWEZCDP45iQj42JdkPy8e3F34q93HrVz76gj2KceC6hbAfo7LuCf3j/2XZqZVtvVyXa5qPZyJifg0jRlAKlAAAACXRSTlP7IAC1tSAgv7+sbVSmAAAhlklEQVR42qzUP0tbURzG8Yui5cbEaCNNjLZQBbsEbpdsl16yGDIZ6JDBJRCIkw24tIPZhODQxSl7NsfgG8k76nN+589z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", - "description": "Displays a latest UV index telemetry data in a box layout with background.", + "description": "Displays a latest UV index telemetry in a box layout with background.", "descriptor": { "type": "latest", "sizeX": 3, diff --git a/application/src/main/data/json/system/widget_types/value_and_chart_card.json b/application/src/main/data/json/system/widget_types/value_and_chart_card.json index a868a8d810..93300135bd 100644 --- a/application/src/main/data/json/system/widget_types/value_and_chart_card.json +++ b/application/src/main/data/json/system/widget_types/value_and_chart_card.json @@ -3,7 +3,7 @@ "name": "Value and chart card", "deprecated": false, "image": "data:image/png;base64,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", - "description": "Displays a single entity telemetry data as a combination of the latest and aggregated values. Optionally may display the corresponding historical values as a simplified chart.", + "description": "Displays a single entity telemetry as a combination of the latest and aggregated values. Optionally may display the corresponding historical values as a simplified chart.", "descriptor": { "type": "timeseries", "sizeX": 4.5, diff --git a/application/src/main/data/json/system/widget_types/value_card.json b/application/src/main/data/json/system/widget_types/value_card.json index eb676a517f..896a401b8f 100644 --- a/application/src/main/data/json/system/widget_types/value_card.json +++ b/application/src/main/data/json/system/widget_types/value_card.json @@ -3,7 +3,7 @@ "name": "Value card", "deprecated": false, "image": "data:image/png;base64,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", - "description": "Displays a single entity attribute or the latest telemetry data in a box layout.", + "description": "Displays a single entity attribute or the latest telemetry in a box layout.", "descriptor": { "type": "latest", "sizeX": 3, diff --git a/application/src/main/data/json/system/widget_types/vertical_capsule_tank.json b/application/src/main/data/json/system/widget_types/vertical_capsule_tank.json new file mode 100644 index 0000000000..33c49ba0e7 --- /dev/null +++ b/application/src/main/data/json/system/widget_types/vertical_capsule_tank.json @@ -0,0 +1,24 @@ +{ + "fqn": "vertical_capsule_tank", + "name": "Vertical capsule tank", + "deprecated": false, + "image": "data:image/png;base64,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", + "description": "Widget indicates the level of liquid in Vertical capsule tank.", + "descriptor": { + "type": "latest", + "sizeX": 4, + "sizeY": 4, + "resources": [], + "templateHtml": "\n", + "templateCss": "", + "controllerScript": "self.onInit = function() {\n self.ctx.$scope.liquidLevelWidget.onInit();\n};\n\nself.onDataUpdated = function() {\n self.ctx.$scope.liquidLevelWidget.update();\n}\n\nself.typeParameters = function() {\n return {\n maxDatasources: 1,\n maxDataKeys: 1,\n singleEntity: true,\n previewWidth: '250px',\n previewHeight: '250px',\n embedTitlePanel: true\n };\n};\n\nself.onDestroy = function() {\n}\n\nself.actionSources = function() { \n return { \n 'cardClick': {\n name: 'widget-action.card-click',\n multiple: false \n } \n };\n}", + "settingsSchema": "{}", + "dataKeySettingsSchema": "{}\n", + "settingsDirective": "tb-liquid-level-card-widget-settings", + "hasBasicMode": true, + "basicModeDirective": "tb-liquid-level-card-basic-config", + "defaultConfig": "{\"datasources\":[{\"type\":\"function\",\"name\":\"function\",\"dataKeys\":[{\"name\":\"f(x)\",\"type\":\"function\",\"label\":\"Random\",\"color\":\"#2196f3\",\"settings\":{},\"_hash\":0.15479322438769105,\"funcBody\":\"return Math.floor(Math.random() * 101);\",\"aggregationType\":null,\"units\":null,\"decimals\":null,\"usePostProcessing\":null,\"postFuncBody\":null}],\"alarmFilterConfig\":{\"statusList\":[\"ACTIVE\"]}}],\"timewindow\":{\"realtime\":{\"timewindowMs\":60000}},\"showTitle\":true,\"backgroundColor\":\"#fff\",\"color\":\"rgba(0, 0, 0, 0.87)\",\"padding\":\"0px\",\"settings\":{\"tankSelectionType\":\"static\",\"selectedShape\":\"Vertical Capsule\",\"shapeAttributeName\":\"tankShape\",\"tankColor\":{\"type\":\"range\",\"color\":\"#242770\",\"rangeList\":[{\"from\":null,\"to\":20,\"color\":\"#E73535DE\"},{\"from\":20,\"to\":null,\"color\":\"#242770\"}],\"colorFunction\":\"var percent = value;\\nif (typeof percent !== undefined) {\\n if (percent < 20) {\\n return '#E73535DE';\\n }\\n}\\nreturn '#242770';\"},\"datasourceUnits\":\"%\",\"layout\":\"percentage\",\"volumeSource\":\"static\",\"volumeConstant\":500,\"volumeAttributeName\":\"volume\",\"volumeUnits\":\"L\",\"volumeFont\":{\"family\":\"Roboto\",\"size\":14,\"sizeUnit\":\"px\",\"style\":\"normal\",\"weight\":\"500\",\"lineHeight\":\"100%\"},\"volumeColor\":\"rgba(0, 0, 0, 0.18)\",\"units\":\"%\",\"widgetUnitsSource\":\"static\",\"widgetUnitsAttributeName\":\"units\",\"liquidColor\":{\"type\":\"range\",\"color\":\"#7A8BFF\",\"rangeList\":[{\"from\":null,\"to\":20,\"color\":\"#E27C7CDE\"},{\"from\":20,\"to\":null,\"color\":\"#7A8BFF\"}],\"colorFunction\":\"var percent = value;\\nif (typeof percent !== undefined) {\\n if (percent < 20) {\\n return '#E27C7CDE';\\n }\\n}\\nreturn '#7A8BFF';\"},\"valueFont\":{\"family\":\"Roboto\",\"size\":24,\"sizeUnit\":\"px\",\"style\":\"normal\",\"weight\":\"500\",\"lineHeight\":\"100%\"},\"valueColor\":{\"type\":\"range\",\"color\":\"#000000DE\",\"rangeList\":[{\"from\":null,\"to\":20,\"color\":\"#FF0000DE\"},{\"from\":20,\"to\":null,\"color\":\"rgba(0,0,0,0.87)\"}],\"colorFunction\":\"var percent = value;\\nif (typeof percent !== undefined) {\\n if (percent < 20) {\\n return '#FF0000DE';\\n }\\n}\\nreturn '#000000DE';\"},\"showBackgroundOverlay\":true,\"backgroundOverlayColor\":{\"type\":\"range\",\"color\":\"#FFFFFFC2\",\"rangeList\":[{\"from\":null,\"to\":20,\"color\":\"#FFEFEFDE\"},{\"from\":20,\"to\":null,\"color\":\"#FFFFFFC2\"}],\"colorFunction\":\"var percent = value;\\nif (typeof percent !== undefined) {\\n if (percent < 20) {\\n return '#FFEFEFDE';\\n }\\n}\\nreturn '#FFFFFFC2';\"},\"showTooltip\":true,\"showTooltipLevel\":true,\"tooltipUnits\":\"%\",\"tooltipLevelDecimals\":0,\"tooltipLevelFont\":{\"family\":\"Roboto\",\"size\":13,\"sizeUnit\":\"px\",\"style\":\"normal\",\"weight\":\"500\",\"lineHeight\":\"100%\"},\"tooltipLevelColor\":{\"type\":\"constant\",\"color\":\"rgba(0, 0, 0, 0.76)\",\"rangeList\":[],\"colorFunction\":\"var percent = value;\\nif (typeof percent !== undefined) {\\n if (percent < 20) {\\n return '#E27C7CDE';\\n }\\n}\\nreturn '#7A8BFF';\"},\"showTooltipDate\":true,\"tooltipDateFormat\":{\"format\":null,\"lastUpdateAgo\":true,\"custom\":false},\"tooltipDateFont\":{\"family\":\"Roboto\",\"size\":13,\"sizeUnit\":\"px\",\"style\":\"normal\",\"weight\":\"500\",\"lineHeight\":\"100%\"},\"tooltipDateColor\":\"rgba(0, 0, 0, 0.76)\",\"tooltipBackgroundColor\":\"rgba(255, 255, 255, 0.76)\",\"tooltipBackgroundBlur\":3,\"background\":{\"type\":\"color\",\"color\":\"#fff\",\"overlay\":{\"enabled\":false,\"color\":\"rgba(255,255,255,0.72)\",\"blur\":3}}},\"title\":\"Liquid level\",\"useDashboardTimewindow\":true,\"displayTimewindow\":true,\"configMode\":\"basic\",\"titleFont\":{\"family\":\"Roboto\",\"size\":16,\"sizeUnit\":\"px\",\"style\":\"normal\",\"weight\":\"500\",\"lineHeight\":\"1.5\"},\"titleColor\":\"rgba(0, 0, 0, 0.87)\",\"showTitleIcon\":false,\"titleIcon\":\"water_drop\",\"iconColor\":\"#5469FF\",\"decimals\":0,\"enableDataExport\":false,\"enableFullscreen\":false,\"borderRadius\":\"0px\",\"actions\":{},\"iconSize\":\"24px\",\"titleTooltip\":\"\",\"dropShadow\":true,\"margin\":\"0px\",\"widgetStyle\":{},\"widgetCss\":\"\",\"titleStyle\":{\"fontSize\":\"16px\",\"fontWeight\":400},\"pageSize\":1024,\"noDataDisplayMessage\":\"\"}" + }, + "externalId": null, + "tags": null +} \ No newline at end of file diff --git a/application/src/main/data/json/system/widget_types/vertical_cylinder_tank.json b/application/src/main/data/json/system/widget_types/vertical_cylinder_tank.json new file mode 100644 index 0000000000..ba6666afbf --- /dev/null +++ b/application/src/main/data/json/system/widget_types/vertical_cylinder_tank.json @@ -0,0 +1,24 @@ +{ + "fqn": "vertical_cylinder_tank", + "name": "Vertical cylinder tank", + "deprecated": false, + "image": "data:image/png;base64,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", + "description": "Widget indicates the level of liquid in Vertical cylinder tank.", + "descriptor": { + "type": "latest", + "sizeX": 4, + "sizeY": 4, + "resources": [], + "templateHtml": "\n", + "templateCss": "", + "controllerScript": "self.onInit = function() {\n self.ctx.$scope.liquidLevelWidget.onInit();\n}\n\nself.onDataUpdated = function() {\n self.ctx.$scope.liquidLevelWidget.update();\n}\n\nself.typeParameters = function() {\n return {\n maxDatasources: 1,\n maxDataKeys: 1,\n singleEntity: true,\n previewWidth: '250px',\n previewHeight: '250px',\n embedTitlePanel: true\n };\n};\n\nself.onDestroy = function() {\n}\n\nself.actionSources = function() { \n return { \n 'cardClick': {\n name: 'widget-action.card-click',\n multiple: false \n } \n };\n}", + "settingsSchema": "{}", + "dataKeySettingsSchema": "{}\n", + "settingsDirective": "tb-liquid-level-card-widget-settings", + "hasBasicMode": true, + "basicModeDirective": "tb-liquid-level-card-basic-config", + "defaultConfig": "{\"datasources\":[{\"type\":\"function\",\"name\":\"function\",\"dataKeys\":[{\"name\":\"f(x)\",\"type\":\"function\",\"label\":\"Random\",\"color\":\"#2196f3\",\"settings\":{},\"_hash\":0.15479322438769105,\"funcBody\":\"return Math.floor(Math.random() * 101);\",\"aggregationType\":null,\"units\":null,\"decimals\":null,\"usePostProcessing\":null,\"postFuncBody\":null}],\"alarmFilterConfig\":{\"statusList\":[\"ACTIVE\"]}}],\"timewindow\":{\"realtime\":{\"timewindowMs\":60000}},\"showTitle\":true,\"backgroundColor\":\"#fff\",\"color\":\"rgba(0, 0, 0, 0.87)\",\"padding\":\"0px\",\"settings\":{\"tankSelectionType\":\"static\",\"selectedShape\":\"Vertical Cylinder\",\"shapeAttributeName\":\"tankShape\",\"tankColor\":{\"type\":\"range\",\"color\":\"#242770\",\"rangeList\":[{\"from\":null,\"to\":20,\"color\":\"#E73535DE\"},{\"from\":20,\"to\":null,\"color\":\"#242770\"}],\"colorFunction\":\"var percent = value;\\nif (typeof percent !== undefined) {\\n if (percent < 20) {\\n return '#E73535DE';\\n }\\n}\\nreturn '#242770';\"},\"datasourceUnits\":\"%\",\"layout\":\"percentage\",\"volumeSource\":\"static\",\"volumeConstant\":500,\"volumeAttributeName\":\"volume\",\"volumeUnits\":\"L\",\"volumeFont\":{\"family\":\"Roboto\",\"size\":14,\"sizeUnit\":\"px\",\"style\":\"normal\",\"weight\":\"500\",\"lineHeight\":\"100%\"},\"volumeColor\":\"rgba(255, 255, 255, 0.18)\",\"units\":\"%\",\"widgetUnitsSource\":\"static\",\"widgetUnitsAttributeName\":\"units\",\"liquidColor\":{\"type\":\"range\",\"color\":\"#7A8BFF\",\"rangeList\":[{\"from\":null,\"to\":20,\"color\":\"#E27C7CDE\"},{\"from\":20,\"to\":null,\"color\":\"#7A8BFF\"}],\"colorFunction\":\"var percent = value;\\nif (typeof percent !== undefined) {\\n if (percent < 20) {\\n return '#E27C7CDE';\\n }\\n}\\nreturn '#7A8BFF';\"},\"valueFont\":{\"family\":\"Roboto\",\"size\":24,\"sizeUnit\":\"px\",\"style\":\"normal\",\"weight\":\"500\",\"lineHeight\":\"100%\"},\"valueColor\":{\"type\":\"range\",\"color\":\"#000000DE\",\"rangeList\":[{\"from\":null,\"to\":20,\"color\":\"#FF0000DE\"},{\"from\":20,\"to\":null,\"color\":\"rgba(0,0,0,0.87)\"}],\"colorFunction\":\"var percent = value;\\nif (typeof percent !== undefined) {\\n if (percent < 20) {\\n return '#FF0000DE';\\n }\\n}\\nreturn '#000000DE';\"},\"showBackgroundOverlay\":true,\"backgroundOverlayColor\":{\"type\":\"range\",\"color\":\"rgba(255, 255, 255, 0.76)\",\"rangeList\":[{\"from\":null,\"to\":20,\"color\":\"#FFEFEFDE\"},{\"from\":20,\"to\":null,\"color\":\"#FFFFFFC2\"}],\"colorFunction\":\"var percent = value;\\nif (typeof percent !== undefined) {\\n if (percent < 20) {\\n return '#FFEFEFDE';\\n }\\n}\\nreturn '#FFFFFFC2';\"},\"showTooltip\":true,\"showTooltipLevel\":true,\"tooltipUnits\":\"%\",\"tooltipLevelDecimals\":0,\"tooltipLevelFont\":{\"family\":\"Roboto\",\"size\":13,\"sizeUnit\":\"px\",\"style\":\"normal\",\"weight\":\"500\",\"lineHeight\":\"100%\"},\"tooltipLevelColor\":{\"type\":\"constant\",\"color\":\"rgba(0, 0, 0, 0.76)\",\"rangeList\":[],\"colorFunction\":\"var percent = value;\\nif (typeof percent !== undefined) {\\n if (percent < 20) {\\n return '#E27C7CDE';\\n }\\n}\\nreturn '#7A8BFF';\"},\"showTooltipDate\":true,\"tooltipDateFormat\":{\"format\":null,\"lastUpdateAgo\":true,\"custom\":false},\"tooltipDateFont\":{\"family\":\"Roboto\",\"size\":13,\"sizeUnit\":\"px\",\"style\":\"normal\",\"weight\":\"500\",\"lineHeight\":\"100%\"},\"tooltipDateColor\":\"rgba(0, 0, 0, 0.76)\",\"tooltipBackgroundColor\":\"rgba(255, 255, 255, 0.76)\",\"tooltipBackgroundBlur\":3,\"background\":{\"type\":\"color\",\"color\":\"#fff\",\"overlay\":{\"enabled\":false,\"color\":\"rgba(255,255,255,0.72)\",\"blur\":3}}},\"title\":\"Liquid level\",\"useDashboardTimewindow\":true,\"displayTimewindow\":true,\"configMode\":\"basic\",\"titleFont\":{\"family\":\"Roboto\",\"size\":16,\"sizeUnit\":\"px\",\"style\":\"normal\",\"weight\":\"500\",\"lineHeight\":\"1.5\"},\"titleColor\":\"rgba(0, 0, 0, 0.87)\",\"showTitleIcon\":false,\"titleIcon\":\"water_drop\",\"iconColor\":\"#5469FF\",\"decimals\":0,\"enableDataExport\":false,\"enableFullscreen\":false,\"borderRadius\":\"0px\",\"actions\":{},\"iconSize\":\"24px\",\"titleTooltip\":\"\",\"dropShadow\":true,\"margin\":\"0px\",\"widgetStyle\":{},\"widgetCss\":\"\",\"titleStyle\":{\"fontSize\":\"16px\",\"fontWeight\":400},\"pageSize\":1024,\"noDataDisplayMessage\":\"\"}" + }, + "externalId": null, + "tags": null +} \ No newline at end of file diff --git a/application/src/main/data/json/system/widget_types/vertical_oval_tank.json b/application/src/main/data/json/system/widget_types/vertical_oval_tank.json new file mode 100644 index 0000000000..a58dc67dd2 --- /dev/null +++ b/application/src/main/data/json/system/widget_types/vertical_oval_tank.json @@ -0,0 +1,24 @@ +{ + "fqn": "vertical_oval_tank", + "name": "Vertical oval tank", + "deprecated": false, + "image": "data:image/png;base64,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", + "description": "Widget indicates the level of liquid in Vertical oval tank.", + "descriptor": { + "type": "latest", + "sizeX": 4, + "sizeY": 4, + "resources": [], + "templateHtml": "\n", + "templateCss": "", + "controllerScript": "self.onInit = function() {\n self.ctx.$scope.liquidLevelWidget.onInit();\n};\n\nself.onDataUpdated = function() {\n self.ctx.$scope.liquidLevelWidget.update();\n}\n\nself.typeParameters = function() {\n return {\n maxDatasources: 1,\n maxDataKeys: 1,\n singleEntity: true,\n previewWidth: '250px',\n previewHeight: '250px',\n embedTitlePanel: true\n };\n};\n\nself.onDestroy = function() {\n}\n\nself.actionSources = function() { \n return { \n 'cardClick': {\n name: 'widget-action.card-click',\n multiple: false \n } \n };\n}", + "settingsSchema": "{}", + "dataKeySettingsSchema": "{}\n", + "settingsDirective": "tb-liquid-level-card-widget-settings", + "hasBasicMode": true, + "basicModeDirective": "tb-liquid-level-card-basic-config", + "defaultConfig": "{\"datasources\":[{\"type\":\"function\",\"name\":\"function\",\"dataKeys\":[{\"name\":\"f(x)\",\"type\":\"function\",\"label\":\"Random\",\"color\":\"#2196f3\",\"settings\":{},\"_hash\":0.15479322438769105,\"funcBody\":\"return Math.floor(Math.random() * 101);\",\"aggregationType\":null,\"units\":null,\"decimals\":null,\"usePostProcessing\":null,\"postFuncBody\":null}],\"alarmFilterConfig\":{\"statusList\":[\"ACTIVE\"]}}],\"timewindow\":{\"realtime\":{\"timewindowMs\":60000}},\"showTitle\":true,\"backgroundColor\":\"#fff\",\"color\":\"rgba(0, 0, 0, 0.87)\",\"padding\":\"0px\",\"settings\":{\"tankSelectionType\":\"static\",\"selectedShape\":\"Vertical Oval\",\"shapeAttributeName\":\"tankShape\",\"tankColor\":{\"type\":\"range\",\"color\":\"#242770\",\"rangeList\":[{\"from\":null,\"to\":20,\"color\":\"#E73535DE\"},{\"from\":20,\"to\":null,\"color\":\"#242770\"}],\"colorFunction\":\"var percent = value;\\nif (typeof percent !== undefined) {\\n if (percent < 20) {\\n return '#E73535DE';\\n }\\n}\\nreturn '#242770';\"},\"datasourceUnits\":\"%\",\"layout\":\"percentage\",\"volumeSource\":\"static\",\"volumeConstant\":500,\"volumeAttributeName\":\"volume\",\"volumeUnits\":\"L\",\"volumeFont\":{\"family\":\"Roboto\",\"size\":14,\"sizeUnit\":\"px\",\"style\":\"normal\",\"weight\":\"500\",\"lineHeight\":\"100%\"},\"volumeColor\":\"rgba(0, 0, 0, 0.18)\",\"units\":\"%\",\"widgetUnitsSource\":\"static\",\"widgetUnitsAttributeName\":\"units\",\"liquidColor\":{\"type\":\"range\",\"color\":\"#7A8BFF\",\"rangeList\":[{\"from\":null,\"to\":20,\"color\":\"#E27C7CDE\"},{\"from\":20,\"to\":null,\"color\":\"#7A8BFF\"}],\"colorFunction\":\"var percent = value;\\nif (typeof percent !== undefined) {\\n if (percent < 20) {\\n return '#E27C7CDE';\\n }\\n}\\nreturn '#7A8BFF';\"},\"valueFont\":{\"family\":\"Roboto\",\"size\":24,\"sizeUnit\":\"px\",\"style\":\"normal\",\"weight\":\"500\",\"lineHeight\":\"100%\"},\"valueColor\":{\"type\":\"range\",\"color\":\"#000000DE\",\"rangeList\":[{\"from\":null,\"to\":20,\"color\":\"#FF0000DE\"},{\"from\":20,\"to\":null,\"color\":\"rgba(0,0,0,0.87)\"}],\"colorFunction\":\"var percent = value;\\nif (typeof percent !== undefined) {\\n if (percent < 20) {\\n return '#FF0000DE';\\n }\\n}\\nreturn '#000000DE';\"},\"showBackgroundOverlay\":true,\"backgroundOverlayColor\":{\"type\":\"range\",\"color\":\"rgba(255, 255, 255, 0.76)\",\"rangeList\":[{\"from\":null,\"to\":20,\"color\":\"#FFEFEFDE\"},{\"from\":20,\"to\":null,\"color\":\"#FFFFFFC2\"}],\"colorFunction\":\"var percent = value;\\nif (typeof percent !== undefined) {\\n if (percent < 20) {\\n return '#FFEFEFDE';\\n }\\n}\\nreturn '#FFFFFFC2';\"},\"showTooltip\":true,\"showTooltipLevel\":true,\"tooltipUnits\":\"%\",\"tooltipLevelDecimals\":0,\"tooltipLevelFont\":{\"family\":\"Roboto\",\"size\":13,\"sizeUnit\":\"px\",\"style\":\"normal\",\"weight\":\"500\",\"lineHeight\":\"100%\"},\"tooltipLevelColor\":{\"type\":\"constant\",\"color\":\"rgba(0, 0, 0, 0.76)\",\"rangeList\":[],\"colorFunction\":\"var percent = value;\\nif (typeof percent !== undefined) {\\n if (percent < 20) {\\n return '#E27C7CDE';\\n }\\n}\\nreturn '#7A8BFF';\"},\"showTooltipDate\":true,\"tooltipDateFormat\":{\"format\":null,\"lastUpdateAgo\":true,\"custom\":false},\"tooltipDateFont\":{\"family\":\"Roboto\",\"size\":13,\"sizeUnit\":\"px\",\"style\":\"normal\",\"weight\":\"500\",\"lineHeight\":\"100%\"},\"tooltipDateColor\":\"rgba(0, 0, 0, 0.76)\",\"tooltipBackgroundColor\":\"rgba(255, 255, 255, 0.76)\",\"tooltipBackgroundBlur\":3,\"background\":{\"type\":\"color\",\"color\":\"#fff\",\"overlay\":{\"enabled\":false,\"color\":\"rgba(255,255,255,0.72)\",\"blur\":3}}},\"title\":\"Liquid level\",\"useDashboardTimewindow\":true,\"displayTimewindow\":true,\"configMode\":\"basic\",\"titleFont\":{\"family\":\"Roboto\",\"size\":16,\"sizeUnit\":\"px\",\"style\":\"normal\",\"weight\":\"500\",\"lineHeight\":\"1.5\"},\"titleColor\":\"rgba(0, 0, 0, 0.87)\",\"showTitleIcon\":false,\"titleIcon\":\"water_drop\",\"iconColor\":\"#5469FF\",\"decimals\":0,\"enableDataExport\":false,\"enableFullscreen\":false,\"borderRadius\":\"0px\",\"actions\":{},\"iconSize\":\"24px\",\"titleTooltip\":\"\",\"dropShadow\":true,\"margin\":\"0px\",\"widgetStyle\":{},\"widgetCss\":\"\",\"titleStyle\":{\"fontSize\":\"16px\",\"fontWeight\":400},\"pageSize\":1024,\"noDataDisplayMessage\":\"\"}" + }, + "externalId": null, + "tags": null +} \ No newline at end of file diff --git a/application/src/main/data/json/system/widget_types/vibration_card.json b/application/src/main/data/json/system/widget_types/vibration_card.json index 5afa70f0ee..960cb4330c 100644 --- a/application/src/main/data/json/system/widget_types/vibration_card.json +++ b/application/src/main/data/json/system/widget_types/vibration_card.json @@ -3,7 +3,7 @@ "name": "Vibration card", "deprecated": false, "image": "data:image/png;base64,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", - "description": "Displays a latest vibration telemetry data in a box layout.", + "description": "Displays a latest vibration telemetry in a box layout.", "descriptor": { "type": "latest", "sizeX": 3, diff --git a/application/src/main/data/json/system/widget_types/vibration_card_with_background.json b/application/src/main/data/json/system/widget_types/vibration_card_with_background.json index 92b82633f3..0900ad0308 100644 --- a/application/src/main/data/json/system/widget_types/vibration_card_with_background.json +++ b/application/src/main/data/json/system/widget_types/vibration_card_with_background.json @@ -3,7 +3,7 @@ "name": "Vibration card with background", "deprecated": false, "image": "data:image/png;base64,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", - "description": "Displays a latest vibration telemetry data in a box layout with background.", + "description": "Displays a latest vibration telemetry in a box layout with background.", "descriptor": { "type": "latest", "sizeX": 3, diff --git a/application/src/main/data/json/system/widget_types/visibility_card.json b/application/src/main/data/json/system/widget_types/visibility_card.json index e71ff3ab3e..dd55a31ac8 100644 --- a/application/src/main/data/json/system/widget_types/visibility_card.json +++ b/application/src/main/data/json/system/widget_types/visibility_card.json @@ -3,7 +3,7 @@ "name": "Visibility card", "deprecated": false, "image": "data:image/png;base64,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", - "description": "Displays a latest visibility telemetry data in a box layout.", + "description": "Displays a latest visibility telemetry in a box layout.", "descriptor": { "type": "latest", "sizeX": 3, diff --git a/application/src/main/data/json/system/widget_types/visibility_card_with_background.json b/application/src/main/data/json/system/widget_types/visibility_card_with_background.json index 86d6ce56f4..1038d1352d 100644 --- a/application/src/main/data/json/system/widget_types/visibility_card_with_background.json +++ b/application/src/main/data/json/system/widget_types/visibility_card_with_background.json @@ -3,7 +3,7 @@ "name": "Visibility card with background", "deprecated": false, "image": "data:image/png;base64,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", - "description": "Displays a latest visibility telemetry data in a box layout with background.", + "description": "Displays a latest visibility telemetry in a box layout with background.", "descriptor": { "type": "latest", "sizeX": 3, diff --git a/application/src/main/data/json/system/widget_types/volatile_organic_compounds_card.json b/application/src/main/data/json/system/widget_types/volatile_organic_compounds_card.json index 0ba9f98e86..b16218e9c1 100644 --- a/application/src/main/data/json/system/widget_types/volatile_organic_compounds_card.json +++ b/application/src/main/data/json/system/widget_types/volatile_organic_compounds_card.json @@ -3,7 +3,7 @@ "name": "Volatile organic compounds card", "deprecated": false, "image": "data:image/png;base64,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", - "description": "Displays a latest volatile organic compounds (VOCs) telemetry data in a box layout.", + "description": "Displays a latest volatile organic compounds (VOCs) telemetry in a box layout.", "descriptor": { "type": "latest", "sizeX": 3, diff --git a/application/src/main/data/json/system/widget_types/volatile_organic_compounds_card_with_background.json b/application/src/main/data/json/system/widget_types/volatile_organic_compounds_card_with_background.json index 8e205f70a9..8984136576 100644 --- a/application/src/main/data/json/system/widget_types/volatile_organic_compounds_card_with_background.json +++ b/application/src/main/data/json/system/widget_types/volatile_organic_compounds_card_with_background.json @@ -3,7 +3,7 @@ "name": "Volatile organic compounds card with background", "deprecated": false, "image": "data:image/png;base64,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", - "description": "Displays a latest volatile organic compounds (VOCs) telemetry data in a box layout with background.", + "description": "Displays a latest volatile organic compounds (VOCs) telemetry in a box layout with background.", "descriptor": { "type": "latest", "sizeX": 3, diff --git a/application/src/main/data/json/system/widget_types/wind_speed_card.json b/application/src/main/data/json/system/widget_types/wind_speed_card.json index 45b63875bf..077f03f84e 100644 --- a/application/src/main/data/json/system/widget_types/wind_speed_card.json +++ b/application/src/main/data/json/system/widget_types/wind_speed_card.json @@ -3,7 +3,7 @@ "name": "Wind speed card", "deprecated": false, "image": "data:image/png;base64,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", - "description": "Displays a latest wind speed telemetry data in a box layout.", + "description": "Displays a latest wind speed telemetry in a box layout.", "descriptor": { "type": "latest", "sizeX": 3, diff --git a/application/src/main/data/json/system/widget_types/wind_speed_card_with_background.json b/application/src/main/data/json/system/widget_types/wind_speed_card_with_background.json index 78e3fe63d6..b198f033f0 100644 --- a/application/src/main/data/json/system/widget_types/wind_speed_card_with_background.json +++ b/application/src/main/data/json/system/widget_types/wind_speed_card_with_background.json @@ -3,7 +3,7 @@ "name": "Wind speed card with background", "deprecated": false, "image": "data:image/png;base64,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", - "description": "Displays a latest wind speed telemetry data in a box layout with background.", + "description": "Displays a latest wind speed telemetry in a box layout with background.", "descriptor": { "type": "latest", "sizeX": 3, diff --git a/application/src/main/data/upgrade/3.6.0/schema_update.sql b/application/src/main/data/upgrade/3.6.0/schema_update.sql index 0361a5db65..b0a64268ef 100644 --- a/application/src/main/data/upgrade/3.6.0/schema_update.sql +++ b/application/src/main/data/upgrade/3.6.0/schema_update.sql @@ -17,6 +17,9 @@ ALTER TABLE widget_type ADD COLUMN IF NOT EXISTS tags text[]; +ALTER TABLE widgets_bundle + ADD COLUMN IF NOT EXISTS widgets_bundle_order int; + ALTER TABLE api_usage_state ADD COLUMN IF NOT EXISTS tbel_exec varchar(32); UPDATE api_usage_state SET tbel_exec = js_exec WHERE tbel_exec IS NULL; diff --git a/application/src/main/java/org/thingsboard/server/controller/WidgetsBundleController.java b/application/src/main/java/org/thingsboard/server/controller/WidgetsBundleController.java index b07467b94b..f62d1b7b05 100644 --- a/application/src/main/java/org/thingsboard/server/controller/WidgetsBundleController.java +++ b/application/src/main/java/org/thingsboard/server/controller/WidgetsBundleController.java @@ -69,6 +69,7 @@ public class WidgetsBundleController extends BaseController { private static final String WIDGET_BUNDLE_DESCRIPTION = "Widget Bundle represents a group(bundle) of widgets. Widgets are grouped into bundle by type or use case. "; private static final String FULL_SEARCH_PARAM_DESCRIPTION = "Optional boolean parameter indicating extended search of widget bundles by description and by name / description of related widget types"; + private static final String TENANT_BUNDLES_ONLY_DESCRIPTION = "Optional boolean parameter to include only tenant-level bundles without system"; @ApiOperation(value = "Get Widget Bundle (getWidgetsBundleById)", notes = "Get the Widget Bundle based on the provided Widget Bundle Id. " + WIDGET_BUNDLE_DESCRIPTION + AVAILABLE_FOR_ANY_AUTHORIZED_USER) @@ -185,6 +186,8 @@ public class WidgetsBundleController extends BaseController { @RequestParam(required = false) String sortProperty, @ApiParam(value = SORT_ORDER_DESCRIPTION, allowableValues = SORT_ORDER_ALLOWABLE_VALUES) @RequestParam(required = false) String sortOrder, + @ApiParam(value = TENANT_BUNDLES_ONLY_DESCRIPTION) + @RequestParam(required = false) Boolean tenantOnly, @ApiParam(value = FULL_SEARCH_PARAM_DESCRIPTION) @RequestParam(required = false) Boolean fullSearch) throws ThingsboardException { PageLink pageLink = createPageLink(pageSize, page, textSearch, sortProperty, sortOrder); @@ -192,7 +195,11 @@ public class WidgetsBundleController extends BaseController { return checkNotNull(widgetsBundleService.findSystemWidgetsBundlesByPageLink(getTenantId(), fullSearch != null && fullSearch, pageLink)); } else { TenantId tenantId = getCurrentUser().getTenantId(); - return checkNotNull(widgetsBundleService.findAllTenantWidgetsBundlesByTenantIdAndPageLink(tenantId, fullSearch != null && fullSearch, pageLink)); + if (tenantOnly != null && tenantOnly) { + return checkNotNull(widgetsBundleService.findTenantWidgetsBundlesByTenantIdAndPageLink(tenantId, fullSearch != null && fullSearch, pageLink)); + } else { + return checkNotNull(widgetsBundleService.findAllTenantWidgetsBundlesByTenantIdAndPageLink(tenantId, fullSearch != null && fullSearch, pageLink)); + } } } diff --git a/application/src/main/java/org/thingsboard/server/service/edge/rpc/constructor/WidgetsBundleMsgConstructor.java b/application/src/main/java/org/thingsboard/server/service/edge/rpc/constructor/WidgetsBundleMsgConstructor.java index bed83c8832..5b615ca9f8 100644 --- a/application/src/main/java/org/thingsboard/server/service/edge/rpc/constructor/WidgetsBundleMsgConstructor.java +++ b/application/src/main/java/org/thingsboard/server/service/edge/rpc/constructor/WidgetsBundleMsgConstructor.java @@ -45,6 +45,9 @@ public class WidgetsBundleMsgConstructor { if (widgetsBundle.getDescription() != null) { builder.setDescription(widgetsBundle.getDescription()); } + if (widgetsBundle.getOrder() != null) { + builder.setOrder(widgetsBundle.getOrder()); + } if (widgetsBundle.getTenantId().equals(TenantId.SYS_TENANT_ID)) { builder.setIsSystem(true); } diff --git a/application/src/main/java/org/thingsboard/server/service/install/DefaultSystemDataLoaderService.java b/application/src/main/java/org/thingsboard/server/service/install/DefaultSystemDataLoaderService.java index 87e1b097e4..9ad2ab6b3c 100644 --- a/application/src/main/java/org/thingsboard/server/service/install/DefaultSystemDataLoaderService.java +++ b/application/src/main/java/org/thingsboard/server/service/install/DefaultSystemDataLoaderService.java @@ -535,6 +535,8 @@ public class DefaultSystemDataLoaderService implements SystemDataLoaderService { this.deleteSystemWidgetBundle("status_indicators"); this.deleteSystemWidgetBundle("outdoor_environment"); this.deleteSystemWidgetBundle("indoor_environment"); + this.deleteSystemWidgetBundle("air_quality"); + this.deleteSystemWidgetBundle("liquid_level_tanks"); installScripts.loadSystemWidgets(); } diff --git a/application/src/main/java/org/thingsboard/server/service/notification/DefaultNotificationCenter.java b/application/src/main/java/org/thingsboard/server/service/notification/DefaultNotificationCenter.java index f6c77691da..b4ba871edf 100644 --- a/application/src/main/java/org/thingsboard/server/service/notification/DefaultNotificationCenter.java +++ b/application/src/main/java/org/thingsboard/server/service/notification/DefaultNotificationCenter.java @@ -64,7 +64,7 @@ import org.thingsboard.server.dao.notification.NotificationTemplateService; import org.thingsboard.server.dao.util.limits.RateLimitService; import org.thingsboard.server.gen.transport.TransportProtos; import org.thingsboard.server.queue.common.TbProtoQueueMsg; -import org.thingsboard.server.queue.discovery.NotificationsTopicService; +import org.thingsboard.server.queue.discovery.TopicService; import org.thingsboard.server.queue.provider.TbQueueProducerProvider; import org.thingsboard.server.service.executors.NotificationExecutorService; import org.thingsboard.server.service.notification.channels.NotificationChannel; @@ -94,7 +94,7 @@ public class DefaultNotificationCenter extends AbstractSubscriptionService imple private final NotificationTemplateService notificationTemplateService; private final NotificationSettingsService notificationSettingsService; private final NotificationExecutorService notificationExecutor; - private final NotificationsTopicService notificationsTopicService; + private final TopicService topicService; private final TbQueueProducerProvider producerProvider; private final RateLimitService rateLimitService; @@ -431,7 +431,7 @@ public class DefaultNotificationCenter extends AbstractSubscriptionService imple TransportProtos.ToCoreNotificationMsg notificationRequestUpdateProto = TbSubscriptionUtils.notificationRequestUpdateToProto(tenantId, update); Set coreServices = new HashSet<>(partitionService.getAllServiceIds(ServiceType.TB_CORE)); for (String serviceId : coreServices) { - TopicPartitionInfo tpi = notificationsTopicService.getNotificationsTopic(ServiceType.TB_CORE, serviceId); + TopicPartitionInfo tpi = topicService.getNotificationsTopic(ServiceType.TB_CORE, serviceId); producerProvider.getTbCoreNotificationsMsgProducer().send(tpi, new TbProtoQueueMsg<>(UUID.randomUUID(), notificationRequestUpdateProto), null); } }); diff --git a/application/src/main/java/org/thingsboard/server/service/queue/DefaultTbClusterService.java b/application/src/main/java/org/thingsboard/server/service/queue/DefaultTbClusterService.java index a3768ff6b4..bb3708f7f5 100644 --- a/application/src/main/java/org/thingsboard/server/service/queue/DefaultTbClusterService.java +++ b/application/src/main/java/org/thingsboard/server/service/queue/DefaultTbClusterService.java @@ -68,7 +68,7 @@ import org.thingsboard.server.queue.TbQueueCallback; import org.thingsboard.server.queue.TbQueueProducer; import org.thingsboard.server.queue.common.MultipleTbQueueCallbackWrapper; import org.thingsboard.server.queue.common.TbProtoQueueMsg; -import org.thingsboard.server.queue.discovery.NotificationsTopicService; +import org.thingsboard.server.queue.discovery.TopicService; import org.thingsboard.server.queue.discovery.PartitionService; import org.thingsboard.server.queue.provider.TbQueueProducerProvider; import org.thingsboard.server.queue.util.DataDecodingEncodingService; @@ -77,7 +77,6 @@ import org.thingsboard.server.service.ota.OtaPackageStateService; import org.thingsboard.server.service.profile.TbAssetProfileCache; import org.thingsboard.server.service.profile.TbDeviceProfileCache; -import java.util.List; import java.util.Set; import java.util.UUID; import java.util.concurrent.atomic.AtomicInteger; @@ -110,7 +109,7 @@ public class DefaultTbClusterService implements TbClusterService { @Lazy private OtaPackageStateService otaPackageStateService; - private final NotificationsTopicService notificationsTopicService; + private final TopicService topicService; private final DataDecodingEncodingService encodingService; private final TbDeviceProfileCache deviceProfileCache; private final TbAssetProfileCache assetProfileCache; @@ -145,7 +144,7 @@ public class DefaultTbClusterService implements TbClusterService { TbQueueProducer> toCoreNfProducer = producerProvider.getTbCoreNotificationsMsgProducer(); Set tbCoreServices = partitionService.getAllServiceIds(ServiceType.TB_CORE); for (String serviceId : tbCoreServices) { - TopicPartitionInfo tpi = notificationsTopicService.getNotificationsTopic(ServiceType.TB_CORE, serviceId); + TopicPartitionInfo tpi = topicService.getNotificationsTopic(ServiceType.TB_CORE, serviceId); toCoreNfProducer.send(tpi, new TbProtoQueueMsg<>(msgId, toCoreMsg), null); toCoreNfs.incrementAndGet(); } @@ -162,7 +161,7 @@ public class DefaultTbClusterService implements TbClusterService { @Override public void pushNotificationToCore(String serviceId, FromDeviceRpcResponse response, TbQueueCallback callback) { - TopicPartitionInfo tpi = notificationsTopicService.getNotificationsTopic(ServiceType.TB_CORE, serviceId); + TopicPartitionInfo tpi = topicService.getNotificationsTopic(ServiceType.TB_CORE, serviceId); log.trace("PUSHING msg: {} to:{}", response, tpi); FromDeviceRPCResponseProto.Builder builder = FromDeviceRPCResponseProto.newBuilder() .setRequestIdMSB(response.getId().getMostSignificantBits()) @@ -238,7 +237,7 @@ public class DefaultTbClusterService implements TbClusterService { @Override public void pushNotificationToRuleEngine(String serviceId, FromDeviceRpcResponse response, TbQueueCallback callback) { - TopicPartitionInfo tpi = notificationsTopicService.getNotificationsTopic(ServiceType.TB_RULE_ENGINE, serviceId); + TopicPartitionInfo tpi = topicService.getNotificationsTopic(ServiceType.TB_RULE_ENGINE, serviceId); log.trace("PUSHING msg: {} to:{}", response, tpi); FromDeviceRPCResponseProto.Builder builder = FromDeviceRPCResponseProto.newBuilder() .setRequestIdMSB(response.getId().getMostSignificantBits()) @@ -259,7 +258,7 @@ public class DefaultTbClusterService implements TbClusterService { } return; } - TopicPartitionInfo tpi = notificationsTopicService.getNotificationsTopic(ServiceType.TB_TRANSPORT, serviceId); + TopicPartitionInfo tpi = topicService.getNotificationsTopic(ServiceType.TB_TRANSPORT, serviceId); log.trace("PUSHING msg: {} to:{}", response, tpi); producerProvider.getTransportNotificationsMsgProducer().send(tpi, new TbProtoQueueMsg<>(UUID.randomUUID(), response), callback); toTransportNfs.incrementAndGet(); @@ -367,7 +366,7 @@ public class DefaultTbClusterService implements TbClusterService { Set tbTransportServices = partitionService.getAllServiceIds(ServiceType.TB_TRANSPORT); TbQueueCallback proxyCallback = callback != null ? new MultipleTbQueueCallbackWrapper(tbTransportServices.size(), callback) : null; for (String transportServiceId : tbTransportServices) { - TopicPartitionInfo tpi = notificationsTopicService.getNotificationsTopic(ServiceType.TB_TRANSPORT, transportServiceId); + TopicPartitionInfo tpi = topicService.getNotificationsTopic(ServiceType.TB_TRANSPORT, transportServiceId); toTransportNfProducer.send(tpi, new TbProtoQueueMsg<>(UUID.randomUUID(), transportMsg), proxyCallback); toTransportNfs.incrementAndGet(); } @@ -402,7 +401,7 @@ public class DefaultTbClusterService implements TbClusterService { TbQueueProducer> toCoreNfProducer = producerProvider.getTbCoreNotificationsMsgProducer(); Set tbCoreServices = partitionService.getAllServiceIds(ServiceType.TB_CORE); for (String serviceId : tbCoreServices) { - TopicPartitionInfo tpi = notificationsTopicService.getNotificationsTopic(ServiceType.TB_CORE, serviceId); + TopicPartitionInfo tpi = topicService.getNotificationsTopic(ServiceType.TB_CORE, serviceId); toCoreNfProducer.send(tpi, new TbProtoQueueMsg<>(edgeId.getId(), toCoreMsg), null); toCoreNfs.incrementAndGet(); } @@ -426,7 +425,7 @@ public class DefaultTbClusterService implements TbClusterService { TbQueueProducer> toCoreNfProducer = producerProvider.getTbCoreNotificationsMsgProducer(); Set tbCoreServices = partitionService.getAllServiceIds(ServiceType.TB_CORE); for (String serviceId : tbCoreServices) { - TopicPartitionInfo tpi = notificationsTopicService.getNotificationsTopic(ServiceType.TB_CORE, serviceId); + TopicPartitionInfo tpi = topicService.getNotificationsTopic(ServiceType.TB_CORE, serviceId); ToCoreNotificationMsg toCoreMsg = ToCoreNotificationMsg.newBuilder().setComponentLifecycle(componentLifecycleMsgProto).build(); toCoreNfProducer.send(tpi, new TbProtoQueueMsg<>(msg.getEntityId().getId(), toCoreMsg), null); toCoreNfs.incrementAndGet(); @@ -435,7 +434,7 @@ public class DefaultTbClusterService implements TbClusterService { tbRuleEngineServices.removeAll(tbCoreServices); } for (String serviceId : tbRuleEngineServices) { - TopicPartitionInfo tpi = notificationsTopicService.getNotificationsTopic(ServiceType.TB_RULE_ENGINE, serviceId); + TopicPartitionInfo tpi = topicService.getNotificationsTopic(ServiceType.TB_RULE_ENGINE, serviceId); ToRuleEngineNotificationMsg toRuleEngineMsg = ToRuleEngineNotificationMsg.newBuilder().setComponentLifecycle(componentLifecycleMsgProto).build(); toRuleEngineProducer.send(tpi, new TbProtoQueueMsg<>(msg.getEntityId().getId(), toRuleEngineMsg), null); toRuleEngineNfs.incrementAndGet(); @@ -590,17 +589,17 @@ public class DefaultTbClusterService implements TbClusterService { tbCoreServices.removeAll(tbRuleEngineServices); for (String ruleEngineServiceId : tbRuleEngineServices) { - TopicPartitionInfo tpi = notificationsTopicService.getNotificationsTopic(ServiceType.TB_RULE_ENGINE, ruleEngineServiceId); + TopicPartitionInfo tpi = topicService.getNotificationsTopic(ServiceType.TB_RULE_ENGINE, ruleEngineServiceId); producerProvider.getRuleEngineNotificationsMsgProducer().send(tpi, new TbProtoQueueMsg<>(UUID.randomUUID(), ruleEngineMsg), null); toRuleEngineNfs.incrementAndGet(); } for (String coreServiceId : tbCoreServices) { - TopicPartitionInfo tpi = notificationsTopicService.getNotificationsTopic(ServiceType.TB_CORE, coreServiceId); + TopicPartitionInfo tpi = topicService.getNotificationsTopic(ServiceType.TB_CORE, coreServiceId); producerProvider.getTbCoreNotificationsMsgProducer().send(tpi, new TbProtoQueueMsg<>(UUID.randomUUID(), coreMsg), null); toCoreNfs.incrementAndGet(); } for (String transportServiceId : tbTransportServices) { - TopicPartitionInfo tpi = notificationsTopicService.getNotificationsTopic(ServiceType.TB_TRANSPORT, transportServiceId); + TopicPartitionInfo tpi = topicService.getNotificationsTopic(ServiceType.TB_TRANSPORT, transportServiceId); producerProvider.getTransportNotificationsMsgProducer().send(tpi, new TbProtoQueueMsg<>(UUID.randomUUID(), transportMsg), null); toTransportNfs.incrementAndGet(); } diff --git a/application/src/main/java/org/thingsboard/server/service/subscription/DefaultSubscriptionManagerService.java b/application/src/main/java/org/thingsboard/server/service/subscription/DefaultSubscriptionManagerService.java index 7c66971d27..99230e61cc 100644 --- a/application/src/main/java/org/thingsboard/server/service/subscription/DefaultSubscriptionManagerService.java +++ b/application/src/main/java/org/thingsboard/server/service/subscription/DefaultSubscriptionManagerService.java @@ -40,7 +40,7 @@ import org.thingsboard.server.common.msg.queue.TopicPartitionInfo; import org.thingsboard.server.gen.transport.TransportProtos.ToCoreNotificationMsg; import org.thingsboard.server.queue.TbQueueProducer; import org.thingsboard.server.queue.common.TbProtoQueueMsg; -import org.thingsboard.server.queue.discovery.NotificationsTopicService; +import org.thingsboard.server.queue.discovery.TopicService; import org.thingsboard.server.queue.discovery.PartitionService; import org.thingsboard.server.queue.discovery.TbApplicationEventListener; import org.thingsboard.server.queue.discovery.TbServiceInfoProvider; @@ -71,7 +71,7 @@ import java.util.stream.Collectors; @RequiredArgsConstructor public class DefaultSubscriptionManagerService extends TbApplicationEventListener implements SubscriptionManagerService { - private final NotificationsTopicService notificationsTopicService; + private final TopicService topicService; private final PartitionService partitionService; private final TbServiceInfoProvider serviceInfoProvider; private final TbQueueProducerProvider producerProvider; @@ -325,7 +325,7 @@ public class DefaultSubscriptionManagerService extends TbApplicationEventListene private void sendCoreNotification(String targetServiceId, EntityId entityId, ToCoreNotificationMsg msg) { log.trace("[{}] Forwarding to remote service [{}]: {}", entityId, targetServiceId, msg); - TopicPartitionInfo tpi = notificationsTopicService.getNotificationsTopic(ServiceType.TB_CORE, targetServiceId); + TopicPartitionInfo tpi = topicService.getNotificationsTopic(ServiceType.TB_CORE, targetServiceId); TbProtoQueueMsg queueMsg = new TbProtoQueueMsg<>(entityId.getId(), msg); toCoreNotificationsProducer.send(tpi, queueMsg, null); } diff --git a/application/src/main/java/org/thingsboard/server/service/transport/DefaultTbCoreToTransportService.java b/application/src/main/java/org/thingsboard/server/service/transport/DefaultTbCoreToTransportService.java index b87758ace5..380ba34f91 100644 --- a/application/src/main/java/org/thingsboard/server/service/transport/DefaultTbCoreToTransportService.java +++ b/application/src/main/java/org/thingsboard/server/service/transport/DefaultTbCoreToTransportService.java @@ -24,7 +24,7 @@ import org.thingsboard.server.queue.TbQueueCallback; import org.thingsboard.server.queue.TbQueueMsgMetadata; import org.thingsboard.server.queue.TbQueueProducer; import org.thingsboard.server.queue.common.TbProtoQueueMsg; -import org.thingsboard.server.queue.discovery.NotificationsTopicService; +import org.thingsboard.server.queue.discovery.TopicService; import org.thingsboard.server.queue.provider.TbQueueProducerProvider; import org.thingsboard.server.queue.util.TbCoreComponent; @@ -38,11 +38,11 @@ import static org.thingsboard.server.dao.model.ModelConstants.NULL_UUID; @TbCoreComponent public class DefaultTbCoreToTransportService implements TbCoreToTransportService { - private final NotificationsTopicService notificationsTopicService; + private final TopicService topicService; private final TbQueueProducer> tbTransportProducer; - public DefaultTbCoreToTransportService(NotificationsTopicService notificationsTopicService, TbQueueProducerProvider tbQueueProducerProvider) { - this.notificationsTopicService = notificationsTopicService; + public DefaultTbCoreToTransportService(TopicService topicService, TbQueueProducerProvider tbQueueProducerProvider) { + this.topicService = topicService; this.tbTransportProducer = tbQueueProducerProvider.getTransportNotificationsMsgProducer(); } @@ -60,7 +60,7 @@ public class DefaultTbCoreToTransportService implements TbCoreToTransportService } return; } - TopicPartitionInfo tpi = notificationsTopicService.getNotificationsTopic(ServiceType.TB_TRANSPORT, nodeId); + TopicPartitionInfo tpi = topicService.getNotificationsTopic(ServiceType.TB_TRANSPORT, nodeId); UUID sessionId = new UUID(msg.getSessionIdMSB(), msg.getSessionIdLSB()); log.trace("[{}][{}] Pushing session data to topic: {}", tpi.getFullTopicName(), sessionId, msg); TbProtoQueueMsg queueMsg = new TbProtoQueueMsg<>(NULL_UUID, msg); diff --git a/application/src/main/resources/thingsboard.yml b/application/src/main/resources/thingsboard.yml index 4eda9fd2bd..cf81e28f39 100644 --- a/application/src/main/resources/thingsboard.yml +++ b/application/src/main/resources/thingsboard.yml @@ -1271,6 +1271,7 @@ swagger: # Queue configuration parameters queue: type: "${TB_QUEUE_TYPE:in-memory}" # in-memory or kafka (Apache Kafka) or aws-sqs (AWS SQS) or pubsub (PubSub) or service-bus (Azure Service Bus) or rabbitmq (RabbitMQ) + prefix: "${TB_QUEUE_PREFIX:}" # Global queue prefix. If specified, prefix is added before default topic name: 'prefix.default_topic_name'. Prefix is applied to all topics (and consumer groups for kafka) except of js executor topics (please use REMOTE_JS_EVAL_REQUEST_TOPIC and REMOTE_JS_EVAL_RESPONSE_TOPIC to specify custom topic names) in_memory: stats: # For debug level diff --git a/application/src/test/java/org/thingsboard/server/controller/WidgetsBundleControllerTest.java b/application/src/test/java/org/thingsboard/server/controller/WidgetsBundleControllerTest.java index ee341fe284..80d70c1b8b 100644 --- a/application/src/test/java/org/thingsboard/server/controller/WidgetsBundleControllerTest.java +++ b/application/src/test/java/org/thingsboard/server/controller/WidgetsBundleControllerTest.java @@ -206,22 +206,32 @@ public class WidgetsBundleControllerTest extends AbstractControllerTest { @Test public void testFindTenantWidgetsBundlesByPageLink() throws Exception { + loginSysAdmin(); - login(tenantAdmin.getEmail(), "testPassword1"); + //upload some system bundles + int sysCntEntity = 10; + for (int i = 0; i < sysCntEntity; i++) { + WidgetsBundle widgetsBundle = new WidgetsBundle(); + widgetsBundle.setTitle("Widgets bundle" + i); + doPost("/api/widgetsBundle", widgetsBundle, WidgetsBundle.class); + } List sysWidgetsBundles = doGetTyped("/api/widgetsBundles?", new TypeReference<>() { }); + login(tenantAdmin.getEmail(), "testPassword1"); + int cntEntity = 73; - List widgetsBundles = new ArrayList<>(); + List tenantWidgetsBundles = new ArrayList<>(); for (int i = 0; i < cntEntity; i++) { WidgetsBundle widgetsBundle = new WidgetsBundle(); widgetsBundle.setTitle("Widgets bundle" + i); - widgetsBundles.add(doPost("/api/widgetsBundle", widgetsBundle, WidgetsBundle.class)); + tenantWidgetsBundles.add(doPost("/api/widgetsBundle", widgetsBundle, WidgetsBundle.class)); } - widgetsBundles.addAll(sysWidgetsBundles); + List allWidgetsBundles = new ArrayList<>(tenantWidgetsBundles); + allWidgetsBundles.addAll(sysWidgetsBundles); List loadedWidgetsBundles = new ArrayList<>(); PageLink pageLink = new PageLink(14); @@ -236,10 +246,28 @@ public class WidgetsBundleControllerTest extends AbstractControllerTest { } } while (pageData.hasNext()); - Collections.sort(widgetsBundles, idComparator); + Collections.sort(allWidgetsBundles, idComparator); Collections.sort(loadedWidgetsBundles, idComparator); - Assert.assertEquals(widgetsBundles, loadedWidgetsBundles); + Assert.assertEquals(allWidgetsBundles, loadedWidgetsBundles); + + //retrieve tenant only bundles + List loadedWidgetsBundles2 = new ArrayList<>(); + PageLink pageLink2 = new PageLink(14); + do { + pageData = doGetTypedWithPageLink("/api/widgetsBundles?tenantOnly=true&", + new TypeReference<>() { + }, pageLink2); + loadedWidgetsBundles2.addAll(pageData.getData()); + if (pageData.hasNext()) { + pageLink2 = pageLink2.nextPageLink(); + } + } while (pageData.hasNext()); + + Collections.sort(tenantWidgetsBundles, idComparator); + Collections.sort(loadedWidgetsBundles2, idComparator); + + Assert.assertEquals(tenantWidgetsBundles, loadedWidgetsBundles2); } @Test diff --git a/application/src/test/java/org/thingsboard/server/queue/discovery/HashPartitionServiceTest.java b/application/src/test/java/org/thingsboard/server/queue/discovery/HashPartitionServiceTest.java index ef87794d96..44c21a54d2 100644 --- a/application/src/test/java/org/thingsboard/server/queue/discovery/HashPartitionServiceTest.java +++ b/application/src/test/java/org/thingsboard/server/queue/discovery/HashPartitionServiceTest.java @@ -62,6 +62,7 @@ import static org.mockito.ArgumentMatchers.argThat; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.never; +import static org.mockito.Mockito.spy; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; @@ -77,6 +78,7 @@ public class HashPartitionServiceTest { private TenantRoutingInfoService routingInfoService; private ApplicationEventPublisher applicationEventPublisher; private QueueRoutingInfoService queueRoutingInfoService; + private TopicService topicService; private String hashFunctionName = "murmur3_128"; @@ -86,6 +88,8 @@ public class HashPartitionServiceTest { applicationEventPublisher = mock(ApplicationEventPublisher.class); routingInfoService = mock(TenantRoutingInfoService.class); queueRoutingInfoService = mock(QueueRoutingInfoService.class); + topicService = mock(TopicService.class); + when(topicService.buildTopicName(Mockito.any())).thenAnswer(i -> i.getArguments()[0]); clusterRoutingService = createPartitionService(); ServiceInfo currentServer = ServiceInfo.newBuilder() .setServiceId("tb-core-0") @@ -393,7 +397,8 @@ public class HashPartitionServiceTest { HashPartitionService partitionService = new HashPartitionService(discoveryService, routingInfoService, applicationEventPublisher, - queueRoutingInfoService); + queueRoutingInfoService, + topicService); ReflectionTestUtils.setField(partitionService, "coreTopic", "tb.core"); ReflectionTestUtils.setField(partitionService, "corePartitions", 10); ReflectionTestUtils.setField(partitionService, "vcTopic", "tb.vc"); diff --git a/application/src/test/java/org/thingsboard/server/service/queue/DefaultTbClusterServiceTest.java b/application/src/test/java/org/thingsboard/server/service/queue/DefaultTbClusterServiceTest.java index 0bc1800896..233839bb5f 100644 --- a/application/src/test/java/org/thingsboard/server/service/queue/DefaultTbClusterServiceTest.java +++ b/application/src/test/java/org/thingsboard/server/service/queue/DefaultTbClusterServiceTest.java @@ -32,7 +32,7 @@ import org.thingsboard.server.common.msg.queue.ServiceType; import org.thingsboard.server.gen.transport.TransportProtos; import org.thingsboard.server.queue.TbQueueProducer; import org.thingsboard.server.queue.common.TbProtoQueueMsg; -import org.thingsboard.server.queue.discovery.NotificationsTopicService; +import org.thingsboard.server.queue.discovery.TopicService; import org.thingsboard.server.queue.discovery.PartitionService; import org.thingsboard.server.queue.provider.TbQueueProducerProvider; import org.thingsboard.server.queue.util.DataDecodingEncodingService; @@ -78,7 +78,7 @@ public class DefaultTbClusterServiceTest { protected TbQueueProducerProvider producerProvider; @SpyBean - protected NotificationsTopicService notificationsTopicService; + protected TopicService topicService; @SpyBean protected TbClusterService clusterService; @@ -94,12 +94,12 @@ public class DefaultTbClusterServiceTest { clusterService.onQueueChange(createTestQueue()); - verify(notificationsTopicService, times(1)).getNotificationsTopic(ServiceType.TB_RULE_ENGINE, MONOLITH); - verify(notificationsTopicService, never()).getNotificationsTopic(eq(ServiceType.TB_CORE), any()); - verify(notificationsTopicService, never()).getNotificationsTopic(eq(ServiceType.TB_TRANSPORT), any()); + verify(topicService, times(1)).getNotificationsTopic(ServiceType.TB_RULE_ENGINE, MONOLITH); + verify(topicService, never()).getNotificationsTopic(eq(ServiceType.TB_CORE), any()); + verify(topicService, never()).getNotificationsTopic(eq(ServiceType.TB_TRANSPORT), any()); verify(tbQueueProducer, times(1)) - .send(eq(notificationsTopicService.getNotificationsTopic(ServiceType.TB_RULE_ENGINE, MONOLITH)), any(TbProtoQueueMsg.class), isNull()); + .send(eq(topicService.getNotificationsTopic(ServiceType.TB_RULE_ENGINE, MONOLITH)), any(TbProtoQueueMsg.class), isNull()); verify(producerProvider, never()).getTbCoreNotificationsMsgProducer(); verify(producerProvider, never()).getTransportNotificationsMsgProducer(); @@ -119,15 +119,15 @@ public class DefaultTbClusterServiceTest { clusterService.onQueueChange(createTestQueue()); - verify(notificationsTopicService, times(1)).getNotificationsTopic(ServiceType.TB_RULE_ENGINE, monolith1); - verify(notificationsTopicService, times(1)).getNotificationsTopic(ServiceType.TB_RULE_ENGINE, monolith2); - verify(notificationsTopicService, never()).getNotificationsTopic(eq(ServiceType.TB_CORE), any()); - verify(notificationsTopicService, never()).getNotificationsTopic(eq(ServiceType.TB_TRANSPORT), any()); + verify(topicService, times(1)).getNotificationsTopic(ServiceType.TB_RULE_ENGINE, monolith1); + verify(topicService, times(1)).getNotificationsTopic(ServiceType.TB_RULE_ENGINE, monolith2); + verify(topicService, never()).getNotificationsTopic(eq(ServiceType.TB_CORE), any()); + verify(topicService, never()).getNotificationsTopic(eq(ServiceType.TB_TRANSPORT), any()); verify(tbQueueProducer, times(1)) - .send(eq(notificationsTopicService.getNotificationsTopic(ServiceType.TB_RULE_ENGINE, monolith1)), any(TbProtoQueueMsg.class), isNull()); + .send(eq(topicService.getNotificationsTopic(ServiceType.TB_RULE_ENGINE, monolith1)), any(TbProtoQueueMsg.class), isNull()); verify(tbQueueProducer, times(1)) - .send(eq(notificationsTopicService.getNotificationsTopic(ServiceType.TB_RULE_ENGINE, monolith2)), any(TbProtoQueueMsg.class), isNull()); + .send(eq(topicService.getNotificationsTopic(ServiceType.TB_RULE_ENGINE, monolith2)), any(TbProtoQueueMsg.class), isNull()); verify(producerProvider, never()).getTbCoreNotificationsMsgProducer(); verify(producerProvider, never()).getTransportNotificationsMsgProducer(); @@ -147,20 +147,20 @@ public class DefaultTbClusterServiceTest { clusterService.onQueueChange(createTestQueue()); - verify(notificationsTopicService, times(1)).getNotificationsTopic(ServiceType.TB_RULE_ENGINE, MONOLITH); - verify(notificationsTopicService, times(1)).getNotificationsTopic(ServiceType.TB_TRANSPORT, TRANSPORT); - verify(notificationsTopicService, never()).getNotificationsTopic(eq(ServiceType.TB_CORE), any()); + verify(topicService, times(1)).getNotificationsTopic(ServiceType.TB_RULE_ENGINE, MONOLITH); + verify(topicService, times(1)).getNotificationsTopic(ServiceType.TB_TRANSPORT, TRANSPORT); + verify(topicService, never()).getNotificationsTopic(eq(ServiceType.TB_CORE), any()); verify(tbREQueueProducer, times(1)) - .send(eq(notificationsTopicService.getNotificationsTopic(ServiceType.TB_RULE_ENGINE, MONOLITH)), any(TbProtoQueueMsg.class), isNull()); + .send(eq(topicService.getNotificationsTopic(ServiceType.TB_RULE_ENGINE, MONOLITH)), any(TbProtoQueueMsg.class), isNull()); verify(tbTransportQueueProducer, times(1)) - .send(eq(notificationsTopicService.getNotificationsTopic(ServiceType.TB_TRANSPORT, TRANSPORT)), any(TbProtoQueueMsg.class), isNull()); + .send(eq(topicService.getNotificationsTopic(ServiceType.TB_TRANSPORT, TRANSPORT)), any(TbProtoQueueMsg.class), isNull()); verify(tbTransportQueueProducer, never()) - .send(eq(notificationsTopicService.getNotificationsTopic(ServiceType.TB_TRANSPORT, MONOLITH)), any(TbProtoQueueMsg.class), isNull()); + .send(eq(topicService.getNotificationsTopic(ServiceType.TB_TRANSPORT, MONOLITH)), any(TbProtoQueueMsg.class), isNull()); verify(tbTransportQueueProducer, never()) - .send(eq(notificationsTopicService.getNotificationsTopic(ServiceType.TB_CORE, MONOLITH)), any(TbProtoQueueMsg.class), isNull()); + .send(eq(topicService.getNotificationsTopic(ServiceType.TB_CORE, MONOLITH)), any(TbProtoQueueMsg.class), isNull()); verify(producerProvider, never()).getTbCoreNotificationsMsgProducer(); } @@ -193,47 +193,47 @@ public class DefaultTbClusterServiceTest { clusterService.onQueueChange(createTestQueue()); - verify(notificationsTopicService, times(1)).getNotificationsTopic(ServiceType.TB_RULE_ENGINE, monolith1); - verify(notificationsTopicService, times(1)).getNotificationsTopic(ServiceType.TB_RULE_ENGINE, monolith2); - verify(notificationsTopicService, times(1)).getNotificationsTopic(ServiceType.TB_RULE_ENGINE, ruleEngine1); - verify(notificationsTopicService, times(1)).getNotificationsTopic(ServiceType.TB_RULE_ENGINE, ruleEngine2); + verify(topicService, times(1)).getNotificationsTopic(ServiceType.TB_RULE_ENGINE, monolith1); + verify(topicService, times(1)).getNotificationsTopic(ServiceType.TB_RULE_ENGINE, monolith2); + verify(topicService, times(1)).getNotificationsTopic(ServiceType.TB_RULE_ENGINE, ruleEngine1); + verify(topicService, times(1)).getNotificationsTopic(ServiceType.TB_RULE_ENGINE, ruleEngine2); - verify(notificationsTopicService, times(1)).getNotificationsTopic(ServiceType.TB_CORE, core1); - verify(notificationsTopicService, times(1)).getNotificationsTopic(ServiceType.TB_CORE, core2); - verify(notificationsTopicService, never()).getNotificationsTopic(ServiceType.TB_CORE, monolith1); - verify(notificationsTopicService, never()).getNotificationsTopic(ServiceType.TB_CORE, monolith2); + verify(topicService, times(1)).getNotificationsTopic(ServiceType.TB_CORE, core1); + verify(topicService, times(1)).getNotificationsTopic(ServiceType.TB_CORE, core2); + verify(topicService, never()).getNotificationsTopic(ServiceType.TB_CORE, monolith1); + verify(topicService, never()).getNotificationsTopic(ServiceType.TB_CORE, monolith2); - verify(notificationsTopicService, times(1)).getNotificationsTopic(ServiceType.TB_TRANSPORT, transport1); - verify(notificationsTopicService, times(1)).getNotificationsTopic(ServiceType.TB_TRANSPORT, transport2); - verify(notificationsTopicService, never()).getNotificationsTopic(ServiceType.TB_TRANSPORT, monolith1); - verify(notificationsTopicService, never()).getNotificationsTopic(ServiceType.TB_TRANSPORT, monolith2); + verify(topicService, times(1)).getNotificationsTopic(ServiceType.TB_TRANSPORT, transport1); + verify(topicService, times(1)).getNotificationsTopic(ServiceType.TB_TRANSPORT, transport2); + verify(topicService, never()).getNotificationsTopic(ServiceType.TB_TRANSPORT, monolith1); + verify(topicService, never()).getNotificationsTopic(ServiceType.TB_TRANSPORT, monolith2); verify(tbREQueueProducer, times(1)) - .send(eq(notificationsTopicService.getNotificationsTopic(ServiceType.TB_RULE_ENGINE, monolith1)), any(TbProtoQueueMsg.class), isNull()); + .send(eq(topicService.getNotificationsTopic(ServiceType.TB_RULE_ENGINE, monolith1)), any(TbProtoQueueMsg.class), isNull()); verify(tbREQueueProducer, times(1)) - .send(eq(notificationsTopicService.getNotificationsTopic(ServiceType.TB_RULE_ENGINE, monolith2)), any(TbProtoQueueMsg.class), isNull()); + .send(eq(topicService.getNotificationsTopic(ServiceType.TB_RULE_ENGINE, monolith2)), any(TbProtoQueueMsg.class), isNull()); verify(tbREQueueProducer, times(1)) - .send(eq(notificationsTopicService.getNotificationsTopic(ServiceType.TB_RULE_ENGINE, ruleEngine1)), any(TbProtoQueueMsg.class), isNull()); + .send(eq(topicService.getNotificationsTopic(ServiceType.TB_RULE_ENGINE, ruleEngine1)), any(TbProtoQueueMsg.class), isNull()); verify(tbREQueueProducer, times(1)) - .send(eq(notificationsTopicService.getNotificationsTopic(ServiceType.TB_RULE_ENGINE, ruleEngine2)), any(TbProtoQueueMsg.class), isNull()); + .send(eq(topicService.getNotificationsTopic(ServiceType.TB_RULE_ENGINE, ruleEngine2)), any(TbProtoQueueMsg.class), isNull()); verify(tbCoreQueueProducer, times(1)) - .send(eq(notificationsTopicService.getNotificationsTopic(ServiceType.TB_CORE, core1)), any(TbProtoQueueMsg.class), isNull()); + .send(eq(topicService.getNotificationsTopic(ServiceType.TB_CORE, core1)), any(TbProtoQueueMsg.class), isNull()); verify(tbCoreQueueProducer, times(1)) - .send(eq(notificationsTopicService.getNotificationsTopic(ServiceType.TB_CORE, core2)), any(TbProtoQueueMsg.class), isNull()); + .send(eq(topicService.getNotificationsTopic(ServiceType.TB_CORE, core2)), any(TbProtoQueueMsg.class), isNull()); verify(tbCoreQueueProducer, never()) - .send(eq(notificationsTopicService.getNotificationsTopic(ServiceType.TB_CORE, monolith1)), any(TbProtoQueueMsg.class), isNull()); + .send(eq(topicService.getNotificationsTopic(ServiceType.TB_CORE, monolith1)), any(TbProtoQueueMsg.class), isNull()); verify(tbCoreQueueProducer, never()) - .send(eq(notificationsTopicService.getNotificationsTopic(ServiceType.TB_CORE, monolith2)), any(TbProtoQueueMsg.class), isNull()); + .send(eq(topicService.getNotificationsTopic(ServiceType.TB_CORE, monolith2)), any(TbProtoQueueMsg.class), isNull()); verify(tbTransportQueueProducer, times(1)) - .send(eq(notificationsTopicService.getNotificationsTopic(ServiceType.TB_TRANSPORT, transport1)), any(TbProtoQueueMsg.class), isNull()); + .send(eq(topicService.getNotificationsTopic(ServiceType.TB_TRANSPORT, transport1)), any(TbProtoQueueMsg.class), isNull()); verify(tbTransportQueueProducer, times(1)) - .send(eq(notificationsTopicService.getNotificationsTopic(ServiceType.TB_TRANSPORT, transport2)), any(TbProtoQueueMsg.class), isNull()); + .send(eq(topicService.getNotificationsTopic(ServiceType.TB_TRANSPORT, transport2)), any(TbProtoQueueMsg.class), isNull()); verify(tbTransportQueueProducer, never()) - .send(eq(notificationsTopicService.getNotificationsTopic(ServiceType.TB_TRANSPORT, monolith1)), any(TbProtoQueueMsg.class), isNull()); + .send(eq(topicService.getNotificationsTopic(ServiceType.TB_TRANSPORT, monolith1)), any(TbProtoQueueMsg.class), isNull()); verify(tbTransportQueueProducer, never()) - .send(eq(notificationsTopicService.getNotificationsTopic(ServiceType.TB_TRANSPORT, monolith2)), any(TbProtoQueueMsg.class), isNull()); + .send(eq(topicService.getNotificationsTopic(ServiceType.TB_TRANSPORT, monolith2)), any(TbProtoQueueMsg.class), isNull()); } protected Queue createTestQueue() { diff --git a/common/cluster-api/src/main/java/org/thingsboard/server/cluster/TbClusterService.java b/common/cluster-api/src/main/java/org/thingsboard/server/cluster/TbClusterService.java index d2cbde34e4..4b199e5654 100644 --- a/common/cluster-api/src/main/java/org/thingsboard/server/cluster/TbClusterService.java +++ b/common/cluster-api/src/main/java/org/thingsboard/server/cluster/TbClusterService.java @@ -41,7 +41,6 @@ import org.thingsboard.server.gen.transport.TransportProtos.ToVersionControlServ import org.thingsboard.server.queue.TbQueueCallback; import org.thingsboard.server.queue.TbQueueClusterService; -import java.util.List; import java.util.UUID; public interface TbClusterService extends TbQueueClusterService { diff --git a/common/dao-api/src/main/java/org/thingsboard/server/dao/widget/WidgetsBundleService.java b/common/dao-api/src/main/java/org/thingsboard/server/dao/widget/WidgetsBundleService.java index 15fd4838dd..a836fb893d 100644 --- a/common/dao-api/src/main/java/org/thingsboard/server/dao/widget/WidgetsBundleService.java +++ b/common/dao-api/src/main/java/org/thingsboard/server/dao/widget/WidgetsBundleService.java @@ -42,6 +42,8 @@ public interface WidgetsBundleService extends EntityDaoService { PageData findAllTenantWidgetsBundlesByTenantIdAndPageLink(TenantId tenantId, boolean fullSearch, PageLink pageLink); + PageData findTenantWidgetsBundlesByTenantIdAndPageLink(TenantId tenantId, boolean fullSearch, PageLink pageLink); + List findAllTenantWidgetsBundlesByTenantId(TenantId tenantId); void deleteWidgetsBundlesByTenantId(TenantId tenantId); diff --git a/common/data/src/main/java/org/thingsboard/server/common/data/widget/WidgetsBundle.java b/common/data/src/main/java/org/thingsboard/server/common/data/widget/WidgetsBundle.java index 3655eace53..9096207abe 100644 --- a/common/data/src/main/java/org/thingsboard/server/common/data/widget/WidgetsBundle.java +++ b/common/data/src/main/java/org/thingsboard/server/common/data/widget/WidgetsBundle.java @@ -70,6 +70,11 @@ public class WidgetsBundle extends BaseData implements HasName, @ApiModelProperty(position = 7, value = "Description", accessMode = ApiModelProperty.AccessMode.READ_ONLY) private String description; + @Getter + @Setter + @ApiModelProperty(position = 8, value = "Order", accessMode = ApiModelProperty.AccessMode.READ_ONLY) + private Integer order; + @Getter @Setter private WidgetsBundleId externalId; @@ -89,6 +94,7 @@ public class WidgetsBundle extends BaseData implements HasName, this.title = widgetsBundle.getTitle(); this.image = widgetsBundle.getImage(); this.description = widgetsBundle.getDescription(); + this.order = widgetsBundle.getOrder(); this.externalId = widgetsBundle.getExternalId(); } diff --git a/common/edge-api/src/main/proto/edge.proto b/common/edge-api/src/main/proto/edge.proto index bc0170b24b..29a82446a5 100644 --- a/common/edge-api/src/main/proto/edge.proto +++ b/common/edge-api/src/main/proto/edge.proto @@ -361,7 +361,8 @@ message WidgetsBundleUpdateMsg { optional bytes image = 6; bool isSystem = 7; optional string description = 8; - optional string widgets = 9; + optional int32 order = 9; + optional string widgets = 10; } message WidgetTypeUpdateMsg { diff --git a/common/queue/src/main/java/org/thingsboard/server/queue/discovery/HashPartitionService.java b/common/queue/src/main/java/org/thingsboard/server/queue/discovery/HashPartitionService.java index 7afc40f2c2..9c02b5ad63 100644 --- a/common/queue/src/main/java/org/thingsboard/server/queue/discovery/HashPartitionService.java +++ b/common/queue/src/main/java/org/thingsboard/server/queue/discovery/HashPartitionService.java @@ -71,6 +71,7 @@ public class HashPartitionService implements PartitionService { private final TbServiceInfoProvider serviceInfoProvider; private final TenantRoutingInfoService tenantRoutingInfoService; private final QueueRoutingInfoService queueRoutingInfoService; + private final TopicService topicService; protected volatile ConcurrentMap> myPartitions = new ConcurrentHashMap<>(); @@ -88,11 +89,13 @@ public class HashPartitionService implements PartitionService { public HashPartitionService(TbServiceInfoProvider serviceInfoProvider, TenantRoutingInfoService tenantRoutingInfoService, ApplicationEventPublisher applicationEventPublisher, - QueueRoutingInfoService queueRoutingInfoService) { + QueueRoutingInfoService queueRoutingInfoService, + TopicService topicService) { this.serviceInfoProvider = serviceInfoProvider; this.tenantRoutingInfoService = tenantRoutingInfoService; this.applicationEventPublisher = applicationEventPublisher; this.queueRoutingInfoService = queueRoutingInfoService; + this.topicService = topicService; } @PostConstruct @@ -425,7 +428,7 @@ public class HashPartitionService implements PartitionService { private TopicPartitionInfo buildTopicPartitionInfo(QueueKey queueKey, int partition) { TopicPartitionInfo.TopicPartitionInfoBuilder tpi = TopicPartitionInfo.builder(); - tpi.topic(partitionTopicsMap.get(queueKey)); + tpi.topic(topicService.buildTopicName(partitionTopicsMap.get(queueKey))); tpi.partition(partition); tpi.tenantId(queueKey.getTenantId()); diff --git a/common/queue/src/main/java/org/thingsboard/server/queue/discovery/NotificationsTopicService.java b/common/queue/src/main/java/org/thingsboard/server/queue/discovery/TopicService.java similarity index 75% rename from common/queue/src/main/java/org/thingsboard/server/queue/discovery/NotificationsTopicService.java rename to common/queue/src/main/java/org/thingsboard/server/queue/discovery/TopicService.java index c209bd1aee..40e19519b0 100644 --- a/common/queue/src/main/java/org/thingsboard/server/queue/discovery/NotificationsTopicService.java +++ b/common/queue/src/main/java/org/thingsboard/server/queue/discovery/TopicService.java @@ -15,7 +15,9 @@ */ package org.thingsboard.server.queue.discovery; +import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; +import org.thingsboard.server.common.data.id.TenantId; import org.thingsboard.server.common.msg.queue.ServiceType; import org.thingsboard.server.common.msg.queue.TopicPartitionInfo; @@ -23,7 +25,10 @@ import java.util.HashMap; import java.util.Map; @Service -public class NotificationsTopicService { +public class TopicService { + + @Value("${queue.prefix:}") + private String prefix; private Map tbCoreNotificationTopics = new HashMap<>(); private Map tbRuleEngineNotificationTopics = new HashMap<>(); @@ -49,6 +54,14 @@ public class NotificationsTopicService { } private TopicPartitionInfo buildNotificationsTopicPartitionInfo(ServiceType serviceType, String serviceId) { - return new TopicPartitionInfo(serviceType.name().toLowerCase() + ".notifications." + serviceId, null, null, false); + return buildTopicPartitionInfo(serviceType.name().toLowerCase() + ".notifications." + serviceId, null, null, false); + } + + public TopicPartitionInfo buildTopicPartitionInfo(String topic, TenantId tenantId, Integer partition, boolean myPartition) { + return new TopicPartitionInfo(buildTopicName(topic), tenantId, partition, myPartition); + } + + public String buildTopicName(String topic) { + return prefix.isBlank() ? topic : prefix + "." + topic; } } \ No newline at end of file diff --git a/common/queue/src/main/java/org/thingsboard/server/queue/notification/RemoteNotificationRuleProcessor.java b/common/queue/src/main/java/org/thingsboard/server/queue/notification/RemoteNotificationRuleProcessor.java index 5304056a88..8ad5816b77 100644 --- a/common/queue/src/main/java/org/thingsboard/server/queue/notification/RemoteNotificationRuleProcessor.java +++ b/common/queue/src/main/java/org/thingsboard/server/queue/notification/RemoteNotificationRuleProcessor.java @@ -26,7 +26,7 @@ import org.thingsboard.server.common.msg.queue.ServiceType; import org.thingsboard.server.common.msg.queue.TopicPartitionInfo; import org.thingsboard.server.gen.transport.TransportProtos; import org.thingsboard.server.queue.common.TbProtoQueueMsg; -import org.thingsboard.server.queue.discovery.NotificationsTopicService; +import org.thingsboard.server.queue.discovery.TopicService; import org.thingsboard.server.queue.discovery.PartitionService; import org.thingsboard.server.queue.provider.TbQueueProducerProvider; import org.thingsboard.server.queue.util.DataDecodingEncodingService; @@ -41,7 +41,7 @@ public class RemoteNotificationRuleProcessor implements NotificationRuleProcesso private final NotificationDeduplicationService deduplicationService; private final TbQueueProducerProvider producerProvider; - private final NotificationsTopicService notificationsTopicService; + private final TopicService topicService; private final PartitionService partitionService; private final DataDecodingEncodingService encodingService; @@ -57,7 +57,7 @@ public class RemoteNotificationRuleProcessor implements NotificationRuleProcesso .setTrigger(ByteString.copyFrom(encodingService.encode(trigger))); partitionService.getAllServiceIds(ServiceType.TB_CORE).stream().findAny().ifPresent(serviceId -> { - TopicPartitionInfo tpi = notificationsTopicService.getNotificationsTopic(ServiceType.TB_CORE, serviceId); + TopicPartitionInfo tpi = topicService.getNotificationsTopic(ServiceType.TB_CORE, serviceId); producerProvider.getTbCoreNotificationsMsgProducer().send(tpi, new TbProtoQueueMsg<>(UUID.randomUUID(), TransportProtos.ToCoreNotificationMsg.newBuilder() .setNotificationRuleProcessorMsg(msg) diff --git a/common/queue/src/main/java/org/thingsboard/server/queue/provider/AwsSqsMonolithQueueFactory.java b/common/queue/src/main/java/org/thingsboard/server/queue/provider/AwsSqsMonolithQueueFactory.java index 08609b13d0..5774e59d32 100644 --- a/common/queue/src/main/java/org/thingsboard/server/queue/provider/AwsSqsMonolithQueueFactory.java +++ b/common/queue/src/main/java/org/thingsboard/server/queue/provider/AwsSqsMonolithQueueFactory.java @@ -40,7 +40,7 @@ import org.thingsboard.server.queue.TbQueueRequestTemplate; import org.thingsboard.server.queue.common.DefaultTbQueueRequestTemplate; import org.thingsboard.server.queue.common.TbProtoJsQueueMsg; import org.thingsboard.server.queue.common.TbProtoQueueMsg; -import org.thingsboard.server.queue.discovery.NotificationsTopicService; +import org.thingsboard.server.queue.discovery.TopicService; import org.thingsboard.server.queue.discovery.TbServiceInfoProvider; import org.thingsboard.server.queue.settings.TbQueueCoreSettings; import org.thingsboard.server.queue.settings.TbQueueRemoteJsInvokeSettings; @@ -61,7 +61,7 @@ import java.nio.charset.StandardCharsets; @ConditionalOnExpression("'${queue.type:null}'=='aws-sqs' && '${service.type:null}'=='monolith'") public class AwsSqsMonolithQueueFactory implements TbCoreQueueFactory, TbRuleEngineQueueFactory, TbVersionControlQueueFactory { - private final NotificationsTopicService notificationsTopicService; + private final TopicService topicService; private final TbQueueCoreSettings coreSettings; private final TbServiceInfoProvider serviceInfoProvider; private final TbQueueRuleEngineSettings ruleEngineSettings; @@ -79,7 +79,7 @@ public class AwsSqsMonolithQueueFactory implements TbCoreQueueFactory, TbRuleEng private final TbQueueAdmin otaAdmin; private final TbQueueAdmin vcAdmin; - public AwsSqsMonolithQueueFactory(NotificationsTopicService notificationsTopicService, TbQueueCoreSettings coreSettings, + public AwsSqsMonolithQueueFactory(TopicService topicService, TbQueueCoreSettings coreSettings, TbQueueRuleEngineSettings ruleEngineSettings, TbServiceInfoProvider serviceInfoProvider, TbQueueTransportApiSettings transportApiSettings, @@ -88,7 +88,7 @@ public class AwsSqsMonolithQueueFactory implements TbCoreQueueFactory, TbRuleEng TbQueueVersionControlSettings vcSettings, TbAwsSqsQueueAttributes sqsQueueAttributes, TbQueueRemoteJsInvokeSettings jsInvokeSettings) { - this.notificationsTopicService = notificationsTopicService; + this.topicService = topicService; this.coreSettings = coreSettings; this.serviceInfoProvider = serviceInfoProvider; this.ruleEngineSettings = ruleEngineSettings; @@ -109,71 +109,71 @@ public class AwsSqsMonolithQueueFactory implements TbCoreQueueFactory, TbRuleEng @Override public TbQueueProducer> createTransportNotificationsMsgProducer() { - return new TbAwsSqsProducerTemplate<>(notificationAdmin, sqsSettings, transportNotificationSettings.getNotificationsTopic()); + return new TbAwsSqsProducerTemplate<>(notificationAdmin, sqsSettings, topicService.buildTopicName(transportNotificationSettings.getNotificationsTopic())); } @Override public TbQueueProducer> createRuleEngineMsgProducer() { - return new TbAwsSqsProducerTemplate<>(ruleEngineAdmin, sqsSettings, ruleEngineSettings.getTopic()); + return new TbAwsSqsProducerTemplate<>(ruleEngineAdmin, sqsSettings, topicService.buildTopicName(ruleEngineSettings.getTopic())); } @Override public TbQueueProducer> createRuleEngineNotificationsMsgProducer() { - return new TbAwsSqsProducerTemplate<>(notificationAdmin, sqsSettings, ruleEngineSettings.getTopic()); + return new TbAwsSqsProducerTemplate<>(notificationAdmin, sqsSettings, topicService.buildTopicName(ruleEngineSettings.getTopic())); } @Override public TbQueueProducer> createTbCoreMsgProducer() { - return new TbAwsSqsProducerTemplate<>(coreAdmin, sqsSettings, coreSettings.getTopic()); + return new TbAwsSqsProducerTemplate<>(coreAdmin, sqsSettings, topicService.buildTopicName(coreSettings.getTopic())); } @Override public TbQueueProducer> createTbCoreNotificationsMsgProducer() { - return new TbAwsSqsProducerTemplate<>(notificationAdmin, sqsSettings, coreSettings.getTopic()); + return new TbAwsSqsProducerTemplate<>(notificationAdmin, sqsSettings, topicService.buildTopicName(coreSettings.getTopic())); } @Override public TbQueueConsumer> createToVersionControlMsgConsumer() { - return new TbAwsSqsConsumerTemplate<>(vcAdmin, sqsSettings, vcSettings.getTopic(), + return new TbAwsSqsConsumerTemplate<>(vcAdmin, sqsSettings, topicService.buildTopicName(vcSettings.getTopic()), msg -> new TbProtoQueueMsg<>(msg.getKey(), TransportProtos.ToVersionControlServiceMsg.parseFrom(msg.getData()), msg.getHeaders()) ); } @Override public TbQueueConsumer> createToRuleEngineMsgConsumer(Queue configuration) { - return new TbAwsSqsConsumerTemplate<>(ruleEngineAdmin, sqsSettings, configuration.getTopic(), + return new TbAwsSqsConsumerTemplate<>(ruleEngineAdmin, sqsSettings, topicService.buildTopicName(configuration.getTopic()), msg -> new TbProtoQueueMsg<>(msg.getKey(), ToRuleEngineMsg.parseFrom(msg.getData()), msg.getHeaders())); } @Override public TbQueueConsumer> createToRuleEngineNotificationsMsgConsumer() { return new TbAwsSqsConsumerTemplate<>(notificationAdmin, sqsSettings, - notificationsTopicService.getNotificationsTopic(ServiceType.TB_RULE_ENGINE, serviceInfoProvider.getServiceId()).getFullTopicName(), + topicService.getNotificationsTopic(ServiceType.TB_RULE_ENGINE, serviceInfoProvider.getServiceId()).getFullTopicName(), msg -> new TbProtoQueueMsg<>(msg.getKey(), ToRuleEngineNotificationMsg.parseFrom(msg.getData()), msg.getHeaders())); } @Override public TbQueueConsumer> createToCoreMsgConsumer() { - return new TbAwsSqsConsumerTemplate<>(coreAdmin, sqsSettings, coreSettings.getTopic(), + return new TbAwsSqsConsumerTemplate<>(coreAdmin, sqsSettings, topicService.buildTopicName(coreSettings.getTopic()), msg -> new TbProtoQueueMsg<>(msg.getKey(), ToCoreMsg.parseFrom(msg.getData()), msg.getHeaders())); } @Override public TbQueueConsumer> createToCoreNotificationsMsgConsumer() { return new TbAwsSqsConsumerTemplate<>(notificationAdmin, sqsSettings, - notificationsTopicService.getNotificationsTopic(ServiceType.TB_CORE, serviceInfoProvider.getServiceId()).getFullTopicName(), + topicService.getNotificationsTopic(ServiceType.TB_CORE, serviceInfoProvider.getServiceId()).getFullTopicName(), msg -> new TbProtoQueueMsg<>(msg.getKey(), ToCoreNotificationMsg.parseFrom(msg.getData()), msg.getHeaders())); } @Override public TbQueueConsumer> createTransportApiRequestConsumer() { - return new TbAwsSqsConsumerTemplate<>(transportApiAdmin, sqsSettings, transportApiSettings.getRequestsTopic(), + return new TbAwsSqsConsumerTemplate<>(transportApiAdmin, sqsSettings, topicService.buildTopicName(transportApiSettings.getRequestsTopic()), msg -> new TbProtoQueueMsg<>(msg.getKey(), TransportApiRequestMsg.parseFrom(msg.getData()), msg.getHeaders())); } @Override public TbQueueProducer> createTransportApiResponseProducer() { - return new TbAwsSqsProducerTemplate<>(transportApiAdmin, sqsSettings, transportApiSettings.getResponsesTopic()); + return new TbAwsSqsProducerTemplate<>(transportApiAdmin, sqsSettings, topicService.buildTopicName(transportApiSettings.getResponsesTopic())); } @Override @@ -201,29 +201,29 @@ public class AwsSqsMonolithQueueFactory implements TbCoreQueueFactory, TbRuleEng @Override public TbQueueProducer> createToUsageStatsServiceMsgProducer() { - return new TbAwsSqsProducerTemplate<>(coreAdmin, sqsSettings, coreSettings.getUsageStatsTopic()); + return new TbAwsSqsProducerTemplate<>(coreAdmin, sqsSettings, topicService.buildTopicName(coreSettings.getUsageStatsTopic())); } @Override public TbQueueConsumer> createToUsageStatsServiceMsgConsumer() { - return new TbAwsSqsConsumerTemplate<>(coreAdmin, sqsSettings, coreSettings.getUsageStatsTopic(), + return new TbAwsSqsConsumerTemplate<>(coreAdmin, sqsSettings, topicService.buildTopicName(coreSettings.getUsageStatsTopic()), msg -> new TbProtoQueueMsg<>(msg.getKey(), ToUsageStatsServiceMsg.parseFrom(msg.getData()), msg.getHeaders())); } @Override public TbQueueConsumer> createToOtaPackageStateServiceMsgConsumer() { - return new TbAwsSqsConsumerTemplate<>(otaAdmin, sqsSettings, coreSettings.getOtaPackageTopic(), + return new TbAwsSqsConsumerTemplate<>(otaAdmin, sqsSettings, topicService.buildTopicName(coreSettings.getOtaPackageTopic()), msg -> new TbProtoQueueMsg<>(msg.getKey(), ToOtaPackageStateServiceMsg.parseFrom(msg.getData()), msg.getHeaders())); } @Override public TbQueueProducer> createToOtaPackageStateServiceMsgProducer() { - return new TbAwsSqsProducerTemplate<>(otaAdmin, sqsSettings, coreSettings.getOtaPackageTopic()); + return new TbAwsSqsProducerTemplate<>(otaAdmin, sqsSettings, topicService.buildTopicName(coreSettings.getOtaPackageTopic())); } @Override public TbQueueProducer> createVersionControlMsgProducer() { - return new TbAwsSqsProducerTemplate<>(vcAdmin, sqsSettings, vcSettings.getTopic()); + return new TbAwsSqsProducerTemplate<>(vcAdmin, sqsSettings, topicService.buildTopicName(vcSettings.getTopic())); } @PreDestroy diff --git a/common/queue/src/main/java/org/thingsboard/server/queue/provider/AwsSqsTbCoreQueueFactory.java b/common/queue/src/main/java/org/thingsboard/server/queue/provider/AwsSqsTbCoreQueueFactory.java index 257ac37408..d7f7a0412f 100644 --- a/common/queue/src/main/java/org/thingsboard/server/queue/provider/AwsSqsTbCoreQueueFactory.java +++ b/common/queue/src/main/java/org/thingsboard/server/queue/provider/AwsSqsTbCoreQueueFactory.java @@ -38,7 +38,7 @@ import org.thingsboard.server.queue.TbQueueRequestTemplate; import org.thingsboard.server.queue.common.DefaultTbQueueRequestTemplate; import org.thingsboard.server.queue.common.TbProtoJsQueueMsg; import org.thingsboard.server.queue.common.TbProtoQueueMsg; -import org.thingsboard.server.queue.discovery.NotificationsTopicService; +import org.thingsboard.server.queue.discovery.TopicService; import org.thingsboard.server.queue.discovery.TbServiceInfoProvider; import org.thingsboard.server.queue.settings.TbQueueCoreSettings; import org.thingsboard.server.queue.settings.TbQueueRemoteJsInvokeSettings; @@ -63,7 +63,7 @@ public class AwsSqsTbCoreQueueFactory implements TbCoreQueueFactory { private final TbQueueRuleEngineSettings ruleEngineSettings; private final TbQueueCoreSettings coreSettings; private final TbQueueTransportApiSettings transportApiSettings; - private final NotificationsTopicService notificationsTopicService; + private final TopicService topicService; private final TbServiceInfoProvider serviceInfoProvider; private final TbQueueRemoteJsInvokeSettings jsInvokeSettings; private final TbQueueTransportNotificationSettings transportNotificationSettings; @@ -81,7 +81,7 @@ public class AwsSqsTbCoreQueueFactory implements TbCoreQueueFactory { TbQueueCoreSettings coreSettings, TbQueueTransportApiSettings transportApiSettings, TbQueueRuleEngineSettings ruleEngineSettings, - NotificationsTopicService notificationsTopicService, + TopicService topicService, TbQueueVersionControlSettings vcSettings, TbServiceInfoProvider serviceInfoProvider, TbQueueRemoteJsInvokeSettings jsInvokeSettings, @@ -91,7 +91,7 @@ public class AwsSqsTbCoreQueueFactory implements TbCoreQueueFactory { this.coreSettings = coreSettings; this.transportApiSettings = transportApiSettings; this.ruleEngineSettings = ruleEngineSettings; - this.notificationsTopicService = notificationsTopicService; + this.topicService = topicService; this.serviceInfoProvider = serviceInfoProvider; this.jsInvokeSettings = jsInvokeSettings; this.transportNotificationSettings = transportNotificationSettings; @@ -108,51 +108,51 @@ public class AwsSqsTbCoreQueueFactory implements TbCoreQueueFactory { @Override public TbQueueProducer> createTransportNotificationsMsgProducer() { - return new TbAwsSqsProducerTemplate<>(notificationAdmin, sqsSettings, transportNotificationSettings.getNotificationsTopic()); + return new TbAwsSqsProducerTemplate<>(notificationAdmin, sqsSettings, topicService.buildTopicName(transportNotificationSettings.getNotificationsTopic())); } @Override public TbQueueProducer> createRuleEngineMsgProducer() { - return new TbAwsSqsProducerTemplate<>(coreAdmin, sqsSettings, coreSettings.getTopic()); + return new TbAwsSqsProducerTemplate<>(coreAdmin, sqsSettings, topicService.buildTopicName(coreSettings.getTopic())); } @Override public TbQueueProducer> createRuleEngineNotificationsMsgProducer() { - return new TbAwsSqsProducerTemplate<>(notificationAdmin, sqsSettings, ruleEngineSettings.getTopic()); + return new TbAwsSqsProducerTemplate<>(notificationAdmin, sqsSettings, topicService.buildTopicName(ruleEngineSettings.getTopic())); } @Override public TbQueueProducer> createTbCoreMsgProducer() { - return new TbAwsSqsProducerTemplate<>(coreAdmin, sqsSettings, coreSettings.getTopic()); + return new TbAwsSqsProducerTemplate<>(coreAdmin, sqsSettings, topicService.buildTopicName(coreSettings.getTopic())); } @Override public TbQueueProducer> createTbCoreNotificationsMsgProducer() { - return new TbAwsSqsProducerTemplate<>(notificationAdmin, sqsSettings, coreSettings.getTopic()); + return new TbAwsSqsProducerTemplate<>(notificationAdmin, sqsSettings, topicService.buildTopicName(coreSettings.getTopic())); } @Override public TbQueueConsumer> createToCoreMsgConsumer() { - return new TbAwsSqsConsumerTemplate<>(coreAdmin, sqsSettings, coreSettings.getTopic(), + return new TbAwsSqsConsumerTemplate<>(coreAdmin, sqsSettings, topicService.buildTopicName(coreSettings.getTopic()), msg -> new TbProtoQueueMsg<>(msg.getKey(), ToCoreMsg.parseFrom(msg.getData()), msg.getHeaders())); } @Override public TbQueueConsumer> createToCoreNotificationsMsgConsumer() { return new TbAwsSqsConsumerTemplate<>(notificationAdmin, sqsSettings, - notificationsTopicService.getNotificationsTopic(ServiceType.TB_CORE, serviceInfoProvider.getServiceId()).getFullTopicName(), + topicService.getNotificationsTopic(ServiceType.TB_CORE, serviceInfoProvider.getServiceId()).getFullTopicName(), msg -> new TbProtoQueueMsg<>(msg.getKey(), ToCoreNotificationMsg.parseFrom(msg.getData()), msg.getHeaders())); } @Override public TbQueueConsumer> createTransportApiRequestConsumer() { - return new TbAwsSqsConsumerTemplate<>(transportApiAdmin, sqsSettings, transportApiSettings.getRequestsTopic(), + return new TbAwsSqsConsumerTemplate<>(transportApiAdmin, sqsSettings, topicService.buildTopicName(transportApiSettings.getRequestsTopic()), msg -> new TbProtoQueueMsg<>(msg.getKey(), TransportApiRequestMsg.parseFrom(msg.getData()), msg.getHeaders())); } @Override public TbQueueProducer> createTransportApiResponseProducer() { - return new TbAwsSqsProducerTemplate<>(transportApiAdmin, sqsSettings, transportApiSettings.getResponsesTopic()); + return new TbAwsSqsProducerTemplate<>(transportApiAdmin, sqsSettings, topicService.buildTopicName(transportApiSettings.getResponsesTopic())); } @Override @@ -180,29 +180,29 @@ public class AwsSqsTbCoreQueueFactory implements TbCoreQueueFactory { @Override public TbQueueProducer> createToUsageStatsServiceMsgProducer() { - return new TbAwsSqsProducerTemplate<>(coreAdmin, sqsSettings, coreSettings.getUsageStatsTopic()); + return new TbAwsSqsProducerTemplate<>(coreAdmin, sqsSettings, topicService.buildTopicName(coreSettings.getUsageStatsTopic())); } @Override public TbQueueConsumer> createToUsageStatsServiceMsgConsumer() { - return new TbAwsSqsConsumerTemplate<>(coreAdmin, sqsSettings, coreSettings.getUsageStatsTopic(), + return new TbAwsSqsConsumerTemplate<>(coreAdmin, sqsSettings, topicService.buildTopicName(coreSettings.getUsageStatsTopic()), msg -> new TbProtoQueueMsg<>(msg.getKey(), ToUsageStatsServiceMsg.parseFrom(msg.getData()), msg.getHeaders())); } @Override public TbQueueConsumer> createToOtaPackageStateServiceMsgConsumer() { - return new TbAwsSqsConsumerTemplate<>(otaAdmin, sqsSettings, coreSettings.getOtaPackageTopic(), + return new TbAwsSqsConsumerTemplate<>(otaAdmin, sqsSettings, topicService.buildTopicName(coreSettings.getOtaPackageTopic()), msg -> new TbProtoQueueMsg<>(msg.getKey(), ToOtaPackageStateServiceMsg.parseFrom(msg.getData()), msg.getHeaders())); } @Override public TbQueueProducer> createToOtaPackageStateServiceMsgProducer() { - return new TbAwsSqsProducerTemplate<>(otaAdmin, sqsSettings, coreSettings.getOtaPackageTopic()); + return new TbAwsSqsProducerTemplate<>(otaAdmin, sqsSettings, topicService.buildTopicName(coreSettings.getOtaPackageTopic())); } @Override public TbQueueProducer> createVersionControlMsgProducer() { - return new TbAwsSqsProducerTemplate<>(vcAdmin, sqsSettings, vcSettings.getTopic()); + return new TbAwsSqsProducerTemplate<>(vcAdmin, sqsSettings, topicService.buildTopicName(vcSettings.getTopic())); } @PreDestroy diff --git a/common/queue/src/main/java/org/thingsboard/server/queue/provider/AwsSqsTbRuleEngineQueueFactory.java b/common/queue/src/main/java/org/thingsboard/server/queue/provider/AwsSqsTbRuleEngineQueueFactory.java index 9b1f9dba0d..9df4cc5c4a 100644 --- a/common/queue/src/main/java/org/thingsboard/server/queue/provider/AwsSqsTbRuleEngineQueueFactory.java +++ b/common/queue/src/main/java/org/thingsboard/server/queue/provider/AwsSqsTbRuleEngineQueueFactory.java @@ -33,7 +33,7 @@ import org.thingsboard.server.queue.TbQueueRequestTemplate; import org.thingsboard.server.queue.common.DefaultTbQueueRequestTemplate; import org.thingsboard.server.queue.common.TbProtoJsQueueMsg; import org.thingsboard.server.queue.common.TbProtoQueueMsg; -import org.thingsboard.server.queue.discovery.NotificationsTopicService; +import org.thingsboard.server.queue.discovery.TopicService; import org.thingsboard.server.queue.discovery.TbServiceInfoProvider; import org.thingsboard.server.queue.settings.TbQueueCoreSettings; import org.thingsboard.server.queue.settings.TbQueueRemoteJsInvokeSettings; @@ -52,7 +52,7 @@ import java.nio.charset.StandardCharsets; @ConditionalOnExpression("'${queue.type:null}'=='aws-sqs' && '${service.type:null}'=='tb-rule-engine'") public class AwsSqsTbRuleEngineQueueFactory implements TbRuleEngineQueueFactory { - private final NotificationsTopicService notificationsTopicService; + private final TopicService topicService; private final TbQueueCoreSettings coreSettings; private final TbServiceInfoProvider serviceInfoProvider; private final TbQueueRuleEngineSettings ruleEngineSettings; @@ -66,14 +66,14 @@ public class AwsSqsTbRuleEngineQueueFactory implements TbRuleEngineQueueFactory private final TbQueueAdmin notificationAdmin; private final TbQueueAdmin otaAdmin; - public AwsSqsTbRuleEngineQueueFactory(NotificationsTopicService notificationsTopicService, TbQueueCoreSettings coreSettings, + public AwsSqsTbRuleEngineQueueFactory(TopicService topicService, TbQueueCoreSettings coreSettings, TbQueueRuleEngineSettings ruleEngineSettings, TbServiceInfoProvider serviceInfoProvider, TbAwsSqsSettings sqsSettings, TbAwsSqsQueueAttributes sqsQueueAttributes, TbQueueRemoteJsInvokeSettings jsInvokeSettings, TbQueueTransportNotificationSettings transportNotificationSettings) { - this.notificationsTopicService = notificationsTopicService; + this.topicService = topicService; this.coreSettings = coreSettings; this.serviceInfoProvider = serviceInfoProvider; this.ruleEngineSettings = ruleEngineSettings; @@ -90,39 +90,39 @@ public class AwsSqsTbRuleEngineQueueFactory implements TbRuleEngineQueueFactory @Override public TbQueueProducer> createTransportNotificationsMsgProducer() { - return new TbAwsSqsProducerTemplate<>(notificationAdmin, sqsSettings, transportNotificationSettings.getNotificationsTopic()); + return new TbAwsSqsProducerTemplate<>(notificationAdmin, sqsSettings, topicService.buildTopicName(transportNotificationSettings.getNotificationsTopic())); } @Override public TbQueueProducer> createRuleEngineMsgProducer() { - return new TbAwsSqsProducerTemplate<>(ruleEngineAdmin, sqsSettings, ruleEngineSettings.getTopic()); + return new TbAwsSqsProducerTemplate<>(ruleEngineAdmin, sqsSettings, topicService.buildTopicName(ruleEngineSettings.getTopic())); } @Override public TbQueueProducer> createRuleEngineNotificationsMsgProducer() { - return new TbAwsSqsProducerTemplate<>(notificationAdmin, sqsSettings, ruleEngineSettings.getTopic()); + return new TbAwsSqsProducerTemplate<>(notificationAdmin, sqsSettings, topicService.buildTopicName(ruleEngineSettings.getTopic())); } @Override public TbQueueProducer> createTbCoreMsgProducer() { - return new TbAwsSqsProducerTemplate<>(coreAdmin, sqsSettings, coreSettings.getTopic()); + return new TbAwsSqsProducerTemplate<>(coreAdmin, sqsSettings, topicService.buildTopicName(coreSettings.getTopic())); } @Override public TbQueueProducer> createTbCoreNotificationsMsgProducer() { - return new TbAwsSqsProducerTemplate<>(notificationAdmin, sqsSettings, coreSettings.getTopic()); + return new TbAwsSqsProducerTemplate<>(notificationAdmin, sqsSettings, topicService.buildTopicName(coreSettings.getTopic())); } @Override public TbQueueConsumer> createToRuleEngineMsgConsumer(Queue configuration) { - return new TbAwsSqsConsumerTemplate<>(ruleEngineAdmin, sqsSettings, configuration.getTopic(), + return new TbAwsSqsConsumerTemplate<>(ruleEngineAdmin, sqsSettings, topicService.buildTopicName(configuration.getTopic()), msg -> new TbProtoQueueMsg<>(msg.getKey(), ToRuleEngineMsg.parseFrom(msg.getData()), msg.getHeaders())); } @Override public TbQueueConsumer> createToRuleEngineNotificationsMsgConsumer() { return new TbAwsSqsConsumerTemplate<>(notificationAdmin, sqsSettings, - notificationsTopicService.getNotificationsTopic(ServiceType.TB_RULE_ENGINE, serviceInfoProvider.getServiceId()).getFullTopicName(), + topicService.getNotificationsTopic(ServiceType.TB_RULE_ENGINE, serviceInfoProvider.getServiceId()).getFullTopicName(), msg -> new TbProtoQueueMsg<>(msg.getKey(), TransportProtos.ToRuleEngineNotificationMsg.parseFrom(msg.getData()), msg.getHeaders())); } @@ -151,12 +151,12 @@ public class AwsSqsTbRuleEngineQueueFactory implements TbRuleEngineQueueFactory @Override public TbQueueProducer> createToUsageStatsServiceMsgProducer() { - return new TbAwsSqsProducerTemplate<>(coreAdmin, sqsSettings, coreSettings.getUsageStatsTopic()); + return new TbAwsSqsProducerTemplate<>(coreAdmin, sqsSettings, topicService.buildTopicName(coreSettings.getUsageStatsTopic())); } @Override public TbQueueProducer> createToOtaPackageStateServiceMsgProducer() { - return new TbAwsSqsProducerTemplate<>(otaAdmin, sqsSettings, coreSettings.getOtaPackageTopic()); + return new TbAwsSqsProducerTemplate<>(otaAdmin, sqsSettings, topicService.buildTopicName(coreSettings.getOtaPackageTopic())); } diff --git a/common/queue/src/main/java/org/thingsboard/server/queue/provider/AwsSqsTbVersionControlQueueFactory.java b/common/queue/src/main/java/org/thingsboard/server/queue/provider/AwsSqsTbVersionControlQueueFactory.java index 24453d3c5c..a8f69e6eab 100644 --- a/common/queue/src/main/java/org/thingsboard/server/queue/provider/AwsSqsTbVersionControlQueueFactory.java +++ b/common/queue/src/main/java/org/thingsboard/server/queue/provider/AwsSqsTbVersionControlQueueFactory.java @@ -22,6 +22,7 @@ import org.thingsboard.server.queue.TbQueueAdmin; import org.thingsboard.server.queue.TbQueueConsumer; import org.thingsboard.server.queue.TbQueueProducer; import org.thingsboard.server.queue.common.TbProtoQueueMsg; +import org.thingsboard.server.queue.discovery.TopicService; import org.thingsboard.server.queue.settings.TbQueueCoreSettings; import org.thingsboard.server.queue.settings.TbQueueVersionControlSettings; import org.thingsboard.server.queue.sqs.TbAwsSqsAdmin; @@ -39,6 +40,7 @@ public class AwsSqsTbVersionControlQueueFactory implements TbVersionControlQueue private final TbAwsSqsSettings sqsSettings; private final TbQueueCoreSettings coreSettings; private final TbQueueVersionControlSettings vcSettings; + private final TopicService topicService; private final TbQueueAdmin coreAdmin; @@ -48,11 +50,13 @@ public class AwsSqsTbVersionControlQueueFactory implements TbVersionControlQueue public AwsSqsTbVersionControlQueueFactory(TbAwsSqsSettings sqsSettings, TbQueueCoreSettings coreSettings, TbQueueVersionControlSettings vcSettings, - TbAwsSqsQueueAttributes sqsQueueAttributes + TbAwsSqsQueueAttributes sqsQueueAttributes, + TopicService topicService ) { this.sqsSettings = sqsSettings; this.coreSettings = coreSettings; this.vcSettings = vcSettings; + this.topicService = topicService; this.coreAdmin = new TbAwsSqsAdmin(sqsSettings, sqsQueueAttributes.getCoreAttributes()); this.notificationAdmin = new TbAwsSqsAdmin(sqsSettings, sqsQueueAttributes.getNotificationsAttributes()); @@ -61,17 +65,17 @@ public class AwsSqsTbVersionControlQueueFactory implements TbVersionControlQueue @Override public TbQueueProducer> createToUsageStatsServiceMsgProducer() { - return new TbAwsSqsProducerTemplate<>(coreAdmin, sqsSettings, coreSettings.getUsageStatsTopic()); + return new TbAwsSqsProducerTemplate<>(coreAdmin, sqsSettings, topicService.buildTopicName(coreSettings.getUsageStatsTopic())); } @Override public TbQueueProducer> createTbCoreNotificationsMsgProducer() { - return new TbAwsSqsProducerTemplate<>(notificationAdmin, sqsSettings, coreSettings.getTopic()); + return new TbAwsSqsProducerTemplate<>(notificationAdmin, sqsSettings, topicService.buildTopicName(coreSettings.getTopic())); } @Override public TbQueueConsumer> createToVersionControlMsgConsumer() { - return new TbAwsSqsConsumerTemplate<>(vcAdmin, sqsSettings, vcSettings.getTopic(), + return new TbAwsSqsConsumerTemplate<>(vcAdmin, sqsSettings, topicService.buildTopicName(vcSettings.getTopic()), msg -> new TbProtoQueueMsg<>(msg.getKey(), TransportProtos.ToVersionControlServiceMsg.parseFrom(msg.getData()), msg.getHeaders()) ); } diff --git a/common/queue/src/main/java/org/thingsboard/server/queue/provider/AwsSqsTransportQueueFactory.java b/common/queue/src/main/java/org/thingsboard/server/queue/provider/AwsSqsTransportQueueFactory.java index fa16ee9093..4818affc93 100644 --- a/common/queue/src/main/java/org/thingsboard/server/queue/provider/AwsSqsTransportQueueFactory.java +++ b/common/queue/src/main/java/org/thingsboard/server/queue/provider/AwsSqsTransportQueueFactory.java @@ -32,6 +32,7 @@ import org.thingsboard.server.queue.TbQueueRequestTemplate; import org.thingsboard.server.queue.common.DefaultTbQueueRequestTemplate; import org.thingsboard.server.queue.common.TbProtoQueueMsg; import org.thingsboard.server.queue.discovery.TbServiceInfoProvider; +import org.thingsboard.server.queue.discovery.TopicService; import org.thingsboard.server.queue.settings.TbQueueCoreSettings; import org.thingsboard.server.queue.settings.TbQueueRuleEngineSettings; import org.thingsboard.server.queue.settings.TbQueueTransportApiSettings; @@ -54,6 +55,7 @@ public class AwsSqsTransportQueueFactory implements TbTransportQueueFactory { private final TbQueueCoreSettings coreSettings; private final TbServiceInfoProvider serviceInfoProvider; private final TbQueueRuleEngineSettings ruleEngineSettings; + private final TopicService topicService; private final TbQueueAdmin coreAdmin; private final TbQueueAdmin transportApiAdmin; @@ -66,13 +68,15 @@ public class AwsSqsTransportQueueFactory implements TbTransportQueueFactory { TbServiceInfoProvider serviceInfoProvider, TbQueueCoreSettings coreSettings, TbAwsSqsQueueAttributes sqsQueueAttributes, - TbQueueRuleEngineSettings ruleEngineSettings) { + TbQueueRuleEngineSettings ruleEngineSettings, + TopicService topicService) { this.transportApiSettings = transportApiSettings; this.transportNotificationSettings = transportNotificationSettings; this.sqsSettings = sqsSettings; this.serviceInfoProvider = serviceInfoProvider; this.coreSettings = coreSettings; this.ruleEngineSettings = ruleEngineSettings; + this.topicService = topicService; this.coreAdmin = new TbAwsSqsAdmin(sqsSettings, sqsQueueAttributes.getCoreAttributes()); this.transportApiAdmin = new TbAwsSqsAdmin(sqsSettings, sqsQueueAttributes.getTransportApiAttributes()); @@ -83,11 +87,11 @@ public class AwsSqsTransportQueueFactory implements TbTransportQueueFactory { @Override public TbQueueRequestTemplate, TbProtoQueueMsg> createTransportApiRequestTemplate() { TbQueueProducer> producerTemplate = - new TbAwsSqsProducerTemplate<>(transportApiAdmin, sqsSettings, transportApiSettings.getRequestsTopic()); + new TbAwsSqsProducerTemplate<>(transportApiAdmin, sqsSettings, topicService.buildTopicName(transportApiSettings.getRequestsTopic())); TbQueueConsumer> consumerTemplate = new TbAwsSqsConsumerTemplate<>(transportApiAdmin, sqsSettings, - transportApiSettings.getResponsesTopic() + "_" + serviceInfoProvider.getServiceId(), + topicService.buildTopicName(transportApiSettings.getResponsesTopic() + "_" + serviceInfoProvider.getServiceId()), msg -> new TbProtoQueueMsg<>(msg.getKey(), TransportApiResponseMsg.parseFrom(msg.getData()), msg.getHeaders())); DefaultTbQueueRequestTemplate.DefaultTbQueueRequestTemplateBuilder @@ -103,28 +107,28 @@ public class AwsSqsTransportQueueFactory implements TbTransportQueueFactory { @Override public TbQueueProducer> createRuleEngineMsgProducer() { - return new TbAwsSqsProducerTemplate<>(ruleEngineAdmin, sqsSettings, ruleEngineSettings.getTopic()); + return new TbAwsSqsProducerTemplate<>(ruleEngineAdmin, sqsSettings, topicService.buildTopicName(ruleEngineSettings.getTopic())); } @Override public TbQueueProducer> createTbCoreMsgProducer() { - return new TbAwsSqsProducerTemplate<>(coreAdmin, sqsSettings, coreSettings.getTopic()); + return new TbAwsSqsProducerTemplate<>(coreAdmin, sqsSettings, topicService.buildTopicName(coreSettings.getTopic())); } @Override public TbQueueProducer> createTbCoreNotificationsMsgProducer() { - return new TbAwsSqsProducerTemplate<>(notificationAdmin, sqsSettings, coreSettings.getTopic()); + return new TbAwsSqsProducerTemplate<>(notificationAdmin, sqsSettings, topicService.buildTopicName(coreSettings.getTopic())); } @Override public TbQueueConsumer> createTransportNotificationsConsumer() { - return new TbAwsSqsConsumerTemplate<>(notificationAdmin, sqsSettings, transportNotificationSettings.getNotificationsTopic() + "_" + serviceInfoProvider.getServiceId(), + return new TbAwsSqsConsumerTemplate<>(notificationAdmin, sqsSettings, topicService.buildTopicName(transportNotificationSettings.getNotificationsTopic() + "_" + serviceInfoProvider.getServiceId()), msg -> new TbProtoQueueMsg<>(msg.getKey(), ToTransportMsg.parseFrom(msg.getData()), msg.getHeaders())); } @Override public TbQueueProducer> createToUsageStatsServiceMsgProducer() { - return new TbAwsSqsProducerTemplate<>(coreAdmin, sqsSettings, coreSettings.getUsageStatsTopic()); + return new TbAwsSqsProducerTemplate<>(coreAdmin, sqsSettings, topicService.buildTopicName(coreSettings.getUsageStatsTopic())); } @PreDestroy diff --git a/common/queue/src/main/java/org/thingsboard/server/queue/provider/InMemoryMonolithQueueFactory.java b/common/queue/src/main/java/org/thingsboard/server/queue/provider/InMemoryMonolithQueueFactory.java index 87fc8aa3db..933daac0df 100644 --- a/common/queue/src/main/java/org/thingsboard/server/queue/provider/InMemoryMonolithQueueFactory.java +++ b/common/queue/src/main/java/org/thingsboard/server/queue/provider/InMemoryMonolithQueueFactory.java @@ -28,7 +28,7 @@ import org.thingsboard.server.queue.TbQueueProducer; import org.thingsboard.server.queue.TbQueueRequestTemplate; import org.thingsboard.server.queue.common.TbProtoJsQueueMsg; import org.thingsboard.server.queue.common.TbProtoQueueMsg; -import org.thingsboard.server.queue.discovery.NotificationsTopicService; +import org.thingsboard.server.queue.discovery.TopicService; import org.thingsboard.server.queue.discovery.TbServiceInfoProvider; import org.thingsboard.server.queue.memory.InMemoryStorage; import org.thingsboard.server.queue.memory.InMemoryTbQueueConsumer; @@ -44,7 +44,7 @@ import org.thingsboard.server.queue.settings.TbQueueVersionControlSettings; @ConditionalOnExpression("'${queue.type:null}'=='in-memory' && '${service.type:null}'=='monolith'") public class InMemoryMonolithQueueFactory implements TbCoreQueueFactory, TbRuleEngineQueueFactory, TbVersionControlQueueFactory { - private final NotificationsTopicService notificationsTopicService; + private final TopicService topicService; private final TbQueueCoreSettings coreSettings; private final TbServiceInfoProvider serviceInfoProvider; private final TbQueueRuleEngineSettings ruleEngineSettings; @@ -53,14 +53,14 @@ public class InMemoryMonolithQueueFactory implements TbCoreQueueFactory, TbRuleE private final TbQueueTransportNotificationSettings transportNotificationSettings; private final InMemoryStorage storage; - public InMemoryMonolithQueueFactory(NotificationsTopicService notificationsTopicService, TbQueueCoreSettings coreSettings, + public InMemoryMonolithQueueFactory(TopicService topicService, TbQueueCoreSettings coreSettings, TbQueueRuleEngineSettings ruleEngineSettings, TbQueueVersionControlSettings vcSettings, TbServiceInfoProvider serviceInfoProvider, TbQueueTransportApiSettings transportApiSettings, TbQueueTransportNotificationSettings transportNotificationSettings, InMemoryStorage storage) { - this.notificationsTopicService = notificationsTopicService; + this.topicService = topicService; this.coreSettings = coreSettings; this.vcSettings = vcSettings; this.serviceInfoProvider = serviceInfoProvider; @@ -72,62 +72,62 @@ public class InMemoryMonolithQueueFactory implements TbCoreQueueFactory, TbRuleE @Override public TbQueueProducer> createTransportNotificationsMsgProducer() { - return new InMemoryTbQueueProducer<>(storage, transportNotificationSettings.getNotificationsTopic()); + return new InMemoryTbQueueProducer<>(storage, topicService.buildTopicName(transportNotificationSettings.getNotificationsTopic())); } @Override public TbQueueProducer> createRuleEngineMsgProducer() { - return new InMemoryTbQueueProducer<>(storage, ruleEngineSettings.getTopic()); + return new InMemoryTbQueueProducer<>(storage, topicService.buildTopicName(ruleEngineSettings.getTopic())); } @Override public TbQueueProducer> createRuleEngineNotificationsMsgProducer() { - return new InMemoryTbQueueProducer<>(storage, ruleEngineSettings.getTopic()); + return new InMemoryTbQueueProducer<>(storage, topicService.buildTopicName(ruleEngineSettings.getTopic())); } @Override public TbQueueProducer> createTbCoreMsgProducer() { - return new InMemoryTbQueueProducer<>(storage, coreSettings.getTopic()); + return new InMemoryTbQueueProducer<>(storage, topicService.buildTopicName(coreSettings.getTopic())); } @Override public TbQueueProducer> createTbCoreNotificationsMsgProducer() { - return new InMemoryTbQueueProducer<>(storage, coreSettings.getTopic()); + return new InMemoryTbQueueProducer<>(storage, topicService.buildTopicName(coreSettings.getTopic())); } @Override public TbQueueConsumer> createToVersionControlMsgConsumer() { - return new InMemoryTbQueueConsumer<>(storage, vcSettings.getTopic()); + return new InMemoryTbQueueConsumer<>(storage, topicService.buildTopicName(vcSettings.getTopic())); } @Override public TbQueueConsumer> createToRuleEngineMsgConsumer(Queue configuration) { - return new InMemoryTbQueueConsumer<>(storage, configuration.getTopic()); + return new InMemoryTbQueueConsumer<>(storage, topicService.buildTopicName(configuration.getTopic())); } @Override public TbQueueConsumer> createToRuleEngineNotificationsMsgConsumer() { - return new InMemoryTbQueueConsumer<>(storage, notificationsTopicService.getNotificationsTopic(ServiceType.TB_RULE_ENGINE, serviceInfoProvider.getServiceId()).getFullTopicName()); + return new InMemoryTbQueueConsumer<>(storage, topicService.getNotificationsTopic(ServiceType.TB_RULE_ENGINE, serviceInfoProvider.getServiceId()).getFullTopicName()); } @Override public TbQueueConsumer> createToCoreMsgConsumer() { - return new InMemoryTbQueueConsumer<>(storage, coreSettings.getTopic()); + return new InMemoryTbQueueConsumer<>(storage, topicService.buildTopicName(coreSettings.getTopic())); } @Override public TbQueueConsumer> createToCoreNotificationsMsgConsumer() { - return new InMemoryTbQueueConsumer<>(storage, notificationsTopicService.getNotificationsTopic(ServiceType.TB_CORE, serviceInfoProvider.getServiceId()).getFullTopicName()); + return new InMemoryTbQueueConsumer<>(storage, topicService.getNotificationsTopic(ServiceType.TB_CORE, serviceInfoProvider.getServiceId()).getFullTopicName()); } @Override public TbQueueConsumer> createTransportApiRequestConsumer() { - return new InMemoryTbQueueConsumer<>(storage, transportApiSettings.getRequestsTopic()); + return new InMemoryTbQueueConsumer<>(storage, topicService.buildTopicName(transportApiSettings.getRequestsTopic())); } @Override public TbQueueProducer> createTransportApiResponseProducer() { - return new InMemoryTbQueueProducer<>(storage, transportApiSettings.getResponsesTopic()); + return new InMemoryTbQueueProducer<>(storage, topicService.buildTopicName(transportApiSettings.getResponsesTopic())); } @Override @@ -137,27 +137,27 @@ public class InMemoryMonolithQueueFactory implements TbCoreQueueFactory, TbRuleE @Override public TbQueueConsumer> createToUsageStatsServiceMsgConsumer() { - return new InMemoryTbQueueConsumer<>(storage, coreSettings.getUsageStatsTopic()); + return new InMemoryTbQueueConsumer<>(storage, topicService.buildTopicName(coreSettings.getUsageStatsTopic())); } @Override public TbQueueConsumer> createToOtaPackageStateServiceMsgConsumer() { - return new InMemoryTbQueueConsumer<>(storage, coreSettings.getOtaPackageTopic()); + return new InMemoryTbQueueConsumer<>(storage, topicService.buildTopicName(coreSettings.getOtaPackageTopic())); } @Override public TbQueueProducer> createToOtaPackageStateServiceMsgProducer() { - return new InMemoryTbQueueProducer<>(storage, coreSettings.getOtaPackageTopic()); + return new InMemoryTbQueueProducer<>(storage, topicService.buildTopicName(coreSettings.getOtaPackageTopic())); } @Override public TbQueueProducer> createToUsageStatsServiceMsgProducer() { - return new InMemoryTbQueueProducer<>(storage, coreSettings.getUsageStatsTopic()); + return new InMemoryTbQueueProducer<>(storage, topicService.buildTopicName(coreSettings.getUsageStatsTopic())); } @Override public TbQueueProducer> createVersionControlMsgProducer() { - return new InMemoryTbQueueProducer<>(storage, vcSettings.getTopic()); + return new InMemoryTbQueueProducer<>(storage, topicService.buildTopicName(vcSettings.getTopic())); } @Scheduled(fixedRateString = "${queue.in_memory.stats.print-interval-ms:60000}") diff --git a/common/queue/src/main/java/org/thingsboard/server/queue/provider/InMemoryTbTransportQueueFactory.java b/common/queue/src/main/java/org/thingsboard/server/queue/provider/InMemoryTbTransportQueueFactory.java index a789816c34..f578079a4f 100644 --- a/common/queue/src/main/java/org/thingsboard/server/queue/provider/InMemoryTbTransportQueueFactory.java +++ b/common/queue/src/main/java/org/thingsboard/server/queue/provider/InMemoryTbTransportQueueFactory.java @@ -32,6 +32,7 @@ import org.thingsboard.server.queue.TbQueueRequestTemplate; import org.thingsboard.server.queue.common.DefaultTbQueueRequestTemplate; import org.thingsboard.server.queue.common.TbProtoQueueMsg; import org.thingsboard.server.queue.discovery.TbServiceInfoProvider; +import org.thingsboard.server.queue.discovery.TopicService; import org.thingsboard.server.queue.memory.InMemoryStorage; import org.thingsboard.server.queue.memory.InMemoryTbQueueConsumer; import org.thingsboard.server.queue.memory.InMemoryTbQueueProducer; @@ -48,26 +49,29 @@ public class InMemoryTbTransportQueueFactory implements TbTransportQueueFactory private final TbServiceInfoProvider serviceInfoProvider; private final TbQueueCoreSettings coreSettings; private final InMemoryStorage storage; + private final TopicService topicService; public InMemoryTbTransportQueueFactory(TbQueueTransportApiSettings transportApiSettings, TbQueueTransportNotificationSettings transportNotificationSettings, TbServiceInfoProvider serviceInfoProvider, TbQueueCoreSettings coreSettings, - InMemoryStorage storage) { + InMemoryStorage storage, + TopicService topicService) { this.transportApiSettings = transportApiSettings; this.transportNotificationSettings = transportNotificationSettings; this.serviceInfoProvider = serviceInfoProvider; this.coreSettings = coreSettings; this.storage = storage; + this.topicService = topicService; } @Override public TbQueueRequestTemplate, TbProtoQueueMsg> createTransportApiRequestTemplate() { InMemoryTbQueueProducer> producerTemplate = - new InMemoryTbQueueProducer<>(storage, transportApiSettings.getRequestsTopic()); + new InMemoryTbQueueProducer<>(storage, topicService.buildTopicName(transportApiSettings.getRequestsTopic())); InMemoryTbQueueConsumer> consumerTemplate = - new InMemoryTbQueueConsumer<>(storage, transportApiSettings.getResponsesTopic() + "." + serviceInfoProvider.getServiceId()); + new InMemoryTbQueueConsumer<>(storage, topicService.buildTopicName(transportApiSettings.getResponsesTopic() + "." + serviceInfoProvider.getServiceId())); DefaultTbQueueRequestTemplate.DefaultTbQueueRequestTemplateBuilder , TbProtoQueueMsg> templateBuilder = DefaultTbQueueRequestTemplate.builder(); @@ -93,27 +97,27 @@ public class InMemoryTbTransportQueueFactory implements TbTransportQueueFactory @Override public TbQueueProducer> createRuleEngineMsgProducer() { - return new InMemoryTbQueueProducer<>(storage, transportApiSettings.getRequestsTopic()); + return new InMemoryTbQueueProducer<>(storage, topicService.buildTopicName(transportApiSettings.getRequestsTopic())); } @Override public TbQueueProducer> createTbCoreMsgProducer() { - return new InMemoryTbQueueProducer<>(storage, coreSettings.getTopic()); + return new InMemoryTbQueueProducer<>(storage, topicService.buildTopicName(coreSettings.getTopic())); } @Override public TbQueueProducer> createTbCoreNotificationsMsgProducer() { - return new InMemoryTbQueueProducer<>(storage, coreSettings.getTopic()); + return new InMemoryTbQueueProducer<>(storage, topicService.buildTopicName(coreSettings.getTopic())); } @Override public TbQueueConsumer> createTransportNotificationsConsumer() { - return new InMemoryTbQueueConsumer<>(storage, transportNotificationSettings.getNotificationsTopic() + "." + serviceInfoProvider.getServiceId()); + return new InMemoryTbQueueConsumer<>(storage, topicService.buildTopicName(transportNotificationSettings.getNotificationsTopic() + "." + serviceInfoProvider.getServiceId())); } @Override public TbQueueProducer> createToUsageStatsServiceMsgProducer() { - return new InMemoryTbQueueProducer<>(storage, coreSettings.getUsageStatsTopic()); + return new InMemoryTbQueueProducer<>(storage, topicService.buildTopicName(coreSettings.getUsageStatsTopic())); } } diff --git a/common/queue/src/main/java/org/thingsboard/server/queue/provider/KafkaMonolithQueueFactory.java b/common/queue/src/main/java/org/thingsboard/server/queue/provider/KafkaMonolithQueueFactory.java index 55050ce08c..0e3721d215 100644 --- a/common/queue/src/main/java/org/thingsboard/server/queue/provider/KafkaMonolithQueueFactory.java +++ b/common/queue/src/main/java/org/thingsboard/server/queue/provider/KafkaMonolithQueueFactory.java @@ -39,7 +39,7 @@ import org.thingsboard.server.queue.TbQueueRequestTemplate; import org.thingsboard.server.queue.common.DefaultTbQueueRequestTemplate; import org.thingsboard.server.queue.common.TbProtoJsQueueMsg; import org.thingsboard.server.queue.common.TbProtoQueueMsg; -import org.thingsboard.server.queue.discovery.NotificationsTopicService; +import org.thingsboard.server.queue.discovery.TopicService; import org.thingsboard.server.queue.discovery.TbServiceInfoProvider; import org.thingsboard.server.queue.kafka.TbKafkaAdmin; import org.thingsboard.server.queue.kafka.TbKafkaConsumerStatsService; @@ -62,7 +62,7 @@ import java.util.concurrent.atomic.AtomicLong; @ConditionalOnExpression("'${queue.type:null}'=='kafka' && '${service.type:null}'=='monolith'") public class KafkaMonolithQueueFactory implements TbCoreQueueFactory, TbRuleEngineQueueFactory, TbVersionControlQueueFactory { - private final NotificationsTopicService notificationsTopicService; + private final TopicService topicService; private final TbKafkaSettings kafkaSettings; private final TbServiceInfoProvider serviceInfoProvider; private final TbQueueCoreSettings coreSettings; @@ -85,7 +85,7 @@ public class KafkaMonolithQueueFactory implements TbCoreQueueFactory, TbRuleEngi private final AtomicLong consumerCount = new AtomicLong(); - public KafkaMonolithQueueFactory(NotificationsTopicService notificationsTopicService, TbKafkaSettings kafkaSettings, + public KafkaMonolithQueueFactory(TopicService topicService, TbKafkaSettings kafkaSettings, TbServiceInfoProvider serviceInfoProvider, TbQueueCoreSettings coreSettings, TbQueueRuleEngineSettings ruleEngineSettings, @@ -95,7 +95,7 @@ public class KafkaMonolithQueueFactory implements TbCoreQueueFactory, TbRuleEngi TbQueueVersionControlSettings vcSettings, TbKafkaConsumerStatsService consumerStatsService, TbKafkaTopicConfigs kafkaTopicConfigs) { - this.notificationsTopicService = notificationsTopicService; + this.topicService = topicService; this.kafkaSettings = kafkaSettings; this.serviceInfoProvider = serviceInfoProvider; this.coreSettings = coreSettings; @@ -122,7 +122,7 @@ public class KafkaMonolithQueueFactory implements TbCoreQueueFactory, TbRuleEngi TbKafkaProducerTemplate.TbKafkaProducerTemplateBuilder> requestBuilder = TbKafkaProducerTemplate.builder(); requestBuilder.settings(kafkaSettings); requestBuilder.clientId("monolith-transport-notifications-" + serviceInfoProvider.getServiceId()); - requestBuilder.defaultTopic(transportNotificationSettings.getNotificationsTopic()); + requestBuilder.defaultTopic(topicService.buildTopicName(transportNotificationSettings.getNotificationsTopic())); requestBuilder.admin(notificationAdmin); return requestBuilder.build(); } @@ -132,7 +132,7 @@ public class KafkaMonolithQueueFactory implements TbCoreQueueFactory, TbRuleEngi TbKafkaProducerTemplate.TbKafkaProducerTemplateBuilder> requestBuilder = TbKafkaProducerTemplate.builder(); requestBuilder.settings(kafkaSettings); requestBuilder.clientId("monolith-rule-engine-" + serviceInfoProvider.getServiceId()); - requestBuilder.defaultTopic(ruleEngineSettings.getTopic()); + requestBuilder.defaultTopic(topicService.buildTopicName(ruleEngineSettings.getTopic())); requestBuilder.admin(ruleEngineAdmin); return requestBuilder.build(); } @@ -142,7 +142,7 @@ public class KafkaMonolithQueueFactory implements TbCoreQueueFactory, TbRuleEngi TbKafkaProducerTemplate.TbKafkaProducerTemplateBuilder> requestBuilder = TbKafkaProducerTemplate.builder(); requestBuilder.settings(kafkaSettings); requestBuilder.clientId("monolith-rule-engine-notifications-" + serviceInfoProvider.getServiceId()); - requestBuilder.defaultTopic(ruleEngineSettings.getTopic()); + requestBuilder.defaultTopic(topicService.buildTopicName(ruleEngineSettings.getTopic())); requestBuilder.admin(notificationAdmin); return requestBuilder.build(); } @@ -152,7 +152,7 @@ public class KafkaMonolithQueueFactory implements TbCoreQueueFactory, TbRuleEngi TbKafkaProducerTemplate.TbKafkaProducerTemplateBuilder> requestBuilder = TbKafkaProducerTemplate.builder(); requestBuilder.settings(kafkaSettings); requestBuilder.clientId("monolith-core-" + serviceInfoProvider.getServiceId()); - requestBuilder.defaultTopic(coreSettings.getTopic()); + requestBuilder.defaultTopic(topicService.buildTopicName(coreSettings.getTopic())); requestBuilder.admin(coreAdmin); return requestBuilder.build(); } @@ -162,7 +162,7 @@ public class KafkaMonolithQueueFactory implements TbCoreQueueFactory, TbRuleEngi TbKafkaProducerTemplate.TbKafkaProducerTemplateBuilder> requestBuilder = TbKafkaProducerTemplate.builder(); requestBuilder.settings(kafkaSettings); requestBuilder.clientId("monolith-core-notifications-" + serviceInfoProvider.getServiceId()); - requestBuilder.defaultTopic(coreSettings.getTopic()); + requestBuilder.defaultTopic(topicService.buildTopicName(coreSettings.getTopic())); requestBuilder.admin(notificationAdmin); return requestBuilder.build(); } @@ -171,9 +171,9 @@ public class KafkaMonolithQueueFactory implements TbCoreQueueFactory, TbRuleEngi public TbQueueConsumer> createToVersionControlMsgConsumer() { TbKafkaConsumerTemplate.TbKafkaConsumerTemplateBuilder> consumerBuilder = TbKafkaConsumerTemplate.builder(); consumerBuilder.settings(kafkaSettings); - consumerBuilder.topic(vcSettings.getTopic()); + consumerBuilder.topic(topicService.buildTopicName(vcSettings.getTopic())); consumerBuilder.clientId("monolith-vc-consumer-" + serviceInfoProvider.getServiceId()); - consumerBuilder.groupId("monolith-vc-node"); + consumerBuilder.groupId(topicService.buildTopicName("monolith-vc-node")); consumerBuilder.decoder(msg -> new TbProtoQueueMsg<>(msg.getKey(), TransportProtos.ToVersionControlServiceMsg.parseFrom(msg.getData()), msg.getHeaders())); consumerBuilder.admin(vcAdmin); consumerBuilder.statsService(consumerStatsService); @@ -185,9 +185,9 @@ public class KafkaMonolithQueueFactory implements TbCoreQueueFactory, TbRuleEngi String queueName = configuration.getName(); TbKafkaConsumerTemplate.TbKafkaConsumerTemplateBuilder> consumerBuilder = TbKafkaConsumerTemplate.builder(); consumerBuilder.settings(kafkaSettings); - consumerBuilder.topic(configuration.getTopic()); + consumerBuilder.topic(topicService.buildTopicName(configuration.getTopic())); consumerBuilder.clientId("re-" + queueName + "-consumer-" + serviceInfoProvider.getServiceId() + "-" + consumerCount.incrementAndGet()); - consumerBuilder.groupId("re-" + queueName + (configuration.getTenantId().isSysTenantId() ? "" : ("-isolated-" + configuration.getTenantId())) + "-consumer"); + consumerBuilder.groupId(topicService.buildTopicName("re-" + queueName + (configuration.getTenantId().isSysTenantId() ? "" : ("-isolated-" + configuration.getTenantId())) + "-consumer")); consumerBuilder.decoder(msg -> new TbProtoQueueMsg<>(msg.getKey(), ToRuleEngineMsg.parseFrom(msg.getData()), msg.getHeaders())); consumerBuilder.admin(ruleEngineAdmin); consumerBuilder.statsService(consumerStatsService); @@ -198,9 +198,9 @@ public class KafkaMonolithQueueFactory implements TbCoreQueueFactory, TbRuleEngi public TbQueueConsumer> createToRuleEngineNotificationsMsgConsumer() { TbKafkaConsumerTemplate.TbKafkaConsumerTemplateBuilder> consumerBuilder = TbKafkaConsumerTemplate.builder(); consumerBuilder.settings(kafkaSettings); - consumerBuilder.topic(notificationsTopicService.getNotificationsTopic(ServiceType.TB_RULE_ENGINE, serviceInfoProvider.getServiceId()).getFullTopicName()); + consumerBuilder.topic(topicService.getNotificationsTopic(ServiceType.TB_RULE_ENGINE, serviceInfoProvider.getServiceId()).getFullTopicName()); consumerBuilder.clientId("monolith-rule-engine-notifications-consumer-" + serviceInfoProvider.getServiceId()); - consumerBuilder.groupId("monolith-rule-engine-notifications-consumer-" + serviceInfoProvider.getServiceId()); + consumerBuilder.groupId(topicService.buildTopicName("monolith-rule-engine-notifications-consumer-" + serviceInfoProvider.getServiceId())); consumerBuilder.decoder(msg -> new TbProtoQueueMsg<>(msg.getKey(), ToRuleEngineNotificationMsg.parseFrom(msg.getData()), msg.getHeaders())); consumerBuilder.admin(notificationAdmin); consumerBuilder.statsService(consumerStatsService); @@ -211,9 +211,9 @@ public class KafkaMonolithQueueFactory implements TbCoreQueueFactory, TbRuleEngi public TbQueueConsumer> createToCoreMsgConsumer() { TbKafkaConsumerTemplate.TbKafkaConsumerTemplateBuilder> consumerBuilder = TbKafkaConsumerTemplate.builder(); consumerBuilder.settings(kafkaSettings); - consumerBuilder.topic(coreSettings.getTopic()); + consumerBuilder.topic(topicService.buildTopicName(coreSettings.getTopic())); consumerBuilder.clientId("monolith-core-consumer-" + serviceInfoProvider.getServiceId()); - consumerBuilder.groupId("monolith-core-consumer"); + consumerBuilder.groupId(topicService.buildTopicName("monolith-core-consumer")); consumerBuilder.decoder(msg -> new TbProtoQueueMsg<>(msg.getKey(), ToCoreMsg.parseFrom(msg.getData()), msg.getHeaders())); consumerBuilder.admin(coreAdmin); consumerBuilder.statsService(consumerStatsService); @@ -224,9 +224,9 @@ public class KafkaMonolithQueueFactory implements TbCoreQueueFactory, TbRuleEngi public TbQueueConsumer> createToCoreNotificationsMsgConsumer() { TbKafkaConsumerTemplate.TbKafkaConsumerTemplateBuilder> consumerBuilder = TbKafkaConsumerTemplate.builder(); consumerBuilder.settings(kafkaSettings); - consumerBuilder.topic(notificationsTopicService.getNotificationsTopic(ServiceType.TB_CORE, serviceInfoProvider.getServiceId()).getFullTopicName()); + consumerBuilder.topic(topicService.getNotificationsTopic(ServiceType.TB_CORE, serviceInfoProvider.getServiceId()).getFullTopicName()); consumerBuilder.clientId("monolith-core-notifications-consumer-" + serviceInfoProvider.getServiceId()); - consumerBuilder.groupId("monolith-core-notifications-consumer-" + serviceInfoProvider.getServiceId()); + consumerBuilder.groupId(topicService.buildTopicName("monolith-core-notifications-consumer-" + serviceInfoProvider.getServiceId())); consumerBuilder.decoder(msg -> new TbProtoQueueMsg<>(msg.getKey(), ToCoreNotificationMsg.parseFrom(msg.getData()), msg.getHeaders())); consumerBuilder.admin(notificationAdmin); consumerBuilder.statsService(consumerStatsService); @@ -237,9 +237,9 @@ public class KafkaMonolithQueueFactory implements TbCoreQueueFactory, TbRuleEngi public TbQueueConsumer> createTransportApiRequestConsumer() { TbKafkaConsumerTemplate.TbKafkaConsumerTemplateBuilder> consumerBuilder = TbKafkaConsumerTemplate.builder(); consumerBuilder.settings(kafkaSettings); - consumerBuilder.topic(transportApiSettings.getRequestsTopic()); + consumerBuilder.topic(topicService.buildTopicName(transportApiSettings.getRequestsTopic())); consumerBuilder.clientId("monolith-transport-api-consumer-" + serviceInfoProvider.getServiceId()); - consumerBuilder.groupId("monolith-transport-api-consumer"); + consumerBuilder.groupId(topicService.buildTopicName("monolith-transport-api-consumer")); consumerBuilder.decoder(msg -> new TbProtoQueueMsg<>(msg.getKey(), TransportApiRequestMsg.parseFrom(msg.getData()), msg.getHeaders())); consumerBuilder.admin(transportApiRequestAdmin); consumerBuilder.statsService(consumerStatsService); @@ -251,7 +251,7 @@ public class KafkaMonolithQueueFactory implements TbCoreQueueFactory, TbRuleEngi TbKafkaProducerTemplate.TbKafkaProducerTemplateBuilder> requestBuilder = TbKafkaProducerTemplate.builder(); requestBuilder.settings(kafkaSettings); requestBuilder.clientId("monolith-transport-api-producer-" + serviceInfoProvider.getServiceId()); - requestBuilder.defaultTopic(transportApiSettings.getResponsesTopic()); + requestBuilder.defaultTopic(topicService.buildTopicName(transportApiSettings.getResponsesTopic())); requestBuilder.admin(transportApiResponseAdmin); return requestBuilder.build(); } @@ -294,9 +294,9 @@ public class KafkaMonolithQueueFactory implements TbCoreQueueFactory, TbRuleEngi public TbQueueConsumer> createToUsageStatsServiceMsgConsumer() { TbKafkaConsumerTemplate.TbKafkaConsumerTemplateBuilder> consumerBuilder = TbKafkaConsumerTemplate.builder(); consumerBuilder.settings(kafkaSettings); - consumerBuilder.topic(coreSettings.getUsageStatsTopic()); + consumerBuilder.topic(topicService.buildTopicName(coreSettings.getUsageStatsTopic())); consumerBuilder.clientId("monolith-us-consumer-" + serviceInfoProvider.getServiceId()); - consumerBuilder.groupId("monolith-us-consumer"); + consumerBuilder.groupId(topicService.buildTopicName("monolith-us-consumer")); consumerBuilder.decoder(msg -> new TbProtoQueueMsg<>(msg.getKey(), ToUsageStatsServiceMsg.parseFrom(msg.getData()), msg.getHeaders())); consumerBuilder.admin(coreAdmin); consumerBuilder.statsService(consumerStatsService); @@ -307,9 +307,9 @@ public class KafkaMonolithQueueFactory implements TbCoreQueueFactory, TbRuleEngi public TbQueueConsumer> createToOtaPackageStateServiceMsgConsumer() { TbKafkaConsumerTemplate.TbKafkaConsumerTemplateBuilder> consumerBuilder = TbKafkaConsumerTemplate.builder(); consumerBuilder.settings(kafkaSettings); - consumerBuilder.topic(coreSettings.getOtaPackageTopic()); + consumerBuilder.topic(topicService.buildTopicName(coreSettings.getOtaPackageTopic())); consumerBuilder.clientId("monolith-ota-consumer-" + serviceInfoProvider.getServiceId()); - consumerBuilder.groupId("monolith-ota-consumer"); + consumerBuilder.groupId(topicService.buildTopicName("monolith-ota-consumer")); consumerBuilder.decoder(msg -> new TbProtoQueueMsg<>(msg.getKey(), ToOtaPackageStateServiceMsg.parseFrom(msg.getData()), msg.getHeaders())); consumerBuilder.admin(fwUpdatesAdmin); consumerBuilder.statsService(consumerStatsService); @@ -321,7 +321,7 @@ public class KafkaMonolithQueueFactory implements TbCoreQueueFactory, TbRuleEngi TbKafkaProducerTemplate.TbKafkaProducerTemplateBuilder> requestBuilder = TbKafkaProducerTemplate.builder(); requestBuilder.settings(kafkaSettings); requestBuilder.clientId("monolith-ota-producer-" + serviceInfoProvider.getServiceId()); - requestBuilder.defaultTopic(coreSettings.getOtaPackageTopic()); + requestBuilder.defaultTopic(topicService.buildTopicName(coreSettings.getOtaPackageTopic())); requestBuilder.admin(fwUpdatesAdmin); return requestBuilder.build(); } @@ -331,7 +331,7 @@ public class KafkaMonolithQueueFactory implements TbCoreQueueFactory, TbRuleEngi TbKafkaProducerTemplate.TbKafkaProducerTemplateBuilder> requestBuilder = TbKafkaProducerTemplate.builder(); requestBuilder.settings(kafkaSettings); requestBuilder.clientId("monolith-us-producer-" + serviceInfoProvider.getServiceId()); - requestBuilder.defaultTopic(coreSettings.getUsageStatsTopic()); + requestBuilder.defaultTopic(topicService.buildTopicName(coreSettings.getUsageStatsTopic())); requestBuilder.admin(coreAdmin); return requestBuilder.build(); } @@ -341,7 +341,7 @@ public class KafkaMonolithQueueFactory implements TbCoreQueueFactory, TbRuleEngi TbKafkaProducerTemplate.TbKafkaProducerTemplateBuilder> requestBuilder = TbKafkaProducerTemplate.builder(); requestBuilder.settings(kafkaSettings); requestBuilder.clientId("monolith-vc-producer-" + serviceInfoProvider.getServiceId()); - requestBuilder.defaultTopic(vcSettings.getTopic()); + requestBuilder.defaultTopic(topicService.buildTopicName(vcSettings.getTopic())); requestBuilder.admin(vcAdmin); return requestBuilder.build(); } diff --git a/common/queue/src/main/java/org/thingsboard/server/queue/provider/KafkaTbCoreQueueFactory.java b/common/queue/src/main/java/org/thingsboard/server/queue/provider/KafkaTbCoreQueueFactory.java index 9c25a5d420..09dd7d8820 100644 --- a/common/queue/src/main/java/org/thingsboard/server/queue/provider/KafkaTbCoreQueueFactory.java +++ b/common/queue/src/main/java/org/thingsboard/server/queue/provider/KafkaTbCoreQueueFactory.java @@ -38,7 +38,7 @@ import org.thingsboard.server.queue.TbQueueRequestTemplate; import org.thingsboard.server.queue.common.DefaultTbQueueRequestTemplate; import org.thingsboard.server.queue.common.TbProtoJsQueueMsg; import org.thingsboard.server.queue.common.TbProtoQueueMsg; -import org.thingsboard.server.queue.discovery.NotificationsTopicService; +import org.thingsboard.server.queue.discovery.TopicService; import org.thingsboard.server.queue.discovery.TbServiceInfoProvider; import org.thingsboard.server.queue.kafka.TbKafkaAdmin; import org.thingsboard.server.queue.kafka.TbKafkaConsumerStatsService; @@ -60,7 +60,7 @@ import java.nio.charset.StandardCharsets; @ConditionalOnExpression("'${queue.type:null}'=='kafka' && '${service.type:null}'=='tb-core'") public class KafkaTbCoreQueueFactory implements TbCoreQueueFactory { - private final NotificationsTopicService notificationsTopicService; + private final TopicService topicService; private final TbKafkaSettings kafkaSettings; private final TbServiceInfoProvider serviceInfoProvider; private final TbQueueCoreSettings coreSettings; @@ -81,7 +81,7 @@ public class KafkaTbCoreQueueFactory implements TbCoreQueueFactory { private final TbQueueAdmin fwUpdatesAdmin; private final TbQueueAdmin vcAdmin; - public KafkaTbCoreQueueFactory(NotificationsTopicService notificationsTopicService, + public KafkaTbCoreQueueFactory(TopicService topicService, TbKafkaSettings kafkaSettings, TbServiceInfoProvider serviceInfoProvider, TbQueueCoreSettings coreSettings, @@ -92,7 +92,7 @@ public class KafkaTbCoreQueueFactory implements TbCoreQueueFactory { TbKafkaConsumerStatsService consumerStatsService, TbQueueTransportNotificationSettings transportNotificationSettings, TbKafkaTopicConfigs kafkaTopicConfigs) { - this.notificationsTopicService = notificationsTopicService; + this.topicService = topicService; this.kafkaSettings = kafkaSettings; this.serviceInfoProvider = serviceInfoProvider; this.coreSettings = coreSettings; @@ -119,7 +119,7 @@ public class KafkaTbCoreQueueFactory implements TbCoreQueueFactory { TbKafkaProducerTemplate.TbKafkaProducerTemplateBuilder> requestBuilder = TbKafkaProducerTemplate.builder(); requestBuilder.settings(kafkaSettings); requestBuilder.clientId("tb-core-transport-notifications-" + serviceInfoProvider.getServiceId()); - requestBuilder.defaultTopic(transportNotificationSettings.getNotificationsTopic()); + requestBuilder.defaultTopic(topicService.buildTopicName(transportNotificationSettings.getNotificationsTopic())); requestBuilder.admin(notificationAdmin); return requestBuilder.build(); } @@ -129,7 +129,7 @@ public class KafkaTbCoreQueueFactory implements TbCoreQueueFactory { TbKafkaProducerTemplate.TbKafkaProducerTemplateBuilder> requestBuilder = TbKafkaProducerTemplate.builder(); requestBuilder.settings(kafkaSettings); requestBuilder.clientId("tb-core-rule-engine-" + serviceInfoProvider.getServiceId()); - requestBuilder.defaultTopic(coreSettings.getTopic()); + requestBuilder.defaultTopic(topicService.buildTopicName(coreSettings.getTopic())); requestBuilder.admin(coreAdmin); return requestBuilder.build(); } @@ -139,7 +139,7 @@ public class KafkaTbCoreQueueFactory implements TbCoreQueueFactory { TbKafkaProducerTemplate.TbKafkaProducerTemplateBuilder> requestBuilder = TbKafkaProducerTemplate.builder(); requestBuilder.settings(kafkaSettings); requestBuilder.clientId("tb-core-rule-engine-notifications-" + serviceInfoProvider.getServiceId()); - requestBuilder.defaultTopic(ruleEngineSettings.getTopic()); + requestBuilder.defaultTopic(topicService.buildTopicName(ruleEngineSettings.getTopic())); requestBuilder.admin(notificationAdmin); return requestBuilder.build(); } @@ -149,7 +149,7 @@ public class KafkaTbCoreQueueFactory implements TbCoreQueueFactory { TbKafkaProducerTemplate.TbKafkaProducerTemplateBuilder> requestBuilder = TbKafkaProducerTemplate.builder(); requestBuilder.settings(kafkaSettings); requestBuilder.clientId("tb-core-to-core-" + serviceInfoProvider.getServiceId()); - requestBuilder.defaultTopic(coreSettings.getTopic()); + requestBuilder.defaultTopic(topicService.buildTopicName(coreSettings.getTopic())); requestBuilder.admin(coreAdmin); return requestBuilder.build(); } @@ -159,7 +159,7 @@ public class KafkaTbCoreQueueFactory implements TbCoreQueueFactory { TbKafkaProducerTemplate.TbKafkaProducerTemplateBuilder> requestBuilder = TbKafkaProducerTemplate.builder(); requestBuilder.settings(kafkaSettings); requestBuilder.clientId("tb-core-to-core-notifications-" + serviceInfoProvider.getServiceId()); - requestBuilder.defaultTopic(coreSettings.getTopic()); + requestBuilder.defaultTopic(topicService.buildTopicName(coreSettings.getTopic())); requestBuilder.admin(notificationAdmin); return requestBuilder.build(); } @@ -168,9 +168,9 @@ public class KafkaTbCoreQueueFactory implements TbCoreQueueFactory { public TbQueueConsumer> createToCoreMsgConsumer() { TbKafkaConsumerTemplate.TbKafkaConsumerTemplateBuilder> consumerBuilder = TbKafkaConsumerTemplate.builder(); consumerBuilder.settings(kafkaSettings); - consumerBuilder.topic(coreSettings.getTopic()); + consumerBuilder.topic(topicService.buildTopicName(coreSettings.getTopic())); consumerBuilder.clientId("tb-core-consumer-" + serviceInfoProvider.getServiceId()); - consumerBuilder.groupId("tb-core-node"); + consumerBuilder.groupId(topicService.buildTopicName("tb-core-node")); consumerBuilder.decoder(msg -> new TbProtoQueueMsg<>(msg.getKey(), ToCoreMsg.parseFrom(msg.getData()), msg.getHeaders())); consumerBuilder.admin(coreAdmin); consumerBuilder.statsService(consumerStatsService); @@ -181,9 +181,9 @@ public class KafkaTbCoreQueueFactory implements TbCoreQueueFactory { public TbQueueConsumer> createToCoreNotificationsMsgConsumer() { TbKafkaConsumerTemplate.TbKafkaConsumerTemplateBuilder> consumerBuilder = TbKafkaConsumerTemplate.builder(); consumerBuilder.settings(kafkaSettings); - consumerBuilder.topic(notificationsTopicService.getNotificationsTopic(ServiceType.TB_CORE, serviceInfoProvider.getServiceId()).getFullTopicName()); + consumerBuilder.topic(topicService.getNotificationsTopic(ServiceType.TB_CORE, serviceInfoProvider.getServiceId()).getFullTopicName()); consumerBuilder.clientId("tb-core-notifications-consumer-" + serviceInfoProvider.getServiceId()); - consumerBuilder.groupId("tb-core-notifications-node-" + serviceInfoProvider.getServiceId()); + consumerBuilder.groupId(topicService.buildTopicName("tb-core-notifications-node-" + serviceInfoProvider.getServiceId())); consumerBuilder.decoder(msg -> new TbProtoQueueMsg<>(msg.getKey(), ToCoreNotificationMsg.parseFrom(msg.getData()), msg.getHeaders())); consumerBuilder.admin(notificationAdmin); consumerBuilder.statsService(consumerStatsService); @@ -194,9 +194,9 @@ public class KafkaTbCoreQueueFactory implements TbCoreQueueFactory { public TbQueueConsumer> createTransportApiRequestConsumer() { TbKafkaConsumerTemplate.TbKafkaConsumerTemplateBuilder> consumerBuilder = TbKafkaConsumerTemplate.builder(); consumerBuilder.settings(kafkaSettings); - consumerBuilder.topic(transportApiSettings.getRequestsTopic()); + consumerBuilder.topic(topicService.buildTopicName(transportApiSettings.getRequestsTopic())); consumerBuilder.clientId("tb-core-transport-api-consumer-" + serviceInfoProvider.getServiceId()); - consumerBuilder.groupId("tb-core-transport-api-consumer"); + consumerBuilder.groupId(topicService.buildTopicName("tb-core-transport-api-consumer")); consumerBuilder.decoder(msg -> new TbProtoQueueMsg<>(msg.getKey(), TransportApiRequestMsg.parseFrom(msg.getData()), msg.getHeaders())); consumerBuilder.admin(transportApiRequestAdmin); consumerBuilder.statsService(consumerStatsService); @@ -208,7 +208,7 @@ public class KafkaTbCoreQueueFactory implements TbCoreQueueFactory { TbKafkaProducerTemplate.TbKafkaProducerTemplateBuilder> requestBuilder = TbKafkaProducerTemplate.builder(); requestBuilder.settings(kafkaSettings); requestBuilder.clientId("tb-core-transport-api-producer-" + serviceInfoProvider.getServiceId()); - requestBuilder.defaultTopic(transportApiSettings.getResponsesTopic()); + requestBuilder.defaultTopic(topicService.buildTopicName(transportApiSettings.getResponsesTopic())); requestBuilder.admin(transportApiResponseAdmin); return requestBuilder.build(); } @@ -251,9 +251,9 @@ public class KafkaTbCoreQueueFactory implements TbCoreQueueFactory { public TbQueueConsumer> createToUsageStatsServiceMsgConsumer() { TbKafkaConsumerTemplate.TbKafkaConsumerTemplateBuilder> consumerBuilder = TbKafkaConsumerTemplate.builder(); consumerBuilder.settings(kafkaSettings); - consumerBuilder.topic(coreSettings.getUsageStatsTopic()); + consumerBuilder.topic(topicService.buildTopicName(coreSettings.getUsageStatsTopic())); consumerBuilder.clientId("tb-core-us-consumer-" + serviceInfoProvider.getServiceId()); - consumerBuilder.groupId("tb-core-us-consumer"); + consumerBuilder.groupId(topicService.buildTopicName("tb-core-us-consumer")); consumerBuilder.decoder(msg -> new TbProtoQueueMsg<>(msg.getKey(), ToUsageStatsServiceMsg.parseFrom(msg.getData()), msg.getHeaders())); consumerBuilder.admin(coreAdmin); consumerBuilder.statsService(consumerStatsService); @@ -264,9 +264,9 @@ public class KafkaTbCoreQueueFactory implements TbCoreQueueFactory { public TbQueueConsumer> createToOtaPackageStateServiceMsgConsumer() { TbKafkaConsumerTemplate.TbKafkaConsumerTemplateBuilder> consumerBuilder = TbKafkaConsumerTemplate.builder(); consumerBuilder.settings(kafkaSettings); - consumerBuilder.topic(coreSettings.getOtaPackageTopic()); + consumerBuilder.topic(topicService.buildTopicName(coreSettings.getOtaPackageTopic())); consumerBuilder.clientId("tb-core-ota-consumer-" + serviceInfoProvider.getServiceId()); - consumerBuilder.groupId("tb-core-ota-consumer"); + consumerBuilder.groupId(topicService.buildTopicName("tb-core-ota-consumer")); consumerBuilder.decoder(msg -> new TbProtoQueueMsg<>(msg.getKey(), ToOtaPackageStateServiceMsg.parseFrom(msg.getData()), msg.getHeaders())); consumerBuilder.admin(fwUpdatesAdmin); consumerBuilder.statsService(consumerStatsService); @@ -278,7 +278,7 @@ public class KafkaTbCoreQueueFactory implements TbCoreQueueFactory { TbKafkaProducerTemplate.TbKafkaProducerTemplateBuilder> requestBuilder = TbKafkaProducerTemplate.builder(); requestBuilder.settings(kafkaSettings); requestBuilder.clientId("tb-core-ota-producer-" + serviceInfoProvider.getServiceId()); - requestBuilder.defaultTopic(coreSettings.getOtaPackageTopic()); + requestBuilder.defaultTopic(topicService.buildTopicName(coreSettings.getOtaPackageTopic())); requestBuilder.admin(fwUpdatesAdmin); return requestBuilder.build(); } @@ -288,7 +288,7 @@ public class KafkaTbCoreQueueFactory implements TbCoreQueueFactory { TbKafkaProducerTemplate.TbKafkaProducerTemplateBuilder> requestBuilder = TbKafkaProducerTemplate.builder(); requestBuilder.settings(kafkaSettings); requestBuilder.clientId("tb-core-us-producer-" + serviceInfoProvider.getServiceId()); - requestBuilder.defaultTopic(coreSettings.getUsageStatsTopic()); + requestBuilder.defaultTopic(topicService.buildTopicName(coreSettings.getUsageStatsTopic())); requestBuilder.admin(coreAdmin); return requestBuilder.build(); } @@ -298,7 +298,7 @@ public class KafkaTbCoreQueueFactory implements TbCoreQueueFactory { TbKafkaProducerTemplate.TbKafkaProducerTemplateBuilder> requestBuilder = TbKafkaProducerTemplate.builder(); requestBuilder.settings(kafkaSettings); requestBuilder.clientId("tb-core-vc-producer-" + serviceInfoProvider.getServiceId()); - requestBuilder.defaultTopic(vcSettings.getTopic()); + requestBuilder.defaultTopic(topicService.buildTopicName(vcSettings.getTopic())); requestBuilder.admin(vcAdmin); return requestBuilder.build(); } diff --git a/common/queue/src/main/java/org/thingsboard/server/queue/provider/KafkaTbRuleEngineQueueFactory.java b/common/queue/src/main/java/org/thingsboard/server/queue/provider/KafkaTbRuleEngineQueueFactory.java index cb063b6a7f..2baaf08640 100644 --- a/common/queue/src/main/java/org/thingsboard/server/queue/provider/KafkaTbRuleEngineQueueFactory.java +++ b/common/queue/src/main/java/org/thingsboard/server/queue/provider/KafkaTbRuleEngineQueueFactory.java @@ -36,7 +36,7 @@ import org.thingsboard.server.queue.TbQueueRequestTemplate; import org.thingsboard.server.queue.common.DefaultTbQueueRequestTemplate; import org.thingsboard.server.queue.common.TbProtoJsQueueMsg; import org.thingsboard.server.queue.common.TbProtoQueueMsg; -import org.thingsboard.server.queue.discovery.NotificationsTopicService; +import org.thingsboard.server.queue.discovery.TopicService; import org.thingsboard.server.queue.discovery.TbServiceInfoProvider; import org.thingsboard.server.queue.kafka.TbKafkaAdmin; import org.thingsboard.server.queue.kafka.TbKafkaConsumerStatsService; @@ -57,7 +57,7 @@ import java.util.concurrent.atomic.AtomicLong; @ConditionalOnExpression("'${queue.type:null}'=='kafka' && '${service.type:null}'=='tb-rule-engine'") public class KafkaTbRuleEngineQueueFactory implements TbRuleEngineQueueFactory { - private final NotificationsTopicService notificationsTopicService; + private final TopicService topicService; private final TbKafkaSettings kafkaSettings; private final TbServiceInfoProvider serviceInfoProvider; private final TbQueueCoreSettings coreSettings; @@ -74,7 +74,7 @@ public class KafkaTbRuleEngineQueueFactory implements TbRuleEngineQueueFactory { private final TbQueueAdmin fwUpdatesAdmin; private final AtomicLong consumerCount = new AtomicLong(); - public KafkaTbRuleEngineQueueFactory(NotificationsTopicService notificationsTopicService, TbKafkaSettings kafkaSettings, + public KafkaTbRuleEngineQueueFactory(TopicService topicService, TbKafkaSettings kafkaSettings, TbServiceInfoProvider serviceInfoProvider, TbQueueCoreSettings coreSettings, TbQueueRuleEngineSettings ruleEngineSettings, @@ -82,7 +82,7 @@ public class KafkaTbRuleEngineQueueFactory implements TbRuleEngineQueueFactory { TbKafkaConsumerStatsService consumerStatsService, TbQueueTransportNotificationSettings transportNotificationSettings, TbKafkaTopicConfigs kafkaTopicConfigs) { - this.notificationsTopicService = notificationsTopicService; + this.topicService = topicService; this.kafkaSettings = kafkaSettings; this.serviceInfoProvider = serviceInfoProvider; this.coreSettings = coreSettings; @@ -104,7 +104,7 @@ public class KafkaTbRuleEngineQueueFactory implements TbRuleEngineQueueFactory { TbKafkaProducerTemplate.TbKafkaProducerTemplateBuilder> requestBuilder = TbKafkaProducerTemplate.builder(); requestBuilder.settings(kafkaSettings); requestBuilder.clientId("tb-rule-engine-transport-notifications-" + serviceInfoProvider.getServiceId()); - requestBuilder.defaultTopic(transportNotificationSettings.getNotificationsTopic()); + requestBuilder.defaultTopic(topicService.buildTopicName(transportNotificationSettings.getNotificationsTopic())); requestBuilder.admin(notificationAdmin); return requestBuilder.build(); } @@ -114,7 +114,7 @@ public class KafkaTbRuleEngineQueueFactory implements TbRuleEngineQueueFactory { TbKafkaProducerTemplate.TbKafkaProducerTemplateBuilder> requestBuilder = TbKafkaProducerTemplate.builder(); requestBuilder.settings(kafkaSettings); requestBuilder.clientId("tb-rule-engine-to-rule-engine-" + serviceInfoProvider.getServiceId()); - requestBuilder.defaultTopic(ruleEngineSettings.getTopic()); + requestBuilder.defaultTopic(topicService.buildTopicName(ruleEngineSettings.getTopic())); requestBuilder.admin(ruleEngineAdmin); return requestBuilder.build(); } @@ -124,7 +124,7 @@ public class KafkaTbRuleEngineQueueFactory implements TbRuleEngineQueueFactory { TbKafkaProducerTemplate.TbKafkaProducerTemplateBuilder> requestBuilder = TbKafkaProducerTemplate.builder(); requestBuilder.settings(kafkaSettings); requestBuilder.clientId("tb-rule-engine-to-rule-engine-notifications-" + serviceInfoProvider.getServiceId()); - requestBuilder.defaultTopic(ruleEngineSettings.getTopic()); + requestBuilder.defaultTopic(topicService.buildTopicName(ruleEngineSettings.getTopic())); requestBuilder.admin(notificationAdmin); return requestBuilder.build(); } @@ -134,7 +134,7 @@ public class KafkaTbRuleEngineQueueFactory implements TbRuleEngineQueueFactory { TbKafkaProducerTemplate.TbKafkaProducerTemplateBuilder> requestBuilder = TbKafkaProducerTemplate.builder(); requestBuilder.settings(kafkaSettings); requestBuilder.clientId("tb-rule-engine-to-core-" + serviceInfoProvider.getServiceId()); - requestBuilder.defaultTopic(coreSettings.getTopic()); + requestBuilder.defaultTopic(topicService.buildTopicName(coreSettings.getTopic())); requestBuilder.admin(coreAdmin); return requestBuilder.build(); } @@ -144,7 +144,7 @@ public class KafkaTbRuleEngineQueueFactory implements TbRuleEngineQueueFactory { TbKafkaProducerTemplate.TbKafkaProducerTemplateBuilder> requestBuilder = TbKafkaProducerTemplate.builder(); requestBuilder.settings(kafkaSettings); requestBuilder.clientId("tb-rule-engine-ota-producer-" + serviceInfoProvider.getServiceId()); - requestBuilder.defaultTopic(coreSettings.getOtaPackageTopic()); + requestBuilder.defaultTopic(topicService.buildTopicName(coreSettings.getOtaPackageTopic())); requestBuilder.admin(fwUpdatesAdmin); return requestBuilder.build(); } @@ -154,7 +154,7 @@ public class KafkaTbRuleEngineQueueFactory implements TbRuleEngineQueueFactory { TbKafkaProducerTemplate.TbKafkaProducerTemplateBuilder> requestBuilder = TbKafkaProducerTemplate.builder(); requestBuilder.settings(kafkaSettings); requestBuilder.clientId("tb-rule-engine-to-core-notifications-" + serviceInfoProvider.getServiceId()); - requestBuilder.defaultTopic(coreSettings.getTopic()); + requestBuilder.defaultTopic(topicService.buildTopicName(coreSettings.getTopic())); requestBuilder.admin(notificationAdmin); return requestBuilder.build(); } @@ -164,9 +164,9 @@ public class KafkaTbRuleEngineQueueFactory implements TbRuleEngineQueueFactory { String queueName = configuration.getName(); TbKafkaConsumerTemplate.TbKafkaConsumerTemplateBuilder> consumerBuilder = TbKafkaConsumerTemplate.builder(); consumerBuilder.settings(kafkaSettings); - consumerBuilder.topic(configuration.getTopic()); + consumerBuilder.topic(topicService.buildTopicName(configuration.getTopic())); consumerBuilder.clientId("re-" + queueName + "-consumer-" + serviceInfoProvider.getServiceId() + "-" + consumerCount.incrementAndGet()); - consumerBuilder.groupId("re-" + queueName + (configuration.getTenantId().isSysTenantId() ? "" : ("-isolated-" + configuration.getTenantId())) + "-consumer"); + consumerBuilder.groupId(topicService.buildTopicName("re-" + queueName + (configuration.getTenantId().isSysTenantId() ? "" : ("-isolated-" + configuration.getTenantId())) + "-consumer")); consumerBuilder.decoder(msg -> new TbProtoQueueMsg<>(msg.getKey(), ToRuleEngineMsg.parseFrom(msg.getData()), msg.getHeaders())); consumerBuilder.admin(ruleEngineAdmin); consumerBuilder.statsService(consumerStatsService); @@ -177,7 +177,7 @@ public class KafkaTbRuleEngineQueueFactory implements TbRuleEngineQueueFactory { public TbQueueConsumer> createToRuleEngineNotificationsMsgConsumer() { TbKafkaConsumerTemplate.TbKafkaConsumerTemplateBuilder> consumerBuilder = TbKafkaConsumerTemplate.builder(); consumerBuilder.settings(kafkaSettings); - consumerBuilder.topic(notificationsTopicService.getNotificationsTopic(ServiceType.TB_RULE_ENGINE, serviceInfoProvider.getServiceId()).getFullTopicName()); + consumerBuilder.topic(topicService.getNotificationsTopic(ServiceType.TB_RULE_ENGINE, serviceInfoProvider.getServiceId()).getFullTopicName()); consumerBuilder.clientId("tb-rule-engine-notifications-consumer-" + serviceInfoProvider.getServiceId()); consumerBuilder.groupId("tb-rule-engine-notifications-node-" + serviceInfoProvider.getServiceId()); consumerBuilder.decoder(msg -> new TbProtoQueueMsg<>(msg.getKey(), ToRuleEngineNotificationMsg.parseFrom(msg.getData()), msg.getHeaders())); @@ -225,7 +225,7 @@ public class KafkaTbRuleEngineQueueFactory implements TbRuleEngineQueueFactory { TbKafkaProducerTemplate.TbKafkaProducerTemplateBuilder> requestBuilder = TbKafkaProducerTemplate.builder(); requestBuilder.settings(kafkaSettings); requestBuilder.clientId("tb-rule-engine-us-producer-" + serviceInfoProvider.getServiceId()); - requestBuilder.defaultTopic(coreSettings.getUsageStatsTopic()); + requestBuilder.defaultTopic(topicService.buildTopicName(coreSettings.getUsageStatsTopic())); requestBuilder.admin(coreAdmin); return requestBuilder.build(); } diff --git a/common/queue/src/main/java/org/thingsboard/server/queue/provider/KafkaTbTransportQueueFactory.java b/common/queue/src/main/java/org/thingsboard/server/queue/provider/KafkaTbTransportQueueFactory.java index 300e0a44b6..11c038a2bc 100644 --- a/common/queue/src/main/java/org/thingsboard/server/queue/provider/KafkaTbTransportQueueFactory.java +++ b/common/queue/src/main/java/org/thingsboard/server/queue/provider/KafkaTbTransportQueueFactory.java @@ -33,6 +33,7 @@ import org.thingsboard.server.queue.TbQueueRequestTemplate; import org.thingsboard.server.queue.common.DefaultTbQueueRequestTemplate; import org.thingsboard.server.queue.common.TbProtoQueueMsg; import org.thingsboard.server.queue.discovery.TbServiceInfoProvider; +import org.thingsboard.server.queue.discovery.TopicService; import org.thingsboard.server.queue.kafka.TbKafkaAdmin; import org.thingsboard.server.queue.kafka.TbKafkaConsumerStatsService; import org.thingsboard.server.queue.kafka.TbKafkaConsumerTemplate; @@ -58,6 +59,7 @@ public class KafkaTbTransportQueueFactory implements TbTransportQueueFactory { private final TbQueueTransportApiSettings transportApiSettings; private final TbQueueTransportNotificationSettings transportNotificationSettings; private final TbKafkaConsumerStatsService consumerStatsService; + private final TopicService topicService; private final TbQueueAdmin coreAdmin; private final TbQueueAdmin ruleEngineAdmin; @@ -72,7 +74,8 @@ public class KafkaTbTransportQueueFactory implements TbTransportQueueFactory { TbQueueTransportApiSettings transportApiSettings, TbQueueTransportNotificationSettings transportNotificationSettings, TbKafkaConsumerStatsService consumerStatsService, - TbKafkaTopicConfigs kafkaTopicConfigs) { + TbKafkaTopicConfigs kafkaTopicConfigs, + TopicService topicService) { this.kafkaSettings = kafkaSettings; this.serviceInfoProvider = serviceInfoProvider; this.coreSettings = coreSettings; @@ -80,6 +83,7 @@ public class KafkaTbTransportQueueFactory implements TbTransportQueueFactory { this.transportApiSettings = transportApiSettings; this.transportNotificationSettings = transportNotificationSettings; this.consumerStatsService = consumerStatsService; + this.topicService = topicService; this.coreAdmin = new TbKafkaAdmin(kafkaSettings, kafkaTopicConfigs.getCoreConfigs()); this.ruleEngineAdmin = new TbKafkaAdmin(kafkaSettings, kafkaTopicConfigs.getRuleEngineConfigs()); @@ -93,14 +97,14 @@ public class KafkaTbTransportQueueFactory implements TbTransportQueueFactory { TbKafkaProducerTemplate.TbKafkaProducerTemplateBuilder> requestBuilder = TbKafkaProducerTemplate.builder(); requestBuilder.settings(kafkaSettings); requestBuilder.clientId("transport-api-request-" + serviceInfoProvider.getServiceId()); - requestBuilder.defaultTopic(transportApiSettings.getRequestsTopic()); + requestBuilder.defaultTopic(topicService.buildTopicName(transportApiSettings.getRequestsTopic())); requestBuilder.admin(transportApiRequestAdmin); TbKafkaConsumerTemplate.TbKafkaConsumerTemplateBuilder> responseBuilder = TbKafkaConsumerTemplate.builder(); responseBuilder.settings(kafkaSettings); - responseBuilder.topic(transportApiSettings.getResponsesTopic() + "." + serviceInfoProvider.getServiceId()); + responseBuilder.topic(topicService.buildTopicName(transportApiSettings.getResponsesTopic() + "." + serviceInfoProvider.getServiceId())); responseBuilder.clientId("transport-api-response-" + serviceInfoProvider.getServiceId()); - responseBuilder.groupId("transport-node-" + serviceInfoProvider.getServiceId()); + responseBuilder.groupId(topicService.buildTopicName("transport-node-" + serviceInfoProvider.getServiceId())); responseBuilder.decoder(msg -> new TbProtoQueueMsg<>(msg.getKey(), TransportApiResponseMsg.parseFrom(msg.getData()), msg.getHeaders())); responseBuilder.admin(transportApiResponseAdmin); responseBuilder.statsService(consumerStatsService); @@ -121,7 +125,7 @@ public class KafkaTbTransportQueueFactory implements TbTransportQueueFactory { TbKafkaProducerTemplate.TbKafkaProducerTemplateBuilder> requestBuilder = TbKafkaProducerTemplate.builder(); requestBuilder.settings(kafkaSettings); requestBuilder.clientId("transport-node-rule-engine-" + serviceInfoProvider.getServiceId()); - requestBuilder.defaultTopic(ruleEngineSettings.getTopic()); + requestBuilder.defaultTopic(topicService.buildTopicName(ruleEngineSettings.getTopic())); requestBuilder.admin(ruleEngineAdmin); return requestBuilder.build(); } @@ -131,7 +135,7 @@ public class KafkaTbTransportQueueFactory implements TbTransportQueueFactory { TbKafkaProducerTemplate.TbKafkaProducerTemplateBuilder> requestBuilder = TbKafkaProducerTemplate.builder(); requestBuilder.settings(kafkaSettings); requestBuilder.clientId("transport-node-core-" + serviceInfoProvider.getServiceId()); - requestBuilder.defaultTopic(coreSettings.getTopic()); + requestBuilder.defaultTopic(topicService.buildTopicName(coreSettings.getTopic())); requestBuilder.admin(coreAdmin); return requestBuilder.build(); } @@ -141,7 +145,7 @@ public class KafkaTbTransportQueueFactory implements TbTransportQueueFactory { TbKafkaProducerTemplate.TbKafkaProducerTemplateBuilder> requestBuilder = TbKafkaProducerTemplate.builder(); requestBuilder.settings(kafkaSettings); requestBuilder.clientId("transport-node-to-core-notifications-" + serviceInfoProvider.getServiceId()); - requestBuilder.defaultTopic(coreSettings.getTopic()); + requestBuilder.defaultTopic(topicService.buildTopicName(coreSettings.getTopic())); requestBuilder.admin(notificationAdmin); return requestBuilder.build(); } @@ -150,9 +154,9 @@ public class KafkaTbTransportQueueFactory implements TbTransportQueueFactory { public TbQueueConsumer> createTransportNotificationsConsumer() { TbKafkaConsumerTemplate.TbKafkaConsumerTemplateBuilder> responseBuilder = TbKafkaConsumerTemplate.builder(); responseBuilder.settings(kafkaSettings); - responseBuilder.topic(transportNotificationSettings.getNotificationsTopic() + "." + serviceInfoProvider.getServiceId()); + responseBuilder.topic(topicService.buildTopicName(transportNotificationSettings.getNotificationsTopic() + "." + serviceInfoProvider.getServiceId())); responseBuilder.clientId("transport-api-notifications-" + serviceInfoProvider.getServiceId()); - responseBuilder.groupId("transport-node-" + serviceInfoProvider.getServiceId()); + responseBuilder.groupId(topicService.buildTopicName("transport-node-" + serviceInfoProvider.getServiceId())); responseBuilder.decoder(msg -> new TbProtoQueueMsg<>(msg.getKey(), ToTransportMsg.parseFrom(msg.getData()), msg.getHeaders())); responseBuilder.admin(notificationAdmin); responseBuilder.statsService(consumerStatsService); @@ -164,7 +168,7 @@ public class KafkaTbTransportQueueFactory implements TbTransportQueueFactory { TbKafkaProducerTemplate.TbKafkaProducerTemplateBuilder> requestBuilder = TbKafkaProducerTemplate.builder(); requestBuilder.settings(kafkaSettings); requestBuilder.clientId("transport-node-us-producer-" + serviceInfoProvider.getServiceId()); - requestBuilder.defaultTopic(coreSettings.getUsageStatsTopic()); + requestBuilder.defaultTopic(topicService.buildTopicName(coreSettings.getUsageStatsTopic())); requestBuilder.admin(coreAdmin); return requestBuilder.build(); } diff --git a/common/queue/src/main/java/org/thingsboard/server/queue/provider/KafkaTbVersionControlQueueFactory.java b/common/queue/src/main/java/org/thingsboard/server/queue/provider/KafkaTbVersionControlQueueFactory.java index d851956420..952c9817a3 100644 --- a/common/queue/src/main/java/org/thingsboard/server/queue/provider/KafkaTbVersionControlQueueFactory.java +++ b/common/queue/src/main/java/org/thingsboard/server/queue/provider/KafkaTbVersionControlQueueFactory.java @@ -25,6 +25,7 @@ import org.thingsboard.server.queue.TbQueueConsumer; import org.thingsboard.server.queue.TbQueueProducer; import org.thingsboard.server.queue.common.TbProtoQueueMsg; import org.thingsboard.server.queue.discovery.TbServiceInfoProvider; +import org.thingsboard.server.queue.discovery.TopicService; import org.thingsboard.server.queue.kafka.TbKafkaAdmin; import org.thingsboard.server.queue.kafka.TbKafkaConsumerStatsService; import org.thingsboard.server.queue.kafka.TbKafkaConsumerTemplate; @@ -45,6 +46,7 @@ public class KafkaTbVersionControlQueueFactory implements TbVersionControlQueueF private final TbQueueCoreSettings coreSettings; private final TbQueueVersionControlSettings vcSettings; private final TbKafkaConsumerStatsService consumerStatsService; + private final TopicService topicService; private final TbQueueAdmin coreAdmin; private final TbQueueAdmin vcAdmin; @@ -55,12 +57,14 @@ public class KafkaTbVersionControlQueueFactory implements TbVersionControlQueueF TbQueueCoreSettings coreSettings, TbQueueVersionControlSettings vcSettings, TbKafkaConsumerStatsService consumerStatsService, - TbKafkaTopicConfigs kafkaTopicConfigs) { + TbKafkaTopicConfigs kafkaTopicConfigs, + TopicService topicService) { this.kafkaSettings = kafkaSettings; this.serviceInfoProvider = serviceInfoProvider; this.coreSettings = coreSettings; this.vcSettings = vcSettings; this.consumerStatsService = consumerStatsService; + this.topicService = topicService; this.coreAdmin = new TbKafkaAdmin(kafkaSettings, kafkaTopicConfigs.getCoreConfigs()); this.vcAdmin = new TbKafkaAdmin(kafkaSettings, kafkaTopicConfigs.getVcConfigs()); @@ -73,7 +77,7 @@ public class KafkaTbVersionControlQueueFactory implements TbVersionControlQueueF TbKafkaProducerTemplate.TbKafkaProducerTemplateBuilder> requestBuilder = TbKafkaProducerTemplate.builder(); requestBuilder.settings(kafkaSettings); requestBuilder.clientId("tb-vc-to-core-notifications-" + serviceInfoProvider.getServiceId()); - requestBuilder.defaultTopic(coreSettings.getTopic()); + requestBuilder.defaultTopic(topicService.buildTopicName(coreSettings.getTopic())); requestBuilder.admin(notificationAdmin); return requestBuilder.build(); } @@ -82,9 +86,9 @@ public class KafkaTbVersionControlQueueFactory implements TbVersionControlQueueF public TbQueueConsumer> createToVersionControlMsgConsumer() { TbKafkaConsumerTemplate.TbKafkaConsumerTemplateBuilder> consumerBuilder = TbKafkaConsumerTemplate.builder(); consumerBuilder.settings(kafkaSettings); - consumerBuilder.topic(vcSettings.getTopic()); + consumerBuilder.topic(topicService.buildTopicName(vcSettings.getTopic())); consumerBuilder.clientId("tb-vc-consumer-" + serviceInfoProvider.getServiceId()); - consumerBuilder.groupId("tb-vc-node"); + consumerBuilder.groupId(topicService.buildTopicName("tb-vc-node")); consumerBuilder.decoder(msg -> new TbProtoQueueMsg<>(msg.getKey(), ToVersionControlServiceMsg.parseFrom(msg.getData()), msg.getHeaders())); consumerBuilder.admin(vcAdmin); consumerBuilder.statsService(consumerStatsService); @@ -96,7 +100,7 @@ public class KafkaTbVersionControlQueueFactory implements TbVersionControlQueueF TbKafkaProducerTemplate.TbKafkaProducerTemplateBuilder> requestBuilder = TbKafkaProducerTemplate.builder(); requestBuilder.settings(kafkaSettings); requestBuilder.clientId("tb-vc-us-producer-" + serviceInfoProvider.getServiceId()); - requestBuilder.defaultTopic(coreSettings.getUsageStatsTopic()); + requestBuilder.defaultTopic(topicService.buildTopicName(coreSettings.getUsageStatsTopic())); requestBuilder.admin(coreAdmin); return requestBuilder.build(); } diff --git a/common/queue/src/main/java/org/thingsboard/server/queue/provider/PubSubMonolithQueueFactory.java b/common/queue/src/main/java/org/thingsboard/server/queue/provider/PubSubMonolithQueueFactory.java index 857641098c..554d452556 100644 --- a/common/queue/src/main/java/org/thingsboard/server/queue/provider/PubSubMonolithQueueFactory.java +++ b/common/queue/src/main/java/org/thingsboard/server/queue/provider/PubSubMonolithQueueFactory.java @@ -40,7 +40,7 @@ import org.thingsboard.server.queue.TbQueueRequestTemplate; import org.thingsboard.server.queue.common.DefaultTbQueueRequestTemplate; import org.thingsboard.server.queue.common.TbProtoJsQueueMsg; import org.thingsboard.server.queue.common.TbProtoQueueMsg; -import org.thingsboard.server.queue.discovery.NotificationsTopicService; +import org.thingsboard.server.queue.discovery.TopicService; import org.thingsboard.server.queue.discovery.TbServiceInfoProvider; import org.thingsboard.server.queue.pubsub.TbPubSubAdmin; import org.thingsboard.server.queue.pubsub.TbPubSubConsumerTemplate; @@ -66,7 +66,7 @@ public class PubSubMonolithQueueFactory implements TbCoreQueueFactory, TbRuleEng private final TbQueueRuleEngineSettings ruleEngineSettings; private final TbQueueTransportApiSettings transportApiSettings; private final TbQueueTransportNotificationSettings transportNotificationSettings; - private final NotificationsTopicService notificationsTopicService; + private final TopicService topicService; private final TbServiceInfoProvider serviceInfoProvider; private final TbQueueRemoteJsInvokeSettings jsInvokeSettings; private final TbQueueVersionControlSettings vcSettings; @@ -83,7 +83,7 @@ public class PubSubMonolithQueueFactory implements TbCoreQueueFactory, TbRuleEng TbQueueRuleEngineSettings ruleEngineSettings, TbQueueTransportApiSettings transportApiSettings, TbQueueTransportNotificationSettings transportNotificationSettings, - NotificationsTopicService notificationsTopicService, + TopicService topicService, TbServiceInfoProvider serviceInfoProvider, TbPubSubSubscriptionSettings pubSubSubscriptionSettings, TbQueueRemoteJsInvokeSettings jsInvokeSettings, @@ -93,7 +93,7 @@ public class PubSubMonolithQueueFactory implements TbCoreQueueFactory, TbRuleEng this.ruleEngineSettings = ruleEngineSettings; this.transportApiSettings = transportApiSettings; this.transportNotificationSettings = transportNotificationSettings; - this.notificationsTopicService = notificationsTopicService; + this.topicService = topicService; this.serviceInfoProvider = serviceInfoProvider; this.vcSettings = vcSettings; @@ -149,7 +149,7 @@ public class PubSubMonolithQueueFactory implements TbCoreQueueFactory, TbRuleEng @Override public TbQueueConsumer> createToRuleEngineNotificationsMsgConsumer() { return new TbPubSubConsumerTemplate<>(notificationAdmin, pubSubSettings, - notificationsTopicService.getNotificationsTopic(ServiceType.TB_RULE_ENGINE, serviceInfoProvider.getServiceId()).getFullTopicName(), + topicService.getNotificationsTopic(ServiceType.TB_RULE_ENGINE, serviceInfoProvider.getServiceId()).getFullTopicName(), msg -> new TbProtoQueueMsg<>(msg.getKey(), ToRuleEngineNotificationMsg.parseFrom(msg.getData()), msg.getHeaders())); } @@ -162,7 +162,7 @@ public class PubSubMonolithQueueFactory implements TbCoreQueueFactory, TbRuleEng @Override public TbQueueConsumer> createToCoreNotificationsMsgConsumer() { return new TbPubSubConsumerTemplate<>(notificationAdmin, pubSubSettings, - notificationsTopicService.getNotificationsTopic(ServiceType.TB_CORE, serviceInfoProvider.getServiceId()).getFullTopicName(), + topicService.getNotificationsTopic(ServiceType.TB_CORE, serviceInfoProvider.getServiceId()).getFullTopicName(), msg -> new TbProtoQueueMsg<>(msg.getKey(), ToCoreNotificationMsg.parseFrom(msg.getData()), msg.getHeaders())); } diff --git a/common/queue/src/main/java/org/thingsboard/server/queue/provider/PubSubTbCoreQueueFactory.java b/common/queue/src/main/java/org/thingsboard/server/queue/provider/PubSubTbCoreQueueFactory.java index f197082829..3b45992e25 100644 --- a/common/queue/src/main/java/org/thingsboard/server/queue/provider/PubSubTbCoreQueueFactory.java +++ b/common/queue/src/main/java/org/thingsboard/server/queue/provider/PubSubTbCoreQueueFactory.java @@ -38,7 +38,7 @@ import org.thingsboard.server.queue.TbQueueRequestTemplate; import org.thingsboard.server.queue.common.DefaultTbQueueRequestTemplate; import org.thingsboard.server.queue.common.TbProtoJsQueueMsg; import org.thingsboard.server.queue.common.TbProtoQueueMsg; -import org.thingsboard.server.queue.discovery.NotificationsTopicService; +import org.thingsboard.server.queue.discovery.TopicService; import org.thingsboard.server.queue.discovery.TbServiceInfoProvider; import org.thingsboard.server.queue.pubsub.TbPubSubAdmin; import org.thingsboard.server.queue.pubsub.TbPubSubConsumerTemplate; @@ -61,7 +61,7 @@ public class PubSubTbCoreQueueFactory implements TbCoreQueueFactory { private final TbPubSubSettings pubSubSettings; private final TbQueueCoreSettings coreSettings; private final TbQueueTransportApiSettings transportApiSettings; - private final NotificationsTopicService notificationsTopicService; + private final TopicService topicService; private final TbServiceInfoProvider serviceInfoProvider; private final TbQueueRemoteJsInvokeSettings jsInvokeSettings; private final TbQueueTransportNotificationSettings transportNotificationSettings; @@ -76,7 +76,7 @@ public class PubSubTbCoreQueueFactory implements TbCoreQueueFactory { public PubSubTbCoreQueueFactory(TbPubSubSettings pubSubSettings, TbQueueCoreSettings coreSettings, TbQueueTransportApiSettings transportApiSettings, - NotificationsTopicService notificationsTopicService, + TopicService topicService, TbServiceInfoProvider serviceInfoProvider, TbQueueRemoteJsInvokeSettings jsInvokeSettings, TbQueueTransportNotificationSettings transportNotificationSettings, @@ -85,7 +85,7 @@ public class PubSubTbCoreQueueFactory implements TbCoreQueueFactory { this.pubSubSettings = pubSubSettings; this.coreSettings = coreSettings; this.transportApiSettings = transportApiSettings; - this.notificationsTopicService = notificationsTopicService; + this.topicService = topicService; this.serviceInfoProvider = serviceInfoProvider; this.jsInvokeSettings = jsInvokeSettings; this.transportNotificationSettings = transportNotificationSettings; @@ -132,7 +132,7 @@ public class PubSubTbCoreQueueFactory implements TbCoreQueueFactory { @Override public TbQueueConsumer> createToCoreNotificationsMsgConsumer() { return new TbPubSubConsumerTemplate<>(notificationAdmin, pubSubSettings, - notificationsTopicService.getNotificationsTopic(ServiceType.TB_CORE, serviceInfoProvider.getServiceId()).getFullTopicName(), + topicService.getNotificationsTopic(ServiceType.TB_CORE, serviceInfoProvider.getServiceId()).getFullTopicName(), msg -> new TbProtoQueueMsg<>(msg.getKey(), ToCoreNotificationMsg.parseFrom(msg.getData()), msg.getHeaders())); } diff --git a/common/queue/src/main/java/org/thingsboard/server/queue/provider/PubSubTbRuleEngineQueueFactory.java b/common/queue/src/main/java/org/thingsboard/server/queue/provider/PubSubTbRuleEngineQueueFactory.java index 9766bf9915..a60f77852f 100644 --- a/common/queue/src/main/java/org/thingsboard/server/queue/provider/PubSubTbRuleEngineQueueFactory.java +++ b/common/queue/src/main/java/org/thingsboard/server/queue/provider/PubSubTbRuleEngineQueueFactory.java @@ -36,7 +36,7 @@ import org.thingsboard.server.queue.TbQueueRequestTemplate; import org.thingsboard.server.queue.common.DefaultTbQueueRequestTemplate; import org.thingsboard.server.queue.common.TbProtoJsQueueMsg; import org.thingsboard.server.queue.common.TbProtoQueueMsg; -import org.thingsboard.server.queue.discovery.NotificationsTopicService; +import org.thingsboard.server.queue.discovery.TopicService; import org.thingsboard.server.queue.discovery.TbServiceInfoProvider; import org.thingsboard.server.queue.pubsub.TbPubSubAdmin; import org.thingsboard.server.queue.pubsub.TbPubSubConsumerTemplate; @@ -58,7 +58,7 @@ public class PubSubTbRuleEngineQueueFactory implements TbRuleEngineQueueFactory private final TbPubSubSettings pubSubSettings; private final TbQueueCoreSettings coreSettings; private final TbQueueRuleEngineSettings ruleEngineSettings; - private final NotificationsTopicService notificationsTopicService; + private final TopicService topicService; private final TbServiceInfoProvider serviceInfoProvider; private final TbQueueRemoteJsInvokeSettings jsInvokeSettings; private final TbQueueTransportNotificationSettings transportNotificationSettings; @@ -71,7 +71,7 @@ public class PubSubTbRuleEngineQueueFactory implements TbRuleEngineQueueFactory public PubSubTbRuleEngineQueueFactory(TbPubSubSettings pubSubSettings, TbQueueCoreSettings coreSettings, TbQueueRuleEngineSettings ruleEngineSettings, - NotificationsTopicService notificationsTopicService, + TopicService topicService, TbServiceInfoProvider serviceInfoProvider, TbQueueRemoteJsInvokeSettings jsInvokeSettings, TbQueueTransportNotificationSettings transportNotificationSettings, @@ -79,7 +79,7 @@ public class PubSubTbRuleEngineQueueFactory implements TbRuleEngineQueueFactory this.pubSubSettings = pubSubSettings; this.coreSettings = coreSettings; this.ruleEngineSettings = ruleEngineSettings; - this.notificationsTopicService = notificationsTopicService; + this.topicService = topicService; this.serviceInfoProvider = serviceInfoProvider; this.jsInvokeSettings = jsInvokeSettings; this.transportNotificationSettings = transportNotificationSettings; @@ -92,39 +92,39 @@ public class PubSubTbRuleEngineQueueFactory implements TbRuleEngineQueueFactory @Override public TbQueueProducer> createTransportNotificationsMsgProducer() { - return new TbPubSubProducerTemplate<>(notificationAdmin, pubSubSettings, transportNotificationSettings.getNotificationsTopic()); + return new TbPubSubProducerTemplate<>(notificationAdmin, pubSubSettings, topicService.buildTopicName(transportNotificationSettings.getNotificationsTopic())); } @Override public TbQueueProducer> createRuleEngineMsgProducer() { - return new TbPubSubProducerTemplate<>(ruleEngineAdmin, pubSubSettings, ruleEngineSettings.getTopic()); + return new TbPubSubProducerTemplate<>(ruleEngineAdmin, pubSubSettings, topicService.buildTopicName(ruleEngineSettings.getTopic())); } @Override public TbQueueProducer> createRuleEngineNotificationsMsgProducer() { - return new TbPubSubProducerTemplate<>(notificationAdmin, pubSubSettings, ruleEngineSettings.getTopic()); + return new TbPubSubProducerTemplate<>(notificationAdmin, pubSubSettings, topicService.buildTopicName(ruleEngineSettings.getTopic())); } @Override public TbQueueProducer> createTbCoreMsgProducer() { - return new TbPubSubProducerTemplate<>(coreAdmin, pubSubSettings, coreSettings.getTopic()); + return new TbPubSubProducerTemplate<>(coreAdmin, pubSubSettings, topicService.buildTopicName(coreSettings.getTopic())); } @Override public TbQueueProducer> createTbCoreNotificationsMsgProducer() { - return new TbPubSubProducerTemplate<>(notificationAdmin, pubSubSettings, coreSettings.getTopic()); + return new TbPubSubProducerTemplate<>(notificationAdmin, pubSubSettings, topicService.buildTopicName(coreSettings.getTopic())); } @Override public TbQueueConsumer> createToRuleEngineMsgConsumer(Queue configuration) { - return new TbPubSubConsumerTemplate<>(ruleEngineAdmin, pubSubSettings, configuration.getTopic(), + return new TbPubSubConsumerTemplate<>(ruleEngineAdmin, pubSubSettings, topicService.buildTopicName(configuration.getTopic()), msg -> new TbProtoQueueMsg<>(msg.getKey(), ToRuleEngineMsg.parseFrom(msg.getData()), msg.getHeaders())); } @Override public TbQueueConsumer> createToRuleEngineNotificationsMsgConsumer() { return new TbPubSubConsumerTemplate<>(notificationAdmin, pubSubSettings, - notificationsTopicService.getNotificationsTopic(ServiceType.TB_RULE_ENGINE, serviceInfoProvider.getServiceId()).getFullTopicName(), + topicService.getNotificationsTopic(ServiceType.TB_RULE_ENGINE, serviceInfoProvider.getServiceId()).getFullTopicName(), msg -> new TbProtoQueueMsg<>(msg.getKey(), ToRuleEngineNotificationMsg.parseFrom(msg.getData()), msg.getHeaders())); } @@ -153,12 +153,12 @@ public class PubSubTbRuleEngineQueueFactory implements TbRuleEngineQueueFactory @Override public TbQueueProducer> createToUsageStatsServiceMsgProducer() { - return new TbPubSubProducerTemplate<>(coreAdmin, pubSubSettings, coreSettings.getUsageStatsTopic()); + return new TbPubSubProducerTemplate<>(coreAdmin, pubSubSettings, topicService.buildTopicName(coreSettings.getUsageStatsTopic())); } @Override public TbQueueProducer> createToOtaPackageStateServiceMsgProducer() { - return new TbPubSubProducerTemplate<>(coreAdmin, pubSubSettings, coreSettings.getOtaPackageTopic()); + return new TbPubSubProducerTemplate<>(coreAdmin, pubSubSettings, topicService.buildTopicName(coreSettings.getOtaPackageTopic())); } @PreDestroy diff --git a/common/queue/src/main/java/org/thingsboard/server/queue/provider/PubSubTbVersionControlQueueFactory.java b/common/queue/src/main/java/org/thingsboard/server/queue/provider/PubSubTbVersionControlQueueFactory.java index 57db7b884c..8154d04d6d 100644 --- a/common/queue/src/main/java/org/thingsboard/server/queue/provider/PubSubTbVersionControlQueueFactory.java +++ b/common/queue/src/main/java/org/thingsboard/server/queue/provider/PubSubTbVersionControlQueueFactory.java @@ -22,6 +22,7 @@ import org.thingsboard.server.queue.TbQueueAdmin; import org.thingsboard.server.queue.TbQueueConsumer; import org.thingsboard.server.queue.TbQueueProducer; import org.thingsboard.server.queue.common.TbProtoQueueMsg; +import org.thingsboard.server.queue.discovery.TopicService; import org.thingsboard.server.queue.pubsub.TbPubSubAdmin; import org.thingsboard.server.queue.pubsub.TbPubSubConsumerTemplate; import org.thingsboard.server.queue.pubsub.TbPubSubProducerTemplate; @@ -39,6 +40,7 @@ public class PubSubTbVersionControlQueueFactory implements TbVersionControlQueue private final TbPubSubSettings pubSubSettings; private final TbQueueCoreSettings coreSettings; private final TbQueueVersionControlSettings vcSettings; + private final TopicService topicService; private final TbQueueAdmin coreAdmin; private final TbQueueAdmin notificationAdmin; @@ -47,11 +49,13 @@ public class PubSubTbVersionControlQueueFactory implements TbVersionControlQueue public PubSubTbVersionControlQueueFactory(TbPubSubSettings pubSubSettings, TbQueueCoreSettings coreSettings, TbQueueVersionControlSettings vcSettings, - TbPubSubSubscriptionSettings pubSubSubscriptionSettings + TbPubSubSubscriptionSettings pubSubSubscriptionSettings, + TopicService topicService ) { this.pubSubSettings = pubSubSettings; this.coreSettings = coreSettings; this.vcSettings = vcSettings; + this.topicService = topicService; this.coreAdmin = new TbPubSubAdmin(pubSubSettings, pubSubSubscriptionSettings.getCoreSettings()); this.notificationAdmin = new TbPubSubAdmin(pubSubSettings, pubSubSubscriptionSettings.getNotificationsSettings()); @@ -60,17 +64,17 @@ public class PubSubTbVersionControlQueueFactory implements TbVersionControlQueue @Override public TbQueueProducer> createToUsageStatsServiceMsgProducer() { - return new TbPubSubProducerTemplate<>(coreAdmin, pubSubSettings, coreSettings.getUsageStatsTopic()); + return new TbPubSubProducerTemplate<>(coreAdmin, pubSubSettings, topicService.buildTopicName(coreSettings.getUsageStatsTopic())); } @Override public TbQueueProducer> createTbCoreNotificationsMsgProducer() { - return new TbPubSubProducerTemplate<>(notificationAdmin, pubSubSettings, coreSettings.getTopic()); + return new TbPubSubProducerTemplate<>(notificationAdmin, pubSubSettings, topicService.buildTopicName(coreSettings.getTopic())); } @Override public TbQueueConsumer> createToVersionControlMsgConsumer() { - return new TbPubSubConsumerTemplate<>(vcAdmin, pubSubSettings, vcSettings.getTopic(), + return new TbPubSubConsumerTemplate<>(vcAdmin, pubSubSettings, topicService.buildTopicName(vcSettings.getTopic()), msg -> new TbProtoQueueMsg<>(msg.getKey(), TransportProtos.ToVersionControlServiceMsg.parseFrom(msg.getData()), msg.getHeaders()) ); } diff --git a/common/queue/src/main/java/org/thingsboard/server/queue/provider/PubSubTransportQueueFactory.java b/common/queue/src/main/java/org/thingsboard/server/queue/provider/PubSubTransportQueueFactory.java index 5cafaa4c48..edcad873c4 100644 --- a/common/queue/src/main/java/org/thingsboard/server/queue/provider/PubSubTransportQueueFactory.java +++ b/common/queue/src/main/java/org/thingsboard/server/queue/provider/PubSubTransportQueueFactory.java @@ -33,6 +33,7 @@ import org.thingsboard.server.queue.TbQueueRequestTemplate; import org.thingsboard.server.queue.common.DefaultTbQueueRequestTemplate; import org.thingsboard.server.queue.common.TbProtoQueueMsg; import org.thingsboard.server.queue.discovery.TbServiceInfoProvider; +import org.thingsboard.server.queue.discovery.TopicService; import org.thingsboard.server.queue.pubsub.TbPubSubAdmin; import org.thingsboard.server.queue.pubsub.TbPubSubConsumerTemplate; import org.thingsboard.server.queue.pubsub.TbPubSubProducerTemplate; @@ -56,6 +57,7 @@ public class PubSubTransportQueueFactory implements TbTransportQueueFactory { private final TbQueueRuleEngineSettings ruleEngineSettings; private final TbQueueTransportApiSettings transportApiSettings; private final TbQueueTransportNotificationSettings transportNotificationSettings; + private final TopicService topicService; private final TbQueueAdmin coreAdmin; private final TbQueueAdmin ruleEngineAdmin; @@ -68,13 +70,15 @@ public class PubSubTransportQueueFactory implements TbTransportQueueFactory { TbQueueRuleEngineSettings ruleEngineSettings, TbQueueTransportApiSettings transportApiSettings, TbQueueTransportNotificationSettings transportNotificationSettings, - TbPubSubSubscriptionSettings pubSubSubscriptionSettings) { + TbPubSubSubscriptionSettings pubSubSubscriptionSettings, + TopicService topicService) { this.pubSubSettings = pubSubSettings; this.serviceInfoProvider = serviceInfoProvider; this.coreSettings = coreSettings; this.ruleEngineSettings = ruleEngineSettings; this.transportApiSettings = transportApiSettings; this.transportNotificationSettings = transportNotificationSettings; + this.topicService = topicService; this.coreAdmin = new TbPubSubAdmin(pubSubSettings, pubSubSubscriptionSettings.getCoreSettings()); this.ruleEngineAdmin = new TbPubSubAdmin(pubSubSettings, pubSubSubscriptionSettings.getRuleEngineSettings()); @@ -84,9 +88,9 @@ public class PubSubTransportQueueFactory implements TbTransportQueueFactory { @Override public TbQueueRequestTemplate, TbProtoQueueMsg> createTransportApiRequestTemplate() { - TbQueueProducer> producer = new TbPubSubProducerTemplate<>(transportApiAdmin, pubSubSettings, transportApiSettings.getRequestsTopic()); + TbQueueProducer> producer = new TbPubSubProducerTemplate<>(transportApiAdmin, pubSubSettings, topicService.buildTopicName(transportApiSettings.getRequestsTopic())); TbQueueConsumer> consumer = new TbPubSubConsumerTemplate<>(transportApiAdmin, pubSubSettings, - transportApiSettings.getResponsesTopic() + "." + serviceInfoProvider.getServiceId(), + topicService.buildTopicName(transportApiSettings.getResponsesTopic() + "." + serviceInfoProvider.getServiceId()), msg -> new TbProtoQueueMsg<>(msg.getKey(), TransportApiResponseMsg.parseFrom(msg.getData()), msg.getHeaders())); DefaultTbQueueRequestTemplate.DefaultTbQueueRequestTemplateBuilder @@ -102,29 +106,29 @@ public class PubSubTransportQueueFactory implements TbTransportQueueFactory { @Override public TbQueueProducer> createRuleEngineMsgProducer() { - return new TbPubSubProducerTemplate<>(ruleEngineAdmin, pubSubSettings, ruleEngineSettings.getTopic()); + return new TbPubSubProducerTemplate<>(ruleEngineAdmin, pubSubSettings, topicService.buildTopicName(ruleEngineSettings.getTopic())); } @Override public TbQueueProducer> createTbCoreMsgProducer() { - return new TbPubSubProducerTemplate<>(coreAdmin, pubSubSettings, coreSettings.getTopic()); + return new TbPubSubProducerTemplate<>(coreAdmin, pubSubSettings, topicService.buildTopicName(coreSettings.getTopic())); } @Override public TbQueueProducer> createTbCoreNotificationsMsgProducer() { - return new TbPubSubProducerTemplate<>(notificationAdmin, pubSubSettings, coreSettings.getTopic()); + return new TbPubSubProducerTemplate<>(notificationAdmin, pubSubSettings, topicService.buildTopicName(coreSettings.getTopic())); } @Override public TbQueueConsumer> createTransportNotificationsConsumer() { return new TbPubSubConsumerTemplate<>(notificationAdmin, pubSubSettings, - transportNotificationSettings.getNotificationsTopic() + "." + serviceInfoProvider.getServiceId(), + topicService.buildTopicName(transportNotificationSettings.getNotificationsTopic() + "." + serviceInfoProvider.getServiceId()), msg -> new TbProtoQueueMsg<>(msg.getKey(), ToTransportMsg.parseFrom(msg.getData()), msg.getHeaders())); } @Override public TbQueueProducer> createToUsageStatsServiceMsgProducer() { - return new TbPubSubProducerTemplate<>(coreAdmin, pubSubSettings, coreSettings.getUsageStatsTopic()); + return new TbPubSubProducerTemplate<>(coreAdmin, pubSubSettings, topicService.buildTopicName(coreSettings.getUsageStatsTopic())); } @PreDestroy diff --git a/common/queue/src/main/java/org/thingsboard/server/queue/provider/RabbitMqMonolithQueueFactory.java b/common/queue/src/main/java/org/thingsboard/server/queue/provider/RabbitMqMonolithQueueFactory.java index 0318b5d06f..7e9833f56b 100644 --- a/common/queue/src/main/java/org/thingsboard/server/queue/provider/RabbitMqMonolithQueueFactory.java +++ b/common/queue/src/main/java/org/thingsboard/server/queue/provider/RabbitMqMonolithQueueFactory.java @@ -40,7 +40,7 @@ import org.thingsboard.server.queue.TbQueueRequestTemplate; import org.thingsboard.server.queue.common.DefaultTbQueueRequestTemplate; import org.thingsboard.server.queue.common.TbProtoJsQueueMsg; import org.thingsboard.server.queue.common.TbProtoQueueMsg; -import org.thingsboard.server.queue.discovery.NotificationsTopicService; +import org.thingsboard.server.queue.discovery.TopicService; import org.thingsboard.server.queue.discovery.TbServiceInfoProvider; import org.thingsboard.server.queue.rabbitmq.TbRabbitMqAdmin; import org.thingsboard.server.queue.rabbitmq.TbRabbitMqConsumerTemplate; @@ -61,7 +61,7 @@ import java.nio.charset.StandardCharsets; @ConditionalOnExpression("'${queue.type:null}'=='rabbitmq' && '${service.type:null}'=='monolith'") public class RabbitMqMonolithQueueFactory implements TbCoreQueueFactory, TbRuleEngineQueueFactory, TbVersionControlQueueFactory { - private final NotificationsTopicService notificationsTopicService; + private final TopicService topicService; private final TbQueueCoreSettings coreSettings; private final TbServiceInfoProvider serviceInfoProvider; private final TbQueueRuleEngineSettings ruleEngineSettings; @@ -78,7 +78,7 @@ public class RabbitMqMonolithQueueFactory implements TbCoreQueueFactory, TbRuleE private final TbQueueAdmin notificationAdmin; private final TbQueueAdmin vcAdmin; - public RabbitMqMonolithQueueFactory(NotificationsTopicService notificationsTopicService, TbQueueCoreSettings coreSettings, + public RabbitMqMonolithQueueFactory(TopicService topicService, TbQueueCoreSettings coreSettings, TbQueueRuleEngineSettings ruleEngineSettings, TbServiceInfoProvider serviceInfoProvider, TbQueueTransportApiSettings transportApiSettings, @@ -87,7 +87,7 @@ public class RabbitMqMonolithQueueFactory implements TbCoreQueueFactory, TbRuleE TbRabbitMqQueueArguments queueArguments, TbQueueRemoteJsInvokeSettings jsInvokeSettings, TbQueueVersionControlSettings vcSettings) { - this.notificationsTopicService = notificationsTopicService; + this.topicService = topicService; this.coreSettings = coreSettings; this.serviceInfoProvider = serviceInfoProvider; this.ruleEngineSettings = ruleEngineSettings; @@ -107,71 +107,71 @@ public class RabbitMqMonolithQueueFactory implements TbCoreQueueFactory, TbRuleE @Override public TbQueueProducer> createTransportNotificationsMsgProducer() { - return new TbRabbitMqProducerTemplate<>(notificationAdmin, rabbitMqSettings, transportNotificationSettings.getNotificationsTopic()); + return new TbRabbitMqProducerTemplate<>(notificationAdmin, rabbitMqSettings, topicService.buildTopicName(transportNotificationSettings.getNotificationsTopic())); } @Override public TbQueueProducer> createRuleEngineMsgProducer() { - return new TbRabbitMqProducerTemplate<>(ruleEngineAdmin, rabbitMqSettings, ruleEngineSettings.getTopic()); + return new TbRabbitMqProducerTemplate<>(ruleEngineAdmin, rabbitMqSettings, topicService.buildTopicName(ruleEngineSettings.getTopic())); } @Override public TbQueueProducer> createRuleEngineNotificationsMsgProducer() { - return new TbRabbitMqProducerTemplate<>(notificationAdmin, rabbitMqSettings, ruleEngineSettings.getTopic()); + return new TbRabbitMqProducerTemplate<>(notificationAdmin, rabbitMqSettings, topicService.buildTopicName(ruleEngineSettings.getTopic())); } @Override public TbQueueProducer> createTbCoreMsgProducer() { - return new TbRabbitMqProducerTemplate<>(coreAdmin, rabbitMqSettings, coreSettings.getTopic()); + return new TbRabbitMqProducerTemplate<>(coreAdmin, rabbitMqSettings, topicService.buildTopicName(coreSettings.getTopic())); } @Override public TbQueueProducer> createTbCoreNotificationsMsgProducer() { - return new TbRabbitMqProducerTemplate<>(notificationAdmin, rabbitMqSettings, coreSettings.getTopic()); + return new TbRabbitMqProducerTemplate<>(notificationAdmin, rabbitMqSettings, topicService.buildTopicName(coreSettings.getTopic())); } @Override public TbQueueConsumer> createToVersionControlMsgConsumer() { - return new TbRabbitMqConsumerTemplate<>(vcAdmin, rabbitMqSettings, vcSettings.getTopic(), + return new TbRabbitMqConsumerTemplate<>(vcAdmin, rabbitMqSettings, topicService.buildTopicName(vcSettings.getTopic()), msg -> new TbProtoQueueMsg<>(msg.getKey(), TransportProtos.ToVersionControlServiceMsg.parseFrom(msg.getData()), msg.getHeaders()) ); } @Override public TbQueueConsumer> createToRuleEngineMsgConsumer(Queue configuration) { - return new TbRabbitMqConsumerTemplate<>(ruleEngineAdmin, rabbitMqSettings, configuration.getTopic(), + return new TbRabbitMqConsumerTemplate<>(ruleEngineAdmin, rabbitMqSettings, topicService.buildTopicName(configuration.getTopic()), msg -> new TbProtoQueueMsg<>(msg.getKey(), ToRuleEngineMsg.parseFrom(msg.getData()), msg.getHeaders())); } @Override public TbQueueConsumer> createToRuleEngineNotificationsMsgConsumer() { return new TbRabbitMqConsumerTemplate<>(notificationAdmin, rabbitMqSettings, - notificationsTopicService.getNotificationsTopic(ServiceType.TB_RULE_ENGINE, serviceInfoProvider.getServiceId()).getFullTopicName(), + topicService.getNotificationsTopic(ServiceType.TB_RULE_ENGINE, serviceInfoProvider.getServiceId()).getFullTopicName(), msg -> new TbProtoQueueMsg<>(msg.getKey(), ToRuleEngineNotificationMsg.parseFrom(msg.getData()), msg.getHeaders())); } @Override public TbQueueConsumer> createToCoreMsgConsumer() { - return new TbRabbitMqConsumerTemplate<>(coreAdmin, rabbitMqSettings, coreSettings.getTopic(), + return new TbRabbitMqConsumerTemplate<>(coreAdmin, rabbitMqSettings, topicService.buildTopicName(coreSettings.getTopic()), msg -> new TbProtoQueueMsg<>(msg.getKey(), ToCoreMsg.parseFrom(msg.getData()), msg.getHeaders())); } @Override public TbQueueConsumer> createToCoreNotificationsMsgConsumer() { return new TbRabbitMqConsumerTemplate<>(notificationAdmin, rabbitMqSettings, - notificationsTopicService.getNotificationsTopic(ServiceType.TB_CORE, serviceInfoProvider.getServiceId()).getFullTopicName(), + topicService.getNotificationsTopic(ServiceType.TB_CORE, serviceInfoProvider.getServiceId()).getFullTopicName(), msg -> new TbProtoQueueMsg<>(msg.getKey(), ToCoreNotificationMsg.parseFrom(msg.getData()), msg.getHeaders())); } @Override public TbQueueConsumer> createTransportApiRequestConsumer() { - return new TbRabbitMqConsumerTemplate<>(transportApiAdmin, rabbitMqSettings, transportApiSettings.getRequestsTopic(), + return new TbRabbitMqConsumerTemplate<>(transportApiAdmin, rabbitMqSettings, topicService.buildTopicName(transportApiSettings.getRequestsTopic()), msg -> new TbProtoQueueMsg<>(msg.getKey(), TransportApiRequestMsg.parseFrom(msg.getData()), msg.getHeaders())); } @Override public TbQueueProducer> createTransportApiResponseProducer() { - return new TbRabbitMqProducerTemplate<>(transportApiAdmin, rabbitMqSettings, transportApiSettings.getResponsesTopic()); + return new TbRabbitMqProducerTemplate<>(transportApiAdmin, rabbitMqSettings, topicService.buildTopicName(transportApiSettings.getResponsesTopic())); } @Override @@ -199,29 +199,29 @@ public class RabbitMqMonolithQueueFactory implements TbCoreQueueFactory, TbRuleE @Override public TbQueueConsumer> createToUsageStatsServiceMsgConsumer() { - return new TbRabbitMqConsumerTemplate<>(coreAdmin, rabbitMqSettings, coreSettings.getUsageStatsTopic(), + return new TbRabbitMqConsumerTemplate<>(coreAdmin, rabbitMqSettings, topicService.buildTopicName(coreSettings.getUsageStatsTopic()), msg -> new TbProtoQueueMsg<>(msg.getKey(), ToUsageStatsServiceMsg.parseFrom(msg.getData()), msg.getHeaders())); } @Override public TbQueueConsumer> createToOtaPackageStateServiceMsgConsumer() { - return new TbRabbitMqConsumerTemplate<>(coreAdmin, rabbitMqSettings, coreSettings.getOtaPackageTopic(), + return new TbRabbitMqConsumerTemplate<>(coreAdmin, rabbitMqSettings, topicService.buildTopicName(coreSettings.getOtaPackageTopic()), msg -> new TbProtoQueueMsg<>(msg.getKey(), ToOtaPackageStateServiceMsg.parseFrom(msg.getData()), msg.getHeaders())); } @Override public TbQueueProducer> createToOtaPackageStateServiceMsgProducer() { - return new TbRabbitMqProducerTemplate<>(coreAdmin, rabbitMqSettings, coreSettings.getOtaPackageTopic()); + return new TbRabbitMqProducerTemplate<>(coreAdmin, rabbitMqSettings, topicService.buildTopicName(coreSettings.getOtaPackageTopic())); } @Override public TbQueueProducer> createToUsageStatsServiceMsgProducer() { - return new TbRabbitMqProducerTemplate<>(coreAdmin, rabbitMqSettings, coreSettings.getUsageStatsTopic()); + return new TbRabbitMqProducerTemplate<>(coreAdmin, rabbitMqSettings, topicService.buildTopicName(coreSettings.getUsageStatsTopic())); } @Override public TbQueueProducer> createVersionControlMsgProducer() { - return new TbRabbitMqProducerTemplate<>(vcAdmin, rabbitMqSettings, vcSettings.getTopic()); + return new TbRabbitMqProducerTemplate<>(vcAdmin, rabbitMqSettings, topicService.buildTopicName(vcSettings.getTopic())); } @PreDestroy diff --git a/common/queue/src/main/java/org/thingsboard/server/queue/provider/RabbitMqTbCoreQueueFactory.java b/common/queue/src/main/java/org/thingsboard/server/queue/provider/RabbitMqTbCoreQueueFactory.java index 45f5a92980..8311560207 100644 --- a/common/queue/src/main/java/org/thingsboard/server/queue/provider/RabbitMqTbCoreQueueFactory.java +++ b/common/queue/src/main/java/org/thingsboard/server/queue/provider/RabbitMqTbCoreQueueFactory.java @@ -38,7 +38,7 @@ import org.thingsboard.server.queue.TbQueueRequestTemplate; import org.thingsboard.server.queue.common.DefaultTbQueueRequestTemplate; import org.thingsboard.server.queue.common.TbProtoJsQueueMsg; import org.thingsboard.server.queue.common.TbProtoQueueMsg; -import org.thingsboard.server.queue.discovery.NotificationsTopicService; +import org.thingsboard.server.queue.discovery.TopicService; import org.thingsboard.server.queue.discovery.TbServiceInfoProvider; import org.thingsboard.server.queue.rabbitmq.TbRabbitMqAdmin; import org.thingsboard.server.queue.rabbitmq.TbRabbitMqConsumerTemplate; @@ -62,7 +62,7 @@ public class RabbitMqTbCoreQueueFactory implements TbCoreQueueFactory { private final TbQueueRuleEngineSettings ruleEngineSettings; private final TbQueueCoreSettings coreSettings; private final TbQueueTransportApiSettings transportApiSettings; - private final NotificationsTopicService notificationsTopicService; + private final TopicService topicService; private final TbServiceInfoProvider serviceInfoProvider; private final TbQueueRemoteJsInvokeSettings jsInvokeSettings; private final TbQueueTransportNotificationSettings transportNotificationSettings; @@ -77,7 +77,7 @@ public class RabbitMqTbCoreQueueFactory implements TbCoreQueueFactory { TbQueueCoreSettings coreSettings, TbQueueTransportApiSettings transportApiSettings, TbQueueRuleEngineSettings ruleEngineSettings, - NotificationsTopicService notificationsTopicService, + TopicService topicService, TbServiceInfoProvider serviceInfoProvider, TbQueueRemoteJsInvokeSettings jsInvokeSettings, TbQueueTransportNotificationSettings transportNotificationSettings, @@ -86,7 +86,7 @@ public class RabbitMqTbCoreQueueFactory implements TbCoreQueueFactory { this.coreSettings = coreSettings; this.transportApiSettings = transportApiSettings; this.ruleEngineSettings = ruleEngineSettings; - this.notificationsTopicService = notificationsTopicService; + this.topicService = topicService; this.serviceInfoProvider = serviceInfoProvider; this.jsInvokeSettings = jsInvokeSettings; this.transportNotificationSettings = transportNotificationSettings; @@ -100,51 +100,51 @@ public class RabbitMqTbCoreQueueFactory implements TbCoreQueueFactory { @Override public TbQueueProducer> createTransportNotificationsMsgProducer() { - return new TbRabbitMqProducerTemplate<>(notificationAdmin, rabbitMqSettings, transportNotificationSettings.getNotificationsTopic()); + return new TbRabbitMqProducerTemplate<>(notificationAdmin, rabbitMqSettings, topicService.buildTopicName(transportNotificationSettings.getNotificationsTopic())); } @Override public TbQueueProducer> createRuleEngineMsgProducer() { - return new TbRabbitMqProducerTemplate<>(coreAdmin, rabbitMqSettings, coreSettings.getTopic()); + return new TbRabbitMqProducerTemplate<>(coreAdmin, rabbitMqSettings, topicService.buildTopicName(coreSettings.getTopic())); } @Override public TbQueueProducer> createRuleEngineNotificationsMsgProducer() { - return new TbRabbitMqProducerTemplate<>(notificationAdmin, rabbitMqSettings, ruleEngineSettings.getTopic()); + return new TbRabbitMqProducerTemplate<>(notificationAdmin, rabbitMqSettings, topicService.buildTopicName(ruleEngineSettings.getTopic())); } @Override public TbQueueProducer> createTbCoreMsgProducer() { - return new TbRabbitMqProducerTemplate<>(coreAdmin, rabbitMqSettings, coreSettings.getTopic()); + return new TbRabbitMqProducerTemplate<>(coreAdmin, rabbitMqSettings, topicService.buildTopicName(coreSettings.getTopic())); } @Override public TbQueueProducer> createTbCoreNotificationsMsgProducer() { - return new TbRabbitMqProducerTemplate<>(notificationAdmin, rabbitMqSettings, coreSettings.getTopic()); + return new TbRabbitMqProducerTemplate<>(notificationAdmin, rabbitMqSettings, topicService.buildTopicName(coreSettings.getTopic())); } @Override public TbQueueConsumer> createToCoreMsgConsumer() { - return new TbRabbitMqConsumerTemplate<>(coreAdmin, rabbitMqSettings, coreSettings.getTopic(), + return new TbRabbitMqConsumerTemplate<>(coreAdmin, rabbitMqSettings, topicService.buildTopicName(coreSettings.getTopic()), msg -> new TbProtoQueueMsg<>(msg.getKey(), ToCoreMsg.parseFrom(msg.getData()), msg.getHeaders())); } @Override public TbQueueConsumer> createToCoreNotificationsMsgConsumer() { return new TbRabbitMqConsumerTemplate<>(notificationAdmin, rabbitMqSettings, - notificationsTopicService.getNotificationsTopic(ServiceType.TB_CORE, serviceInfoProvider.getServiceId()).getFullTopicName(), + topicService.getNotificationsTopic(ServiceType.TB_CORE, serviceInfoProvider.getServiceId()).getFullTopicName(), msg -> new TbProtoQueueMsg<>(msg.getKey(), ToCoreNotificationMsg.parseFrom(msg.getData()), msg.getHeaders())); } @Override public TbQueueConsumer> createTransportApiRequestConsumer() { - return new TbRabbitMqConsumerTemplate<>(transportApiAdmin, rabbitMqSettings, transportApiSettings.getRequestsTopic(), + return new TbRabbitMqConsumerTemplate<>(transportApiAdmin, rabbitMqSettings, topicService.buildTopicName(transportApiSettings.getRequestsTopic()), msg -> new TbProtoQueueMsg<>(msg.getKey(), TransportApiRequestMsg.parseFrom(msg.getData()), msg.getHeaders())); } @Override public TbQueueProducer> createTransportApiResponseProducer() { - return new TbRabbitMqProducerTemplate<>(transportApiAdmin, rabbitMqSettings, transportApiSettings.getResponsesTopic()); + return new TbRabbitMqProducerTemplate<>(transportApiAdmin, rabbitMqSettings, topicService.buildTopicName(transportApiSettings.getResponsesTopic())); } @Override @@ -178,24 +178,24 @@ public class RabbitMqTbCoreQueueFactory implements TbCoreQueueFactory { @Override public TbQueueConsumer> createToUsageStatsServiceMsgConsumer() { - return new TbRabbitMqConsumerTemplate<>(coreAdmin, rabbitMqSettings, coreSettings.getUsageStatsTopic(), + return new TbRabbitMqConsumerTemplate<>(coreAdmin, rabbitMqSettings, topicService.buildTopicName(coreSettings.getUsageStatsTopic()), msg -> new TbProtoQueueMsg<>(msg.getKey(), ToUsageStatsServiceMsg.parseFrom(msg.getData()), msg.getHeaders())); } @Override public TbQueueConsumer> createToOtaPackageStateServiceMsgConsumer() { - return new TbRabbitMqConsumerTemplate<>(coreAdmin, rabbitMqSettings, coreSettings.getOtaPackageTopic(), + return new TbRabbitMqConsumerTemplate<>(coreAdmin, rabbitMqSettings, topicService.buildTopicName(coreSettings.getOtaPackageTopic()), msg -> new TbProtoQueueMsg<>(msg.getKey(), ToOtaPackageStateServiceMsg.parseFrom(msg.getData()), msg.getHeaders())); } @Override public TbQueueProducer> createToOtaPackageStateServiceMsgProducer() { - return new TbRabbitMqProducerTemplate<>(coreAdmin, rabbitMqSettings, coreSettings.getOtaPackageTopic()); + return new TbRabbitMqProducerTemplate<>(coreAdmin, rabbitMqSettings, topicService.buildTopicName(coreSettings.getOtaPackageTopic())); } @Override public TbQueueProducer> createToUsageStatsServiceMsgProducer() { - return new TbRabbitMqProducerTemplate<>(coreAdmin, rabbitMqSettings, coreSettings.getUsageStatsTopic()); + return new TbRabbitMqProducerTemplate<>(coreAdmin, rabbitMqSettings, topicService.buildTopicName(coreSettings.getUsageStatsTopic())); } @PreDestroy diff --git a/common/queue/src/main/java/org/thingsboard/server/queue/provider/RabbitMqTbRuleEngineQueueFactory.java b/common/queue/src/main/java/org/thingsboard/server/queue/provider/RabbitMqTbRuleEngineQueueFactory.java index 37633ced95..ae8a879782 100644 --- a/common/queue/src/main/java/org/thingsboard/server/queue/provider/RabbitMqTbRuleEngineQueueFactory.java +++ b/common/queue/src/main/java/org/thingsboard/server/queue/provider/RabbitMqTbRuleEngineQueueFactory.java @@ -36,7 +36,7 @@ import org.thingsboard.server.queue.TbQueueRequestTemplate; import org.thingsboard.server.queue.common.DefaultTbQueueRequestTemplate; import org.thingsboard.server.queue.common.TbProtoJsQueueMsg; import org.thingsboard.server.queue.common.TbProtoQueueMsg; -import org.thingsboard.server.queue.discovery.NotificationsTopicService; +import org.thingsboard.server.queue.discovery.TopicService; import org.thingsboard.server.queue.discovery.TbServiceInfoProvider; import org.thingsboard.server.queue.rabbitmq.TbRabbitMqAdmin; import org.thingsboard.server.queue.rabbitmq.TbRabbitMqConsumerTemplate; @@ -55,7 +55,7 @@ import java.nio.charset.StandardCharsets; @ConditionalOnExpression("'${queue.type:null}'=='rabbitmq' && '${service.type:null}'=='tb-rule-engine'") public class RabbitMqTbRuleEngineQueueFactory implements TbRuleEngineQueueFactory { - private final NotificationsTopicService notificationsTopicService; + private final TopicService topicService; private final TbQueueCoreSettings coreSettings; private final TbServiceInfoProvider serviceInfoProvider; private final TbQueueRuleEngineSettings ruleEngineSettings; @@ -68,14 +68,14 @@ public class RabbitMqTbRuleEngineQueueFactory implements TbRuleEngineQueueFactor private final TbQueueAdmin jsExecutorAdmin; private final TbQueueAdmin notificationAdmin; - public RabbitMqTbRuleEngineQueueFactory(NotificationsTopicService notificationsTopicService, TbQueueCoreSettings coreSettings, + public RabbitMqTbRuleEngineQueueFactory(TopicService topicService, TbQueueCoreSettings coreSettings, TbQueueRuleEngineSettings ruleEngineSettings, TbServiceInfoProvider serviceInfoProvider, TbRabbitMqSettings rabbitMqSettings, TbQueueRemoteJsInvokeSettings jsInvokeSettings, TbQueueTransportNotificationSettings transportNotificationSettings, TbRabbitMqQueueArguments queueArguments) { - this.notificationsTopicService = notificationsTopicService; + this.topicService = topicService; this.coreSettings = coreSettings; this.serviceInfoProvider = serviceInfoProvider; this.ruleEngineSettings = ruleEngineSettings; @@ -91,39 +91,39 @@ public class RabbitMqTbRuleEngineQueueFactory implements TbRuleEngineQueueFactor @Override public TbQueueProducer> createTransportNotificationsMsgProducer() { - return new TbRabbitMqProducerTemplate<>(notificationAdmin, rabbitMqSettings, transportNotificationSettings.getNotificationsTopic()); + return new TbRabbitMqProducerTemplate<>(notificationAdmin, rabbitMqSettings, topicService.buildTopicName(transportNotificationSettings.getNotificationsTopic())); } @Override public TbQueueProducer> createRuleEngineMsgProducer() { - return new TbRabbitMqProducerTemplate<>(ruleEngineAdmin, rabbitMqSettings, ruleEngineSettings.getTopic()); + return new TbRabbitMqProducerTemplate<>(ruleEngineAdmin, rabbitMqSettings, topicService.buildTopicName(ruleEngineSettings.getTopic())); } @Override public TbQueueProducer> createRuleEngineNotificationsMsgProducer() { - return new TbRabbitMqProducerTemplate<>(notificationAdmin, rabbitMqSettings, ruleEngineSettings.getTopic()); + return new TbRabbitMqProducerTemplate<>(notificationAdmin, rabbitMqSettings, topicService.buildTopicName(ruleEngineSettings.getTopic())); } @Override public TbQueueProducer> createTbCoreMsgProducer() { - return new TbRabbitMqProducerTemplate<>(coreAdmin, rabbitMqSettings, coreSettings.getTopic()); + return new TbRabbitMqProducerTemplate<>(coreAdmin, rabbitMqSettings, topicService.buildTopicName(coreSettings.getTopic())); } @Override public TbQueueProducer> createTbCoreNotificationsMsgProducer() { - return new TbRabbitMqProducerTemplate<>(notificationAdmin, rabbitMqSettings, coreSettings.getTopic()); + return new TbRabbitMqProducerTemplate<>(notificationAdmin, rabbitMqSettings, topicService.buildTopicName(coreSettings.getTopic())); } @Override public TbQueueConsumer> createToRuleEngineMsgConsumer(Queue configuration) { - return new TbRabbitMqConsumerTemplate<>(ruleEngineAdmin, rabbitMqSettings, configuration.getTopic(), + return new TbRabbitMqConsumerTemplate<>(ruleEngineAdmin, rabbitMqSettings, topicService.buildTopicName(configuration.getTopic()), msg -> new TbProtoQueueMsg<>(msg.getKey(), ToRuleEngineMsg.parseFrom(msg.getData()), msg.getHeaders())); } @Override public TbQueueConsumer> createToRuleEngineNotificationsMsgConsumer() { return new TbRabbitMqConsumerTemplate<>(notificationAdmin, rabbitMqSettings, - notificationsTopicService.getNotificationsTopic(ServiceType.TB_RULE_ENGINE, serviceInfoProvider.getServiceId()).getFullTopicName(), + topicService.getNotificationsTopic(ServiceType.TB_RULE_ENGINE, serviceInfoProvider.getServiceId()).getFullTopicName(), msg -> new TbProtoQueueMsg<>(msg.getKey(), ToRuleEngineNotificationMsg.parseFrom(msg.getData()), msg.getHeaders())); } @@ -152,12 +152,12 @@ public class RabbitMqTbRuleEngineQueueFactory implements TbRuleEngineQueueFactor @Override public TbQueueProducer> createToUsageStatsServiceMsgProducer() { - return new TbRabbitMqProducerTemplate<>(coreAdmin, rabbitMqSettings, coreSettings.getUsageStatsTopic()); + return new TbRabbitMqProducerTemplate<>(coreAdmin, rabbitMqSettings, topicService.buildTopicName(coreSettings.getUsageStatsTopic())); } @Override public TbQueueProducer> createToOtaPackageStateServiceMsgProducer() { - return new TbRabbitMqProducerTemplate<>(coreAdmin, rabbitMqSettings, coreSettings.getOtaPackageTopic()); + return new TbRabbitMqProducerTemplate<>(coreAdmin, rabbitMqSettings, topicService.buildTopicName(coreSettings.getOtaPackageTopic())); } @PreDestroy diff --git a/common/queue/src/main/java/org/thingsboard/server/queue/provider/RabbitMqTbVersionControlQueueFactory.java b/common/queue/src/main/java/org/thingsboard/server/queue/provider/RabbitMqTbVersionControlQueueFactory.java index ed1da6a302..d32865a05c 100644 --- a/common/queue/src/main/java/org/thingsboard/server/queue/provider/RabbitMqTbVersionControlQueueFactory.java +++ b/common/queue/src/main/java/org/thingsboard/server/queue/provider/RabbitMqTbVersionControlQueueFactory.java @@ -22,6 +22,7 @@ import org.thingsboard.server.queue.TbQueueAdmin; import org.thingsboard.server.queue.TbQueueConsumer; import org.thingsboard.server.queue.TbQueueProducer; import org.thingsboard.server.queue.common.TbProtoQueueMsg; +import org.thingsboard.server.queue.discovery.TopicService; import org.thingsboard.server.queue.rabbitmq.TbRabbitMqAdmin; import org.thingsboard.server.queue.rabbitmq.TbRabbitMqConsumerTemplate; import org.thingsboard.server.queue.rabbitmq.TbRabbitMqProducerTemplate; @@ -39,6 +40,7 @@ public class RabbitMqTbVersionControlQueueFactory implements TbVersionControlQue private final TbRabbitMqSettings rabbitMqSettings; private final TbQueueCoreSettings coreSettings; private final TbQueueVersionControlSettings vcSettings; + private final TopicService topicService; private final TbQueueAdmin coreAdmin; private final TbQueueAdmin notificationAdmin; @@ -47,11 +49,13 @@ public class RabbitMqTbVersionControlQueueFactory implements TbVersionControlQue public RabbitMqTbVersionControlQueueFactory(TbRabbitMqSettings rabbitMqSettings, TbQueueCoreSettings coreSettings, TbQueueVersionControlSettings vcSettings, - TbRabbitMqQueueArguments queueArguments + TbRabbitMqQueueArguments queueArguments, + TopicService topicService ) { this.rabbitMqSettings = rabbitMqSettings; this.coreSettings = coreSettings; this.vcSettings = vcSettings; + this.topicService = topicService; this.coreAdmin = new TbRabbitMqAdmin(this.rabbitMqSettings, queueArguments.getCoreArgs()); this.notificationAdmin = new TbRabbitMqAdmin(this.rabbitMqSettings, queueArguments.getNotificationsArgs()); @@ -60,17 +64,17 @@ public class RabbitMqTbVersionControlQueueFactory implements TbVersionControlQue @Override public TbQueueProducer> createToUsageStatsServiceMsgProducer() { - return new TbRabbitMqProducerTemplate<>(coreAdmin, rabbitMqSettings, coreSettings.getUsageStatsTopic()); + return new TbRabbitMqProducerTemplate<>(coreAdmin, rabbitMqSettings, topicService.buildTopicName(coreSettings.getUsageStatsTopic())); } @Override public TbQueueProducer> createTbCoreNotificationsMsgProducer() { - return new TbRabbitMqProducerTemplate<>(notificationAdmin, rabbitMqSettings, coreSettings.getTopic()); + return new TbRabbitMqProducerTemplate<>(notificationAdmin, rabbitMqSettings, topicService.buildTopicName(coreSettings.getTopic())); } @Override public TbQueueConsumer> createToVersionControlMsgConsumer() { - return new TbRabbitMqConsumerTemplate<>(vcAdmin, rabbitMqSettings, vcSettings.getTopic(), + return new TbRabbitMqConsumerTemplate<>(vcAdmin, rabbitMqSettings, topicService.buildTopicName(vcSettings.getTopic()), msg -> new TbProtoQueueMsg<>(msg.getKey(), TransportProtos.ToVersionControlServiceMsg.parseFrom(msg.getData()), msg.getHeaders()) ); } diff --git a/common/queue/src/main/java/org/thingsboard/server/queue/provider/RabbitMqTransportQueueFactory.java b/common/queue/src/main/java/org/thingsboard/server/queue/provider/RabbitMqTransportQueueFactory.java index bcbd60a14e..1af28b629b 100644 --- a/common/queue/src/main/java/org/thingsboard/server/queue/provider/RabbitMqTransportQueueFactory.java +++ b/common/queue/src/main/java/org/thingsboard/server/queue/provider/RabbitMqTransportQueueFactory.java @@ -33,6 +33,7 @@ import org.thingsboard.server.queue.TbQueueRequestTemplate; import org.thingsboard.server.queue.common.DefaultTbQueueRequestTemplate; import org.thingsboard.server.queue.common.TbProtoQueueMsg; import org.thingsboard.server.queue.discovery.TbServiceInfoProvider; +import org.thingsboard.server.queue.discovery.TopicService; import org.thingsboard.server.queue.rabbitmq.TbRabbitMqAdmin; import org.thingsboard.server.queue.rabbitmq.TbRabbitMqConsumerTemplate; import org.thingsboard.server.queue.rabbitmq.TbRabbitMqProducerTemplate; @@ -55,6 +56,7 @@ public class RabbitMqTransportQueueFactory implements TbTransportQueueFactory { private final TbServiceInfoProvider serviceInfoProvider; private final TbQueueCoreSettings coreSettings; private final TbQueueRuleEngineSettings ruleEngineSettings; + private final TopicService topicService; private final TbQueueAdmin coreAdmin; private final TbQueueAdmin ruleEngineAdmin; @@ -67,13 +69,15 @@ public class RabbitMqTransportQueueFactory implements TbTransportQueueFactory { TbServiceInfoProvider serviceInfoProvider, TbQueueCoreSettings coreSettings, TbQueueRuleEngineSettings ruleEngineSettings, - TbRabbitMqQueueArguments queueArguments) { + TbRabbitMqQueueArguments queueArguments, + TopicService topicService) { this.transportApiSettings = transportApiSettings; this.transportNotificationSettings = transportNotificationSettings; this.rabbitMqSettings = rabbitMqSettings; this.serviceInfoProvider = serviceInfoProvider; this.coreSettings = coreSettings; this.ruleEngineSettings = ruleEngineSettings; + this.topicService = topicService; this.coreAdmin = new TbRabbitMqAdmin(rabbitMqSettings, queueArguments.getCoreArgs()); this.ruleEngineAdmin = new TbRabbitMqAdmin(rabbitMqSettings, queueArguments.getRuleEngineArgs()); @@ -84,11 +88,11 @@ public class RabbitMqTransportQueueFactory implements TbTransportQueueFactory { @Override public TbQueueRequestTemplate, TbProtoQueueMsg> createTransportApiRequestTemplate() { TbQueueProducer> producerTemplate = - new TbRabbitMqProducerTemplate<>(transportApiAdmin, rabbitMqSettings, transportApiSettings.getRequestsTopic()); + new TbRabbitMqProducerTemplate<>(transportApiAdmin, rabbitMqSettings, topicService.buildTopicName(transportApiSettings.getRequestsTopic())); TbQueueConsumer> consumerTemplate = new TbRabbitMqConsumerTemplate<>(transportApiAdmin, rabbitMqSettings, - transportApiSettings.getResponsesTopic() + "." + serviceInfoProvider.getServiceId(), + topicService.buildTopicName(transportApiSettings.getResponsesTopic() + "." + serviceInfoProvider.getServiceId()), msg -> new TbProtoQueueMsg<>(msg.getKey(), TransportApiResponseMsg.parseFrom(msg.getData()), msg.getHeaders())); DefaultTbQueueRequestTemplate.DefaultTbQueueRequestTemplateBuilder @@ -104,28 +108,28 @@ public class RabbitMqTransportQueueFactory implements TbTransportQueueFactory { @Override public TbQueueProducer> createRuleEngineMsgProducer() { - return new TbRabbitMqProducerTemplate<>(ruleEngineAdmin, rabbitMqSettings, ruleEngineSettings.getTopic()); + return new TbRabbitMqProducerTemplate<>(ruleEngineAdmin, rabbitMqSettings, topicService.buildTopicName(ruleEngineSettings.getTopic())); } @Override public TbQueueProducer> createTbCoreMsgProducer() { - return new TbRabbitMqProducerTemplate<>(coreAdmin, rabbitMqSettings, coreSettings.getTopic()); + return new TbRabbitMqProducerTemplate<>(coreAdmin, rabbitMqSettings, topicService.buildTopicName(coreSettings.getTopic())); } @Override public TbQueueProducer> createTbCoreNotificationsMsgProducer() { - return new TbRabbitMqProducerTemplate<>(notificationAdmin, rabbitMqSettings, coreSettings.getTopic()); + return new TbRabbitMqProducerTemplate<>(notificationAdmin, rabbitMqSettings, topicService.buildTopicName(coreSettings.getTopic())); } @Override public TbQueueConsumer> createTransportNotificationsConsumer() { - return new TbRabbitMqConsumerTemplate<>(notificationAdmin, rabbitMqSettings, transportNotificationSettings.getNotificationsTopic() + "." + serviceInfoProvider.getServiceId(), + return new TbRabbitMqConsumerTemplate<>(notificationAdmin, rabbitMqSettings, topicService.buildTopicName(transportNotificationSettings.getNotificationsTopic() + "." + serviceInfoProvider.getServiceId()), msg -> new TbProtoQueueMsg<>(msg.getKey(), ToTransportMsg.parseFrom(msg.getData()), msg.getHeaders())); } @Override public TbQueueProducer> createToUsageStatsServiceMsgProducer() { - return new TbRabbitMqProducerTemplate<>(coreAdmin, rabbitMqSettings, coreSettings.getUsageStatsTopic()); + return new TbRabbitMqProducerTemplate<>(coreAdmin, rabbitMqSettings, topicService.buildTopicName(coreSettings.getUsageStatsTopic())); } @PreDestroy diff --git a/common/queue/src/main/java/org/thingsboard/server/queue/provider/ServiceBusMonolithQueueFactory.java b/common/queue/src/main/java/org/thingsboard/server/queue/provider/ServiceBusMonolithQueueFactory.java index 950e49dc93..6f2dbdc72f 100644 --- a/common/queue/src/main/java/org/thingsboard/server/queue/provider/ServiceBusMonolithQueueFactory.java +++ b/common/queue/src/main/java/org/thingsboard/server/queue/provider/ServiceBusMonolithQueueFactory.java @@ -44,7 +44,7 @@ import org.thingsboard.server.queue.azure.servicebus.TbServiceBusSettings; import org.thingsboard.server.queue.common.DefaultTbQueueRequestTemplate; import org.thingsboard.server.queue.common.TbProtoJsQueueMsg; import org.thingsboard.server.queue.common.TbProtoQueueMsg; -import org.thingsboard.server.queue.discovery.NotificationsTopicService; +import org.thingsboard.server.queue.discovery.TopicService; import org.thingsboard.server.queue.discovery.TbServiceInfoProvider; import org.thingsboard.server.queue.settings.TbQueueCoreSettings; import org.thingsboard.server.queue.settings.TbQueueRemoteJsInvokeSettings; @@ -60,7 +60,7 @@ import java.nio.charset.StandardCharsets; @ConditionalOnExpression("'${queue.type:null}'=='service-bus' && '${service.type:null}'=='monolith'") public class ServiceBusMonolithQueueFactory implements TbCoreQueueFactory, TbRuleEngineQueueFactory, TbVersionControlQueueFactory { - private final NotificationsTopicService notificationsTopicService; + private final TopicService topicService; private final TbQueueCoreSettings coreSettings; private final TbServiceInfoProvider serviceInfoProvider; private final TbQueueRuleEngineSettings ruleEngineSettings; @@ -77,7 +77,7 @@ public class ServiceBusMonolithQueueFactory implements TbCoreQueueFactory, TbRul private final TbQueueAdmin notificationAdmin; private final TbQueueAdmin vcAdmin; - public ServiceBusMonolithQueueFactory(NotificationsTopicService notificationsTopicService, TbQueueCoreSettings coreSettings, + public ServiceBusMonolithQueueFactory(TopicService topicService, TbQueueCoreSettings coreSettings, TbQueueRuleEngineSettings ruleEngineSettings, TbServiceInfoProvider serviceInfoProvider, TbQueueTransportApiSettings transportApiSettings, @@ -86,7 +86,7 @@ public class ServiceBusMonolithQueueFactory implements TbCoreQueueFactory, TbRul TbQueueRemoteJsInvokeSettings jsInvokeSettings, TbQueueVersionControlSettings vcSettings, TbServiceBusQueueConfigs serviceBusQueueConfigs) { - this.notificationsTopicService = notificationsTopicService; + this.topicService = topicService; this.coreSettings = coreSettings; this.serviceInfoProvider = serviceInfoProvider; this.ruleEngineSettings = ruleEngineSettings; @@ -106,32 +106,32 @@ public class ServiceBusMonolithQueueFactory implements TbCoreQueueFactory, TbRul @Override public TbQueueProducer> createTransportNotificationsMsgProducer() { - return new TbServiceBusProducerTemplate<>(notificationAdmin, serviceBusSettings, transportNotificationSettings.getNotificationsTopic()); + return new TbServiceBusProducerTemplate<>(notificationAdmin, serviceBusSettings, topicService.buildTopicName(transportNotificationSettings.getNotificationsTopic())); } @Override public TbQueueProducer> createRuleEngineMsgProducer() { - return new TbServiceBusProducerTemplate<>(ruleEngineAdmin, serviceBusSettings, ruleEngineSettings.getTopic()); + return new TbServiceBusProducerTemplate<>(ruleEngineAdmin, serviceBusSettings, topicService.buildTopicName(ruleEngineSettings.getTopic())); } @Override public TbQueueProducer> createRuleEngineNotificationsMsgProducer() { - return new TbServiceBusProducerTemplate<>(notificationAdmin, serviceBusSettings, ruleEngineSettings.getTopic()); + return new TbServiceBusProducerTemplate<>(notificationAdmin, serviceBusSettings, topicService.buildTopicName(ruleEngineSettings.getTopic())); } @Override public TbQueueProducer> createTbCoreMsgProducer() { - return new TbServiceBusProducerTemplate<>(coreAdmin, serviceBusSettings, coreSettings.getTopic()); + return new TbServiceBusProducerTemplate<>(coreAdmin, serviceBusSettings, topicService.buildTopicName(coreSettings.getTopic())); } @Override public TbQueueProducer> createTbCoreNotificationsMsgProducer() { - return new TbServiceBusProducerTemplate<>(notificationAdmin, serviceBusSettings, coreSettings.getTopic()); + return new TbServiceBusProducerTemplate<>(notificationAdmin, serviceBusSettings, topicService.buildTopicName(coreSettings.getTopic())); } @Override public TbQueueConsumer> createToVersionControlMsgConsumer() { - return new TbServiceBusConsumerTemplate<>(vcAdmin, serviceBusSettings, vcSettings.getTopic(), + return new TbServiceBusConsumerTemplate<>(vcAdmin, serviceBusSettings, topicService.buildTopicName(vcSettings.getTopic()), msg -> new TbProtoQueueMsg<>(msg.getKey(), TransportProtos.ToVersionControlServiceMsg.parseFrom(msg.getData()), msg.getHeaders()) ); } @@ -145,32 +145,32 @@ public class ServiceBusMonolithQueueFactory implements TbCoreQueueFactory, TbRul @Override public TbQueueConsumer> createToRuleEngineNotificationsMsgConsumer() { return new TbServiceBusConsumerTemplate<>(notificationAdmin, serviceBusSettings, - notificationsTopicService.getNotificationsTopic(ServiceType.TB_RULE_ENGINE, serviceInfoProvider.getServiceId()).getFullTopicName(), + topicService.getNotificationsTopic(ServiceType.TB_RULE_ENGINE, serviceInfoProvider.getServiceId()).getFullTopicName(), msg -> new TbProtoQueueMsg<>(msg.getKey(), ToRuleEngineNotificationMsg.parseFrom(msg.getData()), msg.getHeaders())); } @Override public TbQueueConsumer> createToCoreMsgConsumer() { - return new TbServiceBusConsumerTemplate<>(coreAdmin, serviceBusSettings, coreSettings.getTopic(), + return new TbServiceBusConsumerTemplate<>(coreAdmin, serviceBusSettings, topicService.buildTopicName(coreSettings.getTopic()), msg -> new TbProtoQueueMsg<>(msg.getKey(), ToCoreMsg.parseFrom(msg.getData()), msg.getHeaders())); } @Override public TbQueueConsumer> createToCoreNotificationsMsgConsumer() { return new TbServiceBusConsumerTemplate<>(notificationAdmin, serviceBusSettings, - notificationsTopicService.getNotificationsTopic(ServiceType.TB_CORE, serviceInfoProvider.getServiceId()).getFullTopicName(), + topicService.getNotificationsTopic(ServiceType.TB_CORE, serviceInfoProvider.getServiceId()).getFullTopicName(), msg -> new TbProtoQueueMsg<>(msg.getKey(), ToCoreNotificationMsg.parseFrom(msg.getData()), msg.getHeaders())); } @Override public TbQueueConsumer> createTransportApiRequestConsumer() { - return new TbServiceBusConsumerTemplate<>(transportApiAdmin, serviceBusSettings, transportApiSettings.getRequestsTopic(), + return new TbServiceBusConsumerTemplate<>(transportApiAdmin, serviceBusSettings, topicService.buildTopicName(transportApiSettings.getRequestsTopic()), msg -> new TbProtoQueueMsg<>(msg.getKey(), TransportApiRequestMsg.parseFrom(msg.getData()), msg.getHeaders())); } @Override public TbQueueProducer> createTransportApiResponseProducer() { - return new TbServiceBusProducerTemplate<>(transportApiAdmin, serviceBusSettings, transportApiSettings.getResponsesTopic()); + return new TbServiceBusProducerTemplate<>(transportApiAdmin, serviceBusSettings, topicService.buildTopicName(transportApiSettings.getResponsesTopic())); } @Override @@ -198,29 +198,29 @@ public class ServiceBusMonolithQueueFactory implements TbCoreQueueFactory, TbRul @Override public TbQueueConsumer> createToUsageStatsServiceMsgConsumer() { - return new TbServiceBusConsumerTemplate<>(coreAdmin, serviceBusSettings, coreSettings.getUsageStatsTopic(), + return new TbServiceBusConsumerTemplate<>(coreAdmin, serviceBusSettings, topicService.buildTopicName(coreSettings.getUsageStatsTopic()), msg -> new TbProtoQueueMsg<>(msg.getKey(), ToUsageStatsServiceMsg.parseFrom(msg.getData()), msg.getHeaders())); } @Override public TbQueueConsumer> createToOtaPackageStateServiceMsgConsumer() { - return new TbServiceBusConsumerTemplate<>(coreAdmin, serviceBusSettings, coreSettings.getOtaPackageTopic(), + return new TbServiceBusConsumerTemplate<>(coreAdmin, serviceBusSettings, topicService.buildTopicName(coreSettings.getOtaPackageTopic()), msg -> new TbProtoQueueMsg<>(msg.getKey(), ToOtaPackageStateServiceMsg.parseFrom(msg.getData()), msg.getHeaders())); } @Override public TbQueueProducer> createToOtaPackageStateServiceMsgProducer() { - return new TbServiceBusProducerTemplate<>(coreAdmin, serviceBusSettings, coreSettings.getOtaPackageTopic()); + return new TbServiceBusProducerTemplate<>(coreAdmin, serviceBusSettings, topicService.buildTopicName(coreSettings.getOtaPackageTopic())); } @Override public TbQueueProducer> createToUsageStatsServiceMsgProducer() { - return new TbServiceBusProducerTemplate<>(coreAdmin, serviceBusSettings, coreSettings.getUsageStatsTopic()); + return new TbServiceBusProducerTemplate<>(coreAdmin, serviceBusSettings, topicService.buildTopicName(coreSettings.getUsageStatsTopic())); } @Override public TbQueueProducer> createVersionControlMsgProducer() { - return new TbServiceBusProducerTemplate<>(vcAdmin, serviceBusSettings, vcSettings.getTopic()); + return new TbServiceBusProducerTemplate<>(vcAdmin, serviceBusSettings, topicService.buildTopicName(vcSettings.getTopic())); } @PreDestroy diff --git a/common/queue/src/main/java/org/thingsboard/server/queue/provider/ServiceBusTbCoreQueueFactory.java b/common/queue/src/main/java/org/thingsboard/server/queue/provider/ServiceBusTbCoreQueueFactory.java index b92629633d..c86efee599 100644 --- a/common/queue/src/main/java/org/thingsboard/server/queue/provider/ServiceBusTbCoreQueueFactory.java +++ b/common/queue/src/main/java/org/thingsboard/server/queue/provider/ServiceBusTbCoreQueueFactory.java @@ -43,7 +43,7 @@ import org.thingsboard.server.queue.azure.servicebus.TbServiceBusSettings; import org.thingsboard.server.queue.common.DefaultTbQueueRequestTemplate; import org.thingsboard.server.queue.common.TbProtoJsQueueMsg; import org.thingsboard.server.queue.common.TbProtoQueueMsg; -import org.thingsboard.server.queue.discovery.NotificationsTopicService; +import org.thingsboard.server.queue.discovery.TopicService; import org.thingsboard.server.queue.discovery.TbServiceInfoProvider; import org.thingsboard.server.queue.settings.TbQueueCoreSettings; import org.thingsboard.server.queue.settings.TbQueueRemoteJsInvokeSettings; @@ -62,7 +62,7 @@ public class ServiceBusTbCoreQueueFactory implements TbCoreQueueFactory { private final TbQueueRuleEngineSettings ruleEngineSettings; private final TbQueueCoreSettings coreSettings; private final TbQueueTransportApiSettings transportApiSettings; - private final NotificationsTopicService notificationsTopicService; + private final TopicService topicService; private final TbServiceInfoProvider serviceInfoProvider; private final TbQueueRemoteJsInvokeSettings jsInvokeSettings; private final TbQueueTransportNotificationSettings transportNotificationSettings; @@ -77,7 +77,7 @@ public class ServiceBusTbCoreQueueFactory implements TbCoreQueueFactory { TbQueueCoreSettings coreSettings, TbQueueTransportApiSettings transportApiSettings, TbQueueRuleEngineSettings ruleEngineSettings, - NotificationsTopicService notificationsTopicService, + TopicService topicService, TbServiceInfoProvider serviceInfoProvider, TbQueueRemoteJsInvokeSettings jsInvokeSettings, TbQueueTransportNotificationSettings transportNotificationSettings, @@ -86,7 +86,7 @@ public class ServiceBusTbCoreQueueFactory implements TbCoreQueueFactory { this.coreSettings = coreSettings; this.transportApiSettings = transportApiSettings; this.ruleEngineSettings = ruleEngineSettings; - this.notificationsTopicService = notificationsTopicService; + this.topicService = topicService; this.serviceInfoProvider = serviceInfoProvider; this.jsInvokeSettings = jsInvokeSettings; this.transportNotificationSettings = transportNotificationSettings; @@ -100,51 +100,51 @@ public class ServiceBusTbCoreQueueFactory implements TbCoreQueueFactory { @Override public TbQueueProducer> createTransportNotificationsMsgProducer() { - return new TbServiceBusProducerTemplate<>(notificationAdmin, serviceBusSettings, transportNotificationSettings.getNotificationsTopic()); + return new TbServiceBusProducerTemplate<>(notificationAdmin, serviceBusSettings, topicService.buildTopicName(transportNotificationSettings.getNotificationsTopic())); } @Override public TbQueueProducer> createRuleEngineMsgProducer() { - return new TbServiceBusProducerTemplate<>(coreAdmin, serviceBusSettings, coreSettings.getTopic()); + return new TbServiceBusProducerTemplate<>(coreAdmin, serviceBusSettings, topicService.buildTopicName(coreSettings.getTopic())); } @Override public TbQueueProducer> createRuleEngineNotificationsMsgProducer() { - return new TbServiceBusProducerTemplate<>(notificationAdmin, serviceBusSettings, ruleEngineSettings.getTopic()); + return new TbServiceBusProducerTemplate<>(notificationAdmin, serviceBusSettings, topicService.buildTopicName(ruleEngineSettings.getTopic())); } @Override public TbQueueProducer> createTbCoreMsgProducer() { - return new TbServiceBusProducerTemplate<>(coreAdmin, serviceBusSettings, coreSettings.getTopic()); + return new TbServiceBusProducerTemplate<>(coreAdmin, serviceBusSettings, topicService.buildTopicName(coreSettings.getTopic())); } @Override public TbQueueProducer> createTbCoreNotificationsMsgProducer() { - return new TbServiceBusProducerTemplate<>(notificationAdmin, serviceBusSettings, coreSettings.getTopic()); + return new TbServiceBusProducerTemplate<>(notificationAdmin, serviceBusSettings, topicService.buildTopicName(coreSettings.getTopic())); } @Override public TbQueueConsumer> createToCoreMsgConsumer() { - return new TbServiceBusConsumerTemplate<>(coreAdmin, serviceBusSettings, coreSettings.getTopic(), + return new TbServiceBusConsumerTemplate<>(coreAdmin, serviceBusSettings, topicService.buildTopicName(coreSettings.getTopic()), msg -> new TbProtoQueueMsg<>(msg.getKey(), ToCoreMsg.parseFrom(msg.getData()), msg.getHeaders())); } @Override public TbQueueConsumer> createToCoreNotificationsMsgConsumer() { return new TbServiceBusConsumerTemplate<>(notificationAdmin, serviceBusSettings, - notificationsTopicService.getNotificationsTopic(ServiceType.TB_CORE, serviceInfoProvider.getServiceId()).getFullTopicName(), + topicService.getNotificationsTopic(ServiceType.TB_CORE, serviceInfoProvider.getServiceId()).getFullTopicName(), msg -> new TbProtoQueueMsg<>(msg.getKey(), ToCoreNotificationMsg.parseFrom(msg.getData()), msg.getHeaders())); } @Override public TbQueueConsumer> createTransportApiRequestConsumer() { - return new TbServiceBusConsumerTemplate<>(transportApiAdmin, serviceBusSettings, transportApiSettings.getRequestsTopic(), + return new TbServiceBusConsumerTemplate<>(transportApiAdmin, serviceBusSettings, topicService.buildTopicName(transportApiSettings.getRequestsTopic()), msg -> new TbProtoQueueMsg<>(msg.getKey(), TransportApiRequestMsg.parseFrom(msg.getData()), msg.getHeaders())); } @Override public TbQueueProducer> createTransportApiResponseProducer() { - return new TbServiceBusProducerTemplate<>(transportApiAdmin, serviceBusSettings, transportApiSettings.getResponsesTopic()); + return new TbServiceBusProducerTemplate<>(transportApiAdmin, serviceBusSettings, topicService.buildTopicName(transportApiSettings.getResponsesTopic())); } @Override @@ -172,24 +172,24 @@ public class ServiceBusTbCoreQueueFactory implements TbCoreQueueFactory { @Override public TbQueueConsumer> createToUsageStatsServiceMsgConsumer() { - return new TbServiceBusConsumerTemplate<>(coreAdmin, serviceBusSettings, coreSettings.getUsageStatsTopic(), + return new TbServiceBusConsumerTemplate<>(coreAdmin, serviceBusSettings, topicService.buildTopicName(coreSettings.getUsageStatsTopic()), msg -> new TbProtoQueueMsg<>(msg.getKey(), ToUsageStatsServiceMsg.parseFrom(msg.getData()), msg.getHeaders())); } @Override public TbQueueConsumer> createToOtaPackageStateServiceMsgConsumer() { - return new TbServiceBusConsumerTemplate<>(coreAdmin, serviceBusSettings, coreSettings.getOtaPackageTopic(), + return new TbServiceBusConsumerTemplate<>(coreAdmin, serviceBusSettings, topicService.buildTopicName(coreSettings.getOtaPackageTopic()), msg -> new TbProtoQueueMsg<>(msg.getKey(), ToOtaPackageStateServiceMsg.parseFrom(msg.getData()), msg.getHeaders())); } @Override public TbQueueProducer> createToOtaPackageStateServiceMsgProducer() { - return new TbServiceBusProducerTemplate<>(coreAdmin, serviceBusSettings, coreSettings.getOtaPackageTopic()); + return new TbServiceBusProducerTemplate<>(coreAdmin, serviceBusSettings, topicService.buildTopicName(coreSettings.getOtaPackageTopic())); } @Override public TbQueueProducer> createToUsageStatsServiceMsgProducer() { - return new TbServiceBusProducerTemplate<>(coreAdmin, serviceBusSettings, coreSettings.getUsageStatsTopic()); + return new TbServiceBusProducerTemplate<>(coreAdmin, serviceBusSettings, topicService.buildTopicName(coreSettings.getUsageStatsTopic())); } @Override diff --git a/common/queue/src/main/java/org/thingsboard/server/queue/provider/ServiceBusTbRuleEngineQueueFactory.java b/common/queue/src/main/java/org/thingsboard/server/queue/provider/ServiceBusTbRuleEngineQueueFactory.java index a1571becc7..28e26ac080 100644 --- a/common/queue/src/main/java/org/thingsboard/server/queue/provider/ServiceBusTbRuleEngineQueueFactory.java +++ b/common/queue/src/main/java/org/thingsboard/server/queue/provider/ServiceBusTbRuleEngineQueueFactory.java @@ -41,7 +41,7 @@ import org.thingsboard.server.queue.azure.servicebus.TbServiceBusSettings; import org.thingsboard.server.queue.common.DefaultTbQueueRequestTemplate; import org.thingsboard.server.queue.common.TbProtoJsQueueMsg; import org.thingsboard.server.queue.common.TbProtoQueueMsg; -import org.thingsboard.server.queue.discovery.NotificationsTopicService; +import org.thingsboard.server.queue.discovery.TopicService; import org.thingsboard.server.queue.discovery.TbServiceInfoProvider; import org.thingsboard.server.queue.settings.TbQueueCoreSettings; import org.thingsboard.server.queue.settings.TbQueueRemoteJsInvokeSettings; @@ -55,7 +55,7 @@ import java.nio.charset.StandardCharsets; @ConditionalOnExpression("'${queue.type:null}'=='service-bus' && '${service.type:null}'=='tb-rule-engine'") public class ServiceBusTbRuleEngineQueueFactory implements TbRuleEngineQueueFactory { - private final NotificationsTopicService notificationsTopicService; + private final TopicService topicService; private final TbQueueCoreSettings coreSettings; private final TbServiceInfoProvider serviceInfoProvider; private final TbQueueRuleEngineSettings ruleEngineSettings; @@ -68,14 +68,14 @@ public class ServiceBusTbRuleEngineQueueFactory implements TbRuleEngineQueueFact private final TbQueueAdmin jsExecutorAdmin; private final TbQueueAdmin notificationAdmin; - public ServiceBusTbRuleEngineQueueFactory(NotificationsTopicService notificationsTopicService, TbQueueCoreSettings coreSettings, + public ServiceBusTbRuleEngineQueueFactory(TopicService topicService, TbQueueCoreSettings coreSettings, TbQueueRuleEngineSettings ruleEngineSettings, TbServiceInfoProvider serviceInfoProvider, TbServiceBusSettings serviceBusSettings, TbQueueRemoteJsInvokeSettings jsInvokeSettings, TbQueueTransportNotificationSettings transportNotificationSettings, TbServiceBusQueueConfigs serviceBusQueueConfigs) { - this.notificationsTopicService = notificationsTopicService; + this.topicService = topicService; this.coreSettings = coreSettings; this.serviceInfoProvider = serviceInfoProvider; this.ruleEngineSettings = ruleEngineSettings; @@ -91,39 +91,39 @@ public class ServiceBusTbRuleEngineQueueFactory implements TbRuleEngineQueueFact @Override public TbQueueProducer> createTransportNotificationsMsgProducer() { - return new TbServiceBusProducerTemplate<>(notificationAdmin, serviceBusSettings, transportNotificationSettings.getNotificationsTopic()); + return new TbServiceBusProducerTemplate<>(notificationAdmin, serviceBusSettings, topicService.buildTopicName(transportNotificationSettings.getNotificationsTopic())); } @Override public TbQueueProducer> createRuleEngineMsgProducer() { - return new TbServiceBusProducerTemplate<>(ruleEngineAdmin, serviceBusSettings, ruleEngineSettings.getTopic()); + return new TbServiceBusProducerTemplate<>(ruleEngineAdmin, serviceBusSettings, topicService.buildTopicName(ruleEngineSettings.getTopic())); } @Override public TbQueueProducer> createRuleEngineNotificationsMsgProducer() { - return new TbServiceBusProducerTemplate<>(notificationAdmin, serviceBusSettings, ruleEngineSettings.getTopic()); + return new TbServiceBusProducerTemplate<>(notificationAdmin, serviceBusSettings, topicService.buildTopicName(ruleEngineSettings.getTopic())); } @Override public TbQueueProducer> createTbCoreMsgProducer() { - return new TbServiceBusProducerTemplate<>(coreAdmin, serviceBusSettings, coreSettings.getTopic()); + return new TbServiceBusProducerTemplate<>(coreAdmin, serviceBusSettings, topicService.buildTopicName(coreSettings.getTopic())); } @Override public TbQueueProducer> createTbCoreNotificationsMsgProducer() { - return new TbServiceBusProducerTemplate<>(notificationAdmin, serviceBusSettings, coreSettings.getTopic()); + return new TbServiceBusProducerTemplate<>(notificationAdmin, serviceBusSettings, topicService.buildTopicName(coreSettings.getTopic())); } @Override public TbQueueConsumer> createToRuleEngineMsgConsumer(Queue configuration) { - return new TbServiceBusConsumerTemplate<>(ruleEngineAdmin, serviceBusSettings, configuration.getTopic(), + return new TbServiceBusConsumerTemplate<>(ruleEngineAdmin, serviceBusSettings, topicService.buildTopicName(configuration.getTopic()), msg -> new TbProtoQueueMsg<>(msg.getKey(), ToRuleEngineMsg.parseFrom(msg.getData()), msg.getHeaders())); } @Override public TbQueueConsumer> createToRuleEngineNotificationsMsgConsumer() { return new TbServiceBusConsumerTemplate<>(notificationAdmin, serviceBusSettings, - notificationsTopicService.getNotificationsTopic(ServiceType.TB_RULE_ENGINE, serviceInfoProvider.getServiceId()).getFullTopicName(), + topicService.getNotificationsTopic(ServiceType.TB_RULE_ENGINE, serviceInfoProvider.getServiceId()).getFullTopicName(), msg -> new TbProtoQueueMsg<>(msg.getKey(), ToRuleEngineNotificationMsg.parseFrom(msg.getData()), msg.getHeaders())); } @@ -152,12 +152,12 @@ public class ServiceBusTbRuleEngineQueueFactory implements TbRuleEngineQueueFact @Override public TbQueueProducer> createToUsageStatsServiceMsgProducer() { - return new TbServiceBusProducerTemplate<>(coreAdmin, serviceBusSettings, coreSettings.getUsageStatsTopic()); + return new TbServiceBusProducerTemplate<>(coreAdmin, serviceBusSettings, topicService.buildTopicName(coreSettings.getUsageStatsTopic())); } @Override public TbQueueProducer> createToOtaPackageStateServiceMsgProducer() { - return new TbServiceBusProducerTemplate<>(coreAdmin, serviceBusSettings, coreSettings.getOtaPackageTopic()); + return new TbServiceBusProducerTemplate<>(coreAdmin, serviceBusSettings, topicService.buildTopicName(coreSettings.getOtaPackageTopic())); } @PreDestroy diff --git a/common/queue/src/main/java/org/thingsboard/server/queue/provider/ServiceBusTbVersionControlQueueFactory.java b/common/queue/src/main/java/org/thingsboard/server/queue/provider/ServiceBusTbVersionControlQueueFactory.java index 24cb4fe8bc..76149713ce 100644 --- a/common/queue/src/main/java/org/thingsboard/server/queue/provider/ServiceBusTbVersionControlQueueFactory.java +++ b/common/queue/src/main/java/org/thingsboard/server/queue/provider/ServiceBusTbVersionControlQueueFactory.java @@ -27,6 +27,7 @@ import org.thingsboard.server.queue.azure.servicebus.TbServiceBusProducerTemplat import org.thingsboard.server.queue.azure.servicebus.TbServiceBusQueueConfigs; import org.thingsboard.server.queue.azure.servicebus.TbServiceBusSettings; import org.thingsboard.server.queue.common.TbProtoQueueMsg; +import org.thingsboard.server.queue.discovery.TopicService; import org.thingsboard.server.queue.settings.TbQueueCoreSettings; import org.thingsboard.server.queue.settings.TbQueueVersionControlSettings; @@ -39,6 +40,7 @@ public class ServiceBusTbVersionControlQueueFactory implements TbVersionControlQ private final TbServiceBusSettings serviceBusSettings; private final TbQueueCoreSettings coreSettings; private final TbQueueVersionControlSettings vcSettings; + private final TopicService topicService; private final TbQueueAdmin coreAdmin; private final TbQueueAdmin notificationAdmin; @@ -47,11 +49,13 @@ public class ServiceBusTbVersionControlQueueFactory implements TbVersionControlQ public ServiceBusTbVersionControlQueueFactory(TbServiceBusSettings serviceBusSettings, TbQueueCoreSettings coreSettings, TbQueueVersionControlSettings vcSettings, - TbServiceBusQueueConfigs serviceBusQueueConfigs + TbServiceBusQueueConfigs serviceBusQueueConfigs, + TopicService topicService ) { this.serviceBusSettings = serviceBusSettings; this.coreSettings = coreSettings; this.vcSettings = vcSettings; + this.topicService = topicService; this.coreAdmin = new TbServiceBusAdmin(serviceBusSettings, serviceBusQueueConfigs.getCoreConfigs()); this.notificationAdmin = new TbServiceBusAdmin(serviceBusSettings, serviceBusQueueConfigs.getNotificationsConfigs()); @@ -60,17 +64,17 @@ public class ServiceBusTbVersionControlQueueFactory implements TbVersionControlQ @Override public TbQueueProducer> createToUsageStatsServiceMsgProducer() { - return new TbServiceBusProducerTemplate<>(coreAdmin, serviceBusSettings, coreSettings.getUsageStatsTopic()); + return new TbServiceBusProducerTemplate<>(coreAdmin, serviceBusSettings, topicService.buildTopicName(coreSettings.getUsageStatsTopic())); } @Override public TbQueueProducer> createTbCoreNotificationsMsgProducer() { - return new TbServiceBusProducerTemplate<>(notificationAdmin, serviceBusSettings, coreSettings.getTopic()); + return new TbServiceBusProducerTemplate<>(notificationAdmin, serviceBusSettings, topicService.buildTopicName(coreSettings.getTopic())); } @Override public TbQueueConsumer> createToVersionControlMsgConsumer() { - return new TbServiceBusConsumerTemplate<>(vcAdmin, serviceBusSettings, vcSettings.getTopic(), + return new TbServiceBusConsumerTemplate<>(vcAdmin, serviceBusSettings, topicService.buildTopicName(vcSettings.getTopic()), msg -> new TbProtoQueueMsg<>(msg.getKey(), TransportProtos.ToVersionControlServiceMsg.parseFrom(msg.getData()), msg.getHeaders()) ); } diff --git a/common/queue/src/main/java/org/thingsboard/server/queue/provider/ServiceBusTransportQueueFactory.java b/common/queue/src/main/java/org/thingsboard/server/queue/provider/ServiceBusTransportQueueFactory.java index 0a4bb59663..f6d85577e1 100644 --- a/common/queue/src/main/java/org/thingsboard/server/queue/provider/ServiceBusTransportQueueFactory.java +++ b/common/queue/src/main/java/org/thingsboard/server/queue/provider/ServiceBusTransportQueueFactory.java @@ -38,6 +38,7 @@ import org.thingsboard.server.queue.azure.servicebus.TbServiceBusSettings; import org.thingsboard.server.queue.common.DefaultTbQueueRequestTemplate; import org.thingsboard.server.queue.common.TbProtoQueueMsg; import org.thingsboard.server.queue.discovery.TbServiceInfoProvider; +import org.thingsboard.server.queue.discovery.TopicService; import org.thingsboard.server.queue.settings.TbQueueCoreSettings; import org.thingsboard.server.queue.settings.TbQueueRuleEngineSettings; import org.thingsboard.server.queue.settings.TbQueueTransportApiSettings; @@ -55,6 +56,7 @@ public class ServiceBusTransportQueueFactory implements TbTransportQueueFactory private final TbServiceInfoProvider serviceInfoProvider; private final TbQueueCoreSettings coreSettings; private final TbQueueRuleEngineSettings ruleEngineSettings; + private final TopicService topicService; private final TbQueueAdmin coreAdmin; private final TbQueueAdmin transportApiAdmin; @@ -67,13 +69,15 @@ public class ServiceBusTransportQueueFactory implements TbTransportQueueFactory TbQueueRuleEngineSettings ruleEngineSettings, TbServiceInfoProvider serviceInfoProvider, TbQueueCoreSettings coreSettings, - TbServiceBusQueueConfigs serviceBusQueueConfigs) { + TbServiceBusQueueConfigs serviceBusQueueConfigs, + TopicService topicService) { this.transportApiSettings = transportApiSettings; this.transportNotificationSettings = transportNotificationSettings; this.serviceBusSettings = serviceBusSettings; this.serviceInfoProvider = serviceInfoProvider; this.coreSettings = coreSettings; this.ruleEngineSettings = ruleEngineSettings; + this.topicService = topicService; this.coreAdmin = new TbServiceBusAdmin(serviceBusSettings, serviceBusQueueConfigs.getCoreConfigs()); this.transportApiAdmin = new TbServiceBusAdmin(serviceBusSettings, serviceBusQueueConfigs.getTransportApiConfigs()); @@ -84,11 +88,11 @@ public class ServiceBusTransportQueueFactory implements TbTransportQueueFactory @Override public TbQueueRequestTemplate, TbProtoQueueMsg> createTransportApiRequestTemplate() { TbQueueProducer> producerTemplate = - new TbServiceBusProducerTemplate<>(transportApiAdmin, serviceBusSettings, transportApiSettings.getRequestsTopic()); + new TbServiceBusProducerTemplate<>(transportApiAdmin, serviceBusSettings, topicService.buildTopicName(transportApiSettings.getRequestsTopic())); TbQueueConsumer> consumerTemplate = new TbServiceBusConsumerTemplate<>(transportApiAdmin, serviceBusSettings, - transportApiSettings.getResponsesTopic() + "." + serviceInfoProvider.getServiceId(), + topicService.buildTopicName(transportApiSettings.getResponsesTopic() + "." + serviceInfoProvider.getServiceId()), msg -> new TbProtoQueueMsg<>(msg.getKey(), TransportApiResponseMsg.parseFrom(msg.getData()), msg.getHeaders())); DefaultTbQueueRequestTemplate.DefaultTbQueueRequestTemplateBuilder @@ -104,29 +108,29 @@ public class ServiceBusTransportQueueFactory implements TbTransportQueueFactory @Override public TbQueueProducer> createRuleEngineMsgProducer() { - return new TbServiceBusProducerTemplate<>(ruleEngineAdmin, serviceBusSettings, ruleEngineSettings.getTopic()); + return new TbServiceBusProducerTemplate<>(ruleEngineAdmin, serviceBusSettings, topicService.buildTopicName(ruleEngineSettings.getTopic())); } @Override public TbQueueProducer> createTbCoreMsgProducer() { - return new TbServiceBusProducerTemplate<>(coreAdmin, serviceBusSettings, coreSettings.getTopic()); + return new TbServiceBusProducerTemplate<>(coreAdmin, serviceBusSettings, topicService.buildTopicName(coreSettings.getTopic())); } @Override public TbQueueProducer> createTbCoreNotificationsMsgProducer() { - return new TbServiceBusProducerTemplate<>(notificationAdmin, serviceBusSettings, coreSettings.getTopic()); + return new TbServiceBusProducerTemplate<>(notificationAdmin, serviceBusSettings, topicService.buildTopicName(coreSettings.getTopic())); } @Override public TbQueueConsumer> createTransportNotificationsConsumer() { return new TbServiceBusConsumerTemplate<>(notificationAdmin, serviceBusSettings, - transportNotificationSettings.getNotificationsTopic() + "." + serviceInfoProvider.getServiceId(), + topicService.buildTopicName(transportNotificationSettings.getNotificationsTopic() + "." + serviceInfoProvider.getServiceId()), msg -> new TbProtoQueueMsg<>(msg.getKey(), ToTransportMsg.parseFrom(msg.getData()), msg.getHeaders())); } @Override public TbQueueProducer> createToUsageStatsServiceMsgProducer() { - return new TbServiceBusProducerTemplate<>(coreAdmin, serviceBusSettings, coreSettings.getUsageStatsTopic()); + return new TbServiceBusProducerTemplate<>(coreAdmin, serviceBusSettings, topicService.buildTopicName(coreSettings.getUsageStatsTopic())); } @PreDestroy diff --git a/common/queue/src/main/java/org/thingsboard/server/queue/settings/TbQueueRemoteJsInvokeSettings.java b/common/queue/src/main/java/org/thingsboard/server/queue/settings/TbQueueRemoteJsInvokeSettings.java index 25f3244079..15ff55972d 100644 --- a/common/queue/src/main/java/org/thingsboard/server/queue/settings/TbQueueRemoteJsInvokeSettings.java +++ b/common/queue/src/main/java/org/thingsboard/server/queue/settings/TbQueueRemoteJsInvokeSettings.java @@ -24,6 +24,9 @@ import org.springframework.stereotype.Component; @Data @Component public class TbQueueRemoteJsInvokeSettings { + + @Value("${queue.prefix:}") + private String prefix; @Value("${queue.js.request_topic}") private String requestTopic; @@ -38,4 +41,12 @@ public class TbQueueRemoteJsInvokeSettings { @Value("${queue.js.max_requests_timeout}") private long maxRequestsTimeout; + + public String getRequestTopic(){ + return prefix.isBlank() ? requestTopic : prefix + "." + requestTopic; + } + + public String getResponseTopic(){ + return prefix.isBlank() ? responseTopic : prefix + "." + responseTopic; + } } diff --git a/common/transport/transport-api/src/main/java/org/thingsboard/server/common/transport/service/DefaultTransportService.java b/common/transport/transport-api/src/main/java/org/thingsboard/server/common/transport/service/DefaultTransportService.java index bc11570fc1..cc4a1bc3df 100644 --- a/common/transport/transport-api/src/main/java/org/thingsboard/server/common/transport/service/DefaultTransportService.java +++ b/common/transport/transport-api/src/main/java/org/thingsboard/server/common/transport/service/DefaultTransportService.java @@ -53,7 +53,6 @@ import org.thingsboard.server.common.data.limit.LimitedApi; import org.thingsboard.server.common.data.notification.rule.trigger.RateLimitsTrigger; import org.thingsboard.server.common.data.plugin.ComponentLifecycleEvent; import org.thingsboard.server.common.data.msg.TbMsgType; -import org.thingsboard.server.common.data.notification.rule.trigger.RateLimitsTrigger; import org.thingsboard.server.common.data.rpc.RpcStatus; import org.thingsboard.server.common.msg.TbMsg; import org.thingsboard.server.common.msg.TbMsgMetaData; @@ -95,7 +94,7 @@ import org.thingsboard.server.queue.TbQueueProducer; import org.thingsboard.server.queue.TbQueueRequestTemplate; import org.thingsboard.server.queue.common.AsyncCallbackTemplate; import org.thingsboard.server.queue.common.TbProtoQueueMsg; -import org.thingsboard.server.queue.discovery.NotificationsTopicService; +import org.thingsboard.server.queue.discovery.TopicService; import org.thingsboard.server.queue.discovery.PartitionService; import org.thingsboard.server.queue.discovery.TbServiceInfoProvider; import org.thingsboard.server.queue.provider.TbQueueProducerProvider; @@ -172,7 +171,7 @@ public class DefaultTransportService implements TransportService { private final TbTransportQueueFactory queueProvider; private final TbQueueProducerProvider producerProvider; - private final NotificationsTopicService notificationsTopicService; + private final TopicService topicService; private final TbServiceInfoProvider serviceInfoProvider; private final StatsFactory statsFactory; private final TransportDeviceProfileCache deviceProfileCache; @@ -207,7 +206,7 @@ public class DefaultTransportService implements TransportService { TbServiceInfoProvider serviceInfoProvider, TbTransportQueueFactory queueProvider, TbQueueProducerProvider producerProvider, - NotificationsTopicService notificationsTopicService, + TopicService topicService, StatsFactory statsFactory, TransportDeviceProfileCache deviceProfileCache, TransportTenantProfileCache tenantProfileCache, @@ -218,7 +217,7 @@ public class DefaultTransportService implements TransportService { this.serviceInfoProvider = serviceInfoProvider; this.queueProvider = queueProvider; this.producerProvider = producerProvider; - this.notificationsTopicService = notificationsTopicService; + this.topicService = topicService; this.statsFactory = statsFactory; this.deviceProfileCache = deviceProfileCache; this.tenantProfileCache = tenantProfileCache; @@ -243,7 +242,7 @@ public class DefaultTransportService implements TransportService { ruleEngineMsgProducer = producerProvider.getRuleEngineMsgProducer(); tbCoreMsgProducer = producerProvider.getTbCoreMsgProducer(); transportNotificationsConsumer = queueProvider.createTransportNotificationsConsumer(); - TopicPartitionInfo tpi = notificationsTopicService.getNotificationsTopic(ServiceType.TB_TRANSPORT, serviceInfoProvider.getServiceId()); + TopicPartitionInfo tpi = topicService.getNotificationsTopic(ServiceType.TB_TRANSPORT, serviceInfoProvider.getServiceId()); transportNotificationsConsumer.subscribe(Collections.singleton(tpi)); transportApiRequestTemplate.init(); mainConsumerExecutor = Executors.newSingleThreadExecutor(ThingsBoardThreadFactory.forName("transport-consumer")); diff --git a/common/version-control/src/main/java/org/thingsboard/server/service/sync/vc/DefaultClusterVersionControlService.java b/common/version-control/src/main/java/org/thingsboard/server/service/sync/vc/DefaultClusterVersionControlService.java index ab2dc417ca..e98d49b1dc 100644 --- a/common/version-control/src/main/java/org/thingsboard/server/service/sync/vc/DefaultClusterVersionControlService.java +++ b/common/version-control/src/main/java/org/thingsboard/server/service/sync/vc/DefaultClusterVersionControlService.java @@ -67,7 +67,7 @@ import org.thingsboard.server.gen.transport.TransportProtos.VersionedEntityInfoP import org.thingsboard.server.queue.TbQueueConsumer; import org.thingsboard.server.queue.TbQueueProducer; import org.thingsboard.server.queue.common.TbProtoQueueMsg; -import org.thingsboard.server.queue.discovery.NotificationsTopicService; +import org.thingsboard.server.queue.discovery.TopicService; import org.thingsboard.server.queue.discovery.PartitionService; import org.thingsboard.server.queue.discovery.TbApplicationEventListener; import org.thingsboard.server.queue.discovery.event.PartitionChangeEvent; @@ -110,7 +110,7 @@ public class DefaultClusterVersionControlService extends TbApplicationEventListe private final TbVersionControlQueueFactory queueFactory; private final DataDecodingEncodingService encodingService; private final GitRepositoryService vcService; - private final NotificationsTopicService notificationsTopicService; + private final TopicService topicService; private final ConcurrentMap tenantRepoLocks = new ConcurrentHashMap<>(); private final Map pendingCommitMap = new HashMap<>(); @@ -520,7 +520,7 @@ public class DefaultClusterVersionControlService extends TbApplicationEventListe } private void reply(VersionControlRequestCtx ctx, Optional e, Function enrichFunction) { - TopicPartitionInfo tpi = notificationsTopicService.getNotificationsTopic(ServiceType.TB_CORE, ctx.getNodeId()); + TopicPartitionInfo tpi = topicService.getNotificationsTopic(ServiceType.TB_CORE, ctx.getNodeId()); VersionControlResponseMsg.Builder builder = VersionControlResponseMsg.newBuilder() .setRequestIdMSB(ctx.getRequestId().getMostSignificantBits()) .setRequestIdLSB(ctx.getRequestId().getLeastSignificantBits()); diff --git a/dao/src/main/java/org/thingsboard/server/dao/model/ModelConstants.java b/dao/src/main/java/org/thingsboard/server/dao/model/ModelConstants.java index 527cbb8957..10dc226e7a 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/model/ModelConstants.java +++ b/dao/src/main/java/org/thingsboard/server/dao/model/ModelConstants.java @@ -302,6 +302,7 @@ public class ModelConstants { public static final String WIDGETS_BUNDLE_TITLE_PROPERTY = TITLE_PROPERTY; public static final String WIDGETS_BUNDLE_IMAGE_PROPERTY = "image"; public static final String WIDGETS_BUNDLE_DESCRIPTION = "description"; + public static final String WIDGETS_BUNDLE_ORDER = "widgets_bundle_order"; /** * Widget_type constants. diff --git a/dao/src/main/java/org/thingsboard/server/dao/model/sql/WidgetsBundleEntity.java b/dao/src/main/java/org/thingsboard/server/dao/model/sql/WidgetsBundleEntity.java index fedfa1471d..baa1140803 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/model/sql/WidgetsBundleEntity.java +++ b/dao/src/main/java/org/thingsboard/server/dao/model/sql/WidgetsBundleEntity.java @@ -50,6 +50,9 @@ public final class WidgetsBundleEntity extends BaseSqlEntity { @Column(name = ModelConstants.WIDGETS_BUNDLE_DESCRIPTION) private String description; + @Column(name = ModelConstants.WIDGETS_BUNDLE_ORDER) + private Integer order; + @Column(name = ModelConstants.EXTERNAL_ID_PROPERTY) private UUID externalId; @@ -69,6 +72,7 @@ public final class WidgetsBundleEntity extends BaseSqlEntity { this.title = widgetsBundle.getTitle(); this.image = widgetsBundle.getImage(); this.description = widgetsBundle.getDescription(); + this.order = widgetsBundle.getOrder(); if (widgetsBundle.getExternalId() != null) { this.externalId = widgetsBundle.getExternalId().getId(); } @@ -85,6 +89,7 @@ public final class WidgetsBundleEntity extends BaseSqlEntity { widgetsBundle.setTitle(title); widgetsBundle.setImage(image); widgetsBundle.setDescription(description); + widgetsBundle.setOrder(order); if (externalId != null) { widgetsBundle.setExternalId(new WidgetsBundleId(externalId)); } diff --git a/dao/src/main/java/org/thingsboard/server/dao/sql/widget/JpaWidgetsBundleDao.java b/dao/src/main/java/org/thingsboard/server/dao/sql/widget/JpaWidgetsBundleDao.java index 88e9a72f77..a5051a2747 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/sql/widget/JpaWidgetsBundleDao.java +++ b/dao/src/main/java/org/thingsboard/server/dao/sql/widget/JpaWidgetsBundleDao.java @@ -30,6 +30,9 @@ import org.thingsboard.server.dao.sql.JpaAbstractDao; import org.thingsboard.server.dao.util.SqlDao; import org.thingsboard.server.dao.widget.WidgetsBundleDao; +import java.util.Arrays; +import java.util.Collections; +import java.util.List; import java.util.Objects; import java.util.Optional; import java.util.UUID; @@ -92,20 +95,27 @@ public class JpaWidgetsBundleDao extends JpaAbstractDao findAllTenantWidgetsBundlesByTenantId(UUID tenantId, boolean fullSearch, PageLink pageLink) { + return findTenantWidgetsBundlesByTenantIds(Arrays.asList(tenantId, NULL_UUID), fullSearch, pageLink); + } + + @Override + public PageData findTenantWidgetsBundlesByTenantId(UUID tenantId, boolean fullSearch, PageLink pageLink) { + return findTenantWidgetsBundlesByTenantIds(Collections.singletonList(tenantId), fullSearch, pageLink); + } + + private PageData findTenantWidgetsBundlesByTenantIds(List tenantIds, boolean fullSearch, PageLink pageLink) { if (fullSearch) { return DaoUtil.toPageData( widgetsBundleRepository - .findAllTenantWidgetsBundlesByTenantIdFullSearch( - tenantId, - NULL_UUID, + .findAllTenantWidgetsBundlesByTenantIdsFullSearch( + tenantIds, pageLink.getTextSearch(), DaoUtil.toPageable(pageLink))); } else { return DaoUtil.toPageData( widgetsBundleRepository - .findAllTenantWidgetsBundlesByTenantId( - tenantId, - NULL_UUID, + .findAllTenantWidgetsBundlesByTenantIds( + tenantIds, pageLink.getTextSearch(), DaoUtil.toPageable(pageLink))); } diff --git a/dao/src/main/java/org/thingsboard/server/dao/sql/widget/WidgetTypeInfoRepository.java b/dao/src/main/java/org/thingsboard/server/dao/sql/widget/WidgetTypeInfoRepository.java index f3f3bf5139..f9114a9e40 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/sql/widget/WidgetTypeInfoRepository.java +++ b/dao/src/main/java/org/thingsboard/server/dao/sql/widget/WidgetTypeInfoRepository.java @@ -33,14 +33,29 @@ public interface WidgetTypeInfoRepository extends JpaRepository findSystemWidgetTypes(@Param("systemTenantId") UUID systemTenantId, @Param("searchText") String searchText, @@ -57,13 +72,29 @@ public interface WidgetTypeInfoRepository extends JpaRepository findAllTenantWidgetTypesByTenantId(@Param("tenantId") UUID tenantId, @Param("nullTenantId") UUID nullTenantId, @@ -81,13 +112,29 @@ public interface WidgetTypeInfoRepository extends JpaRepository findTenantWidgetTypesByTenantId(@Param("tenantId") UUID tenantId, @Param("searchText") String searchText, @@ -111,7 +158,15 @@ public interface WidgetTypeInfoRepository extends JpaRepository findWidgetTypesInfosByWidgetsBundleId(@Param("widgetsBundleId") UUID widgetsBundleId, @Param("searchText") String searchText, diff --git a/dao/src/main/java/org/thingsboard/server/dao/sql/widget/WidgetsBundleRepository.java b/dao/src/main/java/org/thingsboard/server/dao/sql/widget/WidgetsBundleRepository.java index 53bda50ba4..9db39aab8f 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/sql/widget/WidgetsBundleRepository.java +++ b/dao/src/main/java/org/thingsboard/server/dao/sql/widget/WidgetsBundleRepository.java @@ -23,6 +23,7 @@ import org.springframework.data.repository.query.Param; import org.thingsboard.server.dao.ExportableEntityRepository; import org.thingsboard.server.dao.model.sql.WidgetsBundleEntity; +import java.util.List; import java.util.UUID; /** @@ -40,21 +41,37 @@ public interface WidgetsBundleRepository extends JpaRepository findSystemWidgetsBundlesFullSearch(@Param("systemTenantId") UUID systemTenantId, @Param("textSearch") String textSearch, @@ -66,33 +83,48 @@ public interface WidgetsBundleRepository extends JpaRepository findAllTenantWidgetsBundlesByTenantId(@Param("tenantId") UUID tenantId, - @Param("nullTenantId") UUID nullTenantId, + Page findAllTenantWidgetsBundlesByTenantIds(@Param("tenantIds") List tenantIds, @Param("textSearch") String textSearch, Pageable pageable); @Query(nativeQuery = true, - value = "SELECT * FROM widgets_bundle wb WHERE wb.tenant_id IN (:tenantId, :nullTenantId) " + - "AND (wb.title ILIKE CONCAT('%', :textSearch, '%') " + + value = "SELECT * FROM widgets_bundle wb WHERE wb.tenant_id IN (:tenantIds) " + + "AND (:textSearch IS NULL OR wb.title ILIKE CONCAT('%', :textSearch, '%') " + "OR wb.description ILIKE CONCAT('%', :textSearch, '%') " + "OR wb.id in (SELECT wbw.widgets_bundle_id FROM widgets_bundle_widget wbw, widget_type wtd " + "WHERE wtd.id = wbw.widget_type_id " + - "AND (wtd.name ILIKE CONCAT('%', :textSearch, '%') " + + "AND (:textSearch IS NULL OR wtd.name ILIKE CONCAT('%', :textSearch, '%') " + "OR wtd.description ILIKE CONCAT('%', :textSearch, '%') " + - "OR lower(wtd.tags\\:\\:text)\\:\\:text[] && string_to_array(lower(:textSearch), ' '))))", - countQuery = "SELECT count(*) FROM widgets_bundle wb WHERE wb.tenant_id IN (:tenantId, :nullTenantId) " + - "AND (wb.title ILIKE CONCAT('%', :textSearch, '%') " + + "OR EXISTS (" + + "SELECT 1 " + + "FROM unnest(wtd.tags) AS currentTag " + + "WHERE :textSearch ILIKE '%' || currentTag || '%' " + + "AND (length(:textSearch) = length(currentTag) " + + "OR :textSearch ILIKE currentTag || ' %' " + + "OR :textSearch ILIKE '% ' || currentTag " + + "OR :textSearch ILIKE '% ' || currentTag || ' %')" + + ")))) " + + "ORDER BY wb.widgets_bundle_order ASC NULLS LAST", + countQuery = "SELECT count(*) FROM widgets_bundle wb WHERE wb.tenant_id IN (:tenantIds) " + + "AND (:textSearch IS NULL OR wb.title ILIKE CONCAT('%', :textSearch, '%') " + "OR wb.description ILIKE CONCAT('%', :textSearch, '%') " + "OR wb.id in (SELECT wbw.widgets_bundle_id FROM widgets_bundle_widget wbw, widget_type wtd " + "WHERE wtd.id = wbw.widget_type_id " + - "AND (wtd.name ILIKE CONCAT('%', :textSearch, '%') " + + "AND (:textSearch IS NULL OR wtd.name ILIKE CONCAT('%', :textSearch, '%') " + "OR wtd.description ILIKE CONCAT('%', :textSearch, '%') " + - "OR lower(wtd.tags\\:\\:text)\\:\\:text[] && string_to_array(lower(:textSearch), ' '))))" + "OR EXISTS (" + + "SELECT 1 " + + "FROM unnest(wtd.tags) AS currentTag " + + "WHERE :textSearch ILIKE '%' || currentTag || '%' " + + "AND (length(:textSearch) = length(currentTag) " + + "OR :textSearch ILIKE currentTag || ' %' " + + "OR :textSearch ILIKE '% ' || currentTag " + + "OR :textSearch ILIKE '% ' || currentTag || ' %')" + + "))))" ) - Page findAllTenantWidgetsBundlesByTenantIdFullSearch(@Param("tenantId") UUID tenantId, - @Param("nullTenantId") UUID nullTenantId, + Page findAllTenantWidgetsBundlesByTenantIdsFullSearch(@Param("tenantIds") List tenantIds, @Param("textSearch") String textSearch, Pageable pageable); diff --git a/dao/src/main/java/org/thingsboard/server/dao/widget/WidgetsBundleDao.java b/dao/src/main/java/org/thingsboard/server/dao/widget/WidgetsBundleDao.java index b5486b61b1..9e0d70dcd8 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/widget/WidgetsBundleDao.java +++ b/dao/src/main/java/org/thingsboard/server/dao/widget/WidgetsBundleDao.java @@ -74,5 +74,14 @@ public interface WidgetsBundleDao extends Dao, ExportableEntityDa */ PageData findAllTenantWidgetsBundlesByTenantId(UUID tenantId, boolean fullSearch, PageLink pageLink); + /** + * Find all tenant widgets bundles (does not include system) by tenantId and page link. + * + * @param tenantId the tenantId + * @param pageLink the page link + * @return the list of widgets bundles objects + */ + PageData findTenantWidgetsBundlesByTenantId(UUID tenantId, boolean fullSearch, PageLink pageLink); + } diff --git a/dao/src/main/java/org/thingsboard/server/dao/widget/WidgetsBundleServiceImpl.java b/dao/src/main/java/org/thingsboard/server/dao/widget/WidgetsBundleServiceImpl.java index 998cbb6e31..87a507873d 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/widget/WidgetsBundleServiceImpl.java +++ b/dao/src/main/java/org/thingsboard/server/dao/widget/WidgetsBundleServiceImpl.java @@ -142,6 +142,14 @@ public class WidgetsBundleServiceImpl implements WidgetsBundleService { return widgetsBundleDao.findAllTenantWidgetsBundlesByTenantId(tenantId.getId(), fullSearch, pageLink); } + @Override + public PageData findTenantWidgetsBundlesByTenantIdAndPageLink(TenantId tenantId, boolean fullSearch, PageLink pageLink) { + log.trace("Executing findTenantWidgetsBundlesByTenantIdAndPageLink, tenantId [{}], fullSearch [{}], pageLink [{}]", tenantId, fullSearch, pageLink); + Validator.validateId(tenantId, INCORRECT_TENANT_ID + tenantId); + Validator.validatePageLink(pageLink); + return widgetsBundleDao.findTenantWidgetsBundlesByTenantId(tenantId.getId(), fullSearch, pageLink); + } + @Override public List findAllTenantWidgetsBundlesByTenantId(TenantId tenantId) { log.trace("Executing findAllTenantWidgetsBundlesByTenantId, tenantId [{}]", tenantId); diff --git a/dao/src/main/resources/sql/schema-entities.sql b/dao/src/main/resources/sql/schema-entities.sql index 8a79c0cfde..3b6d5966cd 100644 --- a/dao/src/main/resources/sql/schema-entities.sql +++ b/dao/src/main/resources/sql/schema-entities.sql @@ -503,6 +503,7 @@ CREATE TABLE IF NOT EXISTS widgets_bundle ( title varchar(255), image varchar(1000000), description varchar(1024), + widgets_bundle_order int, external_id uuid, CONSTRAINT uq_widgets_bundle_alias UNIQUE (tenant_id, alias), CONSTRAINT widgets_bundle_external_id_unq_key UNIQUE (tenant_id, external_id) diff --git a/dao/src/test/java/org/thingsboard/server/dao/sql/widget/JpaWidgetTypeDaoTest.java b/dao/src/test/java/org/thingsboard/server/dao/sql/widget/JpaWidgetTypeDaoTest.java index 7f4b2c6cfa..e6d46bb942 100644 --- a/dao/src/test/java/org/thingsboard/server/dao/sql/widget/JpaWidgetTypeDaoTest.java +++ b/dao/src/test/java/org/thingsboard/server/dao/sql/widget/JpaWidgetTypeDaoTest.java @@ -41,8 +41,10 @@ import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.List; +import java.util.Map; import java.util.UUID; +import static org.assertj.core.api.Assertions.assertThat; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; @@ -51,6 +53,26 @@ import static org.junit.Assert.assertNotNull; */ public class JpaWidgetTypeDaoTest extends AbstractJpaDaoTest { + // given search text should find a widget with tags, when searching by tags + final Map SHOULD_FIND_SEARCH_TO_TAGS_MAP = Map.of( + "A", new String[]{"a", "b", "c"}, + "test A test", new String[]{"a", "b", "c"}, + "test x y test", new String[]{"x y", "b", "c"}, + "x y test", new String[]{"x y", "b", "c"}, + "x y", new String[]{"x y", "b", "c"}, + "test x y", new String[]{"x y", "b", "c"} + ); + + // given search text should not find a widget with tags, when searching by tags + final Map SHOULDNT_FIND_SEARCH_TO_TAGS_MAP = Map.of( + "testA test", new String[]{"a", "b", "c"}, + "testx y test", new String[]{"x y", "b", "c"}, + "testx ytest", new String[]{"x y", "b", "c"}, + "x ytest", new String[]{"x y", "b", "c"}, + "testx y", new String[]{"x y", "b", "c"}, + "x", new String[]{"x y", "b", "c"} + ); + final String BUNDLE_ALIAS = "BUNDLE_ALIAS"; final int WIDGET_TYPE_COUNT = 3; List widgetTypeList; @@ -96,6 +118,19 @@ public class JpaWidgetTypeDaoTest extends AbstractJpaDaoTest { return widgetTypeDao.save(TenantId.SYS_TENANT_ID, widgetType); } + WidgetTypeDetails createAndSaveWidgetType(TenantId tenantId, int number, String[] tags) { + WidgetTypeDetails widgetType = new WidgetTypeDetails(); + widgetType.setTenantId(tenantId); + widgetType.setName("WIDGET_TYPE_" + number); + widgetType.setDescription("WIDGET_TYPE_DESCRIPTION" + number); + widgetType.setFqn("FQN_" + number); + var descriptor = JacksonUtil.newObjectNode(); + descriptor.put("type", number % 2 == 0 ? "latest" : "static"); + widgetType.setDescriptor(descriptor); + widgetType.setTags(tags); + return widgetTypeDao.save(TenantId.SYS_TENANT_ID, widgetType); + } + @After public void tearDown() { widgetsBundleDao.removeById(TenantId.SYS_TENANT_ID, widgetsBundle.getUuidId()); @@ -123,6 +158,40 @@ public class JpaWidgetTypeDaoTest extends AbstractJpaDaoTest { assertEquals(new WidgetTypeInfo(widgetTypeList.get(2)), widgetTypes.getData().get(0)); } + @Test + public void testTagsSearchInFindBySystemWidgetTypes() { + for (var entry : SHOULD_FIND_SEARCH_TO_TAGS_MAP.entrySet()) { + String searchText = entry.getKey(); + String[] tags = entry.getValue(); + + WidgetTypeDetails savedWidgetType = createAndSaveWidgetType(TenantId.SYS_TENANT_ID, WIDGET_TYPE_COUNT + 1, tags); + + PageData widgetTypes = widgetTypeDao.findSystemWidgetTypes( + TenantId.SYS_TENANT_ID, true, DeprecatedFilter.ALL, null, new PageLink(10, 0, searchText) + ); + + assertThat(widgetTypes.getData()).hasSize(1); + assertThat(widgetTypes.getData().get(0).getId()).isEqualTo(savedWidgetType.getId()); + + widgetTypeDao.removeById(TenantId.SYS_TENANT_ID, savedWidgetType.getUuidId()); + } + + for (var entry : SHOULDNT_FIND_SEARCH_TO_TAGS_MAP.entrySet()) { + String searchText = entry.getKey(); + String[] tags = entry.getValue(); + + WidgetTypeDetails savedWidgetType = createAndSaveWidgetType(TenantId.SYS_TENANT_ID, WIDGET_TYPE_COUNT + 1, tags); + + PageData widgetTypes = widgetTypeDao.findSystemWidgetTypes( + TenantId.SYS_TENANT_ID, true, DeprecatedFilter.ALL, null, new PageLink(10, 0, searchText) + ); + + assertThat(widgetTypes.getData()).hasSize(0); + + widgetTypeDao.removeById(TenantId.SYS_TENANT_ID, savedWidgetType.getUuidId()); + } + } + @Test public void testFindTenantWidgetTypesByTenantId() { UUID tenantId = Uuids.timeBased(); @@ -138,6 +207,74 @@ public class JpaWidgetTypeDaoTest extends AbstractJpaDaoTest { assertEquals(new WidgetTypeInfo(widgetTypeList.get(5)), widgetTypes.getData().get(2)); } + @Test + public void testTagsSearchInFindTenantWidgetTypesByTenantId() { + for (var entry : SHOULD_FIND_SEARCH_TO_TAGS_MAP.entrySet()) { + String searchText = entry.getKey(); + String[] tags = entry.getValue(); + + WidgetTypeDetails savedWidgetType = createAndSaveWidgetType(TenantId.SYS_TENANT_ID, WIDGET_TYPE_COUNT + 1, tags); + + PageData widgetTypes = widgetTypeDao.findTenantWidgetTypesByTenantId( + TenantId.SYS_TENANT_ID.getId(), true, DeprecatedFilter.ALL, null, new PageLink(10, 0, searchText) + ); + + assertThat(widgetTypes.getData()).hasSize(1); + assertThat(widgetTypes.getData().get(0).getId()).isEqualTo(savedWidgetType.getId()); + + widgetTypeDao.removeById(TenantId.SYS_TENANT_ID, savedWidgetType.getUuidId()); + } + + for (var entry : SHOULDNT_FIND_SEARCH_TO_TAGS_MAP.entrySet()) { + String searchText = entry.getKey(); + String[] tags = entry.getValue(); + + WidgetTypeDetails savedWidgetType = createAndSaveWidgetType(TenantId.SYS_TENANT_ID, WIDGET_TYPE_COUNT + 1, tags); + + PageData widgetTypes = widgetTypeDao.findTenantWidgetTypesByTenantId( + TenantId.SYS_TENANT_ID.getId(), true, DeprecatedFilter.ALL, null, new PageLink(10, 0, searchText) + ); + + assertThat(widgetTypes.getData()).hasSize(0); + + widgetTypeDao.removeById(TenantId.SYS_TENANT_ID, savedWidgetType.getUuidId()); + } + } + + @Test + public void testTagsSearchInFindAllTenantWidgetTypesByTenantId() { + for (var entry : SHOULD_FIND_SEARCH_TO_TAGS_MAP.entrySet()) { + String searchText = entry.getKey(); + String[] tags = entry.getValue(); + + WidgetTypeDetails savedWidgetType = createAndSaveWidgetType(TenantId.SYS_TENANT_ID, WIDGET_TYPE_COUNT + 1, tags); + + PageData widgetTypes = widgetTypeDao.findAllTenantWidgetTypesByTenantId( + TenantId.SYS_TENANT_ID.getId(), true, DeprecatedFilter.ALL, null, new PageLink(10, 0, searchText) + ); + + assertThat(widgetTypes.getData()).hasSize(1); + assertThat(widgetTypes.getData().get(0).getId()).isEqualTo(savedWidgetType.getId()); + + widgetTypeDao.removeById(TenantId.SYS_TENANT_ID, savedWidgetType.getUuidId()); + } + + for (var entry : SHOULDNT_FIND_SEARCH_TO_TAGS_MAP.entrySet()) { + String searchText = entry.getKey(); + String[] tags = entry.getValue(); + + WidgetTypeDetails savedWidgetType = createAndSaveWidgetType(TenantId.SYS_TENANT_ID, WIDGET_TYPE_COUNT + 1, tags); + + PageData widgetTypes = widgetTypeDao.findAllTenantWidgetTypesByTenantId( + TenantId.SYS_TENANT_ID.getId(), true, DeprecatedFilter.ALL, null, new PageLink(10, 0, searchText) + ); + + assertThat(widgetTypes.getData()).hasSize(0); + + widgetTypeDao.removeById(TenantId.SYS_TENANT_ID, savedWidgetType.getUuidId()); + } + } + @Test public void testFindByWidgetTypeInfosByBundleId() { PageData widgetTypes = widgetTypeDao.findWidgetTypesInfosByWidgetsBundleId(TenantId.SYS_TENANT_ID.getId(), widgetsBundle.getUuidId(),true, DeprecatedFilter.ALL, Collections.singletonList("latest"), @@ -152,6 +289,42 @@ public class JpaWidgetTypeDaoTest extends AbstractJpaDaoTest { assertEquals(new WidgetTypeInfo(widgetTypeList.get(0)), widgetTypes.getData().get(0)); } + @Test + public void testTagsSearchInFindByWidgetTypeInfosByBundleId() { + for (var entry : SHOULD_FIND_SEARCH_TO_TAGS_MAP.entrySet()) { + String searchText = entry.getKey(); + String[] tags = entry.getValue(); + + WidgetTypeDetails savedWidgetType = createAndSaveWidgetType(TenantId.SYS_TENANT_ID, WIDGET_TYPE_COUNT + 1, tags); + widgetTypeDao.saveWidgetsBundleWidget(new WidgetsBundleWidget(this.widgetsBundle.getId(), savedWidgetType.getId(), WIDGET_TYPE_COUNT + 1)); + + PageData widgetTypes = widgetTypeDao.findWidgetTypesInfosByWidgetsBundleId( + TenantId.SYS_TENANT_ID.getId(), widgetsBundle.getUuidId(), true, DeprecatedFilter.ALL, null, new PageLink(10, 0, searchText) + ); + + assertThat(widgetTypes.getData()).hasSize(1); + assertThat(widgetTypes.getData().get(0).getId()).isEqualTo(savedWidgetType.getId()); + + widgetTypeDao.removeById(TenantId.SYS_TENANT_ID, savedWidgetType.getUuidId()); + } + + for (var entry : SHOULDNT_FIND_SEARCH_TO_TAGS_MAP.entrySet()) { + String searchText = entry.getKey(); + String[] tags = entry.getValue(); + + WidgetTypeDetails savedWidgetType = createAndSaveWidgetType(TenantId.SYS_TENANT_ID, WIDGET_TYPE_COUNT + 1, tags); + widgetTypeDao.saveWidgetsBundleWidget(new WidgetsBundleWidget(this.widgetsBundle.getId(), savedWidgetType.getId(), WIDGET_TYPE_COUNT + 1)); + + PageData widgetTypes = widgetTypeDao.findWidgetTypesInfosByWidgetsBundleId( + TenantId.SYS_TENANT_ID.getId(), widgetsBundle.getUuidId(), true, DeprecatedFilter.ALL, null, new PageLink(10, 0, searchText) + ); + + assertThat(widgetTypes.getData()).hasSize(0); + + widgetTypeDao.removeById(TenantId.SYS_TENANT_ID, savedWidgetType.getUuidId()); + } + } + @Test public void testFindByTenantIdAndFqn() { WidgetType result = widgetTypeList.get(0); diff --git a/dao/src/test/java/org/thingsboard/server/dao/sql/widget/JpaWidgetsBundleDaoTest.java b/dao/src/test/java/org/thingsboard/server/dao/sql/widget/JpaWidgetsBundleDaoTest.java index 424bda88f7..08ad0df630 100644 --- a/dao/src/test/java/org/thingsboard/server/dao/sql/widget/JpaWidgetsBundleDaoTest.java +++ b/dao/src/test/java/org/thingsboard/server/dao/sql/widget/JpaWidgetsBundleDaoTest.java @@ -36,16 +36,36 @@ import org.thingsboard.server.dao.widget.WidgetsBundleDao; import java.util.ArrayList; import java.util.Comparator; import java.util.List; +import java.util.Map; import java.util.UUID; import java.util.stream.Collectors; +import static org.assertj.core.api.Assertions.assertThat; import static org.junit.Assert.assertEquals; -/** - * Created by Valerii Sosliuk on 4/23/2017. - */ public class JpaWidgetsBundleDaoTest extends AbstractJpaDaoTest { + + // given search text should find a widget with tags, when searching by tags + final Map SHOULD_FIND_SEARCH_TO_TAGS_MAP = Map.of( + "A", new String[]{"a", "b", "c"}, + "test A test", new String[]{"a", "b", "c"}, + "test x y test", new String[]{"x y", "b", "c"}, + "x y test", new String[]{"x y", "b", "c"}, + "x y", new String[]{"x y", "b", "c"}, + "test x y", new String[]{"x y", "b", "c"} + ); + + // given search text should not find a widget with tags, when searching by tags + final Map SHOULDNT_FIND_SEARCH_TO_TAGS_MAP = Map.of( + "testA test", new String[]{"a", "b", "c"}, + "testx y test", new String[]{"x y", "b", "c"}, + "testx ytest", new String[]{"x y", "b", "c"}, + "x ytest", new String[]{"x y", "b", "c"}, + "testx y", new String[]{"x y", "b", "c"}, + "x", new String[]{"x y", "b", "c"} + ); + List widgetsBundles; List widgetTypeList; @@ -140,6 +160,51 @@ public class JpaWidgetsBundleDaoTest extends AbstractJpaDaoTest { assertEquals(widgetsBundle3, widgetsBundles3.getData().get(1)); } + @Test + public void testTagsSearchInFindBySystemWidgetTypes() { + for (var entry : SHOULD_FIND_SEARCH_TO_TAGS_MAP.entrySet()) { + String searchText = entry.getKey(); + String[] tags = entry.getValue(); + + WidgetsBundle systemWidgetBundle = createSystemWidgetBundle("Test Widget Bundle Alias", "Test Widget Bundle Title"); + WidgetType widgetType = createAndSaveWidgetType(TenantId.SYS_TENANT_ID, 0, "Test Widget Type Name", "Test Widget Type Description", tags); + widgetTypeDao.saveWidgetsBundleWidget(new WidgetsBundleWidget(systemWidgetBundle.getId(), widgetType.getId(), 0)); + + PageData widgetTypes = widgetsBundleDao.findSystemWidgetsBundles( + TenantId.SYS_TENANT_ID, true, new PageLink(10, 0, searchText) + ); + + assertThat(widgetTypes.getData()).hasSize(1); + assertThat(widgetTypes.getData().get(0).getId()).isEqualTo(systemWidgetBundle.getId()); + + widgetTypeDao.removeWidgetTypeFromWidgetsBundle(systemWidgetBundle.getUuidId(), widgetType.getUuidId()); + widgetTypeDao.removeById(TenantId.SYS_TENANT_ID, widgetType.getUuidId()); + widgetsBundleDao.removeById(TenantId.SYS_TENANT_ID, systemWidgetBundle.getUuidId()); + } + + for (var entry : SHOULDNT_FIND_SEARCH_TO_TAGS_MAP.entrySet()) { + String searchText = entry.getKey(); + String[] tags = entry.getValue(); + + WidgetsBundle systemWidgetBundle = createSystemWidgetBundle("Test Widget Bundle Alias", "Test Widget Bundle Title"); + WidgetType widgetType = createAndSaveWidgetType(TenantId.SYS_TENANT_ID, 0, "Test Widget Type Name", "Test Widget Type Description", tags); + widgetTypeDao.saveWidgetsBundleWidget(new WidgetsBundleWidget(systemWidgetBundle.getId(), widgetType.getId(), 0)); + + PageData widgetTypes = widgetsBundleDao.findSystemWidgetsBundles( + TenantId.SYS_TENANT_ID, true, new PageLink(10, 0, searchText) + ); + + assertThat(widgetTypes.getData()).hasSize(0); + + widgetTypeDao.removeWidgetTypeFromWidgetsBundle(systemWidgetBundle.getUuidId(), widgetType.getUuidId()); + widgetTypeDao.removeById(TenantId.SYS_TENANT_ID, widgetType.getUuidId()); + widgetsBundleDao.removeById(TenantId.SYS_TENANT_ID, systemWidgetBundle.getUuidId()); + } + + widgetsBundles = new ArrayList<>(); + widgetTypeList = new ArrayList<>(); + } + @Test public void testFindWidgetsBundlesByTenantId() { UUID tenantId1 = Uuids.timeBased(); @@ -206,7 +271,7 @@ public class JpaWidgetsBundleDaoTest extends AbstractJpaDaoTest { createSystemWidgetBundles(2, "WB_SYS_" + i + "_"); } widgetsBundles = widgetsBundleDao.find(TenantId.SYS_TENANT_ID).stream().sorted(Comparator.comparing(WidgetsBundle::getTitle)).collect(Collectors.toList());; - assertEquals(100, widgetsBundleDao.find(TenantId.SYS_TENANT_ID).size()); + assertEquals(100, widgetsBundles.size()); var widgetType1 = createAndSaveWidgetType(new TenantId(tenantId1), 1, "Test widget type 1", "This is the widget type 1", new String[]{"tag1", "Tag2", "TEST_TAG"}); var widgetType2 = createAndSaveWidgetType(new TenantId(tenantId2), 2, "Test widget type 2", "This is the widget type 2", new String[]{"tag3", "Tag5", "TEST_Tag2"}); @@ -245,6 +310,79 @@ public class JpaWidgetsBundleDaoTest extends AbstractJpaDaoTest { assertEquals(widgetsBundle3, widgetsBundles5.getData().get(0)); } + @Test + public void testTagsSearchInFindAllWidgetsBundlesByTenantId() { + for (var entry : SHOULD_FIND_SEARCH_TO_TAGS_MAP.entrySet()) { + String searchText = entry.getKey(); + String[] tags = entry.getValue(); + + WidgetsBundle systemWidgetBundle = createSystemWidgetBundle("Test Widget Bundle Alias", "Test Widget Bundle Title"); + WidgetType widgetType = createAndSaveWidgetType(TenantId.SYS_TENANT_ID, 0, "Test Widget Type Name", "Test Widget Type Description", tags); + widgetTypeDao.saveWidgetsBundleWidget(new WidgetsBundleWidget(systemWidgetBundle.getId(), widgetType.getId(), 0)); + + PageData widgetTypes = widgetsBundleDao.findAllTenantWidgetsBundlesByTenantId( + TenantId.SYS_TENANT_ID.getId(), true, new PageLink(10, 0, searchText) + ); + + assertThat(widgetTypes.getData()).hasSize(1); + assertThat(widgetTypes.getData().get(0).getId()).isEqualTo(systemWidgetBundle.getId()); + + widgetTypeDao.removeWidgetTypeFromWidgetsBundle(systemWidgetBundle.getUuidId(), widgetType.getUuidId()); + widgetTypeDao.removeById(TenantId.SYS_TENANT_ID, widgetType.getUuidId()); + widgetsBundleDao.removeById(TenantId.SYS_TENANT_ID, systemWidgetBundle.getUuidId()); + } + + for (var entry : SHOULDNT_FIND_SEARCH_TO_TAGS_MAP.entrySet()) { + String searchText = entry.getKey(); + String[] tags = entry.getValue(); + + WidgetsBundle systemWidgetBundle = createSystemWidgetBundle("Test Widget Bundle Alias", "Test Widget Bundle Title"); + WidgetType widgetType = createAndSaveWidgetType(TenantId.SYS_TENANT_ID, 0, "Test Widget Type Name", "Test Widget Type Description", tags); + widgetTypeDao.saveWidgetsBundleWidget(new WidgetsBundleWidget(systemWidgetBundle.getId(), widgetType.getId(), 0)); + + PageData widgetTypes = widgetsBundleDao.findAllTenantWidgetsBundlesByTenantId( + TenantId.SYS_TENANT_ID.getId(), true, new PageLink(10, 0, searchText) + ); + + assertThat(widgetTypes.getData()).hasSize(0); + + widgetTypeDao.removeWidgetTypeFromWidgetsBundle(systemWidgetBundle.getUuidId(), widgetType.getUuidId()); + widgetTypeDao.removeById(TenantId.SYS_TENANT_ID, widgetType.getUuidId()); + widgetsBundleDao.removeById(TenantId.SYS_TENANT_ID, systemWidgetBundle.getUuidId()); + } + + widgetsBundles = new ArrayList<>(); + widgetTypeList = new ArrayList<>(); + } + + @Test + public void testOrderInFindAllWidgetsBundlesByTenantIdFullSearch() { + UUID tenantId1 = Uuids.timeBased(); + for (int i = 0; i < 10; i++) { + createWidgetsBundle(TenantId.fromUUID(tenantId1), "WB1_" + i, "WB1_" + (10-i), i % 2 == 1 ? null : (int)(Math.random() * 1000)); + createWidgetsBundle(TenantId.SYS_TENANT_ID, "WB_SYS_" + i, "WB_SYS_" + (10-i), i % 2 == 0 ? null : (int)(Math.random() * 1000)); + } + widgetsBundles = widgetsBundleDao.find(TenantId.SYS_TENANT_ID).stream().sorted((o1, o2) -> { + int result = 0; + if (o1.getOrder() != null && o2.getOrder() != null) { + result = o1.getOrder() - o2.getOrder(); + } else if (o1.getOrder() == null && o2.getOrder() != null) { + result = 1; + } else if (o1.getOrder() != null) { + result = -1; + } + if (result == 0) { + result = o1.getTitle().compareTo(o2.getTitle()); + } + return result; + }).collect(Collectors.toList());; + assertEquals(20, widgetsBundles.size()); + PageLink pageLink = new PageLink(100, 0, "", new SortOrder("title")); + PageData widgetsBundlesData = widgetsBundleDao.findAllTenantWidgetsBundlesByTenantId(tenantId1, true, pageLink); + assertEquals(20, widgetsBundlesData.getData().size()); + assertEquals(widgetsBundles, widgetsBundlesData.getData()); + } + @Test public void testSearchTextNotFound() { UUID tenantId = Uuids.timeBased(); @@ -259,26 +397,30 @@ public class JpaWidgetsBundleDaoTest extends AbstractJpaDaoTest { private void createWidgetBundles(int count, UUID tenantId, String prefix) { for (int i = 0; i < count; i++) { - WidgetsBundle widgetsBundle = new WidgetsBundle(); - widgetsBundle.setAlias(prefix + i); - widgetsBundle.setTitle(prefix + i); - widgetsBundle.setId(new WidgetsBundleId(Uuids.timeBased())); - widgetsBundle.setTenantId(TenantId.fromUUID(tenantId)); - widgetsBundleDao.save(TenantId.SYS_TENANT_ID, widgetsBundle); + createWidgetsBundle(TenantId.fromUUID(tenantId), prefix + i, prefix + i, null); } } private void createSystemWidgetBundles(int count, String prefix) { for (int i = 0; i < count; i++) { - WidgetsBundle widgetsBundle = new WidgetsBundle(); - widgetsBundle.setAlias(prefix + i); - widgetsBundle.setTitle(prefix + i); - widgetsBundle.setTenantId(TenantId.SYS_TENANT_ID); - widgetsBundle.setId(new WidgetsBundleId(Uuids.timeBased())); - widgetsBundleDao.save(TenantId.SYS_TENANT_ID, widgetsBundle); + createWidgetsBundle(TenantId.SYS_TENANT_ID, prefix + i, prefix + i, null); } } + private WidgetsBundle createSystemWidgetBundle(String alias, String title) { + return createWidgetsBundle(TenantId.SYS_TENANT_ID, alias, title, null); + } + + private WidgetsBundle createWidgetsBundle(TenantId tenantId, String alias, String title, Integer order) { + WidgetsBundle widgetsBundle = new WidgetsBundle(); + widgetsBundle.setAlias(alias); + widgetsBundle.setTitle(title); + widgetsBundle.setTenantId(tenantId); + widgetsBundle.setId(new WidgetsBundleId(Uuids.timeBased())); + widgetsBundle.setOrder(order); + return widgetsBundleDao.save(TenantId.SYS_TENANT_ID, widgetsBundle); + } + WidgetType createAndSaveWidgetType(TenantId tenantId, int number, String name, String description, String[] tags) { WidgetTypeDetails widgetType = new WidgetTypeDetails(); widgetType.setTenantId(tenantId); diff --git a/msa/js-executor/config/custom-environment-variables.yml b/msa/js-executor/config/custom-environment-variables.yml index 5ca66d71a1..c92ae78553 100644 --- a/msa/js-executor/config/custom-environment-variables.yml +++ b/msa/js-executor/config/custom-environment-variables.yml @@ -15,6 +15,7 @@ # queue_type: "TB_QUEUE_TYPE" #kafka (Apache Kafka) or aws-sqs (AWS SQS) or pubsub (PubSub) or service-bus (Azure Service Bus) or rabbitmq (RabbitMQ) +queue_prefix: "TB_QUEUE_PREFIX" request_topic: "REMOTE_JS_EVAL_REQUEST_TOPIC" http_port: "HTTP_PORT" # /livenessProbe diff --git a/msa/js-executor/config/default.yml b/msa/js-executor/config/default.yml index 43712f0f61..e6927c0bff 100644 --- a/msa/js-executor/config/default.yml +++ b/msa/js-executor/config/default.yml @@ -16,6 +16,7 @@ queue_type: "kafka" request_topic: "js_eval.requests" +queue_prefix: "" http_port: "8888" # /livenessProbe js: diff --git a/msa/js-executor/queue/awsSqsTemplate.ts b/msa/js-executor/queue/awsSqsTemplate.ts index c9951008c7..1486df802b 100644 --- a/msa/js-executor/queue/awsSqsTemplate.ts +++ b/msa/js-executor/queue/awsSqsTemplate.ts @@ -38,7 +38,8 @@ import uuid from 'uuid-random'; export class AwsSqsTemplate implements IQueue { private logger = _logger(`awsSqsTemplate`); - private requestTopic: string = config.get('request_topic'); + private queuePrefix: string = config.get('queue_prefix'); + private requestTopic: string = this.queuePrefix ? this.queuePrefix + "." + config.get('request_topic') : config.get('request_topic'); private accessKeyId: string = config.get('aws_sqs.access_key_id'); private secretAccessKey: string = config.get('aws_sqs.secret_access_key'); private region: string = config.get('aws_sqs.region'); diff --git a/msa/js-executor/queue/kafkaTemplate.ts b/msa/js-executor/queue/kafkaTemplate.ts index 5d1b6cc6c1..9759c095c9 100644 --- a/msa/js-executor/queue/kafkaTemplate.ts +++ b/msa/js-executor/queue/kafkaTemplate.ts @@ -61,7 +61,8 @@ export class KafkaTemplate implements IQueue { async init(): Promise { const kafkaBootstrapServers: string = config.get('kafka.bootstrap.servers'); - const requestTopic: string = config.get('request_topic'); + const queuePrefix: string = config.get('queue_prefix'); + const requestTopic: string = queuePrefix ? queuePrefix + "." + config.get('request_topic') : config.get('request_topic'); const useConfluent = config.get('kafka.use_confluent_cloud'); this.logger.info('Kafka Bootstrap Servers: %s', kafkaBootstrapServers); diff --git a/msa/js-executor/queue/pubSubTemplate.ts b/msa/js-executor/queue/pubSubTemplate.ts index 71c9b72d5f..a1b05ab7bf 100644 --- a/msa/js-executor/queue/pubSubTemplate.ts +++ b/msa/js-executor/queue/pubSubTemplate.ts @@ -26,7 +26,8 @@ export class PubSubTemplate implements IQueue { private logger = _logger(`pubSubTemplate`); private projectId: string = config.get('pubsub.project_id'); private credentials = JSON.parse(config.get('pubsub.service_account')); - private requestTopic: string = config.get('request_topic'); + private queuePrefix: string = config.get('queue_prefix'); + private requestTopic: string = this.queuePrefix ? this.queuePrefix + "." + config.get('request_topic') : config.get('request_topic'); private queueProperties: string = config.get('pubsub.queue_properties'); private pubSubClient: PubSub; diff --git a/msa/js-executor/queue/rabbitmqTemplate.ts b/msa/js-executor/queue/rabbitmqTemplate.ts index fca4b1e5bd..7bb078c047 100644 --- a/msa/js-executor/queue/rabbitmqTemplate.ts +++ b/msa/js-executor/queue/rabbitmqTemplate.ts @@ -24,7 +24,8 @@ import { Options, Replies } from 'amqplib/properties'; export class RabbitMqTemplate implements IQueue { private logger = _logger(`rabbitmqTemplate`); - private requestTopic: string = config.get('request_topic'); + private queuePrefix: string = config.get('queue_prefix'); + private requestTopic: string = this.queuePrefix ? this.queuePrefix + "." + config.get('request_topic') : config.get('request_topic'); private host = config.get('rabbitmq.host'); private port = config.get('rabbitmq.port'); private vhost = config.get('rabbitmq.virtual_host'); diff --git a/msa/js-executor/queue/serviceBusTemplate.ts b/msa/js-executor/queue/serviceBusTemplate.ts index 16950b7bce..70f0d68d3b 100644 --- a/msa/js-executor/queue/serviceBusTemplate.ts +++ b/msa/js-executor/queue/serviceBusTemplate.ts @@ -31,7 +31,8 @@ import { export class ServiceBusTemplate implements IQueue { private logger = _logger(`serviceBusTemplate`); - private requestTopic: string = config.get('request_topic'); + private queuePrefix: string = config.get('queue_prefix'); + private requestTopic: string = this.queuePrefix ? this.queuePrefix + "." + config.get('request_topic') : config.get('request_topic'); private namespaceName = config.get('service_bus.namespace_name'); private sasKeyName = config.get('service_bus.sas_key_name'); private sasKey = config.get('service_bus.sas_key'); diff --git a/msa/vc-executor/src/main/resources/tb-vc-executor.yml b/msa/vc-executor/src/main/resources/tb-vc-executor.yml index 2a35ee73fd..4ffa1ab702 100644 --- a/msa/vc-executor/src/main/resources/tb-vc-executor.yml +++ b/msa/vc-executor/src/main/resources/tb-vc-executor.yml @@ -48,6 +48,7 @@ zk: # Queue configuration parameters queue: type: "${TB_QUEUE_TYPE:kafka}" # in-memory or kafka (Apache Kafka) or aws-sqs (AWS SQS) or pubsub (PubSub) or service-bus (Azure Service Bus) or rabbitmq (RabbitMQ) + prefix: "${TB_QUEUE_PREFIX:}" # Global queue prefix. If specified, prefix is added before default topic name: 'prefix.default_topic_name'. Prefix is applied to all topics (and consumer groups for kafka) except of js executor topics (please use REMOTE_JS_EVAL_REQUEST_TOPIC and REMOTE_JS_EVAL_RESPONSE_TOPIC to specify custom topic names) in_memory: stats: # For debug lvl diff --git a/transport/coap/src/main/resources/tb-coap-transport.yml b/transport/coap/src/main/resources/tb-coap-transport.yml index 825b197e1d..437f551690 100644 --- a/transport/coap/src/main/resources/tb-coap-transport.yml +++ b/transport/coap/src/main/resources/tb-coap-transport.yml @@ -194,6 +194,7 @@ transport: # Queue configuration parameters queue: type: "${TB_QUEUE_TYPE:kafka}" # kafka (Apache Kafka) or aws-sqs (AWS SQS) or pubsub (PubSub) or service-bus (Azure Service Bus) or rabbitmq (RabbitMQ) + prefix: "${TB_QUEUE_PREFIX:}" # Global queue prefix. If specified, prefix is added before default topic name: 'prefix.default_topic_name'. Prefix is applied to all topics (and consumer groups for kafka) except of js executor topics (please use REMOTE_JS_EVAL_REQUEST_TOPIC and REMOTE_JS_EVAL_RESPONSE_TOPIC to specify custom topic names) kafka: # Kafka Bootstrap Servers bootstrap.servers: "${TB_KAFKA_SERVERS:localhost:9092}" diff --git a/transport/http/src/main/resources/tb-http-transport.yml b/transport/http/src/main/resources/tb-http-transport.yml index 315b138bfa..8d4d6fadf0 100644 --- a/transport/http/src/main/resources/tb-http-transport.yml +++ b/transport/http/src/main/resources/tb-http-transport.yml @@ -177,6 +177,7 @@ transport: # Queue configuration parameters queue: type: "${TB_QUEUE_TYPE:kafka}" # kafka (Apache Kafka) or aws-sqs (AWS SQS) or pubsub (PubSub) or service-bus (Azure Service Bus) or rabbitmq (RabbitMQ) + prefix: "${TB_QUEUE_PREFIX:}" # Global queue prefix. If specified, prefix is added before default topic name: 'prefix.default_topic_name'. Prefix is applied to all topics (and consumer groups for kafka) except of js executor topics (please use REMOTE_JS_EVAL_REQUEST_TOPIC and REMOTE_JS_EVAL_RESPONSE_TOPIC to specify custom topic names) kafka: # Kafka Bootstrap Servers bootstrap.servers: "${TB_KAFKA_SERVERS:localhost:9092}" diff --git a/transport/lwm2m/src/main/resources/tb-lwm2m-transport.yml b/transport/lwm2m/src/main/resources/tb-lwm2m-transport.yml index db4870e40b..8fd1c11e6e 100644 --- a/transport/lwm2m/src/main/resources/tb-lwm2m-transport.yml +++ b/transport/lwm2m/src/main/resources/tb-lwm2m-transport.yml @@ -273,6 +273,7 @@ transport: # Queue configuration properties queue: type: "${TB_QUEUE_TYPE:kafka}" # kafka (Apache Kafka) or aws-sqs (AWS SQS) or pubsub (PubSub) or service-bus (Azure Service Bus) or rabbitmq (RabbitMQ) + prefix: "${TB_QUEUE_PREFIX:}" # Global queue prefix. If specified, prefix is added before default topic name: 'prefix.default_topic_name'. Prefix is applied to all topics (and consumer groups for kafka) except of js executor topics (please use REMOTE_JS_EVAL_REQUEST_TOPIC and REMOTE_JS_EVAL_RESPONSE_TOPIC to specify custom topic names) kafka: # Kafka Bootstrap Servers bootstrap.servers: "${TB_KAFKA_SERVERS:localhost:9092}" diff --git a/transport/mqtt/src/main/resources/tb-mqtt-transport.yml b/transport/mqtt/src/main/resources/tb-mqtt-transport.yml index ff26bb6e38..6c51d18ab7 100644 --- a/transport/mqtt/src/main/resources/tb-mqtt-transport.yml +++ b/transport/mqtt/src/main/resources/tb-mqtt-transport.yml @@ -210,6 +210,7 @@ transport: # Queue configuration parameters queue: type: "${TB_QUEUE_TYPE:kafka}" # kafka (Apache Kafka) or aws-sqs (AWS SQS) or pubsub (PubSub) or service-bus (Azure Service Bus) or rabbitmq (RabbitMQ) + prefix: "${TB_QUEUE_PREFIX:}" # Global queue prefix. If specified, prefix is added before default topic name: 'prefix.default_topic_name'. Prefix is applied to all topics (and consumer groups for kafka) except of js executor topics (please use REMOTE_JS_EVAL_REQUEST_TOPIC and REMOTE_JS_EVAL_RESPONSE_TOPIC to specify custom topic names) kafka: # Kafka Bootstrap Servers bootstrap.servers: "${TB_KAFKA_SERVERS:localhost:9092}" diff --git a/transport/snmp/src/main/resources/tb-snmp-transport.yml b/transport/snmp/src/main/resources/tb-snmp-transport.yml index db883dcd30..eeb6807714 100644 --- a/transport/snmp/src/main/resources/tb-snmp-transport.yml +++ b/transport/snmp/src/main/resources/tb-snmp-transport.yml @@ -156,6 +156,7 @@ transport: # Queue configuration parameters queue: type: "${TB_QUEUE_TYPE:kafka}" # kafka (Apache Kafka) or aws-sqs (AWS SQS) or pubsub (PubSub) or service-bus (Azure Service Bus) or rabbitmq (RabbitMQ) + prefix: "${TB_QUEUE_PREFIX:}" # Global queue prefix. If specified, prefix is added before default topic name: 'prefix.default_topic_name'. Prefix is applied to all topics (and consumer groups for kafka) except of js executor topics (please use REMOTE_JS_EVAL_REQUEST_TOPIC and REMOTE_JS_EVAL_RESPONSE_TOPIC to specify custom topic names) kafka: # Kafka Bootstrap Servers bootstrap.servers: "${TB_KAFKA_SERVERS:localhost:9092}" diff --git a/ui-ngx/src/app/core/auth/auth.service.ts b/ui-ngx/src/app/core/auth/auth.service.ts index f4777aae29..875cef30d1 100644 --- a/ui-ngx/src/app/core/auth/auth.service.ts +++ b/ui-ngx/src/app/core/auth/auth.service.ts @@ -370,7 +370,8 @@ export class AuthService { data: { title: translations['login.error'], message: loginError, - ok: translations['action.close'] + ok: translations['action.close'], + textMode: true } }; this.dialog.open(AlertDialogComponent, dialogConfig); diff --git a/ui-ngx/src/app/core/http/attribute.service.ts b/ui-ngx/src/app/core/http/attribute.service.ts index 9022a47eef..3ca29e425e 100644 --- a/ui-ngx/src/app/core/http/attribute.service.ts +++ b/ui-ngx/src/app/core/http/attribute.service.ts @@ -32,12 +32,18 @@ export class AttributeService { private http: HttpClient ) { } - public getEntityAttributes(entityId: EntityId, attributeScope: AttributeScope, + public getEntityAttributes(entityId: EntityId, attributeScope?: AttributeScope, keys?: Array, config?: RequestConfig): Observable> { - let url = `/api/plugins/telemetry/${entityId.entityType}/${entityId.id}/values/attributes/${attributeScope}`; + let url = `/api/plugins/telemetry/${entityId.entityType}/${entityId.id}/values/attributes`; + + if (attributeScope) { + url += `/${attributeScope}`; + } + if (keys && keys.length) { url += `?keys=${keys.join(',')}`; } + return this.http.get>(url, defaultHttpOptionsFromConfig(config)); } diff --git a/ui-ngx/src/app/core/services/resources.service.ts b/ui-ngx/src/app/core/services/resources.service.ts index 29d86fc2fb..f7a34c9ef5 100644 --- a/ui-ngx/src/app/core/services/resources.service.ts +++ b/ui-ngx/src/app/core/services/resources.service.ts @@ -68,7 +68,9 @@ export class ResourcesService { } const subject = new ReplaySubject(); this.loadedJsonResources[url] = subject; - this.http.get(url).subscribe( + const req$ = (url.endsWith('.raw') || url.endsWith('.svg') ? + this.http.get(url, {responseType: 'text'}) : this.http.get(url)) as Observable; + req$.subscribe( { next: (o) => { if (postProcess) { diff --git a/ui-ngx/src/app/modules/home/components/widget/config/basic/basic-widget-config.module.ts b/ui-ngx/src/app/modules/home/components/widget/config/basic/basic-widget-config.module.ts index c26cf43542..3d303b01b7 100644 --- a/ui-ngx/src/app/modules/home/components/widget/config/basic/basic-widget-config.module.ts +++ b/ui-ngx/src/app/modules/home/components/widget/config/basic/basic-widget-config.module.ts @@ -70,6 +70,18 @@ import { import { ProgressBarBasicConfigComponent } from '@home/components/widget/config/basic/cards/progress-bar-basic-config.component'; +import { + RadialGaugeBasicConfigComponent +} from '@home/components/widget/config/basic/gauge/radial-gauge-basic-config.component'; +import { + ThermometerScaleGaugeBasicConfigComponent +} from '@home/components/widget/config/basic/gauge/thermometer-scale-gauge-basic-config.component'; +import { + CompassGaugeBasicConfigComponent +} from '@home/components/widget/config/basic/gauge/compass-gauge-basic-config.component'; +import { + LiquidLevelCardBasicConfigComponent +} from '@home/components/widget/config/basic/indicator/liquid-level-card-basic-config.component'; @NgModule({ declarations: [ @@ -91,7 +103,11 @@ import { WindSpeedDirectionBasicConfigComponent, SignalStrengthBasicConfigComponent, ValueChartCardBasicConfigComponent, - ProgressBarBasicConfigComponent + ProgressBarBasicConfigComponent, + RadialGaugeBasicConfigComponent, + ThermometerScaleGaugeBasicConfigComponent, + CompassGaugeBasicConfigComponent, + LiquidLevelCardBasicConfigComponent ], imports: [ CommonModule, @@ -117,7 +133,11 @@ import { WindSpeedDirectionBasicConfigComponent, SignalStrengthBasicConfigComponent, ValueChartCardBasicConfigComponent, - ProgressBarBasicConfigComponent + ProgressBarBasicConfigComponent, + RadialGaugeBasicConfigComponent, + ThermometerScaleGaugeBasicConfigComponent, + CompassGaugeBasicConfigComponent, + LiquidLevelCardBasicConfigComponent ] }) export class BasicWidgetConfigModule { @@ -137,5 +157,9 @@ export const basicWidgetConfigComponentsMap: {[key: string]: Type + + + + + +
+
widgets.gauge.gauge-appearance
+
+ + {{ 'widgets.gauge.units-title' | translate }} + +
+ + + + + + + +
+
+ +
+
widget-config.units-short
+
+ + + + + + +
+
+ +
+ + {{ 'widgets.gauge.value' | translate }} + +
+ + +
widget-config.decimals-suffix
+
+ + + + +
+
+ +
+
widgets.gauge.ticks
+
+
widgets.gauge.min-value-short
+ + + +
widgets.gauge.max-value-short
+ + + + + + + +
+
+ +
+
widgets.gauge.arrow-and-scale-color
+ + +
+
+
widgets.gauge.plate-color
+ + +
+
+
widgets.gauge.scale-color
+ + +
+ +
+
widgets.gauge.progress-bar
+
+
widgets.gauge.progress-bar-color-start
+ + +
+
+
widgets.gauge.progress-bar-color-end
+ + +
+
+
widgets.gauge.bar-stroke-color
+ + +
+
+ +
+
+
widget-config.card-appearance
+
+
{{ 'widget-config.background-color' | translate }}
+ + +
+
+
widget-config.show-card-buttons
+ + {{ 'fullscreen.fullscreen' | translate }} + +
+
+
{{ 'widget-config.card-border-radius' | translate }}
+ + + +
+
+ + +
diff --git a/ui-ngx/src/app/modules/home/components/widget/config/basic/gauge/analog-gauge-basic-config.component.ts b/ui-ngx/src/app/modules/home/components/widget/config/basic/gauge/analog-gauge-basic-config.component.ts new file mode 100644 index 0000000000..6e422105ec --- /dev/null +++ b/ui-ngx/src/app/modules/home/components/widget/config/basic/gauge/analog-gauge-basic-config.component.ts @@ -0,0 +1,187 @@ +/// +/// Copyright © 2016-2023 The Thingsboard Authors +/// +/// Licensed under the Apache License, Version 2.0 (the "License"); +/// you may not use this file except in compliance with the License. +/// You may obtain a copy of the License at +/// +/// http://www.apache.org/licenses/LICENSE-2.0 +/// +/// Unless required by applicable law or agreed to in writing, software +/// distributed under the License is distributed on an "AS IS" BASIS, +/// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +/// See the License for the specific language governing permissions and +/// limitations under the License. +/// + +import { UntypedFormBuilder, UntypedFormGroup } from '@angular/forms'; +import { Store } from '@ngrx/store'; +import { AppState } from '@core/core.state'; +import { BasicWidgetConfigComponent } from '@home/components/widget/config/widget-config.component.models'; +import { WidgetConfigComponentData } from '@home/models/widget-component.models'; +import { + datasourcesHasAggregation, + datasourcesHasOnlyComparisonAggregation, + WidgetConfig, +} from '@shared/models/widget.models'; +import { WidgetConfigComponent } from '@home/components/widget/widget-config.component'; +import { + getTimewindowConfig, + setTimewindowConfig +} from '@home/components/widget/config/timewindow-config-panel.component'; +import { formatValue, isUndefined } from '@core/utils'; +import { ColorType } from '@shared/models/widget-settings.models'; + +export class GaugeBasicConfigComponent extends BasicWidgetConfigComponent { + + public get displayTimewindowConfig(): boolean { + const datasources = this.radialGaugeWidgetConfigForm.get('datasources').value; + return datasourcesHasAggregation(datasources); + } + + public onlyHistoryTimewindow(): boolean { + const datasources = this.radialGaugeWidgetConfigForm.get('datasources').value; + return datasourcesHasOnlyComparisonAggregation(datasources); + } + + colorType = ColorType; + + radialGaugeWidgetConfigForm: UntypedFormGroup; + + valuePreviewFn = this._valuePreviewFn.bind(this); + + constructor(protected store: Store, + protected widgetConfigComponent: WidgetConfigComponent, + protected fb: UntypedFormBuilder) { + super(store, widgetConfigComponent); + } + + protected configForm(): UntypedFormGroup { + return this.radialGaugeWidgetConfigForm; + } + + protected setupDefaults(configData: WidgetConfigComponentData) { + super.setupDefaults(configData); + } + + protected onConfigSet(configData: WidgetConfigComponentData) { + this.radialGaugeWidgetConfigForm = this.fb.group({ + timewindowConfig: [getTimewindowConfig(configData.config), []], + datasources: [configData.config.datasources, []], + + showUnitTitle: [configData.config.settings?.showUnitTitle, []], + unitTitle: [configData.config.settings?.unitTitle, []], + titleFont: [configData.config.settings?.titleFont, []], + titleColor: [configData.config.settings?.titleFont?.color, []], + + units: [configData.config.units, []], + unitsFont: [configData.config.settings?.unitsFont, []], + unitsColor: [configData.config.settings?.unitsFont?.color, []], + + valueBox: [configData.config.settings?.valueBox, []], + valueInt: [configData.config.settings?.valueInt, []], + valueFont: [configData.config.settings?.valueFont, []], + valueColor: [configData.config.settings?.valueFont?.color, []], + + minValue: [configData.config.settings?.minValue, []], + maxValue: [configData.config.settings?.maxValue, []], + numbersFont: [configData.config.settings?.numbersFont, []], + numbersColor: [configData.config.settings?.numbersFont?.color, []], + + colorBarStroke: [configData.config.settings?.colorBarStroke, []], + + defaultColor: [configData.config.settings?.defaultColor, []], + colorPlate: [configData.config.settings?.colorPlate, []], + highlights: [configData.config.settings?.highlights, []], + + cardButtons: [this.getCardButtons(configData.config), []], + borderRadius: [configData.config.borderRadius, []], + backgroundColor: [configData.config.backgroundColor, []], + actions: [configData.config.actions || {}, []] + }); + } + + protected prepareOutputConfig(config: any): WidgetConfigComponentData { + setTimewindowConfig(this.widgetConfig.config, config.timewindowConfig); + this.widgetConfig.config.datasources = config.datasources; + this.widgetConfig.config.actions = config.actions; + + this.widgetConfig.config.settings = this.widgetConfig.config.settings || {}; + this.setCardButtons(config.cardButtons, this.widgetConfig.config); + this.widgetConfig.config.backgroundColor = config.backgroundColor; + + this.widgetConfig.config.settings.showUnitTitle = config.showUnitTitle; + this.widgetConfig.config.settings.unitTitle = config.unitTitle; + this.widgetConfig.config.settings.titleFont = config.titleFont; + this.widgetConfig.config.settings.titleFont.color = config.titleColor; + + this.widgetConfig.config.units = config.units; + this.widgetConfig.config.settings.unitsFont = config.unitsFont; + this.widgetConfig.config.settings.unitsFont.color = config.unitsColor; + + this.widgetConfig.config.settings.valueBox = config.valueBox; + this.widgetConfig.config.settings.valueInt = config.valueInt; + this.widgetConfig.config.settings.valueFont = config.valueFont; + this.widgetConfig.config.settings.valueFont.color = config.valueColor; + + this.widgetConfig.config.settings.minValue = config.minValue; + this.widgetConfig.config.settings.maxValue = config.maxValue; + this.widgetConfig.config.settings.numbersFont = config.numbersFont; + this.widgetConfig.config.settings.numbersFont.color = config.numbersColor; + + this.widgetConfig.config.settings.defaultColor = config.defaultColor; + this.widgetConfig.config.settings.colorPlate = config.colorPlate; + this.widgetConfig.config.settings.highlights = config.highlights.rangeList; + return this.widgetConfig; + } + + protected validatorTriggers(): string[] { + return ['showUnitTitle', 'valueBox']; + } + + protected updateValidators(emitEvent: boolean, trigger?: string) { + const showUnitTitle: boolean = this.radialGaugeWidgetConfigForm.get('showUnitTitle').value; + const valueBox: boolean = this.radialGaugeWidgetConfigForm.get('valueBox').value; + if (showUnitTitle) { + this.radialGaugeWidgetConfigForm.get('unitTitle').enable(); + this.radialGaugeWidgetConfigForm.get('titleFont').enable(); + this.radialGaugeWidgetConfigForm.get('titleColor').enable(); + } else { + this.radialGaugeWidgetConfigForm.get('unitTitle').disable(); + this.radialGaugeWidgetConfigForm.get('titleFont').disable(); + this.radialGaugeWidgetConfigForm.get('titleColor').disable(); + } + if (valueBox) { + this.radialGaugeWidgetConfigForm.get('valueInt').enable(); + this.radialGaugeWidgetConfigForm.get('valueFont').enable(); + this.radialGaugeWidgetConfigForm.get('valueColor').enable(); + } else { + this.radialGaugeWidgetConfigForm.get('valueInt').disable(); + this.radialGaugeWidgetConfigForm.get('valueFont').disable(); + this.radialGaugeWidgetConfigForm.get('valueColor').disable(); + } + this.radialGaugeWidgetConfigForm.get('unitTitle').updateValueAndValidity({emitEvent}); + this.radialGaugeWidgetConfigForm.get('titleFont').updateValueAndValidity({emitEvent}); + this.radialGaugeWidgetConfigForm.get('titleColor').updateValueAndValidity({emitEvent}); + this.radialGaugeWidgetConfigForm.get('valueInt').updateValueAndValidity({emitEvent}); + this.radialGaugeWidgetConfigForm.get('valueFont').updateValueAndValidity({emitEvent}); + this.radialGaugeWidgetConfigForm.get('valueColor').updateValueAndValidity({emitEvent}); + } + + private getCardButtons(config: WidgetConfig): string[] { + const buttons: string[] = []; + if (isUndefined(config.enableFullscreen) || config.enableFullscreen) { + buttons.push('fullscreen'); + } + return buttons; + } + + private setCardButtons(buttons: string[], config: WidgetConfig) { + config.enableFullscreen = buttons.includes('fullscreen'); + } + + private _valuePreviewFn(): string { + const units: string = this.radialGaugeWidgetConfigForm.get('units').value; + return formatValue(22, 0, units, true); + } +} diff --git a/ui-ngx/src/app/modules/home/components/widget/config/basic/gauge/compass-gauge-basic-config.component.html b/ui-ngx/src/app/modules/home/components/widget/config/basic/gauge/compass-gauge-basic-config.component.html new file mode 100644 index 0000000000..a3a2636876 --- /dev/null +++ b/ui-ngx/src/app/modules/home/components/widget/config/basic/gauge/compass-gauge-basic-config.component.html @@ -0,0 +1,154 @@ + + + + + + + +
+
widget-config.appearance
+
+ + {{ 'widget-config.title' | translate }} + +
+ + + + + + + +
+
+
+ + {{ 'widget-config.icon' | translate }} + +
+ + + + +
+
+
+ +
+
widgets.gauge.compass-appearance
+
+
widgets.gauge.labels
+
+ + +
+
+
+
widgets.gauge.label-style
+
+ + + + +
+
+ +
+
widgets.gauge.major-ticks-color
+ + +
+
+
widgets.gauge.minor-ticks-color
+ + +
+
+
widgets.gauge.needle-color
+ + +
+
+
widgets.gauge.plate-color
+ + +
+
+ +
+
widget-config.card-appearance
+
+
{{ 'widget-config.background-color' | translate }}
+ + +
+
+
widget-config.show-card-buttons
+ + {{ 'fullscreen.fullscreen' | translate }} + +
+
+
{{ 'widget-config.card-border-radius' | translate }}
+ + + +
+
+ + +
diff --git a/ui-ngx/src/app/modules/home/components/widget/config/basic/gauge/compass-gauge-basic-config.component.ts b/ui-ngx/src/app/modules/home/components/widget/config/basic/gauge/compass-gauge-basic-config.component.ts new file mode 100644 index 0000000000..8bf0b5ea6e --- /dev/null +++ b/ui-ngx/src/app/modules/home/components/widget/config/basic/gauge/compass-gauge-basic-config.component.ts @@ -0,0 +1,171 @@ +/// +/// Copyright © 2016-2023 The Thingsboard Authors +/// +/// Licensed under the Apache License, Version 2.0 (the "License"); +/// you may not use this file except in compliance with the License. +/// You may obtain a copy of the License at +/// +/// http://www.apache.org/licenses/LICENSE-2.0 +/// +/// Unless required by applicable law or agreed to in writing, software +/// distributed under the License is distributed on an "AS IS" BASIS, +/// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +/// See the License for the specific language governing permissions and +/// limitations under the License. +/// + +import { Component } from '@angular/core'; +import { UntypedFormBuilder, UntypedFormGroup } from '@angular/forms'; +import { Store } from '@ngrx/store'; +import { AppState } from '@core/core.state'; +import { BasicWidgetConfigComponent } from '@home/components/widget/config/widget-config.component.models'; +import { WidgetConfigComponentData } from '@home/models/widget-component.models'; +import { + datasourcesHasAggregation, + datasourcesHasOnlyComparisonAggregation, + WidgetConfig, +} from '@shared/models/widget.models'; +import { WidgetConfigComponent } from '@home/components/widget/widget-config.component'; +import { + getTimewindowConfig, + setTimewindowConfig +} from '@home/components/widget/config/timewindow-config-panel.component'; +import { isUndefined } from '@core/utils'; + +@Component({ + selector: 'tb-compass-gauge-basic-config', + templateUrl: './compass-gauge-basic-config.component.html', + styleUrls: ['../basic-config.scss'] +}) +export class CompassGaugeBasicConfigComponent extends BasicWidgetConfigComponent { + + public get displayTimewindowConfig(): boolean { + const datasources = this.compassGaugeWidgetConfigForm.get('datasources').value; + return datasourcesHasAggregation(datasources); + } + + public onlyHistoryTimewindow(): boolean { + const datasources = this.compassGaugeWidgetConfigForm.get('datasources').value; + return datasourcesHasOnlyComparisonAggregation(datasources); + } + + compassGaugeWidgetConfigForm: UntypedFormGroup; + + constructor(protected store: Store, + protected widgetConfigComponent: WidgetConfigComponent, + protected fb: UntypedFormBuilder) { + super(store, widgetConfigComponent); + } + + protected configForm(): UntypedFormGroup { + return this.compassGaugeWidgetConfigForm; + } + + protected setupDefaults(configData: WidgetConfigComponentData) { + super.setupDefaults(configData); + } + + protected onConfigSet(configData: WidgetConfigComponentData) { + this.compassGaugeWidgetConfigForm = this.fb.group({ + timewindowConfig: [getTimewindowConfig(configData.config), []], + datasources: [configData.config.datasources, []], + + showTitle: [configData.config.showTitle, []], + title: [configData.config.title, []], + titleFont: [configData.config.titleFont, []], + titleColor: [configData.config.titleColor, []], + showTitleIcon: [configData.config.showTitleIcon, []], + titleIcon: [configData.config.titleIcon, []], + iconColor: [configData.config.iconColor, []], + + majorTicks: [configData.config.settings?.majorTicks, []], + majorTickFont: [configData.config.settings?.majorTickFont, []], + majorTickColor: [configData.config.settings?.majorTickFont.color, []], + colorMajorTicks: [configData.config.settings?.colorMajorTicks, []], + colorMinorTicks: [configData.config.settings?.colorMinorTicks, []], + colorPlate: [configData.config.settings?.colorPlate, []], + colorNeedle: [configData.config.settings?.colorNeedle, []], + + cardButtons: [this.getCardButtons(configData.config), []], + borderRadius: [configData.config.borderRadius, []], + backgroundColor: [configData.config.backgroundColor, []], + actions: [configData.config.actions || {}, []] + }); + } + + protected prepareOutputConfig(config: any): WidgetConfigComponentData { + setTimewindowConfig(this.widgetConfig.config, config.timewindowConfig); + this.widgetConfig.config.datasources = config.datasources; + this.widgetConfig.config.actions = config.actions; + + this.widgetConfig.config.showTitle = config.showTitle; + this.widgetConfig.config.title = config.title; + this.widgetConfig.config.titleFont = config.titleFont; + this.widgetConfig.config.titleColor = config.titleColor; + this.widgetConfig.config.showTitleIcon = config.showTitleIcon; + this.widgetConfig.config.titleIcon = config.titleIcon; + this.widgetConfig.config.iconColor = config.iconColor; + + this.widgetConfig.config.settings = this.widgetConfig.config.settings || {}; + this.setCardButtons(config.cardButtons, this.widgetConfig.config); + this.widgetConfig.config.backgroundColor = config.backgroundColor; + + this.widgetConfig.config.settings.majorTicks = config.majorTicks; + this.widgetConfig.config.settings.majorTickFont = config.majorTickFont; + this.widgetConfig.config.settings.majorTickFont.color = config.majorTickColor; + this.widgetConfig.config.settings.colorMajorTicks = config.colorMajorTicks; + this.widgetConfig.config.settings.colorMinorTicks = config.colorMinorTicks; + this.widgetConfig.config.settings.colorPlate = config.colorPlate; + this.widgetConfig.config.settings.colorNeedle = config.colorNeedle; + + return this.widgetConfig; + } + + protected validatorTriggers(): string[] { + return ['showTitle', 'showTitleIcon']; + } + + protected updateValidators(emitEvent: boolean, trigger?: string) { + const showTitle: boolean = this.compassGaugeWidgetConfigForm.get('showTitle').value; + const showTitleIcon: boolean = this.compassGaugeWidgetConfigForm.get('showTitleIcon').value; + if (showTitle) { + this.compassGaugeWidgetConfigForm.get('title').enable(); + this.compassGaugeWidgetConfigForm.get('titleFont').enable(); + this.compassGaugeWidgetConfigForm.get('titleColor').enable(); + this.compassGaugeWidgetConfigForm.get('showTitleIcon').enable({emitEvent: false}); + if (showTitleIcon) { + this.compassGaugeWidgetConfigForm.get('titleIcon').enable(); + this.compassGaugeWidgetConfigForm.get('iconColor').enable(); + } else { + this.compassGaugeWidgetConfigForm.get('titleIcon').disable(); + this.compassGaugeWidgetConfigForm.get('iconColor').disable(); + } + } else { + this.compassGaugeWidgetConfigForm.get('title').disable(); + this.compassGaugeWidgetConfigForm.get('titleFont').disable(); + this.compassGaugeWidgetConfigForm.get('titleColor').disable(); + this.compassGaugeWidgetConfigForm.get('showTitleIcon').disable({emitEvent: false}); + this.compassGaugeWidgetConfigForm.get('titleIcon').disable(); + this.compassGaugeWidgetConfigForm.get('iconColor').disable(); + } + this.compassGaugeWidgetConfigForm.get('title').updateValueAndValidity({emitEvent}); + this.compassGaugeWidgetConfigForm.get('titleFont').updateValueAndValidity({emitEvent}); + this.compassGaugeWidgetConfigForm.get('titleColor').updateValueAndValidity({emitEvent}); + this.compassGaugeWidgetConfigForm.get('showTitleIcon').updateValueAndValidity({emitEvent: false}); + this.compassGaugeWidgetConfigForm.get('titleIcon').updateValueAndValidity({emitEvent}); + this.compassGaugeWidgetConfigForm.get('iconColor').updateValueAndValidity({emitEvent}); + } + + + private getCardButtons(config: WidgetConfig): string[] { + const buttons: string[] = []; + if (isUndefined(config.enableFullscreen) || config.enableFullscreen) { + buttons.push('fullscreen'); + } + return buttons; + } + + private setCardButtons(buttons: string[], config: WidgetConfig) { + config.enableFullscreen = buttons.includes('fullscreen'); + } +} diff --git a/ui-ngx/src/app/modules/home/components/widget/config/basic/gauge/radial-gauge-basic-config.component.ts b/ui-ngx/src/app/modules/home/components/widget/config/basic/gauge/radial-gauge-basic-config.component.ts new file mode 100644 index 0000000000..ec756b6605 --- /dev/null +++ b/ui-ngx/src/app/modules/home/components/widget/config/basic/gauge/radial-gauge-basic-config.component.ts @@ -0,0 +1,45 @@ +/// +/// Copyright © 2016-2023 The Thingsboard Authors +/// +/// Licensed under the Apache License, Version 2.0 (the "License"); +/// you may not use this file except in compliance with the License. +/// You may obtain a copy of the License at +/// +/// http://www.apache.org/licenses/LICENSE-2.0 +/// +/// Unless required by applicable law or agreed to in writing, software +/// distributed under the License is distributed on an "AS IS" BASIS, +/// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +/// See the License for the specific language governing permissions and +/// limitations under the License. +/// + +import { Component } from '@angular/core'; +import { UntypedFormBuilder } from '@angular/forms'; +import { Store } from '@ngrx/store'; +import { AppState } from '@core/core.state'; +import { + GaugeBasicConfigComponent +} from '@home/components/widget/config/basic/gauge/analog-gauge-basic-config.component'; +import { WidgetConfigComponent } from '@home/components/widget/widget-config.component'; +import { WidgetConfigComponentData } from '@home/models/widget-component.models'; + +@Component({ + selector: 'tb-radial-gauge-basic-config', + templateUrl: './analog-gauge-basic-config.component.html', + styleUrls: ['../basic-config.scss'] +}) +export class RadialGaugeBasicConfigComponent extends GaugeBasicConfigComponent { + + gaugeType = 'radial'; + + constructor(protected store: Store, + protected widgetConfigComponent: WidgetConfigComponent, + protected fb: UntypedFormBuilder) { + super(store, widgetConfigComponent, fb); + } + + protected onConfigSet(configData: WidgetConfigComponentData) { + super.onConfigSet(configData); + } +} diff --git a/ui-ngx/src/app/modules/home/components/widget/config/basic/gauge/thermometer-scale-gauge-basic-config.component.ts b/ui-ngx/src/app/modules/home/components/widget/config/basic/gauge/thermometer-scale-gauge-basic-config.component.ts new file mode 100644 index 0000000000..97e3a0c69f --- /dev/null +++ b/ui-ngx/src/app/modules/home/components/widget/config/basic/gauge/thermometer-scale-gauge-basic-config.component.ts @@ -0,0 +1,59 @@ +/// +/// Copyright © 2016-2023 The Thingsboard Authors +/// +/// Licensed under the Apache License, Version 2.0 (the "License"); +/// you may not use this file except in compliance with the License. +/// You may obtain a copy of the License at +/// +/// http://www.apache.org/licenses/LICENSE-2.0 +/// +/// Unless required by applicable law or agreed to in writing, software +/// distributed under the License is distributed on an "AS IS" BASIS, +/// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +/// See the License for the specific language governing permissions and +/// limitations under the License. +/// + +import { Component } from '@angular/core'; +import { UntypedFormBuilder } from '@angular/forms'; +import { Store } from '@ngrx/store'; +import { AppState } from '@core/core.state'; +import { + GaugeBasicConfigComponent +} from '@home/components/widget/config/basic/gauge/analog-gauge-basic-config.component'; +import { WidgetConfigComponent } from '@home/components/widget/widget-config.component'; +import { WidgetConfigComponentData } from '@home/models/widget-component.models'; + +@Component({ + selector: 'tb-thermometer-scale-gauge-basic-config', + templateUrl: './analog-gauge-basic-config.component.html', + styleUrls: ['../basic-config.scss'] +}) +export class ThermometerScaleGaugeBasicConfigComponent extends GaugeBasicConfigComponent { + + gaugeType = 'linear'; + + constructor(protected store: Store, + protected widgetConfigComponent: WidgetConfigComponent, + protected fb: UntypedFormBuilder) { + super(store, widgetConfigComponent, fb); + } + + protected onConfigSet(configData: WidgetConfigComponentData) { + super.onConfigSet(configData); + this.radialGaugeWidgetConfigForm.addControl('colorBarStroke', + this.fb.control(configData.config.settings?.colorBarStroke, [])); + this.radialGaugeWidgetConfigForm.addControl('colorBarProgress', + this.fb.control(configData.config.settings?.colorBarProgress, [])); + this.radialGaugeWidgetConfigForm.addControl('colorBarProgressEnd', + this.fb.control(configData.config.settings?.colorBarProgressEnd, [])); + } + + protected prepareOutputConfig(config): WidgetConfigComponentData { + const outputConfig = super.prepareOutputConfig(config); + this.widgetConfig.config.settings.colorBarStroke = config.colorBarStroke; + this.widgetConfig.config.settings.colorBarProgress = config.colorBarProgress; + this.widgetConfig.config.settings.colorBarProgressEnd = config.colorBarProgressEnd; + return outputConfig; + } +} diff --git a/ui-ngx/src/app/modules/home/components/widget/config/basic/indicator/liquid-level-card-basic-config.component.html b/ui-ngx/src/app/modules/home/components/widget/config/basic/indicator/liquid-level-card-basic-config.component.html new file mode 100644 index 0000000000..8fe70c10d3 --- /dev/null +++ b/ui-ngx/src/app/modules/home/components/widget/config/basic/indicator/liquid-level-card-basic-config.component.html @@ -0,0 +1,318 @@ + + + + + + +
+
widget-config.appearance
+
+ + {{ 'widgets.liquid-level-card.title' | translate }} + +
+ + + + + + + +
+
+
+ + {{ 'widgets.liquid-level-card.icon' | translate }} + +
+ + + + + + + + +
+
+
+
+
widgets.liquid-level-card.shape
+ + + {{ DataSourceTypeTranslations.get(type) | translate }} + + +
+ + + {{ ShapesTranslationMap.get(shape) | translate }} + + + +
+
widgets.liquid-level-card.shape-attribute-name
+ + +
+
+
widgets.liquid-level-card.shape-by-attribute
+
+
+
+
+
+ + + {{ LevelCardLayoutTranslationMap.get(layout) | translate }} + + +
+
+
widgets.liquid-level-card.units
+
+
widgets.liquid-level-card.datasource-units
+
+ + +
+
+
+
widgets.liquid-level-card.widget-units
+
+ + + + {{ DataSourceTypeTranslations.get(type) | translate }} + + + + + + + + + +
+
+
+
widgets.liquid-level-card.total-volume
+
+ + + + {{ DataSourceTypeTranslations.get(type) | translate }} + + + + + + + warning + + + + + + + + +
+
+
+
+
widgets.liquid-level-card.color-and-font
+
+
widgets.liquid-level-card.tank-color
+ + +
+
+
widgets.liquid-level-card.liquid-color
+ + +
+
+
widgets.liquid-level-card.value
+
+ + +
widget-config.decimals-suffix
+
+ + + + +
+
+
+
widgets.liquid-level-card.total-volume
+
+ + + + +
+
+
+
+ + + + + {{ 'widget-config.tooltip' | translate }} + + + + +
+ + {{ 'widgets.liquid-level-card.level' | translate }} + +
+ + + + +
widget-config.decimals-suffix
+
+ + + + +
+
+
+ + {{ 'widgets.value-card.date' | translate }} + +
+ + + + + +
+
+
+
widgets.liquid-level-card.tooltip-background
+ + +
+
+
widgets.liquid-level-card.background-blur
+ + +
px
+
+
+
+
+
+
+
widget-config.card-appearance
+
+
{{ 'widgets.background.background' | translate }}
+ + +
+
+
widget-config.show-card-buttons
+ + {{ 'fullscreen.fullscreen' | translate }} + +
+
+
{{ 'widget-config.card-border-radius' | translate }}
+ + + +
+
+ + +
diff --git a/ui-ngx/src/app/modules/home/components/widget/config/basic/indicator/liquid-level-card-basic-config.component.ts b/ui-ngx/src/app/modules/home/components/widget/config/basic/indicator/liquid-level-card-basic-config.component.ts new file mode 100644 index 0000000000..4144d7db0b --- /dev/null +++ b/ui-ngx/src/app/modules/home/components/widget/config/basic/indicator/liquid-level-card-basic-config.component.ts @@ -0,0 +1,444 @@ +/// +/// Copyright © 2016-2023 The Thingsboard Authors +/// +/// Licensed under the Apache License, Version 2.0 (the "License"); +/// you may not use this file except in compliance with the License. +/// You may obtain a copy of the License at +/// +/// http://www.apache.org/licenses/LICENSE-2.0 +/// +/// Unless required by applicable law or agreed to in writing, software +/// distributed under the License is distributed on an "AS IS" BASIS, +/// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +/// See the License for the specific language governing permissions and +/// limitations under the License. +/// + +import { ChangeDetectorRef, Component, Injector, ViewChild } from '@angular/core'; +import { FormBuilder, FormGroup, Validators } from '@angular/forms'; +import { Store } from '@ngrx/store'; +import { AppState } from '@core/core.state'; +import { BasicWidgetConfigComponent } from '@home/components/widget/config/widget-config.component.models'; +import { WidgetConfigComponentData } from '@home/models/widget-component.models'; +import { + DataKey, + Datasource, + datasourcesHasAggregation, + datasourcesHasOnlyComparisonAggregation, + DatasourceType, + WidgetConfig, +} from '@shared/models/widget.models'; +import { WidgetConfigComponent } from '@home/components/widget/widget-config.component'; +import { DataKeyType } from '@shared/models/telemetry/telemetry.models'; +import { + getTimewindowConfig, + setTimewindowConfig +} from '@home/components/widget/config/timewindow-config-panel.component'; +import { formatValue, isDefined, isUndefined } from '@core/utils'; +import { + cssSizeToStrSize, + DateFormatProcessor, + DateFormatSettings, + resolveCssSize +} from '@shared/models/widget-settings.models'; +import { + CapacityUnits, + createShapeLayout, + levelCardDefaultSettings, + LevelCardLayout, + levelCardLayoutTranslations, + LevelCardWidgetSettings, + LiquidWidgetDataSourceType, + LiquidWidgetDataSourceTypeTranslations, + loadSvgShapesMapping, + optionsFilter, + Shapes, + ShapesTranslations, + updatedFormSettingsValidators +} from '@home/components/widget/lib/indicator/liquid-level-widget.models'; +import { UnitsType } from '@shared/models/unit.models'; +import { DomSanitizer, SafeUrl } from '@angular/platform-browser'; +import { ImageCardsSelectComponent } from '@home/components/widget/lib/settings/common/image-cards-select.component'; +import { map, share, tap } from 'rxjs/operators'; +import { Observable, of, ReplaySubject } from 'rxjs'; +import { ResourcesService } from '@core/services/resources.service'; +import { UtilsService } from '@core/services/utils.service'; + +@Component({ + selector: 'liquid-level-card-basic-config', + templateUrl: './liquid-level-card-basic-config.component.html', + styleUrls: ['../basic-config.scss'] +}) +export class LiquidLevelCardBasicConfigComponent extends BasicWidgetConfigComponent { + + @ViewChild('layoutsImageCardsSelect', { static: false }) layoutsImageCardsSelect: ImageCardsSelectComponent; + + @ViewChild('shapesImageCardsSelect', { static: false }) shapesImageCardsSelect: ImageCardsSelectComponent; + + private get datasource(): Datasource { + if (this.widgetConfig.config.datasources && this.widgetConfig.config.datasources) { + return this.widgetConfig.config.datasources[0]; + } else { + return null; + } + } + + public get volumeInput(): boolean { + const datasourceUnits = this.levelCardWidgetConfigForm.get('datasourceUnits').value; + const layout: LevelCardLayout = this.levelCardWidgetConfigForm.get('layout').value; + + if (layout === LevelCardLayout.absolute) { + return true; + } + return datasourceUnits !== CapacityUnits.percent; + } + + public get displayTimewindowConfig(): boolean { + const datasources = this.levelCardWidgetConfigForm.get('datasources').value; + return datasourcesHasAggregation(datasources); + } + + public onlyHistoryTimewindow(): boolean { + const datasources = this.levelCardWidgetConfigForm.get('datasources').value; + return datasourcesHasOnlyComparisonAggregation(datasources); + } + + LevelCardLayout = LevelCardLayout; + LevelCardLayouts = Object.values(LevelCardLayout) as LevelCardLayout[]; + LevelCardLayoutTranslationMap = levelCardLayoutTranslations; + + DataSourceType = LiquidWidgetDataSourceType; + DataSourceTypes = Object.values(LiquidWidgetDataSourceType) as LiquidWidgetDataSourceType[]; + DataSourceTypeTranslations = LiquidWidgetDataSourceTypeTranslations; + + shapes = Object.values(Shapes) as Shapes[]; + shapesImageMap: Map = new Map(); + ShapesTranslationMap = ShapesTranslations; + + unitsType = UnitsType; + + levelCardWidgetConfigForm: FormGroup; + + valuePreviewFn = this._valuePreviewFn.bind(this); + + tooltipValuePreviewFn = this._tooltipValuePreviewFn.bind(this); + + totalVolumeValuePreviewFn = this._totalVolumeValuePreviewFn.bind(this); + + datePreviewFn = this._datePreviewFn.bind(this); + + private keySearchText: string; + private latestKeySearchTextResult: Array; + + private functionTypeKeys: Array = []; + + private lastKeysId: string; + private lastFetchedKeys: Array; + + constructor(protected store: Store, + protected widgetConfigComponent: WidgetConfigComponent, + private cd: ChangeDetectorRef, + private $injector: Injector, + private fb: FormBuilder, + private resourcesService: ResourcesService, + private sanitizer: DomSanitizer, + private utils: UtilsService) { + super(store, widgetConfigComponent); + } + + protected configForm(): FormGroup { + return this.levelCardWidgetConfigForm; + } + + protected setupConfig(widgetConfig: WidgetConfigComponentData) { + this.createSvgShapesMapping(); + + for (const type of this.utils.getPredefinedFunctionsList()) { + this.functionTypeKeys.push({ + name: type, + type: DataKeyType.function + }); + } + super.setupConfig(widgetConfig); + } + + protected setupDefaults(configData: WidgetConfigComponentData) { + this.setupDefaultDatasource(configData, [{ name: 'fuelLevel', label: 'Fuel Level', type: DataKeyType.timeseries }]); + } + + protected onConfigSet(configData: WidgetConfigComponentData) { + const settings: LevelCardWidgetSettings = {...levelCardDefaultSettings, ...(configData.config.settings || {})}; + const iconSize = resolveCssSize(configData.config.iconSize); + + this.levelCardWidgetConfigForm = this.fb.group({ + timewindowConfig: [getTimewindowConfig(configData.config), []], + datasources: [configData.config.datasources, []], + + layout: [settings.layout, []], + tankSelectionType: [settings.tankSelectionType, []], + selectedShape: [settings.selectedShape, [Validators.required]], + shapeAttributeName: [settings.shapeAttributeName, [Validators.required]], + tankColor: [settings.tankColor, []], + datasourceUnits: [settings.datasourceUnits, [Validators.required]], + + showTitle: [configData.config.showTitle, []], + title: [configData.config.title, []], + titleFont: [configData.config.titleFont, []], + titleColor: [configData.config.titleColor, []], + showTitleIcon: [configData.config.showTitleIcon, []], + iconSize: [iconSize[0], [Validators.min(0)]], + iconSizeUnit: [iconSize[1], []], + titleIcon: [configData.config.titleIcon, []], + iconColor: [configData.config.iconColor, []], + + volumeSource: [settings.volumeSource, []], + volumeConstant: [settings.volumeConstant, [Validators.required, Validators.min(0.1)]], + volumeAttributeName: [settings.volumeAttributeName, [Validators.required]], + volumeUnits: [settings.volumeUnits, [Validators.required]], + volumeFont: [settings.volumeFont, []], + volumeColor: [settings.volumeColor, []], + units: [settings.units, [Validators.required]], + widgetUnitsSource: [settings.widgetUnitsSource, [Validators.required]], + widgetUnitsAttributeName: [settings.widgetUnitsAttributeName, [Validators.required]], + decimals: [configData.config.decimals, []], + liquidColor: [settings.liquidColor, []], + valueFont: [settings.valueFont, []], + valueColor: [settings.valueColor, []], + + showTooltip: [settings.showTooltip, []], + showTooltipLevel: [settings.showTooltipLevel, []], + tooltipUnits: [settings.tooltipUnits, []], + tooltipLevelDecimals: [settings.tooltipLevelDecimals, []], + tooltipLevelFont: [settings.tooltipLevelFont, []], + tooltipLevelColor: [settings.tooltipLevelColor, []], + showTooltipDate: [settings.showTooltipDate, []], + tooltipDateFormat: [settings.tooltipDateFormat, []], + tooltipDateFont: [settings.tooltipDateFont, []], + tooltipDateColor: [settings.tooltipDateColor, []], + tooltipBackgroundColor: [settings.tooltipBackgroundColor, []], + tooltipBackgroundBlur: [settings.tooltipBackgroundBlur, []], + + background: [settings.background], + cardButtons: [this.getCardButtons(configData.config), []], + borderRadius: [configData.config.borderRadius, []], + + actions: [configData.config.actions || {}, []] + }); + + this.levelCardWidgetConfigForm.get('selectedShape').valueChanges.subscribe(() => { + this.cd.detectChanges(); + this.layoutsImageCardsSelect?.imageCardsSelectOptions.notifyOnChanges(); + }); + } + + protected prepareOutputConfig(config: any): WidgetConfigComponentData { + setTimewindowConfig(this.widgetConfig.config, config.timewindowConfig); + this.widgetConfig.config.datasources = config.datasources; + + this.widgetConfig.config.showTitle = config.showTitle; + this.widgetConfig.config.title = config.title; + this.widgetConfig.config.titleFont = config.titleFont; + this.widgetConfig.config.titleColor = config.titleColor; + + this.widgetConfig.config.showTitleIcon = config.showTitleIcon; + this.widgetConfig.config.iconSize = cssSizeToStrSize(config.iconSize, config.iconSizeUnit); + this.widgetConfig.config.titleIcon = config.titleIcon; + this.widgetConfig.config.iconColor = config.iconColor; + + this.widgetConfig.config.decimals = config.decimals; + + this.widgetConfig.config.settings = this.widgetConfig.config.settings || {}; + + this.widgetConfig.config.settings.layout = config.layout; + + this.widgetConfig.config.settings.tankSelectionType = config.tankSelectionType; + this.widgetConfig.config.settings.selectedShape = config.selectedShape; + this.widgetConfig.config.settings.shapeAttributeName = config.shapeAttributeName; + this.widgetConfig.config.settings.tankColor = config.tankColor; + this.widgetConfig.config.settings.datasourceUnits = config.datasourceUnits; + + this.widgetConfig.config.settings.volumeSource = config.volumeSource; + this.widgetConfig.config.settings.volumeConstant = config.volumeConstant; + this.widgetConfig.config.settings.volumeAttributeName = config.volumeAttributeName; + this.widgetConfig.config.settings.volumeUnits = config.volumeUnits; + this.widgetConfig.config.settings.volumeFont = config.volumeFont; + this.widgetConfig.config.settings.volumeColor = config.volumeColor; + this.widgetConfig.config.settings.units = config.units; + this.widgetConfig.config.settings.widgetUnitsSource = config.widgetUnitsSource; + this.widgetConfig.config.settings.widgetUnitsAttributeName = config.widgetUnitsAttributeName; + this.widgetConfig.config.settings.liquidColor = config.liquidColor; + this.widgetConfig.config.settings.valueFont = config.valueFont; + this.widgetConfig.config.settings.valueColor = config.valueColor; + + this.widgetConfig.config.settings.showTooltip = config.showTooltip; + this.widgetConfig.config.settings.showTooltipLevel = config.showTooltipLevel; + this.widgetConfig.config.settings.tooltipUnits = config.tooltipUnits; + this.widgetConfig.config.settings.tooltipLevelDecimals = config.tooltipLevelDecimals; + this.widgetConfig.config.settings.tooltipLevelFont = config.tooltipLevelFont; + this.widgetConfig.config.settings.tooltipLevelColor = config.tooltipLevelColor; + this.widgetConfig.config.settings.showTooltipDate = config.showTooltipDate; + this.widgetConfig.config.settings.tooltipDateFormat = config.tooltipDateFormat; + this.widgetConfig.config.settings.tooltipDateFont = config.tooltipDateFont; + this.widgetConfig.config.settings.tooltipDateColor = config.tooltipDateColor; + this.widgetConfig.config.settings.tooltipBackgroundColor = config.tooltipBackgroundColor; + this.widgetConfig.config.settings.tooltipBackgroundBlur = config.tooltipBackgroundBlur; + + this.widgetConfig.config.settings.background = config.background; + this.setCardButtons(config.cardButtons, this.widgetConfig.config); + this.widgetConfig.config.borderRadius = config.borderRadius; + + this.widgetConfig.config.actions = config.actions; + return this.widgetConfig; + } + + protected validatorTriggers(): string[] { + return [ + 'showTooltip', 'showTooltipLevel', 'tankSelectionType', 'datasourceUnits', 'showTitleIcon', 'volumeSource', + 'showTooltipDate', 'layout', 'showTitle', 'widgetUnitsSource' + ]; + } + + protected updateValidators(emitEvent: boolean, trigger?: string) { + updatedFormSettingsValidators(this.levelCardWidgetConfigForm); + + const showTitleIcon: boolean = this.levelCardWidgetConfigForm.get('showTitleIcon').value; + const showTitle: boolean = this.levelCardWidgetConfigForm.get('showTitle').value; + if (showTitle) { + this.levelCardWidgetConfigForm.get('title').enable({emitEvent: false}); + this.levelCardWidgetConfigForm.get('titleFont').enable({emitEvent: false}); + this.levelCardWidgetConfigForm.get('titleColor').enable({emitEvent: false}); + this.levelCardWidgetConfigForm.get('showTitleIcon').enable({emitEvent: false}); + if (showTitleIcon) { + this.levelCardWidgetConfigForm.get('titleIcon').enable({emitEvent: false}); + this.levelCardWidgetConfigForm.get('iconColor').enable({emitEvent: false}); + this.levelCardWidgetConfigForm.get('iconSize').enable({emitEvent: false}); + this.levelCardWidgetConfigForm.get('iconSizeUnit').enable({emitEvent: false}); + } else { + this.levelCardWidgetConfigForm.get('titleIcon').disable({emitEvent: false}); + this.levelCardWidgetConfigForm.get('iconColor').disable({emitEvent: false}); + this.levelCardWidgetConfigForm.get('iconSize').disable({emitEvent: false}); + this.levelCardWidgetConfigForm.get('iconSizeUnit').disable({emitEvent: false}); + } + } else { + this.levelCardWidgetConfigForm.get('title').disable({emitEvent: false}); + this.levelCardWidgetConfigForm.get('titleFont').disable({emitEvent: false}); + this.levelCardWidgetConfigForm.get('titleColor').disable({emitEvent: false}); + this.levelCardWidgetConfigForm.get('showTitleIcon').disable({emitEvent: false}); + this.levelCardWidgetConfigForm.get('titleIcon').disable({emitEvent: false}); + this.levelCardWidgetConfigForm.get('iconColor').disable({emitEvent: false}); + this.levelCardWidgetConfigForm.get('iconSize').disable({emitEvent: false}); + this.levelCardWidgetConfigForm.get('iconSizeUnit').disable({emitEvent: false}); + } + } + + private getCardButtons(config: WidgetConfig): string[] { + const buttons: string[] = []; + if (isUndefined(config.enableDataExport) || config.enableDataExport) { + buttons.push('dataExport'); + } + if (isUndefined(config.enableFullscreen) || config.enableFullscreen) { + buttons.push('fullscreen'); + } + return buttons; + } + + private setCardButtons(buttons: string[], config: WidgetConfig) { + config.enableDataExport = buttons.includes('dataExport'); + config.enableFullscreen = buttons.includes('fullscreen'); + } + + private _valuePreviewFn(): string { + const units: string = this.levelCardWidgetConfigForm.get('units').value; + const decimals: number = this.levelCardWidgetConfigForm.get('decimals').value; + return formatValue(22, decimals, units, true); + } + + private _tooltipValuePreviewFn() { + const units: string = this.levelCardWidgetConfigForm.get('tooltipUnits').value; + const decimals: number = this.levelCardWidgetConfigForm.get('tooltipLevelDecimals').value; + return formatValue(32, decimals, units, true); + } + + private _totalVolumeValuePreviewFn() { + const value = this.levelCardWidgetConfigForm.get('volumeConstant').value; + const datasourceUnits = this.levelCardWidgetConfigForm.get('datasourceUnits').value; + const decimals: number = this.widgetConfig.config.decimals; + let units: string = this.widgetConfig.config.units; + + if (datasourceUnits !== CapacityUnits.percent) { + units = datasourceUnits; + } + + return formatValue((isDefined(value) ? value : 500), decimals, units, true); + } + + private _datePreviewFn(): string { + const dateFormat: DateFormatSettings = this.levelCardWidgetConfigForm.get('tooltipDateFormat').value; + const processor = DateFormatProcessor.fromSettings(this.$injector, dateFormat); + processor.update(Date.now()); + return processor.formatted; + } + + private createSvgShapesMapping(): void { + loadSvgShapesMapping(this.resourcesService).subscribe(shapeMap => { + this.shapesImageMap = shapeMap; + + this.cd.detectChanges(); + this.layoutsImageCardsSelect?.imageCardsSelectOptions.notifyOnChanges(); + this.shapesImageCardsSelect?.imageCardsSelectOptions.notifyOnChanges(); + }); + } + + createShape(svg: string, layout: LevelCardLayout): SafeUrl { + return createShapeLayout(svg, layout, this.sanitizer); + } + + public fetchOptions(searchText: string): Observable> { + if (this.keySearchText !== searchText || !this.lastFetchedKeys) { + this.keySearchText = searchText; + const dataKeyFilter = optionsFilter(this.keySearchText); + return this.getKeys().pipe( + tap(res => this.lastFetchedKeys !== res ? this.lastFetchedKeys = res : []), + map(name => name?.filter(dataKeyFilter).map(key => key.name)), + tap(res => this.latestKeySearchTextResult = res) + ); + } + return of(this.latestKeySearchTextResult); + } + + private getKeys(): Observable> { + let fetchObservable: Observable>; + const callbacks = this.widgetConfigComponent.widgetConfigCallbacks; + if (this.datasource?.type === DatasourceType.function) { + fetchObservable = of(this.functionTypeKeys); + } else if (this.datasource?.type === DatasourceType.entity && this.datasource?.entityAliasId || + this.datasource?.type === DatasourceType.device && this.datasource?.deviceId) { + if (this.datasource?.type === DatasourceType.device) { + if (this.lastKeysId !== this.datasource?.deviceId || !this.lastFetchedKeys) { + this.lastKeysId = this.datasource.deviceId; + fetchObservable = callbacks.fetchEntityKeysForDevice(this.datasource?.deviceId, [DataKeyType.attribute]); + } else { + fetchObservable = of(this.lastFetchedKeys); + } + } else { + if (this.lastKeysId !== this.datasource?.entityAliasId || !this.lastFetchedKeys) { + this.lastKeysId = this.datasource.entityAliasId; + fetchObservable = callbacks.fetchEntityKeys(this.datasource?.entityAliasId, [DataKeyType.attribute]); + } else { + fetchObservable = of(this.lastFetchedKeys); + } + } + } else { + this.lastKeysId = null; + fetchObservable = of([]); + } + return fetchObservable.pipe( + share({ + connector: () => new ReplaySubject(1), + resetOnError: false, + resetOnComplete: false, + resetOnRefCountZero: false + }) + ); + } +} diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/indicator/liquid-level-widget.component.html b/ui-ngx/src/app/modules/home/components/widget/lib/indicator/liquid-level-widget.component.html new file mode 100644 index 0000000000..4c14686b9c --- /dev/null +++ b/ui-ngx/src/app/modules/home/components/widget/lib/indicator/liquid-level-widget.component.html @@ -0,0 +1,29 @@ + +
+
+ +
+
+
+
+ {{ error }} +
+
+
+
diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/indicator/liquid-level-widget.component.scss b/ui-ngx/src/app/modules/home/components/widget/lib/indicator/liquid-level-widget.component.scss new file mode 100644 index 0000000000..046d1a7d3e --- /dev/null +++ b/ui-ngx/src/app/modules/home/components/widget/lib/indicator/liquid-level-widget.component.scss @@ -0,0 +1,72 @@ +/** + * Copyright © 2016-2023 The Thingsboard Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +.tb-liquid-level-panel { + width: 100%; + height: 100%; + position: relative; + display: flex; + flex-direction: column; + gap: 16px; + padding: 20px 24px 24px 24px; + &.tb-liquid-level-pointer { + cursor: pointer; + } + > div:not(.tb-liquid-level-overlay) { + z-index: 1; + } + .tb-liquid-level-overlay { + position: absolute; + top: 12px; + left: 12px; + bottom: 12px; + right: 12px; + } + div.tb-widget-title { + padding: 0; + } + .tb-liquid-level-content { + min-height: 0; + flex: 1; + display: flex; + justify-content: center; + } + .tb-liquid-level-error { + position: absolute; + display: flex; + inset: 0; + width: 100%; + height: 100%; + align-items: center; + justify-content: center; + + &-container { + border-radius: 4px; + margin: 16px; + padding: 8px 12px; + background: #848484; + display: flex; + flex-direction: column; + gap: 8px; + + & > * { + font-weight: 500; + letter-spacing: .25px; + text-align: center; + color: #fff; + } + } + } +} diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/indicator/liquid-level-widget.component.ts b/ui-ngx/src/app/modules/home/components/widget/lib/indicator/liquid-level-widget.component.ts new file mode 100644 index 0000000000..9bb7053c3e --- /dev/null +++ b/ui-ngx/src/app/modules/home/components/widget/lib/indicator/liquid-level-widget.component.ts @@ -0,0 +1,575 @@ +/// +/// Copyright © 2016-2023 The Thingsboard Authors +/// +/// Licensed under the Apache License, Version 2.0 (the "License"); +/// you may not use this file except in compliance with the License. +/// You may obtain a copy of the License at +/// +/// http://www.apache.org/licenses/LICENSE-2.0 +/// +/// Unless required by applicable law or agreed to in writing, software +/// distributed under the License is distributed on an "AS IS" BASIS, +/// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +/// See the License for the specific language governing permissions and +/// limitations under the License. +/// + +import { + ChangeDetectorRef, + Component, + ElementRef, + Input, + OnInit, + TemplateRef, + ViewChild, + ViewEncapsulation +} from '@angular/core'; +import { WidgetContext } from '@home/models/widget-component.models'; +import { isDefined, isDefinedAndNotNull, isEmptyStr, isNotEmptyStr, isNumeric, isUndefinedOrNull } from '@core/utils'; +import { + CapacityUnits, + ConversionType, + convertLiters, + createAbsoluteLayout, + createPercentLayout, + extractValue, + levelCardDefaultSettings, + LevelCardLayout, + LevelCardWidgetSettings, + LiquidWidgetDataSourceType, + Shapes, + SvgInfo, + SvgLimits, + svgMapping +} from '@home/components/widget/lib/indicator/liquid-level-widget.models'; +import { forkJoin, Observable, of } from 'rxjs'; +import { map, switchMap } from 'rxjs/operators'; +import { EntityId } from '@shared/models/id/entity-id'; +import { + backgroundStyle, + ColorProcessor, + ComponentStyle, + cssTextFromInlineStyle, + DateFormatProcessor, + inlineTextStyle, + overlayStyle +} from '@shared/models/widget-settings.models'; +import { ResourcesService } from '@core/services/resources.service'; +import { NULL_UUID } from '@shared/models/id/has-uuid'; +import { TranslateService } from '@ngx-translate/core'; +import ITooltipsterInstance = JQueryTooltipster.ITooltipsterInstance; + +@Component({ + selector: 'tb-liquid-level-widget', + templateUrl: './liquid-level-widget.component.html', + styleUrls: ['./liquid-level-widget.component.scss'], + encapsulation: ViewEncapsulation.None +}) +export class LiquidLevelWidgetComponent implements OnInit { + + @ViewChild('liquidLevelContent', {static: true}) + liquidLevelContent: ElementRef; + + @Input() + ctx: WidgetContext; + + @Input() + widgetTitlePanel: TemplateRef; + + backgroundStyle: ComponentStyle = {}; + overlayStyle: ComponentStyle = {}; + + hasCardClickAction = false; + + errorsMsg: string[] = []; + + private svgParams: SvgInfo; + + private svg: JQuery; + private tooltip: ITooltipsterInstance; + private overlayContainer: JQuery; + private shape: Shapes; + + private settings: LevelCardWidgetSettings; + + private tankColor: ColorProcessor; + private valueColor: ColorProcessor; + private liquidColor: ColorProcessor; + private backgroundOverlayColor: ColorProcessor; + private tooltipLevelColor: ColorProcessor; + + private tooltipDateFormat: DateFormatProcessor; + + private volume: number; + private tooltipContent: string; + private widgetUnits: string; + + private capacityUnits = Object.values(CapacityUnits); + + constructor(private cd: ChangeDetectorRef, + private resourcesService: ResourcesService, + private translate: TranslateService) { + } + + ngOnInit(): void { + this.ctx.$scope.liquidLevelWidget = this; + this.settings = {...levelCardDefaultSettings, ...this.ctx.settings}; + this.declareStyles(); + + this.backgroundStyle = backgroundStyle(this.settings.background); + this.overlayStyle = overlayStyle(this.settings.background.overlay); + + this.hasCardClickAction = this.ctx.actionsApi.getActionDescriptors('cardClick').length > 0; + + this.getData().subscribe(data => { + if (data) { + const { svg, volume, units } = data; + if (svg && isNotEmptyStr(svg) && this.liquidLevelContent.nativeElement) { + const jQueryContainerElement = $(this.liquidLevelContent.nativeElement); + jQueryContainerElement.html(svg); + this.svg = jQueryContainerElement.find('svg'); + this.createSVG(); + this.createValueElement(); + + if (this.settings.showTooltip && (this.settings.showTooltipLevel || this.settings.showTooltipDate)) { + this.createTooltip(); + } + } + + if (isDefined(volume) && !isNaN(Number(volume))) { + this.volume = Number(volume); + } + + if (units) { + this.widgetUnits = units; + } + + this.update(true); + } + }); + } + + private declareStyles(): void { + this.tankColor = ColorProcessor.fromSettings(this.settings.tankColor); + this.valueColor = ColorProcessor.fromSettings(this.settings.valueColor); + this.liquidColor = ColorProcessor.fromSettings(this.settings.liquidColor); + this.backgroundOverlayColor = ColorProcessor.fromSettings(this.settings.backgroundOverlayColor); + this.tooltipLevelColor = ColorProcessor.fromSettings(this.settings.tooltipLevelColor); + + this.tooltipDateFormat = DateFormatProcessor.fromSettings(this.ctx.$injector, this.settings.tooltipDateFormat); + } + + private getData(): Observable<{ svg: string; volume: number; units: string }> { + const entityId: EntityId = { + entityType: this.ctx.datasources[0].entityType, + id: this.ctx.datasources[0].entityId + }; + + return this.getShape(entityId).pipe( + switchMap(shape => { + this.shape = shape; + this.svgParams = svgMapping.get(shape); + if (this.svgParams) { + return forkJoin([ + this.resourcesService.loadJsonResource(this.svgParams.svg), + this.getTankersParams(entityId) + ]).pipe( + map(params => ({svg: params[0], ...params[1]})) + ); + } + return of(null); + }) + ); + } + + public onInit() { + const borderRadius = this.ctx.$widgetElement.css('borderRadius'); + this.overlayStyle = {...this.overlayStyle, ...{borderRadius}}; + this.cd.detectChanges(); + } + + public update(ignoreAnimation?: boolean) { + if (this.svg) { + this.updateData(ignoreAnimation); + } + } + + public destroy() { + + } + + private createSVG() { + if (this.svg) { + this.svg.css('display', 'block') + .css('overflow', 'hidden') + .css('width', '100%') + .css('height', '100%'); + } + } + + private updateData(ignoreAnimation?: boolean) { + const data = this.ctx.data[0]?.data[0]; + if (data && isDefinedAndNotNull(data[1])) { + const percentage = isNumeric(data[1]) ? this.convertInputData(data[1]) : 0; + this.updateSvg(percentage, ignoreAnimation); + this.updateValueElement(data[1], percentage); + + if (this.settings.showTooltip && (this.settings.showTooltipLevel || this.settings.showTooltipDate)) { + this.updateTooltip(data); + } + } + } + + private createTooltip(): void { + this.tooltipContent = this.getTooltipContent(); + + import('tooltipster').then(() => { + if ($.tooltipster && this.tooltip) { + this.tooltip.destroy(); + this.tooltip = null; + } + this.tooltip = this.svg.tooltipster({ + contentAsHTML: true, + theme: 'tooltipster-shadow', + side: 'top', + delay: 10, + distance: this.settings.showTitle ? -33 : -63, + triggerClose: { + click: true, + tap: true, + scroll: true, + mouseleave: true + }, + animation: 'grow', + updateAnimation: null, + trackOrigin: true, + functionBefore: (instance, helper) => { + instance.content(this.tooltipContent); + }, + functionReady: (instance, helper) => { + const tooltipsterBoxStyles: JQuery.PlainObject = { + backgroundColor: this.settings.tooltipBackgroundColor, + backdropFilter: `blur(${this.settings.tooltipBackgroundBlur}px)`, + width: '100%', + height: '100%' + }; + + $(helper.tooltip).css('max-width', this.svg.width() + 'px'); + $(helper.tooltip).css('max-height', this.svg.height() + 'px'); + $(helper.tooltip).find('.tooltipster-box').css(tooltipsterBoxStyles); + $(helper.tooltip).find('.tooltipster-arrow').empty(); + + instance.reposition(); + } + }).tooltipster('instance'); + }); + } + + private createValueElement(): void { + const jQueryContainerElement = $(this.liquidLevelContent.nativeElement); + const containerOverlay = jQueryContainerElement.find('.container-overlay'); + const percentageOverlay = jQueryContainerElement.find('.percentage-overlay'); + const absoluteOverlay = jQueryContainerElement.find('.absolute-overlay'); + + if (this.settings.layout === LevelCardLayout.absolute && !this.errorsMsg.length) { + this.overlayContainer = absoluteOverlay; + percentageOverlay.css('visibility', 'hidden'); + if (!this.settings.showBackgroundOverlay) { + absoluteOverlay.css('visibility', 'hidden'); + } + } else if (this.settings.layout === LevelCardLayout.percentage && !this.errorsMsg.length) { + this.overlayContainer = percentageOverlay; + absoluteOverlay.css('visibility', 'hidden'); + if (!this.settings.showBackgroundOverlay) { + percentageOverlay.css('visibility', 'hidden'); + } + } else { + containerOverlay.css('visibility', 'hidden'); + } + + if (this.overlayContainer) { + this.overlayContainer.attr('fill', this.backgroundOverlayColor.color); + this.overlayContainer.removeAttr('fill-opacity'); + } + } + + private getShape(entityId: EntityId): Observable { + if (this.settings.tankSelectionType === LiquidWidgetDataSourceType.attribute && entityId.id !== NULL_UUID) { + return this.ctx.attributeService.getEntityAttributes(entityId, null, [this.settings.shapeAttributeName]) + .pipe(map(attributes => { + const shape = extractValue(attributes, this.settings.shapeAttributeName); + if (!shape || !svgMapping.has(shape)) { + this.createdErrorMgs(this.settings.shapeAttributeName, isUndefinedOrNull(shape) || isEmptyStr(shape)); + return this.settings.selectedShape; + } + return shape; + } + )); + } + return of(this.settings.selectedShape); + } + + private getTankersParams(entityId: EntityId): Observable<{ volume: number; units: string }> { + const isVolumeStatic = this.settings.layout !== LevelCardLayout.absolute + && this.settings.datasourceUnits === CapacityUnits.percent + || this.settings.volumeSource === LiquidWidgetDataSourceType.static; + const isUnitStatic = this.settings.layout !== LevelCardLayout.absolute || + this.settings.widgetUnitsSource === LiquidWidgetDataSourceType.static; + + const attributeKeys: string[] = []; + + if (!isVolumeStatic) { + attributeKeys.push(this.settings.volumeAttributeName); + } + + if (!isUnitStatic) { + attributeKeys.push(this.settings.widgetUnitsAttributeName); + } + + if (!attributeKeys.length || entityId.id === NULL_UUID) { + return of({ + volume: this.settings.volumeConstant, + units: this.settings.units + }); + } + + return this.ctx.attributeService.getEntityAttributes(entityId, null, attributeKeys).pipe( + map(attributes => { + let volume = isVolumeStatic ? this.settings.volumeConstant : extractValue(attributes, this.settings.volumeAttributeName); + let units = isUnitStatic ? this.settings.units : extractValue(attributes, this.settings.widgetUnitsAttributeName); + + if (!isVolumeStatic && (!volume || !isNumeric(volume) || volume < 0.1)) { + this.createdErrorMgs(this.settings.volumeAttributeName, isUndefinedOrNull(volume) || isEmptyStr(volume)); + volume = this.settings.volumeConstant; + } + + if (!isUnitStatic) { + if (isNotEmptyStr(units)) { + const normalizeUnits = units.normalize().trim(); + units = this.capacityUnits.find(unit => unit.normalize() === normalizeUnits); + } + if (isUndefinedOrNull(units) || !isNotEmptyStr(units)) { + this.createdErrorMgs(this.settings.widgetUnitsAttributeName, isUndefinedOrNull(units) || isEmptyStr(units)); + units = this.settings.units; + } + } + + return { + volume, + units + }; + }) + ); + } + + private createdErrorMgs(attributeName: string, isEmpty = false) { + if (isEmpty) { + this.errorsMsg.push(this.translate.instant('widgets.liquid-level-card.attribute-key-not-set', {attributeName})); + } else { + this.errorsMsg.push(this.translate.instant('widgets.liquid-level-card.attribute-key-invalid', {attributeName})); + } + this.cd.markForCheck(); + } + + private updateSvg(percentage: number, ignoreAnimation?: boolean) { + const yLimits: SvgLimits = { + min: this.svgParams.limits.min, + max: this.svgParams.limits.max + }; + + const newYPos = this.calculatePosition(percentage, yLimits); + this.updateShapeColor(percentage); + this.updateLevel(newYPos, percentage, ignoreAnimation); + } + + private calculatePosition(percentage: number, limits: SvgLimits): number { + if (percentage >= 100) { + return limits.max; + } if (percentage <= 0) { + return limits.min; + } + return limits.min + (percentage / 100) * (limits.max - limits.min); + } + + private updateTooltip(value: [number, any]): void { + this.tooltipContent = this.getTooltipContent(value); + + if (this.tooltip) { + this.tooltip.content(this.tooltipContent); + } + } + + private updateLevel(newY: number, percentage: number, ignoreAnimation = false): void { + this.liquidColor.update(percentage); + const jQueryContainerElement = $(this.liquidLevelContent.nativeElement); + const fill = jQueryContainerElement.find('.tb-liquid-fill'); + const surfaces = jQueryContainerElement.find('.tb-liquid-surface'); + const surfacePositionAttr = this.shape !== Shapes.vCylinder ? 'y' : 'cy'; + const animationSpeed = 500; + + const levelColor = this.errorsMsg.length ? 'transparent' : this.liquidColor.color; + + if (ignoreAnimation) { + fill.css({y : newY}); + } else { + fill.animate({y : newY}, animationSpeed); + } + fill.attr('fill', levelColor); + + surfaces.each((index, element) => { + const $element = $(element); + if (ignoreAnimation) { + $element.css({[surfacePositionAttr]: newY}); + } else { + $element.animate({[surfacePositionAttr]: newY}, animationSpeed); + } + if ($element.hasClass('tb-liquid')) { + $element.attr('fill', levelColor); + } + }); + } + + private updateShapeColor(value: number): void { + const jQueryContainerElement = $(this.liquidLevelContent.nativeElement); + const shapeStrokes = jQueryContainerElement.find('.tb-shape-stroke'); + const shapeFill = jQueryContainerElement.find('.tb-shape-fill'); + this.tankColor.update(value); + + const shapeColor = this.errorsMsg.length ? '#CACACA' : this.tankColor.color; + + shapeStrokes.each((index, element) => { + $(element).attr('stroke', shapeColor); + }); + + shapeFill.each((index, element) => { + $(element).attr('fill', shapeColor); + }); + } + + private updateValueElement(data: any, percentage: number): void { + let content: string; + let container: JQuery; + const jQueryContainerElement = $(this.liquidLevelContent.nativeElement); + let value = 'N/A'; + + if (isNumeric(data)) { + value = convertLiters(this.convertOutputData(percentage), this.widgetUnits as CapacityUnits, ConversionType.from) + .toFixed(this.settings.decimals || 0); + } + this.valueColor.update(value); + const valueTextStyle = cssTextFromInlineStyle({...inlineTextStyle(this.settings.valueFont), + color: this.valueColor.color}); + this.backgroundOverlayColor.update(percentage); + if (this.overlayContainer) { + this.overlayContainer.attr('fill', this.backgroundOverlayColor.color); + } + + if (this.settings.layout === LevelCardLayout.absolute) { + const volumeInLiters: number = convertLiters(this.volume, this.settings.volumeUnits as CapacityUnits, ConversionType.to); + const volume = convertLiters(volumeInLiters, this.widgetUnits as CapacityUnits, ConversionType.from) + .toFixed(this.settings.decimals || 0); + + const volumeTextStyle = cssTextFromInlineStyle({...inlineTextStyle(this.settings.volumeFont), + color: this.settings.volumeColor}); + + container = jQueryContainerElement.find('.absolute-value-container'); + content = createAbsoluteLayout({inputValue: value, volume}, + {valueStyle: valueTextStyle, volumeStyle: volumeTextStyle}, this.widgetUnits); + + } else if (this.settings.layout === LevelCardLayout.percentage) { + container = jQueryContainerElement.find('.percentage-value-container'); + content = createPercentLayout(value, valueTextStyle); + } + + if (content && container) { + container.html(content); + } + } + + private getTooltipContent(value?: [number, any]): string { + const contentValue = value || [0, '']; + let tooltipValue: string | number = 'N/A'; + + if (isNumeric(contentValue[1])) { + tooltipValue = this.convertTooltipData(contentValue[1]); + } + + this.tooltipLevelColor.update(tooltipValue); + this.tooltipDateFormat.update(contentValue[0]); + + const levelTextStyle = cssTextFromInlineStyle({...inlineTextStyle(this.settings.tooltipLevelFont), + color: this.tooltipLevelColor.color}); + + const dateTextStyle = cssTextFromInlineStyle({...inlineTextStyle(this.settings.tooltipDateFont), + color: this.settings.tooltipDateColor, overflow: 'hidden', 'text-overflow': 'ellipsis', 'white-space': 'nowrap'}); + + let content = `
`; + + if (this.settings.showTooltipLevel) { + const levelValue = typeof tooltipValue == 'number' + ? `${tooltipValue.toFixed(this.settings.tooltipLevelDecimals)} ${this.settings.tooltipUnits}` + : 'N/A'; + content += this.createTooltipContent( + this.ctx.translate.instant('widgets.liquid-level-card.level'), + levelValue, + levelTextStyle + ); + } + + if (this.settings.showTooltipDate) { + content += this.createTooltipContent( + this.ctx.translate.instant('widgets.liquid-level-card.last-update'), + this.tooltipDateFormat.formatted, + dateTextStyle + ); + } + + content += '
'; + + return content; + } + + private createTooltipContent(labelText: string, contentValue: string, textStyle: string): string { + return `
+ + +
`; + } + + private convertInputData(value: number): number { + if (this.settings.datasourceUnits !== CapacityUnits.percent) { + return (convertLiters(value, this.settings.datasourceUnits, ConversionType.to) / + convertLiters(this.volume, this.settings.volumeUnits, ConversionType.to)) * 100; + } + + return value; + } + + private convertOutputData(value: number): number { + if (this.widgetUnits !== CapacityUnits.percent) { + return convertLiters(this.volume * (value / 100), this.settings.volumeUnits, ConversionType.to); + } + + return value; + } + + private convertTooltipData(value: number): number { + const percentage = this.convertInputData(value); + if (this.settings.tooltipUnits !== CapacityUnits.percent) { + const liters = this.convertOutputData(percentage); + + return convertLiters(liters, this.settings.tooltipUnits, ConversionType.from); + } else { + return percentage; + } + } + + public cardClick($event: Event) { + this.ctx.actionsApi.cardClick($event); + } +} diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/indicator/liquid-level-widget.models.ts b/ui-ngx/src/app/modules/home/components/widget/lib/indicator/liquid-level-widget.models.ts new file mode 100644 index 0000000000..cf526d6c97 --- /dev/null +++ b/ui-ngx/src/app/modules/home/components/widget/lib/indicator/liquid-level-widget.models.ts @@ -0,0 +1,623 @@ +/// +/// Copyright © 2016-2023 The Thingsboard Authors +/// +/// Licensed under the Apache License, Version 2.0 (the "License"); +/// you may not use this file except in compliance with the License. +/// You may obtain a copy of the License at +/// +/// http://www.apache.org/licenses/LICENSE-2.0 +/// +/// Unless required by applicable law or agreed to in writing, software +/// distributed under the License is distributed on an "AS IS" BASIS, +/// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +/// See the License for the specific language governing permissions and +/// limitations under the License. +/// + +import { + BackgroundSettings, + BackgroundType, + ColorSettings, + constantColor, + cssTextFromInlineStyle, + DateFormatSettings, + Font, + lastUpdateAgoDateFormat +} from '@shared/models/widget-settings.models'; +import { DataKey, WidgetConfig } from '@shared/models/widget.models'; +import { AttributeData, DataKeyType } from '@shared/models/telemetry/telemetry.models'; +import { forkJoin, Observable, of } from 'rxjs'; +import { singleEntityFilterFromDeviceId } from '@shared/models/query/query.models'; +import { EntityType } from '@shared/models/entity-type.models'; +import { catchError, map, mergeMap } from 'rxjs/operators'; +import { EntityService } from '@core/http/entity.service'; +import { IAliasController } from '@core/api/widget-api.models'; +import { DomSanitizer, SafeUrl } from '@angular/platform-browser'; +import { ResourcesService } from '@core/services/resources.service'; +import { FormGroup } from '@angular/forms'; + +export interface SvgInfo { + svg: string; + limits: SvgLimits; +} + +export interface SvgLimits { + min: number; + max: number; +} + +export interface LevelCardWidgetSettings extends WidgetConfig { + tankSelectionType: LiquidWidgetDataSourceType; + selectedShape: Shapes; + shapeAttributeName: string; + tankColor: ColorSettings; + datasourceUnits: CapacityUnits; + layout: LevelCardLayout; + volumeSource: LiquidWidgetDataSourceType; + volumeConstant: number; + volumeAttributeName: string; + volumeUnits: CapacityUnits; + volumeFont: Font; + volumeColor: string; + liquidColor: ColorSettings; + valueFont: Font; + widgetUnitsSource: LiquidWidgetDataSourceType; + widgetUnitsAttributeName: string; + valueColor: ColorSettings; + showBackgroundOverlay: boolean; + backgroundOverlayColor: ColorSettings; + showTooltip: boolean; + showTooltipLevel: boolean; + tooltipUnits: CapacityUnits; + tooltipLevelDecimals: number; + tooltipLevelFont: Font; + tooltipLevelColor: ColorSettings; + showTooltipDate: boolean; + tooltipDateFormat: DateFormatSettings; + tooltipDateFont: Font; + tooltipDateColor: string; + tooltipBackgroundColor: string; + tooltipBackgroundBlur: number; + background: BackgroundSettings; +} + +export enum Shapes { + vOval = 'Vertical Oval', + vCylinder = 'Vertical Cylinder', + vCapsule = 'Vertical Capsule', + rectangle = 'Rectangle', + hOval = 'Horizontal Oval', + hEllipse = 'Horizontal Ellipse', + hDishEnds = 'Horizontal Dish Ends', + hCylinder = 'Horizontal Cylinder', + hCapsule = 'Horizontal Capsule', + hElliptical_2_1 = 'Horizontal 2:1 Elliptical' +} + +export enum CapacityUnits { + percent = '%', + liters = 'L', + cubicMillimeter = 'mm³', + cubicCentimeter = 'cm³', + cubicMeter = 'm³', + cubicKilometer = 'km³', + milliliter = 'mL', + hectoliter = 'hl', + cubicInch = 'in³', + cubicFoot = 'ft³', + cubicYard = 'yd³', + fluidOunce = 'fl-oz', + pint = 'pt', + quart = 'qt', + gallon = 'gal', + oilBarrels = 'bbl' +} + +export enum LevelCardLayout { + simple = 'simple', + percentage = 'percentage', + absolute = 'absolute' +} + +export enum LiquidWidgetDataSourceType { + static = 'static', + attribute = 'attribute' +} + +export enum ConversionType { + to = 'to', + from = 'from', +} + +export const svgMapping = new Map( + [ + [ + Shapes.vOval, + { + svg: 'assets/widget/liquid-level/shapes/vertical-oval.svg', + limits: { min: 171, max: 51 } + } + ], + [ + Shapes.vCylinder, + { + svg: 'assets/widget/liquid-level/shapes/vertical-cylinder.svg', + limits: { min: 161, max: 55 } + } + ], + [ + Shapes.vCapsule, + { + svg: 'assets/widget/liquid-level/shapes/vertical-capsule.svg', + limits: { min: 197, max: 25 } + } + ], + [ + Shapes.rectangle, + { + svg: 'assets/widget/liquid-level/shapes/rectangle.svg', + limits: { min: 169, max: 52 } + } + ], + [ + Shapes.hOval, + { + svg: 'assets/widget/liquid-level/shapes/horizontal-oval.svg', + limits: { min: 160, max: 63 } + } + ], + [ + Shapes.hEllipse, + { + svg: 'assets/widget/liquid-level/shapes/horizontal-ellipse.svg', + limits: { min: 160, max: 64 } + } + ], + [ + Shapes.hDishEnds, + { + svg: 'assets/widget/liquid-level/shapes/horizontal-dish-ends.svg', + limits: { min: 173, max: 50 } + } + ], + [ + Shapes.hCylinder, + { + svg: 'assets/widget/liquid-level/shapes/horizontal-cylinder.svg', + limits: { min: 165, max: 56 } + } + ], + [ + Shapes.hCapsule, + { + svg: 'assets/widget/liquid-level/shapes/horizontal-capsule.svg', + limits: { min: 171, max: 52 } + } + ], + [ + Shapes.hElliptical_2_1, + { + svg: 'assets/widget/liquid-level/shapes/horizontal-2_1-elliptical.svg', + limits: { min: 173, max: 50 } + } + ] + ] +); + +export const levelCardLayoutTranslations = new Map( + [ + [LevelCardLayout.simple, 'widgets.liquid-level-card.layout-simple'], + [LevelCardLayout.percentage, 'widgets.liquid-level-card.layout-percentage'], + [LevelCardLayout.absolute, 'widgets.liquid-level-card.layout-absolute'] + ] +); + +export const LiquidWidgetDataSourceTypeTranslations = new Map( + [ + [LiquidWidgetDataSourceType.static, 'widgets.liquid-level-card.static'], + [LiquidWidgetDataSourceType.attribute, 'widgets.liquid-level-card.attribute'] + ] +); + +export const ShapesTranslations = new Map( + [ + [Shapes.vOval, 'widgets.liquid-level-card.v-oval'], + [Shapes.vCylinder, 'widgets.liquid-level-card.v-cylinder'], + [Shapes.vCapsule, 'widgets.liquid-level-card.v-capsule'], + [Shapes.rectangle, 'widgets.liquid-level-card.rectangle'], + [Shapes.hOval, 'widgets.liquid-level-card.h-oval'], + [Shapes.hEllipse, 'widgets.liquid-level-card.h-ellipse'], + [Shapes.hDishEnds, 'widgets.liquid-level-card.h-dish-ends'], + [Shapes.hCylinder, 'widgets.liquid-level-card.h-cylinder'], + [Shapes.hCapsule, 'widgets.liquid-level-card.h-capsule'], + [Shapes.hElliptical_2_1, 'widgets.liquid-level-card.h-elliptical_2_1'] + ] +); + +export const levelCardDefaultSettings: LevelCardWidgetSettings = { + tankSelectionType: LiquidWidgetDataSourceType.static, + selectedShape: Shapes.vCylinder, + shapeAttributeName: 'tankShape', + tankColor: constantColor('#242770'), + datasourceUnits: CapacityUnits.percent, + layout: LevelCardLayout.percentage, + showTitle: false, + title: 'Liquid level', + titleFont: { + family: 'Roboto', + size: 16, + sizeUnit: 'px', + style: 'normal', + weight: '500', + lineHeight: '1.5' + }, + titleColor: 'rgba(0, 0, 0, 0.87)', + showTitleIcon: false, + titleIcon: 'water_drop', + iconColor: '#5469FF', + volumeSource: LiquidWidgetDataSourceType.static, + volumeConstant: 500, + volumeUnits: CapacityUnits.liters, + volumeAttributeName: 'volume', + volumeFont: { + family: 'Roboto', + size: 14, + sizeUnit: 'px', + style: 'normal', + weight: '500', + lineHeight: '100%' + }, + volumeColor: 'rgba(0, 0, 0, 0.18)', + units: CapacityUnits.percent as string, + widgetUnitsSource: LiquidWidgetDataSourceType.static, + widgetUnitsAttributeName: 'units', + decimals: 0, + liquidColor: constantColor('#7A8BFF'), + valueFont: { + family: 'Roboto', + size: 24, + sizeUnit: 'px', + style: 'normal', + weight: '500', + lineHeight: '100%' + }, + valueColor: constantColor('rgba(0, 0, 0, 0.87)'), + showBackgroundOverlay: true, + backgroundOverlayColor: constantColor('rgba(255, 255, 255, 0.76)'), + showTooltip: true, + showTooltipLevel: true, + tooltipUnits: CapacityUnits.percent, + tooltipLevelDecimals: 0, + tooltipLevelFont: { + family: 'Roboto', + size: 13, + sizeUnit: 'px', + style: 'normal', + weight: '500', + lineHeight: '100%' + }, + tooltipLevelColor: constantColor('rgba(0, 0, 0, 0.76)'), + showTooltipDate: true, + tooltipDateFormat: lastUpdateAgoDateFormat(), + tooltipDateFont: { + family: 'Roboto', + size: 13, + sizeUnit: 'px', + style: 'normal', + weight: '500', + lineHeight: '100%' + }, + tooltipDateColor: 'rgba(0, 0, 0, 0.76)', + tooltipBackgroundColor: 'rgba(255, 255, 255, 0.76)', + tooltipBackgroundBlur: 3, + background: { + type: BackgroundType.color, + color: '#fff', + overlay: { + enabled: false, + color: 'rgba(255,255,255,0.72)', + blur: 3 + } + } +}; + +export const convertLiters = (value: number, units: CapacityUnits, conversionType: ConversionType): number => { + let factor: number; + + switch (units) { + case CapacityUnits.liters: + return value; + case CapacityUnits.cubicMillimeter: + factor = 1e6; + break; + case CapacityUnits.cubicCentimeter: + case CapacityUnits.milliliter: + factor = 1e3; + break; + case CapacityUnits.cubicMeter: + factor = 1e-3; + break; + case CapacityUnits.cubicKilometer: + factor = 1e-15; + break; + case CapacityUnits.hectoliter: + factor = 0.01; + break; + case CapacityUnits.cubicInch: + factor = 61.0237; + break; + case CapacityUnits.cubicFoot: + factor = 1 / 28.3168; + break; + case CapacityUnits.cubicYard: + factor = 1 / 764.555; + break; + case CapacityUnits.fluidOunce: + factor = 33.814; + break; + case CapacityUnits.pint: + factor = 1 / 0.473176; + break; + case CapacityUnits.quart: + factor = 1 / 0.946353; + break; + case CapacityUnits.gallon: + factor = 1 / 3.78541; + break; + case CapacityUnits.oilBarrels: + factor = 1 / 158.987; + break; + default: + return value; + // throw new Error(`Unknown unit: ${units}`); + } + + return conversionType === ConversionType.to ? value / factor : value * factor; +}; + +export const extractValue = (attributes: Array, attributeName: string): T | undefined => { + return attributes.find(attr => attr.key === attributeName)?.value; +}; + +export const valueContainerStyleDefaults = cssTextFromInlineStyle({ + width: '100%', + height: '100%', + display: 'flex', + gap: '8px', + 'text-align': 'center', + 'align-items': 'center', + 'align-content': 'center', + 'justify-content': 'center', + 'font-family': 'Roboto, Helvetica Neue, sans-serif' +}); + +export const valueTextStyleDefaults = 'letter-spacing: normal; font-style: normal; font-weight: 500; line-height: 100%;' + + ' font-size: 24px; font-family: Roboto, Helvetica Neue, sans-serif; color: #000000DE'; + +export const volumeTextStyleDefaults = 'letter-spacing: normal; font-style: normal; font-weight: 500;' + + ' line-height: 100%; font-size: 14px; font-family: Roboto, Helvetica Neue, sans-serif; color: rgba(0, 0, 0, 0.18)'; + +export const createAbsoluteLayout = (values?: {inputValue: number | string; volume: number | string}, + styles?: {valueStyle: string; volumeStyle: string}, + units?: string): string => { + const inputValue = values?.inputValue ? values?.inputValue : 500; + const valueTextStyle = styles?.valueStyle ? styles?.valueStyle : valueTextStyleDefaults; + const volume = values?.volume ? values?.volume : 1000; + const volumeTextStyle = styles?.volumeStyle ? styles?.volumeStyle : volumeTextStyleDefaults; + const displayUnits = units ? units : CapacityUnits.liters; + + return `
+
+ +
+ +
+ +
`; +}; + +export const createPercentLayout = (value: number | string = 50, valueTextStyle: string = valueTextStyleDefaults): string => + `
+ +
`; + +export const optionsFilter = (searchText: string): ((key: DataKey) => boolean) => + key => key?.name.toUpperCase().includes(searchText?.toUpperCase()); + +export const fetchEntityKeysForDevice = (deviceId: string, dataKeyTypes: Array, + entityService: EntityService): Observable> => { + const entityFilter = singleEntityFilterFromDeviceId(deviceId); + return entityService.getEntityKeysByEntityFilter( + entityFilter, + dataKeyTypes, [EntityType.DEVICE], + {ignoreLoading: true, ignoreErrors: true} + ).pipe( + catchError(() => of([])) + ); +}; + +export const fetchEntityKeys = (entityAliasId: string, dataKeyTypes: Array, + entityService: EntityService, aliasController: IAliasController): Observable> => + aliasController.getAliasInfo(entityAliasId).pipe( + mergeMap((aliasInfo) => entityService.getEntityKeysByEntityFilter( + aliasInfo.entityFilter, + dataKeyTypes, [], + {ignoreLoading: true, ignoreErrors: true} + )), + catchError(() => of([] as Array)) + ); + + +export const createShapeLayout = (svg: string, layout: LevelCardLayout, sanitizer: DomSanitizer): SafeUrl => { + if (svg && layout) { + const parser = new DOMParser(); + const svgImage = parser.parseFromString(svg, 'image/svg+xml'); + + if (layout === LevelCardLayout.simple) { + svgImage.querySelector('.container-overlay').remove(); + } else if (layout === LevelCardLayout.percentage) { + svgImage.querySelector('.absolute-overlay').remove(); + svgImage.querySelector('.percentage-value-container').innerHTML = createPercentLayout(); + } else { + svgImage.querySelector('.absolute-value-container').innerHTML = createAbsoluteLayout(); + svgImage.querySelector('.percentage-overlay').remove(); + } + + const encodedSvg = encodeURIComponent(svgImage.documentElement.outerHTML); + + return sanitizer.bypassSecurityTrustResourceUrl(`data:image/svg+xml,${encodedSvg}`); + } +}; + +export const loadSvgShapesMapping = (resourcesService: ResourcesService): Observable> => { + const obsArray: Array> = []; + const shapesImageMap: Map = new Map(); + svgMapping.forEach((value, shape) => { + const obs = resourcesService.loadJsonResource(value.svg).pipe( + map((svg) => ({svg, shape})) + ); + + obsArray.push(obs); + }); + + return forkJoin(obsArray).pipe( + map(svgData => { + for (const data of svgData) { + shapesImageMap.set(data.shape, data.svg); + } + return shapesImageMap; + }) + ); +}; + +export const updatedFormSettingsValidators = (formGroup: FormGroup) => { + const datasourceUnits: string = formGroup.get('datasourceUnits').value; + const layout: LevelCardLayout = formGroup.get('layout').value; + const volumeSource: LiquidWidgetDataSourceType = formGroup.get('volumeSource').value; + const widgetUnitsSource: LiquidWidgetDataSourceType = formGroup.get('widgetUnitsSource').value; + const showTooltipLevel: boolean = formGroup.get('showTooltipLevel').value; + const showTooltipDate: boolean = formGroup.get('showTooltipDate').value; + const showTooltip: boolean = formGroup.get('showTooltip').value; + const tankSelectionType: LiquidWidgetDataSourceType = formGroup.get('tankSelectionType').value; + + if (tankSelectionType === LiquidWidgetDataSourceType.static) { + formGroup.get('selectedShape').enable({emitEvent: false}); + formGroup.get('shapeAttributeName').disable({emitEvent: false}); + } else { + formGroup.get('selectedShape').disable({emitEvent: false}); + formGroup.get('shapeAttributeName').enable({emitEvent: false}); + } + + switch (layout) { + case LevelCardLayout.simple: + case LevelCardLayout.percentage: + formGroup.get('widgetUnitsSource').disable({emitEvent: false}); + formGroup.get('units').disable({emitEvent: false}); + formGroup.get('widgetUnitsAttributeName').disable({emitEvent: false}); + + if (datasourceUnits !== CapacityUnits.percent) { + formGroup.get('volumeSource').enable({emitEvent: false}); + formGroup.get('volumeUnits').enable({emitEvent: false}); + if (volumeSource === LiquidWidgetDataSourceType.static) { + formGroup.get('volumeConstant').enable({emitEvent: false}); + formGroup.get('volumeAttributeName').disable({emitEvent: false}); + } else { + formGroup.get('volumeConstant').disable({emitEvent: false}); + formGroup.get('volumeAttributeName').enable({emitEvent: false}); + } + } else { + formGroup.get('volumeSource').disable({emitEvent: false}); + formGroup.get('volumeConstant').disable({emitEvent: false}); + formGroup.get('volumeAttributeName').disable({emitEvent: false}); + formGroup.get('volumeUnits').disable({emitEvent: false}); + } + + if (layout === LevelCardLayout.simple) { + formGroup.get('decimals')?.disable({emitEvent: false}); + formGroup.get('valueFont').disable({emitEvent: false}); + formGroup.get('valueColor').disable({emitEvent: false}); + } else { + formGroup.get('decimals')?.enable({emitEvent: false}); + formGroup.get('valueFont').enable({emitEvent: false}); + formGroup.get('valueColor').enable({emitEvent: false}); + } + + formGroup.get('volumeFont').disable({emitEvent: false}); + formGroup.get('volumeColor').disable({emitEvent: false}); + + break; + case LevelCardLayout.absolute: + formGroup.get('widgetUnitsSource').enable({emitEvent: false}); + if (widgetUnitsSource === LiquidWidgetDataSourceType.static) { + formGroup.get('units').enable({emitEvent: false}); + formGroup.get('widgetUnitsAttributeName').disable({emitEvent: false}); + } else { + formGroup.get('units').disable({emitEvent: false}); + formGroup.get('widgetUnitsAttributeName').enable({emitEvent: false}); + } + + formGroup.get('volumeSource').enable({emitEvent: false}); + formGroup.get('volumeUnits').enable({emitEvent: false}); + if (volumeSource === LiquidWidgetDataSourceType.static) { + formGroup.get('volumeConstant').enable({emitEvent: false}); + formGroup.get('volumeAttributeName').disable({emitEvent: false}); + } else { + formGroup.get('volumeConstant').disable({emitEvent: false}); + formGroup.get('volumeAttributeName').enable({emitEvent: false}); + } + + if (formGroup.get('decimals')) { + formGroup.get('decimals').enable({emitEvent: false}); + } + formGroup.get('valueFont').enable({emitEvent: false}); + formGroup.get('valueColor').enable({emitEvent: false}); + + formGroup.get('volumeFont').enable({emitEvent: false}); + formGroup.get('volumeColor').enable({emitEvent: false}); + + break; + } + + if (showTooltip) { + formGroup.get('showTooltipLevel').enable({emitEvent: false}); + formGroup.get('showTooltipDate').enable({emitEvent: false}); + formGroup.get('tooltipBackgroundColor').enable({emitEvent: false}); + formGroup.get('tooltipBackgroundBlur').enable({emitEvent: false}); + + if (showTooltipLevel) { + formGroup.get('tooltipLevelDecimals').enable({emitEvent: false}); + formGroup.get('tooltipLevelFont').enable({emitEvent: false}); + formGroup.get('tooltipLevelColor').enable({emitEvent: false}); + formGroup.get('tooltipUnits').enable({emitEvent: false}); + } else { + formGroup.get('tooltipUnits').disable({emitEvent: false}); + formGroup.get('tooltipLevelDecimals').disable({emitEvent: false}); + formGroup.get('tooltipLevelFont').disable({emitEvent: false}); + formGroup.get('tooltipLevelColor').disable({emitEvent: false}); + } + + if (showTooltipDate) { + formGroup.get('tooltipDateFormat').enable({emitEvent: false}); + formGroup.get('tooltipDateFont').enable({emitEvent: false}); + formGroup.get('tooltipDateColor').enable({emitEvent: false}); + } else { + formGroup.get('tooltipDateFormat').disable({emitEvent: false}); + formGroup.get('tooltipDateFont').disable({emitEvent: false}); + formGroup.get('tooltipDateColor').disable({emitEvent: false}); + } + } else { + formGroup.get('showTooltipLevel').disable({emitEvent: false}); + formGroup.get('showTooltipDate').disable({emitEvent: false}); + formGroup.get('tooltipBackgroundColor').disable({emitEvent: false}); + formGroup.get('tooltipBackgroundBlur').disable({emitEvent: false}); + + formGroup.get('tooltipUnits').disable({emitEvent: false}); + formGroup.get('tooltipLevelDecimals').disable({emitEvent: false}); + formGroup.get('tooltipLevelFont').disable({emitEvent: false}); + formGroup.get('tooltipLevelColor').disable({emitEvent: false}); + + formGroup.get('tooltipDateFormat').disable({emitEvent: false}); + formGroup.get('tooltipDateFont').disable({emitEvent: false}); + formGroup.get('tooltipDateColor').disable({emitEvent: false}); + } +}; diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/settings/common/color-range-list.component.html b/ui-ngx/src/app/modules/home/components/widget/lib/settings/common/color-range-list.component.html new file mode 100644 index 0000000000..8db7f074de --- /dev/null +++ b/ui-ngx/src/app/modules/home/components/widget/lib/settings/common/color-range-list.component.html @@ -0,0 +1,50 @@ + +
{{ panelTitle }}
+
+
+
+
+
widgets.color.from
+ + + +
widgets.color.to
+ + + + + +
+ +
+
+
+ diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/settings/common/color-range-list.component.ts b/ui-ngx/src/app/modules/home/components/widget/lib/settings/common/color-range-list.component.ts new file mode 100644 index 0000000000..f135d77092 --- /dev/null +++ b/ui-ngx/src/app/modules/home/components/widget/lib/settings/common/color-range-list.component.ts @@ -0,0 +1,136 @@ +/// +/// Copyright © 2016-2023 The Thingsboard Authors +/// +/// Licensed under the Apache License, Version 2.0 (the "License"); +/// you may not use this file except in compliance with the License. +/// You may obtain a copy of the License at +/// +/// http://www.apache.org/licenses/LICENSE-2.0 +/// +/// Unless required by applicable law or agreed to in writing, software +/// distributed under the License is distributed on an "AS IS" BASIS, +/// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +/// See the License for the specific language governing permissions and +/// limitations under the License. +/// + +import { Component, forwardRef, Input, OnDestroy, OnInit } from '@angular/core'; +import { + AbstractControl, + ControlValueAccessor, + FormGroup, + NG_VALUE_ACCESSOR, + UntypedFormArray, + UntypedFormBuilder, + UntypedFormGroup +} from '@angular/forms'; +import { ColorRange } from '@shared/models/widget-settings.models'; +import { TbPopoverComponent } from '@shared/components/popover.component'; +import { Subject } from 'rxjs'; +import { takeUntil } from 'rxjs/operators'; + +@Component({ + selector: 'tb-color-range-list', + templateUrl: './color-range-list.component.html', + styleUrls: ['color-settings-panel.component.scss'], + providers: [ + { + provide: NG_VALUE_ACCESSOR, + useExisting: forwardRef(() => ColorRangeListComponent), + multi: true + } + ] +}) +export class ColorRangeListComponent implements OnInit, ControlValueAccessor, OnDestroy { + + @Input() + disabled: boolean; + + @Input() + popover: TbPopoverComponent; + + @Input() + panelTitle: string; + + modelValue: any; + + colorRangeListFormGroup: UntypedFormGroup; + + private destroy$ = new Subject(); + + private propagateChange = null; + + constructor(private fb: UntypedFormBuilder) {} + + ngOnInit(): void { + this.colorRangeListFormGroup = this.fb.group({ + rangeList: this.fb.array([]) + }); + + this.colorRangeListFormGroup.valueChanges.pipe( + takeUntil(this.destroy$) + ).subscribe(() => this.updateModel()); + } + + ngOnDestroy() { + this.destroy$.next(); + this.destroy$.complete(); + } + + registerOnChange(fn: any): void { + this.propagateChange = fn; + } + + registerOnTouched(fn: any): void { + } + + setDisabledState(isDisabled: boolean): void { + this.disabled = isDisabled; + } + + writeValue(value: any): void { + if (value && value?.length) { + value.forEach((r) => this.rangeListFormArray.push(this.colorRangeControl(r), {emitEvent: false})); + } + } + + private colorRangeControl(range: ColorRange): UntypedFormGroup { + return this.fb.group({ + from: [range?.from, []], + to: [range?.to, []], + color: [range?.color, []] + }); + } + + get rangeListFormArray(): UntypedFormArray { + return this.colorRangeListFormGroup.get('rangeList') as UntypedFormArray; + } + + get rangeListFormGroups(): FormGroup[] { + return this.rangeListFormArray.controls as FormGroup[]; + } + + trackByRange(index: number, rangeControl: AbstractControl): any { + return rangeControl; + } + + removeRange(index: number) { + this.rangeListFormArray.removeAt(index); + this.colorRangeListFormGroup.markAsDirty(); + setTimeout(() => {this.popover?.updatePosition();}, 0); + } + + addRange() { + const newRange: ColorRange = { + color: 'rgba(0,0,0,0.87)' + }; + this.rangeListFormArray.push(this.colorRangeControl(newRange)); + this.colorRangeListFormGroup.markAsDirty(); + setTimeout(() => {this.popover?.updatePosition();}, 0); + } + + updateModel() { + this.propagateChange(this.colorRangeListFormGroup.get('rangeList').value); + } + +} diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/settings/common/color-range-panel.component.html b/ui-ngx/src/app/modules/home/components/widget/lib/settings/common/color-range-panel.component.html new file mode 100644 index 0000000000..449562f184 --- /dev/null +++ b/ui-ngx/src/app/modules/home/components/widget/lib/settings/common/color-range-panel.component.html @@ -0,0 +1,57 @@ + +
+
widgets.color.color-settings
+
+ + +
+
+ + + +
+ +
+
+
+ + + +
+
diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/settings/common/color-range-panel.component.ts b/ui-ngx/src/app/modules/home/components/widget/lib/settings/common/color-range-panel.component.ts new file mode 100644 index 0000000000..bdc9500605 --- /dev/null +++ b/ui-ngx/src/app/modules/home/components/widget/lib/settings/common/color-range-panel.component.ts @@ -0,0 +1,78 @@ +/// +/// Copyright © 2016-2023 The Thingsboard Authors +/// +/// Licensed under the Apache License, Version 2.0 (the "License"); +/// you may not use this file except in compliance with the License. +/// You may obtain a copy of the License at +/// +/// http://www.apache.org/licenses/LICENSE-2.0 +/// +/// Unless required by applicable law or agreed to in writing, software +/// distributed under the License is distributed on an "AS IS" BASIS, +/// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +/// See the License for the specific language governing permissions and +/// limitations under the License. +/// + +import { Component, EventEmitter, Input, OnInit, Output, ViewEncapsulation } from '@angular/core'; +import { PageComponent } from '@shared/components/page.component'; +import { ColorRange } from '@shared/models/widget-settings.models'; +import { TbPopoverComponent } from '@shared/components/popover.component'; +import { UntypedFormBuilder, UntypedFormGroup } from '@angular/forms'; +import { Store } from '@ngrx/store'; +import { AppState } from '@core/core.state'; +import { deepClone } from '@core/utils'; +import { + ColorRangeSettingsComponent +} from '@home/components/widget/lib/settings/common/color-range-settings.component'; + +@Component({ + selector: 'tb-color-range-panel', + templateUrl: './color-range-panel.component.html', + providers: [], + styleUrls: ['./color-settings-panel.component.scss'], + encapsulation: ViewEncapsulation.None +}) +export class ColorRangePanelComponent extends PageComponent implements OnInit { + + @Input() + colorRangeSettings: Array; + + @Input() + popover: TbPopoverComponent; + + @Input() + settingsComponents: ColorRangeSettingsComponent[]; + + @Output() + colorRangeApplied = new EventEmitter>(); + + colorRangeFormGroup: UntypedFormGroup; + + constructor(private fb: UntypedFormBuilder, + protected store: Store) { + super(store); + } + + ngOnInit(): void { + this.colorRangeFormGroup = this.fb.group({ + rangeList: [this.colorRangeSettings, []] + }); + } + + copyColorSettings(comp: ColorRangeSettingsComponent) { + this.colorRangeSettings = deepClone(comp.modelValue); + this.colorRangeFormGroup.get('rangeList').patchValue(this.colorRangeSettings || [], {emitEvent: false}); + this.colorRangeFormGroup.markAsDirty(); + } + + cancel() { + this.popover?.hide(); + } + + applyColorRangeSettings() { + const colorRangeSettings = this.colorRangeFormGroup.get('rangeList').value; + this.colorRangeApplied.emit(colorRangeSettings); + } + +} diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/settings/common/color-range-settings.component.html b/ui-ngx/src/app/modules/home/components/widget/lib/settings/common/color-range-settings.component.html new file mode 100644 index 0000000000..cf0298e99a --- /dev/null +++ b/ui-ngx/src/app/modules/home/components/widget/lib/settings/common/color-range-settings.component.html @@ -0,0 +1,27 @@ + + diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/settings/common/color-range-settings.component.ts b/ui-ngx/src/app/modules/home/components/widget/lib/settings/common/color-range-settings.component.ts new file mode 100644 index 0000000000..989bdb2844 --- /dev/null +++ b/ui-ngx/src/app/modules/home/components/widget/lib/settings/common/color-range-settings.component.ts @@ -0,0 +1,166 @@ +/// +/// Copyright © 2016-2023 The Thingsboard Authors +/// +/// Licensed under the Apache License, Version 2.0 (the "License"); +/// you may not use this file except in compliance with the License. +/// You may obtain a copy of the License at +/// +/// http://www.apache.org/licenses/LICENSE-2.0 +/// +/// Unless required by applicable law or agreed to in writing, software +/// distributed under the License is distributed on an "AS IS" BASIS, +/// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +/// See the License for the specific language governing permissions and +/// limitations under the License. +/// + +import { + Component, + forwardRef, + Injectable, + Input, + OnDestroy, + OnInit, + Renderer2, + ViewContainerRef +} from '@angular/core'; +import { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms'; +import { ColorRange, ComponentStyle } from '@shared/models/widget-settings.models'; +import { MatButton } from '@angular/material/button'; +import { TbPopoverService } from '@shared/components/popover.service'; +import { ColorRangePanelComponent } from '@home/components/widget/lib/settings/common/color-range-panel.component'; + +@Injectable() +export class ColorRangeSettingsComponentService { + + private colorSettingsComponents = new Set(); + + constructor() {} + + public registerColorSettingsComponent(comp: ColorRangeSettingsComponent) { + this.colorSettingsComponents.add(comp); + } + + public unregisterColorSettingsComponent(comp: ColorRangeSettingsComponent) { + this.colorSettingsComponents.delete(comp); + } + + public getOtherColorSettingsComponents(comp: ColorRangeSettingsComponent): ColorRangeSettingsComponent[] { + const result: ColorRangeSettingsComponent[] = []; + for (const component of this.colorSettingsComponents.values()) { + if (component.settingsKey && component.modelValue && component !== comp) { + result.push(component); + } + } + return result; + } + +} + +@Component({ + selector: 'tb-color-range-settings', + templateUrl: './color-range-settings.component.html', + styleUrls: [], + providers: [ + { + provide: NG_VALUE_ACCESSOR, + useExisting: forwardRef(() => ColorRangeSettingsComponent), + multi: true + } + ] +}) +export class ColorRangeSettingsComponent implements OnInit, ControlValueAccessor, OnDestroy { + + @Input() + disabled: boolean; + + @Input() + settingsKey: string; + + modelValue: Array; + + colorStyle: ComponentStyle = {}; + + private propagateChange = null; + + constructor(private popoverService: TbPopoverService, + private renderer: Renderer2, + private viewContainerRef: ViewContainerRef, + private colorSettingsComponentService: ColorRangeSettingsComponentService) {} + + ngOnInit(): void { + this.colorSettingsComponentService.registerColorSettingsComponent(this); + } + + ngOnDestroy() { + this.colorSettingsComponentService.unregisterColorSettingsComponent(this); + } + + registerOnChange(fn: any): void { + this.propagateChange = fn; + } + + registerOnTouched(fn: any): void { + } + + setDisabledState(isDisabled: boolean): void { + this.disabled = isDisabled; + this.updateColorStyle(); + } + + writeValue(value: Array): void { + this.modelValue = value; + this.updateColorStyle(); + } + + openColorRangeSettingsPopup($event: Event, matButton: MatButton) { + if ($event) { + $event.stopPropagation(); + } + const trigger = matButton._elementRef.nativeElement; + if (this.popoverService.hasPopover(trigger)) { + this.popoverService.hidePopover(trigger); + } else { + const ctx: any = { + colorRangeSettings: this.modelValue, + settingsComponents: this.colorSettingsComponentService.getOtherColorSettingsComponents(this) + }; + const colorRangeSettingsPanelPopover = this.popoverService.displayPopover(trigger, this.renderer, + this.viewContainerRef, ColorRangePanelComponent, 'left', true, null, + ctx, + {}, + {}, {}, true); + colorRangeSettingsPanelPopover.tbComponentRef.instance.popover = colorRangeSettingsPanelPopover; + colorRangeSettingsPanelPopover.tbComponentRef.instance.colorRangeApplied.subscribe((colorRangeSettings) => { + colorRangeSettingsPanelPopover.hide(); + this.modelValue = colorRangeSettings; + this.updateColorStyle(); + this.propagateChange(this.modelValue); + }); + } + } + + private updateColorStyle() { + if (!this.disabled && this.modelValue) { + let colors: string[] = []; + if (this.modelValue.length) { + const rangeColors = this.modelValue.slice(0, Math.min(3, this.modelValue.length)).map(r => r.color); + colors = colors.concat(rangeColors); + } + if (colors.length === 1) { + this.colorStyle = {backgroundColor: colors[0]}; + } else { + const gradientValues: string[] = []; + const step = 100 / colors.length; + for (let i = 0; i < colors.length; i++) { + gradientValues.push(`${colors[i]} ${step*i}%`); + gradientValues.push(`${colors[i]} ${step*(i+1)}%`); + } + this.colorStyle = {background: `linear-gradient(90deg, ${gradientValues.join(', ')})`}; + } + } else { + this.colorStyle = {}; + } + } + +} diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/settings/common/color-settings-panel.component.html b/ui-ngx/src/app/modules/home/components/widget/lib/settings/common/color-settings-panel.component.html index 8712322d2c..1864e781dd 100644 --- a/ui-ngx/src/app/modules/home/components/widget/lib/settings/common/color-settings-panel.component.html +++ b/ui-ngx/src/app/modules/home/components/widget/lib/settings/common/color-settings-panel.component.html @@ -34,7 +34,11 @@
- + +
@@ -72,43 +76,6 @@
- -
-
widgets.color.value-range
-
-
-
-
-
widgets.color.from
- - - -
widgets.color.to
- - - - - -
- -
-
-
- -
-
this.colorRangeControl(r))), + rangeList: [this.colorSettings?.rangeList, []], colorFunction: [this.colorSettings?.colorFunction, []] } ); @@ -76,51 +76,15 @@ export class ColorSettingsPanelComponent extends PageComponent implements OnInit }); } - private colorRangeControl(range: ColorRange): AbstractControl { - return this.fb.group({ - from: [range?.from, []], - to: [range?.to, []], - color: [range?.color, []] - }); - } - - get rangeListFormArray(): UntypedFormArray { - return this.colorSettingsFormGroup.get('rangeList') as UntypedFormArray; - } - - get rangeListFormGroups(): FormGroup[] { - return this.rangeListFormArray.controls as FormGroup[]; - } - - trackByRange(index: number, rangeControl: AbstractControl): any { - return rangeControl; - } - - removeRange(index: number) { - this.rangeListFormArray.removeAt(index); - this.colorSettingsFormGroup.markAsDirty(); - setTimeout(() => {this.popover?.updatePosition();}, 0); - } - - addRange() { - const newRange: ColorRange = { - color: 'rgba(0,0,0,0.87)' - }; - this.rangeListFormArray.push(this.colorRangeControl(newRange)); - this.colorSettingsFormGroup.markAsDirty(); - setTimeout(() => {this.popover?.updatePosition();}, 0); - } - copyColorSettings(comp: ColorSettingsComponent) { const sourceSettings = deepClone(comp.modelValue); this.colorSettings = sourceSettings; this.colorSettingsFormGroup.patchValue({ type: this.colorSettings.type, color: this.colorSettings.color, - colorFunction: this.colorSettings.colorFunction + colorFunction: this.colorSettings.colorFunction, + rangeList: this.colorSettings.rangeList || [] }, {emitEvent: false}); - this.colorSettingsFormGroup.setControl('rangeList', - this.fb.array((this.colorSettings.rangeList || []).map(r => this.colorRangeControl(r))), {emitEvent: false}); this.colorSettingsFormGroup.markAsDirty(); } diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/settings/common/font-settings-panel.component.html b/ui-ngx/src/app/modules/home/components/widget/lib/settings/common/font-settings-panel.component.html index 44163fae26..c5687be400 100644 --- a/ui-ngx/src/app/modules/home/components/widget/lib/settings/common/font-settings-panel.component.html +++ b/ui-ngx/src/app/modules/home/components/widget/lib/settings/common/font-settings-panel.component.html @@ -73,7 +73,7 @@
-
+
widgets.widget-font.line-height
diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/settings/common/image-cards-select.component.html b/ui-ngx/src/app/modules/home/components/widget/lib/settings/common/image-cards-select.component.html index 52bd5907bd..35d7157fb4 100644 --- a/ui-ngx/src/app/modules/home/components/widget/lib/settings/common/image-cards-select.component.html +++ b/ui-ngx/src/app/modules/home/components/widget/lib/settings/common/image-cards-select.component.html @@ -33,7 +33,7 @@
{{ option.name }}
- +
diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/settings/common/image-cards-select.component.scss b/ui-ngx/src/app/modules/home/components/widget/lib/settings/common/image-cards-select.component.scss index 37c06ed239..0cda7679e5 100644 --- a/ui-ngx/src/app/modules/home/components/widget/lib/settings/common/image-cards-select.component.scss +++ b/ui-ngx/src/app/modules/home/components/widget/lib/settings/common/image-cards-select.component.scss @@ -95,6 +95,11 @@ min-height: 0; display: flex; justify-content: center; + + .tb-image-cards-option-image { + max-width: 100%; + max-height: 100%; + } } &.selected { .tb-image-cards-option-background { diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/settings/common/image-cards-select.component.ts b/ui-ngx/src/app/modules/home/components/widget/lib/settings/common/image-cards-select.component.ts index d75c4a5fc9..4f11a51223 100644 --- a/ui-ngx/src/app/modules/home/components/widget/lib/settings/common/image-cards-select.component.ts +++ b/ui-ngx/src/app/modules/home/components/widget/lib/settings/common/image-cards-select.component.ts @@ -32,11 +32,12 @@ import { BehaviorSubject, combineLatest, Observable, Subject } from 'rxjs'; import { map, share, startWith, takeUntil } from 'rxjs/operators'; import { BreakpointObserver } from '@angular/cdk/layout'; import { MediaBreakpoints } from '@shared/models/constants'; +import { SafeUrl } from '@angular/platform-browser'; export interface ImageCardsSelectOption { name: string; value: any; - image: string; + image: string | SafeUrl; } @Directive( @@ -49,7 +50,7 @@ export class ImageCardsSelectOptionDirective { @Input() value: any; - @Input() image: string; + @Input() image: string | SafeUrl; get viewValue(): string { return (this._element?.nativeElement.textContent || '').trim(); diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/settings/common/widget-settings-common.module.ts b/ui-ngx/src/app/modules/home/components/widget/lib/settings/common/widget-settings-common.module.ts index 4018549863..7c2022c5d4 100644 --- a/ui-ngx/src/app/modules/home/components/widget/lib/settings/common/widget-settings-common.module.ts +++ b/ui-ngx/src/app/modules/home/components/widget/lib/settings/common/widget-settings-common.module.ts @@ -45,7 +45,12 @@ import { } from '@home/components/widget/lib/settings/common/background-settings-panel.component'; import { CountWidgetSettingsComponent -} from "@home/components/widget/lib/settings/common/count-widget-settings.component"; +} from '@home/components/widget/lib/settings/common/count-widget-settings.component'; +import { ColorRangeListComponent } from '@home/components/widget/lib/settings/common/color-range-list.component'; +import { ColorRangePanelComponent } from '@home/components/widget/lib/settings/common/color-range-panel.component'; +import { + ColorRangeSettingsComponent, ColorRangeSettingsComponentService +} from '@home/components/widget/lib/settings/common/color-range-settings.component'; @NgModule({ declarations: [ @@ -63,7 +68,10 @@ import { ValueSourceComponent, LegendConfigComponent, WidgetFontComponent, - CountWidgetSettingsComponent + CountWidgetSettingsComponent, + ColorRangeListComponent, + ColorRangePanelComponent, + ColorRangeSettingsComponent ], imports: [ CommonModule, @@ -85,10 +93,14 @@ import { ValueSourceComponent, LegendConfigComponent, WidgetFontComponent, - CountWidgetSettingsComponent + CountWidgetSettingsComponent, + ColorRangeListComponent, + ColorRangePanelComponent, + ColorRangeSettingsComponent ], providers: [ - ColorSettingsComponentService + ColorSettingsComponentService, + ColorRangeSettingsComponentService ] }) export class WidgetSettingsCommonModule { diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/settings/gauge/analogue-compass-widget-settings.component.html b/ui-ngx/src/app/modules/home/components/widget/lib/settings/gauge/analogue-compass-widget-settings.component.html index bbb7874523..96c16c0359 100644 --- a/ui-ngx/src/app/modules/home/components/widget/lib/settings/gauge/analogue-compass-widget-settings.component.html +++ b/ui-ngx/src/app/modules/home/components/widget/lib/settings/gauge/analogue-compass-widget-settings.component.html @@ -15,153 +15,127 @@ limitations under the License. --> -
-
- widgets.gauge.ticks-settings - - widgets.gauge.major-ticks-names - - - {{tickName}} - cancel - - - - - - -
- - widgets.gauge.minor-ticks-count - - - - -
- - {{ 'widgets.gauge.show-stroke-ticks' | translate }} - -
- widgets.gauge.major-ticks-font - -
-
-
- widgets.gauge.plate-settings - - - - {{ 'widgets.gauge.show-plate-border' | translate }} - -
- + +
+
widgets.gauge.ticks-settings
+
+
widgets.gauge.labels
+
+ + +
+
+
+
widgets.gauge.label-style
+
+ + + + +
+
+ +
+
widgets.gauge.major-ticks
+ - - widgets.gauge.border-width - - -
-
-
- widgets.gauge.needle-settings - - widgets.gauge.needle-circle-size - - -
- +
+
+
widgets.gauge.minor-ticks
+
+ + + + + +
+
+ +
+ + {{ 'widgets.gauge.show-stroke-ticks' | translate }} + +
+ + +
+
widgets.gauge.plate-settings
+
+
widgets.gauge.plate-color
+ - +
+
+ + {{ 'widgets.gauge.show-plate-border' | translate }} + +
+ + + + + +
+
+
+ +
+
widgets.gauge.needle-settings
+
+
widgets.gauge.needle-circle
+
+ + + + + +
+
+
+
widgets.gauge.needle-color
+ - - -
- widgets.gauge.animation-settings +
+
+ +
- {{ 'widgets.gauge.enable-animation' | translate }} - + widget-config.advanced-settings -
- - widgets.gauge.animation-duration - - - - widgets.gauge.animation-rule - - - {{ 'widgets.gauge.animation-linear' | translate }} - - - {{ 'widgets.gauge.animation-quad' | translate }} - - - {{ 'widgets.gauge.animation-quint' | translate }} - - - {{ 'widgets.gauge.animation-cycle' | translate }} - - - {{ 'widgets.gauge.animation-bounce' | translate }} - - - {{ 'widgets.gauge.animation-elastic' | translate }} - - - {{ 'widgets.gauge.animation-dequad' | translate }} - - - {{ 'widgets.gauge.animation-dequint' | translate }} - - - {{ 'widgets.gauge.animation-decycle' | translate }} - - - {{ 'widgets.gauge.animation-debounce' | translate }} - - - {{ 'widgets.gauge.animation-delastic' | translate }} - - - - - widgets.gauge.animation-target +
+
widgets.gauge.animation-target
+ {{ 'widgets.gauge.animation-target-needle' | translate }} @@ -171,8 +145,53 @@ -
+
+
+
widgets.gauge.animation-duration-rule
+
+ + + + + + + {{ 'widgets.gauge.animation-linear' | translate }} + + + {{ 'widgets.gauge.animation-quad' | translate }} + + + {{ 'widgets.gauge.animation-quint' | translate }} + + + {{ 'widgets.gauge.animation-cycle' | translate }} + + + {{ 'widgets.gauge.animation-bounce' | translate }} + + + {{ 'widgets.gauge.animation-elastic' | translate }} + + + {{ 'widgets.gauge.animation-dequad' | translate }} + + + {{ 'widgets.gauge.animation-dequint' | translate }} + + + {{ 'widgets.gauge.animation-decycle' | translate }} + + + {{ 'widgets.gauge.animation-debounce' | translate }} + + + {{ 'widgets.gauge.animation-delastic' | translate }} + + + +
+
- - + + diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/settings/gauge/analogue-compass-widget-settings.component.ts b/ui-ngx/src/app/modules/home/components/widget/lib/settings/gauge/analogue-compass-widget-settings.component.ts index 5a2a2b2678..6ae485c49b 100644 --- a/ui-ngx/src/app/modules/home/components/widget/lib/settings/gauge/analogue-compass-widget-settings.component.ts +++ b/ui-ngx/src/app/modules/home/components/widget/lib/settings/gauge/analogue-compass-widget-settings.component.ts @@ -19,9 +19,7 @@ import { UntypedFormBuilder, UntypedFormGroup, Validators } from '@angular/forms import { Store } from '@ngrx/store'; import { AppState } from '@core/core.state'; import { Component } from '@angular/core'; -import { MatChipInputEvent } from '@angular/material/chips'; import { COMMA, ENTER, SEMICOLON } from '@angular/cdk/keycodes'; -import { CdkDragDrop, moveItemInArray } from '@angular/cdk/drag-drop'; @Component({ selector: 'tb-analogue-compass-widget-settings', @@ -81,6 +79,7 @@ export class AnalogueCompassWidgetSettingsComponent extends WidgetSettingsCompon colorMinorTicks: [settings.colorMinorTicks, []], showStrokeTicks: [settings.showStrokeTicks, []], majorTickFont: [settings.majorTickFont, []], + majorTickColor: [settings.majorTickFont.color, []], // Plate settings colorPlate: [settings.colorPlate, []], @@ -131,41 +130,8 @@ export class AnalogueCompassWidgetSettingsComponent extends WidgetSettingsCompon this.analogueCompassWidgetSettingsForm.get('animationTarget').updateValueAndValidity({emitEvent}); } - majorTicksNamesList(): string[] { - return this.analogueCompassWidgetSettingsForm.get('majorTicks').value; - } - - removeMajorTickName(tickName: string): void { - const tickNames: string[] = this.analogueCompassWidgetSettingsForm.get('majorTicks').value; - const index = tickNames.indexOf(tickName); - if (index >= 0) { - tickNames.splice(index, 1); - this.analogueCompassWidgetSettingsForm.get('majorTicks').setValue(tickNames); - this.analogueCompassWidgetSettingsForm.get('majorTicks').markAsDirty(); - } - } - - addMajorTickName(event: MatChipInputEvent): void { - const input = event.chipInput.inputElement; - const value = event.value; - - const tickNames: string[] = this.analogueCompassWidgetSettingsForm.get('majorTicks').value; - - if ((value || '').trim()) { - tickNames.push(value.trim()); - this.analogueCompassWidgetSettingsForm.get('majorTicks').setValue(tickNames); - this.analogueCompassWidgetSettingsForm.get('majorTicks').markAsDirty(); - } - - if (input) { - input.value = ''; - } - } - - majorTickNameDrop(event: CdkDragDrop): void { - const tickNames: string[] = this.analogueCompassWidgetSettingsForm.get('majorTicks').value; - moveItemInArray(tickNames, event.previousIndex, event.currentIndex); - this.analogueCompassWidgetSettingsForm.get('majorTicks').setValue(tickNames); - this.analogueCompassWidgetSettingsForm.get('majorTicks').markAsDirty(); + protected prepareOutputSettings(settings) { + settings.majorTickFont.color = this.analogueCompassWidgetSettingsForm.get('majorTickColor').value; + return settings; } } diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/settings/gauge/analogue-gauge-widget-settings.component.html b/ui-ngx/src/app/modules/home/components/widget/lib/settings/gauge/analogue-gauge-widget-settings.component.html index c2264d7aca..7769dab6a3 100644 --- a/ui-ngx/src/app/modules/home/components/widget/lib/settings/gauge/analogue-gauge-widget-settings.component.html +++ b/ui-ngx/src/app/modules/home/components/widget/lib/settings/gauge/analogue-gauge-widget-settings.component.html @@ -15,7 +15,7 @@ limitations under the License. --> -
+ @@ -24,330 +24,382 @@ - - -
- widgets.gauge.ticks-settings -
- - widgets.gauge.min-value - - - - widgets.gauge.max-value - - -
-
- - widgets.gauge.major-ticks-count - - - - -
-
- - widgets.gauge.minor-ticks-count - - - - -
-
- widgets.gauge.tick-numbers-font - -
-
-
- widgets.gauge.unit-title-settings - - - - - {{ 'widgets.gauge.show-unit-title' | translate }} - - - - widget-config.advanced-settings - - - -
- - widgets.gauge.unit-title - - -
- widgets.gauge.title-font - -
-
-
-
-
-
- widgets.gauge.units-settings -
- widgets.gauge.units-font - -
-
-
- widgets.gauge.value-box-settings + +
+
widgets.gauge.ticks-settings
+
+
widgets.gauge.ticks
+
+
widgets.gauge.min-value-short
+ + + +
widgets.gauge.max-value-short
+ + + + + + + +
+
+ +
+
widgets.gauge.major-ticks-count
+
+ + + + + +
+
+ +
+
widgets.gauge.minor-ticks-count
+
+ + + + + +
+
+
+ +
+
widgets.gauge.units-settings
+
+ + {{ 'widgets.gauge.units-title' | translate }} + +
+ + + + + + + +
+
+ +
+
widget-config.units-short
+
+ + + + +
+
+
+ +
- - {{ 'widgets.gauge.show-value-box' | translate }} + {{ 'widgets.gauge.value-box' | translate }} - + widget-config.advanced-settings -
- - widgets.gauge.value-int - +
+
widgets.gauge.value-int
+ + -
- widgets.gauge.value-font - -
-
- +
+
+
widgets.gauge.value-text
+
+
widgets.gauge.value-text
+
+ + + + +
+
+
+
widgets.gauge.value-text-shadow
+ - +
+
+
+
widgets.gauge.value-box
+
+
widgets.gauge.rect-stroke-color-start
+ + +
+ +
+
widgets.gauge.rect-stroke-color-end
+ -
-
- +
+ +
+
widgets.gauge.background-color
+ - +
+ +
+
widgets.gauge.shadow-color
+ -
- + + - -
- widgets.gauge.plate-settings - - - - {{ 'widgets.gauge.show-plate-border' | translate }} - -
-
- widgets.gauge.needle-settings -
- + + +
+
widgets.gauge.plate-settings
+
+
widgets.gauge.plate-color
+ - +
+
+ + {{ 'widgets.gauge.show-plate-border' | translate }} + +
+
+ +
+
widgets.gauge.needle-settings
+
+
widgets.gauge.needle-color-start
+ -
-
- + + +
+
widgets.gauge.needle-color-end
+ - +
+ +
+
widgets.gauge.needle-color-shadow-up
+ -
-
-
- widgets.gauge.highlights-settings - - widgets.gauge.highlights-width - - -
- widgets.gauge.highlights -
-
-
- - -
-
-
- widgets.gauge.no-highlights -
-
- -
+
+ +
+
widgets.gauge.needle-color-shadow-down
+ + +
+ + +
+
widgets.gauge.scale-settings
+
+
widgets.gauge.scale
+
+ + + + +
-
-
-
- widgets.gauge.animation-settings + + + +
- {{ 'widgets.gauge.enable-animation' | translate }} - + widget-config.advanced-settings -
- - widgets.gauge.animation-duration - - - - widgets.gauge.animation-rule - - - {{ 'widgets.gauge.animation-linear' | translate }} - - - {{ 'widgets.gauge.animation-quad' | translate }} - - - {{ 'widgets.gauge.animation-quint' | translate }} - - - {{ 'widgets.gauge.animation-cycle' | translate }} - - - {{ 'widgets.gauge.animation-bounce' | translate }} - - - {{ 'widgets.gauge.animation-elastic' | translate }} - - - {{ 'widgets.gauge.animation-dequad' | translate }} - - - {{ 'widgets.gauge.animation-dequint' | translate }} - - - {{ 'widgets.gauge.animation-decycle' | translate }} - - - {{ 'widgets.gauge.animation-debounce' | translate }} - - - {{ 'widgets.gauge.animation-delastic' | translate }} - - - -
+
+
widgets.gauge.animation-duration-rule
+
+ + + + + + + {{ 'widgets.gauge.animation-linear' | translate }} + + + {{ 'widgets.gauge.animation-quad' | translate }} + + + {{ 'widgets.gauge.animation-quint' | translate }} + + + {{ 'widgets.gauge.animation-cycle' | translate }} + + + {{ 'widgets.gauge.animation-bounce' | translate }} + + + {{ 'widgets.gauge.animation-elastic' | translate }} + + + {{ 'widgets.gauge.animation-dequad' | translate }} + + + {{ 'widgets.gauge.animation-dequint' | translate }} + + + {{ 'widgets.gauge.animation-decycle' | translate }} + + + {{ 'widgets.gauge.animation-debounce' | translate }} + + + {{ 'widgets.gauge.animation-delastic' | translate }} + + + +
+
-
- + + -
- widgets.gauge.radial-gauge-settings -
- - widgets.gauge.start-ticks-angle - +
+
widgets.gauge.radial-gauge-settings
+
+
widgets.gauge.start-ticks-angle
+ + + +
+
+
widgets.gauge.ticks-angle
+ + - - widgets.gauge.ticks-angle - +
+
+
widgets.gauge.needle-circle-size
+ + -
- - widgets.gauge.needle-circle-size - - -
+ + + +
-
- widgets.gauge.linear-gauge-settings -
- - widgets.gauge.bar-stroke-width - - - - -
-
- +
+
widgets.gauge.linear-gauge-settings
+
+
widgets.gauge.bar-stroke
+
+ + + + + +
+
+ +
+
widgets.gauge.bar-background-color
+ - +
+
+
widgets.gauge.bar-background-color-end
+ -
-
- + + +
+
widgets.gauge.progress-bar-color-start
+ - +
+
+
widgets.gauge.progress-bar-color-end
+ -
-
+ + + + +
+ + +
+
{{ 'widgets.gauge.arrow-and-scale-color' | translate }}
+ + +
diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/settings/gauge/analogue-gauge-widget-settings.component.ts b/ui-ngx/src/app/modules/home/components/widget/lib/settings/gauge/analogue-gauge-widget-settings.component.ts index 07f2be69bd..3257987f4a 100644 --- a/ui-ngx/src/app/modules/home/components/widget/lib/settings/gauge/analogue-gauge-widget-settings.component.ts +++ b/ui-ngx/src/app/modules/home/components/widget/lib/settings/gauge/analogue-gauge-widget-settings.component.ts @@ -15,11 +15,9 @@ /// import { WidgetSettings, WidgetSettingsComponent } from '@shared/models/widget.models'; -import { AbstractControl, UntypedFormArray, UntypedFormBuilder, UntypedFormGroup, Validators } from '@angular/forms'; +import { UntypedFormBuilder, UntypedFormGroup, Validators } from '@angular/forms'; import { Store } from '@ngrx/store'; import { AppState } from '@core/core.state'; -import { GaugeHighlight } from '@home/components/widget/lib/settings/gauge/gauge-highlight.component'; -import { CdkDragDrop } from '@angular/cdk/drag-drop'; export class AnalogueGaugeWidgetSettingsComponent extends WidgetSettingsComponent { @@ -119,19 +117,24 @@ export class AnalogueGaugeWidgetSettingsComponent extends WidgetSettingsComponen minorTicks: [settings.majorTicksCount, [Validators.min(0)]], colorMinorTicks: [settings.colorMinorTicks, []], numbersFont: [settings.numbersFont, []], + numbersColor: [settings.numbersFont.color, []], // Unit title settings showUnitTitle: [settings.showUnitTitle, []], unitTitle: [settings.unitTitle, []], titleFont: [settings.titleFont, []], + titleColor: [settings.titleFont.color, []], // Units settings unitsFont: [settings.unitsFont, []], + unitsColor: [settings.unitsFont.color, []], // Value box settings valueBox: [settings.valueBox, []], valueInt: [settings.valueInt, [Validators.min(0)]], valueFont: [settings.valueFont, []], + valueColor: [settings.valueFont.color, []], + valueColorShadow: [settings.valueFont.shadowColor, []], colorValueBoxRect: [settings.colorValueBoxRect, []], colorValueBoxRectEnd: [settings.colorValueBoxRectEnd, []], colorValueBoxBackground: [settings.colorValueBoxBackground, []], @@ -149,7 +152,7 @@ export class AnalogueGaugeWidgetSettingsComponent extends WidgetSettingsComponen // Highlights settings highlightsWidth: [settings.highlightsWidth, [Validators.min(0)]], - highlights: this.prepareHighlightsFormArray(settings.highlights), + highlights: [settings.highlights, []], // Animation settings animation: [settings.animation, []], @@ -170,13 +173,16 @@ export class AnalogueGaugeWidgetSettingsComponent extends WidgetSettingsComponen if (showUnitTitle) { this.analogueGaugeWidgetSettingsForm.get('unitTitle').enable(); this.analogueGaugeWidgetSettingsForm.get('titleFont').enable(); + this.analogueGaugeWidgetSettingsForm.get('titleColor').enable(); } else { this.analogueGaugeWidgetSettingsForm.get('unitTitle').disable(); this.analogueGaugeWidgetSettingsForm.get('titleFont').disable(); + this.analogueGaugeWidgetSettingsForm.get('titleColor').disable(); } if (valueBox) { this.analogueGaugeWidgetSettingsForm.get('valueInt').enable(); this.analogueGaugeWidgetSettingsForm.get('valueFont').enable(); + this.analogueGaugeWidgetSettingsForm.get('valueColor').enable(); this.analogueGaugeWidgetSettingsForm.get('colorValueBoxRect').enable(); this.analogueGaugeWidgetSettingsForm.get('colorValueBoxRectEnd').enable(); this.analogueGaugeWidgetSettingsForm.get('colorValueBoxBackground').enable(); @@ -184,6 +190,7 @@ export class AnalogueGaugeWidgetSettingsComponent extends WidgetSettingsComponen } else { this.analogueGaugeWidgetSettingsForm.get('valueInt').disable(); this.analogueGaugeWidgetSettingsForm.get('valueFont').disable(); + this.analogueGaugeWidgetSettingsForm.get('valueColor').disable(); this.analogueGaugeWidgetSettingsForm.get('colorValueBoxRect').disable(); this.analogueGaugeWidgetSettingsForm.get('colorValueBoxRectEnd').disable(); this.analogueGaugeWidgetSettingsForm.get('colorValueBoxBackground').disable(); @@ -198,8 +205,10 @@ export class AnalogueGaugeWidgetSettingsComponent extends WidgetSettingsComponen } this.analogueGaugeWidgetSettingsForm.get('unitTitle').updateValueAndValidity({emitEvent}); this.analogueGaugeWidgetSettingsForm.get('titleFont').updateValueAndValidity({emitEvent}); + this.analogueGaugeWidgetSettingsForm.get('titleColor').updateValueAndValidity({emitEvent}); this.analogueGaugeWidgetSettingsForm.get('valueInt').updateValueAndValidity({emitEvent}); this.analogueGaugeWidgetSettingsForm.get('valueFont').updateValueAndValidity({emitEvent}); + this.analogueGaugeWidgetSettingsForm.get('valueColor').updateValueAndValidity({emitEvent}); this.analogueGaugeWidgetSettingsForm.get('colorValueBoxRect').updateValueAndValidity({emitEvent}); this.analogueGaugeWidgetSettingsForm.get('colorValueBoxRectEnd').updateValueAndValidity({emitEvent}); this.analogueGaugeWidgetSettingsForm.get('colorValueBoxBackground').updateValueAndValidity({emitEvent}); @@ -208,50 +217,17 @@ export class AnalogueGaugeWidgetSettingsComponent extends WidgetSettingsComponen this.analogueGaugeWidgetSettingsForm.get('animationRule').updateValueAndValidity({emitEvent}); } - protected doUpdateSettings(settingsForm: UntypedFormGroup, settings: WidgetSettings) { - settingsForm.setControl('highlights', this.prepareHighlightsFormArray(settings.highlights), {emitEvent: false}); - } - - private prepareHighlightsFormArray(highlights: GaugeHighlight[] | undefined): UntypedFormArray { - const highlightsControls: Array = []; - if (highlights) { - highlights.forEach((highlight) => { - highlightsControls.push(this.fb.control(highlight, [Validators.required])); - }); + protected prepareOutputSettings(settings) { + settings.numbersFont.color = this.analogueGaugeWidgetSettingsForm.get('numbersColor').value; + if (settings.titleFont) { + settings.titleFont.color = this.analogueGaugeWidgetSettingsForm.get('titleColor').value; } - return this.fb.array(highlightsControls); - } - - highlightsFormArray(): UntypedFormArray { - return this.analogueGaugeWidgetSettingsForm.get('highlights') as UntypedFormArray; - } - - public trackByHighlightControl(index: number, highlightControl: AbstractControl): any { - return highlightControl; - } - - public removeHighlight(index: number) { - (this.analogueGaugeWidgetSettingsForm.get('highlights') as UntypedFormArray).removeAt(index); - } - - public addHighlight() { - const highlight: GaugeHighlight = { - from: null, - to: null, - color: null - }; - const highlightsArray = this.analogueGaugeWidgetSettingsForm.get('highlights') as UntypedFormArray; - const highlightControl = this.fb.control(highlight, [Validators.required]); - (highlightControl as any).new = true; - highlightsArray.push(highlightControl); - this.analogueGaugeWidgetSettingsForm.updateValueAndValidity(); - } - - highlightDrop(event: CdkDragDrop) { - const highlightsArray = this.analogueGaugeWidgetSettingsForm.get('highlights') as UntypedFormArray; - const highlight = highlightsArray.at(event.previousIndex); - highlightsArray.removeAt(event.previousIndex); - highlightsArray.insert(event.currentIndex, highlight); + settings.unitsFont.color = this.analogueGaugeWidgetSettingsForm.get('unitsColor').value; + if (settings.valueFont) { + settings.valueFont.color = this.analogueGaugeWidgetSettingsForm.get('valueColor').value; + settings.valueFont.shadowColor = this.analogueGaugeWidgetSettingsForm.get('valueColorShadow').value; + } + return settings; } } diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/settings/gauge/gauge-highlight.component.html b/ui-ngx/src/app/modules/home/components/widget/lib/settings/gauge/gauge-highlight.component.html deleted file mode 100644 index f92edfcde5..0000000000 --- a/ui-ngx/src/app/modules/home/components/widget/lib/settings/gauge/gauge-highlight.component.html +++ /dev/null @@ -1,61 +0,0 @@ - - - -
- -
-
{{ highlightRangeText() }}
-
-
-
-
-
- - -
-
- -
- -
-
- - widgets.gauge.highlight-from - - - - widgets.gauge.highlight-to - - -
- - -
-
-
-
diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/settings/gauge/gauge-highlight.component.ts b/ui-ngx/src/app/modules/home/components/widget/lib/settings/gauge/gauge-highlight.component.ts deleted file mode 100644 index e5c1ec9fbc..0000000000 --- a/ui-ngx/src/app/modules/home/components/widget/lib/settings/gauge/gauge-highlight.component.ts +++ /dev/null @@ -1,116 +0,0 @@ -/// -/// Copyright © 2016-2023 The Thingsboard Authors -/// -/// Licensed under the Apache License, Version 2.0 (the "License"); -/// you may not use this file except in compliance with the License. -/// You may obtain a copy of the License at -/// -/// http://www.apache.org/licenses/LICENSE-2.0 -/// -/// Unless required by applicable law or agreed to in writing, software -/// distributed under the License is distributed on an "AS IS" BASIS, -/// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -/// See the License for the specific language governing permissions and -/// limitations under the License. -/// - -import { Component, EventEmitter, forwardRef, Input, OnInit, Output } from '@angular/core'; -import { ControlValueAccessor, UntypedFormBuilder, UntypedFormGroup, NG_VALUE_ACCESSOR, Validators } from '@angular/forms'; -import { PageComponent } from '@shared/components/page.component'; -import { Store } from '@ngrx/store'; -import { AppState } from '@core/core.state'; -import { TranslateService } from '@ngx-translate/core'; -import { isNumber } from '@core/utils'; - -export interface GaugeHighlight { - from: number; - to: number; - color: string; -} - -@Component({ - selector: 'tb-gauge-highlight', - templateUrl: './gauge-highlight.component.html', - styleUrls: ['./gauge-highlight.component.scss'], - providers: [ - { - provide: NG_VALUE_ACCESSOR, - useExisting: forwardRef(() => GaugeHighlightComponent), - multi: true - } - ] -}) -export class GaugeHighlightComponent extends PageComponent implements OnInit, ControlValueAccessor { - - @Input() - disabled: boolean; - - @Input() - expanded = false; - - @Output() - removeHighlight = new EventEmitter(); - - private modelValue: GaugeHighlight; - - private propagateChange = null; - - public gaugeHighlightFormGroup: UntypedFormGroup; - - constructor(protected store: Store, - private translate: TranslateService, - private fb: UntypedFormBuilder) { - super(store); - } - - ngOnInit(): void { - this.gaugeHighlightFormGroup = this.fb.group({ - from: [null, []], - to: [null, []], - color: [null, []] - }); - this.gaugeHighlightFormGroup.valueChanges.subscribe(() => { - this.updateModel(); - }); - } - - registerOnChange(fn: any): void { - this.propagateChange = fn; - } - - registerOnTouched(fn: any): void { - } - - setDisabledState(isDisabled: boolean): void { - this.disabled = isDisabled; - if (isDisabled) { - this.gaugeHighlightFormGroup.disable({emitEvent: false}); - } else { - this.gaugeHighlightFormGroup.enable({emitEvent: false}); - } - } - - writeValue(value: GaugeHighlight): void { - this.modelValue = value; - this.gaugeHighlightFormGroup.patchValue( - value, {emitEvent: false} - ); - } - - highlightRangeText(): string { - const value: GaugeHighlight = this.gaugeHighlightFormGroup.value; - const from = isNumber(value.from) ? value.from : 0; - const to = isNumber(value.to) ? value.to : 0; - return `${from} - ${to}`; - } - - private updateModel() { - const value: GaugeHighlight = this.gaugeHighlightFormGroup.value; - this.modelValue = value; - if (this.gaugeHighlightFormGroup.valid) { - this.propagateChange(this.modelValue); - } else { - this.propagateChange(null); - } - } -} diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/settings/indicator/liquid-level-card-widget-settings.component.html b/ui-ngx/src/app/modules/home/components/widget/lib/settings/indicator/liquid-level-card-widget-settings.component.html new file mode 100644 index 0000000000..59119c1fb8 --- /dev/null +++ b/ui-ngx/src/app/modules/home/components/widget/lib/settings/indicator/liquid-level-card-widget-settings.component.html @@ -0,0 +1,260 @@ + + +
+
+
+
+
widgets.liquid-level-card.shape
+ + + {{ DataSourceTypeTranslations.get(type) | translate }} + + +
+ + + {{ ShapesTranslationMap.get(shape) | translate }} + + + +
+
widgets.liquid-level-card.shape-attribute-name
+ + +
+
+
widgets.liquid-level-card.shape-by-attribute
+
+
+
+
+
+
+
+
widgets.liquid-level-card.layout
+ + + {{ LevelCardLayoutTranslationMap.get(layout) | translate }} + + +
+
+
widgets.liquid-level-card.units
+
+
widgets.liquid-level-card.datasource-units
+ + +
+
+
widgets.liquid-level-card.widget-units
+
+ + + + {{ DataSourceTypeTranslations.get(type) | translate }} + + + + + + + + + +
+
+
+
widgets.liquid-level-card.total-volume
+
+ + + + {{ DataSourceTypeTranslations.get(type) | translate }} + + + + + + + warning + + + + + + + + +
+
+
+
+
widgets.liquid-level-card.color-and-font
+
+
widgets.liquid-level-card.tank-color
+ + +
+
+
widgets.liquid-level-card.liquid-color
+ + +
+
+
{{ 'widgets.background.background' | translate }}
+ + +
+
+
widgets.liquid-level-card.value
+
+ + + + +
+
+
+
widgets.liquid-level-card.total-volume
+
+ + + + +
+
+
+ + {{ 'widgets.liquid-level-card.background-overlay' | translate }} + + + +
+
+
+ + + + + {{ 'widget-config.tooltip' | translate }} + + + + +
+ + {{ 'widgets.liquid-level-card.level' | translate }} + +
+ + + + +
widget-config.decimals-suffix
+
+ + + + +
+
+
+ + {{ 'widgets.value-card.date' | translate }} + +
+ + + + + +
+
+
+
widgets.liquid-level-card.tooltip-background
+ + +
+
+
widgets.liquid-level-card.background-blur
+ + +
px
+
+
+
+
+
+
+
diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/settings/indicator/liquid-level-card-widget-settings.component.ts b/ui-ngx/src/app/modules/home/components/widget/lib/settings/indicator/liquid-level-card-widget-settings.component.ts new file mode 100644 index 0000000000..14f906d453 --- /dev/null +++ b/ui-ngx/src/app/modules/home/components/widget/lib/settings/indicator/liquid-level-card-widget-settings.component.ts @@ -0,0 +1,306 @@ +/// +/// Copyright © 2016-2023 The Thingsboard Authors +/// +/// Licensed under the Apache License, Version 2.0 (the "License"); +/// you may not use this file except in compliance with the License. +/// You may obtain a copy of the License at +/// +/// http://www.apache.org/licenses/LICENSE-2.0 +/// +/// Unless required by applicable law or agreed to in writing, software +/// distributed under the License is distributed on an "AS IS" BASIS, +/// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +/// See the License for the specific language governing permissions and +/// limitations under the License. +/// + +import { ChangeDetectorRef, Component, Injector, ViewChild } from '@angular/core'; +import { + DataKey, + Datasource, + DatasourceType, + WidgetSettings, + WidgetSettingsComponent +} from '@shared/models/widget.models'; +import { FormBuilder, FormGroup, Validators } from '@angular/forms'; +import { Store } from '@ngrx/store'; +import { AppState } from '@core/core.state'; +import { formatValue, isDefined } from '@core/utils'; +import { WidgetConfigComponentData } from '@home/models/widget-component.models'; +import { DateFormatProcessor, DateFormatSettings } from '@shared/models/widget-settings.models'; +import { + CapacityUnits, + createShapeLayout, + fetchEntityKeys, + fetchEntityKeysForDevice, + levelCardDefaultSettings, + LevelCardLayout, + levelCardLayoutTranslations, + LiquidWidgetDataSourceType, + LiquidWidgetDataSourceTypeTranslations, + loadSvgShapesMapping, + optionsFilter, + Shapes, + ShapesTranslations, + updatedFormSettingsValidators +} from '@home/components/widget/lib/indicator/liquid-level-widget.models'; +import { UnitsType } from '@shared/models/unit.models'; +import { ImageCardsSelectComponent } from '@home/components/widget/lib/settings/common/image-cards-select.component'; +import { DomSanitizer, SafeUrl } from '@angular/platform-browser'; +import { Observable, of, ReplaySubject } from 'rxjs'; +import { map, share, tap } from 'rxjs/operators'; +import { ResourcesService } from '@core/services/resources.service'; +import { DataKeyType } from '@shared/models/telemetry/telemetry.models'; +import { UtilsService } from '@core/services/utils.service'; +import { EntityService } from '@core/http/entity.service'; + +@Component({ + selector: 'liquid-level-card-widget-settings', + templateUrl: './liquid-level-card-widget-settings.component.html', + styleUrls: [] +}) +export class LiquidLevelCardWidgetSettingsComponent extends WidgetSettingsComponent { + + @ViewChild('layoutsImageCardsSelect', { static: false }) layoutsImageCardsSelect: ImageCardsSelectComponent; + + @ViewChild('shapesImageCardsSelect', { static: false }) shapesImageCardsSelect: ImageCardsSelectComponent; + + public get volumeInput(): boolean { + const datasourceUnits = this.levelCardWidgetSettingsForm.get('datasourceUnits').value; + const layout: LevelCardLayout = this.levelCardWidgetSettingsForm.get('layout').value; + + if (layout === LevelCardLayout.absolute) { + return true; + } + return datasourceUnits !== CapacityUnits.percent; + } + + private get datasource(): Datasource { + if (this.widgetConfig.config.datasources && this.widgetConfig.config.datasources) { + return this.widgetConfig.config.datasources[0]; + } else { + return null; + } + } + + LevelCardLayout = LevelCardLayout; + LevelCardLayouts = Object.values(LevelCardLayout) as LevelCardLayout[]; + LevelCardLayoutTranslationMap = levelCardLayoutTranslations; + + DataSourceType = LiquidWidgetDataSourceType; + DataSourceTypes = Object.values(LiquidWidgetDataSourceType) as LiquidWidgetDataSourceType[]; + DataSourceTypeTranslations = LiquidWidgetDataSourceTypeTranslations; + + shapes = Object.values(Shapes) as Shapes[]; + shapesImageMap: Map = new Map(); + ShapesTranslationMap = ShapesTranslations; + + unitsType = UnitsType; + + levelCardWidgetSettingsForm: FormGroup; + + valuePreviewFn = this._valuePreviewFn.bind(this); + + tooltipValuePreviewFn = this._tooltipValuePreviewFn.bind(this); + + totalVolumeValuePreviewFn = this._totalVolumeValuePreviewFn.bind(this); + + datePreviewFn = this._datePreviewFn.bind(this); + + private keySearchText: string; + private latestKeySearchTextResult: Array; + + private functionTypeKeys: Array = []; + + private lastKeysId: string; + private lastFetchedKeys: Array; + + constructor(protected store: Store, + private $injector: Injector, + private fb: FormBuilder, + private resourcesService: ResourcesService, + private sanitizer: DomSanitizer, + private cd: ChangeDetectorRef, + private utils: UtilsService, + private entityService: EntityService) { + super(store); + } + + protected settingsForm(): FormGroup { + return this.levelCardWidgetSettingsForm; + } + + protected onWidgetConfigSet(widgetConfig: WidgetConfigComponentData) { + this.createSvgShapesMapping(); + + for (const type of this.utils.getPredefinedFunctionsList()) { + this.functionTypeKeys.push({ + name: type, + type: DataKeyType.function + }); + } + } + + protected defaultSettings(): WidgetSettings { + return levelCardDefaultSettings; + } + + protected onSettingsSet(settings: WidgetSettings) { + this.levelCardWidgetSettingsForm = this.fb.group({ + tankSelectionType: [settings.tankSelectionType, []], + selectedShape: [settings.selectedShape, [Validators.required]], + shapeAttributeName: [settings.shapeAttributeName, [Validators.required]], + tankColor: [settings.tankColor, []], + datasourceUnits: [settings.datasourceUnits, [Validators.required]], + + layout: [settings.layout, []], + + volumeSource: [settings.volumeSource, []], + volumeConstant: [settings.volumeConstant, [Validators.required, Validators.min(0.1)]], + volumeAttributeName: [settings.volumeAttributeName, [Validators.required]], + volumeUnits: [settings.volumeUnits, [Validators.required]], + volumeFont: [settings.volumeFont, []], + volumeColor: [settings.volumeColor, []], + valueFont: [settings.valueFont, []], + valueColor: [settings.valueColor, []], + units: [settings.units, [Validators.required]], + widgetUnitsSource: [settings.widgetUnitsSource, [Validators.required]], + widgetUnitsAttributeName: [settings.widgetUnitsAttributeName, [Validators.required]], + showBackgroundOverlay: [settings.showBackgroundOverlay, []], + backgroundOverlayColor: [settings.backgroundOverlayColor, []], + + liquidColor: [settings.liquidColor, []], + background: [settings.background], + + showTooltip: [settings.showTooltip, []], + showTooltipLevel: [settings.showTooltipLevel, []], + tooltipUnits: [settings.tooltipUnits, []], + tooltipLevelDecimals: [settings.tooltipLevelDecimals, []], + tooltipLevelFont: [settings.tooltipLevelFont, []], + tooltipLevelColor: [settings.tooltipLevelColor, []], + showTooltipDate: [settings.showTooltipDate, []], + tooltipDateFormat: [settings.tooltipDateFormat, []], + tooltipDateFont: [settings.tooltipDateFont, []], + tooltipDateColor: [settings.tooltipDateColor, []], + tooltipBackgroundColor: [settings.tooltipBackgroundColor, []], + tooltipBackgroundBlur: [settings.tooltipBackgroundBlur, []], + }); + + this.levelCardWidgetSettingsForm.get('selectedShape').valueChanges.subscribe(() => { + this.cd.detectChanges(); + this.layoutsImageCardsSelect?.imageCardsSelectOptions.notifyOnChanges(); + }); + } + + protected validatorTriggers(): string[] { + return [ + 'showBackgroundOverlay', 'showTooltip', 'showTooltipLevel', 'tankSelectionType', 'datasourceUnits', + 'showTooltipDate', 'layout', 'volumeSource', 'widgetUnitsSource' + ]; + } + + protected updateValidators(emitEvent: boolean, trigger?: string) { + updatedFormSettingsValidators(this.levelCardWidgetSettingsForm); + + if (this.levelCardWidgetSettingsForm.get('showBackgroundOverlay').value) { + this.levelCardWidgetSettingsForm.get('backgroundOverlayColor').enable({emitEvent: false}); + } else { + this.levelCardWidgetSettingsForm.get('backgroundOverlayColor').disable({emitEvent: false}); + } + } + + private createSvgShapesMapping(): void { + loadSvgShapesMapping(this.resourcesService).subscribe(shapeMap => { + this.shapesImageMap = shapeMap; + + this.cd.detectChanges(); + this.layoutsImageCardsSelect?.imageCardsSelectOptions.notifyOnChanges(); + this.shapesImageCardsSelect?.imageCardsSelectOptions.notifyOnChanges(); + }); + } + + createShape(svg: string, layout: LevelCardLayout): SafeUrl { + return createShapeLayout(svg, layout, this.sanitizer); + } + + private _valuePreviewFn(): string { + const units: string = this.widgetConfig.config.units; + const decimals: number = this.widgetConfig.config.decimals; + return formatValue(32, decimals, units, true); + } + + private _tooltipValuePreviewFn() { + const units: string = this.levelCardWidgetSettingsForm.get('tooltipUnits').value; + const decimals: number = this.levelCardWidgetSettingsForm.get('tooltipLevelDecimals').value; + return formatValue(32, decimals, units, true); + } + + private _totalVolumeValuePreviewFn() { + const value = this.levelCardWidgetSettingsForm.get('volumeConstant').value; + const datasourceUnits = this.levelCardWidgetSettingsForm.get('datasourceUnits').value; + const decimals: number = this.widgetConfig.config.decimals; + let units: string = this.widgetConfig.config.units; + + if (datasourceUnits !== CapacityUnits.percent) { + units = datasourceUnits; + } + + return formatValue((isDefined(value) ? value : 500), decimals, units, true); + } + + private _datePreviewFn(): string { + const dateFormat: DateFormatSettings = this.levelCardWidgetSettingsForm.get('tooltipDateFormat').value; + const processor = DateFormatProcessor.fromSettings(this.$injector, dateFormat); + processor.update(Date.now()); + return processor.formatted; + } + + public fetchOptions(searchText: string): Observable> { + if (this.keySearchText !== searchText) { + this.keySearchText = searchText; + const dataKeyFilter = optionsFilter(this.keySearchText); + return this.getKeys().pipe( + tap(res => this.lastFetchedKeys !== res ? this.lastFetchedKeys = res : []), + map(name => name?.filter(dataKeyFilter).map(key => key.name)), + tap(res => this.latestKeySearchTextResult = res) + ); + } + return of(this.latestKeySearchTextResult); + } + + private getKeys(): Observable> { + let fetchObservable: Observable>; + if (this.datasource?.type === DatasourceType.function) { + fetchObservable = of(this.functionTypeKeys); + } else if (this.datasource?.type === DatasourceType.entity && this.datasource?.entityAliasId || + this.datasource?.type === DatasourceType.device && this.datasource?.deviceId) { + if (this.datasource?.type === DatasourceType.device) { + if (this.lastKeysId !== this.datasource?.deviceId || !this.lastFetchedKeys) { + this.lastKeysId = this.datasource.deviceId; + fetchObservable = fetchEntityKeysForDevice(this.datasource?.deviceId, [DataKeyType.attribute], + this.entityService); + } else { + fetchObservable = of(this.lastFetchedKeys); + } + } else { + if (this.lastKeysId !== this.datasource?.entityAliasId || !this.lastFetchedKeys) { + this.lastKeysId = this.datasource.entityAliasId; + fetchObservable = fetchEntityKeys(this.datasource?.entityAliasId, [DataKeyType.attribute], + this.entityService, this.aliasController); + } else { + fetchObservable = of(this.lastFetchedKeys); + } + } + } else { + fetchObservable = of([]); + } + return fetchObservable.pipe( + share({ + connector: () => new ReplaySubject(1), + resetOnError: false, + resetOnComplete: false, + resetOnRefCountZero: false + }) + ); + } +} diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/settings/widget-settings.module.ts b/ui-ngx/src/app/modules/home/components/widget/lib/settings/widget-settings.module.ts index 33b4323fdf..2366bd0321 100644 --- a/ui-ngx/src/app/modules/home/components/widget/lib/settings/widget-settings.module.ts +++ b/ui-ngx/src/app/modules/home/components/widget/lib/settings/widget-settings.module.ts @@ -58,7 +58,6 @@ import { import { AlarmsTableKeySettingsComponent } from '@home/components/widget/lib/settings/alarm/alarms-table-key-settings.component'; -import { GaugeHighlightComponent } from '@home/components/widget/lib/settings/gauge/gauge-highlight.component'; import { AnalogueRadialGaugeWidgetSettingsComponent } from '@home/components/widget/lib/settings/gauge/analogue-radial-gauge-widget-settings.component'; @@ -300,6 +299,9 @@ import { import { ProgressBarWidgetSettingsComponent } from '@home/components/widget/lib/settings/cards/progress-bar-widget-settings.component'; +import { + LiquidLevelCardWidgetSettingsComponent +} from '@home/components/widget/lib/settings/indicator/liquid-level-card-widget-settings.component'; @NgModule({ declarations: [ @@ -318,7 +320,6 @@ import { EntitiesTableKeySettingsComponent, AlarmsTableWidgetSettingsComponent, AlarmsTableKeySettingsComponent, - GaugeHighlightComponent, AnalogueRadialGaugeWidgetSettingsComponent, AnalogueLinearGaugeWidgetSettingsComponent, AnalogueCompassWidgetSettingsComponent, @@ -410,7 +411,8 @@ import { WindSpeedDirectionWidgetSettingsComponent, SignalStrengthWidgetSettingsComponent, ValueChartCardWidgetSettingsComponent, - ProgressBarWidgetSettingsComponent + ProgressBarWidgetSettingsComponent, + LiquidLevelCardWidgetSettingsComponent ], imports: [ CommonModule, @@ -434,7 +436,6 @@ import { EntitiesTableKeySettingsComponent, AlarmsTableWidgetSettingsComponent, AlarmsTableKeySettingsComponent, - GaugeHighlightComponent, AnalogueRadialGaugeWidgetSettingsComponent, AnalogueLinearGaugeWidgetSettingsComponent, AnalogueCompassWidgetSettingsComponent, @@ -526,7 +527,8 @@ import { WindSpeedDirectionWidgetSettingsComponent, SignalStrengthWidgetSettingsComponent, ValueChartCardWidgetSettingsComponent, - ProgressBarWidgetSettingsComponent + ProgressBarWidgetSettingsComponent, + LiquidLevelCardWidgetSettingsComponent, ] }) export class WidgetSettingsModule { @@ -607,5 +609,6 @@ export const widgetSettingsComponentsMap: {[key: string]: Type {{descriptionInput.value?.length || 0}}/1024 + + widgets-bundle.order + + diff --git a/ui-ngx/src/app/modules/home/pages/widget/widgets-bundle.component.ts b/ui-ngx/src/app/modules/home/pages/widget/widgets-bundle.component.ts index f7634e5c53..be34b38161 100644 --- a/ui-ngx/src/app/modules/home/pages/widget/widgets-bundle.component.ts +++ b/ui-ngx/src/app/modules/home/pages/widget/widgets-bundle.component.ts @@ -50,7 +50,8 @@ export class WidgetsBundleComponent extends EntityComponent { { title: [entity ? entity.title : '', [Validators.required, Validators.maxLength(255)]], image: [entity ? entity.image : ''], - description: [entity ? entity.description : '', Validators.maxLength(1024)] + description: [entity ? entity.description : '', Validators.maxLength(1024)], + order: [entity ? entity.order : null] } ); } @@ -59,7 +60,8 @@ export class WidgetsBundleComponent extends EntityComponent { this.entityForm.patchValue({ title: entity.title, image: entity.image, - description: entity.description + description: entity.description, + order: entity.order }); } } diff --git a/ui-ngx/src/app/shared/components/dialog/alert-dialog.component.html b/ui-ngx/src/app/shared/components/dialog/alert-dialog.component.html index de56079efd..fb0c93b491 100644 --- a/ui-ngx/src/app/shared/components/dialog/alert-dialog.component.html +++ b/ui-ngx/src/app/shared/components/dialog/alert-dialog.component.html @@ -16,7 +16,12 @@ -->

{{data.title}}

-
+ +
+
+ +
+
diff --git a/ui-ngx/src/app/shared/components/dialog/alert-dialog.component.ts b/ui-ngx/src/app/shared/components/dialog/alert-dialog.component.ts index c29d66b1cc..c7c26bc7a2 100644 --- a/ui-ngx/src/app/shared/components/dialog/alert-dialog.component.ts +++ b/ui-ngx/src/app/shared/components/dialog/alert-dialog.component.ts @@ -21,6 +21,7 @@ export interface AlertDialogData { title: string; message: string; ok: string; + textMode?: boolean; } @Component({ diff --git a/ui-ngx/src/app/shared/components/markdown.component.ts b/ui-ngx/src/app/shared/components/markdown.component.ts index 7936d2f51a..168242da0f 100644 --- a/ui-ngx/src/app/shared/components/markdown.component.ts +++ b/ui-ngx/src/app/shared/components/markdown.component.ts @@ -179,6 +179,7 @@ export class TbMarkdownComponent implements OnChanges { this.error = null; } catch (error) { readyObservable = this.handleError(template, error, styles); + this.cd.detectChanges(); } readyObservable.subscribe(() => { this.ready.emit(); diff --git a/ui-ngx/src/app/shared/components/rule-chain/rule-chain-select.component.scss b/ui-ngx/src/app/shared/components/rule-chain/rule-chain-select.component.scss index c69661ad76..9cbb97cba9 100644 --- a/ui-ngx/src/app/shared/components/rule-chain/rule-chain-select.component.scss +++ b/ui-ngx/src/app/shared/components/rule-chain/rule-chain-select.component.scss @@ -16,7 +16,10 @@ :host { min-width: 52px; width: 100%; - padding: 0 6px; + padding: 0; + .tb-rule-select { + width: 100%; + } .tb-rule-chain-select { display: flex; min-height: 100%; diff --git a/ui-ngx/src/app/shared/components/string-autocomplete.component.html b/ui-ngx/src/app/shared/components/string-autocomplete.component.html new file mode 100644 index 0000000000..4750f71d63 --- /dev/null +++ b/ui-ngx/src/app/shared/components/string-autocomplete.component.html @@ -0,0 +1,51 @@ + + + {{label}} + + + + warning + + + {{errorText}} + + + + + + + diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/settings/gauge/gauge-highlight.component.scss b/ui-ngx/src/app/shared/components/string-autocomplete.component.scss similarity index 56% rename from ui-ngx/src/app/modules/home/components/widget/lib/settings/gauge/gauge-highlight.component.scss rename to ui-ngx/src/app/shared/components/string-autocomplete.component.scss index 8b61fb7e3d..2d96ee0d5e 100644 --- a/ui-ngx/src/app/modules/home/components/widget/lib/settings/gauge/gauge-highlight.component.scss +++ b/ui-ngx/src/app/shared/components/string-autocomplete.component.scss @@ -14,26 +14,29 @@ * limitations under the License. */ :host { - display: block; - .mat-expansion-panel { - box-shadow: none; - &.gauge-highlight { - border: 1px groove rgba(0, 0, 0, .25); - .mat-expansion-panel-header { - padding: 0 24px 0 8px; - &.mat-expanded { - height: 48px; - } - } - } - } -} + mat-form-field { + display: flex; + flex: 1; + max-width: 100%; + box-sizing: border-box; + + .tb-autocomplete.tb-option-input-autocomplete { + .mat-mdc-option { + border-bottom: none; -:host ::ng-deep { - .mat-expansion-panel { - &.gauge-highlight { - .mat-expansion-panel-body { - padding: 0 8px 8px; + .mdc-list-item__primary-text { + flex: 1; + display: flex; + flex-direction: row; + gap: 8px; + + .tb-option { + font-size: 14px; + font-weight: 400; + line-height: 20px; + letter-spacing: 0.2px; + } + } } } } diff --git a/ui-ngx/src/app/shared/components/string-autocomplete.component.ts b/ui-ngx/src/app/shared/components/string-autocomplete.component.ts new file mode 100644 index 0000000000..df17ace6c7 --- /dev/null +++ b/ui-ngx/src/app/shared/components/string-autocomplete.component.ts @@ -0,0 +1,180 @@ +/// +/// Copyright © 2016-2023 The Thingsboard Authors +/// +/// Licensed under the Apache License, Version 2.0 (the "License"); +/// you may not use this file except in compliance with the License. +/// You may obtain a copy of the License at +/// +/// http://www.apache.org/licenses/LICENSE-2.0 +/// +/// Unless required by applicable law or agreed to in writing, software +/// distributed under the License is distributed on an "AS IS" BASIS, +/// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +/// See the License for the specific language governing permissions and +/// limitations under the License. +/// + +import { + Component, + Input, + forwardRef, + OnInit, + ViewChild, + ElementRef +} from '@angular/core'; +import { + ControlValueAccessor, + NG_VALUE_ACCESSOR, + FormControl, + Validators, + FormBuilder +} from '@angular/forms'; +import { Observable, of } from 'rxjs'; +import { tap, map, switchMap, take } from 'rxjs/operators'; +import { TranslateService } from '@ngx-translate/core'; +import { coerceBoolean } from '@shared/decorators/coercion'; +import { MatFormFieldAppearance, SubscriptSizing } from '@angular/material/form-field'; + +@Component({ + selector: 'tb-string-autocomplete', + templateUrl: './string-autocomplete.component.html', + styleUrls: ['./string-autocomplete.component.scss'], + providers: [ + { + provide: NG_VALUE_ACCESSOR, + useExisting: forwardRef(() => StringAutocompleteComponent), + multi: true + } + ] +}) +export class StringAutocompleteComponent implements ControlValueAccessor, OnInit { + + @ViewChild('nameInput', {static: true}) nameInput: ElementRef; + + @Input() + disabled: boolean; + + @Input() + @coerceBoolean() + required = false; + + @Input() + fetchOptionsFn: (searchText?: string) => Observable>; + + @Input() + placeholderText: string = this.translate.instant('widget-config.set'); + + @Input() + subscriptSizing: SubscriptSizing = 'dynamic'; + + @Input() + additionalClass: string | string[] | Record = 'tb-inline-field tb-suffix-show-on-hover'; + + @Input() + appearance: MatFormFieldAppearance = 'outline'; + + @Input() + label: string; + + @Input() + tooltipClass = 'tb-error-tooltip'; + + @Input() + errorText: string; + + @Input() + @coerceBoolean() + showInlineError = false; + + selectionFormControl: FormControl; + + modelValue: string | null; + + filteredOptions$: Observable>; + + searchText = ''; + + private dirty = false; + + private propagateChange = (_val: any) => {}; + + constructor(private fb: FormBuilder, + private translate: TranslateService) { + } + + ngOnInit() { + this.selectionFormControl = this.fb.control('', this.required ? [Validators.required] : []); + this.filteredOptions$ = this.selectionFormControl.valueChanges + .pipe( + tap(value => this.updateView(value)), + map(value => value ? value : ''), + switchMap(value => this.fetchOptionsFn ? this.fetchOptionsFn(value) : of([])) + ); + } + + writeValue(option?: string): void { + this.searchText = ''; + this.modelValue = option ? option : null; + + if (this.fetchOptionsFn) { + this.fetchOptionsFn(option) + .pipe( + map(options => { + if (options) { + const foundOption = options.find(opt => opt === option); + return foundOption ? foundOption : option; + } + + return option; + }), + take(1) + ) + .subscribe(result => { + this.selectionFormControl.patchValue(result, { emitEvent: false }); + this.dirty = true; + }); + } else { + this.selectionFormControl.patchValue(null, { emitEvent: false }); + this.dirty = true; + } + } + + onFocus() { + if (this.dirty) { + this.selectionFormControl.updateValueAndValidity({onlySelf: true, emitEvent: true}); + this.dirty = false; + } + } + + updateView(value: string) { + this.searchText = value ? value : ''; + if (this.modelValue !== value) { + this.modelValue = value; + this.propagateChange(this.modelValue); + } + } + + registerOnChange(fn: any): void { + this.propagateChange = fn; + } + + registerOnTouched(fn: any): void { + } + + setDisabledState(isDisabled: boolean): void { + this.disabled = isDisabled; + if (this.disabled) { + this.selectionFormControl.disable({emitEvent: false}); + } else { + this.selectionFormControl.enable({emitEvent: false}); + } + } + + clear() { + this.selectionFormControl.patchValue(null, {emitEvent: true}); + setTimeout(() => { + this.nameInput.nativeElement.blur(); + this.nameInput.nativeElement.focus(); + }, 0); + } +} diff --git a/ui-ngx/src/app/shared/components/unit-input.component.html b/ui-ngx/src/app/shared/components/unit-input.component.html index c15b232444..b0f3625eb0 100644 --- a/ui-ngx/src/app/shared/components/unit-input.component.html +++ b/ui-ngx/src/app/shared/components/unit-input.component.html @@ -20,13 +20,20 @@ placeholder="{{ 'widget-config.set' | translate }}" (focusin)="onFocus()" [matAutocomplete]="unitsAutocomplete"> - + + warning + >; @@ -73,7 +87,7 @@ export class UnitInputComponent implements ControlValueAccessor, OnInit { } ngOnInit() { - this.unitsFormControl = this.fb.control('', []); + this.unitsFormControl = this.fb.control('', this.required ? [Validators.required] : []); this.filteredUnits = this.unitsFormControl.valueChanges .pipe( tap(value => { @@ -157,11 +171,16 @@ export class UnitInputComponent implements ControlValueAccessor, OnInit { private unitsConstant(): Observable> { if (this.fetchUnits$ === null) { this.fetchUnits$ = getUnits(this.resourcesService).pipe( - map(units => units.map(u => ({ - symbol: u.symbol, - name: this.translate.instant(u.name), - tags: u.tags - }))), + map((units) => { + if (this.tagFilter) { + units = units.filter(u => u.tags.includes(this.tagFilter)); + } + return units.map(u => ({ + symbol: u.symbol, + name: this.translate.instant(u.name), + tags: u.tags + })); + }), shareReplay(1) ); } diff --git a/ui-ngx/src/app/shared/models/unit.models.ts b/ui-ngx/src/app/shared/models/unit.models.ts index 7d9f88a068..408c0b23b9 100644 --- a/ui-ngx/src/app/shared/models/unit.models.ts +++ b/ui-ngx/src/app/shared/models/unit.models.ts @@ -23,6 +23,15 @@ export interface Unit { tags: string[]; } +export enum UnitsType { + capacity = 'capacity' +} + +export enum Units { + percent = '%', + liters = 'L' +} + export const unitBySymbol = (_units: Array, symbol: string): Unit => _units.find(u => u.symbol === symbol); const searchUnitTags = (unit: Unit, searchText: string): boolean => diff --git a/ui-ngx/src/app/shared/models/widget-settings.models.ts b/ui-ngx/src/app/shared/models/widget-settings.models.ts index bd10859e55..165a4369bc 100644 --- a/ui-ngx/src/app/shared/models/widget-settings.models.ts +++ b/ui-ngx/src/app/shared/models/widget-settings.models.ts @@ -401,6 +401,33 @@ export const textStyle = (font?: Font, letterSpacing = 'normal'): ComponentStyle return style; }; +export const inlineTextStyle = (font?: Font, letterSpacing = 'normal'): ComponentStyle => { + const style: ComponentStyle = { + letterSpacing + }; + if (font?.style) { + style['font-style'] = font.style; + } + if (font?.weight) { + style['font-weight'] = font.weight; + } + if (font?.lineHeight) { + style['line-height'] = font.lineHeight; + } + if (font?.size) { + style['font-size'] = (font.size + (font.sizeUnit || 'px')); + } + if (font?.family) { + style['font-family'] = font.family + + (font.family !== 'Roboto' ? ', Roboto' : ''); + } + return style; +}; + +export const cssTextFromInlineStyle = (styleObj: { [key: string]: string | number }): string => Object.entries(styleObj) + .map(([key, value]) => `${key}: ${value}`) + .join('; '); + export const isFontSet = (font: Font): boolean => (!!font && !!font.style && !!font.weight && !!font.size && !!font.family); export const isFontPartiallySet = (font: Font): boolean => (!!font && (!!font.style || !!font.weight || !!font.size || !!font.family)); diff --git a/ui-ngx/src/app/shared/models/widgets-bundle.model.ts b/ui-ngx/src/app/shared/models/widgets-bundle.model.ts index c7eb999221..476c6ee029 100644 --- a/ui-ngx/src/app/shared/models/widgets-bundle.model.ts +++ b/ui-ngx/src/app/shared/models/widgets-bundle.model.ts @@ -24,4 +24,5 @@ export interface WidgetsBundle extends BaseData, ExportableEnti title: string; image: string; description: string; + order: number; } diff --git a/ui-ngx/src/app/shared/shared.module.ts b/ui-ngx/src/app/shared/shared.module.ts index 2211f2e0e1..042e453fe1 100644 --- a/ui-ngx/src/app/shared/shared.module.ts +++ b/ui-ngx/src/app/shared/shared.module.ts @@ -199,6 +199,7 @@ import { MaterialIconsComponent } from '@shared/components/material-icons.compon import { ColorPickerPanelComponent } from '@shared/components/color-picker/color-picker-panel.component'; import { TbIconComponent } from '@shared/components/icon.component'; import { HintTooltipIconComponent } from '@shared/components/hint-tooltip-icon.component'; +import { StringAutocompleteComponent } from '@shared/components/string-autocomplete.component'; export function MarkedOptionsFactory(markedOptionsService: MarkedOptionsService) { return markedOptionsService; @@ -374,6 +375,7 @@ export function MarkedOptionsFactory(markedOptionsService: MarkedOptionsService) ToggleOption, ToggleSelectComponent, UnitInputComponent, + StringAutocompleteComponent, MaterialIconsComponent, RuleChainSelectComponent, TbIconComponent, @@ -609,6 +611,7 @@ export function MarkedOptionsFactory(markedOptionsService: MarkedOptionsService) ToggleOption, ToggleSelectComponent, UnitInputComponent, + StringAutocompleteComponent, MaterialIconsComponent, RuleChainSelectComponent, TbIconComponent, diff --git a/ui-ngx/src/assets/help/en_US/widget/lib/indicator/shape_attribute_fn.md b/ui-ngx/src/assets/help/en_US/widget/lib/indicator/shape_attribute_fn.md new file mode 100644 index 0000000000..f2e69877d2 --- /dev/null +++ b/ui-ngx/src/assets/help/en_US/widget/lib/indicator/shape_attribute_fn.md @@ -0,0 +1,69 @@ +#### Shape attribute name + +A string expression value that allows you dynamically select shape image depending on attribute name (ex. tankShape). + +**Attribute values that could be used to add the image:** + +Alt text + +``` +Vertical Oval +{:copy-code} +``` +Alt text + +``` +Vertical Cylinder +{:copy-code} +``` +Alt text + +``` +Vertical Capsule +{:copy-code} +``` +Alt text + +``` +Rectangle +{:copy-code} +``` +Alt text + +``` +Horizontal Oval +{:copy-code} +``` +Alt text + +``` +Horizontal Ellipse +{:copy-code} +``` +Alt text + +``` +Horizontal Dish Ends +{:copy-code} +``` +Alt text + +``` +Horizontal Cylinder +{:copy-code} +``` +Alt text + +``` +Horizontal Capsule +{:copy-code} +``` +Alt text + +``` +Horizontal 2:1 Elliptical +{:copy-code} +``` + +
+
diff --git a/ui-ngx/src/assets/locale/locale.constant-en_US.json b/ui-ngx/src/assets/locale/locale.constant-en_US.json index efb94c7782..7a4622d6e4 100644 --- a/ui-ngx/src/assets/locale/locale.constant-en_US.json +++ b/ui-ngx/src/assets/locale/locale.constant-en_US.json @@ -4229,20 +4229,20 @@ "carat": "Carat", "cubic-millimeter": "Cubic Millimeter", "cubic-centimeter": "Cubic Centimeter", - "cubic-meter": "Cubic Meter/s", - "cubic-kilometer": "Cubic Kilometers", + "cubic-meter": "Cubic Meter", + "cubic-kilometer": "Cubic Kilometer", "microliter": "Microliter", "milliliter": "Milliliter", "liter": "Liter", "hectoliter": "Hectolitre", "cubic-inch": "Cubic Inch", "cubic-foot": "Cubic Foot", - "cubic-yard": "Cubic Yards", + "cubic-yard": "Cubic Yard", "fluid-ounce": "Fluid Ounce", "pint": "Pint", "quart": "Quart", "gallon": "Gallon", - "oil-barrels": "Oil Barrels", + "oil-barrels": "Oil Barrel", "cubic-meter-per-kilogram": "Cubic Meter per Kilogram", "gill": "Gill", "hogshead": "Hogshead", @@ -4286,7 +4286,6 @@ "ton-force-per-square-inch": "Ton-force per Square Inch", "kilonewton-per-square-meter": "Kilonewton per Square Meter", "newton-per-square-millimeter": "Newton per Square Millimeter", - "microjoule": "Microjoule", "millijoule": "Millijoule", "joule": "Joule", @@ -4912,6 +4911,7 @@ "title-max-length": "Title should be less than 256", "description": "Description", "image-preview": "Image preview", + "order": "Order", "add-widgets-bundle-text": "Add new widgets bundle", "no-widgets-bundles-text": "No widgets bundles found", "empty": "Widgets bundle is empty", @@ -5009,6 +5009,7 @@ "title-icon": "Title icon", "display-icon": "Display title icon", "card-icon": "Card icon", + "icon": "Icon", "icon-color": "Icon color", "icon-size": "Icon size", "advanced-settings": "Advanced settings", @@ -5029,7 +5030,9 @@ "show-card-buttons": "Show card buttons", "card-border-radius": "Card border radius", "card-appearance": "Card appearance", - "color": "Color" + "color": "Color", + "tooltip": "Tooltip", + "units-required": "Unit is required." }, "widget-type": { "import": "Import widget type", @@ -5353,10 +5356,14 @@ "ticks-settings": "Ticks settings", "min-value": "Minimum value", "max-value": "Maximum value", + "min-value-short": "min", + "max-value-short": "max", "start-ticks-angle": "Start ticks angle", "ticks-angle": "Ticks angle", + "major-ticks": "Major ticks", "major-ticks-count": "Major ticks count", "major-ticks-color": "Major ticks color", + "minor-ticks": "Minor ticks", "minor-ticks-count": "Minor ticks count", "minor-ticks-color": "Minor ticks color", "tick-numbers-font": "Tick numbers font", @@ -5368,21 +5375,29 @@ "units-font": "Units text font", "value-box-settings": "Value box settings", "show-value-box": "Show value box", + "value-box": "Value box", "value-int": "Digits count for integer part of value", + "value-text": "Value text", + "value-text-shadow": "Value text shadow", "value-font": "Value text font", + "rect-stroke-color-start": "Rectangle stroke color - start gradient", + "rect-stroke-color-end": "Rectangle stroke color - end gradient", + "background-color": "Background color", + "shadow-color": "Shadow color", "value-box-rect-stroke-color": "Value box rectangle stroke color", "value-box-rect-stroke-color-end": "Value box rectangle stroke color - end gradient", "value-box-background-color": "Value box background color", "value-box-shadow-color": "Value box shadow color", "plate-settings": "Plate settings", - "show-plate-border": "Show plate border", + "show-plate-border": "Plate border", "plate-color": "Plate color", "needle-settings": "Needle settings", "needle-circle-size": "Needle circle size", "needle-color": "Needle color", + "needle-color-start": "Needle color - start gradient", "needle-color-end": "Needle color - end gradient", "needle-color-shadow-up": "Upper half of the needle shadow color", - "needle-color-shadow-down": "Drop shadow needle color", + "needle-color-shadow-down": "Drop shadow", "highlights-settings": "Highlights settings", "highlights-width": "Highlights width", "highlights": "Highlights", @@ -5392,7 +5407,8 @@ "no-highlights": "No highlights configured", "add-highlight": "Add highlight", "animation-settings": "Animation settings", - "enable-animation": "Enable animation", + "enable-animation": "Animation", + "animation-duration-rule": "Animation duration and rule", "animation-duration": "Animation duration", "animation-rule": "Animation rule", "animation-linear": "Linear", @@ -5407,17 +5423,21 @@ "animation-debounce": "Debounce", "animation-delastic": "Delastic", "linear-gauge-settings": "Linear gauge settings", + "bar-stroke": "Bar stroke", "bar-stroke-width": "Bar stroke width", "bar-stroke-color": "Bar stroke color", - "bar-background-color": "Gauge bar background color", + "bar-background-color": "Bar background color - start gradient", "bar-background-color-end": "Bar background color - end gradient", "progress-bar-color": "Progress bar color", + "progress-bar": "Progress bar", + "progress-bar-color-start": "Progress bar color - start gradient", "progress-bar-color-end": "Progress bar color - end gradient", "major-ticks-names": "Major ticks names", "show-stroke-ticks": "Show ticks stroke", "major-ticks-font": "Major ticks font", "border-color": "Border color", "border-width": "Border width", + "needle-circle": "Needle circle", "needle-circle-color": "Needle circle color", "animation-target": "Animation target", "animation-target-needle": "Needle", @@ -5461,7 +5481,18 @@ "tick-color": "Tick color", "tick-values": "Tick values", "no-tick-values": "No tick values configured", - "add-tick-value": "Add tick value" + "add-tick-value": "Add tick value", + "gauge-appearance": "Gauge appearance", + "units-title": "Units title", + "value": "Value", + "ticks": "Ticks", + "arrow-and-scale-color": "Arrow and scale default color", + "scale-settings": "Scale settings", + "scale": "Scale", + "scale-color": "Scale colors", + "compass-appearance": "Compass appearance", + "labels": "Labels", + "label-style": "Label style" }, "gpio": { "pin": "Pin", @@ -6065,6 +6096,52 @@ "value-card-style": "Value card style", "auto-scale": "Auto scale" }, + "liquid-level-card": { + "layout-simple": "Simple", + "layout-percentage": "Percentage", + "layout-absolute": "Absolute", + "layout": "Layout", + "background-overlay": "Value background overlay", + "total-volume": "Total volume", + "tank": "Tank", + "shape": "Shape", + "datasource-units": "Source units", + "widget-units": "Widget units", + "decimals": "Decimals", + "liquid": "Liquid", + "liquid-color": "Liquid color", + "value": "Value", + "value-font": "Value font", + "level": "Level", + "last-update": "Last update", + "shape-by-attribute": "Set tank shape by attribute name", + "tooltip-background": "Background color", + "background-blur": "Background blur", + "tank-color": "Tank color", + "static": "Static", + "see-examples": "See examples", + "attribute": "Attribute", + "shape-type": "Type", + "v-oval": "Vertical Oval", + "v-cylinder": "Vertical Cylinder", + "v-capsule": "Vertical Capsule", + "rectangle": "Rectangle", + "h-oval": "Horizontal Oval", + "h-ellipse": "Horizontal Ellipse", + "h-dish-ends": "Horizontal Dish Ends", + "h-cylinder": "Horizontal Cylinder", + "h-capsule": "Horizontal Capsule", + "h-elliptical_2_1": "Horizontal 2:1 Elliptical", + "icon": "Card icon", + "title": "Card title", + "units": "Units", + "color-and-font": "Color and font", + "shape-attribute-name": "Attribute name", + "total-volume-required": "Total volume is required.", + "attribute-name-required": "Attribute name is required.", + "attribute-key-not-set": "Attribute '{{attributeName}}' key not set", + "attribute-key-invalid": "Attribute '{{attributeName}}' key is invalid" + }, "aggregated-value-card": { "subtitle": "Subtitle", "chart": "Chart", diff --git a/ui-ngx/src/assets/metadata/units.json b/ui-ngx/src/assets/metadata/units.json index 5d680c6e2c..3237d6620b 100644 --- a/ui-ngx/src/assets/metadata/units.json +++ b/ui-ngx/src/assets/metadata/units.json @@ -249,7 +249,7 @@ }, { "name": "unit.liter", - "symbol": "l", + "symbol": "L", "tags": ["volume","capacity","extent","liter","liters","l"] }, { @@ -1113,7 +1113,7 @@ "symbol": "%", "tags": ["power source","state of charge (SoC)","battery","battery level","level","humidity","moisture","percentage", "relative humidity","water content","soil moisture","irrigation","water in soil","soil water content","VWC", - "Volumetric Water Content","Total Harmonic Distortion","THD","power quality","UV Transmittance","%"] + "Volumetric Water Content","Total Harmonic Distortion","THD","power quality","UV Transmittance","%", "capacity"] }, { "name": "unit.rssi", diff --git a/ui-ngx/src/assets/widget/liquid-level/shapes/horizontal-2_1-elliptical.svg b/ui-ngx/src/assets/widget/liquid-level/shapes/horizontal-2_1-elliptical.svg new file mode 100644 index 0000000000..d6196e5f71 --- /dev/null +++ b/ui-ngx/src/assets/widget/liquid-level/shapes/horizontal-2_1-elliptical.svg @@ -0,0 +1,50 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ui-ngx/src/assets/widget/liquid-level/shapes/horizontal-capsule.svg b/ui-ngx/src/assets/widget/liquid-level/shapes/horizontal-capsule.svg new file mode 100644 index 0000000000..20319f34e7 --- /dev/null +++ b/ui-ngx/src/assets/widget/liquid-level/shapes/horizontal-capsule.svg @@ -0,0 +1,49 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ui-ngx/src/assets/widget/liquid-level/shapes/horizontal-cylinder.svg b/ui-ngx/src/assets/widget/liquid-level/shapes/horizontal-cylinder.svg new file mode 100644 index 0000000000..e05fb41e99 --- /dev/null +++ b/ui-ngx/src/assets/widget/liquid-level/shapes/horizontal-cylinder.svg @@ -0,0 +1,56 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ui-ngx/src/assets/widget/liquid-level/shapes/horizontal-dish-ends.svg b/ui-ngx/src/assets/widget/liquid-level/shapes/horizontal-dish-ends.svg new file mode 100644 index 0000000000..af0195c782 --- /dev/null +++ b/ui-ngx/src/assets/widget/liquid-level/shapes/horizontal-dish-ends.svg @@ -0,0 +1,50 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ui-ngx/src/assets/widget/liquid-level/shapes/horizontal-ellipse.svg b/ui-ngx/src/assets/widget/liquid-level/shapes/horizontal-ellipse.svg new file mode 100644 index 0000000000..5d0c0b2307 --- /dev/null +++ b/ui-ngx/src/assets/widget/liquid-level/shapes/horizontal-ellipse.svg @@ -0,0 +1,61 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ui-ngx/src/assets/widget/liquid-level/shapes/horizontal-oval.svg b/ui-ngx/src/assets/widget/liquid-level/shapes/horizontal-oval.svg new file mode 100644 index 0000000000..86af838fb2 --- /dev/null +++ b/ui-ngx/src/assets/widget/liquid-level/shapes/horizontal-oval.svg @@ -0,0 +1,61 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ui-ngx/src/assets/widget/liquid-level/shapes/rectangle.svg b/ui-ngx/src/assets/widget/liquid-level/shapes/rectangle.svg new file mode 100644 index 0000000000..800093c1d4 --- /dev/null +++ b/ui-ngx/src/assets/widget/liquid-level/shapes/rectangle.svg @@ -0,0 +1,49 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ui-ngx/src/assets/widget/liquid-level/shapes/vertical-capsule.svg b/ui-ngx/src/assets/widget/liquid-level/shapes/vertical-capsule.svg new file mode 100644 index 0000000000..dde2f5b903 --- /dev/null +++ b/ui-ngx/src/assets/widget/liquid-level/shapes/vertical-capsule.svg @@ -0,0 +1,49 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ui-ngx/src/assets/widget/liquid-level/shapes/vertical-cylinder.svg b/ui-ngx/src/assets/widget/liquid-level/shapes/vertical-cylinder.svg new file mode 100644 index 0000000000..7c15c4af9f --- /dev/null +++ b/ui-ngx/src/assets/widget/liquid-level/shapes/vertical-cylinder.svg @@ -0,0 +1,57 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ui-ngx/src/assets/widget/liquid-level/shapes/vertical-oval.svg b/ui-ngx/src/assets/widget/liquid-level/shapes/vertical-oval.svg new file mode 100644 index 0000000000..89dd578803 --- /dev/null +++ b/ui-ngx/src/assets/widget/liquid-level/shapes/vertical-oval.svg @@ -0,0 +1,56 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ui-ngx/src/form.scss b/ui-ngx/src/form.scss index 93272af3ca..3b29fe986c 100644 --- a/ui-ngx/src/form.scss +++ b/ui-ngx/src/form.scss @@ -368,14 +368,20 @@ .mat-mdc-text-field-wrapper { .mat-mdc-form-field-icon-suffix { padding: 0; - display: none; + display: flex; + align-items: center; + + > *:not(.tb-suffix-show-always) { + display: none; + } } } &:hover { .mat-mdc-text-field-wrapper { .mat-mdc-form-field-icon-suffix { - display: flex; - align-items: center; + > * { + display: block; + } } } } diff --git a/ui-ngx/src/styles.scss b/ui-ngx/src/styles.scss index 0ee154cf7d..ee6f6374cf 100644 --- a/ui-ngx/src/styles.scss +++ b/ui-ngx/src/styles.scss @@ -342,6 +342,12 @@ mat-label { } } +mat-icon { + &.tb-error { + color: rgb(221, 44, 0); + } +} + .tb-error-messages { height: 24px; //30px margin-top: -6px; @@ -356,6 +362,13 @@ mat-label { color: rgb(221, 44, 0); } +.mat-mdc-tooltip.tb-error-tooltip { + .mdc-tooltip__surface { + background-color: rgba(209, 39, 48, 0.12); + color: rgba(209, 39, 48, 1); + } +} + .tb-autocomplete { .mat-mdc-option { border-bottom: 1px solid #eee;